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

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

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

 
 Ответить  Открыть новую тему 
> Графика2
@^WARlock^@
сообщение 28.11.2006 13:07
Сообщение #1


Пионер
**

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

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


Спасибо 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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.11.2006 13:25
Сообщение #2


Гость






Уточни одну деталь: у тебя вот этот самый файл должен создаваться в начале работы программы, и только те слова, которые ты ввел ПРИ ЭТОМ запуске должны вот так циклически записываться в файл, или надо, чтобы и то, что РАНЬШЕ записывалось в файл тоже принималось во внимание?
 К началу страницы 
+ Ответить 
volvo
сообщение 29.11.2006 11:04
Сообщение #3


Гость






Ну я же спрашивал не просто так, наверное... Ты на вопросы-то отвечай !!!

Повторяю вопрос: "при запуске игры ты хранишь только ЭТИ рекорды, или надо учитывать и то, что БЫЛО сохранено вчера, скажем?" + еще вопрос: сами рекорды (числа) ты хранишь где-то в массиве (и только при выходе из программы сохраняешь), или каждый раз хочешь обращаться к файлу, и ТОЛЬКО там хранить все рекорды?
 К началу страницы 
+ Ответить 
@^WARlock^@
сообщение 30.11.2006 7:42
Сообщение #4


Пионер
**

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

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


Отвечаю на вопрос:

Да я хочу каждый раз обращаться к файлу, и ТОЛЬКО там хранить все рекорды?

Ну допустим я играл вчера и получил …. рекорд (этот рекорд должен сохр.), и играл сегодня и получил …. рекорд (и этот рекорд тоже должен сохр.).

И при открывании таблицы рекордов там должен быть вчерашний и сегодняшний рекорд.
Следовательно надо наверное учитывать все сохр. рекорды.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
@^WARlock^@
сообщение 1.12.2006 6:34
Сообщение #5


Пионер
**

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

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


..--..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
@^WARlock^@
сообщение 2.12.2006 10:13
Сообщение #6


Пионер
**

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

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


--..--
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Archon
сообщение 2.12.2006 23:14
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

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


Ну так считывай из файла старые данные в массив, добавляй новые и сортируй. Что не понятно?

PS Можно построчно копировать файл и сразу вставить новые данные на нужную позицию. Объяснить подробней, или первый способ устроит?


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
@^WARlock^@
сообщение 3.12.2006 9:17
Сообщение #8


Пионер
**

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

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


, а вы код не подскажите?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Archon
сообщение 3.12.2006 15:27
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

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


Подскажем. Вот этот код демонстрирует запись в файл рекордов:
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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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