עבור לתוכן

בעיה בחלוקת מספר ליחידות בשפת C

Featured Replies

פורסם

שלום רב,

יש לי בעיה בחלוקת מספר לספרות.

אם לדוגמא אני לוקח את המספר

999999999 (9 פעמים9)

 
printf("Enter number to 10 digitals\n");
scanf("%d",&p);


a = (p % 10);
b = (p % 100) / 10;
c = (p % 1000) / 100;
d = (p % 10000) / 1000;
e = (p % 100000) / 10000;
f = (p % 1000000) / 100000;
g = (p % 10000000) / 1000000;
h = (p % 100000000) / 10000000;
j = (p % 1000000000) / 100000000;
k = (p/1000000000);

אז זה בסדר, וכל ספרה נכנסת למקומה ו k מקבל 0

(כל אותו מקבלת 9 חוץ מK שמקבלת 0)

אבל ברגע שאני שם

9999999999 (10 פעמים 9)

זה כבר לא עובד והכל מתחרבש...

החלפתי את המשתנה P מסוג אינטגר ל9999999999(10 פעמים 9) וזה עבד...

זאת אומרת שיש הפרעה כלשהי במשתנה...

אז ניסיתי לשים אותו כ Long וזה גם לא עזר....

אז אשמח לעזרתכם לפתור את הבעיה

תודה רבה!

פורסם

int הוא בדרך כלל מספר בן 32 ביט, כלומר מספר בתחום 2147483648- עד 2147483647.

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

במקרה של unsigned int המספר הוא בין 0 ל-4294967295, וגם אז תהיה גלישה.

המשמעות של long בד"כ משתנה ממערכת למערכת, יש מערכות שבהן long הוא 64 ביט, ויש מערכות שבהן long הוא 32 ביט (כמו int) ובשביל 64 ביט צריך להשתמש ב-long long.

פורסם
  • מחבר

תודה רבה אך לא הולך לי.

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

פורסם

מה זה "לא הולך לי"?

לא מתקמפל? מתקמפל אבל לא רץ? לא מציג תוצאות נכונות? באה גודזילה ואוכלת לך את המחשב?

כמו שאמרתי קודם, אי אפשר להכיל מספר בן 10 ספרות בתוך int, אתה חייב להשתמש ב-long long או int64 (שהם אותו דבר).

חוץ מזה, למה שלא תשתמש בלולאה (כל פעם תחלק את המספר ב-10)?

פורסם
  • מחבר

לא הולך לי=לא משפיע על התוכנית השינוי של הLong long

חוץ מזה שלא למדנו את זה אז אני מעדיף שלא להשתמש בזה.

התוכנית בעיקרון היא:

מקבלת מספר עד 10 ספרות בלבד ובודקת האם הוא פלינדרום ( Palindrome : קריאת הספרות שלו זהה בשני הכוונים) ומדפיסה הודעה מתאימה בשני המקרים .(אסור להשתמש במערכים)

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

אם האיברים האחרונים שווים ל0 והראשון הוא ספרה אז זה לא פלינדרום.

אשמח לדעתך בנושא והסבר כיצד לעשות זאת בתור לולאה.

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

לא עשיתי לולאה כי אני לא יודע איך זה ישפיע.

פורסם

בשביל לפתור את הבעיה על מספרים עם 10 ספרות או יותר, צריך אחד משני דברים:

להשתמש בטיפוס שמסוגל להחזיק 64 ביט, כלומר long long, שלטענתך זה לא רלוונטי, או

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

יש איזו דרישה מיוחדת שאתה אמור להיות מסוגל לטפל במספרים גדולים?

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

פורסם
  • מחבר

מספר עד 10 ספרות כולל ולא עם 10 ספרות או יותר.

אשמח אם תפנה אותי לקישור מתאים.

תודה רבה.

פורסם

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

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

פורסם
  • מחבר

גררר זה ממש מייאש!

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

בדבר הלקוט ספרה-ספרה- אי אפשר כי אם אני אשים 10 משתנים אחד ליד השני וזה שיכניס מספר לתוכנה ירצה מספר של 5 ספרות? התוכנה לא תמשיך עד שהיא תקבל את כל הספרות.

פורסם

מה לא ברור?

אין דרך להכיל מספר של 10 ספרות במשתנה של 32 ביט.

פורסם
  • מחבר

אז איך אפשר לפתור את השאלה?

פורסם

תשאל את המורה שלך, ותבין יותר טוב מה הוא מצפה שתעשה.

יכול להיות שהוא מצפה לקלוט רק מספרים עד טווח מסוים (2147483647 או 4294967295).

פורסם

למה לא לקלוט את המספר בתור string?

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

אתה יכול לקרוא אותם ככה


char* str;
scanf("%s",str);
//could be scanf("%s",&str); can't remember
//print the i-th char
printf("digit - %c",str[i-1]);

אולי זה לא הכיוון של הספרות שאתה רוצה... אבל זה אמור לעבוד וגם עם יותר מ-10 ספרות :)

בהצלחה,

סיון

פורסם

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

חוץ מזה, בתכנית שלך יש באג, כי אתה מעביר מצביע לא מאותחל ל-scanf.

פורסם

תשתמש בdouble לא בint (תמיכה של 64 ביט).

ארכיון

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

דיונים חדשים