עבור לתוכן

דרושה קצת עזרה בבעיה ב C++

Featured Replies

פורסם

שלום לכם,

לאחרונה נקלתי בשאלה ב C++

שאין לי קצה של מושג, איך להתחיל אותה אפילו,

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

כתוב תכנית שקולטת אוסף של תווים שמופיע בסדר הבא:

סדרת של ספרות, נקודה עשרונית, סדרה של ספרות סוף סדרה '*' .

התוכנית בונה מאותו אוסף מספר מסוג ממשי המורכב מאותן ספרות שנקלטו.

במידה וקלט לא תקין יש להדפיס הודעה.

הערה: חובה לבדוק תקינות קלט (התווים הם רק ספרות או נקודה)

דוגמא בעבור הקלט התוים 423.52

הפלט מספר ממשי 423.52

תודה רבה.

פורסם

לקרוא תווים בודדים מהקלט אתה יודע?

לקרוא תו (char) המייצג ספרה ולהמיר אותו למספר (int) בעל הערך הזה, אתה יודע?

תתחיל מתכנית יותר פשוטה, שקוראת רק את החלק הראשון (מה שעד הנקודה) ומכניסה אותו לתוך משתנה מסוג int.

פורסם
  • מחבר

יש איזשהו סיכוי שתרשום לי את הפתרון ואני כבר ימשיך משם? :smile1:

פורסם

אממ.... לא, כי אז מה החוכמה? :) הפורום לא כאן בשביל לפתור לך את שיעורי הבית, אלא כדי לעזור לך לפתור אותם בעצמך.

פורסם

אם בכוונה לממשי אתה מתכוון למספר ללא הגבלה על גודלו אזי לא תוכל להכניס אותו לתוך אף סוג בסיסי של C++

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

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

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

ולא, אין סיכוי שאני כותב לך את זה :)

פורסם
  • מחבר

איך אני קולט מחרוזת של תווים?

for (i=0;i<n;i++)

while (i>n) ?

פורסם

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

פורסם
  • מחבר

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

פורסם

תתחיל מתכנית יותר פשוטה, שקוראת רק את החלק הראשון (מה שעד הנקודה) ומכניסה אותו לתוך משתנה מסוג int.

תעבוד בשלבים.

פורסם
  • מחבר

אוקי, אז עשיתי Whlie שעוצר את הקליטת תווים כשהוא מגיע לתו שאינו נקודה, איך אמור להגיד לו מתי לעצור אח"כ? תודה :)

פורסם

עזוב את זה שנייה. תסיים לכתוב את החלק הראשון - שקורא את הספרות שלפני הנקודה לתוך int.

פורסם
  • מחבר


int main()
{
char c;
char str[1024];
str[0] = '\0';
scanf("%c", &c);
while (c != '*')
{
sprintf(str, "%s%c", str, c);
scanf("%c", &c);
}
printf("%s", str);
printf("%f", atof(str));
return (0);
}

אוקי אז הבנתי, לפי השאלה בסוף המחרוזת יש '*'

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

רק למה הוא מדפיס בן כל תו /n ?

פורסם
  • מחבר
:jump: :jump:
פורסם

הקוד נראה סבבה (למרות שהייתי מעדיף להימנע מ-sprintf, זה סתם מיותר). לא כל כך הבנתי מה הבעיה שלך בדיוק (מה הקלט לתכנית, ומה בדיוק היא מדפיסה?)

נ.ב. למה אתה עושה return 1? נהוג להחזיר 0.

פורסם
  • מחבר

הקלט הוא מחרוזת של תווים. נכנסים למערך,

הפלט הוא מספר ממשי, החזרתי גם 1 כי אני מתעצל לשנות ל VOID.

בכל אופן, במקום להדפיס 334.55 נניח. ההדפסה היא 5_5_._4_3_3 (כש-'_' = רווח)

המ, איך אני פותר את זה, ואיך אני יוכל להמנע משימוש ב sprintf?

ארכיון

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

דיונים חדשים