Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2013, 05:49   #1
Starget-93
Пользователь
 
Регистрация: 12.11.2012
Сообщений: 11
По умолчанию Разработать алгоритм

Разработать алгоритм и написать программу, которая дает ответ на вопрос.
Заданы два человека – p и q. Ответить, являются ли они родственниками.
Starget-93 вне форума Ответить с цитированием
Старый 11.01.2013, 08:26   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

дык, очевидно же, перебрать всех родственников для одного человека (например, для p), для каждого родственника проверять, есть ли он в списке родственников другого (в данном случае - для q).
Если нашлось совпадение - то прерывание цикла перебора - выход по true (p и q являются родственниками),
если дошли до конца цикла и ни одного совпадения не было - выход по false (p и q не являются родственниками).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.01.2013, 09:17   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1. взять пустое множество.
2. добавить человека p.
3. добавить его родителей и прямых потомков.
4. для каждого вновь добавленного выполнить п.3. (рекурсия однако)
5. после добавления проверить наличие в множестве q.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 11.01.2013, 11:45   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Является ли родственником брат моей бывшей жены?
EUGY вне форума Ответить с цитированием
Старый 11.01.2013, 11:54   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
1. взять пустое множество.
2. добавить человека p.
3. добавить его родителей и прямых потомков.
4. для каждого вновь добавленного выполнить п.3. (рекурсия однако)
5. после добавления проверить наличие в множестве q.
Можно сразу отвечать "да", ибо существовала генетическая Ева. Вопрос в том, транзитивно ли отношение "быть родственником"...
Abstraction вне форума Ответить с цитированием
Старый 11.01.2013, 12:48   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Можно сразу отвечать "да", ибо существовала генетическая Ева
Замечание к п.3. полностью согласен. Там не того же чего нет и в постановке задачи.
Цитата:
Заданы два человека – p и q
А вот чего там нет подождем реакции TС.

Цитата:
транзитивно ли отношение "быть родственником"

предположим что нет.
тогда возможна ситуация p родственник q, но q не родственник p. что противоречит постановке задачи.
Цитата:
являются ли они родственниками
значит все-таки транзитивна?

3.м добавить прямых(непосредственных) родственников.

6. выполнить теже действия (1-5) для q.

Но нетранзитивность отношений явно выходит за пределы уровня задания.
Интересно дождемся ли мы автора?
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 11.01.2013 в 12:53.
evg_m вне форума Ответить с цитированием
Старый 11.01.2013, 12:55   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
тогда возможна ситуация p родственник q, но q не родственник p. что противоречит постановке задачи.
Это симметричность, а не транзитивность.

Я полагаю, что следует вводить понятие "степени не-родства", которое для любых отношений больше нуля, суммируется по цепочкам отношений, и при степени не-родства больше некоторой человек перестаёт считаться родственником.
Abstraction вне форума Ответить с цитированием
Старый 11.01.2013, 13:00   #8
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Транзитивность:
если А # B, и B # С, то A # C.
Где # - операции соотношений.
Вадим Мошев вне форума Ответить с цитированием
Старый 15.02.2013, 09:57   #9
Starget-93
Пользователь
 
Регистрация: 12.11.2012
Сообщений: 11
По умолчанию

Прошу прощение за долгое отсутствие. Вообщем, решил реализовать программу через матрицу смежности (что правда оказалось неправильным решением).
Текст программы:
PHP код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;

// Поиск путей из вершины s в вершины графа
int n;
int c[6*6];            // Номера предшествующих вершин
int a[6][6]={
    
1,1,0,1,0,0,    // Матрица смежности
    
1,1,0,1,0,0,
    
0,0,1,1,0,0,
    
1,1,1,1,0,1,
    
0,0,0,0,1,1,
    
0,0,0,1,1,};

void f(int pint q)
{
    if(
a[p][q] == 1)
        
cout << p+<< " и " << q+<< " родственники!" << endl;
    else 
cout << p+<< " и " << q+<< " не родственники!" << endl;
}
void main()
{
    
SetConsoleCP(GetACP());
    
SetConsoleOutputCP(GetACP());
    
int pq;
    
cout << "Введите первого человека: "cin >> p;
    
cout << "Введите второго человека: "cin >> q;
    
f(p-1q-1);

Программу же нужно реализовать через два массива: заданы n человек и два массива натуральных чисел mother[n] и father[n], такие, что mother[i] – номер матери i-го человека, а father[i] – номер его отца, для каждого i, удовлетворяющего неравенствам 0 <= i <= n-1. Насколько я понимаю, тут принцип будет похожий, т.е. сравнивание по одинаковым элементам, но видимо уже не с 0 и 1. Вопрос только каким образом реализовать.

Последний раз редактировалось Starget-93; 15.02.2013 в 12:48.
Starget-93 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как разработать алгоритм? dania23 Помощь студентам 7 22.05.2012 21:56
Разработать алгоритм. Mathcad. iDron Помощь студентам 2 18.12.2011 09:14
разработать алгоритм программы и ее написания katerina17171 Помощь студентам 3 15.10.2011 07:11
Разработать алгоритм наведения ракеты на цель. KennyMc Помощь студентам 8 19.07.2011 20:36
Разработать рекурсивный алгоритм lucky Паскаль, Turbo Pascal, PascalABC.NET 4 08.05.2009 15:04