Fatal:syntax error,"UNTIL" expected but "indentifier RESET" found - Free Pascal
Формулировка задачи:
Написала программы а компилятор выдает ошибку что делать??
program lab6;
uses crt;
type
avtor=record
fam:string[12];
im:string[3];
ot:string[3];
end;
izdanie=record
izdat:string[21];
gorod:string[16];
god:integer;
kolstr:integer;
end;
book=record
a:avtor;
nazv:string[49];
izd:izdanie;
prod:array[1..3] of integer;
end;
var
f1:text;
fname:string[80];
res:integer;
otv:char;
books1:array[1..100] of book;
books2:array[1..100] of book;
min:array[1..100] of integer;
i,j,n,m:integer;
namegorod:string[16];
minium:integer;
begin
clrscr;
repeat
writeln('Enter file name');
write('->');
readln(fname);
assign(f1,fname)
{$I-}
reset(f1);{Вот тут показывает ошибку!!}
{$I+}
res:=IOResuet;
if res<>0 then
begin
writeln;
writeln('Error');
writeln('y-yes,n-no');
readln(otv);
writeln;
end;
until (res=0) or (otv='n');
i:=1;
while not EOF(f1) do
begin
with books1[i] do
readln(f1,a.fam,a.im,a.ot,nazv,izd.izdat,izd.gorod,izd.god,izd.kolstr,prod[1],prod[2],prod[3]);
i:i+1;
end;
n:=i-1;
close(f1);
assign(f1,'vspom.txt')
reset(f1);
read(f1,namegorod);
close(f1);
j:=1;
for i:=1 to n do
if books1[i].izd.gorod=namegorod then
begin
books2[j]:=books1[i];
j:=j+1;
end;
m:=j-1;
for j:=1 to m do
with books2[j] do
begin
minium:=prod[1];
if prod[2]<minium then
mimium:=prod[2];
if prod[3]<minium then
minium:=prod[3];
min[j]:=minium;
end;
writeln;
writeln('Enter file name');
write('->');
readln(fname);
assign(f1,fname);
rewrite(f1);
for j:=1 to m do
with books2[j] do
begin
write(f1,a.fam,a.im,a.ot,nazv,izd.izdat,izd.dorod,izd.god,izd.kolstr,' ',prod[1],' ',prod[2],' ',prod[3]);
writeln(f1,' ',min[j]);
end;
close(f1);
write('press any key');
readkey;
end.Решение задачи: «Fatal:syntax error,"UNTIL" expected but "indentifier RESET" found»
textual
Листинг программы
program lab6;
uses crt;
type
avtor=record
fam:string[12];
im:string[3];
ot:string[3];
end;
izdanie=record
izdat:string[21];
gorod:string[16];
god:integer;
kolstr:integer;
end;
book=record
a:avtor;
nazv:string[49];
izd:izdanie;
prod:array[1..3] of integer;
end;
var
f1:text;
fname:string[80];
res:integer;
otv:char;
books1:array[1..100] of book;
books2:array[1..100] of book;
min:array[1..100] of integer;
i,j,n,m:integer;
namegorod:string[16];
minimum:integer;
begin
clrscr;
repeat
writeln('Enter file name');
write('->');
readln(fname);
assign(f1,fname);
{$I-}
reset(f1);{TюЄ ЄєЄ яюърчvтрхЄ ю°шсъє!!}
{$I+}
res:=IOResult;
if res <> 0 then
begin
writeln;
writeln('Error');
writeln('y-yes,n-no');
readln(otv);
writeln;
end;
until (res=0) or (otv='n');
i:=1;
while not EOF(f1) do
begin
with books1[i] do
readln(f1,a.fam,a.im,a.ot,nazv,izd.izdat,izd.gorod,izd.god,izd.kolstr,prod[1],prod[2],prod[3]);
i:=i+1;
end;
n:=i-1;
close(f1);
assign(f1,'vspom.txt');
reset(f1);
read(f1,namegorod);
close(f1);
j:=1;
for i:=1 to n do
if books1[i].izd.gorod=namegorod then
begin
books2[j]:=books1[i];
j:=j+1;
end;
m:=j-1;
for j:=1 to m do
with books2[j] do
begin
minimum:=prod[1];
if prod[2]<minimum then
minimum:=prod[2];
if prod[3]<minimum then
minimum:=prod[3];
min[j]:=minimum;
end;
writeln;
writeln('Enter file name');
write('->');
readln(fname);
assign(f1,fname);
rewrite(f1);
for j:=1 to m do
with books2[j] do
begin
write(f1,a.fam,a.im,a.ot,nazv,izd.izdat,izd.gorod,izd.god,izd.kolstr,' ',prod[1],' ',prod[2],' ',prod[3]);
writeln(f1,' ',min[j]);
end;
close(f1);
write('press any key');
readkey;
end.
Объяснение кода листинга программы
Список элементов кода:
- Объявление типов данных:
- avtor: record, содержащий поля fam, im, ot типа string[12], string[3], string[3] соответственно.
- izdanie: record, содержащий поля izdat, gorod, god, kolstr типа string[21], string[16], integer, integer соответственно.
- book: record, содержащий поля a, nazv, izd типа avtor, string[49], izdanie соответственно.
- var: объявить переменные f1 типа text, fname типа string[80], res типа integer, otv типа char, books1 типа array[1..100] of book, books2 типа array[1..100] of book, min типа array[1..100] of integer, i, j, n, m типа integer, namegorod типа string[16], minimum типа integer.
- Ввод имени файла с помощью цикла repeat-writeln-readln.
- Чтение данных из файла в массив books1 с помощью цикла while not EOF(f1) do и метода readln.
- Определение количества книг в массиве books1 с помощью переменной n.
- Закрытие файла f1.
- Переименование файла f1 в 'vspom.txt'.
- Открытие файла f1 для чтения с помощью метода reset.
- Чтение названия города из файла в переменную namegorod с помощью метода read.
- Закрытие файла f1.
- Объявление переменной j равной 1.
- Поиск книг из города namegorod в массиве books1 с помощью цикла for i:=1 to n и оператора if.
- Объявление переменной m равной количеству найденных книг.
- Запись минимальных значений prod[1], prod[2], prod[3] в массив min.
- Ввод имени файла с помощью цикла writeln-write-readln.
- Переименование файла f1 в имя, введенное пользователем.
- Открытие файла f1 для записи с помощью метода assign и rewrite.
- Запись данных из книг, найденных в массиве books2, в файл f1 с помощью цикла for j:=1 to m и оператора write.
- Закрытие файла f1.
- Вывод сообщения
press any keyи чтение ключа с помощью функции readkey. - Окончание работы программы.