Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите понять смысл задачи!?

16K
28 мая 2006 года
SergSIS
8 / / 26.05.2006
Задача:
В картотеке поликлиники значатся доктора и пациенты. С использованием типа:
type личность=record
фамилия:тип;
инициалы:тип;
г.рождения:тип;
адрес:тип;
end;
Вывести на экран фамилии пациентов заданного специалиста.

Я понимаю так, что нужно создать массив пациентов с указанием больных органов и массив окторов с указанием органов которые они лечат. А потом по полю записи доктора органы которые он лечит сделать выборку пациентов у которых эти ограны больны. Правильно я понимаю?
Чёт мудрено больно. И как это сделать? Кто знает помогите пожалуйста.
Заранее благодарен за любую помощь или подсказку.
241
29 мая 2006 года
Sanila_san
1.6K / / 07.06.2005
Цитата:
Originally posted by SergSIS
...
type личность=record
фамилия:тип;
инициалы:тип;
г.рождения:тип;
адрес:тип;
end;
Вывести на экран фамилии пациентов заданного специалиста.

Я понимаю так, что нужно создать массив пациентов с указанием больных органов и массив окторов с указанием органов которые они лечат. А потом по полю записи доктора органы которые он лечит сделать выборку пациентов у которых эти ограны больны. Правильно я понимаю?
...



В принципе, правильно. Но я бы логично дополнил сведения о пациенте ещё и болезнью, поскольку всё равно где-то это надо фиксировать. В этой записи собраны только относительно постоянные признаки пациентов, а вот где хранятся сами болезни - непонятно. Либо условие задачи неполно, либо надо дополнить запись полем для заболевания. А так всё логично.

16K
29 мая 2006 года
SergSIS
8 / / 26.05.2006
Согласен.
Вот только немогу сообразить как построить соответствие специальности доктора и болезни пациента. Зациклило.
2
29 мая 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by SergSIS
Согласен.
Вот только немогу сообразить как построить соответствие специальности доктора и болезни пациента. Зациклило.


сделать в записях для докторов целочисленный идентификатор для доктора, а в записях для пациентов - целочисленное поле "доктор". в это поле заносить идентфикатор соответствующего доктора.

16K
29 мая 2006 года
SergSIS
8 / / 26.05.2006
По моему целочисленный индетификатор только усложнит программу.
Ведь я предполагаю, что по пациенту должно вводится: Фамилия, инициалы, год рождения, адрес, и больной орган. А по доктору: Фамилия, инициалы, год рождения, адрес, и специальность.
Нужно как-то построить взаимосвязь между больными органами и специальностью?
2
29 мая 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by SergSIS

Вот только немогу сообразить как построить соответствие специальности доктора и болезни пациента


и после этого ты говоришь, что идентификатор усложнит? а как ты хочешь связывать две записи?

смотри, у тебя есть две записи:

больной:
Фамилия, инициалы, год рождения, адрес, и больной орган.

врач:
Фамилия, инициалы, год рождения, адрес, и специальность.

связь между ними следующая - если у больного болит нога - ему к хирургу. поэтому в поле орган и специальность у тебя (теоретически) должны быть одинаковые записи. но так делать некрасиво, потому, что данные поля - "описательные". поэтому и надо ввести дополнительное поле - идентификатор болезни. скажем хирургу будет соответствовать 1. тогда у всех больных, которым надо к хирургу, надо в это поле завести 1.
теперь связь прослеживается? если нужно найти всех больных лечашихся у конкретного врача - берем записи больных, выбираем наше новое поле и смотрим, у каких врачей поле идентификатора болезни соответствует. и наоборот.

273
01 июня 2006 года
3A3-968M
1.2K / / 22.12.2005
На SQL бы отбабахать...
Я бы сделал так:
Код:
{Инициалы доктора/пациента}
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.

Естественно, что это самый примитивный вариант. Линейный поиск будет тормозить, если клиника большая, поэтому лучше организовать хэширование таблиц.
16K
01 июня 2006 года
SergSIS
8 / / 26.05.2006
Всем большое СПАСИБО.
Задача решена и сдана.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог