ABA


"אשמח לעזרה בכתיבת רקורסיה"
גירסת הדפסה        
קבוצות דיון לימודים, מדע ותרבות נושא #20483 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 20483
Adielb  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 22.6.11
7352 הודעות, 7 פידבק, 14 נקודות
   00:19   11.12.13   
אל הפורום  
  אשמח לעזרה בכתיבת רקורסיה  
 
   קיבלנו עבודה שתוכלו לראות בPDF הבא:
https://www.dropbox.com/s/2owccs94ahgke9o/%D7%AA%D7%A8%D7%92%D7%99%D7%9C%203.pdf

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

את משימה 1 שמתוארת בקובץ ביצעתי בלי בעיה, תוכלו לראות כאן:
http://pastebin.com/aDvBsYF9

משימה 2 המתוארת בקובץ גם היא ללא בעיה:
http://pastebin.com/kGxP5fLa

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

את הקוד הראשוני שלי לפונקציה הנ,ל תוכלו לראות כאן:
http://pastebin.com/airHRJUm

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

( חשבתי גם על פיתרון מסוג אחר, שלא אפרט אותו כיוון שהוא בכלל יוצר לי בעיה אחרת:
בהנתן מחרוזת בסגנון {<}> - הפיתרון הזה יחזיר לי true כשזה אמור לצאת false - המחרוזת אינה מאוזנת )

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

תודה


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

  האשכול     מחבר     תאריך כתיבה     מספר  
  חפש בגוגל Berlyne 11.12.13 00:35 1
  מכתב ShocKi  11.12.13 00:44 2
     בפיתרון השני זה מחזיר TRUE Adielb  11.12.13 07:00 3
         לא בעיה לבצע את המימוש עם מחסנית -UC- 11.12.13 11:01 4
             אחלה פתרון אהבתי משה הלולן 11.12.13 11:14 5
             היי, בסוף מימשתי בערך פיתרון כזה (לפני שהסתכלתי בתגובה :) ) Adielb  12.12.13 18:53 7
                 המלכות? כמה עוד 12.12.13 20:45 8
                     לא... את המלכות לימדו והראו לנו בשיעורים Adielb  12.12.13 21:34 9
         פתרון ללא מחסנית: -UC- 11.12.13 11:39 6

       
Berlyne
חבר מתאריך 3.3.12
75 הודעות
   00:35   11.12.13   
אל הפורום  
  1. חפש בגוגל  
בתגובה להודעה מספר 0
 
   balanced brackets recursive
ותקבל הרבה מאוד תוצאות. בטוח יש שם את מה שאתה מחפש.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ShocKi  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.3.02
20171 הודעות, 10 פידבק
   00:44   11.12.13   
אל הפורום  
  2. מכתב  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 11.12.13 בשעה 00:49 בברכה, ShocKi
 
קודם כל בגלל שמבקשים ממך פתרון רקורסיבי וברור שכדי לומר משהו על המחרוזת צריך לעבור על כל התווים בה, אז תנאי העצירה הוא למעשה סוף המחרוזת.
כלומר, כשנגיע בעומק הרקורסיה לסוף המחרוזת, נתחיל לחזור חזרה.

התנאי עצירה הזה מכיל בתוכו מקרה של מחרוזת ריקה.

אני הייתי ממש את סעיף 3 בעזרת מחסנית. למדתם את מבנה הנתונים הזה?

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


קאש-באק ישראלי: https://www.cashback.co.il/?uref=33330
קאשבק לAsos ואמזון דרך Ebates: https://goo.gl/MX87Y7 - מקבלים 10$ לאחר שימוש ראשון.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Adielb  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 22.6.11
7352 הודעות, 7 פידבק
   07:00   11.12.13   
אל הפורום  
  3. בפיתרון השני זה מחזיר TRUE  
בתגובה להודעה מספר 2
 
   לא כי יש בדיקה שמס' הסוגרים זהה למס' הסוגרים הפותחים אלא שעבור
כל פותח שקיים במחרוזת, קיים עבורו סוגר סוגר במחרוזת.

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

כפי שציינתי תנאי עצירה של מחרוזת ריקה מוכל בתחילת הקוד של משימה 3,
כאשרמ אני שולח לבדיקת הBRACKET INDEX - זה מכסה את המקרה הזה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
-UC- לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.8.02
21922 הודעות, 1 פידבק
   11:01   11.12.13   
