Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2010, 18:06   #1
polarity
Пользователь
 
Регистрация: 30.05.2010
Сообщений: 30
Восклицание Сортировка

Было заполнение так называемой таблицы рекордов в игре через текстовый файл, вот фрагменты из программы :
Код:
type
  rec = record
    name : string;
    score,time: byte;
  end;

procedure TForm2.Button1Click(Sender: TObject);
var f:textfile;
    fil:rec;
 begin
  fil.name:=edit1.Text;
  fil.score:=StrToInt(edit2.text);
  fil.time:=StrToInt(edit3.Text);
  AssignFile(f,'score.txt');
  Append(f);
  Writeln(f,'__________________________');
  Writeln(f,'Имя : ',fil.name);
  Writeln(f,'Количество попыток : ',fil.score);
  Writeln(f,'Затраченное время  : ',fil.time,' cекунд');
  Writeln(f,'__________________________');
  CloseFile(f);
  ShowMessage('Ваш результат записан!');
  Form2.Close;
end;
Но препод сказал, чтобы была сортировка игроков по секундам.
Помогите пожалуйста осуществить, сдача послезавтра....
polarity вне форума Ответить с цитированием
Старый 07.06.2010, 14:43   #2
Snejnaya
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 219
По умолчанию

чтобы осуществить сортировку тебе так или иначе придется выгружать из файла его содержимое (если файл уже существует и не пустой).

Т.е.
1)файл был пустой, занесли в него первый результат
2)теперь в файле хранится первый результат, тебе нужно занести второй.
Выгружаешь из файла запись, если уже записанный результат лучше, чем тот, который ты хочешь внести, записываешь новый результат в конец файла (т.е. после первого результата), в противном случае перед первым результатом и т.д.

f:textfile
тебе нужно объявить файл записей, а не текстовый файл, чтобы при чтении файла считывать запись и иметь доступ к полю time.

type
RecordFile = file of record
name:string;
score,time:byte;
end;

var f: RecordFile;



Т.о. твой алгоритм выглядит как
1)открыли файл записей
2)читаем файл по одной записи до тех пор, пока не найдем результат, худший, чем тот, который хотим добавить.
3)С помощью функции FilePos определяем позицию курсора в файле и
устанавливаем позицию курсора на 1 меньше seek(f, FilePos(f)-1);
4)теперь записываем результат очередного спортсмена в файл.

ЗЫ:Естественно, красивости типа "линий" при переходе к следующей записи и пояснения в духе "количество попыток" придедется убрать. Можете сделать 2 файла - в одном будут хранится только записи, а другой будет текстовый с пояснениями, переходами и прочим.

Последний раз редактировалось Snejnaya; 07.06.2010 в 14:47.
Snejnaya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
Сортировка методом линейного выбора и "быстрая" сортировка Карол Помощь студентам 4 27.09.2009 19:52
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32
1. Сортировка Шелла по убыванию 2. Сортировка вставками по убыванию Arkuz Помощь студентам 1 25.09.2007 17:16