פורסם 2020 בדצמבר 204 שנים מחבר ציטוט של af db creid אין שום צורך בלהטוטי stack מסובכים. לStack יש פונקציה בשם elementAt שעושה בדיוק את מה שהשם שלה מרמז ושוב, בדיוק בזה אסור לנו לגעת. היחידים שמותר לנו הם push,pop,top וisEmpty. 3 . הלוואי שהחיים שלנו היו קלים יותר
פורסם 2020 בדצמבר 204 שנים ואם תיתן שמות משמעותיים למשתנים יהיה קל יותר להבין מה הקוד שלך מנסה לעשות.
פורסם 2020 בדצמבר 204 שנים מחבר ציטוט של af db creid רגע, לא השתמשת בשלוש stacks? ואסור? מותר לנו להשתמש בכמה stacks שאנחנו רוצים, אבל בתנאי שהם עומדים בדיוק במה שלמדנו (שזה מה שכתבתי לך למעלה) ציטוט של af db creid ואם תיתן שמות משמעותיים למשתנים יהיה קל יותר להבין מה הקוד שלך מנסה לעשות. temp1 מתיימר להיות המחסנית שאליה עוברים כל הספרות ששוות למספר. אל temp עוברים כל הספרות שלא שוות. זה בעיקרון הרעיון, אבל אני לא מצליח ליישם אותו
פורסם 2020 בדצמבר 204 שנים לא מומחה לג'אווה אבל מכיר מבני נתונים ובכללי זו שאלה של אלגוריתמקיה (בגלל זה יש הרבה "אסור") אז אתן את השנקל שלי. נניח ויש לך 3 מחסניות (זה first in last out?) מחסנית אחת הנתונה, ועוד 2 עזר StackIn, StackA, StackB תבחר כיוון שרירותי ממנו עבורו תחפש רצף (אחדות, עשרות מאות וכו' למשל) ותתחיל לבדוק את הראש ובמידה ואין שיוון בין ספרת האחדות לראש, שפוך מIn ל-A. במידה ותמצא איבר בIn שתואם לספרת האחדות של הנתון, כעת תתחיל לשפוך איברים לB במקום A. כעת יש 2 מקרים, 1 שמצאת רצף וסיימת. 2 - אין שיוון באחד מהספרות ולכן אתה צריך לשפוך הכל מB חזרה לIn, ואת אותה הספרה שממנה בדקת אם מתחיל רצף לשפוך שוב לA ולהמשיך כך עם האיבר שאחריו. עכשיו יתכן שמחסנית A תתמלא ולא תמצא רצף בגלל שבדקת בכיוון הלא נכון, אבל מה טוב, המסנית A היא בדיוק הפוכה מIn ולכן אתה יכול לעשות את אותן הפעולות כמו קודם, רק שתתחיל לבדוק ולשפוף מA לIn. מקווה שמספיק מובן. ממליץ לך לתרגם את הטקסט לכתיב אלגוריתמי כמה שאפשר לפני הכתיבה בפועל.
פורסם 2020 בדצמבר 204 שנים ציטוט של exeaction לא מומחה לג'אווה אבל מכיר מבני נתונים ובכללי זו שאלה של אלגוריתמקיה (בגלל זה יש הרבה "אסור") אז אתן את השנקל שלי. נניח ויש לך 3 מחסניות (זה first in last out?) מחסנית אחת הנתונה, ועוד 2 עזר StackIn, StackA, StackB תבחר כיוון שרירותי ממנו עבורו תחפש רצף (אחדות, עשרות מאות וכו' למשל) ותתחיל לבדוק את הראש ובמידה ואין שיוון בין ספרת האחדות לראש, שפוך מIn ל-A. במידה ותמצא איבר בIn שתואם לספרת האחדות של הנתון, כעת תתחיל לשפוך איברים לB במקום A. כעת יש 2 מקרים, 1 שמצאת רצף וסיימת. 2 - אין שיוון באחד מהספרות ולכן אתה צריך לשפוך הכל מB חזרה לIn, ואת אותה הספרה שממנה בדקת אם מתחיל רצף לשפוך שוב לA ולהמשיך כך עם האיבר שאחריו. עכשיו יתכן שמחסנית A תתמלא ולא תמצא רצף בגלל שבדקת בכיוון הלא נכון, אבל מה טוב, המסנית A היא בדיוק הפוכה מIn ולכן אתה יכול לעשות את אותן הפעולות כמו קודם, רק שתתחיל לבדוק ולשפוף מA לIn. מקווה שמספיק מובן. ממליץ לך לתרגם את הטקסט לכתיב אלגוריתמי כמה שאפשר לפני הכתיבה בפועל.
פורסם 2020 בדצמבר 204 שנים ניסית לדבג? קוד כזה לא קשה לדבג ולמצוא את הפאק הלוגי. תכניס קלט פשוט שאתה יודע שזה לא עובד עבורו, תעקוב אחרי המשתנים ותעבור שורה שורה בדיבאגר.
פורסם 2020 בדצמבר 204 שנים ציטוט של exeaction לא מומחה לג'אווה אבל מכיר מבני נתונים ובכללי זו שאלה של אלגוריתמקיה (בגלל זה יש הרבה "אסור") אז אתן את השנקל שלי. נניח ויש לך 3 מחסניות (זה first in last out?) מחסנית אחת הנתונה, ועוד 2 עזר StackIn, StackA, StackB תבחר כיוון שרירותי ממנו עבורו תחפש רצף (אחדות, עשרות מאות וכו' למשל) ותתחיל לבדוק את הראש ובמידה ואין שיוון בין ספרת האחדות לראש, שפוך מIn ל-A. במידה ותמצא איבר בIn שתואם לספרת האחדות של הנתון, כעת תתחיל לשפוך איברים לB במקום A. כעת יש 2 מקרים, 1 שמצאת רצף וסיימת. 2 - אין שיוון באחד מהספרות ולכן אתה צריך לשפוך הכל מB חזרה לIn, ואת אותה הספרה שממנה בדקת אם מתחיל רצף לשפוך שוב לA ולהמשיך כך עם האיבר שאחריו. עכשיו יתכן שמחסנית A תתמלא ולא תמצא רצף בגלל שבדקת בכיוון הלא נכון, אבל מה טוב, המסנית A היא בדיוק הפוכה מIn ולכן אתה יכול לעשות את אותן הפעולות כמו קודם, רק שתתחיל לבדוק ולשפוף מA לIn. מקווה שמספיק מובן. ממליץ לך לתרגם את הטקסט לכתיב אלגוריתמי כמה שאפשר לפני הכתיבה בפועל. אחרי שקראתי את הקוד שעובד חלקית, הבנתי שניסיתי לעשות משהו מאוד דומה. הבעיה בקוד שלך שאתה לא מטפל טוב במקרים בהם האיבר שעומד בראש המחסנית לא שווה לספרה שאתה בודק. במקרה הזה אתה תרצה לסרוק שוב את המחסנית מחדש החל מהאיבר שבא אחרי האיבר הראשון שבו כן הייתה התאמה כדי לא לדלג על רצף תקין. כדי לעשות את זה אתה צריך להחזיר אותם בחזרה למחסנית כמו שתיארתי בהצעה שלי. אתה יכול לעשות את זה גם באמצעות 2 מחסניות ולא שלוש כמו שתיארתי אם תוסיף משתנים שיספרו כמה איברים ייתכן ותצטרך להחזיר למחסנית. סה"כ היית קרוב. נערך 2020 בדצמבר 204 שנים על-ידי exeaction
פורסם 2020 בדצמבר 214 שנים ציטוט של maor18 התייאשתי, שבוע שלם להגשה ופשוט נתקעתי. 5 תרגילים, 4 עשיתי ואחד פשוט לא מצליח. אשמח שתעזרו לי. התרגיל הוא: כתבו פונקציה חיצונית המקבלת כפרמטר מספר שלם חיובי ומחסנית של ספרות. על הפונקציה להחזיר true אם ספרות של המספר מופיעות ברצף במחסנית בסדר כלשהו ו- false אחרת. איך לעזאזל אני עושה את זה? אני נשברתי כבר נפשית, ניסיתי הכל מהכל. הקוד שלי נראה משהו כזה: Stack<Integer> temp = new Stack<Integer>(); int x = num; boolean flag = false; while (!s.isEmpty()) { if (s.top() == x % 10) { temp.push(s.pop()); x /= 10; if (x == 0) flag = true; } else { temp.push(s.pop()); x = num; } } x = num; while (!temp.isEmpty()) { if (temp.top() == x % 10) { s.push(temp.pop()); x /= 10; if (x == 0) flag = true; } else { s.push(temp.pop()); x = num; } } return flag; לא יודע מה הציעו לך, לא קראתי, אבל הכי פשוט ומהיר זה להשתמש בטבלה/מערך מאופס בגודל עשר, לעשות למספר מודולו עשר ולעשות פלוס אחד כל פעם במקום של הספרה שקיבלת. תחלק את המספר בעשר ותמשיך. ואז פשוט להוציא ספרה ספרה מהסטאק ולהוריד באחד במקום המתאים בטבלה. אם סיימת את המספר בלי לנסות לעשות מינוס אחד לאפס אז תחזיר true . אולי צריך להעתיק את הטבלה כמה פעמים ולחזור על התהליך עד שהסטאק מתרוקן ולהחזיר false תלוי בתנאים של הבעיה ובגודל הסטאק. זה קוד של איזה חמש שש שורות. יאללה נו, לא כתבתי כבר כמה שנים בג'אווה אז ברשותך אכתוב את הקוד בC, לא טרחתי לקמפל אבל זה לא באמת משנה זה האלגוריתם וזו כבר המשימה שלך: bool is_digit_in_stack(stack digits, unsigned int number) { int digit_array[10] = {0}; int digit_array_copy[10] = {0}; int number_digits = 0; int stack_digits = 0; while(number){ ++digit_array[number%10]; number/=10; ++number_digits; } while(!digits.is_empty()){ memcopy(digit_array_copy, digit_array, 10); stack_digits = 0; while(digit_array_copy[digits.top()]){ --digit_array_copy[digits.pop()];//I assume that pop returns the leading number ++stack_digits; } if(digits.is_empty() && number_digits == stack_digits){ return true; } else if (digits.is_empty() { return false; } } } שים לה שהwhile(!digits.is_empty()) בהתחלה יכול להיות גם while(True) אבל המתרגלים שמלמדים באקדמיה לא אוהבים את צורת הכתיבה הזאת ומורידים עליה משום מה אז העדפתי לכתוב כך. נערך 2020 בדצמבר 214 שנים על-ידי Buck
פורסם 2020 בדצמבר 214 שנים ציטוט של Buck לא יודע מה הציעו לך, לא קראתי, אבל הכי פשוט ומהיר זה להשתמש בטבלה/מערך מאופס בגודל עשר, לעשות למספר מודולו עשר ולעשות פלוס אחד כל פעם במקום של הספרה שקיבלת. תחלק את המספר בעשר ותמשיך. ואז פשוט להוציא ספרה ספרה מהסטאק ולהוריד באחד במקום המתאים בטבלה. אם סיימת את המספר בלי לנסות לעשות מינוס אחד לאפס אז תחזיר true . אולי צריך להעתיק את הטבלה כמה פעמים ולחזור על התהליך עד שהסטאק מתרוקן ולהחזיר false תלוי בתנאים של הבעיה ובגודל הסטאק. זה קוד של איזה חמש שש שורות. יאללה נו, לא כתבתי כבר כמה שנים בג'אווה אז ברשותך אכתוב את הקוד בC, לא טרחתי לקמפל אבל זה לא באמת משנה זה האלגוריתם וזו כבר המשימה שלך: bool is_digit_in_stack(stack digits, unsigned int number) { int digit_array[10] = {0}; int digit_array_copy[10] = {0}; int number_digits = 0; int stack_digits = 0; while(number){ ++digit_array[number%10]; number/=10; ++number_digits; } while(!digits.is_empty()){ memcopy(digit_array_copy, digit_array, 10); stack_digits = 0; while(digit_array_copy[digits.top()]){ --digit_array_copy[digits.pop()];//I assume that pop returns the leading number ++stack_digits; } if(digits.is_empty() && number_digits == stack_digits){ return true; } else if (digits.is_empty() { return false; } } } כמובן שהצענו דברים דומים! אסור ציטוט של Buck שים לה שהwhile(!digits.is_empty()) בהתחלה יכול להיות גם while(True) אבל המתרגלים שמלמדים באקדמיה לא אוהבים את צורת הכתיבה הזאת ומורידים עליה משום מה אז העדפתי לכתוב כך. שעות התווכחתי עם המתרגל וגם עם המרצה, בסוף הם השתכנעו (אגב, אותו דבר על goto. ולא שהשתמשתי בgoto בתקופת הלימודים).
פורסם 2020 בדצמבר 224 שנים אני חושב שהאיסור הוא על שימוש בכלים מורכבים של השפה שהוא לא למד עליהם ולא במבנה פשוט כמו מערך. goto בסי היא אחלה לניקיון משאבים, אלא אם המתרגלים/המרצים חושבים שהם מבינים בכתיבת קוד יותר מליינוס טריבלדס והכותבים של לינוקס... נערך 2020 בדצמבר 224 שנים על-ידי Buck
פורסם 2020 בדצמבר 224 שנים ציטוט של Buck אני חושב שהאיסור הוא על שימוש בכלים מורכבים של השפה שהוא לא למד עליהם ולא במבנה פשוט כמו מערך. אני הבנתי שהאיסור הוא על שימוש בכל דבר שלא יגרור פתרון בעזרת מחסניות. ציטוט של Buck goto בסי היא אחלה לניקיון משאבים, אלא אם המתרגלים/המרצים חושבים שהם מבינים בכתיבת קוד יותר מליינוס טריבלדס והכותבים של לינוקס... לא רק הוא, גם עוד כמה מהשמות הגדולים... וזהו, זו בדיוק הבעיה, שזה מה שהם חושבים (גם אם לא אומרים את זה). אגב, אומרים טורבלדס (torvalds). נערך 2020 בדצמבר 224 שנים על-ידי af db creid
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.