Помощь - Поиск - Пользователи - Календарь
Полная версия: Странная ошибка
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Mars
program kursov;
uses crt;
type
student=record
name:string[23]; {имя и инициалы}
number:integer; {номер группы}
ball:array[1..5] of integer; {успеваемость}
srball:real; {средняя оценка}
end;

const
max=100; {количество записей}
d=' ';
var
f1:file of student; {файловая переменная массива}
a:array [1..max] of student; {массив записей}
zap:student;
num:integer; {общее количество записей в массиве}
i,j:integer;
gg:longint;
sel:integer; {выбор пункта меню}
key1,key2:string;
key3,key4,key5:integer; {ключи для поиска, задаваемые пользователем}
sum:longint; {сумма значений полей}
err:integer;
zap1,zap2:integer; {обмен записей}
m1,m2:student; {для сортировки записей}
m,n:string; {строки для сортировки}
s:boolean; {ключ сортировки}
buf:student; {буферная запись для обмена}
filename:string; {имя файла с записями}
z:string; {фильтрация пробелов}
pball:string[9]; {Оценки для ввода и вывода}
error,x,y,dx,dy:integer;

{описание процедур}
procedure menu; forward;
procedure zapis; forward;

procedure shapka; {заголовок таблицы}
begin
writeln (' ТАБЛИЦА ЗАПИСЕЙ');
writeln;
writeln('г=========================T============'+
'T==============T==========¬');
writeln ('¦ ФАМИЛИЯ И.О. ¦ № Группы ¦ Успеваемость ¦ Ср. Балл ¦');
writeln('¦=========================+============'+
'+==============+==========¦');
end;

procedure read; {процедура добавления записи в файл}{(2 подпрограмма)}
begin
clrscr; {ассоциация с файлом и переход в конец}
writeln (' ДОБАВЛЕНИЕ ЗАПИСЕЙ В ФАЙЛ');
writeln;
write (' Введите имя файла ');
readln (filename);
assign (f1,filename);
reset (f1);
if not eof(f1) then begin
gg:=filesize(f1);
seek(f1,gg);
end;

clrscr;
writeln (' ВВОД ЗАПИСЕЙ');
writeln;
write (' Введите количество записей ');
readln (num);
for i:=1 to num do
begin
clrscr;
writeln;
writeln (' ЗАПИСЬ ',i);
with zap do
begin
write (' Фамилия И.О. ');
readln (name);
write (' № Группы ');
readln (number);
Writeln (' Успеваемость');
writeln (' Введите оценку ');
for j:= 1 to 5 do
begin
write (' №',j,' ');
readln (ball[j]);
end;

{Подсчет Среднего Балла}
sum:=0;
for j:=1 to 5 do
sum:=sum+ball[j];
srball:=sum/5;

end;

write(f1,zap);

end;
close(f1);
menu;
end; {процедура добавления записи в файл}{(конец 2 подпрограммы)}

procedure view; {вывод массива на экран}{процедура просмотра файла}
{(5 подпрограмма)}
begin
clrscr;
writeln (' ПРОСМОТР ФАЙЛА');
writeln;
write (' Введите имя файла ');
readln (filename);
assign (f1,filename);
reset (f1);
clrscr;
shapka;
while (not Eof(f1)) do
begin
read ******* (f1,zap); - Здесь возникает ошибка
with zap do
begin
write ('¦ ',name:23,' ¦ ');
write (number:10,' ¦ ');
for i:=1 to 5 do write(ball,' ');
write (' ',' ¦ ');
write (srball:6:2,' ¦');
writeln;
end;
end;
writeln('L=========================¦============'+
'¦==============¦==========-');
readkey;
menu;
end; {вывод массива на экран}{процедура просмотра файла}
{(конец 5 подпрограммы)}

procedure new; {процедура создания нового файла}
{(1 подпрограмма)}
begin
clrscr;
Writeln(' Введите имя файла');
Write(' ');
Readln(filename);
Assign(f1,filename);
Rewrite(f1);
Writeln('Файл с именем ',filename,' создан. Нажмите ENTER.');
readkey;
menu;
close(f1);
end;

procedure menu;
begin
clrscr;
writeln;
writeln;
writeln;
writeln;
writeln (' База данных ');
writeln;
writeln (' ------------------------------------');
writeln (' 1. Создание файла');
writeln (' 2. Добавление записи в файл');
writeln (' 3. Удаление указанной записи');
writeln (' 4. Корректировка указанной записи');
writeln (' 5. Просмотр файла');
writeln (' 6. Сортировка по возрастанию номера группы');
writeln (' 7. Вывод на дисплей при условии ср. балл >4.0');
writeln (' 8. Выход');
writeln (' ------------------------------------');
writeln;
write (' > ');
readln (sel);
case sel of
1:new;
2:read;
3:delete;
4:edit;
5:view;
6:sort;
7:display;
8:exit;
end;
end;


BEGIN
clrscr;
menu;
END.



В процедуре, которая под комментариями пятой считается, всё сделано довольно стандартно и вроде не должно появляться никаких ошибок, но вот что странно, на месте считывания с файла {там где ***} постоянно возникает ошибка 85, что пропущено ";". Причем не важно в какой части процедуры поставить этот read, как-будто паскаль специально его ищет и говорит об ошибке. Помогите пожалуйста, уже и не знаю что делать...
volvo
Mars, ну а что ты хотел? Ты же назвал одну из своих процедур Read, и этим ПЕРЕОПРЕДЕЛИЛ стандартную процедуру ввода Паскаля. А так как у твоей процедуры нет параметров, то компилятор совершенно прав, требуя ";" сразу после Read... Поменяй
procedure read; { <--- Здесь !!! }
begin
...
end;

имя на любое другое, и функциональность стандартного Read вернется... smile.gif
Но у тебя там дальше есть еще ошибки... :yes:
xds
Также можно воспользоваться указанием полных имён объектов, т. е. в виде <имя модуля>.<имя объекта>. В данном случае вызов стандартной псевдопроцедуры Read будет выглядеть как System.Read;, а вызов переопределённой - Read; или kursiv.Read;.
Mars
Спасибо вам насчёт read! А слона как говорится и не приметил!
p.s. volvo, ошибка наверное в выводе из файла элементов массива? Если да то знаю, это я так, скелет набросал, потом переделывать буду...
volvo
Цитата(Mars @ 17.09.2005 11:15)
volvo, ошибка наверное в выводе из файла элементов массива?

Нет, в косвенной рекурсии: из menu вызываются другие процедуры, в двух (?) из которых в свою очередь вызывается menu... У тебя стек что, резиновый? Ведь ни одна из menu не заканчивается, равно как и New (кстати, тоже зарезервированное слово Паскаля), и Read ...

Поищи по форуму, я уже где-то приводил опасности подобных вызовов, и способы правильной организации меню тоже.
Mars
Нажмите для просмотра прикрепленного файла

Вот программа, вроде всё работает, но может есть какие ошибки? Не подскажет ли кто-нибудь?
И ещё, если в файле, который просматривается >30 записей, то как лучше реализовать постраничное листание по файлу, например показались первые 20 записей, нажали <вниз> - следующие 20, <вверх> - предыдущие?

mars, в следующий раз приаттачивай такие большие исходники, подсветка синтаксиса притормаживает...
Mars
В связи с ненужностью, прошу volvo или других модераторов удалить тему и прикрепленный файл. Спасибо за помощь.

Тема временно скрыта по личной просьбе автора ...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.