Κυριακή 29 Σεπτεμβρίου 2024

Αλγόριθμοι – Προγραμματισμός (τεύχος 1)

 

Αλγόριθμοι – Προγραμματισμός


Εισαγωγή

 

Στόχος αυτού του δοκιμίου είναι «Η ανάπτυξη της αλγοριθμικής σκέψης του παιδιού με την διαδικασία της κατασκευής προγραμμάτων σε ηλεκτρονικό υπολογιστή».

Όσο και να προσπαθούμε να πείσουμε τα παιδιά να «προγραμματίσουν» δεν θα βρούμε εύκολα ανταπόκριση.  Το πραγματικό πρόβλημα είναι η έλλειψη αφαιρετικής σκέψης. Με την αφαιρετική σκέψη το παιδί αντιλαμβάνεται το γενικό ενώ η αλγοριθμική σκέψη σπάει το πρόβλημα από το γενικό στο επιμέρους. Ο προγραμματισμός είναι η επιλογή εντολών μιας γλώσσας προγραμματισμού που εκτελεί αυτό που σε γενικές γραμμές λέει ο αλγόριθμος. Μπορούμε να δούμε τον αλγόριθμο ως το προσχέδιο του προγράμματος. Η γλώσσα προγραμματισμού αποτελεί το εργαλείο, που πραγματοποιεί τη σκέψη μας κατά την εκτέλεση στην υπολογιστική μηχανή, τον προσωπικό υπολογιστή (ορισμός από τη δεκαετία του ’80), ή ηλεκτρονικό υπολογιστή (ορισμός προ της δεκαετίας του ’80).

Για το σκοπό του δοκιμίου, την ανάπτυξη της αλγοριθμικής σκεψης του παιδιού,  θα προταθεί μια μέθοδος εκπαίδευσης, που στηρίζεται πρώτα στην αφαιρετική σκέψη, μετά στην αλγοριθμική σκέψη και τέλος στον προγραμματισμό.

Το δοκίμιο στοχεύει σε ενήλικες που θέλουν να δοκιμάσουν τρόπους μαθησιακής προσέγγισης ειδικότερα στον όρο της Αλγοριθμικής Σκέψης. Ο προγραμματισμός θα χρησιμοποιηθεί για την τεκμηρίωση της σκέψης.

Αφαιρετική Σκέψη

Κάθε παιδί την κάθε στιγμή έχει ένα βαθμό αφαιρετικής σκέψης, μια ικανότητα αφαίρεσης της λεπτομέρειας προς το γενικό, σ' αυτό που ταιριάζει. Όταν το παιδί παίζει με ένα «ψεύτικο» όπλο μάχη, φαίνεται σε μας σαν αφαίρεση, βάζοντας τον εαυτό του ως πολεμιστή, σ' αυτό που νομίζει ότι είναι πολεμιστής. Τι είναι «πολεμιστής» για το παιδί; Η απλή του σκέψη είναι ότι αυτός που έχει όπλο είναι πολεμιστής! Το παιδί δεν έχει καμία ιδέα περί εχθρού, απλά γενικά καθένας που μπαίνει στο χώρο του παιχνιδιού του μπορεί να του φανεί εχθρός!  Η αντίληψη του παιδιού περιορίζεται από την έλλειψη πληροφορίας ή και στοιχείων που του καθορίζουν την τωρινή κατάσταση.  Αυτή η έλλειψη δεν αποτελεί «Αφαίρεση». Όταν όμως ζητήσουμε από το παιδί να μας φέρει από τα παιχνίδια του να δούμε ό,τι παιχνιδι έχει με ρόδες, και αφού το κάνει, του πούμε πώς όλα αυτά τα λέμε οχήματα, τότε έχει ιδέα μιας γενικότητας, του όρου 《οχήματα, κι αυτό γίνεται άμεσα μέρος της δικής του αφαιρετικής σκέψης.

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

Πρόβλημα - Παράδειγμα

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

Αφαιρετική Σκέψη περί Ακέραιων

Πρώτα πρέπει να ορίσουμε τι είναι ακέραιος αριθμός. Εδώ ο ορισμός λέει ότι οι ακέραιοι αριθμοί ανήκουν σε ένα σύνολο, όπου για κάθε Ν αριθμό υπάρχει ο Ν+1και ο Ν-1, με κεντρικό αριθμό το 0, ώστε για Ν=0 το Ν-1 είναι το -1 και το Ν+1 είναι το +1. Ο αριθμός 3 ανήκει στο σύνολο, γιατί βγαίνει με το 0+1+1+1 ή +3, ή απλά 3 (το + λέμε ότι εννοείται). Υπάρχουν αριθμοί που δεν ανήκουν στο σύνολο αυτό, όπως για παράδειγμα το μισό του 3, δηλαδή το ένα και μισό (όπου δυο φορές γίνεται: ένα και μισό και ένα και μισό άρα τρία), επειδή από το 0, για το σύνολο των ακεραίων, μπορούμε να προσθέτουμε μονάδες αλλά όχι μισή μονάδα!  Αυτός ο βαρύς, για τα παιδιά, ορισμός είναι προϋπόθεση για την κατανόηση της λύσης του προβλήματος. Η αφαίρεση εδώ είναι ότι το εκατό θα είναι 0+1+1….+1, δηλαδή εκατό φορές από το 0 αυξάνουμε κατά ένα, και δεν χρειάζεται να το αποδείξουμε, μας αρκεί το ότι δουλεύει η απόδειξη για 1, 2, 3. Επίσης, το συμπέρασμα του ορισμού είναι ότι για κάθε ξεχωριστό ακέραιο υπάρχει ο προηγούμενος κατά ένα και ο επόμενος κατά ένα, όπου και οι δυο είναι μοναδικοί! Έτσι για το 5 υπάρχει το 4 και το 6, ως προηγούμενος και επόμενος ακέραιος αντίστοιχα.

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

