הפונקציה הבאה

emissary

New member
הפונקציה הבאה

צריכה להדפיס את כל הספרות האיי זוגיות המספר שהוא מקבל מהמיין, ולעשות את זה בצורה רקורסיבית, אבל היא עושה רק את הספרה הראשונה. int printnoneven(int n) { int num; if(n != 0) { num = printnoneven(n/10); if(num % 2 == 1) printf("%d ", num); } return(n % 10); }
 

אלדד27

New member
קודם כל,

לפני שאני מתחיל עם התוכנית שלך, תעשה טובה - יש "תחילת קוד" ו "סיום קוד" מתחת ל - edit box שבו מקלידים את ההודעה. תשתמש בו - הוא עושה נפלאות
 

emissary

New member
OK

צריכה להדפיס את כל הספרות האיי זוגיות המספר שהוא מקבל מהמיין, ולעשות את זה בצורה רקורסיבית, אבל היא עושה רק את הספרה הראשונה
int printnoneven(int n) { int num; if(n != 0) { num = printnoneven(n/10); if(num % 2 == 1) printf("%d ", num); } return(n % 10); }​
למדתי משהו:)
 

אלדד27

New member
ולפתרון.

התוכנית שלך דווקא כמעט בסדר. למספר 1234567 היא הדפיסה 1, 3 ו - 5. מה הבעיה? התוכנית שלך בודקת את num, שהוא הערך המוחזר של printnoneven (אגב, ההיפך מ - EVEN זה ODD). הערך המוחזר הזה הוא n%10, אבל ה-n הוא n/10. ואז, כשאתה באיטרציה של 12345, למשל, אתה בעצם בודק את ה - 4. כשאתה באיטרציה של 1234567, אתה בודק את ה - 6. 5 מודפס כשבודקים את 123456, ו-7 לעולם לא יודפס, כי אף אחד לא בודק אותו. הנה הגרסה שלי:
void printnoneven(int n) { int num; if(n != 0) { printnoneven(n/10); num = n%10; if(num % 2 == 1) printf("%d ", num); } }​
הפונקציה הזו לא לוקחת את הערך המוחזר. הוא לא מעניין. היא שולחת את עצמה לעוד איטרציה בשרשרת הרקורסיה, עם המספר הקטן יותר, ובדרך החוצה היא תבדוק את הספרה הנוכחית הקטנה ביותר (במספר שבעצם יילך ויגדל), ותדפיס אותה אם היא אינה זוגית.
 
למעלה