אהלן! מישהו יכול להסביר איך עושים את תרגיל 12 ברקורסיה?
4 posters
עמוד 1 מתוך 1
Cookie Monster- חנבצ'
- מספר הודעות : 41
Join date : 26.11.08
Re: אהלן! מישהו יכול להסביר איך עושים את תרגיל 12 ברקורסיה?
אני עשיתי ככה,
בסעיף א. - התנאי הוא אם left קטן או שווה ל right (אין אחרת, רק אם זה נכנס לפה זה עושה משהו)
מאתחל את min ו max ל A[left]
מבצע את הקריסה הזו:
minMax(A,left+1,right,min,max);
ואחר כבר 2 ifים שבודקים max וmin ואם צריך לשנות....
בסעיף ב. - יש תנאי אם left קטן ממש מright (אחרת תחזיר אמת)
ואז יש עוד if בפנים אם a[left] גדול או שווה ל a[left+1]
אם כן תחזיר:
checkDecSeq(A,left+1,right);
אחרת תחזיר שקר.
בדקתי שניהם עובדים לי.
לגבי 13 א, יש דרך לעשות את זה בלי swaping בזבזני?
בסעיף א. - התנאי הוא אם left קטן או שווה ל right (אין אחרת, רק אם זה נכנס לפה זה עושה משהו)
מאתחל את min ו max ל A[left]
מבצע את הקריסה הזו:
minMax(A,left+1,right,min,max);
ואחר כבר 2 ifים שבודקים max וmin ואם צריך לשנות....
בסעיף ב. - יש תנאי אם left קטן ממש מright (אחרת תחזיר אמת)
ואז יש עוד if בפנים אם a[left] גדול או שווה ל a[left+1]
אם כן תחזיר:
checkDecSeq(A,left+1,right);
אחרת תחזיר שקר.
בדקתי שניהם עובדים לי.
לגבי 13 א, יש דרך לעשות את זה בלי swaping בזבזני?
Maor- חנבצ'
- מספר הודעות : 44
Join date : 07.12.08
Re: אהלן! מישהו יכול להסביר איך עושים את תרגיל 12 ברקורסיה?
שאותו אחד יסביר גם על תרגיל 13...
The_Imri- חפרן
- מספר הודעות : 53
Join date : 08.12.08
Re: אהלן! מישהו יכול להסביר איך עושים את תרגיל 12 ברקורסיה?
אין בעיה, ד.א- מישהו יכול להסביר לי מה עושים ב14?
א13 עובד אצלי הבעיה שבסעיף א' אני עושה הרבה swaping, לא מצאתי דרך יותר טובה לעשות את זה.
א- פעולה ראשונה בפונקציה int sLen = (int)(strlen(s));//gets s string real length
אחר כך if (יחיד, אין אחרת ואין אחריו כלום) התנאי sLen > 1
אני קורא לפונקציה שוב כך: reverse(&s[1]);
בגלל שלא מקבלים פויינטר ואין דרך נוחה לקדם את האינדקס במחרוזת אז אני שולח s[1] by ref
ואז במחסנית הבאה s[0] יהייה כבר האיבר השני במחרוזת. (ה& פשוט שולח לי את הכתובת של התו הבא במחרוזת)
ואז אני עושה Swaping מהאיבר שאני עומד עליו עד האיבר האחרון במחרוזת (לא כולל ה\o שימו לב).
אחרי שעושים את זה מהאיבר הראשון עד האחרון משום מה מקבלים מחרוזת כמו שביקשו בתרגיל
א13 עובד אצלי הבעיה שבסעיף א' אני עושה הרבה swaping, לא מצאתי דרך יותר טובה לעשות את זה.
א- פעולה ראשונה בפונקציה int sLen = (int)(strlen(s));//gets s string real length
אחר כך if (יחיד, אין אחרת ואין אחריו כלום) התנאי sLen > 1
אני קורא לפונקציה שוב כך: reverse(&s[1]);
בגלל שלא מקבלים פויינטר ואין דרך נוחה לקדם את האינדקס במחרוזת אז אני שולח s[1] by ref
ואז במחסנית הבאה s[0] יהייה כבר האיבר השני במחרוזת. (ה& פשוט שולח לי את הכתובת של התו הבא במחרוזת)
ואז אני עושה Swaping מהאיבר שאני עומד עליו עד האיבר האחרון במחרוזת (לא כולל ה\o שימו לב).
אחרי שעושים את זה מהאיבר הראשון עד האחרון משום מה מקבלים מחרוזת כמו שביקשו בתרגיל
Maor- חנבצ'
- מספר הודעות : 44
Join date : 07.12.08
Re: אהלן! מישהו יכול להסביר איך עושים את תרגיל 12 ברקורסיה?
יש דרך יותר קלה ל 13 א
void reverse(char s[](
{
([if(s[0
;(reverse(s+1
else
;return
;[cout<<s[0
}
void reverse(char s[](
{
([if(s[0
;(reverse(s+1
else
;return
;[cout<<s[0
}
נערך לאחרונה על-ידי shiri בתאריך Tue Jan 20, 2009 5:05 pm, סך-הכל נערך פעם אחת
shiri- לפלף מזדמן
- מספר הודעות : 2
Join date : 20.01.09
Re: אהלן! מישהו יכול להסביר איך עושים את תרגיל 12 ברקורסיה?
לא הבנתי אבל מה הם רצו בסעיף ב
shiri- לפלף מזדמן
- מספר הודעות : 2
Join date : 20.01.09
Re: אהלן! מישהו יכול להסביר איך עושים את תרגיל 12 ברקורסיה?
shiri כתב:לא הבנתי אבל מה הם רצו בסעיף ב
אני לא הבנתי מה עשית בסעיף א' P:
cout?
איפה את הופכת את הסדר של המחרוזת?
Maor- חנבצ'
- מספר הודעות : 44
Join date : 07.12.08
Re: אהלן! מישהו יכול להסביר איך עושים את תרגיל 12 ברקורסיה?
היי, הנה עוד דרך ל-13 א'. מוטב מאוחר מלעולם לא..
void reverse(char s[])
{
char temp;
if (strlen(s)==1)
{
return;
}
else if (strlen(s)==2)
{
temp = s[1];
s[1] = s[0];
s[0] = temp;
}
else
{
temp = s[0];
reverse(s+1); //call function from the next place
//push all characters one plase to the left
for (int i=0;i<strlen(s)-1;i++)
s[i] = s[i+1];
s[strlen(s)-1] = temp; //places the saved char in the last place in the string
}
}
כאן יש SWAP רק אם המחרוזת בגודל 2.
במקרים שהמחרוזת גדולה יותר, כל פעם האות הראשונה נשמרת, ובדרך חזרה של הרקורסיה, כל המחרוזת נדחפת מקום אחר שמאלה, והאות השמורה "מודבקת" בסוף.
void reverse(char s[])
{
char temp;
if (strlen(s)==1)
{
return;
}
else if (strlen(s)==2)
{
temp = s[1];
s[1] = s[0];
s[0] = temp;
}
else
{
temp = s[0];
reverse(s+1); //call function from the next place
//push all characters one plase to the left
for (int i=0;i<strlen(s)-1;i++)
s[i] = s[i+1];
s[strlen(s)-1] = temp; //places the saved char in the last place in the string
}
}
כאן יש SWAP רק אם המחרוזת בגודל 2.
במקרים שהמחרוזת גדולה יותר, כל פעם האות הראשונה נשמרת, ובדרך חזרה של הרקורסיה, כל המחרוזת נדחפת מקום אחר שמאלה, והאות השמורה "מודבקת" בסוף.
Cookie Monster- חנבצ'
- מספר הודעות : 41
Join date : 26.11.08
Similar topics
» אממ... יש פה עוד מישהו חוץ מחן?
» סעמק עם היחסים האלו!!!!
» תרגיל 9
» תרגיל מספר 6
» תרגיל 9 - ניתוח זמני ריצה
» סעמק עם היחסים האלו!!!!
» תרגיל 9
» תרגיל מספר 6
» תרגיל 9 - ניתוח זמני ריצה
עמוד 1 מתוך 1
Permissions in this forum:
אתה לא יכול להגיב לנושאים בפורום זה