שאלה בשפת C.

riovelo

New member
שאלה בשפת C.

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

nocgod

New member
מכיר את כלל החלוקה ב3?

אם סכום ספרות המספר מתחלק ב-3 אזי המספר מתחלק ב-3
לדוגמא
15-> 1+5=6 אזי 15 מתחלק ב 3
69->6+9=15->1+5=6 אזי 69 מתחלק ב 3
 

riovelo

New member
בוודאי מכיר. לא הייתי טורח לעלות את ההודעה אם זו הייתה הבעיה

כל הקאץ'' פה כפי שכבר ציינתי, הוא, שהתכנית צריכה לקלוט מספר שיכול להיות גדול מאוד ( שלם וחיובי, שאת זה לא ציינתי קודם ), שלאו דווקא נמצא בתחום של אף אחד מטיפוסי השלמים, כולל לא של long long. לדוגמא המספר הזה: 12345678909876879765456435545454543224545454565656565656565075432246565
והתוכנית תבדוק האם הוא מתחלק ב-3. לי אין קצה קצהו של חוט כיצד להתחיל אפילו.
אדגיש ואציין שלא למדתי עוד במהלך הקורס מחרוזות והקצאת מערכים דינאמית.
 

Royi Namir

New member
לא שאני רוצה לעצבן אבל האם אתה בטוח שהוא אמר מספר ?

לא נראה לי כי אין אף טיפוס שיקבל מספר עם 1000 ספרות לדוגמא.
נראה לי שהוא התכוון למה ש NOCGOD התכווןן. כלומר כל סיפרה שתקיש כחלק מהמספר - תוך כדי - אתה כבר מתחיל לחבר עם הספרה הבאה.
&nbsp
לא רואה דרך אחרת.
ואם הוא אמר לך שיש טיפוס נתונים כזה שיכול לקבל את זה - אז .... יש לי הרבה מה לחלוק עליו.
 

riovelo

New member
כדי למנוע אי הבנות

כך כלשונה, מילה במילה נכתבה המשימה:
"כתבו תוכנית אשר קולטת מספר שלם חיובי גדול מ-0 .המספר הנקלט יכול להיות גדול ביותר ולהכיל מספר לא חסום )סופי( של ספרות. בסוף המספר יוזן Enter . התוכנית תבדוק האם המספר מתחלק ב – 3 .אם כן – תוצג המילה Yes .אם לא – תוצג המילה No . ניתן להניח שהקלט חוקי ומכיל ספרות בלבד, ובסופו יש Enter. דוגמה : בהינתן הקלט 33333333333333333333333333333333333333333333333333333333333333333333333333 התוצאה המוצגת היא Yes . שימו לב שמפאת גודלו של המספר לא ניתן לייצגו באמצעות int וגם לא באמצעות long ואפילו לא באמצעות . long long
רמז : היעזרו בסכום הספרות."
 

nocgod

New member
תשתמש ב getch

כל עוד הוא מחזיר לך מספר ולא n\ תמשיך לקרוא ולסכום (תבודק קלט, אל תהיה עצלן ותעשה לעצמך הנחות)
ברגע שקראת n\ תבדוק אם הסכום שצברת מתחלק ב 3
קח בחשבון שהשיטה הזאת גם לא fool proof אבל כנראה מה שמצפים מכם, למה לא? כי אם המספר ארוך מספיק זה יכול לעשות לך overflow
 
אפשר לשכלל טיפה ולסכום מודולו 3

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