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

Тема в разделе "Delphi - FAQ", создана пользователем Ruschel, 1 июл 2008.

  1. Ruschel

    Ruschel Гость

    Всем привет! Задали сделать задачку, состоящую из 2 частей, 1 часть сделал, а во второй есть напряги. Значит собсно условие задачи:
    Входной файл я сделал в формате:
    Код (Text):
    Астафьева  Ксения    1 0 1 1 0
    ...............................
    где "Астафьева* "-фамилия, 12 позиций, "Ксения "-имя,10 позиций, "1 0 1 1 0" - группа(0..2), состояние врачей по порядку(0-болен, 1-здоров).
    Чтобы было проще, выложу первую часть проги:
    [codebox]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);
    if i=j then
    begin
    if z.vrach=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);[/codebox]
    (*требования препода - переносить по максимуму в локальные параметры процедур\функций)
    По второй(и 1 вопрос по первой) задаче вознивают вопросы:
    1) Каким алгоритмом реализовать сортировку записей?
    2) Как трансформировать из цифр (состояния здоровья, группа и т.д.) в "полную информацию по группе детей"?
    3)(1 и 2 задача) - как поставить лимит записей?

    Буду очень рад, если поможете написать код 2 части или хотя бы часть подскажите!
    Всем заранее спасибо!
     
  2. etc

    etc Гость

    Вам про типизораванные файлы еще не рассказывали?
    Любым. А ваще закиньте записи в какой-нибудь список/коллекцию, где есть метод Sort.
    Тут не понятно.
    Тупо в коде. Если записей 100 то все в сад.


    Еще почитайте про set'ы.
     
  3. Ruschel

    Ruschel Гость

    1) Что значит закинуть в список\коллекцию? Может вы про Дельфи имеете ввиду, так мне надо на турбо паскале. Про типизораванные файлы не расказывали, только про типизированные, но причём тут они и ответ на вопрос по сортировке записей?
    2) Ну у меня во входном файле информация введена почти по типу булеана, а не словами "здоров", группа "старшая" ну и т.д, но вот на экран надо вывести всё в тексте, а не как во входном файле
    3) В текстовых файлах не работают функции filepos и filesize, поэтому надо как-то по другому....но я уже реализовал, засунув сразу после repeat счётчик
    Код (Text):
    n:=n+1;
    if n>100 then
    break;
     
  4. etc

    etc Гость

    Хм, сори, действительно сразу не заметил. Тогда сортировку только руками, наверное, хотя невкурсе, может и там чего есть.
    Но типизированные файлы есть и в турбо паскале, а спросил, потому как с ними работать гораздо удобнее.
    И вот это не понял:
    С сетами это просто решаетться, держиться рядом масив[ы] с этими самыми - "здоров", группа "старшая" ну и т.д, а потом по индексу достаете все что нужно. Преимуществ масса.
     
  5. Ruschel

    Ruschel Гость

    ну если входной должен быть текстовый, то тип. и нетип. вид файлов сразу отпадает))), а следовательно большинство удобных функций тоже отпадает(( По крайней мере так в паскале....
    Мда, видать придётся изучать сеты, мы просто до них видимо, как и до библиотек и тому прочее ещё не дошли))
    Буду рад услышать от участников форума ещё идеи по поводу сортировки записей...
     
  6. astronom

    astronom Гость

    Можно объявить входной файл как нетипизированный и сразу получить в распоряжение filepos seek и т.п.
    Насчет сортировки ... если файл небольшой (в смысле, записей не несколько тысяч штук), то можно просто сделать массив записей (в смысле. record) . В каждую запись занести номер первого символа строки (т.е., смещение начала строки относительно начала файла), номер последнего символа и имя ребенка. Потом отсортировать этот массив и переписать исходный файл. :(

    Кстати, раз уж в условии задачи не указано, что входной файл должен быть отсортирован по алфавиту, то кажется разумным сгруппировать в нем записи по группам детей (интересный каламбур :( ), т.е. собрать вместе все записи о детях младшей группы, отдельно - средней и старшей. По-моему, так будет проще работать с файлом.
     
Загрузка...
Похожие Темы - Задача на сортировку
  1. elzim
    Ответов:
    0
    Просмотров:
    932
  2. ShaoKahn
    Ответов:
    0
    Просмотров:
    1.128
  3. eremin-sanek
    Ответов:
    3
    Просмотров:
    1.107
  4. MonteCristo
    Ответов:
    1
    Просмотров:
    852
  5. bort
    Ответов:
    1
    Просмотров:
    1.181

Поделиться этой страницей