עבור לתוכן

בעיית סינטקס - מבנים בשפת C

Featured Replies

פורסם

היי חברים.

יש לי בעיה בהרצה של התכנית הבאה:

#include <stdio.h>

typedef struct MailPerson_t{
char name[50];
char id[9];
int practice;
int theory;

}MailPerson;


int theoretician(MailPerson cadet)
{
return (cadet.theory>cadet.practice);
}

int main ()
{
typedef struct MailPerson_t cadet;

printf ("Please enter degree for the theory test \n");
scanf("%d",&cadet.theory);
printf("Please enter degree for the practice test \n");
scanf("%d",&cadet.practice);
printf("This is the number %d\n",theoretician(cadet));
}

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

אשמח לעזרה :)

ד"א מטרת התכנית היא כזאת:

1. צוערים

typedef struct MailPerson_t{
char name[50];
char id[9];
int practice;
int theory;

} MailPerson;

נתון מבנה המייצג צוער בקורס דוורים של דואר ישראל. המבנה מכיל שדות המציינים את שם המועמד, מספר תעודת זהות, ציון במבחן המעשי וציון במבחן התיאורטי. נתון שהשם של מועמד הוא באורך 50 תווים לכל היותר, מספר תעודת זהות הוא בן תשע ספרות (יכול להתחיל ב-0) והציונים הם בין 0 ל-100.

כתבו שתי פונקציות:

int theoretician(MailPerson cadet)

פונקציה זו מחזירה 1 אם הצוער קיבל ציון תאורטי גבוה מציונו המעשי. אחרת תחזיר 0.

פורסם

קודם כל, כשיש לך בעיה תחבירית, אז תרשום את השורה הבעייתית והודעת השגיאה.

חוץ מזה, הבעיה היא בשורה שבה אתה מצהיר על cadet: לא צריך שם typedef. לחילופין, כיוון שהגדרת את MailPerson מראש באמצעות typedef, אתה יכול פשוט לעשות MailPerson cadet (בלי struct).

פורסם
  • מחבר

תודה, תיקנתי:


int main ()
{
typedef MailPerson cadet;

printf ("Please enter degree for the theory test \n");
scanf("%d",&cadet.theory);
printf("Please enter degree for the practice test \n");
scanf("%d",&cadet.practice);
printf("This is the number %d\n",theoretician(cadet));
}

זאת השורה הבעייתית:

scanf("%d",&cadet.theory);

וזאת הודעת השגיאה של הקומפיילר:

error C2275: 'cadet' : illegal use of this type as an expression

אין לי מושג מה זה אומר. נכנסתי למצגת הקורס שלנו אבל זה לא מסביר כלום.

תודה רבה!

פורסם

חוץ מזה, הבעיה היא בשורה שבה אתה מצהיר על cadet: לא צריך שם typedef

פורסם
  • מחבר

תודה רבה זה עובד.

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

לך תבין אוניברסיטת תל אביב.. :P

פורסם
  • מחבר

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


int main()
{
typedef struct point p,q;
printf(“Enter x and y coord. of the first point\n”);
scanf(“%lf%lf”, &p.x,&p.y);
printf(“Enter x and y coord. of the second point\n”);
scanf(“%lf%lf”, &q.x,&q.y);
printf(“Their distance is %g\n”, dist(p,q));
return 0;
}

[br]פורסם בתאריך: 14.05.2010 בשעה 01:22:08


שגיאה מוזרה נוספת בפונקציה אחרת באותו תרגיל

זאת הפונקציה


int is_better(MailPerson cadet1, MailPerson cadet2)
{
return ((cadat1.theory>cadat2.theory) && (cadat1.practice>cadat2.practice));
}

שגיאת הקומפיילר:

undeclared identifier

הרי כתבתי את זה בדיוק באותה תבנית כמו הפונקציה הראשונה.

ד"א מטרת התכנית היא:


int is_better(MailPerson cadet1, MailPerson cadet2)

פונקציה זו מחזירה 1 אם הצוער cadet1 קיבל ציון גבוה מהצוער cadet2בשני המבחנים, אחרת תחזיר 0.

איפה השגיאה?! ???

פורסם
  • מחבר

איך לא ראיתי את זה?! תודה רבה! :xyxthumbs:

יש לי פונקציה נוספת שאני צריך לכתוב ומסתבך מעט עם הסינטקס.

זאת מטרת התכנית:

מזהה מערך הוא מבנה שמכיל שדה המצביע למערך של שלמים (int) ובנוסף מכיל שדות עם

אינפורמציה על המערך: סכום האיברים, גודל המערך ומספר האיברים השונים מאפס.

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

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

המבנה הוא כזה:

typedef struct ArrayIdentifier_t{
int* arr_ptr;
int size;
int sum;
int non_zero;

} ArrayIdentifier;

זאת הפונקציה שבניתי:


void data(struct ArrayIdentifier_t *ptr,int maarach[])
{
int i;
for (i=0; (maarach[i])!='\0'; i++);
(*ptr).size=i;
(*ptr).sum+=maarach[i];
for (i=0; (maarach[i])!='\0'; i++)
{
if (maarach[i]!=0)
(*ptr).non_zero++;
}
ptr->arr_ptr=maarach;
}

מקווה שהיא נכונה.

הבעיה היא בmain

כל הזמן נופל על שלושת השורות האלה (לא עובר קומפלצייה):

int main ()
{
typedef ArrayIdentifier arrayid;
struct arrayid *ptr;
ptr=&arrayid;

מה לא בסדר בשורות האלה? :s05:

תודה רבה ושבוע מעולה!

פורסם

מה אמורה לומר השורה הזו?

	struct arrayid *ptr;

אתה מגדיר משתנה לפי שם של משתנה אחר?

פורסם
  • מחבר

אני מגדיר מצביע שמצביע על המבנה.

כנראה זה לא הסינטקס הנכון.

פורסם

שים לב שאתה לא מקבל מערך שהוא מחרוזת, אלה מערך של שלמים (ע"פ השאלה)

חיפוש של ה 0\ לציון של סוף המערך הוא נכון רק לגבי מחרוזות.

האם בשאלה מצויין לך באיזה ערך המערך מסתיים?

ארכיון

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

דיונים חדשים