נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: ריקורסייה ב C

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
דודו
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 01 August 2008 בשעה 16:58 | IP רשוּם
ציטוט דודו

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

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

מספרים סימריים במערך בגודל למשל 5 (0-4) התאים 0 ו 4 סימריים, 1 ו 3 וכו'

חזרה לתחילת העמוד הצג את כרטיס החבר של דודו חפש הודעות אחרות של דודו בקר בדף הבית של דודו
 
דודו
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 01 August 2008 בשעה 23:00 | IP רשוּם
ציטוט דודו

void main()
{

div=N/2;
 mod=N%2;
 num=N-1;
 if(mod==0)
  symmetry_sum(array+div,array+(div+1),&sum);
 if(mod==1)
  symmetry_sum(array+(div-1),array+(div+1),&sum);
 printf("\nThe sum of the symmetry is: %d\n",sum);
 }

void symmetry_sum(int* arr,int* arr2,int* sum)
{
  if((arr<0)||(!*arr2)) return;
  if(((*arr>0)&&(*arr2<0))||((*arr<0)&&(*arr2>0)))
   *sum=(*arr)+(*arr2);
 
 symmetry_sum(arr-1,(arr2)+1,sum);
}

אתם יכולים לעזור למה זה לא עובד?!?!

חזרה לתחילת העמוד הצג את כרטיס החבר של דודו חפש הודעות אחרות של דודו בקר בדף הבית של דודו
 
yohai
מנהל פורומים
מנהל פורומים
סמל אישי

הצטרף / הצטרפה: 11 November 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 354
נשלח בתאריך: 02 August 2008 בשעה 01:52 | IP רשוּם
ציטוט yohai

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 02 August 2008 בשעה 02:35 | IP רשוּם
ציטוט דודו

למשל, אם יש לך מערך מגודל 8

3-  4  7  2  5  10  9-  2

אז סכום הסימטריה של המערך הוא: (-9)+2+4+(3-)

חזרה לתחילת העמוד הצג את כרטיס החבר של דודו חפש הודעות אחרות של דודו בקר בדף הבית של דודו
 
Dark Phoenix
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 22 December 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 50
נשלח בתאריך: 02 August 2008 בשעה 10:38 | IP רשוּם
ציטוט Dark Phoenix

הבעיה נורא פשוטה, נראה לי שסיבכת אותה:
נתון המערך A, ונתון המספר N שהוא גודל המערך
void main () {
sum = symmetry_sum(A,0,N);
printf("%d",sum);
return 0;
}

int symmetry_sum(int *A, int start, int len) {
if (start >= len/2)
 return 0;
else
 if (A[start]*A[N-start-1]<0)
  return A[start]+A[N-start-1]+symmetry_sum(A, start+1,len);
 else
 return symmetry_sum(A, start+1,len); // both numbers have the same sign
{

הסבר: אני מסתכל רק על צד אחד של המערך. חישוב הצד השני הוא קל, רק להחסיר מגודל המערך פחות אחד את האינדקס שאני מסתכל עליו. אם הגעתי לאמצע המערך או מעבר לו, אז חרגתי מטווח שנתתי לעצמי (חצי מערך), ואני אחזיר אפס. אחרת אני אחזיר את סכום הסימטריה באינדקס שאני מסתכל עליו כרגע אם למספרים יש סימן שונה (או בצורה יותר חכמה, אם מכפלתם שלילית), ומוסיף לערך המוחזר גם את סכום הסימטריה של המשך המערך
מקווה שזה מובן S=
 
חזרה לתחילת העמוד הצג את כרטיס החבר של Dark Phoenix חפש הודעות אחרות של Dark Phoenix
 
דודו
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 02 August 2008 בשעה 23:57 | IP רשוּם
ציטוט דודו

ומה אם גודל המערך אי זוגי?!?!
חזרה לתחילת העמוד הצג את כרטיס החבר של דודו חפש הודעות אחרות של דודו בקר בדף הבית של דודו
 
Dark Phoenix
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 22 December 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 50
נשלח בתאריך: 16 August 2008 בשעה 04:28 | IP רשוּם
ציטוט Dark Phoenix

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

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה