עבור לתוכן

Cּּּּ++ המספר השני בגודלו

Featured Replies

פורסם

שלום,יש לי תרגיל שקצת הסתבכתי:


# include <stdio.h>
# include <conio.h>
void main()
{
int num,max=0,max2=0;
float avg=0,sum=0,counter=0;
printf("enter your numbers,end with 0:\n");
scanf("%d",&num);//get numbers
max=num;//put num in max
while(num!=0)//check if num not equal to zero
{
sum+=num;//add num to sum
counter++;//add one to counter
if(num>max){//check if num is biger than max
max2=max;//put max in max2
max=num;//put num in max
}
else
if(num>max2&&num!=max)//check if num is biger than max2 and num
is not equal to max
max2=num;//put num in max 2
scanf("%d",&num);
}
avg=sum/counter;//make avarge
if(max2==0)
printf("sum=%d, eve=%.2f, there is no 2nd max",sum,avg);
else
printf("sum=%.f avg=%.2f 2nd max=%d",sum,avg,max2);
getch();

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


מה עשיתי לא נכון
תודה


פורסם

כמה היערות לפני שניגשים לתוכנית עצמה.

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

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

פורסם
  • מחבר

האמת שככה לימדו אותנו להשתמש בCONIO

ובקשר לקוד,למה הכוונה?חח סורי אני חדשה בתחום

פורסם

היכן את לומדת?

הנה הקוד שלך עם אינדנטציה:



# include <stdio.h>
# include <conio.h>
void main()
{
int num,max=0,max2=0;
float avg=0,sum=0,counter=0;
printf("enter your numbers,end with 0:\n");
scanf("%d",&num);//get numbers
max=num;//put num in max
while(num!=0)//check if num not equal to zero
{
sum+=num;//add num to sum
counter++;//add one to counter
if(num>max) //check if num is biger than max
{
max2=max;//put max in max2
max=num;//put num in max
}
else
{
if(num>max2&&num!=max)//check if num is biger than max2 and num is not equal to max
{
max2=num;//put num in max 2
}
}
scanf("%d",&num);


}
avg=sum/counter;//make avarge
if(max2==0)
{
printf("sum=%d, eve=%.2f, there is no 2nd max",sum,avg);
}
else
{
printf("sum=%.f avg=%.2f 2nd max=%d",sum,avg,max2);
}
getch();


}

פורסם

מה רע בCONIO חוץ מזה שהוא לא עובד על לינוקס מן הסתם.

פורסם
  • מחבר

תודה רבה(:

אפשר עזרה עם הקוד?איפה הטעות שלי?

פורסם

scanf("%d",&num)

פירושו, קלוט מספר יחיד מסוג INTEGER.

אני חושב שאת אמורה לקרוא בלולאה לSCANF עד שתקבלי 0

משהו סטייל

while(1)

{

scanf(%d,&num);

if(num == 0) break;

maxnum = maximum(num,maxnum);

maxnum2 = minimum(maxnum,maxnum2);

sum +=num;

count++;

}

avg=sum/count

WTF ?? מה זה כל הזבל שנוסף להודעה שלי, אין לי כח לרשום מחדש.

פורסם
  • מחבר

לא הבנתי:(

פורסם

מה רע בCONIO חוץ מזה שהוא לא עובד על לינוקס מן הסתם.

גם זה. וגם זה הרגל לא טוב. למה לכתוב קוד מיושן?

ולפותחת התראד - תשתמשי בדיבאגר. תעלי על הבעייה תוך זמן קצר.

פורסם

גיל אני לא מסכים, אין לה מושג מה SCANF עושה. פותחת הדיון בדקי איך SCANF פועל.

רמז: את תצטרכי להשתמש בלולאה בתרגיל הזה.

פורסם

אחח המורים של היום והתרגילים המוזרים שלהם, שיהיו לי בראים....

מסכים עם גיל, הדיבאגדר הוא חבר שלך. באיזה עורך טקסט\IDE אתה משתמש אגב?

ולגבי השאלה, אם קלט 0 הוא תנאי הסיום. מה אתה מצפה מקלט שמתחיל ב 0 ? :P

פורסם
  • מחבר

תודה רבה!סוף סוף עליתי על זה..

לא מאמינה שבזבזתי יום שלם על טעות מפגרת חח

פורסם

יום שלם?! באסה להיות את :P

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

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

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

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

פורסם

גם הדפסות ביניים (assert?) יכולים לעזור ובמהירות

פורסם

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

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

וגם משפטי print, בשפה סטטית זה פשוט לא זה, כי יש לך את כל מעגל ה compile - run וזה מעצבן.

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

ארכיון

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

דיונים חדשים