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

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

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

 
 Ответить  Открыть новую тему 
> Графика2
сообщение
Сообщение #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^@ -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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


Гость






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

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


Пионер
**

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

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


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

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

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

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

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

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

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


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


Пионер
**

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

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


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


Профи
****

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

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


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

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


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


Пионер
**

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

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


, а вы код не подскажите?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 21.09.2020 19:41
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name