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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2011, 02:26   #1
makarevich
 
Регистрация: 25.11.2010
Сообщений: 9
По умолчанию Записи - "бьет" ли карта k1 карту k2, с учетом того что масть m является козырной.

Код:
Type 
     Karta=record
       t:(piki,trefi,bubni,chervi);{масть} 
       d:(shest,sem,vosem,devjat,desjat,valet,dama,korol,tuz); {достоинство}
     end;
     Var  kl,k2:Karta;
          m:t;
Вывести сообщение, «бьет» ли карта k1 карту k2, с учетом того что масть m является козырной.



___________
А чтобы не было смайла вместо кода,
исходный код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.


там где смайл это m: (

Последний раз редактировалось Serge_Bliznykov; 21.06.2011 в 08:55.
makarevich вне форума Ответить с цитированием
Старый 21.06.2011, 09:00   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

посмотрите ЭТУ ТЕМУ


ну или разберите аналогичный пример
Код:
TYPE
  str5 = string[6];
  MAST  = (PIKI,TREF,BUBN,CHER);
  ZNACH = (K6,K7,K8,K9,K10,KVAL,KDAM,KKOR,KTUZ);
const
  Mast_STR : array[ord(PIKI)..ord(CHER)] of str5 = ('Пик','Треф','Бубен','Червей');
  ZNACH_STR : array[ord(K6)..ord(KTUZ)] of str5 = 
     ('6','7','8','9','10','Валет','Дама','Король','ТУЗ');

TYPE
  KARTA=RECORD
     M:MAST;
     Z:ZNACH;
  END;

var
  K1, K2 : KARTA;
  KM : MAST; 
  KTemp  : KARTA;
  Koloda : array[1..36] of KARTA;
  i,j,k  : integer;

begin
  randomize;


  {заполним колоду полностью по мастями и значениям}
  for i:=ord(PIKI) to ord(CHER) do
    for j:=ord(K6) to ord(KTUZ) do
      begin
        Koloda[i*9+j+1].M := MAST(i);
        Koloda[i*9+j+1].Z := ZNACH(j);
      end;


  {перемешиваем
     (просто многократно меняем местами две карты случайным образом)
       при замене используем KTemp в качестве временного буфера
          (вместо KTemp можно было использовать K1 или K2,
            но отдельная переменная добавлена для наглядности}
  for k:=1 to 1000 do {меняем 1000 раз, думаю, этого достаточно :-)}
    begin
      i := Trunc(Random(36))+1; {получили случ.число от 1 до 36}
      j := Trunc(Random(36))+1; {получили случ.число от 1 до 36}
      if i<>j {если случайно получили один и тот же номер, то зачем
                 менять карту саму с собой?!}
        then begin
          KTemp := Koloda[i];
          Koloda[i] := Koloda[j];
          Koloda[j] := KTemp
        end;
    end;


  {просто берём первую и вторую карты и отображаем их масти и значение}  
  K1 := Koloda[1];
  K2 := Koloda[2];
  WriteLn('Первая карта: ', ZNACH_STR[ord(K1.Z)],'-',Mast_STR[ord(K1.M)]);
  WriteLn('Вторая карта: ', ZNACH_STR[ord(K2.Z)],'-',Mast_STR[ord(K2.M)]);

  {получим козырную масть случайным образом}
  KM := MAST(trunc(Random(4)));
  WriteLn('Козырная масть: ',Mast_STR[ord(KM)]);

  if ((K1.M = K2.M) and (K1.Z > K1.Z)) or ((K1.M = KM) and (K2.M <> KM)) 
    then 
      WriteLn('Карта1 бьёт карту2')
    else
      WriteLn('Карта1 НЕ бьёт карту2');

  Readln;

end.
p.s. внимание! Перемешивание карт в данном примере не очень грамотное (случайное распределение получается не по нормальному закону распределения!)
Если что - на форуме есть и объяснения этому (ссылка на статью) и примеры, как надо...



да. ещё важное уточнение. "Побьёт" в моём примере, это по правилам игры "Дурак" (т.к. в разных играх разные правила).
например, в коде выше, туз одной масти (не козырной) не бьёт любую карту, если она другой масти...
А козырная карта, наоборот, бьёт любую некозырную карту (даже если она старше по достоинству!).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.06.2011, 13:38   #3
makarevich
 
Регистрация: 25.11.2010
Сообщений: 9
По умолчанию

благодарю вас !
makarevich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение того что текст в SynEdit изменился? KiL0z Компоненты Delphi 3 18.06.2011 13:21
"бьет" ли карта С1 карту С2 Djoker Паскаль, Turbo Pascal, PascalABC.NET 1 13.12.2010 19:54
Правильное уничтожение того, что создал Alex Cones Общие вопросы Delphi 13 06.11.2010 16:43
Записи. Бьет ли карта k1 карту k2 StudeHt Помощь студентам 4 29.04.2009 21:21
Записи. Бьет ли карта k1 карту k2 Иван 883 Помощь студентам 7 06.04.2009 14:08