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

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

Форум «Всё о Паскале» _ Задачи _ Таблица рекордов

Автор: Rocket 14.05.2007 1:28

Вот две процедуры:


procedure ShowRecord;
type
rec=record
nikename:string[10];
points:longint;
end;

var f:file of rec;
rec_:array[1..6] of rec;
n,y:integer;
st:string;
begin
settextstyle(4,0,2);
setcolor(9);
y:=0;
assign(f,'Records.dat');
{$I-}
Reset(f);
{$I+}
seek(f,0);
for n:=1 to 5 do
begin
read(f,rec_[n]);
outtextxy(150,150+y,rec_[n].nikename);
str(rec_[n].points,st);
outtextxy(200,150+y,st);
y:=20;
end;
end;



procedure Records;
type
rec=record
nikename:string[10];
points:longint;
end;

var f:file of rec;
rec_:array[1..6] of rec;
n:integer;
extra1:longint; extra2:string;

begin
n:=0;
assign(f,'Records.dat');
{$I-}
Reset(f);
{$I+}
n:=filesize(f);
seek(f,n);
n:=n+1;
outtextxy(250,250,'Please,enter the nikename.');
readln(rec_[n].nikename);
rec_[n].points:=time;

if n=6 then

begin

for n:=1 to 6 do
begin
read(f,rec_[n]);
read(f,rec_[n+1]);
end;
if rec_[n].points<rec_[n+1].points then
begin
seek(f,n);
read(f,rec_[n]);
extra1:=rec_[n].points;
rec_[n].points:=rec_[n+1].points;
rec_[n+1].points :=extra1;
extra2:=rec_[n].nikename;
rec_[n].nikename:=rec_[n+1].nikename;
rec_[n+1].nikename:=extra2;
write(f,rec_[n]);
end;

seek(f,6);
read(f,rec_[6]);
seek(f,5);
write(f,rec_[6]);
truncate(f);

end

else write(f,rec_[n]);
end;

При выводе пишет: диск рид эррор! В чём ошибка? Подскажите ,пожалуйста! unsure.gif

Автор: Rocket 14.05.2007 20:41

Так в чём ошибка,ребята?

Автор: volvo 14.05.2007 22:05

Ну, как же

Цитата
в чём ошибка
?

Смотри:
n:=filesize(f); { число записей в файле }
...
if n = 6 then begin { запомни, n = 6 !!! }
...
for n:=1 to 6 do
begin
read(f,rec_[n]);
read(f,rec_[n+1]);
end;
...

Сколько ты прочел записей из файла в цикле? А сколько у тебя всего есть в файле? Вот тебе уже и чтение за пределами файла... Получите, распишитесь...

Автор: Rocket 14.05.2007 23:24

Моя задумка заключается в том,чтобы первые пять рекордов сначала записались в файл,а потом,когда добавлялся шестой, происходила сортировка от большего к меньшему. Или лучше как-то по другому это реализовать? Подскажите,пожалуйста.