לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

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



  #21  
ישן 31-10-2010, 00:05
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 3 שנכתבה על ידי nadav_307 שמתחילה ב "כן. נגיד המספר 378 אז הפלא..."

אני הייתי עושה את זה ככה:
קוד:
include <stdio.h> include <stdlib.h> // Required for abs() int main(void) { int input; unsigned int digits_sum = 0; printf("Enter a number: "); scanf("%d", &input); input = abs(input); while(input > 0) { digits_sum = digits_sum + input % 10; input = input / 10; } printf("\nThe sum of all digits: %u", digits_sum); return 0; }

ניסיתי לעשות את זה פשוט ככל הניתן. הסבר:

יצרתי שני משתנים:
input מסוג int, כדי שיהיה ניתן להכניס כמעט כל מספר, גם חיובי וגם שלילי;
digits_sum מסוג unsigned int, כי סכום הספרות לעולם לא יכול להיות שלילי. הייתי יכול ואולי אף כדאי לעשות את digits_sum מסוג unsigned char כי זה תופס פחות מקום בזיכרון (לא שזה משנה בתוכנית הזאת, אבל טוב להיות מחושבים), אבל לא ידעתי איך זה יתפרש בפונקציה האחרונה printf כשאצטרך להדפיס את המשתנה הזה כמספר unsigned int (האם להשתמש ב- u% נחשב תקין? או שצריך להמיר אותו ל-int בעזרת casting? ... )

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

אח"כ וידאתי שהמספר השמור במשתנה input הוא חיובי בעזרת הפונקציה abs (מלשון absolute).

ואז בעזרת הלולאה while, שבודקת אם המספר input גדול מ-0, ביצעתי את שתי הפעולות הבאות באופן איטרטיבי (שחוזר על עצמו):
1. הוספתי למשתנה digits_sum את השארית של חלוקת input ב-10 (במילים אחרות - את ספרת היחידות שבמספר input)
2. הקטנתי את המספר שב-input פי 10. שים לב שכאשר מחלקים משתנה מסוג int, השארית לא תישמר כי זה משתנה מסוג שלם (integer)

לבסוף הדפסתי את התוצאה שנאגרה במשתנה digits_sum.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #22  
ישן 30-10-2010, 23:50
צלמית המשתמש של High_Hopes
  משתמש זכר High_Hopes High_Hopes אינו מחובר  
 
חבר מתאריך: 30.05.02
הודעות: 8,838
בתגובה להודעה מספר 1 שנכתבה על ידי nadav_307 שמתחילה ב "שאלה בשפת c"

הפתרון לא מסובך, אבל כדאי דווקא להתמקד במה שרשמת - לא תלמד שום דבר אם פשוט יביאו לך את הפתרון.

בהתחלה הגדרת משתנה x, נראה בסדר גמור.
שורה הבאה היא כבר בעייתית int(a,b,c) זה סינטקס לא נכון, אם רצית להגדיר עוד שלושה משתנים אז בלי סוגריים, אם רצית להגדיר משהו אחר אז לא ברור בידיוק מה הוא.

בשורה של הscanf אתה מצפה מהמשתמש להכניס שני מספרים שלמים, אבל אתה מנסה להכניס אותם לתוך 4 משתנים שונים, מחשב לא יודע לנחש למה אתה מתכוון, הוא מצפה לקלוט 2 מספרים ורוצה שהם יקלטו לתוך 2 משתנים, הוא לא יודע בעצמו לחלק את זה לפי ניחוש. למה גם רצית לקלוט 2 מספרים?

בקשר לחישובים, נניח והתכוונת להכניס את המספר 235, ונניח שעד עכשיו התוכנית הייתה נכונה אז:
a=2
b=3
c=5

ואז אם נפעיל את הפעולות שכתבת:
a=b+c=3+5=8
b=a+b=8+3=11
c=a+b=8+11=19
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
הגלריה שלי בפליקר

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #27  
ישן 10-11-2010, 01:17
  משתמש זכר Mnemosyne Mnemosyne אינו מחובר  
 
חבר מתאריך: 07.01.07
הודעות: 3,397
בתגובה להודעה מספר 1 שנכתבה על ידי nadav_307 שמתחילה ב "שאלה בשפת c"

כואב לי לראות שיש קושי בתרגיל פשוט כזה...

אסביר לך את ההגיון הפשוט במה שאתה צריך לעשות.

יש לך מספר בעל 3 ספרות, יפה?

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

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

אבל כמה פעמם לעשות את זה?
ברור שבכול פעם המספר קטן, ויש לנו שלוש ספרות... לכן התשוב היא 3 פעמים.
ואיך בודקים שהמספר לא נגמר?
בעזרת IF שהו המספר גדול מאפס.

אני יכול להרחיב לך יותר למה השימוש של הIF הוא חיוני, אבל אתן למורה להסביר.

לילה טוב ובהצלחה בתרגלים,
סטודנט סמפטי
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

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

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 20:42

הדף נוצר ב 0.05 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2025 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר