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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2011, 10:05   #1
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
Сообщение Задача с записями массивов!

Значит, задача такая: создать массив записей, поля которого указывают вид и масть игральной карты, раздать двоим игрокам по 6 карт, определить игрока, который ходит первым! начал я это релизовывать
Код:
type kart=record
     mast:string[10];
     znachenie:integer;
     end;
var a:array[1..36] of kart; pervii_igrok,vtoroi_igrok:integer;
begin
randomize;
writeln('pervii igrok');
for pervii_igrok:=1 to 6 do
  begin
    with kart[pervii_igrok] do
     begin
     znachenie:=random(14);
     mast:=random(4);
     if znachenie=11 then writeln('valet') else
     if znachenie=12 then writeln('dama') else
     if znachenie=12 then writeln('korol') else
     if znachenie=12 then writeln('tuz');
     if mast=1 then writeln('chirva') else
     if mast=2 then writeln('pika') else
     if mast=1 then writeln('chresta') else
     if mast=1 then writeln('bubna');
     if znachenie=6 or (7) or (8) or (9) or (10) then writeln(znachenie);
     if znachenie=6 then writeln('etot igrok hodit');
     end;
writeln('vtoroi igrok');
for vtoroi_igrok:=1 to 6 do
  begin
    with kart[vtoroi_igrok] do
     begin
     znachenie:=random(14);
     mast:=random(4);
     if znachenie=11 then writeln('valet') else
     if znachenie=12 then writeln('dama') else
     if znachenie=12 then writeln('korol') else
     if znachenie=12 then writeln('tuz');
     if mast=1 then writeln('chirva') else
     if mast=2 then writeln('pika') else
     if mast=1 then writeln('chresta') else
     if mast=1 then writeln('bubna');
     if znachenie=6 or (7) or (8) or (9) or (10) then writeln(znachenie);
     if znachenie=6 then writeln('etot igrok hodit');
     end;
readln;
end.
Думаю, в коде разобраться несложно, сначала раздаем для первого игрока, если значение карты 11, это валет, если 12, это дама и так же для короля и вольта, потом с мастями почти то же самое; ту же процедуру проделываем и для второго игрока. если значение карты 6, этот игрок ходит. но вот на этой строчке with kart[pervii_igrok] do выдает, что не хватает дужки вот такой "(" так я не могу понять, при чем там такая дужка, зачем она там нужна? помогите разобраться, и правильно ли я сделал все остальное?
gylayko вне форума Ответить с цитированием
Старый 15.12.2011, 10:18   #2
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Код:
     if znachenie=12 then writeln('dama') else
     if znachenie=12 then writeln('korol') else
     if znachenie=12 then writeln('tuz');
это во-первых (копипаст - страшная штука)

Код:
     with kart[pervii_igrok] do
надо (и вместо второго куска тоже)
Код:
     with a[pervii_igrok] do
потому что kart - тип

в-третьих, если обоим игрокам выпадет 6, то программа выдаст что они оба ходят первыми (а вообще то нужно смотреть по минимальной карте, а не по шестерке), нужно учитывать еще и масти + не выдавать карты, которые уже розданы, как это реализовать - подумайте сами
благодарность - сюда (не забываем писать от кого)

Последний раз редактировалось Zer0; 15.12.2011 в 10:20.
Zer0 вне форума Ответить с цитированием
Старый 15.12.2011, 11:22   #3
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Код не читал, поэтому про логику программы говорить ничего не буду. В любом случае, перед тестированием программы и устранением логических ошибок, следует удостовериться, что нет СИНТАКСИЧЕСКИХ ОШИБОК, а они к коде есть.
Например
Код:
if znachenie=6 or (7) or (8) or (9) or (10) then writeln(znachenie);
1. В условиях должны быть записаны логические выражения, которые могут быть атомарными, а также сложными, в которых атомарные выражения объединяются логическими операторами or/and/xor. В данном случае подразумевается сложное выражение, состоящее из атомарных, но атомарное выражение здесь лишь одно, все остальные - числа. Поэтому такая запись приведёт к ошибке "Type Mismatch (несоответствие типов)". Руководствуясь логикой этого выражения, заключаем, что правильное выражение имеет вид:
Код:
if znachenie=6 or (znachenie=7) or (znachenie=8) or (znachenie=9) or (znachenie=10)
Но такая запись не просто громоздкая, но и неграмотная, несмотря на то, что правильная. Более компактный вид этого выражения:
Код:
if (znachenie >= 6) AND (znachenie <=10)
Однако оно может быть записано ещё короче с применением типа "множество" (если вы его изучали)
Код:
if znachenie in [6..7]
а зачем я это написал?
Вадим Мошев вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка двумерных массивов (матриц ). Модульное программирование. 1 задача. cjcezar Фриланс 6 22.12.2011 18:26
Задача из одномерных массивов Malyshka Microsoft Office Excel 2 13.12.2010 15:51
Задача из двумерных массивов Malyshka Microsoft Office Excel 1 13.12.2010 15:51
Задача с записями в Pascal student2008 Помощь студентам 6 14.09.2009 15:08