שלום....

Yurismaster

New member
שלום....

התבקשתי לעזור למישהו שלומד בתיכון עכשיו C, אבל אני לא למדתי כמה דברים במכללה כמו מחסנית, אז אני פונה אליכם לעזרה בתרגיל הזה: שאלה: נגדיר טיפוס נתונים מופשט "מספר ארוך" כמספר שמספר הספרות שלו אינו מוגבל על-ידי: int (אלף (±32 או long (מיליארד 2±( א. הצע ייצוג לטנ"מ "מספר ארוך". ב. פתח אלגוריתם "סכום מספרים ארוכים" המקבל 2 מספרים ארוכים כאלה ומחזיר מספר ארוך שלישי המהווה את סכומם. תשובה: א. ייצוג - מחסנית שבה הספרה הכי משמעותית MSD נמצאת בתחתית המחסנית, והספרה הכי פחות משמעותית LSD נמצאת בראש המחסנית. ב.???
 

אלדד28

New member
אתה בכיוון הנכון וזה לא מסובך

נגיד שהחלטנו לעשות את מה שאתה רוצה, ואנחנו רוצים לחבר שני מספרים גדולים, נניח 547 ו-98879 (ממש גדולים
). איך היית עושה את זה ידנית? היית מחבר את 7 ל-9, את 4 ל-7, וכו', כאשר בכל שלב אם עברת את 10 אתה "זוכר 1" ולוקח אותו הלאה לחיבור הבא. עד כאן - פשוט מאוד. עכשיו השאלה הבאה היא איך תאחסן את המספר? אני נותן לך את התוצאות של התרגיל לדוגמה - 6, אח"כ 2, אח"כ 4, אח"כ 9, ואח"כ 9. אם תכניס את הספרות למחסנית, הן ייצאו "הפוך". איך תהפוך אותן בחזרה? את זה אני אשאיר לכם
 

Yurismaster

New member
תודה...

באמת הייתי בכיוון הזה...הבעיה היא שביקשו לעשות את זה באלגוריתם, הנה מה שעשיתי...חוות דעת תתקבל בברכה סכום מספרים ארוכים {פעולה המקבלת שני מספרים ארוכים ומחזירה מספר ארוך שלישי המהווה את סכומם. הנחה: מחסנית S מאותחלת.} (1)אתחל מחסנית -> S1 (2)אתחל מחסנית -> S2 0(3)->b (4)כל עוד לא מחסנית ריקה? (S2) וגם (1S) לא ריקות שניהן, בצע: (5.1) שלוף ממחסנית (1S) -> x אם אין מה לשלוף x->0 (5.2)שלוף ממחסנית (S2) -> y אם אין מה לשלוף y->0 (5.3)+b x+y -> z (6)אם z>10, בצע: (6.1) z-10-> a (6.2) דחוף למחסנית (S3,a) (6.3)z-(z%10)/10->b 7))אם z<10 (7.1) 0->b (7.2)דחוף למחסנית (S3,z) (8)כל עוד לא מחסנית ריקה? (S2) וגם (1S) לא ריקות שניהן, בצע:(4)
 

אלדד28

New member
הממממ

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

Zack DA

New member
תחשוב רק עוד קצת.

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

Yurismaster

New member
כתבתי את זה

בלי לדעת איך בדיוק מחסנית נראית אז הנחתי שזה די דומה לרשימה מקושרת , אולי אני צריך לשלוף כל פעם מתוך הרשימות איבר מהסוף, כלומר בk-i כאשר i האינדקס של הלולאה ו-k הגודל של המחסנית הגדולה מבין השתיים?...
 

Yurismaster

New member
ולגבי ה %

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

אלדד28

New member
מחסנית היא בדיוק מה שהיא - מחסנית

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

Yurismaster

New member
הפוך?.....

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

eyalbd

New member
הסבר קצר

מחסנית היא מבנה נתונים שתומך ב- 3 פעולות הפעולה push מכניסה איבר לראש המחסנית הפעולה pop מוציאה איבר מראש המחסנית הפעולה top מחזירה את הערך של האיבר בראש המחסנית מבלי לשנות את המחסנית עצמה. שים לב שכל הפעולות מתבצעות על ראש המחסנית. אתה לא יכול לשנות להוסיף או להוריד איברים מאמצע או מתחתית המחסנית. בעברית קוראים לזה "מחסנית" כי יש לזה אותו עיקרון למחסנית רובה אפשר להכניס או להוציא כדור רק מראש המחסנית. אתה צריך לפתוח ספר בסיסי על מבנה נתונים (או לחפש ברשת) כדי לקבל תמונה מלאה יותר וגם קוד לדוגמא.
 
למעלה