Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик по разработке ПО1.DOC
Скачиваний:
29
Добавлен:
01.05.2014
Размер:
1.97 Mб
Скачать

2.5. Алгоритмы процессов.

Процесс 1.1.1 : «Поиск имени и определение пути».

Входные данные:

Поток данных: Запрос1 Хранилище: Семья

Выходные данные:

Поток данных: Ответ1

Алгоритм:

if (Семья не пуста)

{

запомнить позицию хвоста

запомнить позицию головы

while (голова не ровна хвостуl)

{

сохранить имя текущего человека

if (сравнить это имя с имя1) сохранить указатель

перейти на следующего человека

}

переместиться к хвосту

запомнить имя человека в хвосте

if (сравнить это имя с имя1) сохранить указатель

}

//определение пути

-------------------------

CPerson *p;

if (имя2=текущему имени) вернуть указатель на текущую персону

if ((есть отец) && (не пришли только что от отца))

{

внести в ответ1 1

увеличить число чисел в ответе1 на 1

вызвать функцию Поиска пути для этой персоны

if (найден путь) вернуть переданный указатель

}

if ((есть супруг/а) && (не пришли только что от этой персоны))

{

if (женского пола) внести в ответ1 5

else внести в ответ1 4

увеличить число чисел в ответе1 на 1

вызвать функцию Поиска пути для этой персоны

if (найден путь) вернуть переданный указатель

}

if ((есть ребенок 1) && (не пришли только что от этой персоны))

{

if (женского пола) внести в ответ1 3

else внести в ответ1 2

увеличить число чисел в ответе1 на 1

вызвать функцию Поиска пути для этой персоны

if (найден путь) вернуть переданный указатель

}

if ((есть ребенок 2) && (не пришли только что от этой персоны))

{

if (женского пола) внести в ответ1 3

else внести в ответ1 2

увеличить число чисел в ответе1 на 1

вызвать функцию Поиска пути для этой персоны

if (найден путь) вернуть переданный указатель

}

if ((есть ребенок 3) && (не пришли только что от этой персоны))

{

if (женского пола) внести в ответ1 3

else внести в ответ1 2

увеличить число чисел в ответе1 на 1

вызвать функцию Поиска пути для этой персоны

if (найден путь) вернуть переданный указатель

}

в случае не удачи вернуть ноль

-----------------------------------------

Процесс 1.1.2 : «Обработка пути».

Входные данные:

Поток данных: Ответ1

Хранилище: Таблица связей

Выходные данные:

Поток данных: Ответ2

Алгоритм:

индекс для прохода по массиву Ответ1=0

while(число в Ответ1 не 0)

{

следующему числу от текущего в ответе1

= значение из Хранилище: Таблица связей с

индексом (текущее значение Ответ1, следующее значение)

увеличить индекс в ответе1

}

ответ2= ответ1 в текущей позиции.

Процесс 1.1.3 : «Обработка».

Входные данные:

Поток данных: Ответ2

Хранилище: Связь

Выходные данные:

Поток данных: Связь

Алгоритм:

if (Ответ2=0) связь ="Связь не найдена";

else связь= Хранилище: Связь с индексом(Ответ2)

Процесс 1.1.4 : «Вывод дерева».

Входные данные:

Поток данных: Имя1

Алгоритм:

запомнить позицию хвоста

запомнить позицию головы

while (голова не ровна хвостуl)

{

создать новый корень с именем текущего человека

if (мужчина) s="Пол: мужской";

else s="Пол: женский";

создать ответвление с названием s

if (есть отец)

{

s="Отец: ";

s+=получить имя отца;

создать ответвление с названием s

}

if (женат/замужем)

{

if (мужчина) s="Супруга: ";

else s="Супруг: ";

s+=получить имя супруга;

создать ответвление с названием s

}

if (есть ребенок 1)

{

if (мужчина) s="Сын: ";

else s="Дочь: ";

s+=получить имя ребенка;

создать ответвление с названием s

}

if (есть ребенок 2)

{

if (мужчина) s="Сын: ";

else s="Дочь: ";

s+=получить имя ребенка;

создать ответвление с названием s

}

if (есть ребенок 3)

{

if (мужчина) s="Сын: ";

else s="Дочь: ";

s+=получить имя ребенка;

создать ответвление с названием s

}

перейти на следующего человека

}

переместиться к хвосту

повторить операцию

Процесс 1.2.1.1. : «Найти».

Входные данные: