На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела
1. Не создавайте несколько одинаковых тем, ибо модератор может расценить их, как спам и удалить все.
2. Для решения задач по GPSS есть отдельная тема. Все задачи по GPSS опубликовывать в этой теме! Перед опубликовыванием вашей задачи просмотрите всю тему, возможно вы сразу найдете решение.
3. Давайте вашим темам ОСМЫСЛЕННЫЕ названия, а также указывайте язык программирования. Пример: [Pascal]:Работа с файлами и записями.
4. Использования тега CODE обязательно при публикации текста программы.

Темы, оформленные с явным игнорированием правил и отсутствием смысла, будут закрыты/удалены!
Вам помогли? Напишите об этом здесь (в портфолио фрилансера)

Фрилансерам:
5. Демпинг цен запрещен (даже если Вы готовы работать бесплатно). Цены обсуждаются в приватном общении. Если вы готовы рещить задачу бесплатно, просто решите ее быстрее, чем возникнет предложение сделать это за деньги.
6. Пользователям, входящим в группу Newbie, запрещается предлагать свои услуги (завуалированно в т.ч.)
7. В посте с предложением выполнить работу, обязательно указывать ссылку на свое портфолио в Отзывы, Благодарности, Портфолио Это правило работает и в том случае, если вы выполняете работу бесплатно.
8. Реклама (даже завуалированная) своих фриланских сайтов запрещена

Нарушение данных пунктов влечет до RO или БАНА (при неоднократом)
Модераторы: ttiger, mikefreelance, Rust
  
    > Бьет ли карта 1 карту 2. [Из Паскаля в Си]
      Помогите пожалуйста с задачей. Условие:
      ExpandedWrap disabled
         struct card
        {
        /* масть карт */
        enum {spades, clubs, diamonds, hearts} suit;
        /* достоинство карт */
        enum {six, seven, eight, nine, ten, jack, queen, king, ace} value;
        } c1, c2;

      Описать логическую функцию Kick(с1, с2, сs), проверяющую, бьёт ли карта с1
      карту с2, с учётом того, что масть cs является козырной.

      Есть программа на Паскале, надо сделать на СИ. ПОМОГИТЕ ПОЖАЛУЙСТАА
      ExpandedWrap disabled
        uses crt;
        const s1:array[1..4] of string[6]=('пики','трефы','бубны','червы');
              s2:array[1..9] of string[6]=('6','7','8','9','10','валет','дама',
                                           'король','туз');
        type mast=(pk,tr,bb,ch);
             dost=(k6,k7,k8,k9,k10,vl,dm,kr,tz);
             karta=record
                   m:mast;
                   d:dost;
                   end;
                  
        function Kick(k1,k2:karta;km:mast):boolean;
        var i:mast;
            j:dost;
        begin
        Kick:=((k1.m=km)and(k2.m<>km)){первая козырная, вторая не козырная}
        or((k1.m=k2.m)and(k1.d>k2.d));{или одной масти и первая старше}
        end;
         
        var k1,k2:karta;
            km:mast;
            i,j:byte;
            s:string[6];
            f:boolean;
        begin
        clrscr;
        f:=false;
         
         
        repeat
        writeln('Введите масть первой карты (пики,трефи,бубны,червы)');
        readln(s);
        i:=1;
        while(i<=4)and not f do
        if s=s1[i] then
         begin
          k1.m:=mast(i-1);
          f:=true;
         end
        else i:=i+1;
        if not f then writeln('Такой масти нет, повторите ввод')
        until f;
         
         
         
        f:=false;
        repeat
        writeln('Введите достоинство первой карты (6,7,8,9,10,валет,дама, король,туз)');
        readln(s);
        i:=1;
        while(i<=9)and not f do
        if s=s2[i] then
         begin
          k1.d:=dost(i-1);
          f:=true;
         end
        else i:=i+1;
        if not f then writeln('Такого достоинства нет, повторите ввод')
        until f;
         
         
        f:=false;
        repeat
        writeln('Введите масть второй карты (пики,трефи,бубны,червы)');
        readln(s);
        i:=1;
        while(i<=4) and not f do
        if s=s1[i] then
         begin
          k2.m:=mast(i-1);
          f:=true;
         end
        else i:=i+1;
        if not f then writeln('Такой масти нет, повторите ввод')
        until f;
         
         
        f:=false;
        repeat
        writeln('Введите достоинство второй карты (6,7,8,9,10,валет,дама, король,туз)');
        readln(s);
        i:=1;
        while(i<=9)and not f do
        if s=s2[i] then
         begin
          k2.d:=dost(i-1);
          f:=true;
         end
        else i:=i+1;
        if not f then writeln('Такого достоинства нет, повторите ввод')
        until f;
         
         
        f:=false;
        repeat
        writeln('Введите козырную масть(пики,трефи,бубны,червы)');
        readln(s);
        i:=1;
        while(i<=4)and not f do
        if s=s1[i] then
         begin
          km:=mast(i-1);
          f:=true;
         end
        else i:=i+1;
        if not f then writeln('Такой масти нет, повторите ввод')
        until f;
         
         
        writeln('Бьет ли первая карта вторую?');
        write(Kick(k1,k2,km));
        readln
        end.
        Наверное, как-то так:
        ExpandedWrap disabled
          bool Kick( karta &k1, karta &k2, char km)
          {
            return ( (k1.m==km) && (k2.m!=km) ) //первая козырная, вторая не козырная
              || ( (k1.m==k2.m) && (k1.d>k2.d) ); // или одной масти и первая старше
          }
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0249 ]   [ 16 queries used ]   [ Generated: 28.03.24, 16:24 GMT ]