עבור לתוכן

שפת C - עזרה בהבנת משימת הגשה

Featured Replies

פורסם

היי, בוקר טוב ! :-*

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

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

tlmtd5eo4ngz.jpg

jei4ymn1bdtm.jpg

תודה לעוזרים ויום נעים

פורסם
  • מחבר

חבר'ה רק בקשתי הכוונה בגדול, לא שיפתרו לי את התרגיל :P

פורסם

וואו שאלה ארוכה...

בעקרון אם הבעיה שלך היא עם הקלט, אתה פשוט צריך לקרוא אותו כמחרוזת.

אח"כ אתה יכול לגשת לתווים שונים במחרוזת כמו לאיברים במערך.

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

אתה יכול פשוט לעבור על הקלט איבר-איבר בעזרת לולאת FOR ובכל פעם לבצע את הפעולה שאתה רוצה על תו בודד.

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

למשל אתה יכול לדעת שאתה צריך להתייחס לאיברים הראשונים (משמאל לימין) כמספר כל עוד לא הגעת ל-W או L וכו'.

פורסם
  • מחבר

כן השאלה לא קצרה.. כל התוכן מבלבל

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

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

אין דרך אחרת ליישם את זה חוץ ממערך?

פורסם
  • מחבר

איפה שניצל :nixweiss:

פורסם

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

אפשר לעשות את זה ידנית, או באמצעות פונקציות מובנות כמו scanf/gets/fgets.

פורסם
  • מחבר

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

פורסם
  • מחבר

מישהו אמר לי שהוא לא השתמש בכלל במערכים והוא עשה את זה עם לולאת while אינסופית ו-switch בתוכו. אני לא הבנתי איך בדיוק אפשר לעשות את זה ככה, עזרה!

פורסם

למעט המספר הראשון (שאותו קולטים ב-scanf נפרד מחוץ ללולאה), כל הפקודות בנויות באותו אופן - תו ולאחר מכן מספר (או במקרה של הפקודה L, תו+מספר+תו+מספר).

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

פורסם
  • מחבר

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

את הסכום ההתחלתי אתה קולט לפני שאתה נכנס בכלל ללולאת WHILE ואז בלולאה הזו אתה עושה בתחילתה קליטה נוספת לאות ואז יוצר קייסים שבכל קייס קליטה למספר שעליו תתבצע הפקודה של אותה אות, ושוב הלולאה חוזרת על עצמה קולטת אות נוספת ומחפשת את הקייס המתאים וכו' וכו'?

אני לא מבין איך לבצע את זה, אתה יכול להראות לי מן קוד כללי כזה 'בגדול'?

פורסם


scanf("%f", &firstAmount);
while (1)
{
c = getchar();
switch(c) {
case 'W':
scanf("%f", &amount);
// code to handle withdraw
break;
case 'D':
scanf("%f", &amount);
// code to handle deposit
break;
case 'L':
scanf("%fI%f", &amount, &percentage);
// code to handle loan
break;
}
}

וכו' וכו'. יש מבין?

פורסם
  • מחבר

יש. תודה

פורסם
  • מחבר

עריכה: הסתדרתי

ארכיון

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

דיונים חדשים