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

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

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

> Таблица рекордов
Rocket
сообщение 13.05.2007 21:28
Сообщение #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)
Rocket
сообщение 14.05.2007 16:41
Сообщение #2


Знаток
****

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

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


Так в чём ошибка,ребята?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.05.2007 18:05
Сообщение #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;
...

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


Знаток
****

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

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


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

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

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

 



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