פורסם 2009 באפריל 1616 שנים היי.. יש לי מחר מתכונת ואני עכשיו חוזר על החומר. מצאתי שאלה על עצים בינאריים שאני קצת הסתבכתי איתה. "עץ מכפלה" הוא עלה או עץ בינרי , שערך השורש הוא מכפלת ערכי צאצאיו, וכל אחד מתתי העצים שלו הוא "עץ מכפלה". א. לפניך עצים בינאריים הבאים : (צד שמאל זה A וצד ימין זה D) ציין עבור כל אחד מהם הוא "עץ מכפלה ". נמק . ב. כתוב פעולה המקבלת כפרמטר עץ בינרי ומחזירה "אמת" אם הוא "עץ מכפלה" ,אחרת יוחזר "שקר". אני אשמח אם מישהו יוכל לעזור לי לפתור את זה. תודה רבה! ---------------- Now playing: Yoni Bloh - סיבה לעזוב via FoxyTunes
פורסם 2009 באפריל 1616 שנים נראה לי שהבעיה היא האם מדובר פה במכפלת כל הצאצאים כולל צאצאי צאצאים או רק צאצאים ישירים מדרגה ראשונה, לא?
פורסם 2009 באפריל 1616 שנים אתה בסה"כ בודק אם בן X בן = אבא, זה כל הקוד.כל העצים עונים על זה, מלבד העץ הימני ביותר.
פורסם 2009 באפריל 1616 שנים מחבר אתה בסה"כ בודק עם בן X בן = אבא, זה כל הקוד.כל העצים עונים על זה, מלבד העץ הימני ביותר.אבל צאצא זה גם "נכדים" ו"נינים" ועוד, לא?
פורסם 2009 באפריל 1616 שנים ע"פ הניסוח של השאלה, עץ בינארי הוא עץ מכפלה אם מתקימים התנאים הבאים:בן שמאל X בן ימין = ערך השורש.בן שמאל הוא עץ מכפלה.בן ימין הוא עץ מכפלה.ולכן הקוד הפשוט הוא:bool product(tree* T){ if(T == NULL) return true; if( T->right * T->left == t->Value) return ( true && product(T->right) && product(T->left) return false;}נ.ב.אני לא בטוח שהוא צריך להחזיר גם ערך אמת (true) בכל פעם שהוא קורא רקורסיבית לעצמו, יכול להיות שהמילה הזו מיותרת שם...לילה טוב, ובהצלחה במבחן שלך מחר!
פורסם 2009 באפריל 1716 שנים קודם כל, לעשות true && זה חסר משמעות.חוץ מזה, T->right ו-T->left הם לא מספרים, אלא nodes בעץ. אי אפשר לכפול ביניהם, צריך לכפול את T->left->value ו-T->right->value (ולבדוק קודם כל שאין null, כמובן).
פורסם 2009 באפריל 1716 שנים קודם כל, לעשות true && זה חסר משמעות.אני מודע לזה, ציינתי בעצמי שזה עלול להיות מיותר.חוץ מזה, T->right ו-T->left הם לא מספרים, אלא nodes בעץ. אי אפשר לכפול ביניהם, צריך לכפול את T->left->value ו-T->right->value (ולבדוק קודם כל שאין null, כמובן).צודק, טעיתי.אני מניח שהקוד המתוקן הוא משהו בסביבות:bool product(tree* T){ if(T == NULL) return true; if(T->right == NULL && T->left == NULL) return true; if(T->right == NULL) return ( (T->left == T->value) && product(T->left) ); if(T->left == NULL) return ( (T->right == T->value) && product(T->right) ); if( T->right->Value * T->left->Value == t->Value) return (product(T->right) && product(T->left) ); return false;}תקנו אותי אם אני טועה.
פורסם 2009 באפריל 1716 שנים אתה טועה אתה צריך לעשות T->left->value == T->value, ולא T->left == T->value (ואותו דבר לגבי right).
פורסם 2009 באפריל 1816 שנים אתה טועה אתה צריך לעשות T->left->value == T->value, ולא T->left == T->value (ואותו דבר לגבי right). צודק. ולהבא- אני לא אתעצל ואמחזר קטעי קוד, אלא אכתוב אותם מחדש. תודה על ההערות! נ.ב. מישהו יודע איך הלך לפותח הנושא במתכונת?
פורסם 2009 באפריל 1816 שנים אהא, אולי תנסה למחזר בצורה נכונה כך שזה יעבוד ב- 2 המקרים (כמובן בתנאי שזו אותה תוכנית).
פורסם 2009 באפריל 2416 שנים אהא, אולי תנסה למחזר בצורה נכונה כך שזה יעבוד ב- 2 המקרים (כמובן בתנאי שזו אותה תוכנית).אני מתכוון לזה שכאשר אני מתקן את הקוד שלי, כדאי לי לשנות את כולו- ולכתוב קטעים חדשים מחדש-מאפס-, ולא להעתיק קטעי קוד לא מתוקנים בין הקודים שלי...
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.