פורסם 2006 במאי 1019 שנים הי לכולםבבקשה עזרה דחופה צריך לכתוב תוכנית בשפת סי המקבלת נתונים של 3 משחקי כדורגל ל2 קבוצות (א ב) ואחר כך לחשב עבור כל קבוצה הניקוד ומי הקבוצה שכבשה מקסימום שערים למשל הקלט יכול להיותקוד קבוצה א -------מס שערים-------קוד קבוצה ב-------מס שערים777 -----------------2--------------------222---------------1 111-----------------1---------------------222---------------1111-----------------2----------------------444--------------1חישוב הניקודקוד קבוצה ------ניקוד111--------------3222--------------2777-------------2444-------------1הקבוצה שכבשה מקסימום שערים:3
פורסם 2006 במאי 1019 שנים מחבר נתקעת בחישוב הניקוד של כל קוד קבוצה למשל לחישוב כל הניקוד של קוד הקבוצה 111 בכל המשחקים אין לי רעיון איך לעשות ותודה שהגבת באופן מהר אני ממש לא יודעת מה לעשות
פורסם 2006 במאי 1019 שנים אתה קולט תוצאות?תשווה את השערים שכל קבוצה הכניסה במשחק אחד. אם אתה רואה שקבוצה א ניצחה את קבוצה ב, תוסיף לה 3 נקודות(בזמן הקלט). אם אתה רואה שיש ביניהם תיקו, תוסיף לכל אחת נקודה. בידיוק כמו בכדורגל אמיתי.
פורסם 2006 במאי 1119 שנים אני מאמין שזה יעבוד:#include <stdio.h>#include <string.h>#include <malloc.h>#define SIZE 3#define MAXLEN 20typedef struct team{ char *name; int goals; int points;}TEAM;void InitTeams(TEAM t[], int size); //Initialize The Teams To Be Zerosvoid InputNames(TEAM t[], int size); //Input Names For Teams.void InputScore(TEAM t[], int size); //Input Scores(Each Team Has One Game).void SortTeams(TEAM t[], int size); //Sort By Points.int BigThanPoints(TEAM t1, TEAM t2);int BigThanScore(TEAM t1, TEAM t2);int MaxTeam(TEAM t[], int size, int s, int (*big)(TEAM t1, TEAM t2)); //Find Max Points Start From s.void OutputTeams(TEAM t[], int size); //Prints The Teams.void OutputMaxPoints(TEAM t[], int size); //Output The Team With Max Points(Using MaxTeamGoals() Function).void main(){ TEAM t[SIZE]; InitTeams(t, SIZE); InputNames(t, SIZE); InputScore(t, SIZE); SortTeams(t, SIZE); OutputTeams(t, SIZE); printf("\n"); OutputMaxPoints(t, SIZE);}void InitTeams(TEAM t[], int size){ int i; for(i=0;i<size;i++) { t[i].name=NULL; t[i].goals=0; t[i].points=0; }}void InputNames(TEAM t[], int size){ int i; char tmp[MAXLEN]; for(i=0;i<size;i++) { printf("Please Insert Name Of Group %d: ", i+1); scanf("%s", tmp); t[i].name=(char *)malloc(sizeof(char)*(strlen(tmp)+1)); strcpy(t[i].name, tmp); }}void InputScore(TEAM t[], int size){ int i, j; int a, b; for(i=0;i<size;i++) { for(j=i+1;j<size;j++) { printf("Please Insert The Score For Team %s vs %s: ", t[i].name, t[j].name); scanf("%d%d", &a, &b); if(a==b) { t[i].points++; t[j].points++; } else if(a<b) t[j].points+=3; else t[i].points+=3; t[i].goals+=a; t[j].goals+=b; } }}void SortTeams(TEAM t[], int size){ int i, j; TEAM tmp; for(i=0;i<size;i++) { //Swap Max And Cur Index tmp=t[i]; t[i]=t[j=MaxTeam(t, size, i, BigThanPoints)]; t[j]=tmp; }}int BigThanPoints(TEAM t1, TEAM t2){ if(t1.points>t2.points) return 1; return 0;}int BigThanScore(TEAM t1, TEAM t2){ if(t1.goals>t2.goals) return 1; return 0;}int MaxTeam(TEAM t[], int size, int s, int (*big)(TEAM t1, TEAM t2)){ int i, j; for(j=s, i=s+1;i<size;i++) { //If Big Than The Bigger if(big(t[i],t[j])) j=i; } return j;}void OutputTeams(TEAM t[], int size){ int i; printf("Name\tPoints\n"); for(i=0;i<size;i++) printf("%s\t%d\n", t[i].name, t[i].points);}void OutputMaxPoints(TEAM t[], int size){ int j; j=MaxTeam(t, size, 0, BigThanScore); printf("Maximum Points Is %d By Team %s\n", t[j].goals, t[j].name);}ד.א. עבור 3 משחקים צריכות להיות 3 קבוצות. עבור N קבוצות יהיו n*(n-1)/2 משחקים.
פורסם 2006 במאי 1119 שנים מחבר אבל אי אפשר להשתמש בפונקציות או מבנים צריך רק להשתמש במערכים ולולאותתודה מראש
פורסם 2006 במאי 1119 שנים למשל:אם יש לך:void input(int a[], int size);int sum(int a[], int size){int i, s;for(s=0, i=0;i<size;s=s+a[i], i++);return s;}void main(){int a[5], summery;input(a, 5);summery = sum(a, 5);}תהפכי את זה ל- void input(int a[], int size);void main(){//old main variablesint a[5], summery;//sum function inputint *aa, size;//sum function variablesint s, i;//old maininput(a, 5);/*instead of calling sum function,we write it here, with some changes(a become aa etc)*/size=5;aa=a;for(s=0, i=0;i<size;s=s+aa[i], i++);//instead return, we use =summery = s;}כנל עבור הINPUT שאותו לא מימשתי. כפי שאת רואה "הכנסתי" את הגוף של הפונקציה לתוך הMAIN. כמובן שהייתי חייב לבצע שינויים מסויימים(להוריד את הRETURN, ולהגדיר את המשתנים בתחילת הבלוק, כדי שהתוכנית תעבור קומפילציה.שימי לב - לעיתים יש משתנים בעלי אותו שם, גם בפונ שאת קוראת לה, וגם בפונ שאתה קוראת ממנה. את חייבת לקרוא להם בשמות שונים, אחרת הכל יתחרבש.בהצלחה במשימה, היא יכולה להיות קצת קשה(צריך לשים לב לכל מיני דברים).הערה קטנה - ייתכן שאפשר לקצר מאוד את הקוד שרשמתי, במיוחד אם את שמה הכל בתוך הMAIN. תשקיעי קצת מחשבה איך ניתן לייעל את מס שורות הקוד.לדוגמא:void input(int a[], int size);void main(){int a[5], summery, s, i;input(a, 5);for(summery=0, i=0;i<5;summery=summery+a[i], i++);}
פורסם 2006 במאי 1219 שנים למה עדיין שימוש בפונקציות? את חייבת להשתמש בפונ MAIN...ד.א. למה אסור לך להשתמש בפונקציות?
פורסם 2006 במאי 1219 שנים מחבר כי השאלת בנושא מערכים ואני לא מבינה איך להחליף הקוד מפונקציות בבקשה תעזור לי בקוד
פורסם 2006 במאי 1219 שנים רשמתי לך בדף הקודם כיצד להוריד את הפונ.חוץ מזה, אם השאלות הנושא מערכים, אין זה אומר שאת לא יכולה להשתמש בפונ(אלא אם רשום בתרגיל במפורש שאסור לך).
פורסם 2006 במאי 1219 שנים מחבר כן רשום שאסור להשתמשולא הבנתי כל כך איך להוריד הפונקציה..עדין לא למדתי פונקציות ולא יודעת איך להשתמש ולהוריד תכתוב הקוד אם אין בעיה בבקשה
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.