2 שאלות ב-C

netc

New member
2 שאלות ב-C

אז ככה, קיבלתי שתי משימות בבצפר ב-C. 1. לכתוב משחק מלחמה, כידוע 2 מתמודדים בכל תור מוציאים קלף בחתום 1-13, מי שהקלף שלו יותר גבוה לוקח את שני הקלפים. במקרה תיקו עושים מלחמה עד שיש מנצח. הפלט של המשחק: בכל שלב ערכי הקלפים שהוגרלו, מספר השחקן הזוכה וגודל הקופה של כל שחקן. בסוף המשחק: הודעה מתאימה וקוד השחקן הזוכה (סוף המשחק לאחר 30 תורים). זה הקוד שעד עכשו כתבתי:
#include <stdio.h> #include <stdlib.h> void main() { int a=0,b=0,casha=0, cashb=0,i; /* a=משתמש 1, b=משתמש שני, casha= הקופה של משתמש 1, cashb=הקופה של משתמש 2 randomize(); for (i=1;i<=30;i++){ a=random(13)+1; b=random(13)+1; printf("%d",a); printf("%d",b); if (a>b){ casha=a+b printf("Player A took this round");} else if (b>a){ cashb=b+a printf("Player A took this round");} else { while (a==b){ a=random(13)+1; b=random(13)+1; if (a>b){ casha=a+b printf("Player A took this round");} else if (b>a){ cashb=b+a printf("Player A took this round");} } } printf("Game over"); if (casha>cashb) printf("Player A Won!"); else if (cashb>casha) printf("Player B Won!"); else printf("tie"); }​
כפי שניתן לראות יש לי בעיה עם הקופה, שבעצם כל פעם הערך ישתנה במקום לגדול...אין לי מושג איך לעשות את זה. ובמצב של מלחמה, נגיד יש 2 ו-2 4 ו-4 ואז 8-4, אז המשתמש צריך לצבור 24 (יעני הסכום הכולל של הכל) וגם את זה אין לי מושג איך עושים. 2. לעשות שעון דיגיטלי...בגדול הבנתי אמרתי שנקבע 4 משתנים a,b,c,d, וכש d יהיה 9, c יעלה ב-1 ו-d יתאפס וכו'. רק איך אני גורם לשעון לזוז??
 

vinney

Well-known member
זה נדמה לי או שאתה מנסה

לתרגם תוכנית מפסקל לC?
 

vinney

Well-known member
מהסגנון

מהכתיבה שלך משתמע כאילו ניסית לקמפל ולהריץ את התוכנית הזאת, אבל זה לא אפשרי, כך שהאפשרות היחידה שאני יכול לחשוב עליה היא שלקחת תוכנית בפסקל וניסית לתרגם אותה לC... אני טועה?
 

netc

New member
כן

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

vinney

Well-known member
אז תתחיל מזה שאתה צריך קומפיילר

DEV-CPP למשל יכול לתת לך מענה הולם תריץ את התוכנית (או לפחות תביא אותה למצב בו תוכל לרוץ), ואז הבעיות שלך ייפתרו די מהר בעצמן אם לא - נעזור לך בכל מקרה, איך אתה יודע שיש לך בעיה בלי שהרצת את התוכנית? לגבי השאלה השניה בכלל לא הבנתי מה שאלת
 

netc

New member
אני חושב

שזה די ברור שיש פה בעיה...כי אם בסיבוב הראשון הסכום הוא 8, ובסיבוב השני הוא 5, אז במקום 13, זה יכתוב 5...
 

netc

New member
טוב שיפרתי את הקוד

