Помогите понять смысл задачи!?
В картотеке поликлиники значатся доктора и пациенты. С использованием типа:
type личность=record
фамилия:тип;
инициалы:тип;
г.рождения:тип;
адрес:тип;
end;
Вывести на экран фамилии пациентов заданного специалиста.
Я понимаю так, что нужно создать массив пациентов с указанием больных органов и массив окторов с указанием органов которые они лечат. А потом по полю записи доктора органы которые он лечит сделать выборку пациентов у которых эти ограны больны. Правильно я понимаю?
Чёт мудрено больно. И как это сделать? Кто знает помогите пожалуйста.
Заранее благодарен за любую помощь или подсказку.
...
type личность=record
фамилия:тип;
инициалы:тип;
г.рождения:тип;
адрес:тип;
end;
Вывести на экран фамилии пациентов заданного специалиста.
Я понимаю так, что нужно создать массив пациентов с указанием больных органов и массив окторов с указанием органов которые они лечат. А потом по полю записи доктора органы которые он лечит сделать выборку пациентов у которых эти ограны больны. Правильно я понимаю?
...
В принципе, правильно. Но я бы логично дополнил сведения о пациенте ещё и болезнью, поскольку всё равно где-то это надо фиксировать. В этой записи собраны только относительно постоянные признаки пациентов, а вот где хранятся сами болезни - непонятно. Либо условие задачи неполно, либо надо дополнить запись полем для заболевания. А так всё логично.
Вот только немогу сообразить как построить соответствие специальности доктора и болезни пациента. Зациклило.
Согласен.
Вот только немогу сообразить как построить соответствие специальности доктора и болезни пациента. Зациклило.
сделать в записях для докторов целочисленный идентификатор для доктора, а в записях для пациентов - целочисленное поле "доктор". в это поле заносить идентфикатор соответствующего доктора.
Ведь я предполагаю, что по пациенту должно вводится: Фамилия, инициалы, год рождения, адрес, и больной орган. А по доктору: Фамилия, инициалы, год рождения, адрес, и специальность.
Нужно как-то построить взаимосвязь между больными органами и специальностью?
Вот только немогу сообразить как построить соответствие специальности доктора и болезни пациента
и после этого ты говоришь, что идентификатор усложнит? а как ты хочешь связывать две записи?
смотри, у тебя есть две записи:
больной:
Фамилия, инициалы, год рождения, адрес, и больной орган.
врач:
Фамилия, инициалы, год рождения, адрес, и специальность.
связь между ними следующая - если у больного болит нога - ему к хирургу. поэтому в поле орган и специальность у тебя (теоретически) должны быть одинаковые записи. но так делать некрасиво, потому, что данные поля - "описательные". поэтому и надо ввести дополнительное поле - идентификатор болезни. скажем хирургу будет соответствовать 1. тогда у всех больных, которым надо к хирургу, надо в это поле завести 1.
теперь связь прослеживается? если нужно найти всех больных лечашихся у конкретного врача - берем записи больных, выбираем наше новое поле и смотрим, у каких врачей поле идентификатора болезни соответствует. и наоборот.
Я бы сделал так:
type INITIAL=record
F, I, O : string;
end;
{Пациент}
type Person=record
Surname:string;
Initials:INITIAL;
BirthDate:TDate;
Address:string;
Troubles : array of string;
end;
type Doctor=record
Initials : INITIAL; {инициалы доктора}
Surname : string;
Troubles : array of string;
end;
type Trouble=record
TroubleName : string;
Clients : array of Person; {пациенты, которые болеют этим}
Doctors : array of Doctor; {доктора, которые лечат это}
end;
function IsHealth(trouble: string; doc : Doctor):boolean;
var i:integer;
begin
Result:=false;
for i:=0 to Length(Doctor.Troubles)-1 do
if trouble=Doctor.Troubles[ i ] then
begin
Result:=true;
break;
end;
end;
var Doctors : array of Doctor;
Clients : array of Person;
Troubles : array of Trouble;
selectedDoctor : string;
i : integer;
begin
SetLength(Doctors, 3);
...{заполняем докторов}
SetLength(Clients, 10);
..{заполняем пациентов}
{заполняем список болезней}
readln(selectedDoctor); {фамилия доктора}
for i:=0 to Length(Troubles)-1 do
for g:=0 to Length(Troubles[ i ].Doctors)-1 do
if Troubles[ i ].Doctors[g].Surname=selectedDoctor then {выводим список клиентов}
for z:=0 to (Troubles[ i ].Doctors[g].Clients)-1 do writeln(Troubles[ i ].Doctors[g].Clients[z]);
end.
Естественно, что это самый примитивный вариант. Линейный поиск будет тормозить, если клиника большая, поэтому лучше организовать хэширование таблиц.
Задача решена и сдана.