IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Странная ошибка, ну никак не одолеть...
сообщение
Сообщение #1


Гость






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, как-будто паскаль специально его ищет и говорит об ошибке. Помогите пожалуйста, уже и не знаю что делать...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

имя на любое другое, и функциональность стандартного Read вернется... smile.gif
Но у тебя там дальше есть еще ошибки... :yes:
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Также можно воспользоваться указанием полных имён объектов, т. е. в виде <имя модуля>.<имя объекта>. В данном случае вызов стандартной псевдопроцедуры Read будет выглядеть как System.Read;, а вызов переопределённой - Read; или kursiv.Read;.


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Спасибо вам насчёт read! А слона как говорится и не приметил!
p.s. volvo, ошибка наверное в выводе из файла элементов массива? Если да то знаю, это я так, скелет набросал, потом переделывать буду...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата(Mars @ 17.09.2005 11:15)
volvo, ошибка наверное в выводе из файла элементов массива?

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

Поищи по форуму, я уже где-то приводил опасности подобных вызовов, и способы правильной организации меню тоже.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Прикрепленный файл  kursov.pas ( 12.16 килобайт ) Кол-во скачиваний: 584


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

mars, в следующий раз приаттачивай такие большие исходники, подсветка синтаксиса притормаживает...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






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

Тема временно скрыта по личной просьбе автора ...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 25.04.2024 15:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name