maor18 פורסם 2020 בדצמבר 20 מחבר Share פורסם 2020 בדצמבר 20 ציטוט של af db creid אין שום צורך בלהטוטי stack מסובכים. לStack יש פונקציה בשם elementAt שעושה בדיוק את מה שהשם שלה מרמז ושוב, בדיוק בזה אסור לנו לגעת. היחידים שמותר לנו הם push,pop,top וisEmpty. 3 . הלוואי שהחיים שלנו היו קלים יותר ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
af db creid פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 רגע, לא השתמשת בשלוש stacks? ואסור? ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
af db creid פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 ואם תיתן שמות משמעותיים למשתנים יהיה קל יותר להבין מה הקוד שלך מנסה לעשות. ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
maor18 פורסם 2020 בדצמבר 20 מחבר Share פורסם 2020 בדצמבר 20 ציטוט של af db creid רגע, לא השתמשת בשלוש stacks? ואסור? מותר לנו להשתמש בכמה stacks שאנחנו רוצים, אבל בתנאי שהם עומדים בדיוק במה שלמדנו (שזה מה שכתבתי לך למעלה) ציטוט של af db creid ואם תיתן שמות משמעותיים למשתנים יהיה קל יותר להבין מה הקוד שלך מנסה לעשות. temp1 מתיימר להיות המחסנית שאליה עוברים כל הספרות ששוות למספר. אל temp עוברים כל הספרות שלא שוות. זה בעיקרון הרעיון, אבל אני לא מצליח ליישם אותו ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
exeaction פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 לא מומחה לג'אווה אבל מכיר מבני נתונים ובכללי זו שאלה של אלגוריתמקיה (בגלל זה יש הרבה "אסור") אז אתן את השנקל שלי. נניח ויש לך 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. מקווה שמספיק מובן. ממליץ לך לתרגם את הטקסט לכתיב אלגוריתמי כמה שאפשר לפני הכתיבה בפועל. ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
exeaction פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 ציטוט של 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. מקווה שמספיק מובן. ממליץ לך לתרגם את הטקסט לכתיב אלגוריתמי כמה שאפשר לפני הכתיבה בפועל. ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
ch33 פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 ניסית לדבג? קוד כזה לא קשה לדבג ולמצוא את הפאק הלוגי. תכניס קלט פשוט שאתה יודע שזה לא עובד עבורו, תעקוב אחרי המשתנים ותעבור שורה שורה בדיבאגר. ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
exeaction פורסם 2020 בדצמבר 20 Share פורסם 2020 בדצמבר 20 (נערך) ציטוט של 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 בדצמבר 20 על-ידי exeaction ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
Buck פורסם 2020 בדצמבר 21 Share פורסם 2020 בדצמבר 21 (נערך) ציטוט של 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 בדצמבר 21 על-ידי Buck ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
af db creid פורסם 2020 בדצמבר 21 Share פורסם 2020 בדצמבר 21 ציטוט של 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 בתקופת הלימודים). ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
Buck פורסם 2020 בדצמבר 22 Share פורסם 2020 בדצמבר 22 (נערך) אני חושב שהאיסור הוא על שימוש בכלים מורכבים של השפה שהוא לא למד עליהם ולא במבנה פשוט כמו מערך. goto בסי היא אחלה לניקיון משאבים, אלא אם המתרגלים/המרצים חושבים שהם מבינים בכתיבת קוד יותר מליינוס טריבלדס והכותבים של לינוקס... נערך 2020 בדצמבר 22 על-ידי Buck ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
af db creid פורסם 2020 בדצמבר 22 Share פורסם 2020 בדצמבר 22 (נערך) ציטוט של Buck אני חושב שהאיסור הוא על שימוש בכלים מורכבים של השפה שהוא לא למד עליהם ולא במבנה פשוט כמו מערך. אני הבנתי שהאיסור הוא על שימוש בכל דבר שלא יגרור פתרון בעזרת מחסניות. ציטוט של Buck goto בסי היא אחלה לניקיון משאבים, אלא אם המתרגלים/המרצים חושבים שהם מבינים בכתיבת קוד יותר מליינוס טריבלדס והכותבים של לינוקס... לא רק הוא, גם עוד כמה מהשמות הגדולים... וזהו, זו בדיוק הבעיה, שזה מה שהם חושבים (גם אם לא אומרים את זה). אגב, אומרים טורבלדס (torvalds). נערך 2020 בדצמבר 22 על-ידי af db creid ציטוט קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
הצטרפ/י לדיון
בשלב זה תוכל/י להצטרף לדיון, ולאחר מכן להצטרף לקהילה שלנו. אם כבר יש לך חשבון אצלנו, אנא התחבר/י עכשיו על מנת להגיב תחת שם המשתמש שלך.
לתשומת לבך: התגובה תופיע לגולשים לאחר אישור של צוות הנהלת הפורומים.