עבור לתוכן

פונקציה ב סי

Featured Replies

פורסם

הי לכולם

אני צריכה שתעזרו לי בכתיבת תוכנית בנושא פונקציות בשפת סי

השאלה כך: יש חברה של אוטובוסים מנהלת טיולים לארבע אזורים שונים בארץ החברה קובעת את מחיר כרטיס הנסיעה לפי מספר הנוסעים באוטובוס באופן הבא:

מספר נוסעים----מחיר כרטיס לנוסע בודד

עד 20------------50

בין21-30---------40

מעל 31-----------30

בנוסף יש עמלה נוספת שהחברה גובה כתוספת על מחיר הכרטיס באופן הבא:

יעד--------------תוספת על כרטיס הנסיעה

חיפה=1------------5% תוספת

ת"א=2--------------30 שיקל תוספת

עכו=3-----------------10%

אילת=4-----------------50

החברה שומרת עבור כל טיול את הנתונים: מספר טיול, מספר עיר היעד, מספר נוסעים באוטובוס.

צריך לכתוב תוכנית העוזרת לחברה לקלוט נתוני הזמנות הטיולים בחודש נתון ותחשב:

-העלות הכוללת לכל הטיולים ליעד מסוים שהמשתמש קובע

-חישוב מספר הטיולים לכל יעד

-מספר הטיול עם כמות הנוסעים המקסימלי

-מספר עיר היעד בעל עלות הטיולים הכוללת המינימאלית

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

ותודה רבה מראש

פורסם

אתה צריך עזרה, או שאתה רוצה שנפתור לך את התרגיל?

תגיד לנו במה אתה מתקשה.

פורסם
  • מחבר

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

פורסם

קודם תגדירי את המבנה נתונים שלך. הוא מוגדר?

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

פורסם
  • מחבר

לא מבנה הנתונים לא מוגדר איך להגדיר :nixweiss:

פורסם

השדות שאת צריכה לשמור עבור כל טיול:

החברה שומרת עבור כל טיול את הנתונים: מספר טיול, מספר עיר היעד, מספר נוסעים באוטובוס.

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

פורסם
  • מחבר

אפשר הקוד אני לא מבינה את נושא פונקציות בבקשה :please: :please:

פורסם

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

ההצהרה על הפונ תעשה בדרך כלל לפני הMAIN, והיא תכיל את שם הפונ, הערך המוחזר והפרמטרים בצורה הבאה:


return_value function_name(paramtype1 paramname 1, paramtype2, paramname 2[, ....]);

שימי לב שבסוף השורה חייב לבוא נקודה פסיק(;). אם את מעוניינת שהפונ לא תחזיר ערך, תשימי בRETURN_VALUE את המילה השמורה VOID. אחרת הRETURN_VALUE אמור להיות כל סוג של משתנה, לדוגמא INT, CHAR או DOUBLE.

PARAMTYPE1 הוא הסוג של המשתנה הראשון(INT CHAR וכו) וPARAMNAME1 הוא השם של המשתנה הראשון(יכול להיות כל שם תקני שתבחרי - כזה שלא מתחיל במספר וכו החוקים האלה).

function_name זה שם הפונ(גם כאן את לא יכולה לבחור שם שמתחיל במספר או בתו מיוחד..).

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

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

ד.א. גם בMAIN ניתן לשים VOID.

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

המימוש יופיע כך:


return_value function_name(paramtype1 paramname 1, paramtype2, paramname 2[, ....])
{
//...
//some things
//....

}

שימי לב שהשורה הראשונה במימוש היא בידיוק אותו הדבר כמו ההצהרה, חוץ מהנקודה פסיק שבסוף. במימוש אסור לך לשים נקודה פסיק בסוף השורה הראשונה.

הסוגריים המסולסלים מסמנים את בלוק הקוד של הפונ. כל הפקודות שאת מעוניינת לרשום בפונ חייבות לבוא ביניהם, אחרת תקבלי שגיאה. ניתן לשים בלוק אחר בתוך הבלוק של הפונ(כמו לולאת FOR, WHILE או כמו IF).

הקריאה לפונ תעשה בצורה הבאה:


function_name(paramval1, paramval2[, ....]);

בPARAMVAL1 ו2 את שמה את ערך הפרמטרים שאת מעוניינת לשלוח לפונ, לדוגמא: "hello world", 3, 20.3. 'a', שמות משתנים(ואז ערכם ישלח),ביטויים(כגון: 3+4, 3*9 וכו), ערכים שפונ אחרת החזירה(fun1(fun2(20));

אם הגדרת שהפונ צריכה להחזיר ערך, את חייבת להחזיר ערך ע"י RETURN val; כאשר VAL זה הערך שאת מחזירה. הוא יכול להיות ביטוי, ערך קבוע, ערך מוחזר של פונ אחרת וכו. את הערך שהפונ החזירה, את מקבלת ע"י הסימן שווה(כאילו את שמה במשתנה אחד ערך של משתנה אחר): a = fun(2);

דוגמאות לפונ שונות ומשונות את יכולה לראות בתראד הקודם ששאלת בו.

אם יש לך שאלות נוספות תשאלי.

פורסם

בהנחה שאת שומרת את הטיולים במערך:


typedef struct trip
{
int id;
int passes;
int dest;
}TRIP;

int getPrice(TRIP t)
{
int tmp;
int dest=t.dest, passes=t.passes;

if(passes<=20) tmp=50;
else if(passes<=30) tmp=40;
else tmp=30;

switch(dest)
{
case 1: tmp*=1.05;
break;
case 2: tmp+=30;
break;
case 3: tmp*=1.1;
break;
case 4: tmp=50;
}
}

int getPriceToCity(TRIP *t, int maxt, int dest)
{
int i;
int sum=0;
for(i=0;i<maxt;i++)
if(t[i].dest=dest)
sum+=getPrice(t[i]);
}

ארכיון

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

דיונים חדשים