עזרה בכתיבת תוכנית ב סי - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה בכתיבת תוכנית ב סי


sese

Recommended Posts

הי לכולם

בבקשה עזרה דחופה

צריך לכתוב תוכנית בשפת סי המקבלת נתונים של 3 משחקי כדורגל ל2 קבוצות (א ב) ואחר כך לחשב עבור כל קבוצה הניקוד ומי הקבוצה שכבשה מקסימום שערים

למשל הקלט יכול להיות

קוד קבוצה א -------מס שערים-------קוד קבוצה ב-------מס שערים

777 -----------------2--------------------222---------------1

111-----------------1---------------------222---------------1

111-----------------2----------------------444--------------1

חישוב הניקוד

קוד קבוצה ------ניקוד

111--------------3

222--------------2

777-------------2

444-------------1

הקבוצה שכבשה מקסימום שערים:3

קישור לתוכן
שתף באתרים אחרים

נתקעת בחישוב הניקוד של כל קוד קבוצה למשל לחישוב כל הניקוד של קוד הקבוצה 111 בכל המשחקים אין לי רעיון איך לעשות

ותודה שהגבת באופן מהר אני ממש לא יודעת מה לעשות

קישור לתוכן
שתף באתרים אחרים

אתה קולט תוצאות?

תשווה את השערים שכל קבוצה הכניסה במשחק אחד. אם אתה רואה שקבוצה א ניצחה את קבוצה ב, תוסיף לה 3 נקודות(בזמן הקלט). אם אתה רואה שיש ביניהם תיקו, תוסיף לכל אחת נקודה. בידיוק כמו בכדורגל אמיתי.

קישור לתוכן
שתף באתרים אחרים

אני מאמין שזה יעבוד:


#include <stdio.h>
#include <string.h>
#include <malloc.h>

#define SIZE 3
#define MAXLEN 20

typedef struct team
{
char *name;
int goals;
int points;
}TEAM;

void InitTeams(TEAM t[], int size); //Initialize The Teams To Be Zeros
void 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 משחקים.

קישור לתוכן
שתף באתרים אחרים

למשל:

אם יש לך:


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 variables
int a[5], summery;
//sum function input
int *aa, size;
//sum function variables
int s, i;

//old main
input(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++);


}

קישור לתוכן
שתף באתרים אחרים

כן רשום שאסור להשתמש

ולא הבנתי כל כך איך להוריד הפונקציה..עדין לא למדתי פונקציות ולא יודעת איך להשתמש ולהוריד

תכתוב הקוד אם אין בעיה בבקשה

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...