ΤΕΣΤ (ΑΣΚΗΣΕΙΣ) ONLINE
98 Tests / Διαγωνίσματα

Κεφάλαιο 19.6 – Σελίδα 130-133 – ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Γ΄ ΛΥΚΕΙΟΥ – Απαντήσεις – Λύσεις

Ασκήσεις

Παράδειγμα 8 (σελ. 130)

Να αναπτύξετε πρόγραμμα σε ΓΛΩΣΣΑ που να διαβάζει από το πληκτρολόγιο τα μηνιαία έσοδα ενός καταστήματος για το πρώτο εξάμηνο και να τα καταχωρεί σε πίνακα. Στη συνέχεια για τους μήνες Φεβρουάριο, Μάρτιο, Απρίλιο, Μάιο και Ιούνιο να ελέγχει αν είχαν περισσότερα έσοδα από τον ακριβώς προηγούμενο μήνα και να εμφανίζει κατάλληλο μήνυμα που θα δηλώνει την ύπαρξη αύξησης. Δίνεται το πρόγραμμα (κώδικας [5.17]). Α) Να εκτελέσετε το πρόγραμμα για τις τιμές εισόδου 2000, 1800, 2100, 2100, 2000, 2000 και να καταγράψετε την εκτέλεση της επανάληψης ελέγχου αυξητικής τάσης στον πίνακα τιμών. Β) Ποια λάθη εντοπίσατε κατά την εκτέλεση του προγράμματος; Προτείνετε διορθώσεις.

Σκέψη / Μεθοδολογία: Κάνουμε δοκιμαστική εκτέλεση (πίνακα τιμών) με τα δοσμένα δεδομένα εισόδου, εντοπίζουμε πού η πραγματική έξοδος αποκλίνει από το αναμενόμενο αποτέλεσμα, και συνδέουμε κάθε απόκλιση με συγκεκριμένη γραμμή κώδικα.

Λύση:

  • Συμπληρώνουμε τον πίνακα δοκιμαστικής εκτέλεσης για Ι=1..6 με τις τιμές ΕΣΟΔΑ[Ι], ΕΣΟΔΑ[Ι+1], τη συνθήκη και την έξοδο.
  • Στο Ι=2: ΕΣΟΔΑ[2]=1800 < ΕΣΟΔΑ[3]=2100, η συνθήκη είναι Αληθής, αλλά το πρόγραμμα εμφανίζει 'Ο 2ος μήνας ΑΥΞΗΣΗ' ενώ η αύξηση έγινε ΑΠΟ τον 2ο ΣΤΟΝ 3ο μήνα — λάθος μήνυμα, πρέπει Ι+1.
  • Στο Ι=3 και Ι=5: ΕΣΟΔΑ[Ι]=ΕΣΟΔΑ[Ι+1] (ίσα), αλλά η συνθήκη '<=' τα θεωρεί λανθασμένα ως αύξηση — πρέπει γνήσια ανισότητα '<'.
  • Στο Ι=6: το πρόγραμμα προσπαθεί να διαβάσει ΕΣΟΔΑ[7], εκτός ορίων πίνακα 6 θέσεων — αντικανονικός τερματισμός· το άνω όριο του δεύτερου βρόχου πρέπει να είναι 5, όχι 6.

Απάντηση: Α) Πίνακας δοκιμαστικής εκτέλεσης: Ι=1: ΕΣΟΔΑ[1]=2000,ΕΣΟΔΑ[2]=1800, συνθήκη Ψευδής, καμία έξοδος (σωστό). Ι=2: 1800<=2100 Αληθής, έξοδος 'Ο 2ος μήνας ΑΥΞΗΣΗ' (λάθος μήνας, έπρεπε 3ος). Ι=3: 2100<=2100 Αληθής, έξοδος 'Ο 3ος μήνας ΑΥΞΗΣΗ' (λάθος, ίσα έσοδα δεν είναι αύξηση). Ι=4: 2100<=2000 Ψευδής, καμία έξοδος (σωστό). Ι=5: 2000<=2000 Αληθής, έξοδος 'Ο 5ος μήνας ΑΥΞΗΣΗ' (λάθος, ίσα έσοδα). Ι=6: προσπέλαση ΕΣΟΔΑ[7] εκτός ορίων → αντικανονικός τερματισμός. Β) Εντοπίστηκαν τρία λάθη: (1) λάθος αριθμός μήνα στο μήνυμα — 'ΓΡΑΨΕ Ι, ...' πρέπει να γίνει 'ΓΡΑΨΕ Ι+1, ...', (2) λανθασμένη συνθήκη '<=' πρέπει να γίνει '<' ώστε ίσα έσοδα να μην θεωρούνται αύξηση, (3) το άνω όριο 'ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 6' στον δεύτερο βρόχο πρέπει να γίνει 'ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 5' ώστε να μην προσπελαύνεται το ΕΣΟΔΑ[7] που δεν υπάρχει.

