Διδακτικά Βιβλία του Παιδαγωγικού Ινστιτούτου

Αναζήτηση

Βρες
Εμφάνιση

14.1.2 Ευελιξία

Ένα από τα κριτήρια αξιολόγησης του προγράμματος είναι και η δυνατότητα επέκτασης του. Παρατηρώντας τον κύκλο ζωής προγράμματος, που αναφέρεται παρακάτω, παρατηρούμε ότι η μισή ζωή του προγράμματος θα καταναλωθεί για τις βελτιώσεις, προσθήκες, γενικά για τις αλλαγές στο αρχικό πρόγραμμα. Αυτό δίνει μεγαλύτερη βαρύτητα στο κριτήριο της ευελιξίας. Ο σχεδιασμός ενός ευέλικτου προγράμματος απαιτεί περισσότερο χρόνο για την επιλογή της μεθόδου, που θα ακολουθήσουμε για τη λύση του.

Ένα κλασικό παράδειγμα, όπου ο αρχικός σχεδιασμός δεν επιτρέπει την επέκταση του αλγόριθμου παρ’ ότι είναι λογικά σωστός, είναι η σύγκριση 3 αριθμών και η κατάταξή τους σε σειρά. Λογική επέκταση του θα ήταν ένα πρόβλημα που ζητά την κατάταξη 4 αριθμών. Αν η μετάβαση από τον ένα αλγόριθμο στον άλλο είναι γρήγορη, τότε έχουμε σχεδιάσει έναν αλγόριθμο σε σωστή βάση.

Ας δούμε την λογική του εξέλιξη, δεδομένου ότι το πρόβλημα είναι εξαντλημένο από μαθηματικής πλευράς.

Παράδειγμα 2 Δίνεται ζεύγος αριθμών από το πληκτρολόγιο και ζητείται να εμφανίζονται με αύξουσα σειρά στην οθόνη.

ΠΡΟΓΡΑΜΜΑ Σειρά_2α ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ α, β ΔΙΑΒΑΣΕ α, β ΑΝ α ΓΡΑΨΕ α, β ΑΛΛΙΩΣ ΓΡΑΨΕ β, α ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Σειρά_2α

Το παραπάνω πρόγραμμα είναι φυσικά σωστό, απλό, και πληρεί όλους τους όρους που έχουν τεθεί. Είναι όμως επεκτάσιμο; Ας δούμε την πιθανότερη επέκταση του.

Παράδειγμα 3 Δίνεται τριάδα αριθμών από το πληκτρολόγιο και ζητείται να εμφανιστούν με αύξουσα σειρά στην οθόνη.

Οι διαφορετικές διατάξεις 3 αριθμών είναι 6 (3!=1*2*3=6). έτσι η παρακάτω λύση για τρεις αριθμούς, είναι η λογική επέκταση της προηγουμένης.

ΠΡΟΓΡΑΜΜΑ Σειρά_3α ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ α, β, γ ΔΙΑΒΑΣΕ α, β, γ ΑΝ α ΑΝ β ΓΡΑΨΕ α, β, γ

ΑΛΛΙΩΣ ΑΝ α ΓΡΑΨΕ α, γ, β ΑΛΛΙΩΣ ΓΡΑΨΕ γ, α, β ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ ΑΝ ΑΛΛΙΩΣ ΑΝ α ΓΡΑΨΕ β, α, γ ΑΛΛΙΩΣ ΑΝ β ΓΡΑΨΕ β, γ, α ΑΛΛΙΩΣ ΓΡΑΨΕ γ, β, α ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Σειρά_3α

Αν τώρα μας ζητηθεί η ταξινόμηση τεσσάρων αριθμών, θα πρέπει πρώτα να βρούμε τις 24 (4!=1*2*3*4=24) διαφορετικές διατάξεις των τεσσάρων αριθμών και να γράψουμε φυσικά τα ανάλογα ΑΝ, προκειμένου να αναγνωρίσει το πρόγραμμα για ποια διάταξη πρόκειται, ώστε να την εμφανίσει στην οθόνη.

