Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2014, 21:16   #1
Lizoveta
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 44
По умолчанию Паскаль, игра в быков и коров

Добрый вечер! Конечно, это тема звучала здесь уже не один раз, но я все равно надеюсь на Вашу помощь.
У меня есть программа в которой компьютер должен отгадать загаданное человеком число.
Но она, к сожалению, не работает. С ошибкой я уже справилась, теперь у меня появляется экран с надписью, число, я ввожу коровы и быки и дальше ничего не происходит. Помогите, пожалуйста, разобраться..
Код:
uses crt;
const max=10000;
type mas=array[0..4] of char;      **число в виде букв
type chisl=record                               
                 cifr: mas;
           end;
var ch: array[0..max] of chisl;      **множество всех возможных комбинаций
    fl: array[0..max] of boolean;     
    num2: array[0..4] of byte;
    a,b,c,d,hod,ii,bk,kr: byte;
    i,j: longint;
    num: mas;
    dop,prov,ok: boolean;

function pr(n1,n2: mas; buk,kor: byte) : boolean;    **функция, которая проверяет есть ли совпадения 
var i,m: byte; pr1,pr2: boolean;
begin
     pr1:=true; pr2:=true;
     m:=0;
     for i:=1 to 4 do
         if n1[i]=n2[i] then m:=m+1;
     if m<>buk then
     begin
          pr1:=false;
     end;
     if pr1<>false then begin
        m:=0;
        for i:=1 to 4 do
            for j:=1 to 4 do begin
                if i<>j then
                   if n2[i]=n1[j] then m:=m+1;
            end;
        m:=m div 2;
        if m<kor then
        begin
             pr2:=false;
        end;
     end;
     if (pr1=false) or (pr2=false) then pr:=false
     else  pr:=true;
end;

function main(a: mas): boolean;      **проверка на то, не стоит ли ноль первым (что в моей игре нельзя) и разные ли все цифры (одинаковые также нельзя)
var b: mas; nol,ravn: boolean; i,j: integer;
begin
     for i:=1 to 4 do begin
         b[i]:=a[i];
         if a[1]<>'0' then nol:=true;
     end;
     for i:=1 to 4 do
         for j:=1 to 4 do
             if i<>j then begin
                if a[i]=b[j] then ravn:=true;
             end;
     if (nol=true) and (ravn<>true) then main:=true
     else main:=false;
end;
                             **основная часть программы
begin
randomize;
clrscr;                                          
writeln('Загадайте, пожалуйста, число и нажмите Enter');
readln;
i:=0;                           **создаем множество
for a:=0 to 9 do
    for b:=0 to 9 do
        for c:=0 to 9 do
            for d:=0 to 9 do begin
                 ch[i].cifr[1]:=chr(a+ord('0'));
                 ch[i].cifr[2]:=chr(b+ord('0'));
                 ch[i].cifr[3]:=chr(c+ord('0'));
                 ch[i].cifr[4]:=chr(d+ord('0'));
                 i:=i+1;
            end;
for j:=1 to max do fl[j]:=true;

repeat                                             *ходы...если первый - то рандомно
      if hod=0 then begin
         num2[1]:=random(8)+1;
         repeat
         num2[2]:=random(9)+0;
         until num2[2]<>num2[1];
         repeat
         num2[3]:=random(9)+0;
         until (num2[3]<>num2[1]) and (num2[3]<>num2[2]);
         repeat
         num2[4]:=random(9)+0;
         until (num2[4]<>num2[3]) and (num2[4]<>num2[2]) and (num2[4]<>num2[1]);

         for i:=1 to 4 do
         num[i]:=chr(num2[i]+ord('0'));

      end;
      if hod>0 then begin                **если не первый то, берем следующий из множества
      repeat
      dop:=false;
         for i:=1 to max do
             if dop=false then begin
                if fl[i]=true then begin
                   for ii:=1 to 4 do
                   num[ii]:=ch[i].cifr[ii];
                   dop:=true;
                end;
             end;
      ok:=main(num);
      until ok=true;
      end;                                                  **вывод на экран числа, и ввод быков и коров пользователем
      for i:=1 to 4 do write(num[i]);
      writeln;
      write('Быки - '); readln(bk); write('Коровы - '); readln(kr);
      if bk=4 then write('Ура! Компьютер угадал Ваше число: ')
      else begin                                    **проверка и вычеркивание ненужных чисел из множества
           for i:=1 to max do
           prov:=pr(ch[i].cifr,num,bk,kr);
           if (fl[i]=true) and (prov=false) then fl[i]:=false;
      end;
      hod:=hod+1;
until bk=4;
write('за ', hod, 'ходов!'); **результат 
end.

Последний раз редактировалось Lizoveta; 18.03.2014 в 22:18. Причина: Программа находится в процессе разработки :)
Lizoveta вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Paskal - задача про коров )) TuuuZ Помощь студентам 5 04.10.2013 09:35
Игра Нимбы. Паскаль. Sl1mka. Помощь студентам 3 28.10.2009 13:34
игра (паскаль). вкусняшка Паскаль, Turbo Pascal, PascalABC.NET 11 13.04.2009 18:17