פורסם 2013 במאי 2612 שנים מחבר אלה שגיאות מהותיות שלא כדאי בכלל שתעשה אותם אפילו על דף נייר.עכשיו מבחינה לוגית, עדיף שאת השאלה האם המשתמש עבד יותר מ-8 שעות תשאל ככה ולא האם הוא עבד פחות מ-8 שעות.עכשיו אם הוא עבד יותר מ-8 שעות, אתה צריך לחלק את המספר הזה לשני חלקים.ימשיך כבודו...#include <stdio.h>#define HOURS_FOR_FULL_JOB 8int main(){ int shift, sum = 0, c,hours,n,extra; printf("Enter the number of shift worked\n"); scanf("%d", &shift); printf("Enter number of hours worked\n"); for (c = 1; c <= shift; c++) { scanf("%d",&hours); if ( hours > 8 ) extra = hours - 8; else { sum += hours; } } printf("Sum of entered hours worked = %d\n",sum); printf("Sum of Overtime hours worked = %d\n",extra); return(1);}זה הכי קרוב שהגעתי וזה לא טוב כי זה לא עושה את מה שרציתי מהסיבה שאני לא יודע להפריד ביניהם והסיבה שאתם לא מספרים לי איך...
פורסם 2013 במאי 2612 שנים אוקי, שמרת את השעות הנוספות במשתנה - מעולה. אבל עכשיו חסרים עדיין שני דברים:א. אתה כל פעם דורס את הערך שלו, במקום להוסיף לו. כלומר, אם המשתמש הכניס פעמיים שעות נוספות, אז אתה רק תזכור את הפעם השנייה, ולא את הפעם הראשונה.ב. אתה "שוכח" את 8 השעות הרגילות, במקום להוסיף אותן לסכום של השעות הרגילות (sum).
פורסם 2013 במאי 2612 שנים עכשיו נניח שהתנאי התקיים. כלומר, הוא עבד יותר מ-8 שעות. מה יהיה הערך של sum תמיד?
פורסם 2013 במאי 2612 שנים מחבר אני חושב שאני אלך על עזרה מהקהללא מצליח להבין איך ניסיתי כל מיני דברים אבל הם לא התקמפלו והיו קצת הזויים
פורסם 2013 במאי 2612 שנים תעלה את הקוד ונחשוב ביחד מה לא בסדר.אנחנו בעלי ניסיון, ככה אתה תלמד הרבה יותר טוב מאשר לנסות להבין את הפיתרון.
פורסם 2013 במאי 2612 שנים בן, יש פתגם שאומר שאם תתן לבנאדם דג הוא ישבע היום, אם תלמד אותו לדוג הוא ישבע כל החיים.זה משפט נכון והוא נכון שבעתיים בתכנות.יש המון המון דרכים לכתוב תוכנית שעושה פעולות מסוימות חלק יפות יותר וחלק פחותהדרך שעשית מצוינת רק צריכה עדיין קצת ליטושים, אבל זה יבוא עם הזמןהפסיאודו קוד של הדרך שאני הייתי בוחר זה משהו כזה:1. אפס sum ו extra.2. קלוט מספר משמרות ל shifts3. עבור I מ 0 עד shifts3.1. קלוט מספר שעות ל hours3.2. אם hours > HOURS_FOR_FULL_JOB3.2.1. extra = extra + hours - HOURS_FOR_FULL_JOB3.2.2. sum = sum + HOURS_FOR_FULL_JOB3.3. אחרת3.3.1. sum = sum + hoursוההמשך ידועשים לב שבמקום המספר 8 השתמשתי ב define שלי. זה נראה יותר יפה ויותר ברור. והכי חשוב שאם צריך לשנות את התוכנה ל7 שעות אתה לא משכתב את התוכנה אלא מחליף את ההגדרה רק.יש עוד דרכים אחרות לא פחות יפות אבל אני חושב שזו מספיק ברורה בינתיים.
פורסם 2013 במאי 2612 שנים מחבר בן, יש פתגם שאומר שאם תתן לבנאדם דג הוא ישבע היום, אם תלמד אותו לדוג הוא ישבע כל החיים.זה משפט נכון והוא נכון שבעתיים בתכנות.יש המון המון דרכים לכתוב תוכנית שעושה פעולות מסוימות חלק יפות יותר וחלק פחותהדרך שעשית מצוינת רק צריכה עדיין קצת ליטושים, אבל זה יבוא עם הזמןהפסיאודו קוד של הדרך שאני הייתי בוחר זה משהו כזה:1. אפס sum ו extra.2. קלוט מספר משמרות ל shifts3. עבור I מ 0 עד shifts3.1. קלוט מספר שעות ל hours3.2. אם hours > HOURS_FOR_FULL_JOB3.2.1. extra = extra + hours - HOURS_FOR_FULL_JOB3.2.2. sum = sum + HOURS_FOR_FULL_JOB3.3. אחרת3.3.1. sum = sum + hoursוההמשך ידועשים לב שבמקום המספר 8 השתמשתי ב define שלי. זה נראה יותר יפה ויותר ברור. והכי חשוב שאם צריך לשנות את התוכנה ל7 שעות אתה לא משכתב את התוכנה אלא מחליף את ההגדרה רק.יש עוד דרכים אחרות לא פחות יפות אבל אני חושב שזו מספיק ברורה בינתיים.תשמע אני כל כך שמח שיש את הפורום הזה ואותכם פה כתמיכה לשאלות שלי אתם מחזקים מאוד!!אני אסדר את הקוד ואחזור אליכם מקווה שעם תוכנית מלאה- - - נערך: - - -איזה חיוך מטומטם יש לי שהצלחתי לעבור את הצעד הפשוט הזה#include <stdio.h>#define FULL_SHIFT 8int main(){ int shift, sum = 0, c,hours,extra=0; printf("Enter the number of shift worked\n"); scanf("%d", &shift); printf("Enter number of hours worked\n"); for (c = 1; c <= shift; c++) { scanf("%d",&hours); if ( hours > FULL_SHIFT ) { extra = extra + hours - FULL_SHIFT; sum = sum + FULL_SHIFT; } else { sum = sum + hours; } } printf("Sum of entered hours worked = %d\n",sum); printf("Sum of Overtime hours worked = %d\n",extra); return(1);}עכשיו צעד הבאאני צריך לחשוב איך אני מוסיף את ההפרדה השלישי לשעות סופ''ש אולי ELSE IF?? אבל כבר אמרתם לי שאני לא יכול להוסיף אות אז איך המשתמש יוכל להכניס משהו שיפריד לחלוטין את הספירה מכולםהוספתי משתנה WEEKEND..
פורסם 2013 במאי 2612 שנים אחלה. עכשיו אתה צריך לחשוב איך אתה קולט את המידע של סופ"ש.אתה מחויב על פי התרגיל לכלול אות בסוף המספר?אגב, במקום לכתוב:extra = extra + hoursאתה יכול לכתוב:extra += hours
פורסם 2013 במאי 2612 שנים מצוין.עכשיו בשביל סופ"ש מן הסתם צריך סוכם מאופס כמו השאר.אבל כדאי להחליף את הscanf. אני הייתי מעדיף בgets שקולט מהמשתמש מחרוזת שלמה עד אנטר.אפשר גם להוסיף לscanf עוד פרמטר ככה:scanf ("% d% c", &hours, &type);type צריך להיות מסוג char.ואז צריך לבדוק האם type הוא רווח או אינטר (תווים 30 ו13 בהתאמה). אם כן להמשיך כרגיל כמו עכשיואם הערך שלו הוא 's' או כל תו אחר שבחרת... אתה יודע מה לעשות נכון?אם בחרת להשתמש בgets אז צריך כמובן להגדיר מערך של chars, לקבל את הקלט, לחשב את אורך הקלט, לברר האם התו הלפני אחרון הוא 's' (האחרון הוא תמיד null לסיום המחרוזת), אם כן להוציא אותו מהמחרוזת ולהמיר את המחרוזת לערך מספרי ולסכום אותו לweekend. אם לא אז רק להמיר לערך מספרי ולהמשיך כמו עכשיו
פורסם 2013 במאי 2612 שנים מחבר מצוין.עכשיו בשביל סופ"ש מן הסתם צריך סוכם מאופס כמו השאר.אבל כדאי להחליף את הscanf. אני הייתי מעדיף בgets שקולט מהמשתמש מחרוזת שלמה עד אנטר.אפשר גם להוסיף לscanf עוד פרמטר ככה:scanf ("% d% c", &hours, &type);type צריך להיות מסוג char.ואז צריך לבדוק האם type הוא רווח או אינטר (תווים 30 ו13 בהתאמה). אם כן להמשיך כרגיל כמו עכשיואם הערך שלו הוא 's' או כל תו אחר שבחרת... אתה יודע מה לעשות נכון?אם בחרת להשתמש בgets אז צריך כמובן להגדיר מערך של chars, לקבל את הקלט, לחשב את אורך הקלט, לברר האם התו הלפני אחרון הוא 's' (האחרון הוא תמיד null לסיום המחרוזת), אם כן להוציא אותו מהמחרוזת ולהמיר את המחרוזת לערך מספרי ולסכום אותו לweekend. אם לא אז רק להמיר לערך מספרי ולהמשיך כמו עכשיולא כל כך מכיר עדיין את GETS אז מעדיף כרגע להישאר בSCANFבכל מקרה זה מה שיצא לי אבל המשתמש כאילו מחוייב להוסיף אות כי כשאני מכניס מספר בלי אות התוכנית נעצרת#include <stdio.h>#define FULL_SHIFT 8int main(){ int shift, sum = 0, c,hours,extra=0,type=0,weekend=0; printf("Enter the number of shift worked\n"); scanf("%d", &shift); printf("Enter number of hours worked\n"); for (c = 1; c <= shift; c++) { scanf ("% d% c", &hours, &type); if ( hours > FULL_SHIFT ) { extra = extra + hours - FULL_SHIFT; sum = sum + FULL_SHIFT; } else if (hours + type) { weekend = weekend + hours; } else { sum = sum + hours; } } printf("Sum of entered hours worked = %d\n",sum); printf("Sum of Overtime hours worked = %d\n",extra); return(1);}לילה טוב נשב על זה לעומק מחר אחרי עבודה
פורסם 2013 במאי 2612 שנים ברור שהתוכנית עוצרת. היא מצפה לקלט נוסף ואתה לא מזין כזה.מה שתוכל לעשות, הוא לקלוט את המספר בתור string ואז לבדוק אם הוא מסתיים באות או לא.אופציה אחרת היא לשאול בנפרד האם המשמרת הנוכחית היא סופ"שית.
פורסם 2013 במאי 2712 שנים לכן אמרתי שעדיף להשתמש ב-gets או ב:scanf("%s", str);כאשר str הוא מערך של chars
פורסם 2013 במאי 2712 שנים אפשר גם להוסיף לscanf עוד פרמטר ככה:scanf ("% d% c", &hours, &type);ב-scanf אסור שיהיה רווח בין ה-% לאות שבאה אחריו, דהיינו צריך להיות:scanf("%d%c",...חוץ מזה, כמובן שפותח הת'רד התעלם מהמשפט הזה:type צריך להיות מסוג char.חוץ מזה, לפותח הת'רד: תסביר לי בבקשה מה המשמעות של השורה הזו: else if (hours + type) נערך 2013 במאי 2712 שנים על-ידי שניצל
פורסם 2013 במאי 2712 שנים מחבר ב-scanf אסור שיהיה רווח בין ה-% לאות שבאה אחריו, דהיינו צריך להיות:scanf("%d%c",...חוץ מזה, כמובן שפותח הת'רד התעלם מהמשפט הזה:חוץ מזה, לפותח הת'רד: תסביר לי בבקשה מה המשמעות של השורה הזו: else if (hours + type)ניסיון עלוב להציג שאם השעות יהיה עם אות אז...ידעתי שלא יעבוד אבל לא עלה לי שום דבר אחר אז בנתיים השארתי את זה ככהושניצל אתה יוכל לקרוא לי בן..חחח פותח הת'רד רשמי מידי...בנוסף לזה אני חוזר למה שאמרתי קודם.. אני לא כך כך מבין במחרוזות אני בדיוק מתחיל לקרוא על זה אבל דיי התייאשתי אז כנראה שאני אפתח עוד קלט מהמשתמש שיקלוט את השעות סו''פש בנפרד...תודה לכולם נראה לי שאפשר לנעול את הת'רד..
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.