אל הפורום  
  4. לא בעיה לבצע את המימוש עם מחסנית  
בתגובה להודעה מספר 3
 
בכל פעם שיש לך סוגריים פותחים אתה דוחף למחסנית את הסוגר.
אם נתקלת בסוגריים סוגרים אז אתה צריך לבדוק שיש להם התאמה בראש המחסנית - אם יש אז אתה עושה POP לאותו סוגר מראש המחסנית וממשיך לבדוק. אם אין - מחזיר FALSE.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
משה הלולן לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 11.6.13
4818 הודעות, 8 פידבק
   11:14   11.12.13   
אל הפורום  
  5. אחלה פתרון אהבתי  
בתגובה להודעה מספר 4
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Adielb  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 22.6.11
7352 הודעות, 7 פידבק
   18:53   12.12.13   
אל הפורום  
  7. היי, בסוף מימשתי בערך פיתרון כזה (לפני שהסתכלתי בתגובה :) )  
בתגובה להודעה מספר 4
 
   כל פעם שיש סוגריים פותחים העתקתי אותם למחרוזת מסוימת,
כל פעם שיש סוגריים סוגרים השוויתי אותם מול הערך האחרון שנכנס למחרוזת הפותחים

שווים - תסיר את את הפותח האחרון במחרוזת הפותחים ותמשיך בדיקות
על המחרוזת ללא הסוגריים המתאימים

לא שווים - תחזיר FALSE.

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

הנה המימוש שלי למעוניינים:

http://pastebin.com/HzdUWU3U

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כמה עוד לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 18.11.09
234 הודעות, 11 פידבק
   20:45   12.12.13   
אל הפורום  
  8. המלכות?  
בתגובה להודעה מספר 7
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Adielb  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 22.6.11
7352 הודעות, 7 פידבק
   21:34   12.12.13   
אל הפורום  
  9. לא... את המלכות לימדו והראו לנו בשיעורים  
בתגובה להודעה מספר 8
 
   אז אין וטעם לתת בעבודה... מעין מבוך כזה אבל לא בדיוק
מקבלים לוח משחק בגודל N*N וסט תנועות בגודל M*M
ומותר לזוז בלוח משחק רק לפי סט התנועות המוגדר... צריך לבסוף להגיע
לאיזה תא, מבלי לחזור בתאים שביקרת בהם כבר, ולהדפיס מהו המקסימום תנועות שניתן לעשות בלוח
המשחק (ע"פ סט התנועות שקיבלת)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
-UC- לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.8.02
21922 הודעות, 1 פידבק
   11:39   11.12.13   
אל הפורום  
  6. פתרון ללא מחסנית:  
בתגובה להודעה מספר 3
 
        private static bool isEqualChars(char i_FirstChar, char i_SecondChar)
{
return (i_FirstChar == i_SecondChar);
}

private static int firstCharShown(string i_String, char i_CharToSearch, int i_EndPoint, int i_StartPoint, int i_Direction)
{
if (i_Direction != -1 || i_Direction != 1)
{
return -1;
}

while (i_StartPoint < i_EndPoint)
{
if (isEqualChars(i_CharToSearch, i_String))
{
i_StartPoint += i_Direction;
}
}

return i_StartPoint;
}

private static bool isBalance(string i_String, int i_StartPoint, int i_EndPoint)
{

int startPoint;
int endPoint;

if (i_String == null)
{
return true;
}
if (i_StartPoint > i_EndPoint)
{
return false;
}
if (i_StartPoint == i_EndPoint)
{
return true;
}

startPoint = firstCharShown(i_String, '{', i_EndPoint, i_StartPoint, 1);
endPoint = firstCharShown(i_String, '}', i_StartPoint, i_EndPoint, -1);

if (startPoint < endPoint)
{
return isBalance(i_String, startPoint, endPoint);
}
else
{
return false;
}
}


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

את הקונספט אני מאמין שאתה הבנת..

אגב, הקוד ב-c# ולא נבדק נכון לעכשיו, היה לי חשוב להעביר לך את הקונספט)


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

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

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



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