смысл задачи след. дана база данных по электродвигателям, хранится в файле. в ней содержится информация о типе двигателя, напряжении, мощности, и т.д.. сама задача состоит в том, чтобы выбрать из файла инфу обо всех двигателях на заданное напряжение и обеспечить возможность полного просмотра выбранной инфы в порядке возрастания мощности двигателя. т.е. как я поняла...отсортировать файл по мощности и обеспечить поиск по напряжению, но вот код ошибки выдает и отказывается работать...плиз, хэлп...
Код:
program zadacha_31;
uses crt;
type owner=record
tip:string[30];
Unom:integer;
Pnom:real;
Wnom:integer;
Mnom:real;
KPD:real;
end;
ownerptr=^ownerin;
ownerin=record
dat:owner;
next:ownerptr;
end;
var
karta:owner;
f:file of owner;
first:ownerptr;
ow:owner;
fname:string;
{ tip_:string;}
Unom_:integer;
{ Pnom_:real;
Wnom_:integer;
Mnom_:real;
KPD_:real; }
ch:char;
procedure File_create;
var sym:char; i:integer;
begin
clrscr;
rewrite(f);
repeat
with ow do
begin
write('tip dvigatelya - ');
readln(tip);
write('nominalnoe napryajenie - ');
readln(Unom);
write('nominalnaya mojnost - ');
readln(Pnom);
write('nominalnaya chastota vraschenia - ');
readln(Wnom);
write('nominalnyi moment vraschenia - ');
readln(Mnom);
write('KPD - ');
readln(KPD);
end;
write(f,ow);
write('Prodoljit ? [y(a)/n(i)]');
readln(sym);
until sym in ['N','n','I','i'];
close(f);
end;
procedure Sort_List_create(var first:ownerptr);
var tek,tek1,pred:ownerptr;
begin
reset(f);
first:=nil;
while not(eof(f)) do
begin
new(tek);
read(f,tek^.dat);
tek^.next:=nil;
if first= nil
then first:=tek
else
begin
tek1:=first;
pred:=nil; while (tek<>nil) and
(tek^.dat.Pnom>tek1^.dat.Pnom) do
begin
pred:=tek1;
tek1:=tek1^.next;
end;
if tek1=first then
begin
tek^.next:=first;
first:=tek;
end
else
begin
tek^.next:=pred^.next;
pred^.next:=tek;
end;
end;
end;
end;
procedure print(var first:ownerptr);
var i:integer;
tek:ownerptr;
begin
clrscr;
tek:=first;
while tek<>nil do
begin
with tek^.dat do
write(tip,' ':30-length(tip),Unom:5,' ',Pnom:7:3,' ',
Wnom:5,' ',Mnom:7:3,' ',KPD:7:3,' ');
writeln;
tek:=tek^.next;
end;
writeln;
writeln('najmite ENTER');
readln;
end;
Procedure poisk(fname:string; Unom_:integer);
Var napr: integer;
flag:boolean;
i:integer;
Begin
assign(f, fname);
reset(f);
begin
writeln ('vvedite napryagenie dlya poiska');
readln (Unom_);
flag:=false;
while not eof(f) do
begin
read (f,karta);
If (karta.Unom=Unom_) then with karta do
begin
writeln('tip dvigatelya - ',tip);
writeln('nominalnoe napryajenie - ',Unom);
writeln('nominalnaya mojnost - ',Pnom);
writeln('nominalnaya chastota vraschenia - ',Wnom);
writeln('nominalnyi moment vraschenia - ',Mnom);
writeln('KPD - ',KPD);
Flag:=true;
end;
End;
if not flag then writeln ('ne naideno!');
Writeln ('nagmite Enter');
Readln;
End;
End;
Begin
assign(f, 'd:\as\dvig.dat');
{$i-}
reset(f);
{$i-}
{if ioresult<>0 then } File_create;
repeat
clrscr;
writeln('1.sortirovka');
writeln('2.poisk');
writeln('3.exit');
ch:=readkey;
case ch of
#49:
begin
sort_list_create(first);
writeln('*************************************************************');
writeln('skorrektirovannyi spisok');
print(first);
writeln('*************************************************************');
end;
#50:
begin
write('pit i imya faila');
readln(fname);
write('vvedite iskomoe napryajenie: ');
readln(Unom_);
poisk(fname,Unom_);
writeln('*************************************************************');
writeln('naidennie dannie');
print(first);
writeln('*************************************************************');
end;
end;
until ch=#51;
exit;
END.
end.