1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
view:if count>0 then writeln(' €Ја®Є „ҐмЈЁ '); if count>0 then begin i:=0; while i<count do writeln(mas[i].name,mas[i].babki) ; end else writeln(' ‘ЇЁб®Є Їгбв'); goto start;
save: if count<N then begin writeln('‚ўҐ¤ЁвҐ бў®Ґ Ё¬п '); readln(imya); mas[count].name:=imya; inc(count); end else writeln('ЌҐв бў®Ў®¤®Ј® ¬Ґбв '); assign (f,'c:\123.txt'); append(f); i:=0; while i<count do begin mas[i].babki:=sum; writeln(f,mas[i].name); writeln(f,mas[i].babki); end; close(f); goto start;
exit: end.
Дело в том что инфа никак не может сохраниться(помогает только CTRL+BREAK), а сам файл все толстеет и толстеет. При просмотре все время пишет что список пуст
view: if count>0 then writeln(' Игрок Деньги '); if count>0 then begin i:=0; while i<count do begin writeln(mas[i].name, mas[i].babki) ; inc(i) { <--- Увеличивать счетчик кто будет ? } end; end;
Аналогично при Save:
{ assign (f,'123.txt'); } { <--- Это совсем не обязятельно, переменная уже связяна с файлом } append(f); i:=0;
while i<count do begin mas[i].babki:=sum; writeln(f,mas[i].name); writeln(f,mas[i].babki); inc(i) { <--- А вот это - обязательно !!! } end;
И мой тебе совет: во-первых, забудь вообще, что есть метки (и про Goto тоже забудь, ты пишешь не на Бейсике, а на Паскале !!!), а во-вторых, подумай о других - кириллицу переводи в Windows-кодировку. А то если я буду выкладывать файлы так, как удобно мне - поверь, ты мало что поймешь...
Точно про счетчик то я забыл. С goto вроде как то проще(в школе бейсик был). Есть маленький глюк при просмотре, но эта фигня щас поправим. С кодировкой больше так не буду. Thank you very much
Есть маленький глюк при просмотре, но эта фигня щас поправим
Блин глюк оказался не маленьким и не при просмотре а при сохранение: играю я значит и решил сохранить результат(Допустим имя qw, а деньги - 130). Сохранил. Нажимаю просмотр - все хорошо (qw 130). Дальше играю, опять сохраняю(имя as деньги 45), смотрю а там вместо qw 130 as 45 вот такое чудо qw 130 qw 45 as 45
view: if count>0 then writeln(' player money '); if count>0 then begin i:=1; { <--- Индексация начинается с 1, а не с 0 !!! } while i<=count do begin { Соответственно не забывай про "=" } writeln(mas[i].name, ' ', mas[i].babki); inc(i) end; end else writeln(' <empty>');
goto start;
save: if count<N then begin writeln('enter your name '); readln(imya); inc(count); { <--- Сначала увеличь счетчик, потом - работай с записью } mas[count].name:=imya; mas[count].babki:=sum; { <--- Сразу заполняй число денег для записываемого игрока... }
append(f); { ... и записывай в файл ... } writeln(f,mas[count].name); { <--- Не надо ДОзаписывать ВСЕ, достаточно только mas[count] } writeln(f,mas[count].babki); close(f); end else writeln('not enough mem '); goto start;
А в начале программы при чтении из файла -
while (not eof(f)) do begin inc(count); { <--- Сначала увеличиваем индекс, потом читаем } readln(f,mas[count].name); readln(f,mas[count].babki); end;
Блин, хочется зашифровать данные в файле. Вроде как я понял можно сделать файл типизированным а не текстовым, но тогда вроде как нельзя пользоваться функцией append или я что-то не так понял
Все правильно понял... Append работает только с текстовыми файлами... Можешь зашифровать простым XOR-ом: перед тем, как записать в файл строку - пройти по ней и сделать так:
XorKey := ... { тут - любое значение типа Byte } For i := 1 To Length(s) Do s[i] := Char( Byte(s[i]) Xor XorKey );
Теперь строка будет не в таком явном виде, как раньше... Для расшифровки - повторить ту же операцию с тем же XorKey, при повторном прогоне Xor восстанавливаются исходные значения...
С шифровкой понял, реализую потом. Есть маленькая проблема: при сохранение имя игрока сохраняется но потом при большом количестве раз сохранений этот список разрастается. Хочется сделать чтобы если при совпадение введенного имени и имени который уже в файле поле babki не заменялось новым значением sum а прибавлялось к старому. Вот я что-то наклепал но это что-то не пашет
save: if count<N then begin
writeln('Введи имя');
readln(imya); if imya=mas[count].name then begin inc(count); mas[count].name:=imya; mas[count].babki:=mas[count].babki+sum; goto w; end;
writeln('‚Введи имя'); readln(imya); b := False; { <--- Эту переменную придется определить в начале } for i := 1 to count do begin if imya = mas[i].name then begin
inc(mas[i].babki, sum); rewrite(f); for j := 1 to count do begin writeln(f, mas[j].name); { <--- Здесь была ошибка ! } writeln(f, mas[j].babki); end; close(f); b := true; break; end; end;
if not b then if count<N then begin inc(count); mas[count].name:=imya; mas[count].babki:=sum; append(f); writeln(f,mas[count].name); writeln(f,mas[count].babki); close(f); end; else writeln('Нет места ');
че то не так... Играю - сохраняю qw 77 играю - сохраняю as 88 играю - сохраняю zx 145 смотрю - все нормально потом играю, сумма 55, сохраняю как qw Должно быть qw 132 as 88 zx 145 но там zx 145 zx 145 zx 145
Работает . А я уж было собирался через удаление делать. Ищем имя потом все данные которые принадлежат этому имени удаляем и заново на его место записываем новые данные. Но раз ты выбрал свой метод значит он лучше(тем более рабочий)
Еще одна малюсенькая просьба: при просмотре имя игрока находится под надписью "ИГРОК" а значение денег располагается не под "ДЕНЬГИ" а в зависимости отдлины имени игрока. Хочется чтобы и значение денег находились строго под "ДЕНЬГИ". В Си это делается легко а в Паскале не знаю
view: if count > 0 then writeln('player':15, 'money':7); if count>0 then begin i:=1; while i<=count do begin writeln(mas[i].name:15,mas[i].babki:7) ; inc(i) end; end else writeln(' <empty>');