shaithebest פורסם 2007 בדצמבר 24 Share פורסם 2007 בדצמבר 24 שלום לכולםאני מנסה להריץ קטע קוד שכתבתי בשפת C כחלק משיעורי בית ולא הולך ליהשאלה:בעל חברה מעוניין לדעת מה היו הוצאותיו החודשיות למשכורות עובדיו.לכל עובד יש לקלוט את מספר השעות שעבד ואת התעריף לשעה.אם העובד עבד יותר מ-150 שעות, הוא מקבל בונוס של 250 שקל.הקלט יסתיים כאשר מספר השעות והתעריף לשעה יהיו 999-.פתח ויישם אלגוריתם שיקלוט את נתוני העובדים ויציג כפלט:א) מהן הוצאותיו של בעל המפעל?ב) מהי המשכורת הממוצעת? #include<stdio.h>void main(){ float sum=0,mone=0,shaot,taarif,avg;printf("please enter working hours of employee and taarif\n");scanf("%f %f",&taarif,&shaot);while (shaot!=-999){sum+=taarif*shaot;if (shaot>150)sum+=250;mone++;scanf("%f %f",&shaot,&taarif);}avg=sum/mone;} אני מצליח להריץ את התוכנה אבל לא מצליח מעבר לזה לא יודע מה קרה נתקעתיאני בטוח שהאלגוריתם שלי טוב אבל משום מה לא הבנתי את השאלה אם אפשר עזרה בניסוח מחדש של הקוד או כל דבר אחר אני אשמחתודה מראש קישור לתוכן שתף באתרים אחרים More sharing options...
TheReaper פורסם 2007 בדצמבר 24 Share פורסם 2007 בדצמבר 24 יעזור אם תכתוב מה בעצם הבעיהשגיאת מהדר?תוצאות לא נכונות? קישור לתוכן שתף באתרים אחרים More sharing options...
shaithebest פורסם 2007 בדצמבר 24 מחבר Share פורסם 2007 בדצמבר 24 הבעיה היא לענות על 2 השאלותהוצאות המנהל והממוצענראה לך שהקוד בסדר?אני מתכוון.....תנסה להריץ ואם תמצא איך לענות על 2 השאלות אז תסביר לי כי רק הסתדרתי עם האלגוריתם אבל לא הבנתי את השאלה-999.....איך הוא יכול לעבוד 999- שעות ??תודה קישור לתוכן שתף באתרים אחרים More sharing options...
TheReaper פורסם 2007 בדצמבר 25 Share פורסם 2007 בדצמבר 25 זה הקטע שהקוד שלך אמור להיות בסדררק בWHILE צריך להוסיף תנאי AND taarif!=-999ואז ההוצאות של בעל המפעל יהיו בSUMוהמשכורת הממוצעת תהיה בAVG-999.....איך הוא יכול לעבוד 999- שעות ??תודהאני לא חושב שהבנת מזה זקיףזקיף משמש כדי לעצור לולאות לא קבועות (כמו WHILE) בגלל שאתה לא יודע כמה פעמים הלולאה תרוץ אתה חייב להשתמש בWHILE אבל כדי שתדע לעצור אתה מחפש את הזקיף קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2007 בדצמבר 25 Share פורסם 2007 בדצמבר 25 כמה הערות:א. ה-main צריכה להחזיר int, לא void (זה חלק מהתקן של C).ב. תזיח את הקוד שלך. קשה מאוד לקרוא אותו ככה.ג. למה אתה לא מדפיס את התוצאות בסוף? קישור לתוכן שתף באתרים אחרים More sharing options...
Boomerang פורסם 2007 בדצמבר 25 Share פורסם 2007 בדצמבר 25 תגיד - זה שבשני ה- scanf-ים אתה קורא את השדות בסדר שונה לא עושה לך בלאגן? קישור לתוכן שתף באתרים אחרים More sharing options...
Niseg פורסם 2007 בדצמבר 25 Share פורסם 2007 בדצמבר 25 כמה בעיות : - המשתנה shaot לא מאותחל ואתה משתמש בו בloop מסוג while בו הבדיקה נעשת התחלה. או שתחליף לdo while או שתאתחל את המשתנה הזה- יש בעיה של בדיקת עם מספר שווה למשהו מתי שהוא מסוג float בגלל שלא חובה שיהיה לו רפרזנטציה. אני לא חושב שתהיה בעיה בגלל שמדובר על מספר ללא נקודה עשרונית שיש מספיק ביטים במנטיסה ליצג אותו . אבל לרוב בודקים אם הabs של ההפרש בין המספרים קטן מאיזה delta ( משהו כמו 0.001 ). בכל מקרה כדאי לך להוסים נקודה 0 ל מיניוס 999 שלך כדי להגיד למהדר שיעשה השווה בין מספרים מסוג float ולא יעשה המרות סוג על דעת עצמו.. קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2007 בדצמבר 25 Share פורסם 2007 בדצמבר 25 למה לא מאותחל? הוא הרי קורא לתוכו ב-scanf.(נכון, צריך להתמודד עם המקרה שהקריאה לא מצליחה, אבל זה בסה"כ תרגיל ולא הייתי מצפה שידרוש בדיקות תקינות קלט) קישור לתוכן שתף באתרים אחרים More sharing options...
shaithebest פורסם 2007 בדצמבר 25 מחבר Share פורסם 2007 בדצמבר 25 אחלה הבנתי את ההערות שלכםאלה שמתנגדים לvoid main () - אין מה לעשות זה מה שמלמדים אותנו באוניברסיטהבכל מקרה.....הוספתי עוד תנאי והסתדר ומראה לי פלט תקיןאל תדאגו יש עוד שאלותסמסטר הבא(אם יתחיל)......VB.NET, אסמבלי ועוד...תודה ביי קישור לתוכן שתף באתרים אחרים More sharing options...
Zelig פורסם 2007 בדצמבר 26 Share פורסם 2007 בדצמבר 26 אז תתקן אותם באוניברסיטה. יש גבול לשטויות שאפשר ללמד. תסביר למתרגל/ת ולמרצה שיש להם טעות בשקפים, או בחוברת, ותפנה אותם לתקן של C.איזו אוניברסיטה זו? כדי שאני אדע להמליץ נגדה. קישור לתוכן שתף באתרים אחרים More sharing options...
Niseg פורסם 2007 בדצמבר 27 Share פורסם 2007 בדצמבר 27 למה לא מאותחל? הוא הרי קורא לתוכו ב-scanf.(נכון, צריך להתמודד עם המקרה שהקריאה לא מצליחה, אבל זה בסה"כ תרגיל ולא הייתי מצפה שידרוש בדיקות תקינות קלט)צודק פיספתי את זה. הוא עדיין יכל להשתמש ב do while במקום לממש אותו בעצמו אבל זה לא ממש נורא. לפי מה שהבנתי אם הוא היה משתמש בdo while הוא לא היה נתקל בבעיה הזאת כי אז היה לו רק scanf אחד. קישור לתוכן שתף באתרים אחרים More sharing options...
eli33 פורסם 2007 בדצמבר 27 Share פורסם 2007 בדצמבר 27 do while לא ממש יפתור פה את הבעיה.קח לדוגמא אם הוא ירשום ככה.do{sum+=taarif*shaot;if (shaot>150)sum+=250;mone++;scanf("%f %f",&shaot,&taarif);}while (shaot!=-999);הוא עדיין יצטרך לקלוט לפני פעם אחת את המשתנים shaot ו- taarif .ואם הוא יקלוט בתחילת הלולאה כמו למשל ככה:do{scanf("%f %f",&shaot,&taarif);sum+=taarif*shaot;if (shaot>150)sum+=250;mone++;}while (shaot!=-999);תהיה לו בעיה שהוא יוסיף את ה -999 לסכום(בפעם האחרונה שהוא ירצה לצאת מהלולאה) למרות שבמקרה הזה הוא צריך לצאת מהלולאה.או שהוא יכול לטפל בזה כשהוא יוצא מהלולאה .בכל מקרה עדיף לכתוב את זה כבר כמו שהוא כתב. קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.