Помощь - Поиск - Пользователи - Календарь
Полная версия: Сортировка и файлы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
tory
Задача такая:
Создать файл с записями.
Выполнить сортировку по стоимости устройств.
Создать файл с отсортированными записями.
Что-то наваял, но доделать не могу.
Помогите...
Program Modul;
uses crt;
const
   n = 3;
type
      TRec = record {базовый тип, хранит информацию об устройстве}
      Name : string[10]; {наименование устройства}
      Ves : real;
      Vus : real;
      Dli : real;
      Shi : real;
      Stoim : real;
      end;
    TBase = array [1..n] of TRec; {база данных: информация об устройствах}
    TFile = file of Tbase;{файл для хранения базы данных}
procedure Input (var b : Tbase; var f : TFile); {ввод данных}
var
   i : byte;
begin
   for i := 1 to n do begin
      writeln('Запись N ',i);
      write('Naimenovanie ustroistva : '); readln(b[i].name);
      write('Ves : '); readln(b[i].Ves);
      write('Vusota : '); readln(b[i].Vus);
      write('Dlina : '); readln(b[i].Dli);
      write('Shirina : '); readln(b[i].Shi);
      write('Stoimost : '); readln(b[i].Stoim);
      readln;
   end;
write(f,b); {записываем базу данных в файл}
end;
procedure Print(var b : Tbase; var f : TFile); {вывод данных}
var
   i : byte;
begin
    {чтение базы из файла}
   for i := 1 to n  do
          begin
       write(' ':6,i);
       write(' ':1,b[i].name:5);
       write(' ':11,b[i].Ves:5);
       write(' ':2,b[i].Vus:5);
       write(' ':1,b[i].Dli:5);
       write(' ':3,b[i].Shi:5);
       write(' ':2,b[i].Stoim:5);
       writeln;
   end;
end;
procedure Sort(var b : TBase); {сортировка записи}
var
   i : byte;
   temp : TRec;
   flag : boolean;
begin
   repeat
      flag := true;
      for i := 1 to n - 1 do
       if not (b[i].Stoim >= b[i+1].Stoim) then begin
          temp := b[i];
          b[i] := b[i + 1];
          b[i + 1] := temp;
          flag := false;
       end;
   until flag;
end;
var
   base : TBase;
   baseFile : Tfile;
begin
	clrscr;
        assign(baseFile, 'c:\ustrojstva.db');
        rewrite(baseFile); {открываем файл для записи}
        writeln ('Vvod dannux : ');
        Input(base, baseFile);
        Print (base, baseFile);
         Sort(base);
   writeln;
writeln(' ':5,'|---|--------------|--------|-----------------------------|----------|');
writeln(' ':5,'|   |Naimenovanie  |   Ves  |        Gabaritu, cm         | Stoim    |');
writeln(' ':5,'    | ustroistva   |   kG   | Vusota  |  Dlina  |Shirina  |  grn     |');
writeln(' ':5,'|---|--------------|--------|---------|---------|---------|----------|');
      Print(base, baseFile);
      Input(base, baseFile);{производим запись в файл}
      readln;
      close(baseFile); {закрываем файл}
      readln;
end.


 ! 
Пользуйся тегами !
klem4

volvo
Тебе после сортировки массива надо не заполнять файл заново запросом данных у пользователя, а просто записать в него содержимое массива...
tory
а как это сделать?
volvo
Добавляешь ещеодну процедуру:
procedure Output(var b : Tbase; var f : TFile); { вывод данных }
var i : byte;
begin
  reset(f); { <--- Переходим к началу файла }
  for i := 1 to n do
    write(f, b[i]) { <--- и пишем все записи из массива }
end;


а в основной программе меняешь:

      Print(base, baseFile);
      Output(base, baseFile); { <--- Вот тут не Input, а Output }
      readln;
      close(baseFile); {закрываем файл}
Гость
спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.