Παρασκευή 27 Νοεμβρίου 2015

Εκπαιδευτικό πρόγραμμα (Η Κατάταξη) στη Μ2000



Μια γλώσσα προγραμματισμού την χρησιμοποιούμε για εκπαιδευτικούς σκοπούς. Πολλοί σκέφτονται πως τις γλώσσες προγραμματισμού τις μαθαίνει κανείς για να κατανοήσει αλγόριθμους! Αυτό είναι λάθος! Το παρακάτω πρόγραμμα δεν έχει κανέναν γνωστό αλγόριθμο!
Μας ζητάει ένα νούμερο (γραμή 015, αν θέλουμε τη σκιάζουμε με \\ και αποκαλύπτουμε την 012), και κάνει υπολογισμούς εμφανίζοντας αποτελέσματα.
Δεν μπορούμε να πούμε ότι ο υπολογισμός είναι "αλγόριθμος". Στο προγραμματισμό αλγόριθμος είναι μια μέθοδος επίλυσης και έχει όνομα. Εδώ αν θέλαμε ντε και καλά να πούμε ότι και αυτό το πρόγραμμα έχει αλγόριθμο τότε το μόνο όνομα που του ταιριάζει είναι η περιγραφή του προγράμματος: Πρόγραμμα υπολογισμού εικοσάδων πετρών για περίβολο. Από μια άποψη είναι ένας "γενικός" αλγόριθμος! Πάντως δεν θεωρώ αυτό το πρόγραμμα αλγόριθμο.
Αυτό που "εκτελεί" το πρόγραμμα λέγεται υπολογισμός, η δουλειά δηλαδή του υπολογιστή. Και επειδή δεν έχει κάτι το εξαιρετικό, δεν μπορούμε να το χαρακτηρίσουμε αλγόριθμο "τάδε".