Αλγοριθμική Σκέψη - Σχεδιασμός

Ένας τρόπος να ξεμπερδεύουμε γρήγορα με τον αλγοριθμικό σχεδιασμό είναι να κάνουμε μικρά βήματα ελέγχου, πριν ολοκληρώσουμε τη σκέψη μας. Αυτά τα βήματα ελέγχου γίνονται με την επιλογή των αρχικών συνθηκών. Έστω ότι έχουμε Α=4 και Β=5, πόσοι ακέραιοι είναι μεταξύ Α και Β (χωρίς τα Α και Β); Λέμε ότι από το Α στο Β χρειαζόμαστε μόνο μια μονάδα, και το σκεπτικό μας είναι να αφαιρέσουμε την τελευταία μονάδα, άρα το Α+1 είναι το Β, άρα οι μονάδες έχουν σύνολο 1 (είναι μια) και αφαιρούμε ένα, άρα έχουμε 0 ακέραιους. Έστω ότι έχουμε Α=2 και Β=5, τότε θα έχουμε τους 2+1, 2+1+1 ή 3 και 4 μεταξύ των 2 και 5, και με τον υπολογισμό μας θα έχουμε από το Α στο Β συνολικά Α+1+1+1 ή τρεις μονάδες και αφαιρούμε μια, άρα έχουμε δυο ακέραιους (3 και 4).

Τώρα μας ενδιαφέρει να προσθέσουμε τους ακέραιους. Στο προηγούμενο παράδειγμα για  Α=2 και Β=5 βρίσκουμε διαδοχικά τα 3 και 4 και κάθε φορά τα προσθέτουμε στη ΣΟΥΜΑ. Η ΣΟΥΜΑ έχει αρχική τιμή 0 (δεν έχουμε αθροίσει τίποτα). Κάθε φορά που βγαίνει ένας ακέραιος (από όσους υπάρχουν μεταξύ Α και Β) θα τον προσθέτουμε στη ΣΟΥΜΑ, δηλαδή στη ΣΟΥΜΑ βάζουμε νέα τιμή το άθροισμα ΣΟΥΜΑ συν Ακέραιος.

Τέλος στην αλγοριθμική μας σκέψη πρέπει να σκεφτούμε πότε ο αλγόριθμος δεν μπορεί να εκτελεστεί! Αν έχουμε Α=Β, για παράδειγμα, Α=4 και Β=4 δεν μπορούμε να ικανοποιήσουμε τη συνθήκη Α<Β (ή αν ήταν Β<Α θα αλλάζαμε τιμές μεταξύ τους στα Α και Β για να βγουν με τη σωστή σειρά, Α<Β). Η αντίθετη της Α=Β είναι η Α<>Β (το Α διάφορο του Β, είτε μεγαλύτερο, είτε μικρότερο)

Προγραμματισμός

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

Προϋποθέσεις για την ετοιμασία του προγράμματος είναι:

  1. Να έχουμε επιλέξει τα ονόματα των μεταβλητών, δηλαδή αυτών που θα κρατάνε τιμές. Εδώ οι μεταβλητές μας θα έχουν τα ονόματα Α, Β, Σούμα και μια ακόμα Ι όπου θα τη χρειαστούμε για να πάρει τιμές διαδοχικά από το Α+1 μέχρι και το Β-1.
  2. Να έχουμε επιλέξει τι θα εμφανιστεί ως πρώτο μήνυμα. Σε αυτό το βήμα: «Εύρεση αθροίσματος ακεραίων μεταξύ δυο ακεραίων Α και Β».
  3. Να έχουμε επιλέξει τις εντολές για εισαγωγή των Α και Β, μαζί με τις λεζάντες τους, όπως «Τιμή στο Α:» και «Τιμή στο Β:».
  4. Να κάνουμε έλεγχο, αν Α=Β και τοτε αν είναι Αληθής η σύγκριση, να τυπώσουμε «Αδύνατον, δεν έχουμε διαφορετικούς ακεραίους Α και Β» και μετά να κάνουμε Έξοδο από το πρόγραμμα.
  5. Να δούμε, αν το Β<Α (το Β μικρότερο του Α) και αν είναι Αληθής η σύγκριση, τότε να αλλάξουμε τιμές στα Α και Β και να το δείξουμε με τις λεζάντες όπως στο (3).
  6. Να κάνουμε έλεγχο Α+1=Β και αν είναι Αληθής η σύγκριση, να τυπώσουμε «Δεν υπάρχουν μεταξύ <τιμής Α> και <τιμής Β> ακέραιοι.  Εδώ μπορούμε να τυπώσουμε τη Σούμα που θα είναι μηδέν. Αν είναι Ψευδής ο έλεγχος, τότε πάμε στο (7), αλλιώς τερματίζει το πρόγραμμα
  7. Στο βήμα αυτό διατρέχουμε τις τιμές από Α+1 έως Β-1 μέσω της Ι, στην εντολή: Για Ι=Α+1 έως Β-1, και βάζουμε το κάθε Ι στη Σούμα με το Σούμα+=Ι (που είναι ίδιο με το Σούμα=Σούμα+Ι).
  8. Στο τέλος βάζουμε την εντολή Τύπωσε, η οποία θα μας δώσει τη Σούμα. Επίσης ενώ δεν το ζητάει η άσκηση, εδώ έχουμε βάλει το αποτέλεσμα χωρίς να διατρέχουμε τις τιμές και να τις αθροίζουμε, απ’ ευθείας με μαθηματικό τύπο.

Επισημάνσεις

Ο υπολογισμός με τον τύπο ((Β-Α)/2+Α)*(Β-Α-1) δε λειτουργεί, αν Α=Β ή Α>Β. 

Ο υπολογισμός βασίζεται στο σκεπτικό ότι το άθροισμα όλων των ακέραιων αριθμών από 1 έως Ν είναι το Ν*(Ν+1)/2. Για παράδειγμα το άθροισμα των 1, 2, 3 είναι το 3*4/2, και σχετίζεται με το μισό εμβαδόν ενός παραλληλόγραμμου  3 Χ 4.

Ο τύπος ((Β-Α)/2+Α)*(Β-Α-1) γράφεται (Β-Α)*(Β-Α-1/2+Α*(Β-Α-1), έτσι αν Α=3 και Β=6 τότε έχουμε (6-3)*(6-3-1)/2+3*(6-3-1), ή 3*2/2+3*2 ή 3+6 ή 9, και πράγματι μεταξύ Α και Β είναι οι ακέραιοι 4 και 5, με άθροισμα το 9.

Για Α=-3 και Β=11  θα έχουμε ((11--3)/2-3)*(11--3-1), ή (14/2-3)*13 ή 4*13 ή 52. Πράγματι αν προσθέσουμε -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 θα πάρουμε το 52.

 

Κώδικας σε διερμηνευτή Μ2000

 

Ακέραιος Α, Β, Ι
Μακρύς Σούμα
Τύπωσε "Εύρεση αθροίσματος ακεραίων μεταξύ δυο ακεραίων Α και Β"
Εισαγωγή "Τιμή στο Α:", Α
Εισαγωγή "Τιμή στο Β:", Β
Αν Α=Β Τότε Τύπωσε "Αδύνατον, δεν έχουμε διαφορετικούς ακέραιους Α και Β": Έξοδος
Αν Β<Α τότε
             Άλλαξε Α, Β
             Τύπωσε "Τιμή στο Α:"+Α
             Τύπωσε "Τιμή στο Β:"+Β
Τέλος Αν
Αν Α+1=Β Τότε
             Τύπωσε "Δεν υπάρχουν μεταξύ "+Α+" και "+Β+" ακέραιοι"
Αλλιώς
             Για Ι=Α+1 έως Β-1
                         Σούμα+=Ι
             Επόμενο
Τέλος Αν
Τύπωσε "Άθροισμα:"+Σούμα
Τύπωσε "Υπολογισμός:"+(((Β-Α)/2+Α)*(Β-Α-1))

 

Κώδικας σε διερμηνευτή Python


Α = Β = Ι = Σούμα = 0
print("Εύρεση αθροίσματος ακεραίων μεταξύ δυο ακεραίων Α και Β")
Α=int(input("Τιμή στο Α:"))
Β=int(input("Τιμή στο Β:"))
if Α==Β:
    print("Αδύνατον, δεν έχουμε διαφορετικούς ακέραιους Α και Β")
    exit()
if Β<Α:
    Α, Β = Β, Α
    print("Τιμή στο Α:", Α)
    print("Τιμή στο Β:", Β)
if Α+1==Β:
    print("Δεν υπάρχουν μεταξύ", Α, "και", Β, "ακέραιοι")
else:
    for Ι in range(Α+1, Β):
        Σούμα+=Ι
print("Άθροισμα:", Σούμα)
print("Υπολογισμός:", int(((Β-Α)/2+Α)*(Β-Α-1)))

Run python program here


Ευχαριστώ την κα Ισμήνη Κουρεμαδη (Φιλόλογο) για τη βοήθειά της στην επιμέλεια της παρούσας δημοσίευσης.


Γιώργος Καρράς

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

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

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