By DePaul Dimadis
Choose your prefered Language: greek_flag uk_flag

Ένα αιολικό πάρκο αποτελείται από 20 πανομοιότυπες ανεμογεννήτριες με κωδικούς 1-20. Κάθε ανεμογεννήτρια περιλαμβάνει 10 κύρια υποσυστήματα (π.χ. ανεμόμετρο, πτερύγιο, κέλυφος κλπ) με κωδικούς 1-10. Τo σειριακό αρχείο malfunction.txt περιέχει πληροφορίες για τους χρόνους κατά τους οποίους μια ανεμογεννήτρια τίθεται εκτός λειτουργίας λόγω βλάβης σε κάποιο από τα κύρια υποσυστήματά της για τις ημέρες του ιδίου έτους. Να θεωρήσετε ότι κάθε τέτοια βλάβη οφείλεται κάθε φορά, κατά κύριο λόγο, σε ένα μόνον από αυτά τα υποσυστήματα. Μπορούν να υπάρχουν περισσότερες από μία βλάβες κάθε ημέρα από το ίδιο υποσύστημα, για την ίδια ή για διαφορετικές ανεμογεννήτριες. Κάθε γραμμή του αρχείου αφορά μόνον μία ημέρα και περιλαμβάνει:
α) την ημερομηνία στη μορφή HHMM, αριθμός τύπου int (ΗΗ = ημέρα, ΜΜ = μήνας)
β) το πλήθος των βλαβών που εντοπίσθηκαν σε όλες τις ανεμογεννήτριες (τύπου int), με μέγιστο πλήθος 20.
γ) υπό μορφή αριθμητικών τριάδων, τύπου int: τον κωδικό του υποσυστήματος, τον κωδικό της ανεμογεννήτριας και τον αντίστοιχο χρόνο κατά τον οποίο η ανεμογεννήτρια τέθηκε εκτός λειτουργίας (σε πρώτα λεπτά, αριθμός τύπου int). (Προφανώς το μέγιστο πλήθος των τριάδων είναι 20.)
Το αρχείο δεν είναι ταξινομημένο ημερολογιακά και κάθε ημερομηνία υπάρχει μόνον μία φορά στο αρχείο. Π.χ. (οι παρενθέσεις δεν υπάρχουν στο αρχείο και παρατίθενται για διευκόλυνσή σας).

1405, 6, (9, 7, 50), (2, 11, 40), (7, 13, 60), (2, 7, 30), (2, 11, 30), (7, 10, 60)
2706, 3, (3, 14, 15), (9, 18, 110), (2, 8, 17)
1102, 4, (1, 10, 45), (6, 15, 20), (6, 11, 77), (5, 13, 34)
………
Να γραφεί μια κλάση με όνομα damage που θα διαχειρίζεται τα δεδομένα από το αρχείο malfunction.txt. Τα private μέλη – δεδομένα της κλάσης είναι :
1. Η ημερομηνία στη μορφή HHMM, αριθμός τύπου int
2. Το πλήθος των διαφορετικών υποσυστημάτων που προκάλεσαν βλάβη (μέγιστο πλήθος = 10)
3. Υπό μορφή αριθμητικών τριάδων τύπου int, ταξινομημένων κατά αύξοντα αριθμό υποσυστήματος:
  a. τον κωδικό του υποσυστήματος,
  b. το πλήθος των διαφορετικών ανεμογεννητριών στις οποίες προέκυψε βλάβη και
  c. τον αντίστοιχο ημερήσιο συνολικό χρόνο εκτός λειτουργίας (σε πρώτα λεπτά, αριθμός τύπου int).
