Задача на сортировку записей и вывод части из них по условию (Pascal)

Ответить
Ruschel
Сообщения: 2
Зарегистрирован: 01 июл 2008, 17:03

Всем привет! Задали сделать задачку, состоящую из 2 частей, 1 часть сделал, а во второй есть напряги. Значит собсно условие задачи:
В файле данных хранится информация о каждом из воспитанников детского сада: фамилия, имя, название группы (младшая средняя старшая), заключение о состоянии здоровья("здоров" или "нуждается в лечении") каждого из четырёх специалистов - невропатолога, отоларинголога, ортопеда и стоматолога.
Разработать и реализовать программу "Учёт результатов диспансеризации", которая считывает исходную информацию и позволяет организовать обработку следующих запросов:
1. Определить процентное соотношение здоровых и нуждающихся в лечении детей по заключению указанного в запросе специалиста;
2. Вывести на экран в удобной для пользователя форме полную информацию по указанной в запросе группе. При этом сведения должны быть упорядочены в алфавитном порядке.
Число воспитанников детского сада не превышает 100.
Входной файл я сделал в формате:

Код: Выделить всё

Астафьева   Ксения    1 0 1 1 0
...............................
где "Астафьева* "-фамилия, 12 позиций, "Ксения "-имя,10 позиций, "1 0 1 1 0" - группа(0..2), состояние врачей по порядку(0-болен, 1-здоров).
Чтобы было проще, выложу первую часть проги:

Код: Выделить всё

program prakt;
uses crt;
type zap=record
        family:string[12];
        name:string[10];
        gr:byte;
        vrach:array[1..4] of byte
     end;
var z:zap; inp:text; proc1:real;

procedure Procent(var proc:real);
var i,j,ln,bolnix,zdorov:byte; spec:string;
begin
 assign(inp,'C:\tp7\praktika\input.in');
 reset(inp);
 writeln('Учет результатов диспансеризации':55);
 write('Запрос 1: Укажите специалиста - '); read(spec);
 ln:=length(spec);
 case ln of
  12: j:=1;
  13: j:=2;
  7: j:=3;
  10: j:=4;
 end;
 bolnix:=0; zdorov:=0;
  repeat
    read(inp,z.family,z.name,z.gr);
    for i:=1 to 4 do
     begin
      read(inp,z.vrach[i]);
      if i=j then
      begin
        if z.vrach[i]=0 then
          bolnix:=bolnix+1
          else
           zdorov:=zdorov+1;
      end;
     end;
  readln(inp);
  until eof(inp);
  proc:=zdorov/(zdorov+bolnix)*100;
  writeln('У ',spec,' ',proc:3:2,'% здоровых, ',(100-proc):3:2,'% больных');
 close(inp);
 readkey;
end;

begin
clrscr;
{1 часть}
Procent(proc1);
(*требования препода - переносить по максимуму в локальные параметры процедур\функций)
По второй(и 1 вопрос по первой) задаче вознивают вопросы:
1) Каким алгоритмом реализовать сортировку записей?
2) Как трансформировать из цифр (состояния здоровья, группа и т.д.) в "полную информацию по группе детей"?
3)(1 и 2 задача) - как поставить лимит записей?

Буду очень рад, если поможете написать код 2 части или хотя бы часть подскажите!
Всем заранее спасибо!
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Лимит записей дан для того, чтобы можно было использовать массив, без него сортировку не сделать. Алгоритм сортировки можно использовать такой же, как и для чисел. Алгоритм должен быть в разделе "Алгоритмы", вообще я в этом разделе неоднократно приводил процедуру сортировки записей(ищите задачу о процессорах).
Ни что так не ограничивает фантазию программиста, как компилятор...
Ruschel
Сообщения: 2
Зарегистрирован: 01 июл 2008, 17:03

ну если не трудно можно показать как это реализовывается? просто всякие там "пузырьки" я пытался здесь реализовать, не получается(
это оно? http://forum.developing.ru/showpost.php ... ostcount=5
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Да, этот алгоритм подойдет.
Ни что так не ограничивает фантазию программиста, как компилятор...
Ответить