مشکل:برنامه سنگ کاغذ قیچی

mhabat

Member
سلام.یک تمرین هست که گفته بازی سنگ کاغذ قیچی رو نمایش بدین.
همچنین گفته که برای اشیا از نوع شمارشی استفاده کنید.
حالا سورسشو نوشتم اما نمی دونم گزاش مشکل داره.
واینکه این سورسی که نوشتم میشه کاری کرد که خلاصه تر بشه؟یا خیر.
سورس:
کد:
#include<iostream.h>
#include<conio.h>
int main(){
enum bazi{sang,kaghaz,gheychi}
bazi a,b;
cin>>a>>b;
if(a==sang && b==kaghaz)
cout<<"nafare dovom bord";
if(b==sang && a==kaghaz)
cout<<"nafare daval bord";
if(a==sang && b==gheychi)
cout<<"nafare daval bord";
if(b==sang && a==gheychi)
cout<<"nafare dovom bord";
if(a==gheychi && b==kaghaz)
cout<<"nafare aval bord";
if(b==gheychi && a==kaghaz)
cout<<"nafare dovom bord";
else
cout<<"mosavi shodin";
getch(); return 0; }
خیلی ممنون
 
آخرین ویرایش:

mahtab2009

Member
سلام
من این شکلی نوشتم:
کد:
if(a=='s')
    {
               if(b=='k')
               cout<<"nafare dovom bord.";
               else
               cout<<"nafare aval bord.";
               }
    else if(b=='s')
    
    {
               if(a=='k')
               cout<<"nafare aval bord.";
               else
               cout<<"nafare dovom bord.";
               }
    else if(a=='g')
         cout<<"nafare aval bord.";
    else
         cout<<"nafare dovom bord.";
دومی هم مشکلی نداره درسته.
 

mahtab2009

Member
می دونم که
کد:
enum bazi(sang,kaghaz,gheychi)
رو باید با {}بنویسی
کد:
enum bazi{sang,kaghaz,gheychi}
و همین طور توی شرطها به جای kaghaz (که تو enum معرفی کردی) نوشتی khaghaz نمی دونم چه ایراد دیگه ای داره.
 

mhabat

Member
ممنون.
تمرین بالا رو باید با عبارت شرطی و هم یا switchبنویسم.
با عبارت شرطی مینویسم به این شکل که میخوام جواب نمیده:
کد:
#include<iostream.h>
#include<conio.h>
int main() {
char a,b;
cout<<"r=Rahnama:sang=s kaghaz=k gheychi=g"<<endl;
cout<<"sang kaghaz ghechi khodra wared namaid"<<endl;
cin>>a>>b;
(a=='s' && b=='k')?cout<<"nafare dovom bord":cout<<"nafare aval bord";
(a=='g' && b=='k')?cout<<"nafare aval bord":cout<<"nafare dovom bord";
(a=='s' && b=='g')?cout<<"nafare aval bord":cout<<"nafare dovom bord";
getch(); return 0; }
کد بالا رو سه خط دیگه باید بهش اضافه بشه تا درست کار کنه؟
همچنین برای switchچی کار کنم باید دو کاکتر از ماریر بگیرم اما switchیکی میگیره...!
خیلی ممنون
بـــدرود
 

mahtab2009

Member
سلام
وقتی 2 تا ورودی داری و 3 تا حالت انتخاب، پس طبق جایگشت ها 6 حالت انتخاب داری، باید شرطها رو طوری بنویسی که همه 6 حالت را شامل بشه.
با switch نمی تونی اینو بنویسی مگه اینکه روی یکی مثلا a ، سوئیچ کنی و بعد داخل case های اون برای b شرط بذاری. یعنی اول حالت a رو پیدا کنه بعد بره ببینه b چه حالتی داره.
در ضمن قضیه r=Rahnama رو نگرفتم!!!! اینو نوشتی که چی؟ تو که جایی ازش استفاده نمی کنی برای نمایش راهنما؟؟؟
من میگم این جوری بنویس:
کد:
#include<iostream.h>
#include<conio.h>
int main()
{
    char a,b;
    cout<<"s=sang , k=kaghaz , g=geychi.\n\n";
    cout<<"gozineye morede nazar ra entekhab namaeed:\n";
    cin>>a>>b;
    
    switch(a)
    {
         case 's':
              if(b=='k')
                      cout<<"nafar dovom bord.\n";
              else
                  cout<<"nafar aval bord.\n";
         break;
         case 'k':
              if(b=='s')
                      cout<<"nafar aval bord.\n";
              else
                  cout<<"nafar dovom bord.\n";
         break;
         case 'g':
              if(b=='k')
                      cout<<"nafar aval bord.\n";
              else
                  cout<<"nafar dovom bord.\n";
         break;
        }
        getch();
         return 0;
 }
