נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: עזרה | C

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
אורי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 12 November 2007 בשעה 09:14 | IP רשוּם
ציטוט אורי

אני מנסה לבנות XO

והפונקציה לבדיקה שכתבתי לא עובדת משום מה - check

עזרה אם אפשר

סליחה על חוסר היעילות בקוד אני די חדש

 

קוד:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void board(int a, int b, int c, int d, int e, int f, int g, int h, int i)
{
    printf(" %c | %c | %c \n",a,b,c);
    printf("----------\n");   
    printf(" %c | %c | %c \n",d,e,f);
    printf("----------\n");
    printf(" %c | %c | %c \n",g,h,i);
    printf("\n\n");
}

void menu()
{
    printf("--------------------\n");
    printf("-        XO        -\n");
    printf("--------------------\n");
    printf("\n\n");
}
int check(char arr[])
{
    if(arr[0] == arr[1] == arr[2])return 1;
    if(arr[3] == arr[4] == arr[5])return 1;
    if(arr[6] == arr[7] == arr[8])return 1;
    if(arr[0] == arr[3] == arr[6])return 1;
    if(arr[1] == arr[4] == arr[7])return 1;
    if(arr[2] == arr[5] == arr[8])return 1;
    if(arr[0] == arr[4] == arr[8])return 1;
    if(arr[2] == arr[4] == arr[6])return 1;

    return 0;
}  

int main()
{   
     int action, turn, position;
     position=0;
     char score[9] = {'1','2','3','4','5','6','7','8','9'};
    
     system("cls");
     menu();
     printf("\n");
     printf("1)Play\n2)Exit\n");
    
     scanf("%d", &action);
        
        system("cls");
        menu();
        turn = 1;
        for(int i=0; i<5; i++)
        {
                         system("cls");
                         menu();
                         board(score[0],score[1],score[2],score[3],score[4],score[5],score[6],score[7],score[8]);
                        
                         printf("\nX Turn\n");
                         turn=0;
                         scanf("%d", &position);
                         score[position-1] = 'X';
                        
                         if(check(score) == 1) printf("We Have a winner!!");
                        
                         system("cls");
                         menu();
                         board(score[0],score[1],score[2],score[3],score[4],score[5],score[6],score[7],score[8]);
       
                         printf("\nO Turn\n");
                         scanf("%d", &position); 
                         score[position-1] =   'O';                   &n bsp;
                      
                         if(check(score) == 1) printf("We Have a winner!!");
                        
        }
getch();
return 0;
}

חזרה לתחילת העמוד הצג את כרטיס החבר של אורי חפש הודעות אחרות של אורי בקר בדף הבית של אורי
 
inHaze
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 23 November 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 119
נשלח בתאריך: 12 November 2007 בשעה 10:47 | IP רשוּם
ציטוט inHaze

אתה לא יכול לכתוב תנאי משורשר, אתה חייב להפריד בין התנאים בצורה הבאה:

קוד:

    if( (arr[0] == arr[1]) && (arr[1] == arr[2]) )return 1;
     

השתמשנו בתנאי && מכיוון ואנו מחפשים תנאי ששני הצדדים יתקיימו.



__________________
הבלוג שלי
חזרה לתחילת העמוד הצג את כרטיס החבר של inHaze חפש הודעות אחרות של inHaze
 
צחי@
משתמש חבר
משתמש חבר


הצטרף / הצטרפה: 02 January 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 209
נשלח בתאריך: 12 November 2007 בשעה 11:00 | IP רשוּם
ציטוט צחי@

inHaze כתב:

אתה לא יכול לכתוב תנאי משורשר, אתה חייב להפריד בין התנאים בצורה הבאה:

[

 לא יכול לכתוב ? עובדה שזה אפשרי ומתקמפל - התוצאה שהתקבלה היא לא בדיוק התוצאה שהוא ציפה לה אבל זה בגלל חוסר הבנה של האופרטור הבינארי ==.

כאשר מופיע ביטוי מהצורה (a==b), זה ביטוי שמחזיר ערך true או false, כך שלמעשה כאשר מופיע ביטוי מהצורה:

קוד:

if ( a == b == c )

הוא בעצם שווה ערך לביטוי:

קוד:

if ( (a == b) == c )

אם נניח שהשוויון השמאלי הוא true, אז זה שווה ערך ל:

קוד:

if ( true == c)

true בד"כ שווה ערך ל-1 ולכן הביטוי יהיה true אם ורק אם c הוא 1.

הדרך שבה צריך לבדוק את תנאי השוויון, כפי שכבר נכתב, היא עם 2 אופרנדים לכל השוואה זאת מפני ש == הוא אופרטור שמצפה לקבל 2 אופרנדים (אופרטור בינארי).

חזרה לתחילת העמוד הצג את כרטיס החבר של צחי@ חפש הודעות אחרות של צחי@ בקר בדף הבית של צחי@
 
אורי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 12 November 2007 בשעה 14:37 | IP רשוּם
ציטוט אורי

אוקיי , תודה רבה על העזרה
חזרה לתחילת העמוד הצג את כרטיס החבר של אורי חפש הודעות אחרות של אורי בקר בדף הבית של אורי
 
inHaze
משתמש פעיל
משתמש פעיל
סמל אישי

הצטרף / הצטרפה: 23 November 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 119
נשלח בתאריך: 13 November 2007 בשעה 01:20 | IP רשוּם
ציטוט inHaze

נכון 



__________________
הבלוג שלי
חזרה לתחילת העמוד הצג את כרטיס החבר של inHaze חפש הודעות אחרות של inHaze
 
אלצ'קו
אחראי פורומים
אחראי פורומים
סמל אישי
ג2ר פ33תי

הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת
הודעות: 609
נשלח בתאריך: 13 November 2007 בשעה 02:08 | IP רשוּם
ציטוט אלצ'קו

מה שבאמת מעניין זה שההאסוציאטיביות של האופרטור ‎!=‎ היא מימין לשמאל. כלומר, הביטוי:
קוד:
a == b != c != d == f != g != h

משמעו:
קוד:
a == b != c != d == f != g != h
(a == b) != c != d == f != g != h
(a == b) != (c != d) == f != g != h
((a == b) != (c != d)) == f != g != h
(((a == b) != (c != d)) == f) != g != h
(((a == b) != (c != d)) == f) != (g != h)
((((a == b) != (c != d)) == f) != (g != h))

או לפחות כך נדמה לי. :)

בגלל זה תמיד שמים סוגריים, כי לא רוצים ולא צריכים לזכור את הקדימויות של האופרטורים, את האסוציאטיביויות שלהם, ומה זה בכלל אומר.
חזרה לתחילת העמוד הצג את כרטיס החבר של אלצ'קו חפש הודעות אחרות של אלצ'קו
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה