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

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

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

> Таблица рекордов
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

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


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

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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 3)
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

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


Так в чём ошибка,ребята?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Ну, как же
Цитата
в чём ошибка
?

Смотри:
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;
...

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


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

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


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

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

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

 





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