אני יושב כבר למעלה משעתיים

ran 15

New member
אני יושב כבר למעלה משעתיים

אני פשוט לא יודע איך לעשות את זה. יש לי שאלה שאומרת - שאלה 1 נתונה מחסנית שמכילה קבוצת נתונים לא ריקה. חלק מהנתונים מופיע פעמיים וחלק – פעם אחת פעם אחת בלבד. למשל: 23 5 78 6 4 78 4 23 פתח אלגוריתם אשר מקבל את המחסנים עם הנתונים ומוחק ממנה את הנתונים שאין להם זוג. הערה: חובה להשתמש בממשק עברי עבור מחסנית (עמוד 61, ספר "עיצוב תכנה"). עכשיו הממשק העברי שלי הוא - אתחל-מחסנית - מחזיר מחסנית ריקה מחסנית-ריקה?(S) - מקבלת כפרמטר מחסנית S מחזירה אמת על מחסנית ריקה ושקר אחרת. דחוף-למחסנית(S,x) -מכניסה איבר X לראש מחס' S . הנחה: S מאותחלת. שלןף-מחסנית(S) - פעולה מוציאה את האיבר הראשון במחסנית S ומחזירה את ערכו. הנחות:מחסנית S מאותחלת אינה ריקה. הצץ-למחסנית(S) - פעולה מחזירה את ערכו של איבר שבראש המחסנית מבלי להוציאו. הנחות:מחסנית S מאותחלת ואינה ריקה. למישהו יש רעיון , אני כל פעם חושב על משהו ומהוא מתברר כלא נכון..
 

vinney

Well-known member
יש הגבלות?

תמיד אפשר להמיר את המחסנית למבנה נתונים אחר שניתן למיין, ואז לבנות מחדש את המחסנית
 

ran 15

New member
אמממ...חשבתי להפוך למערך

ז"א להציב במערך ואז להציב...אבל אני לא יודע כמה יש במחסנית. יש לך רעיון לעבוד עם שתי מחסניות (זה הרעיון הכללי)...
 
כבר למדתם רשימה?

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

ran 15

New member
אני שחכתי להגיד .

אני לא בונה תכנית בסביבת עבודה. אלא אלגוריתם במילים. חשבתי ככה- לקחת את הראון והשוות אותו לשאר אחריו אבל נניח בשני - הוא שווה לראשון ואחרי שהעברתי אותו אז הוא כבר לא נמצא במחסנית ,זה לא נארה לי בכלל אפשרי. (עם הפעולות שנתנו לי בכל אופן..) אני יושה על זה כבר יום שני (היום) ואין לי שום התקדמות. למישהו יש רעיון איך לעשות את זה. לא למדנו הקצאות. למדנו רשומות אבל הרעיון הוא לפתח אלגורתמים ולא בשפת פסקל \ C אם מישהו יכול לעזור לי אני ממש יודה לו...
 

orennahum

New member
זה דיי פשוט

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

ran 15

New member
אתה האמת חשבתי על זה..

רק לא זה לא הסתדר לי עכשיו יותר טוב. תודה רבה!
 

vinney

Well-known member
אם אין לך מגבלת סיבוכיות - זה פתרון

מצוין
 

ran 15

New member
וזהו הרעיון לעשות את זה

שוב ב-אלגורתמים. בעזרת הממשק העברי שהבאתי לך למעלה.
 

ran 15

New member
סיבה אחת ויחידה.

אני לא יכול להקצות מערך תוך כדי התכנית מבין?.. או שבעצם אני לא הבנתי אותו..??!
 

vinney

Well-known member
למה אתה לא יכול?

ולמה אתה לא יכול להשתמש ברשימה?
 

ran 15

New member
טוב עכשיו אני ממש מרגיש אידיוט..

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

vinney

Well-known member
לא למדת - לא למדת. אין מה להרגיש

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

ran 15

New member
תוכל לעזור לי בכתיבת באלגוריתם..

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

vinney

Well-known member
אורן כתב לך...

פשוט תפרק את זה לצעדים מסודרים, וזהו
 
למעלה