עזרה בפתירת תרגיל בשפת C. (מתחיל) - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה בפתירת תרגיל בשפת C. (מתחיל)


VanGogh

Recommended Posts

שלום ליושבי הפורום.

אני עושה את צעדיי הראשונים בלימוד שפת C, ונתקלתי בתרגיל הזה (מיושר לשמאל):

If a five-digit number is input through the keyboard, write a program to calculate the sum of its digits.

(Hint: Use the modulus operator %)

אחרי ששברתי את הראש, הצלחתי סוף סוף לפתור את זה, אבל בדרך מאוד מסורבלת.

משום מה יש לי תחושה שפיספסתי משהו וניתן לפתור את זה בדרך הרבה יותר פשוטה...

אשמח אם מישהו מכם יוכל לשתף דרך פיתרון נוספת, פשוטה יותר.

תודה רבה מראש.

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

:kopfpatsch:

שכחתי להוסיף את הפיתרון שלי...

סורי...

הרי הוא:


#include<stdio.h>

int main()
{
int Sum, C;

printf("Enter 5 digit number...\n");
scanf("%d", &C);
Sum=C/10000; /* Sum=ספרת עשרות אלפים */
C=C%10000; /* C=קוצץ, ועכשיו מספר 4 ספרתי */
Sum=Sum+C/1000; /* Sum=צובר את ספרת האלפים */
C=C%1000; /* C=קוצץ, ועכשיו מספר תלת ספרתי */
Sum=Sum+C/100; /* Sum=צובר את ספרת המאות */
C=C%100; /* C=קוצץ, ועכשיו מספר דו ספרתי */
Sum=Sum+C/10; /* Sum=צובר את ספרת העשרות */
C=C%10; /* C=קוצץ, ועכשיו מספר חד ספרתי */
Sum=Sum+C; /* Sum=צובר את ספרת האחדות */

printf("The sum of your number's digits is %d", Sum);


scanf("%d", &C);
return 0;


}

ישנה דרך פשוטה לגשת לאיברים במספר מסויים

כאשר אני מחלק מספר לדוגמא ב100, אני אקבל את ספרת המאות שלו.

מפה אתה יכול להבין לבד, אם לא, תגיד

זהו, עשיתי משהו דומה (ראה קוד מצורף).

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

חשבתי אולי גם כאן אני מפספס משהו...

תודה רבה לשניכם על התגובה. :)

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

אני לא יודע אם הגעת ללולאות... אם כן, תריץ לולאה שבה כל פעם אתה מחלץ את ספר האחדות ע"י %10, סוכם את הספרה למשתנה, ואז מחלק את המספר ב 10 כדי להיפטר מהספרה שכבר סכמת.

תנאי היציאה מהלולאה יהיה כשהמספר (שכל פעם חילקת ב 10) שווה ל- 0.

ככב זה יעבוד לך עם מספר שמורכב מכל גודל ספרות.

בהצלחה.

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

אני לא יודע אם הגעת ללולאות... אם כן, תריץ לולאה שבה כל פעם אתה מחלץ את ספר האחדות ע"י %10, סוכם את הספרה למשתנה, ואז מחלק את המספר ב 10 כדי להיפטר מהספרה שכבר סכמת.

תנאי היציאה מהלולאה יהיה כשהמספר (שכל פעם חילקת ב 10) שווה ל- 0.

ככב זה יעבוד לך עם מספר שמורכב מכל גודל ספרות.

בהצלחה.

תודה רבה. :)

מעריך מאוד את העזרה.

עדיין לא הגעתי ללולאות.

אני יודע מה תפקודם ותפקידם, אבל אינני יודע איך ליישם אותן ב-C.

האם לדעתך לולאה היא הדרך היחידה לייעל את הקוד הנ"ל?

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

דווקא יש מקום לייעל - שים לב שבכל שורה אתה צריך לעבוד עם חזקה אחרת של 10 (בהתחלה 10000, אח"כ 1000, אח"כ 100 וכו').

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

נ.ב. אין צורך לצטט הודעות שמעליך.

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

שניצל,

ובכל זאת...

כדי שאחכים, מה התכוונת בהודעתך?

באיזו דרך ניתן לעבוד רק עם 10?

תודה רבה לכולכם על התגובות.

נ.ב. נזכרתי בפקודה המקבילה ל-'%' בפסקל.

שם היא נקראת MOD, ואחותה היא ה-DIV...

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

שים לב לפתרון שהצעתי בלולאה. שם התשובה.

למשל, המספר 123456

תעשה %10 לשלוף את האחדות, ותחלק ב 10 לאחר מכן, אתה תשאר עם המספר 12345.

מכאן אתה צריך להבין לאן להמשיך.

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

ארכיון

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

×
  • צור חדש...