19.12.2011, 13:59 | #1 (permalink) |
Новичок
Регистрация: 19.12.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Игра быки коровы
Код:
var s,s1:string[4]; {s - число, задуманное компьютером, s1 - наше предположение} m,n:byte; {m - кол-во угаданных чисел; n - кол-во цифр, стоящих на своих позициях} a:set of char; procedure answer (s1:string ); var k,p:byte; {k - кол-во угаданных чисел; p - кол-во цифр, стоящих на своих позициях} var j,i: integer; l:string; begin l:=s; for i:=1 to 4 do if s1[i] in a then begin inc(k); j:=0; repeat inc(j) until l[j]=s1[i]; l[j]:='X'; {Убираем число, т.к. мы его угадали} a:=[l[1],l[2],l[3],l[4]]; end; for i:=1 to 4 do if s1[i] = s[i] then inc(p); end; begin randomize; {инициализируем генератор случайных чисел} str(1000 + random(9000),s); {Случайное число из диапазона 1000..9999 } repeat a:=[s[1],s[2],s[3],s[4]]; {множество цифр, задуманных компьютером} m:=0;n:=0; writeln('Отгадай число'); readln(s1); answer(s1);m:=n; if s = s1 then writeln ('Поздравляю, вы отгадали число!') else writeln('Вы отгадали ',m,' цифр и ',n,' из них стоят на своей позиции.'); until s = s1; end. |
19.12.2011, 13:59 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Участники нашего форума ранее создавали подобные топики, отсылаю вам ссылки Игра - ЦЕПОЧКА Столик - игра Игра Pro Street Игра :) Игра не сохраняется Игра ДаНеточка |
19.12.2011, 14:28 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Даже прежде, чем разбираться, я увидел неправильно написанный заголовок процедуры. У Вас:
Цитата:
Код:
procedure answer (s1:string; var k:byte; var p:byte); |
|
19.12.2011, 19:39 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
А дальше вот что:
Код:
var s,s1:string[4]; {s - число, задуманное компьютером, s1 - наше предположение} m,n:byte; {m - кол-во угаданных чисел; n - кол-во цифр, стоящих на своих позициях} a:set of char; procedure answer (sa:string; var k:byte; var p:byte); {k - кол-во угаданных чисел; p - кол-во цифр, стоящих на своих позициях} var j,i: integer; l:string; begin l:=s; k:=0; p:=0; for i:=1 to 4 do if sa[i] in a then begin inc(k); j:=0; repeat inc(j) until l[j]=sa[i]; l[j]:='X'; {Убираем число, т.к. мы его угадали} a:=[l[1],l[2],l[3],l[4]]; end; for i:=1 to 4 do if sa[i] = s[i] then inc(p); end; begin randomize; {инициализируем генератор случайных чисел} str(1000 + random(9000),s); {Случайное число из диапазона 1000..9999 } {Writeln(s); Readln;} {Это вывод задуманного числа для отладки} repeat a:=[s[1],s[2],s[3],s[4]]; {множество цифр, задуманных компьютером} Repeat writeln('Введите четырехзначное число (0000 - выход)'); readln(s1); If s1='0000' then Halt; Until Length(s1)=4; answer(s1,m,n); if s = s1 then begin writeln ('Поздравляю, вы отгадали число!'); readln; end else writeln('Вы отгадали ',m,' цифр и ',n,' из них стоят на своей позиции.'); until s = s1; end. |
20.12.2011, 04:37 | #5 (permalink) |
Новичок
Регистрация: 19.12.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
она всё равно не работает( какая то ошибка с процедурой STR..(
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
20.12.2011, 09:41 | #7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ох, чую... пахнет чем-то типа АВС... Но если так, то бессмысленно. Там свой неудобопонятный CRT, и подключение его вряд ли поможет... А если всё же речь о нормальном Паскале (Tubo либо Free), то:
1. Ни единой CRT-шной команды в программе нет. 2. Еще, еще и еще раз и тысячу раз: я НЕ ВЫКЛАДЫВАЮ неоттестированных программ. А этих быков-коров гонял вчера "в хвост и в гриву". Никаких ошибок. На всякий случай: у меня DOS версия Free Паскаля. 3. Единственное, что могу предположить и предложить - замените размерную строку обычной, то есть в описании переменных вместо s,s1:string[4]; поставьте s,s1:string; Возможно, дело в этом. |
20.12.2011, 12:22 | #8 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Сейчас проверил на PascalABC, действительно, ругается на перегрузку STR. Убрал размер строки - все заработало.
|
20.12.2011, 12:32 | #9 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|