שלום, אשמח לעזרה

שלום, אשמח לעזרה

שלום לכולם,
אשמח אם מישהו יוכל לתת לי הנחיות לפתירת התרגיל הבא...
התרגיל הוא בנושא לולאות(for/while/do while)
אני חושב שמדובר בלולאה בתוך לולאה בתוך לולאה(למיטב הבנתי את התרגיל...)

בתרגיל זה נכתוב תוכנית הקולטת 2 מספרים – x ו- y מהמשתמש ומדפיסה את כל המספרים בין
1 ל – x עם סכום ספרות y.
1. התוכנית קולטת מהמשתמש 2 מספרים שלמים הגדולים מ – 0. נסמן את המספר הראשון שהוכנס כ – x ואת המספר השני שהוכנס כ – y.
2. התוכנית מדפיסה את כל המספרים בין 1 ל – x שסכום הספרות שלהם שווה ל – y.
לאחר הדפסת כל מספר יודפס רווח (כולל המספר האחרון). לאחר הדפסת כל המספרים התוכנית תרד שורה.
3. בתום הדפסת המספרים התוכנית שואלת את המשתמש אם הוא מעוניין בסיבוב נוסף.
a. אם התשובה היא התו 'y' התוכנית חוזרת לשלב 1.
b. אחרת התוכנית מסתיימת.

דוגמאות הרצה (תוכנית, משתמש):
Enter two numbers:
1000 1
1 10 100 1000
Play again? (y/n)
y
Enter two numbers:
100 5
5 14 23 32 41 50
Play again? (y/n)
n


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

פרסאוס

New member
יש לך הנחיות ברורות בשאלה

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

הבעיה היא בעיקר איך לפרק את כל המספרים בין 1 ל-X כך שכל המפרים שסכומם Y יופיעו.

נגיכ כמו בדוגמא שהציבו X =1000 ו- Y=1 איך אני אמור לגרום לתוכנית "לסרוק" את כל המספרים בין 1 ל 100 ולקחת רק את המספרים שסכומם 1 כמו 10 1000 וכו'? ואם אני אציב X=1687 ו Y=8 וכו'?
באמת שאין לי קצה חוט.

ותודה
 

פרסאוס

New member
צריך לסרוק ספרה ספרה בכל מספר

אז איך מפרקים מספר עשרוני לספרות?
ובכן, כל ספרה גדולה מקודמתה פי עשר.
גם מדובר במספרים שלמים שאין להם שארית בחלוקה.
אז איך מוצאים שארית? יש אופרטור לזה! %.
אם 108/10=10 (אין שארית במספרים שלמים)
אז 108%10=8 (השארית).
 
העניין הוא שאם אני אזין מספר ממש גדול

אני יודע את השימוש ב % ו- / , הבעיה היא שצריך לעשות משהו שיעבוד לכל מספר, כלומר אם אציב 10 אז זה פשוט, עושים % ו / ומקבלים 1 ו-0 .
אבל אין הגבלה בכלל על המספר שאציב, כלומר אם אני אבחר את המספר 235465457678 פה זה כבר יותר מסובך, כי אני לא יודע עכשיו איך לעשות שהתוכנה תזהה את כל המספרים בין 1 למספר הזה ששוים לסכום Y ואני מניח שצריך לבנות משהו שיעבוד על כל מספר שאציב ולא רק על מספרים בני 2-3 ספרות שהפירוק שלהם מסתכם ב % ו / בודדים.
 

BravoMan

Active member
כל מספר ניתן לפרק באותה שיטה בדיוק

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

כמות הפעולות פשוט גדלה, ותצטרך גם לשמור את תוצאות הביניים.

למשל, כדי לפרק מספר בן 2 ספרות, מספיק פעולת חילוק אחת ופעולת שארית (מודולו) אחת.
בשביל מספר בן 3 ספרות, צריך 3 פעולות: בודקים שארית, מחלקים ב-10, עוד פעם בודקים שארית, ושוב מחלקים.

וכך הלאה.
ככל שהמספר ערוך יותר, כך צריך יותר פעולות.
וכמובן שכמו שאמרת בעצמך - זה תרגיל בלולאות.
 

yudit21

New member
בנוגע לאותה שאלה .למה הקוד לא עובד?

#include <stdio.h>
int main()
{
int x,i;
double y,sum_y;
char question;

scanf("%d",x);
scanf("%lf",y);
do
{
while (y>0)
{
sum_y=sum_y+y%10;
y=y/10;
}

for(i=1;i<=x;i++)
{
if (i=sum_y)
printf("%d",i);
else
if (i=x)
printf("%d",i);
}
printf("do you want to play again?");
scanf("%c",question);
}
while (question='y');
 

deepspace

New member
כמה בעיות:

1. לא קלטת ב scanf עם & לפני שם המשתנה.

2. האופרטור % לא עובד על double.

זה מה שראיתי בינתיים.
 

deepspace

New member
עוד משהו חשוב:

בכל ה if וה while שלך את משתמשת ב =, וזו טעות. = משמעותו השמה.

אם את רוצה לבדוק "האם X שווה ל Y" את צריכה להשתמש ב ==.
 
למעלה