Παρατηρούμε ότι ενώ έχουμε λύσει το πρώτο πρόβλημα με απλό τρόπο, εν τούτοις όταν τα δεδομένα στην είσοδο αυξάνουν, γίνεται όλο και περισσότερο επίπονο να κατασκευαστεί αλγόριθμος που να καλύπτει την νέα ανάγκη, παρ’ όλο ότι αυτή δεν φαίνεται αρκετή να προκαλέσει τέτοια αναστάτωση.

Ας δούμε λοιπόν τι πήγε λάθος, ώστε ένα πρόγραμμα που ο βασικός του κορμός δείχνει να έχει σχεδιαστεί σωστά, δεν αντέχει αυτό που από πολλούς θεωρείται φυσική του επέκταση.

Το λάθος προήλθε από το ότι στηριχθήκαμε για τη λύση του, σε μία λύση γνωστή από τα μαθηματικά, που είναι πολύ κοντά στην ανθρώπινη αντιμετώπιση του προβλήματος. Θεωρήσαμε ότι αυτή είναι "καλή λύση" και προχωρήσαμε και στην πρώτη επέκταση της, χωρίς να υπολογίσουμε ότι στον κύκλο ζωής ενός προγράμματος, ο αρχικός σχεδιασμός είναι μόνο το 16%, ενώ η συντήρηση, που περιλαμβάνει και τις επεκτάσεις, είναι 50%.

Ας δούμε μία λύση που στοχεύει στο μεγαλύτερο ποσοστό. Μια λύση που θα είναι εύκολα επεκτάσιμη.

ΠΡΟΓΡΑΜΜΑ Σειρά_2β ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ α, β ΔΙΑΒΑΣΕ α, β ΑΝ α>β ΤΟΤΕ temp - ΤΕΛΟΣ_ΑΝ ΓΡΑΨΕ α, β ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Σειρά_2β

Συμπερασματικά λοιπόν μπορούμε να πούμε ότι λύσεις που είναι καλές για μας μπορεί να μην είναι οι κατάλληλες για τον υπολογιστή. Αυτό θα πρέπει να εξετάζεται σαν μία σοβαρή παράμετρος στην επιλογή του αλγόριθμου.

Στο παραπάνω πρόγραμμα τυποποιήθηκε η έξοδος, ώστε πάντα να τυπώνεται το περιεχόμενο του α και μετά του β. Αυτό προς στιγμήν αυτή η τυποποίηση της εξόδου, δεν δείχνει την σημασία της, αντίθετα θα έλεγε κανείς ότι η λύση είναι "περίεργη" και θα είχε δίκιο.

Τώρα ας επεκτείνουμε αυτήν τη λογική για να λύσουμε το πρόβλημα για τρεις αριθμούς.

ΠΡΟΓΡΑΜΜΑ Σειρά_3β ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: σ ΠΡΑΓΜΑΤΙΚΕΣ α, β, γ σ ΔΙΑΒΑΣΕ α, β, γ ΟΣΟ σ=0 ΕΠΑΝΑΛΑΒΕ σ ΑΝ α>β ΤΟΤΕ temp ΤΕΛΟΣ_ΑΝ ΑΝ β>γ ΤΟΤΕ temp ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ α, β, γ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Σειρά_3β

Η μεταβλητή σ δείχνει, αν έχει γίνει αντιμετάθεση στα ζεύγη που συγκρίνονται. Αν δεν έχει γίνει καμία τότε σ=1 και οι αριθμοί είναι στη σωστή σειρά και άρα μπορούν να εμφανιστούν. Εξετάζοντας το προηγούμενο πρόγραμμα παρατηρούμε ότι, υπάρχει μια σειριακή ακολουθία από ανεξάρτητα ΑΝ (μπορούν να αλλάξουν σειρά), στα οποία συγκρίνονται οι αριθμοί με τη σειρά εισαγωγής τους. Έτσι γίνονται οι συγκρίσεις α>β και β>γ και γίνεται η αντιμετάθεσή τους, αν χρειάζεται. Δηλαδή από τη σύγκριση των δύο (α>β) περάσαμε στην σύγκριση των τριών (α>β, και β>γ).

Τώρα η σύγκριση δύο αριθμών με τη χρήση αντιμετάθεσης δεν φαίνεται πια "περίεργη".

Στα παραπάνω είδαμε τα βήματα βελτιστοποίησης της δομής ενός προγράμματος με την ευκαιρία μιας επέκτασης που δεν μπορούσε να γίνει.