Πρόσεξε:

  • Όταν ένας βρόχος συγκρίνει Πίνακας[Ι] με Πίνακας[Ι+1], το άνω όριο του Ι πρέπει πάντα να είναι κατά 1 μικρότερο από το μέγεθος του πίνακα.
  • 'Περισσότερα από' σημαίνει γνήσια ανισότητα (<), όχι '<=' — τα δύο δεν είναι ισοδύναμα όταν οι τιμές μπορεί να είναι ίσες.

Δραστηριότητα 4 (σελ. 132)

Μία επιχείρηση έχει τρία υποκαταστήματα. Να αναπτύξετε πρόγραμμα σε ΓΛΩΣΣΑ που να διαβάζει από το πληκτρολόγιο τα έσοδα κάθε υποκαταστήματος ανά τρίμηνο ενός έτους και να τα καταχωρεί σε πίνακα. Για κάθε υποκατάστημα να υπολογίζει και να εμφανίζει τα ετήσια έσοδα. Δίνεται το πρόγραμμα (κώδικας [5.18]). i) Εκτελέστε το πρόγραμμα για τις τιμές εισόδου του πίνακα 5.6 και συμπληρώστε τον πίνακα τιμών 5.7. ii) Ποια λάθη εντοπίσατε κατά την εκτέλεση του προγράμματος; Προτείνετε διορθώσεις.

Σκέψη / Μεθοδολογία: Ακολουθούμε την εκτέλεση του διπλού βρόχου προσέχοντας ΠΟΤΕ μηδενίζεται η μεταβλητή 'Άθροισμα' — μία φορά συνολικά ή μία φορά ανά υποκατάστημα — και συγκρίνουμε με το τι απαιτεί η εκφώνηση (ξεχωριστό ετήσιο έσοδο ανά υποκατάστημα).

Λύση:

  • Η εντολή 'Άθροισμα <- 0' βρίσκεται στη γραμμή 6, ΠΡΙΝ την εξωτερική επανάληψη 'ΓΙΑ Ι' — άρα εκτελείται μία μόνο φορά σε όλο το πρόγραμμα.
  • Για το 1ο υποκατάστημα (Ι=1): Άθροισμα = 6000+7000+7500+6500 = 27000 (σωστό, αφού ήταν 0 πριν).
  • Για το 2ο υποκατάστημα (Ι=2): το Άθροισμα ΔΕΝ μηδενίζεται ξανά, άρα συνεχίζει από 27000: 27000+5000+4000+5000+6000 = 47000 (λάθος — έπρεπε 20000).
  • Για το 3ο υποκατάστημα (Ι=3): ομοίως συνεχίζει σωρευτικά: 47000+5000+6000+4000+5000 = 67000 (λάθος — έπρεπε 20000).

Απάντηση: i) Το πρόγραμμα εμφανίζει: 'Ετήσια έσοδα: 27000' (1ο υποκατάστημα, σωστό), 'Ετήσια έσοδα: 47000' (2ο υποκατάστημα, λάθος — το σωστό είναι 20000), 'Ετήσια έσοδα: 67000' (3ο υποκατάστημα, λάθος — το σωστό είναι 20000). ii) Το λάθος είναι ότι η μεταβλητή 'Άθροισμα' μηδενίζεται μόνο μία φορά (γραμμή 6, πριν από την εξωτερική επανάληψη) αντί να μηδενίζεται στην αρχή κάθε υποκαταστήματος. Έτσι τα έσοδα κάθε επόμενου υποκαταστήματος προστίθενται σωρευτικά πάνω στα προηγούμενα. Διόρθωση: μεταφορά της εντολής 'Άθροισμα <- 0' μέσα στην εξωτερική επανάληψη 'ΓΙΑ Ι', αμέσως πριν από την εσωτερική επανάληψη 'ΓΙΑ Κ' (δηλαδή ανάμεσα στις γραμμές 8 και 9).

Πρόσεξε:

  • Μια μεταβλητή συσσώρευσης (αθροιστής/μετρητής) πρέπει να μηδενίζεται στο σωστό επίπεδο εμφωλευμένης επανάληψης: αν το αποτέλεσμα πρέπει να είναι 'ανά εξωτερική επανάληψη', η αρχικοποίηση μπαίνει ΜΕΣΑ στον εξωτερικό βρόχο, όχι πριν από αυτόν.