Όμως σαν πρόγραμμα έχει μερικά πράγματα που μπορούμε να αναφέρουμε εδώ:
Πρώτα έχει αριθμημένες εντολές (ο διορθωτής εμφανίζει αρίθμηση αν δει ότι βάζουμε αρίθμηση και μπορεί να είναι σπαστή, όπως εδώ που έχουμε βάλει σημειώσεις στις πρώτες γραμμές). Αυτό είναι καλό για μια άμεση εποπτεία (ο διορθωτής δείχνει και αρίθμηση γραμμής πάνω στην γραμμή ελέγχου-αναφοράς)
Στην γραμμή 050 επιλέγω φόρμα οθόνης 40 χαρακτήρων επί 15 γραμμές, χρώμα μπλε (από 0 έως 15 έχουμε τα τυπικά χρώματα των Windows), μετά βάζω χρώμα οθόνης (όχι περιθωρίου) το  κατά html χρώμα #88BBFF και δεύτερη παράμετρο το 0 που σημαίνει ότι καταργώ τη χωριστή οθόνη άρα όλη θα έχει το ίδιο χρώμα και θα ολισθαίνει σε όλο το ύψος. Μετά έχω την Τύπωσε με την εσωτερική μέθοδο $() όπου η παράμετρος 4 λέει ότι θα ακολουθεί αναλογική γραφή μέχρι να το αλλάξουμε! Δείτε πως τελειώνει σε ένα κόμμα. Αυτό σημαίνει ότι δεν θα γίνει αλλαγή γραμμής (η Τύπωσε χωρίς κόμμα ή ελληνικό ερωτηματικό δεν  προκαλεί  αλλαγή γραμμής).
Στις γραμές 060 και 140 καλούμε μια ρουτίνα για να μας φτιάξει το τίτλο που θέλουμε και τον δίνουμε ως παράμετρο. Οι ρουτίνες μπαίνουν στο τέλος (τις αναζητεί εκεί ο διερμηνευτής) και είναι τοπικές σε ένα τμήμα, βλέπουν τις μεταβλητές του τμήματος και αν θέλουμε φτιάχνουμε και τοπικές μεταβλητές. Η μεταβλητή παλιό_πλάτος_στήλης δεν θα υπάρχει μετά το πέρας της εκτέλεσης της ρουτίνας. Στη γραμμή 230 καλώ τη Τύπωσε με την εσωτερική μέθοδο @() η οποία πάει το δρομέα εκεί που θέλουμε (εδώ δεν θέλω να φύγει και δίνω τις τρέχουσες τιμές θέση και γραμμή (είναι με μπλέ γράμματα γιατί είναι μεταβλητές του συστήματος), και μετά δίνω το άλλο άκρο όπου θα βαφτεί το φόντο με χρώμα 2 (πράσινο) και περίγραμμα 2 (πάλι πράσινο). Στην 210 έχω ορίσει διπλού ύψους γράμματα -(πιάνει δυο γραμμές) και βγαίνουν όπως βλέπουμε πάνω στη φωτογραφία.
Στη 225 γραμμή η Πένα αριθμός { } αλλάζει πρόσκαιρα χρώμα πένας. Η μέθοδος $(6, πλάτος) κάνει την εκτύπωση αναλογική και κεντραρισμένη σε πεδίο με πλάτος όσο το πλάτος της οθόνης (σε μη αναλογικούς χαρακτήρες. εδώ το 40 που έχουμε επιλέξει στη Φόρμα στη γραμμή 050). Μετά επαναφέρουμε το πλάτος στήλης σε εκείνο που κρατήσαμε και βάζουμε το $(4) που δηλώνει αναλογική γραφή κανονική στοίχιση (οι αριθμοί δεξιά, τα γράμματα αριστερά).

Όταν φτάσει η εκτέλεση του προγράμματος στην 200 θα δει το "Ρουτίνα" και θα κάνει αυτόματα έξοδο!

Κράτησα σχετικά απλό το πρόγραμμα για να έχουμε μια αποδεκτή εμφάνιση. Τι θέλει να μας δείξει λοιπόν; Ότι ένα πρόγραμμα μπορεί να φτιάχνει "μοντέλα" όπως ένα Excel. Εδώ έχουμε δυο τύπους που εκτελούνται και ο πρώτος είναι προαπαιτούμενος για το δεύτερο. Εδώ συνδυάζουμε την ευκολία χρήσης τύπων και την κατ΄επιλογής μας εμφάνιση στην οθόνη!
Η γραμμή 012 μπήκε για να δούμε ότι ένα πρόγραμμα μπορεί να στηθεί για μια λειτουργία π.χ. για βήτα=20 ή για πολλαπλές χωρίς να αλλάζουμε τιμές στο πρόγραμμα. Η 015 αποτελεί την είσοδο του προγράμματος! Έτσι βλέπουμε πως ένα πρόγραμμα μπορεί να στηθεί χωρίς είσοδο τιμών, επειδή περιέχονται σε αυτό οι τιμές!

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



\\ Μαθαίνω τη κατάταξη
\\ Έστω ότι έχω ένα περίβολο 30 μέτρων
\\ θέλω να βάλω διακοσμητικες πέτρες
\\ ξέρω ότι υπάρχουν σε εικοσάδες για 3 μέτρα
\\ Πόσες πέτρες χρειάζομαι (1) και πόσες τελικά εικοσάδες (2)
010 άλφα=3 ' μέτρα
012 \\ βήτα=20  ' πέτρες
015 Εισαγωγή "βήτα=", βήτα
020 γάμα=30 ' μέτρα
030 δέλτα=βήτα*γάμα/άλφα ' πέτρες
040 Επιγραφή$="για {0} μέτρα θέλω {1} πέτρες"
050 Φόρμα 40,15 : Πένα 1 : Οθονη #88BBEF,0 : Τυπωσε $(4), ' αναλογική γραφή
060 Διαμέσου Βάλε.τίτλο("Κατάταξη μέτρα/πέτρες")
065 \\ για άλφα μέτρα θέλω βήτα πέτρες
070 Τύπωσε "Γνωστό:", μορφή$(Επιγραφή$,άλφα, βήτα)
075 \\ για γάμα μέτρα θέλω δέλτα πέτρες
080 Τύπωσε "Ζητούμενο:", μορφή$(Επιγραφή$,γάμα, δέλτα)
090 άλφα=20 ' πέτρες
100 βήτα=1 ' ανά 1 εικοσάδα
110 γάμα=δέλτα ' πέτρες
120 δέλτα=βήτα*γάμα/άλφα ' εικοσάδες
130 Επιγραφή$="οι {0} πέτρες είναι {1} εικοσάδ"
140 Διαμέσου Βάλε.τίτλο("Κατάταξη πέτρες/εικοσάδες")
150 Τύπωσε "Γνωστό:", μορφή$(Επιγραφή$+"α",άλφα, βήτα)
160 αν δέλτα=1 τότε {ε$="α"} αλλιώς ε$="ες"
170 Τύπωσε "Ζητούμενο:", μορφή$(Επιγραφή$+ε$, γάμα, δέλτα)
180 Οθόνη 5, -5 ' χωριστή οθόνη στις πέντε τελευταίες γραμμές
190 Πένα 14
200 Ρουτίνα Βάλε.τίτλο(α$)
210 Διπλά
220 παλιό_πλάτος_στήλης=στήλη
225 Πένα 10 {
230 Τύπωσε @(θέση, γραμμή, πλάτος+1, γραμμή+1,2,2), $(6, πλάτος), α$,
235 }
240 Τύπωσε $(4,παλιό_πλάτος_στήλης)
250 Κανονικά
260 Τέλος Ρουτίνας


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


Τμήμα Κατάταξη {
      \\ Μαθαίνω τη κατάταξη
      \\ Έστω ότι έχω ένα περίβολο 30 μέτρων
      \\ θέλω να βάλω διακοσμητικες πέτρες
      \\ ξέρω ότι υπάρχουν σε εικοσάδες για 3 μέτρα
      \\ Πόσες πέτρες χρειάζομαι (1) και πόσες τελικά εικοσάδες (2)
      άλφα=3 ' μέτρα
      \\ βήτα=20  ' πέτρες
      Εισαγωγή "βήτα=", βήτα
      γάμα=30 ' μέτρα
      δέλτα=βήτα*γάμα/άλφα ' πέτρες
      Επιγραφή$="για {0} μέτρα θέλω {1} πέτρες"
      Φόρμα 40,15 : Πένα 1 : Οθονη #88BBEF,0 : Τυπωσε $(4), ' αναλογική γραφή
      Βάλε.τίτλο("Κατάταξη μέτρα/πέτρες")
      \\ για άλφα μέτρα θέλω βήτα πέτρες
      Τύπωσε "Γνωστό:", μορφή$(Επιγραφή$,άλφα, βήτα)
      \\ για γάμα μέτρα θέλω δέλτα πέτρες
      Τύπωσε "Ζητούμενο:", μορφή$(Επιγραφή$,γάμα, δέλτα)
      άλφα=20 ' πέτρες
      βήτα=1 ' ανά 1 εικοσάδα
      γάμα=δέλτα ' πέτρες
      δέλτα=βήτα*γάμα/άλφα ' εικοσάδες
      Επιγραφή$="οι {0} πέτρες είναι {1} εικοσάδ"
      Βάλε.τίτλο("Κατάταξη πέτρες/εικοσάδες")
      Τύπωσε "Γνωστό:", μορφή$(Επιγραφή$+"α",άλφα, βήτα)
      Αν δέλτα=1 τότε {ε$="α"} αλλιώς ε$="ες"
      Τύπωσε "Ζητούμενο:", μορφή$(Επιγραφή$+ε$, γάμα, δέλτα)
      Οθόνη 5, -5 ' χωριστή οθόνη στις πέντε τελευταίες γραμμές
      Πένα 14
     
      Ρουτίνα Βάλε.τίτλο(α$)
            Διπλά
            Τοπική παλιό_πλάτος_στήλης=στήλη
            Πένα 10 {
                  Τύπωσε @(θέση, γραμμή, πλάτος+1, γραμμή+1,2,2), $(6, πλάτος), α$,
            }
            Τύπωσε $(4,παλιό_πλάτος_στήλης)
            Κανονικά
      Τέλος Ρουτίνας
}
Κατάταξη

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.