לחשב אחוזים בלולאות while - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

לחשב אחוזים בלולאות while


shaithebest

Recommended Posts

שלום לכולם

יש פה שאלה משיעורי בית בשפת c

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

כל תושב התבקש לענות באופן הבא:

אם תשובתו חיובית לרשום: y

אם תשובתו שלילית לרשום: n

אם נמנע : L

בממשלה התקבלה ההחלטה שמחזירים את הגולן רק אם יש בעם רוב של 60% בעד ההחזרה.

כתוב תוכנית אשר מקבלת את תוצאות משאל העם (רצף של תווים המסתיים באות s).

על התוכנית להציג את סך תוצאות המשאל והודעה האם נחזיר את הגולן.

אני כתבתי תוכנית כזו:

#include<stdio.h>

void main()

{ char ch;

int y=0,n=0,l=0,count_all=0,count_y=0,count_n=0,count_l=0;

printf("enter decision\n");

scanf("%c",&ch);

while(ch!='s')

{

if(ch=='y')

count_y++;

if(ch=='n')

count_n++;

if(ch=='l')

count_l++;

scanf("%c",&ch);

count_all++;

}

if((float)count_y/count_all>=0.6)

printf("we give back the golan\n");

printf("y=%d\n",count_y);

printf("n=%d\n",count_n);

printf("l=%d\n",count_l);

}

הרצתי את התוכנית בקומפיילר והכל טוב ויפה אבל רק דבר אחד זה שלא ידעתי איך להביא לידי ביטוי את שאלת ה-60%.

בהרצה הוא לא מראה לי שום דבר שנוגע ל60%

אם מישהו יודע את האלגוריתם הזה יבורך

תודה מראש

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

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

אתה יודע כמה תווים יש במחרוזת.

אז אם סה"כ_ענו_להחזיר >= אורך_המחרוזת*0.6 אתה מדפיס הודעה שכן.

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

#include<stdio.h>
void main()
{ char ch;
int y=0,n=0,l=0,count_all=0,count_y=0,count_n=0,count_l=0;
printf("enter decision\n");
scanf("%c",&ch);
while(ch!='s')
{
if(ch=='y')
count_y++;
if(ch=='n')
count_n++;
if(ch=='l')
count_l++;
scanf("%c",&ch);
count_all++;
}
if((float)count_y/count_all>=0.6)
printf("we give back the golan\n");
printf("y=%d\n",count_y);
printf("n=%d\n",count_n);
printf("l=%d\n",count_l);
}

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

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

אם אתה כל הפלט שאתה מכניס הוא רק y, הוא לא מציג לך את השורה שצריך להחזיר את הגולן?

עריכה

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

הנה קוד שעובד(הוספתי גם שורה שמציגה את האחוזים שבעד):

#include<stdio.h>
void main()
{ char ch;
int y=0,n=0,l=0,count_y=0,count_n=0,count_l=0;
printf("enter decision\n");
scanf("%c",&ch);
while(ch!='s')
{
if(ch=='y')
count_y++;
if(ch=='n')
count_n++;
if(ch=='l')
count_l++;
scanf("%c",&ch);
}
if ((float)(count_y)/(float)(count_y+count_n+count_l)>=0.6)
printf("we give back the golan\n");
printf("precents=%f\n", (float)(count_y)/(float)(count_y+count_n+count_l));
printf("y=%d\n",count_y);
printf("n=%d\n",count_n);
printf("l=%d\n",count_l);
}

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

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

העניין הוא שעד עכשיו שלמדתי c c++ c# כמעט תמיד השתמשנו ב float למרות שידענו על קיומו של ה double.

בכל מקרה תודה על התשובה.

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

סבבה תודה לכולם

סתדרתי

הבכעיה היחידה היתה שהוא לא הראה לי את התוצאה באחוזים

לא יכול להפטר מה-float

המרצה שלי שהוא ד"ר לאלגוריתמיקה אמר לעזוב את הדאבל

התרגיל פתור אבל יש לי עוד הרבה.

בא לכם לפתור עוד תרגילים??אם מישבו מבינכם סטודנט באוניברסיטת ת"א לאחד ממגמות ההנדסה אז אפשרי לפתור ביננו לבין עצמינו תרגילים בC שמשותף לכולנו

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

שניכם טועים.

כאשר תכתבו תוכניות גדולות, או תצטרכו אופטימיזציות באמת, אז תחליפו int ב-short ו-double ב-float.

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

ואם להתלות בעץ גבוה:

"We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil."

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

אתה אומר שכל מה שמלמדים אותי באוניברסיטה זה בזבוז זמן?

הרי בטוח שאני לא יעבוד על C אבל זה מבוא לC++ לא?????.

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

אין מצב שאני מגיש עבודה או כותב מבחן בלי זה

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

כמו לעבוד בבדיקות תוכנה QA נראה לי

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

אז נכון שחשיבה אלגוריתמית מתמטית לוגית זה הכי חשוב אבל תנו לי לכתוב בא לי למות כבר

שמע בילבלת אותי לגמרי עם מה שרשמת על זה שint float זה בזבוז זמן

תודה

אגב: מה עם עוד תרגילים?בא לכם לפתור ככה בסבבה ביחד ?יש לי המון שיעורי בית

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

אתה אומר שכל מה שמלמדים אותי באוניברסיטה זה בזבוז זמן?

חס ושלום!

אבל נראה שיש לך כמה תפיסות מוטעות לגבי האוניברסיטה.

ראשית, רוב האוניברסיטאות מלמדות מדעי המחשב, ולימוד התכנות הוא רק "תופעת לוואי" של זה (לפחות, זאת הגישה הכללית).

אם בקורס מסויים אומרים לך לעבוד עם float, אז תעבוד לפי הקורס. זה לא אומר שזה תמיד נכון או תמיד לא נכון, בלי שום קשר לכך שאם אומרים לך את זה בקורס בסיסי הם טועים בגדול. זה נכון שבעולם האמיתי הרבה פעמים עובדים עם float והרבה פעמים עובדים עם double, אבל זו צריכה להיות בחירה מודעת התאם לדרישות ביצועים ודיוק. בינתיים המשימה שלך היא לצלוח את קורס התכנות המצ'וקמק על מנת שתוכל ללמוד דברים לעומק (לדוגמא, קומפילציה).

לא בטוח בכלל באיזה שפה תעבוד, ועובדים הרבה במכוון שפות (אבל כנראה לא ALGOL...). בעתיד יתכן שתעבוד עם C++. או עם C. או עם JAVA. או עם LISP. או עם שפה שעוד לא המציאו. אתה לומד C מכמה סיבות טובות (וכמה לא טובות), אז תדע אותה, אבל אל תפסול שום דבר בשלב הזה.

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

ארכיון

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

×
  • צור חדש...