כתבו תכנית אשר קוראת מהמשתמש (לתוך משתנים מטיפוס int) תאריך בשנה המורכב מ:
א. יום בחודש (בתחום 1..31).
ב. חודש בשנה (בתחום 1..12).
ג. שנה בתחום 1950..2049. את השנה יוכל המשתמש להזין בפורמט של ארבע ספרות (כדוגמת 1978 או 2038), או בפורמט של שתי ספרות (ואז 50 יובן כ- 1950 , בעוד 49 יובן כ- 2049 ).
מעבר לכך תקרא התכנית:
א. האם יש להציג את הפלט בפורמט אירופי (כלומר בפורמט: שנה/חודש/יום), או בפורמט אמריקאי (כלומר: שנה/יום/חודש). המשתמש יזין את הערך 1 אם ברצונו בפורמט אירופי, ו- 2 אם ברצונו בפורמט אמריקאי.
ב. האם יש להציג את הפלט בפורמט קצר (בו השנה מוצגת כזוג ספרות בלבד ), בפורמט בינוני (בו השנה מוצגת בארבע ספרות ), או בפורמט ארוך בו הפלט נראה באופן הבא עבור המקרה האירופי: 29th November 1957 , ובאופן הבא עבור המקרה האמריקאי: November 3rd 2011). המשתמש יזין 1 עבור פורמט קצר, 2 עבור פורמט בינוני, ו- 3 עבור פורמט ארוך.
על התכנית שתקלטו גם לבדוק את תקינות הקלט, כלומר שהיום, החודש והשנה הם בתחומים המתאימים. להזכירכם מספר הימים המותר בחודשים: 1,3,5,7,8,10,12 הוא 31, ביתר החודשים פרט לפברואר יש לכל היותר שלושים ימים. בחדש פברואר יש לכל היותר 28 ימים, אלא אם זו שנה מעוברת בה יש בפברואר 29 ימים. שנה הינה מעוברת אם היא כפולה של ארבע ואינה כפולה של מאה, או שהיא כפולה של ארבע מאות. במידה והקלט התברר כשגוי יש לשלוח הודעת שגיאה:
std::cerr << "Error: illegal input" << std::endl ;
ולעצור את ביצוע התכנית.
דוגמות לקלטים ופלטים (הקלט מוצג משמאל, והפלט המתאים לו מימין):
31 12 1978 1 1 31/12/78
31 12 1978 2 2 12/31/1978
31 12 78 1 2 31/12/1978
31 12 78 1 3 31st December 1978
31 12 78 2 3 December 31st 1978
תודה רבה לעוזרים
זה חדש לי ואני ממש לא יודע איך לעשות את זה ):