עבור לתוכן

שאלה ב-C ברקוסיות

Featured Replies

פורסם

אני למדתי שנה שעברה פסקל

עברתי בית ספר ועכשיו אני אמור ללמוד C

אני בכיתה יא'

יש למישהו אתר שמשווה בין פסקל ל- C או דרך לימוד מהירה וקלה?

אני לא מצליח לקלוט נשום דבר ב- C ויש לי עוד שבועיים מבחן!

ועכשיו לשאלה שפתחתי עליה תרד

המורה הביאה לנו בעיה ברקורסיה (מישהו יכול להסביר לי מה זה כי לא ממש הבנתי את ההסברים שלה...)

השאלה היא כך:

לקלוט מספר ארוך ושלם וליכתוב כמה פונקציות רקורסיות לחישובים הבאים:

1. לחשב כמה ספרות יש במספר

2. לחשב סכום של ספרות

3. כמה ספרות אי זוגיות יש במספר

* האנחה:

המספר גדול מ-0

תודה רבה לעוזרים!

פורסם

המעבר מפסקל ל- C לא צריך להיות קשה, כמעט כל הדברים שיש בפסקל גם יש ב- C. (חוץ מ- sets, מערכים שמתחילים ב- ordinal type כלשהו ומשפט case נוח)

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

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

במקרה שלך, שני החלקים של הבעיה הם "הספרה הנוכחית" ו"שאר הספרות".

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

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

פורסם

ב-C כן יש case. :screwy:

פורסם

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

פורסם

ב-C כן יש case. :screwy:

מה, אתה חייב להתווכח?

אמרתי שב- C אין case נוח

בפסקל אפשר לתת בתוך case כמה ערכים (אפשר גם ב-C עם כמה caseים אבל זה יותר מסורבל) ואפשר גם לתת טווחים (שבכלל אי אפשר ב- C)

מה גם שב- C יש את ה-" feature" המוזר של ה- falltrough במקרה שבו אין break הקוד פשוט ממשיך ל- case הבא.

פורסם
  • מחבר

אני עדיין לא הבנתי איך אני פותר את התרגיל ב- C...

מישהו יכול לרשום לי את הקוד?...

פורסם

ללא רקוקסיות כי אין לי מושג מזה:

הערה: התוכנית תומכת במספרי עד 19 ספרות. במידה ורוצים יותר יש להגדיל את גודל המערך (מספר הספרות+1).

#include <stdio.h>
#include <string.h>

void main()
{
char x [20];
int i=0;
int sum=0;
int unzugi=0;

while((x[i++]=getchar())!='\n')
;

x [i]='\0';

printf("The number of the nums is: %d\n",strlen(x)-1);


for(i=0;i<strlen(x)-1;i++)
{
sum+=x[i]-48;

if(x[i]%2==1)
unzugi++;
}

printf("The number of the nums is: %d\n",sum);
printf("The number of nums that unzugi is: %d\n",unzugi);
}

פורסם
  • מחבר

תודה אחי על הניסיון אבל אני צריך את זה רקורסיווית...

אני עדיין לא הבנתי מה זה רקורסיה

אתם יכולים להסביר לי את זה בפשטות?

מה המטרה שלה?

פורסם

רקורסיה זה שפונקציה קוראת לעצמה

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

פורסם

אתה יכול להראות דוגמה מיוסמת?

הרי אם אני במימוש של הפונקציה אכניס קריאה לעצמה היא תיכנס ללופ אין סופי.

פורסם

בשביל זה תשים לב לתנאי שכתבתי בסוף

חוזר חלילה עד אשר אורך המחרוזת קטן מ-1

פורסם

אוקיי קראתי קצת על הנושא עכשיו אני ינסה להבין את התרגיל שנתנו גיצד ניתו לבנותו עם רקורסיות.

פורסם

סתם כדי לתת לך כיוון לתרגיל הראשון :

int func(int num)
if (num <= 9) return 1;
return func(num/10)+1;

הפונקציה תקרא כל פעם עם מספר שקטן פי 10 מהקריאה הקודמת... עבור כל חלוקה ב10 (ספרה) אנו מוסיפים 1 לכן בסוף הערך המוחזר יהיה מספר החלוקות ב-10 עד שהגענו למספר קטן מ-10 וזהו מספר הספרות. כמובן שהתכנית לא עובדת על מספרים שליליים..

תרגיל אצבעות : כתוב פונקציה התומכת בספירת מספר הספרות של מספר שלילי.

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

שים לב שהדברים העיקריים שאמורים להשתנות יהיו "פעולת ההתקדמות" (במקרה זה חלוקה ב-10) ותנאי הבסיס.

מטי.

פורסם

תרגיל אצבעות : כתוב פונקציה התומכת בספירת מספר הספרות של מספר שלילי.

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

שים לב שהדברים העיקריים שאמורים להשתנות יהיו "פעולת ההתקדמות" (במקרה זה חלוקה ב-10) ותנאי הבסיס.

מטי.

תרגיל אצבעות: ממש פשוט.

תרגיל למתקדמים: ישנה בעיה עם שברים כמו 1.33 למעשה יש עד אין סוף פעמים 3 ולכן אי אפשר להגיע למספר מדויק.

פורסם

במחשב זה לא נשמר אינסוף פעמים.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים