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

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

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

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


Гость






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

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


N337
****

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

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


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


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


Гость






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


Гость






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

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

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


Гость






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


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

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

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


Гость






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

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

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

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

 



- Текстовая версия 19.06.2025 13:39
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"