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

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

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

Автор: shutka 13.05.2007 17:01

Ребята!!!Помогите пожалуйста!!!Мне необходимо отсортировать записи в типизированном файле по полю строкового типа.Вот листинг всей программы!Я не знаю,как вывести результаты на экран..Подскажите?!

program zadan2;
uses crt;
type Tanim=record
Fio:string;
Name:string;
Poroda:string;
age:byte;
end;
const n=3;adr:string='an.doc';
var anim:array[1..n]of Tanim;
fan:file of Tanim;i,a:byte;b:string;K:integer;
function Compare(a, b: String): Integer;
var
i, n, lA, lB: Integer;
function Min(a, b: Integer): Integer;
begin
if a < b then
Min := a
else
Min := b;
end;
begin
lA := Length(a);
lB := Length(b);
n := Min(lA, lB);
i := 1;
while (i <= n) and (a[i] = b[i]) do inc(i);
if (i > n) then begin
if (lA = lB) then Compare := 0
else
if lA > lB then Compare := - 1
else Compare := 1;
end
else
if ord(a[i]) < ord(b[i]) then
Compare := 1
else
Compare := -1
end;

begin
Assign(fan,adr);
rewrite(fan);
writeln('Введите данные по каждому животному');
for i:=1 to n do begin with anim[i] do
begin
write('Введите ФИО владельца животного: ');readln(FIO);
write('Введите кличку животного: ');readln(Name);
write('Введите породу: ');readln(Poroda);
write('Введите возраст: ');readln(age);
end;
write(fan,anim[i]);end;
close(fan);
reset(fan);
writeln;
writeln('Введите возраст животного ');readln(a);
for i:=1 to n do begin
with anim[i] do
if age=a then begin
writeln('Животные такого возраста:');
writeln('Фамилия владельца: ',Fio,';Кличка животного: ',Name,';порода: ',Poroda);
end;end;
writeln;
write('Введите кличку ');readln(b);
for i:=1 to n do begin
with anim[i] do
if Name=b then begin
writeln('Данные о животных с такой кличкой:');
writeln('ФИО владельца: ',Fio,';возраст животного: ',age,';порода: ',Poroda);
end;end;
writeln;

for i:=1 to n do {здесь надо зделать сортировку по породам животных}
begin
k:=compare(anim[i].poroda,anim[i+1].poroda);
if k=-1 then begin
writeln(fan,anim[i+1],anim[i]);end;

end;


Close(fan);
end.


Автор: shutka 15.05.2007 15:05

Все!!!Решила!!!Если кому надо будет, то вот!!!


program zadan2;
uses crt;
const n=3;adr:string='an.dat';
type Trecanim=record
Fio:string;
Name:string;
Poroda:string;
age:byte;
end;
Tanim=array[1..n]of Trecanim;
Tfan=file of Tanim;

var
i,a1,j:byte;b1:string;anim:Tanim;fan:Tfan;

procedure Sort(var b:Tanim); {сортировка записи}
var
temp : Trecanim;
flag : boolean;
begin
repeat
flag := true;
for i := 1 to n - 1 do
if not (b[i].poroda <= b[i+1].poroda) then begin
temp := b[i];
b[i] := b[i + 1];
b[i + 1] := temp;
flag := false;
end;
until flag;
end;
begin
Assign(fan,adr);
rewrite(fan);
writeln('Введите данные по каждому животному');
for i:=1 to n do begin with anim[i] do
begin
write('Введите ФИО владельца животного: ');readln(FIO);
write('Введите кличку: ');readln(Name);
write('Введите породу: ');readln(Poroda);
write('Введите возраст: ');readln(age);
end;
write(fan,anim);end;
close(fan);
reset(fan);
writeln;
writeln('Введите возраст животного ');readln(a1);
for i:=1 to n do begin
with anim[i] do
if age=a1 then begin
writeln('данные о животных такого возраста:');
writeln('ФИО владельца: ',Fio,';кличка животного: ',Name,';порода: ',Poroda);
end;end;
writeln;
write('Введите кличку животного ');readln(b1);
for i:=1 to n do begin
with anim[i] do
if Name=b1 then begin
writeln('данные о животных с такой кличкой:');
writeln('ФИО владельца: ',Fio,';возраст животного: ',age,';порода: ',Poroda);
end;end;
writeln;
for j:=1 to n do sort(anim);
for i:=1 to n do begin
with anim[i] do
writeln('ФИО владельца: ',Fio,';кличка животного: ',Name,';возраст животного: ',age,';порода: ',Poroda);
end;
Close(fan);

end.
smile.gif

Автор: Гость 12.12.2007 16:24



накониц-то НАШЕЛ эту хрень!!! Ты просто МегА-тЁлка! СпасибО!