עבור לתוכן

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

Featured Replies

פורסם

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

אני עושה את צעדיי הראשונים בלימוד שפת 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 %)

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

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

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

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

פורסם

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

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

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

פורסם
  • מחבר

: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 או ב 100 או ב 1000...

זה רק יראה יותר נעים לעין.

פורסם

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

פורסם
  • מחבר

שניצל,

ובכל זאת...

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

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

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

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

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

פורסם

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

למשל, המספר 123456

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

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

פורסם
  • מחבר

תודה רבה אנשים.

עזרתם לי מאוד.

צפו להטרדות נוספות בנושא בהמשך... :lol:

ארכיון

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

דיונים חדשים