הצלחתי להגיע למצב שהסכום ישמר בכל סיבוב ורק יתווסף הסכום החדש:
#include <stdio.h> #include <stdlib.h> void main() { int a=0,b=0,casha=0, cashb=0,i,suma=0,sumb=0; randomize(); for (i=1;i<=30;i++){ a=random(13)+1; b=random(13)+1; printf("%d",a); printf("%d",b); if (a>b){ casha=a+b; cashb=cashb-b; suma=suma+casha; sumb=sumb+cashb; printf("Player A took this round"); printf("%d, player A cash:",suma); printf("%d, player B cash:",sumb)} else if (b>a){ cashb=b+a; casha=casha-a; sumb=sumb+cashb; suma=suma+casha; printf("Player B took this round"); printf("%d, player B cash:",sumb); printf("%d, player A cash:",suma)} else { while (a==b){ a=random(13)+1; b=random(13)+1; printf("%d",a); printf("%d",b); if (a>b){ casha=a+b; cashb=cashb-b; suma=suma+casha; sumb=sumb+cashb; printf("Player A took this round"); printf("%d, player A cash:",suma); printf("%d, player B cash:",sumb)} else if (b>a){ cashb=b+a; casha=casha-a; sumb=sumb+cashb; suma=suma+casha; printf("Player B took this round"); printf("%d, player B cash:",sumb); printf("%d, player A cash:",suma)} } } printf("Game over"); if (casha>cashb) printf("Player A Won!"); else if (cashb>casha) printf("Player B Won!"); else printf("tie"); }​
עכשו הבעיה שלי היא כזאת: במשחק מלחמה כאמור אם לשני השחקנים נגיד יש מספר זהה, נגיד 2, הוא יכנס ללולאה השנייה, לולאת המלחמה. הבעיה שלי היא אם בסיבוב הראשון יש 2 ו-2 ואז ממשיכים האלה ויש 3 ו-3, ואז ממשיכים הלאה ולשחקן הראשון יש 5 ולשני יש 3. איך אני מוסיף לקופה של הראשון 2+2+3+3+5+2? כאילו את הסכום בכל המהלך??
 

melatonin

New member
הקוד מאוד לא קריא

ומוציא את החשק לעבור עליו. כדאי לחשוב קצת על הזחה
 

IP yuval

New member
indent -kr -i8 חוסך חצי מהעבודה למי

שלא מכיר.
#include <stdio.h> #include <stdlib.h> void main() { int a = 0, b = 0, casha = 0, cashb = 0, i, suma = 0, sumb = 0; randomize(); for (i = 1; i <= 30; i++) { a = random(13) + 1; b = random(13) + 1; printf("%d", a); printf("%d", b); if (a > b) { casha = a + b; cashb = cashb - b; suma = suma + casha; sumb = sumb + cashb; printf("Player A took this round"); printf("%d, player A cash:", suma); printf("%d, player B cash:", sumb)} else if (b > a) { cashb = b + a; casha = casha - a; sumb = sumb + cashb; suma = suma + casha; printf("Player B took this round"); printf("%d, player B cash:", sumb); printf("%d, player A cash:", suma)} else { while (a == b) { a = random(13) + 1; b = random(13) + 1; printf("%d", a); printf("%d", b); if (a > b) { casha = a + b; cashb = cashb - b; suma = suma + casha; sumb = sumb + cashb; printf("Player A took this round"); printf("%d, player A cash:", suma); printf("%d, player B cash:", sumb)} else if (b > a) { cashb = b + a; casha = casha - a; sumb = sumb + cashb; &nb​
 

IP yuval

New member
זה אני או תפוז?

#include <stdio.h> #include <stdlib.h> void main() { int a = 0, b = 0, casha = 0, cashb = 0, i, suma = 0, sumb = 0; randomize(); for (i = 1; i <= 30; i++) { a = random(13) + 1; b = random(13) + 1; printf("%d", a); printf("%d", b); if (a > b) { casha = a + b; cashb = cashb - b; suma = suma + casha; sumb = sumb + cashb; printf("Player A took this round"); printf("%d, player A cash:", suma); printf("%d, player B cash:", sumb)} else if (b > a) { cashb = b + a; casha = casha - a; sumb = sumb + cashb; suma = suma + casha; printf("Player B took this round"); printf("%d, player B cash:", sumb); printf("%d, player A cash:", suma)} else { while (a == b) { a = random(13) + 1; b = random(13) + 1; printf("%d", a); printf("%d", b); if (a > b) { casha = a + b; cashb = cashb - b; suma = suma + casha; sumb = sumb + cashb; printf("Player A took this round"); printf("%d, player A cash:", suma); printf("%d, player B cash:", sumb)} else if (b > a) { cashb = b + a; casha = casha - a; sumb = sumb + cashb; &n​
 
למעלה