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

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

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

Автор: smith 27.06.2010 23:03

 program kolvoavto;
uses crt;
type avtomobili=record
marka:string;
familiya:string;
nomer:string;
end;
var
f:file of avtomobili;
avto:avtomobili;
n,i,kvo,i1:integer;
marka1,pos:string;
begin
pos:='poschitano';
clrscr;
writeln('vvedite kolvo mashin');
readln(n);
assign(f,'avto.dat');
rewrite(f);
for i:=1 to n do begin
with avto do begin
writeln('vvedi marku avto# ',i);
readln(marka);
writeln('vvedi familiu vladeltsa# ',i);
readln(familiya);
writeln('vvedi nomer mashiny# ',i);
readln(nomer);
end;
write(f,avto);
end;
close(f);
reset(f);
for i:=1 to n do begin
read(f,avto);
i1:=1;
if avto.marka<>'poschitano' then begin
marka1:=avto.marka;
inc(kvo);
avto.marka:='poschitano';
repeat
read(f,avto);
if avto.marka=marka1 then begin
inc(kvo);
avto.marka:='poschitano';
writeln(avto.marka);
end;
until(eof(f));
writeln(marka1);
writeln(kvo);
end
else
begin
inc(i1);
seek(f,i1);
end;
end;
readln;
end.


Помогите! Диск рид эррор выдает.
Кто-нибудь! завтра с утра сдавать программу!

Автор: Сергей Меркурьев 27.06.2010 23:46

Ошибка вызвана тем, что ты пытаешься считать то, что находится после конца файла!

for i:=1 to n do begin
read(f,avto);

Если у тебя задано 1 авто. То в этом случае ты просто читаешь "авто", а потом опять начинаешь читать уже с конца файла новые данные в этом месте:
repeat
read(f,avto);
if avto.marka=marka1 then begin
inc(kvo);
avto.marka:='poschitano';
writeln(avto.marka);
end;
until(eof(f));

Автор: smith 27.06.2010 23:48

мм... как это исправить?)

Автор: Сергей Меркурьев 27.06.2010 23:55

Для начала объясни, что делает твой алгоритм.