Να αναπτύξετε πρόγραμμα σε ΓΛΩΣΣΑ που να διαβάζει τα μηνιαία έσοδα και τα μηνιαία έξοδα μιας επιχείρησης για το πρώτο εξάμηνο του έτους και να τα καταχωρεί σε πίνακες. Μέσω συνάρτησης να υπολογίζει το πλήθος των μηνών που είχαν ζημιά (έσοδα < έξοδα). Τέλος, να εμφανίζει το πλήθος των μηνών που είχαν ζημιά. Δίνεται το πρόγραμμα (κώδικας [5.19]). i) Εκτελέστε το πρόγραμμα για τις τιμές εισόδου των πινάκων 5.8 και 5.9 και συμπληρώστε τον πίνακα τιμών 5.10. Ποια τιμή θα πάρει η μεταβλητή «Μήνες_με_ζημία» μετά την ολοκλήρωση; Με βάση την εκφώνηση πόσοι μήνες είχαν πραγματικά ζημιά; ii) Ποια λάθη εντοπίσατε; Προτείνετε διορθώσεις.
Σκέψη / Μεθοδολογία: Παρακολουθούμε την κλήση της συνάρτησης προσεκτικά — ποιο όρισμα αντιστοιχίζεται σε ποια παράμετρο — γιατί η συνάρτηση 'δουλεύει' σωστά ως κώδικας, αλλά ενδέχεται να μετράει διαφορετικό μέγεθος από αυτό που ζητά η εκφώνηση.
Λύση:
Απάντηση: i) Η μεταβλητή 'Μήνες_με_ζημία' παίρνει τελικά την τιμή 3. Όμως με βάση την εκφώνηση (ζημία = έσοδα < έξοδα) μόνο ο 2ος μήνας είχε πραγματικά ζημιά (2000<2200) — δηλαδή 1 μήνας, όχι 3. ii) Το λάθος βρίσκεται στην κλήση της συνάρτησης (γραμμή 12): τα ορίσματα ΕΣΟΔΑ και ΕΞΟΔΑ δόθηκαν με λάθος σειρά, με αποτέλεσμα η συνάρτηση να μετρά μήνες κέρδους αντί για μήνες ζημίας. Διόρθωση (οποιαδήποτε αρκεί): (α) αλλαγή της κλήσης σε 'Υπολογισμός(ΕΞΟΔΑ, ΕΣΟΔΑ)', (β) αλλαγή της δήλωσης παραμέτρων σε 'ΣΥΝΑΡΤΗΣΗ Υπολογισμός(Πίνακας2, Πίνακας1)', ή (γ) αλλαγή της συνθήκης σε 'ΑΝ Πίνακας1[I] < Πίνακας2[I] ΤΟΤΕ'.
Πρόσεξε:
Να αναπτύξετε πρόγραμμα σε ΓΛΩΣΣΑ που να διαβάζει έναν ακέραιο αριθμό ν, να υπολογίζει μέσω συνάρτησης το παραγοντικό του (ν! = 1×2×...×ν) και να το εμφανίζει. Δίνεται το πρόγραμμα (κώδικας [5.20]). i) Εκτελέστε το πρόγραμμα για την τιμή εισόδου 4 και καταγράψτε τις τιμές των μεταβλητών κατά την εκτέλεση της συνάρτησης στον πίνακα τιμών 5.12. ii) Ποια λάθη εντοπίσατε; Προτείνετε διορθώσεις.
Σκέψη / Μεθοδολογία: Παρακολουθούμε την αρχική τιμή του συσσωρευτή γινομένου Π και τη συγκρίνουμε με το ουδέτερο στοιχείο του πολλαπλασιασμού.
Λύση:
Απάντηση: i) Για Ν=4, η μεταβλητή Π παραμένει 0 σε όλες τις επαναλήψεις (01=0, 02=0, 03=0, 04=0), ενώ ο μετρητής Ι παίρνει διαδοχικά τις τιμές 1,2,3,4. Η συνάρτηση επιστρέφει Π=0. ii) Το λάθος είναι η αρχικοποίηση του συσσωρευτή γινομένου στο 0 (γραμμή 15: 'Π <- 0'), ενώ το ουδέτερο στοιχείο του πολλαπλασιασμού είναι το 1. Διόρθωση: η γραμμή 15 πρέπει να γίνει 'Π <- 1'. Με αυτή τη διόρθωση, η εκτέλεση δίνει Π=1(αρχικό)→11=1→12=2→23=6→64=24, δηλαδή σωστά 4!=24.
Πρόσεξε:
