עבור לתוכן

עזרה בכתיבת תוכנית בC - ללימודים

Featured Replies

פורסם

שלום רב,

אשמח לעזרה בנושא שפת C -

קיבלתי תרגיל לבנות תוכנה שאמורה לבצע:

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

במידה והמספר הנקלט אינו שלם או שנקלטו תווים שאינם מהווים מספר (חישבו איך תוכלו

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

אין לי מושג איך להתחיל אפילו לכתוב את זה -

מבני בקרה מותרים לשימוש -

IF - ELSE - WHILE - FOR - DO.WHILE - WHITCH

אפילו כיוון כללי יספיק לי...

תודה מראש,

פורסם

כיוון כללי:

קלוט מחרוזת.

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

תבדוק אם יש בא את הספרה 5 באמצעות לולאה.

תוציא פלט

שים לב שניתן לשלב לולאות.

פורסם
  • מחבר

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

למשל יש את המספר 154847

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

פורסם

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

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

פורסם

#include <iostream>

using namespace std;

int main()
{
char n[64] = {0};

cin >> n;

bool five_exist = false;
bool dot_exist = false;

for(unsigned int i = 0;i < strlen(n);i++)
{
if(n[i] < '0' || n[i] > '9')
if(n[i] == '.')
{
if(dot_exist == true)
{
cout << n << " is not a valid number" << endl;
return 0;
}

dot_exist = true;
}
else
{
cout << n << " is not a valid number" << endl;
return 0;
}

if(n[i] == '5')
five_exist = true;
}

if(five_exist)
cout << n << " contain 5" << endl;

if(dot_exist)
cout << n << " is not an integer" << endl;
}

הנה,פשוט תעבור בלולאה על המספר,אם הוא מכיל יותר מנקודה אחת הוא לא מספר תקין,אם הוא מכיל נקודה אחת אז הוא לא מספר שלם,אם הוא מכיל 5 אז תדפיס שיש 5

פורסם

סבבה, אבל:

א. הקוד שלך הוא קוד ++C, לא C.

ב. יש פה שימוש במחרוזות, שאני לא בטוח אם פותח הת'רד למד עליהן עדיין...

פורסם
  • מחבר

סבבה, אבל:

א. הקוד שלך הוא קוד ++C, לא C.

ב. יש פה שימוש במחרוזות, שאני לא בטוח אם פותח הת'רד למד עליהן עדיין...

א. ++C אנחנו לא לומדים - למדים רק פקודות בC ורק פקודות הנכללות בstdio.h

ב. לא למדנו מה זה מחרוזת אבל - אמרו לנו משהו על זה שאפשר לקלוט את המספר בצורה מהסוג


scanf("%c",&num);

זה מה שקרא מחרוזת?

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

תודה

פורסם

לא, זה תו בודד. מחרוזת זה מערך של תווים (נקרא ע"י s%).

פורסם
  • מחבר

אז עוד אין לי מושג מה זה.....

אבל איך אפשר לעבוד עם c% ??? - אמרו לנו שככה אמורים לבנות את זה - בהתחשב בפקודות המותרות...

פורסם

באמצעות c% אתה יכול לקרוא כל פעם תו אחד מהקלט:

char ch;

while (blabla) {
scanf("%c", &ch);
/* do something with ch */
}

שים לב ש-ch הוא תו ולא מספר. הכוונה היא שאם הקלדת את המספר 5, אז ערכו של ch יהיה התו '5'.

פורסם

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

אני מקווה שלמדתם את הפקודה getchar. הפקודה הזאת קולטת תו בודד (כלומר 5 זה תו ו15 זה שני תווים). מה שאתה בעצם אמור לעשות זה לקלוט בלולאה תווים בעזרת getchar ותנאי היציאה (כניסה) מהלולאה יהיה הקשת התו אנטר כלומר

while(c!='\')

כאשר c הוא המשתנה שמקבל את הערך של התו ו- '\' זהו התו של מקש האנטר (נדמה לי, אתה יכול למצוא את זה בקלות בגוגל).

הפקודה getchar מצפה לתו אחד וכאשר אתה מכניס כמה תווים ביחד אז רק הראשון נכנס למשתנה c והשאר נשמרים בbuffer. כל פעם שהלולאה תרוץ היא תקלוט את התו הבא מהbuffer עד שהתו יהיה אנטר ואז הלולאה תיפסק. אם אתה רוצה לוודא שאחד מהתווים הוא 5 אז תוסיף משתנה שייקבל ערך true (כלומר מה שבא לך. 1 או אפס או whatever) ואם התו הזה לא קיבל ערך true עד סוף הלולאה אז אתה יודע שהתו 5 לא נמצא שם.

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

פורסם

while(c!='\')

'\' זהו התו של מקש האנטר (נדמה לי, אתה יכול למצוא את זה בקלות בגוגל).

התו של סוף שורה הוא 'n\'.

פורסם

צודק ב-100% טעות שלי!

שניצל , מה אתה חושב על הפתרון האמור?

פורסם
  • מחבר

תודה רבה לכולכם -

אני חושב שהבנתי איך לעשות את זה - לא בטוח

אנסה ואם יהיו בעיות אחזור לכאן...

ארכיון

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

דיונים חדשים