ABA


"עזרה בשפת C"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10472 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10472
bodipo
חבר מתאריך 18.2.06
3976 הודעות, דרג אמינות חבר זה
   12:29   08.09.11   
אל הפורום  
  עזרה בשפת C  
 
   ערכתי לאחרונה בתאריך 08.09.11 בשעה 13:01 בברכה, bodipo
 
אני רוצה להדפיס עץ בינארי בצורה הבאה:

https://rotter.name/User_files/nor/4e68923b2defbaae1.txt


מה שהצלחתי לעשות זה:

https://rotter.name/User_files/nor/4e68923b2defbaae2.txt

ההדפסה שיוצאת עבור העץ היא:
123456

*הקוד בשפת C

תודה לעוזרים.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  הבעיה היא שהקוד שלך רץ DFS ולא BFS. ldan192  08.09.11 14:32 1
  לדעתי: תפריד בין בנייה של מחרוזת להדפסה שלה Zippo  08.09.11 20:28 2
     קיבינימט עם העיבוד טקסטים בפורום הזה... Zippo  08.09.11 20:33 3
         הוא לא אמר שהוא רוצה שיהיה עיצוב של ישור שורות, פשוט שיהיו אנטרים.. ldan192  08.09.11 23:04 5
  תודה רבה! bodipo 08.09.11 21:32 4

       
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   14:32   08.09.11   
אל הפורום  
  1. הבעיה היא שהקוד שלך רץ DFS ולא BFS.  
בתגובה להודעה מספר 0
 
כלומר, הוא ילך לבן (העלה) השמאלי הכי תחתון ואז יטפס הלאה.
תקרא כיצד ממשים BFS - זה יפתור את הבעיה שלך בקלות.
(רמז: אתה צריך להכניס בכל רמה את שני הבנים ל-queue
ואז להכנס ל-pop הבא מה-queue ולא לבן הבא!)


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות, דרג אמינות חבר זה
   20:28   08.09.11   
אל הפורום  
  2. לדעתי: תפריד בין בנייה של מחרוזת להדפסה שלה  
בתגובה להודעה מספר 0
 
ערכתי לאחרונה בתאריך 08.09.11 בשעה 20:31 בברכה, Zippo
 
אתה עלול להיתקל בבעיות של "התנגשות"...


-----5-----
----/-\----
---3---7---
--/-\-/-\--
-1---X---8-


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

איך תפתור? תכפיל (+1) את הגובה = מס' הסלאשים.
כלומר, הרמה הנמוכה ביותר בעץ (הכי רחוקה מהשורש) תקבל גובה 1, ואז כל רמה מעליה מוכפלת ב-2(ועוד 1). כלומר:


--------------8--------------
-------------/-\-------------
------------/---\------------
-----------/-----\-----------
----------/-------\----------
---------/---------\---------
--------/-----------\--------
-------/-------------\-------
------4---------------c------
-----/-\-------------/-\-----
----/---\-----------/---\----
---/-----\---------/-----\---
--3-------6-------a-------e--
-/-\-----/-\-----/-\-----/-\-
1---2---5---7---9---b---d---f


בגדול, הנוסחא למס' הסלאשים של קודקוד ברמה ה-n, כאשר 0 הוא העלה הנמוך ביותר וממנו מתחילים את ספירת הרמות, היא:
f(n) = 2f(n-1) + 1
וזה ייצור לך עץ שברמה התחתונה יש בדיוק 3 רווחים בין 2 איברים.
הבעיה מתחילה כאשר יש לך מספרים דו-ספרתיים (ויותר), וזה קצת יותר מסובך, אם כי בהנחה שלא יהיה יותר מדו-ספרתי, אפשר פשוט לוותר על רווחים(מקפים) ולכתוב במקומם את האיבר.

ובכן, איך הייתי יוצר הדפסה כזאת?
1- חשב את גובה העץ. (ע"י BFS למשל)
2- חשב את גודל המטריצה של התווים, כלומר:
-2.1 עבור עץ בגובה n, נחשב: sum_i<-1_to_n(f(i)) + n + 1
---- זה הגובה, והרוחב זה פעמיים הגובה מינוס אחד: width = 2*height - 1
3- תמלא את המטריצה בתווים = סלאשים, רווחים, ותוכן מספרי
4- הדפס את המטריצה בלולאה

כלומר, פירקתי את ההדפסה מהבנייה. בהתחלה יצרתי מטריצה, ואח"כ הדפסתי אותה כשהייתה מוכנה.

יש פה הרבה עבודה שחורה, אבל לא נורא.

שיהיה בהצלחה!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות, דרג אמינות חבר זה
   20:33   08.09.11   
אל הפורום  
  3. קיבינימט עם העיבוד טקסטים בפורום הזה...  
בתגובה להודעה מספר 2
 
ערכתי לאחרונה בתאריך 08.09.11 בשעה 21:06 בברכה, Zippo
 
כל הסלאשים התהפכו.
לא נורא, הבנת את הרעיון...

עריכה:
הזוי... עכשיו הכל בסדר...
מקודם גלשתי ב-FF מהאובונטו, עכשיו IE מווינדוס...
התאימות דפדפנים בפורום הזה מפתיעה אותי כל פעם מחדש...

אגב, אם לא שמת לב, אז f קלה לחישוב:

f(n) = 2^n - 1


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   23:04   08.09.11   
אל הפורום  
  5. הוא לא אמר שהוא רוצה שיהיה עיצוב של ישור שורות, פשוט שיהיו אנטרים..  
בתגובה להודעה מספר 3
 


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
bodipo
חבר מתאריך 18.2.06
3976 הודעות, דרג אמינות חבר זה
   21:32   08.09.11   
אל הפורום  
  4. תודה רבה!  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net