עבור לתוכן

מטלה בלולואות בקורס מבוא לתכנות (c), for

Featured Replies

פורסם

שלום לכולם,

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

לדוגמה אם הכנסתי את המספר 648 ואת הספרה 4 אז התכנית צריכה להדפיס 68. התוכנית צריכה להשתמש רק בלולאות while,for, do. זה אחד הניסיונות שלי הוא נכנס ללולאה אינסופית ולא ממש ברור לי למה. הצלחתי להגיע למצב שזה מדפיס לי את הספרות אבל אם במספר שהמשתמש מכניס יש אפס אז זה עשה לי בלאגן וגם זה הדפיס את הספרות הפוך. אשמח לעזרה...תודה מראש וחג שמח:).

while (num1 > 0)
{
while ((num1 % 10) == digit)
{


num1 = (num1 / 10);
}

while ((num1 % 10) != digit)



printf("%d", num1 % 10);
num1 = (num1 / 10);



}

פורסם

כמה דברים.

1.שים לב שלא שמת סוגריים בלולאה השנייה.

2.תחשוב מה קורה כשnum1%10=0 בלולאה השנייה ותבין מדוע זה נכנס ללואה אין סופית.

3.עבור הספרות הפוך אני מאמין שתיהיה יצירתי ותמצא פתור

4.בטוח שאי אפשר להשתמש ב if?? , כי לעשות לולאת while בתפקיד של if זה דיי מכוער

פורסם
  • מחבר

דבר ראשון תודה רבה על התגובה המהירה!

בסוף ביררתי ומותר לנו להשתמש בדברים שלמדנו בעבר ככה שמותר להשתמש בתנאים.

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

יש דרך לשנות את זה?

הקוד:

int num1, digit, num2=0, ctr = 1, temp;


printf("choose a number:\n");
scanf_s("%d", &num1);


printf("choose a digit:\n");
scanf_s("%d", &digit);


while (num1 != 0)
{
temp = num1 % 10;

if (temp != digit)
{
if (temp != 0)
{
num2 = num2 + (temp*ctr);
ctr = ctr * 10;
}

}
num1 = num1 / 10;
}




printf("%d", num2);

פורסם

יש גבול על גודל של מספרים, לדוגמה int שהוא 32 ביט הוא לכל היותר 2 בחזקת 31 פחות 1. אתה יכול לנסות להדפיס את num1 אחרי שאתה קורה אותו כדי לוודא שהוא נופל בטווח הנכון (אם מה שהודפס זהה למה שהוכנס אז זה בסדר).

ארכיון

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

דיונים חדשים