![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
@^WARlock^@ |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 96 Пол: Мужской Реальное имя: John Репутация: ![]() ![]() ![]() |
Спасибо VOLVO за предыдущую задачу. И теперь на ее основе, как можно сделать так:
Введем слово (1) допустим, что его рекорд 2000, слово (2) – 500 и т.д. Не больше 7 слов. (1) – 2000 (2) – 500 (3) – 1500 (4) – 5000 (5) – 100 (6) – 750 (7) – 2400 Как сделать, чтобы в файле слова сохранились по возрастанию рекордов в виде: (4) – 5000 (7) – 2400 (1) – 2000 (3) – 1500 (6) – 750 (2) – 500 (5) – 100 При вводе слова с рекордом 1900 или любым другим, оно вставало на нужную позицию, в данном случае между словами (1) и (3), и т.д. Код Код предыдущей задачи: uses crt, graph; function get_input(xst, yst: integer): string; var stop: boolean; in_str: string; ch: char; begin in_str := ''; stop := false; repeat setbkcolor(white); setfillstyle(solidfill, black); settextjustify(lefttext, toptext); bar(xst, yst, xst + 50 * textwidth('W'), yst + textheight('W') + 2); setcolor(blue); outtextxy(succ(xst), succ(yst), in_str); ch := readkey; if ch = #0 then readkey else if ch = #13 then stop := true else if (ch = #8) then begin if length(in_str) > 0 then delete(in_str, length(in_str), 1) end else in_str := in_str + ch; until stop; get_input := in_str end; var gD: Integer; gM: Integer; ErrCode: Integer; f:file of string; s: string; begin gD := Detect; InitGraph(gD, gM,'c:\bgi'); ErrCode := GraphResult; setcolor(blue); rectangle(240,200,390,300); setfillstyle(1,green); floodfill(241,201,blue); setcolor(blue); rectangle(260,250,370,270); setfillstyle(1,white); floodfill(261,251,blue); setcolor(red); outtextxy(260,215,'Enter you name'); if ErrCode <> grOk then begin Writeln('Graphics error:', GraphErrorMsg(ErrCode)); readln; exit; end; assign(f,'c:\1.txt'); rewrite(f); s:= get_input(265,255); { Koordinati vvodimogo slova } outtextxy(400, 100, s); write(f,s); closegraph; close(f); end. Сообщение отредактировано: @^WARlock^@ - 28.11.2006 14:10 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Уточни одну деталь: у тебя вот этот самый файл должен создаваться в начале работы программы, и только те слова, которые ты ввел ПРИ ЭТОМ запуске должны вот так циклически записываться в файл, или надо, чтобы и то, что РАНЬШЕ записывалось в файл тоже принималось во внимание?
|
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Ну я же спрашивал не просто так, наверное... Ты на вопросы-то отвечай !!!
Повторяю вопрос: "при запуске игры ты хранишь только ЭТИ рекорды, или надо учитывать и то, что БЫЛО сохранено вчера, скажем?" + еще вопрос: сами рекорды (числа) ты хранишь где-то в массиве (и только при выходе из программы сохраняешь), или каждый раз хочешь обращаться к файлу, и ТОЛЬКО там хранить все рекорды? |
@^WARlock^@ |
![]()
Сообщение
#4
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 96 Пол: Мужской Реальное имя: John Репутация: ![]() ![]() ![]() |
Отвечаю на вопрос:
Да я хочу каждый раз обращаться к файлу, и ТОЛЬКО там хранить все рекорды? Ну допустим я играл вчера и получил …. рекорд (этот рекорд должен сохр.), и играл сегодня и получил …. рекорд (и этот рекорд тоже должен сохр.). И при открывании таблицы рекордов там должен быть вчерашний и сегодняшний рекорд. Следовательно надо наверное учитывать все сохр. рекорды. |
@^WARlock^@ |
![]()
Сообщение
#5
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 96 Пол: Мужской Реальное имя: John Репутация: ![]() ![]() ![]() |
..--..
|
@^WARlock^@ |
![]()
Сообщение
#6
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 96 Пол: Мужской Реальное имя: John Репутация: ![]() ![]() ![]() |
--..--
|
Archon |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну так считывай из файла старые данные в массив, добавляй новые и сортируй. Что не понятно?
PS Можно построчно копировать файл и сразу вставить новые данные на нужную позицию. Объяснить подробней, или первый способ устроит? -------------------- Close the World...txeN eht nepO
|
@^WARlock^@ |
![]()
Сообщение
#8
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 96 Пол: Мужской Реальное имя: John Репутация: ![]() ![]() ![]() |
, а вы код не подскажите?
|
Archon |
![]()
Сообщение
#9
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: ![]() ![]() ![]() |
Подскажем. Вот этот код демонстрирует запись в файл рекордов:
uses crt;
var
Name, NewName : string;
Score, NewScore : longint;
f1, f2 : text;
count : integer;
flag : boolean;
begin
ClrScr;
Write('Do you wanna new score-file? (y/n): ');
if ReadKey in ['y', 'Y'] then begin
WriteLn('y');
assign(f1,'1.txt');
rewrite(f1);
Name := 'unknown';
Score := 0;
for count := 1 to 7 do begin
WriteLn(f1, Name);
WriteLn(f1, Score);
end;
close(f1);
end
else WriteLn('n');
Write(' Name: ');
ReadLn(NewName);
Write('Score: ');
ReadLn(NewScore);
assign(f1,'1.txt');
assign(f2,'1.tmp');
reset(f1);
rewrite(f2);
count := 0;
flag := true;
while not(eof(f1)) do begin
ReadLn(f1, Name);
ReadLn(f1, Score);
if (Score < NewScore) and flag then begin
WriteLn(f2, NewName);
WriteLn(f2, NewScore);
Inc(count);
flag := false;
end;
if count < 7 then begin
WriteLn(f2, Name);
WriteLn(f2, Score);
Inc(count);
end;
end;
close(f1);
close(f2);
erase(f1);
rename(f2, '1.txt');
end.
Если что не понятно - спрашивай.Сообщение отредактировано: Archon - 3.12.2006 15:28 -------------------- Close the World...txeN eht nepO
|
![]() ![]() |
![]() |
Текстовая версия | 28.07.2025 8:09 |