Cּּּּ++ המספר השני בגודלו - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


OBR

Recommended Posts

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


# 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.

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

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

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

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



# 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();


}

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

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 ?? מה זה כל הזבל שנוסף להודעה שלי, אין לי כח לרשום מחדש.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ארכיון

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

×
  • צור חדש...