Спасибо всем экспертам, ответившим на мой вопрос (#107). В приложении прога, которая читает вводимые данные и записывает в файл, ну и выводит на экран этот список и количество пациентов с первой группой крови. Но никак не получается отсортировать этих пациентов (с 1 группой крови) по алфавиту. Заводить доп. массив или как? В общем, просветите поподробней в этом вопросе. X-RayMan давай мыло или ответь сюда.
Приветствую Вас, Vova! Сортировка... А как ты собираешься сортировать в массиве из 10-ти элементов? У тебя что, все пациенты в него влезут? Для сортировки тебе нужно либо пытаться всех пациентов в память засунуть, либо считывать по порядку.
Ответ отправлен: 02.12.2002, 17:33 Отправитель: Ayl Отвечает Sensey
Добрый день, Vova! 0. Сортировка пузырьком. Долго и примитивно. Если хочь быстро сортировать - найди книгу Кнута том 3. var temp:TMember; ... for i:=1 to j-1 do for k:=i+1 to j do begin if mbs[k].blood<>1 then continue; if mbs[k].name begin temp:=mbs[k];mbs[k]:=mbs[i];mbs[i]:=temp; end; end;
1. При открытии файла если он не существует - ошибка. Пример процедуры, в кот. указано, как это делается: procedure OpenFile(var f:file;s:string); begin assign(f,s);{$I-}reset(f);{$I+} if IOResult<>0 then begin writeln('File not found -',s);halt; end; end;
2. У тебя массив записей - используй типизированный файл, а не текстовый f:file of TMember; тогда запись в него Write(f,Mbs[i]) и чтение соответственно Read(f,Mbs[i]); Например
чтение файла и подсчет кол-ва записей соответственно: OpenFile(f,'a.txt'); j:=0; while not eof(f) do begin read(f,mbs[j]);inc(j); end;
ЗЫ Писалось все без проверки в Паскале. ибо некогда. Извини за возможные синтаксич ошибки. Если же не разберешься - милости просим... Ответ отправлен: 02.12.2002, 17:38 Отправитель: Sensey Отвечает Vadim
Здравствуйте, Vova! Проще всего использовать объект TSortedCollection из модуля OBJECTS. У него есть метод COMPARE, в котором задается правило сортировки. И ненадо будет самому изголяться и что-то придумывать :). Если нужны подробности - пиши. Ответ отправлен: 03.12.2002, 05:09 Отправитель: Vadim Отвечает X-RayMan
Доброго времени суток, Vova! Лови на мыло. Единственное чего я не понял, это как должны располагаться отсортированные пациенты первой группы. На тех же местах, только уже по алфавиту? Или в начале списка? Я сделал, что на своих прежних местах. Ответ отправлен: 02.12.2002, 21:44 Отправитель: X-RayMan Отвечает Melkor
Доброе время суток, Vova! Попробуй следующее: type TMembMass = array [1..10] of TMember; procedure SortByGroup1(var Mass: TMembMass); var Fl: Boolean; I: Byte; Temp: TMember; begin repeat Fl = 1; for I := 1 to 9 do if (Mass[I].bl = 1) and (Mass[I].Name > Mass[I + 1].Name) then begin Temp := Mass[I]; Mass[I] := Mass[I + 1]; Mass[I + 1] := Temp; Fl := 0; end; until Fl; end; Ответ отправлен: 03.12.2002, 00:59 Отправитель: Melkor
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.