שאלה ב-C ברקוסיות - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


moses_23

Recommended Posts

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

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

אני בכיתה יא'

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

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

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

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

השאלה היא כך:

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

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

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

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

* האנחה:

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

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

קישור לתוכן
שתף באתרים אחרים

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

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

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

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

קישור לתוכן
שתף באתרים אחרים

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

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

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

הערה: התוכנית תומכת במספרי עד 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

קישור לתוכן
שתף באתרים אחרים

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

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

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

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

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

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

מטי.

קישור לתוכן
שתף באתרים אחרים

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

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

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

מטי.

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

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...