موفق باشی. :rose:
 

mahtab2009

Member
نمی دونم چی رو متوجه نشدی؟
تو دو تا متغیر داری و 3 تا گزینه، یعنی 3 حالت برای a و 3 حالت برای b ، جمعا 6 حالت.
توی شرطهایی که نوشتی، گفتی a && b ، همزمان هم a باید برابر با مقدار ذکر شده در شرط باشه و هم b . به این ترتیب شرطهای تو شامل 3 حالته نه 6 حالت. کل گزینه ها اینجوریه :
s k یا s g یا g k یا g s یا k g یا k s
باید شرطها هر 6 تا رو در بر بگیره.
می خوای اینجوری بنویس:
کد:
((a=='s'&&b=='k')||(a=='k'&&b=='g')||(a=='g'&&b=='s'))?cout<<"nafare dovom bord":cout<<"nafare aval bord";
توی پرانتزها 3 تا حالت برد b نوشته شده. دقت کن که بین پرانتز 3 حالت || وجود داره، یعنی اگر یکی از این حالات رخ بده دومی برنده شده در غیر این صورت اولی برنده اس.
ببخشید معطل شدی، مثلا دارم با خطوط پرسرعت دانشگاه کار میکنم (سرعت در حد المپیک :lol:)
 

the_king

مدیرکل انجمن
اگر ترتیب چپ به راست sang, gheychi, kaghaz رو بصورت حلقه در نظر بگیریم، هر کدام بعدی را می برند.
اگر آنها را از چپ به راست 2, 1, 0 مقدار دهی کنیم و اگر در یک مقایسه اولی a و دومی b باشد، زمانی a برنده است
که b برابر با a + 1) % 3) باشد.

کد:
#include <iostream.h>
#include<conio.h>

enum objects { sang, gheychi, kaghaz };

objects CharToObject(char s)
{
    switch (s)
    {
        case 's':
            return sang;
        case 'k':
            return kaghaz;
        default :
            return gheychi;
    }
}

int main()
{
    char ch;
    objects first, second;
    do
    {
        cout << "[s]ang, [k]aghaz, [g]heychi" << endl;
        cout << "Please enter first object :" << endl;
        cin >> ch;
        first = CharToObject(ch);
        cout << "Please enter second object :" << endl;
        cin >> ch;
        second = CharToObject(ch);
        if (second == (first + 1) % 3)
        {
            cout << "The winner is the first player." << endl;
        }
        else if (first != second)
        {
            cout << "The winner is the second player." << endl;
        }
    } while (first == second);
    getch();
    return 0;
}
 

hepatit

New Member
سلام
وقتی 2 تا ورودی داری و 3 تا حالت انتخاب، پس طبق جایگشت ها 6 حالت انتخاب داری، باید شرطها رو طوری بنویسی که همه 6 حالت را شامل بشه.
با switch نمی تونی اینو بنویسی مگه اینکه روی یکی مثلا a ، سوئیچ کنی و بعد داخل case های اون برای b شرط بذاری. یعنی اول حالت a رو پیدا کنه بعد بره ببینه b چه حالتی داره.
در ضمن قضیه r=Rahnama رو نگرفتم!!!! اینو نوشتی که چی؟ تو که جایی ازش استفاده نمی کنی برای نمایش راهنما؟؟؟
من میگم این جوری بنویس:
کد:
#include<iostream.h>
#include<conio.h>
int main()
{
    char a,b;
    cout<<"s=sang , k=kaghaz , g=geychi.\n\n";
    cout<<"gozineye morede nazar ra entekhab namaeed:\n";
    cin>>a>>b;
    
    switch(a)
    {
         case 's':
              if(b=='k')
                      cout<<"nafar dovom bord.\n";
              else
                  cout<<"nafar aval bord.\n";
         break;
         case 'k':
              if(b=='s')
                      cout<<"nafar aval bord.\n";
              else
                  cout<<"nafar dovom bord.\n";
         break;
         case 'g':
              if(b=='k')
                      cout<<"nafar aval bord.\n";
              else
                  cout<<"nafar dovom bord.\n";
         break;
        }
        getch();
         return 0;
 }
موفق باشی. :rose:

دوست عزیز الان این سورس شما به مشکلی داره یه بند کم داره وقتی هر دو نفر یکی رو انتخاب کنن برنامه هیچ عکس العملی انجام نمیده این دستور رو هم توش قرار بده با تشکر :)
 

جدیدترین ارسال ها

بالا