Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Сортировка и файлы

Автор: tory 24.04.2007 20:21

Задача такая:
Создать файл с записями.
Выполнить сортировку по стоимости устройств.
Создать файл с отсортированными записями.
Что-то наваял, но доделать не могу.
Помогите...

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




Прикрепленные файлы
Прикрепленный файл  LABR.PAS ( 2.49 килобайт ) Кол-во скачиваний: 236

Автор: volvo 24.04.2007 20:26

Тебе после сортировки массива надо не заполнять файл заново запросом данных у пользователя, а просто записать в него содержимое массива...

Автор: tory 25.04.2007 16:16

а как это сделать?

Автор: volvo 25.04.2007 16:58

Добавляешь ещеодну процедуру:

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); {закрываем файл}

Автор: Гость 26.04.2007 0:45

спасибо!