Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Паскаль. Записи


Автор: Zoyka 21.4.2010, 19:43
База данных содержит фамилию пациента и диагноз. Написать программу, определяющую пациентов с наиболее распространенным заболеванием.

Базаданных задается самостоятельно (30 записей)


Код

Uses crt;

Type BazaDannyx=record
FIO: string[40];
Diagnoz: string[50];
end;
Var pacient:array [1..30] of BazaDannyx;
i:integer;
Begin;
clrscr;
for i:=1 to 30 do
begin
writeln ('bbedite FIO' ,i, '-ogo pacienta');
readln (pacient[i].FIO);
writeln ('bbedite Diagnoz',i,'-ogo pacienta');
readln (pacient[i].Diagnoz);
end;
End.



вот мой код, нужно только поставить проверку на распространенный диагноз.


M
THandle
Модератор: используйте подсветку кода!

Автор: Romtek 22.4.2010, 12:08
Задача аналогична поиску самого частовстречаемого элемента в массиве (анализ частот).

Тебе нужно завести дополнительный массив DiseaseTable размером в общее число болезней (или с запасом, если неизвестно; их может быть больше количества пациентов) и, проходя поочерёдно по записям пациентов, обновлять (предыдущее значение+1) счётчик частоты встречаемости: Inc(DiseaseTable[k].count); где k - индекс болезни в таблице известных болезней DiseaseTable.

1. Пройдясь по записям пациентов (FOR TO), заполнить таблицу DiseaseTable всем разнообразием болезней, одновременно обнуляя счётчик частоты встречаемости.
В итоге должно быть подобно этому:

болезнь | частота
-----------------------
болезнь1 | 0
болезнь2 | 0
болезнь3 | 0
болезнь4 | 0
болезнь5 | 0
...

Заносить нужно, проверяя, что болезни не повторяются в таблице.

2. Заново пройдясь по записям пациентов, заполнить таблицу DiseaseTable частотой встречаемости, в зависимости от диагноза болезни:

болезнь | частота
-----------------------
болезнь1 | 2
болезнь2 | 1
болезнь3 | 5
болезнь4 | 4
болезнь5 | 4
...


3. Отсюда видно, что болезнь3 является самой распространённой. А это и есть поиск максимального числа в массиве DiseaseTable.

4. Поиск с выводом на экран пациентов, удовлетворяющих условию:
болезнь пациента[k] = распространённая болезнь (IF THEN)

То есть, последний, 3-й, проход по записям пациентов.

Добавлено через 11 минут и 31 секунду
Вот дополнительное описание таблицы DiseaseTable
Код


Type
    DisFreq = Record { частота конкретной болезни }
        disease: string[50];
        count: word
    end;
    
Const
    MaxDis = 30;
    
Var
    DiseaseTable: Array [1 .. MaxDis] Of DisFreq;


Автор: Zoyka 22.4.2010, 23:05
Хм..я понять - то поняла, да и впринципе думала вроде того же, только проблема у меня и заключается в том, что я не могу реализовать..=(

Автор: Romtek 23.4.2010, 16:28
Если поняла - дерзай. Нет - спрашивай. Задание то ведь твоё, а не моё.
Не знаешь как пройтись по всем введённым записям? Операторы условия ещё не изучали?

Оперировать различными структурами данных ты уже должна уметь, так что шаг за шагом, по пунктам, попытайся решать. Говорят, помогает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)