ΠΑΡΑΔΕΙΓΜΑ : Το 1ο αντικείμενο της κλάσης damage για την 1η γραμμή του αρχείου θα έχει ως δεδομένα:
1405  3     2, 2,100     7, 2,120     9, 1, 50
H κλάση πρέπει να περιέχει:
α) Έναν constructor για την απόδοση μηδενικών τιμών στα μέλη των αντικειμένων της
β) Έναν constructor για την εκχώρηση τιμών από την ανάγνωση του αρχείου. Τα δεδομένα θα διαβάζονται σειριακά από το αρχείο (απαιτείται έλεγχος για την ύπαρξη του αρχείου).
Στη συνάρτηση main( ) να δηλώσετε έναν πίνακα αντικειμένων της κλάσης damage με 𝛮𝛮 θέσεις (𝛮𝛮 = γνωστό) και να αρχικοποιήσετε όλες τις θέσεις του πίνακα με χρήση του κατάλληλου constructor, θέτοντας ως εξ ορισμού μηδενικές τιμές για όλα τα μέλη - δεδομένα. H τιμή του 𝛮𝛮 μπορεί να είναι μικρότερη, μεγαλύτερη ή και ίση με το πλήθος των εγγραφών του αρχείου malfunction.txt.
Στη συνέχεια μέσω της προσπέλασης του αρχείου malfunction.txt :
1. Να γίνει εισαγωγή τιμών στα αντικείμενα του πίνακα, με τη χρήση του κατάλληλου constructor.
2. Να γίνει εισαγωγή σε έναν δυναμικό πίνακα, από κάθε εγγραφή του αρχείου, ζευγών που περιλαμβάνουν τον αύξοντα αριθμό της ανεμογεννήτριας και το χρόνο εκτός λειτουργίας (π.χ. για την 1η εγγραφή του αρχείου ο δυναμικός πίνακας θα περιλαμβάνει τα ζεύγη : (7, 50), (11, 40), (13, 60), (7,30), (11, 30), (10,60) ).
3. Να βρεθεί (αν υπάρχει) το πλήθος των γραμμών από το αρχείο που δεν περιλαμβάνονται στον πίνακα αντικειμένων.

4. Χρησιμοποιώντας όλα τα αντικείμενα του πίνακα αντικειμένων της κλάσης damage:
Να βρείτε και να εμφανίσετε τον συνολικό χρόνο που οι ανεμογεννήτριες τέθηκαν εκτός λειτουργίας λόγω βλάβης καθενός υποσυστήματος, για κάθε έναν από τους 12 μήνες του έτους, δηλ. συνολικά 10 Χ 12 = 120 τιμές.
5. Χρησιμοποιώντας όλα τα στοιχεία του δυναμικού πίνακα να βρείτε και να εμφανίσετε το συνολικό χρόνο εκτός λειτουργίας κάθε εργαλειομηχανής (ΜΟΝΑΔΕΣ 1,0)
6. Να δημιουργήσετε μια απορρέουσα κλάση με όνομα new_damage, που θα περιλαμβάνει ως επιπλέον private μέλη – δεδομένα τα αντίστοιχα κόστη αποκατάστασης (τύπου int) λόγω των βλαβών των υποσυστημάτων για κάθε ημερομηνία (π.χ. για το 1ο αντικείμενο της κλάσης damage με δεδομένα:
1405   3    2, 2, 100    7, 2, 120     9, 1, 50
θα πρέπει να υπάρχουν ως νέα δεδομένα τρεις ακέραιοι αριθμοί που θα αντιστοιχούν στα κόστη για τα υποσυστήματα 2, 7 και 9)
Στη συνέχεια:
a. Να γράψετε τη συνάρτηση του constructor (δομητή) για την εισαγωγή των δεδομένων σε ένα αντικείμενο της απορρέουσας κλάσης new_damage.
b. Να ορίσετε έναν πίνακα αντικειμένων της κλάσης new_damage, μεγέθους 𝛮𝛮 = γνωστό.

c. Χρησιμοποιώντας τον δομητή της απορρέουσας κλάσης, να αντιγράψετε σε αυτόν τον νέο πίνακα τα δεδομένα από τον πίνακα αντικειμένων της κλάσης damage που έχετε δημιουργήσει στο ερώτημα 1, δημιουργώντας τυχαία έγκυρα ποσά για τα νέα μέλη - δεδομένα σε κάθε θέση του νέου πίνακα.
(ΥΠΟΔΕΙΞΗ : όσες συναρτήσεις – μέλη των κλάσεων damage και new_damage απαιτηθούν κατά την ανάπτυξη του προγράμματος μπορούν να γραφούν σε οποιοδήποτε σημείο με χρήση των κατάλληλων συμβολισμών)