Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.138.143.103] |
|
Сообщ.
#1
,
|
|
|
Помогите пожалуйста с задачей. Условие:
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 является козырной. Есть программа на Паскале, надо сделать на СИ. ПОМОГИТЕ ПОЖАЛУЙСТАА 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. |
Сообщ.
#2
,
|
|
|
Наверное, как-то так:
bool Kick( karta &k1, karta &k2, char km) { return ( (k1.m==km) && (k2.m!=km) ) //первая козырная, вторая не козырная || ( (k1.m==k2.m) && (k1.d>k2.d) ); // или одной масти и первая старше } |