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 
 К началу страницы 
+ Ответить 
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 10:34
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"