AΠΑΛΛΑΚΤΙΚΗ ΕΡΓΑΣΙΑ ΓΙΑ ΤΟ ΑΚ ΕΤΟΣ 23-24
- Δευτέρα, 11 Μαρτίου 2024 - 11:55 π.μ. -

ΟΣΟΙ ΧΡΩΣΤΑΤΕ ΤΟ ΕΡΓΑΣΤΗΡΙΟ ΘΑ ΠΡΕΠΕΙ ΝΑ ΜΟΥ ΣΤΕΙΛΕΤΕ ΤΟΝ ΚΩΔΙΚΑ ΣΕ WORD ΤΗΝ ΔΕΥΤΕΡΑ 3/6/24 ΓΙΑ ΤΗΝ ΠΙΟ ΚΑΤΩ  ΕΡΓΑΣΙΑ

Ζητείται η υλοποίηση ενός προγράμματος στη γλώσσα C, το οποίο θα ζητάει από τον χρήστη να εισάγει σε κατάλληλη δομή (struct) μια τυχαία ημερομηνία (βήμα 1). Η εισαγωγή  των πεδίων της ημερομηνίας θα γίνεται τμηματικά με την εξής σειρά:

  1. Η ημέρα του μήνα ως ακέραια τιμή
  2. Ο μήνας του έτους ως ακέραια τιμή
  3. Το έτος ως ακέραια τιμή

Στη συνέχεια το πρόγραμμα θα κάνει τους απαραίτητους ελέγχους (αμυντικός προγραμματισμός) με τη χρήση κατάλληλων συναρτήσεων και εάν οι τιμές που έδωσε ο χρήστης είναι σωστές, θα υπολογίζει (βήμα 2) και θα εκτυπώνει τη σειρά που έχει η συγκεκριμένη ημερομηνία στο έτος, καθώς και το υπόλοιπο ημερών μέχρι το τέλος του έτους. Εάν κάποια από τις τιμές που έδωσε ο χρήστης είναι λανθασμένη θα εμφανίζεται το ανάλογο μήνυμα και το πρόγραμμα θα επιστρέφει στο βήμα 1 για νέα εισαγωγή.

Για το βήμα 1 το πρόγραμμα θα πρέπει να κάνει τους παρακάτω ελέγχους:

  1. Έλεγχος ότι ο αριθμός που αντιστοιχεί στην ημέρα είναι σωστός.
  2. Έλεγχος ότι ο αριθμός που αντιστοιχεί στον μήνα είναι σωστός (1-12).
  3. Έλεγχος ότι ο αριθμός που αντιστοιχεί στο έτος είναι σωστός, δηλαδή θετικός αριθμός.

Στους ελέγχους να λάβετε υπόψη εάν το έτος είναι δίσεκτο. Σε κάθε δίσεκτο έτος, ο Φεβρουάριος έχει 29 ημέρες αντί για 28.

O κώδικάς σας πρέπει να είναι δομημένος περιλαμβάνοντας τις παρακάτω συναρτήσεις:

  1. i) Tη συνάρτηση get_date() η οποία θα καθοδηγεί τον χρήστη με το ανάλογο μήνυμα ώστε να εισάγει την ημέρα, τον μήνα και το έτος και θα αποθηκεύει τις τιμές στην δομή (struct) date.

Υπόδειξη: Δηλώστε την global μεταβλητή date τύπου struct Date.  Η δομή Date θα περιέχει τα πεδία int day, int month, int year.

  1. ii) Tη συνάρτηση is_leap(int) η οποία θα ελέγχει αν το έτος που έδωσε ο χρήστης είναι δίσεκτο.

Υπόδειξη: Για να προσδιορίσουμε αν ένα έτος είναι δίσεκτο, ακολουθούμε τον εξής αλγόριθμο:

  • Α) Αν το υπόλοιπο της ακέραιας διαίρεσης του έτους με το 4 είναι διάφορο από το μηδέν (ο αριθμός δεν διαιρείται με το 4) τότε το έτος δεν είναι δίσεκτο.
  • Β) Αλλιώς (αν διαιρείται με το 4) εξετάζουμε το υπόλοιπο της ακέραιας διαίρεσης του έτους με το 100. Αν το υπόλοιπο είναι διάφορο του μηδενός (το έτος δεν διαιρείται με το 100) τότε το έτος είναι δίσεκτο. Στην αντίθετη περίπτωση πάμε στο βήμα Γ.
  • Γ) Αλλιώς (αν από το βήμα Β δεν προκύψει ότι το έτος είναι δίσεκτο) εξετάζουμε το υπόλοιπο της ακέραιας διαίρεσης του έτους με το 400. Αν το υπόλοιπο είναι ίσο με μηδέν (το έτος διαιρείται με το 400) τότε το έτος είναι δίσεκτο.

iii) Τη συνάρτηση chkday() η οποία θα ελέγχει εάν η ημέρα που έδωσε ο χρήστης είναι σωστή, λαμβάνοντας υπόψη εάν το έτος είναι δίσεκτο.

  1. iv) Τη συνάρτηση chkmonth() η οποία θα ελέγχει εάν ο μήνας που έδωσε ο χρήστης είναι σωστός.
  2. v) Τη συνάρτηση chkyear() η οποία θα ελέγχει αν το έτος που έδωσε ο χρήστης είναι θετικός αριθμός.
  3. vi) Τη συνάρτηση day_of_year() που θα υπολογίζει και εκτυπώνει τον αύξοντα αριθμό της ημέρας του έτους που αντιστοιχεί στην ημερομηνία που έχει δώσει ο χρήστης, καθώς και το πλήθος των ημερών που υπολείπονται μέχρι το τέλος του έτους.

vii) Τέλος υλοποιήστε και το κυρίως πρόγραμμα συνδυάζοντας τις παραπάνω συναρτήσεις

ΠΡΟΣΟΧΗ ΘΑ ΜΟΥ ΤΟ ΣΤΕΙΛΕΤΕ ΑΠΟΚΛΕΙΣΤΙΚΑ ΤΗΝ ΔΕΥΤΕΡΑ 3/6/23 ΑΠΟ ΤΟ ΠΡΩΙ 8ΠΜ ΕΩΣ 12 ΤΑ ΜΕΣΑΝΥΧΤΑ ΤΗΣ ΣΥΓΚΕΚΡΙΜΕΝΗΣ ΜΕΡΑΣ

Η ΑΠΟΣΤΟΛΗ ΤΟΥ ΚΩΔΙΚΑ ΘΑ ΓΙΝΕΙ ΜΕΣΩ ECLASS Η ΣΤΟ HERA@UPATRAS.GR