το ιστολόγιο ενός Κύριου των Υπολογιστών ;-)

Άδεια χρήσης περιεχομένου

Creative Commons Licence
Το περιεχόμενο του ιστολογίου παρέχεται με άδεια χρήσης Creative Commons Attribution-ShareAlike 4.0 International License.

Εμφάνιση αναρτήσεων με ετικέτα Προγραμματισμός. Εμφάνιση όλων των αναρτήσεων
Εμφάνιση αναρτήσεων με ετικέτα Προγραμματισμός. Εμφάνιση όλων των αναρτήσεων

Δευτέρα 28 Νοεμβρίου 2022

Κεφάλαιο 2.2: Δομή Επανάληψης (2.2.7.4)


Ασκήσεις

Φυλλάδιο Ασκήσεων "Φ3 - Δομή Επανάληψης Παραδείγματα και Ασκήσεις" ΕΔΩ

Λύσεις του Φ3 ΕΔΩ

Θεωρία

Σχολικό Βιβλίο

Ύλη στο σχολικό βιβλίο για την ενότητα 2.2.7.4 είναι διαθέσιμη εδώ: http://ebooks.edu.gr/ebooks/v/html/8547/2716/Pliroforiki_B-Lykeiou_html-empl/index2_2.html 

Παρουσίαση για τη Δομή Επανάληψης


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




Παρασκευή 11 Νοεμβρίου 2022

AppInventor: Ομαδική Εργασία


Η ομαδική εργασία είναι μια ευκαιρία 
  • για να χρησιμοποιήσετε όλες τις γνώσεις που αποκτήσατε καθ 'όλη τη διάρκεια του προηγούμενου διαστήματος
  • για να ψάξετε τις επιπλέον δυνατότητες του AppInventor 
  • για να δημιουργήσετε κάτι που είναι πρωτότυπο, που λύνει ένα πρόβλημα ή εξυπηρετεί έναν σκοπό.
Για την επιλογή του θέματος της ομαδικής σας εργασίας θα ήθελα αφού πάρετε ιδέες από τους παρακάτω συνδέσμους να αφήστε την φαντασία σας ελεύθερη και να διαλέξετε το πιο ενδιαφέρον και πρωτότυπο θέμα που μπορείτε να σκεφτετείτε :-) Όσο πιο "τρελή" η ιδέα σας τόσο το καλύτερο :-)

Για την εργασία σας θα πρέπει:
  1. να συμπληρώσετε το ερωτηματολόγιο
  2. να υποβάλλετε (στην eclass του μαθήματος μας) μία παρουσίαση που θα περιγράφει 
    • το θέμα, 
    • τη σχεδίαση, 
    • τη λειτουργικότητα και 
    • τον τρόπο που συνεργαστήκατε στο πλαίσιο της ομάδας σας
    • ένα παράδειγμα πατουσίασης θα βρείτε ΕΔΩ
  3. να υποβάλλετε (στην eclass του μαθήματος μας) την εφαρμογή που θα έχετε υλοποιήσει για AppInventor σε μορφή αρχείου .apk
Η εργασία σας μπορεί να είναι είτε ένα ατόφιο project που θα βρείτε στους παρακάτω συνδέσμους, είτε συνδυασμός ενός ή περισσοτέρων projects ή (ακόμη καλύτερα) κάτι εντελώς καινούριο και πρωτότυπο. ΠΡΟΣΟΧΗ: είναι απαραίτητο να αναφέρετε τις πηγές από τις οποίες εμπνευστήκατε για την εργασία σας.

Αν δεν σας εμπνέουν τα παραπάκω μπορείτε να κάνετε αναζήτηση στο διαδίκτυο για επιπλέον πηγές...

Ιδέες για σχετικά projects μπορείτε να βρείτε στους παρακάτω συνδέσμους:





Παρασκευή 4 Νοεμβρίου 2022

7 - AppInventor: Να σου πω μία ιστορία


Θα δημιουργήσουμε μία εφαρμογή που θα μας δίνει τη δυνατότητα να αφηγούμαστε ιστορίες με βάση τα εικονίδια που εμφανίσει.

Αναλυτικές οδηγίες για την εφαρμογή θα βρείτε ΕΔΩ

Η εφαρμογή θα αποτελείται από τρεις διαφορετικές οθόνες: Αρχική, Παιχνίδι, Οδηγίες.





 



8 - AppInventor: Σκύλος φύλακας


Η εφαρμογή "Σκύλος Φύλακας" δεν θα επιτρέπει σε κανέναν να πειράξει το κινητό μας :-)

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

Βασικές έννοιες που θα καλύψουμε
  • Καμβάς (canvas)
  • Κινούμενη εικόνα μέσα σε οθόνη (sprite)
  • Επαφή με οθόνη (touchdown και touchup)
  • Κίνηση σε καμβά με βάση συντεταγμένες x, y
Οι οδηγίες για την υλοποίηση της δραστηριότητας είναι διαθέσιμες ΕΔΩ

Τα απαιτούμενα αρχεία (εικόνες και ήχοι) είναι διαθέσιμα ΕΔΩ

Σχολιάζουμε τις εντολές
PointlnDirection x get(x) y get(y)

Η δραστηριότητα δημιουργήθηκε από τον Σύλλογο Εκπαιδευτικών Πληροφορικής - ΣΕΠ Χίου (https://www.sepchiou.gr/)

9 - AppInventor: Μαγνητισμός


Δημιουργία εφαρμογής Magnetism

Θα αναπτύξουμε μια εφαρμογή (σε δύο διαφορετικές εκδόσεις) που θα υλοποιεί το παιχνίδι Magnetism.

Επεξήγηση των απαιτούμενων εντολών θα βρείτε ΕΔΩ

Πρώτη έκδοση της εφαρμογής

Το παιχνίδι αποτελείται από μια σιδερένια μπάλα κόκκινου χρώματος, ένα κομμάτι ξύλου και ένα μαγνήτη. Ο χρήστης θα έχει τη δυνατότητα να σύρει (flung) το ξύλο και την μεταλλική μπάλα προς τον μαγνήτη. Όταν το κάνει αυτό τόσο το ξύλο όσο και η μπάλα θα πρέπει να κινούνται προς την κατεύθυνση που έχει καθορίσει ο χρήστης.

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

Αντίθετα όταν η μεταλλική μπάλα χτυπήσει πάνω στον μαγνήτη θα πρέπει να μένει κολλημένη πάνω του.

Οδηγίες για τη δημιουργία της πρώτης έκδοσης της εφαρμογής θα βρείτε ΕΔΩ ενώ τα αρχεία της εφαρμογής είναι διαθέσιμα ΕΔΩ.



Δεύτερη έκδοση της εφαρμογής

Προσθέστε κι ένα ακόμη πλαστικό αντικείμενο και επεξεργαστείτε τη συμπεριφορά του (ήχους και αναπήδηση). Η εφαρμογή σας μετά από αυτή τη προσθήκη θα μοιάζει κάπως έτσι...

Magnetism Version 2

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

Προσθέστε σχετικούς ήχους στην εφαρμογή σας και ειδικότερα
  • ήχους σύγκρουσης των αντικειμένων με τον μαγνήτη
  • ήχους σύγκρουσης των αντικειμένων μεταξύ τους
Ελεύθερους ήχους μπορείτε να βρείτε και να κατεβάσετε από τις παρακάτω ιστοσελίδες
Προσθέστε τη δυνατότητα καταγραφής σκορ. Οδηγίες για τη δυνατότητα αυτή θα βρείτε ΕΔΩ

Λεπτομέρειες σχετικά με την καταμέτρηση πόντων θα συζητηθούν στην τάξη.

Προσθήκη επιπλέον οθονών

Θα επεκτείνουμε την εφαρμογή "Μαγνητισμός" προσθέτοντας
  1. μία αρχική οθόνη υποδοχής στο παιχνίδι, η οποία θα περιλαμβάνει:
    • κουμπί "Παίξε το παιχνίδι" που θα οδηγεί στο παιχνίδι
    • κουμπί "Οδηγίες" που θα οδηγεί στην οθόνη οδηγιών
    • κουμπί "Σχετικά με τους δημιουργούς" που θα οδηγεί στην οθόνη που θα παρουσιάζει τους δημιουργούς του παιχνιδιού
  2. η οθόνη "Οδηγίες" θα περιλαμβάνει 
    • τίτλο "Πως παίζεται το παιχνίδι" 
    • το κείμενο των οδηγιών
    • κουμπί παίξε το παιχνίδι
  3. η οθόνη "Σχετικά με τους δημιουργούς" θα περιλαμβάνει
    • τίτλο "Δημιουργοί του παιχνιδιού"
    • τα ονόματα των δημιουργών

Η αρχική οθόνη της εφαρμογής

Μία ιδέα για τις άλλες δύο οθόνες είναι αυτή που βλέπουμε στη συνέχεια...

Οθόνη "Σχετικά με τους δημιουργούς"



Οθόνη "Πως παίζουμε;"

Η εφαρμογή βασίστηκε στις δραστηριότητες του Συλλόγου Εκπαιδευτικών Πληροφορικής Χίου. 



10 - AppInventor: Ζωγραφική με τα δάχτυλα


Εφαρμογή "Ζωγραφική με τα δάχτυλα"

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

Το περιβάλλον της εφαρμογής "Ζωγραφική με τα δάχτυλα"
Βασικές έννοιες
  • Υποπρόγραμμα – διαδικασία (procedure).
  • Λήψη φωτογραφιών με την κάμερα της συσκευής.
  • Σχεδίαση κύκλων και γραμμών σε καμβά.
  • Αποθήκευση σχεδίου στη συσκευή.
Η πρώτη έκδοση της εφαρμογής είναι έτοιμη μετά την ολοκλήρωση του βήματα 4. Καθένα από τα επόμενα βήματα προσθέτει και ένα επιπλέον χαρακτηριστικό στην εφαρμογή, οπότε προτείνω να ελέγχετε την λειτουργία της εφαρμογής μετά την ολοκλήρωση του κάθε βήματος.

Βήμα 1: Δημιουργία project και ρυθμίσεις κεντρικής οθόνης

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

Βήμα 2: Μεταφόρτωση αρχείων πολυμέσων

Τα αρχεία που προσθέσουμε στο project μας είναι τα αρχεία εικόνας που θα χρησιμοποιεί η εφαρμογή μας και μπορείτε να τα βρείτε στον κοινόχρηστο φάκελο του εργαστηρίου μας.

Βήμα 3: Σχέδια επάνω στον καμβά

Στο βήμα αυτό θα δημιουργήσουμε σχέδια επάνω στον καμβά της εφαρμογής

Βήμα 4: Καθαρισμός του καμβά

Στο βήμα αυτό θα καθαρίσουμε τον καμβά από τυχών σχέδια

Βήμα 5: Μια μικρή παλέτα με χρώματα

Στο βήμα αυτό θα εισάγουμε την παλέτα των χρωμάτων

Βήμα 6: Αλλάζοντας το πάχος της γραμμής

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

Βήμα 7: Σχέδια πάνω στις φωτογραφίες

Εντολές για την σχεδίαση πάνω στις φωτογραφίες που έχουμε τραβήξει

Βήμα 8: Καθαρισμός του καμβά (συνέχεια)

Καθαρισμός της φωτογραφίας που εισάγαμε στην εφαρμογή μας

Βήμα 9: Αποθήκευση των σχεδίων μας

Αποθήκευση του σχεδίου και της φωτογραφίας μας
Συνεχίστε την εφαρμογή ακολουθώντας προσεκτικά της αναλυτικές οδηγίες που θα βρείτε ΕΔΩ
Οι εικόνες της εφαρμογής είναι διαθέσιμες ΕΔΩ

11 - AppInventor: Πιάσε τη σημαία



Θα υλοποιήσουμε ένα παιχνίδι στο οποίο ο παίκτης θα χειρίζεται μια μπάλα με τη βοήθεια του αισθητήρα προσανατολισμού (Orientation Sensor).

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

Η εφαρμογή Catch the ball


Ακολουθήστε τις οδηγίες που θα βρείτε ΕΔΩ μέχρι και το βήμα 7.

Τα αρχεία της εφαρμογής είναι διαθέσιμα ΕΔΩ

Στη συνέχεια, αντί του βήματος 8 προσθέστε την παρακάτω εντολή:

Η εφαρμογή έχει σχεδιαστεί από τον Σύλλογο Εκπαιδευτικών Πληροφορικής Χίου

12 - Appinventor: Κουραμπιεδο-μελονομακαρονο μετρητής :-)


Θα δημιουργήσουμε μία εφαρμογή που θα μετράει και θα καταγράφει τον αριθμό των μελομακάρονων και τον κουραμπιέδων που έχουμε φάει.

Η εφαρμογή θα περιλαμβάνει

  • δύο κουμπιά που όταν πατηθούν αυξάνουν τον αριθμό των μελομακάρονων ή των κουραμπιέδων κατά ένα
  • δύο πλαίσια κειμένου που εμφανίζουν τον τρέχων αριθμό μελομακάρονων και κουραμπιέδων που έχουμε φάει 

Η εφαρμογή απεικονίζεται στην παρακάτω εικόνα. 

Αναλυτικά οι οδηγίες για την ερφαρμογή είναι διαθίσιμες ΕΔΩ


13 - AppInventor: Εφαρμογή Panic Button



Θα αναπτύξουμε μια εφαρμογή που θα λειτουργεί σαν κουμπί πανικού. Η εφαρμογή θα αποτελείται από δύο κουμπιά.

Το πρώτο θα είναι το κουμπί πανικού. Όταν ο χρήστης αγγίζει το κουμπί πανικού θα ξεκινάει ο ήχος μιας σειρήνας, ο οποίος θα αναπαράγεται ξανά και ξανά. Ταυτόχρονα, η συσκευή θα στέλνει ένα μήνυμα SMS σε έναν προεπιλεγμένο αριθμό για να ζητάει βοήθεια. Το κουμπί πανικού θα απενεργοποιείται προσωρινά (ιδιότητα enabled), ώστε να είναι ορατό, αλλά ο χρήστης να μην μπορεί να το ξαναπατήσει.

Το δεύτερο κουμπί θα τερματίζει τον ήχο της σειρήνας και θα ενεργοποιεί εκ νέου το κουμπί πανικού.

Αναλυτικά οι οδηγίες της εφαρμογής είναι διαθέσιμες ΕΔΩ

Τα αρχεία εικόνων και ήχου που θα χρειαστείτε για την εφαρμογή είναι διαθέσιμα ΕΔΩ

Η εφαρμογή Panic Button

Πέμπτη 3 Νοεμβρίου 2022

Κεφάλαιο 2.2: Δομή Επιλογής (2.2.7.3)


Ασκήσεις

Φυλλάδιο Ασκήσεων "Φ2 - Δομή Επανάληψης Παραδείγματα και Ασκήσεις" ΕΔΩ

Οι λύσεις του Φυλλαδίου ΕΔΩ

Θεωρία

Σχολικό Βιβλίο

Ύλη στο σχολικό βιβλίο για την ενότητα 2.2.7.3 είναι διαθέσιμη εδώ: http://ebooks.edu.gr/ebooks/v/html/8547/2716/Pliroforiki_B-Lykeiou_html-empl/index2_2.html 

Παρουσίαση για τη Δομή Επιλογής





Δευτέρα 17 Οκτωβρίου 2022

6 - AppInventor: Ζάρια


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


Οι βασικές έννοιες που θα μελετήσουμε είναι:
  • Γεγονότα (events)
  • Τυχαίοι (random) αριθμοί
  • Επιταχυνσιόμετρο (accelerometer)
Οι οδηγίες για την υλοποίηση της δραστηριότητας είναι διαθέσιμες ΕΔΩ

Τα απαιτούμενα αρχεία (εικόνες και ήχοι) είναι διαθέσιμα ΕΔΩ

Υπάρχουν πολλά παιχνίδια για παιδιά που παίζονται με ζάρια. Παράδειγμα το Knock Out...
  1. Κάθε παίχτης διαλέξει ένα “knock out” νούμερο (6, 7, 8, or 9). Περισσότεροι του ενός παίχτη μπορούν να διαλέξουν το ίδιο kkock out νούμερο.
  2. Οι παίχτες ρίχνουν τα ζάρια με τη σειρά και αθροίζουν το αποτέλεσμα.
  3. Αν ένας παίχτης ρίξει 6, 7, 8 ή 9 τότε αποβάλλεται (knocked out) από το παιχνίδι για τον επόμενη γύρο. 
Επέκταση της εφαρμογής είναι το παιχνίδι ΔΚΑ η LCR στα Αγγλικά. Το παιχνίδι αποτελείται από τρία ζάρια επισημασμένα με L, C, ή R αντί των παραδοσιακών αριθμών. Οι παίχτες ξεκινούν με 10 μάρκες ο καθένας και τα ζάρια μεταφέρονται μεταξύ των παικτών. 

Αν ο παίχτης που ρίξει τα ζάρια τύχει ένα L τότε θα πρέπει να δώσει μία μάρκα στον παίκτη στα αριστερά του, ένα R θα πρέπει να δώσει μία μάρκα στον παίκτη στα δεξιά του, ενώ αν τύχει C θα πρέπει να βάλει μία μάρκα στο κέντρο. Νικάει ο τελευταίος παίχτης που έχει στη διάθεση του μάρκες. 

Επέκταση της εφαρμογής μπορεί να είναι παιχνίδια σας το Bogle Junior ή το Pizza Part ή το Zombie Dice.

Η δραστηριότητα δημιουργήθηκε από τον Σύλλογο Εκπαιδευτικών Πληροφορικής - ΣΕΠ Χίου (https://www.sepchiou.gr/)

5 - AppInventor: Ζωάκια με ήχους


Θα δημιουργήσουμε μία εφαρμογή που θα απεικονίζει ζωάκια και αναπαράγει τον αντίστοιχο ήχο όταν ο χρήστης κάνει κλικ πάνω σε κάποιο ζωάκι.

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

Αναλυτικές οδηγίες για την εφαρμογή θα βρείτε ΕΔΩ

Δωρεάν ήχους μπορείτε να βρείτε ΕΔΩ

Οδηγίες για το πώς μπορείτε να κόψετε-ράψετε ήχους με το Audacity ΕΔΩ

    

Τρίτη 27 Σεπτεμβρίου 2022

Κεφάλαιο 2.2: Αλγόριθμος, Δεδομένα, Έξοδος, Είσοδος, Εκχώρηση τιμής, Δομή ακολουθίας


Θα μελετήσουμε τις παρακάτω ενότητες:

2.2.1 Ορισμός αλγορίθμου
2.2.5 Αναπαράσταση αλγορίθμου
2.2.6 Δεδομένα και αναπαράστασή τους
2.2.7 Εντολές και δομές αλγορίθμου
2.2.7.1 Εκχώρηση, Είσοδος και Έξοδος τιμών
2.2.7.2 Δομή ακολουθίας
Η θεωρία του σχολικού βιβλίου είναι διαθέσιμη ΕΔΩ

Το Φυλλάδιο Ασκήσεων (Φ1) για αυτή την ενότητα είναι διαθέσιμο ΕΔΩ
Οι λύσεις του Φ1 θα είναι διαθέσιμες ΕΔΩ
Το Φύλλο Εργασίας (ΦΕ1) που δουλέψαμε μέσα στην τάξη θα είναι διαθέσιμο ΕΔΩ

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

Ο αλγόριθμος τους έξυπνου χαρτιού είναι ΕΔΩ









Πέμπτη 10 Φεβρουαρίου 2022

Go To Statement Considered Harmful by Edsger W. Dijkstra


Μελετώντας υλικό για τη διδακτική του προγραμματισμού "έπεσα" πάνω στο ιστορικό κείμενο/γράμμα του Edsger W. Dijkstra με τίτλο "Go To Statement Considered Harmful" και συνειδητοποίησα ότι

  • από το 1987 που πρωτό-ξεκίνησα πάνω σε έναν Spectrum +2 να παιδεύομαι με την αλγοριθμική έχουν περάσει πραγματικά πολλά χρόνια
  • έχει κυλήσει πραγματικά πολύ νερό στον μύλο της διδακτικής του προγραμματισμού 
  • θα ήταν χρήσιμο να κρατήσω κάπου κάποια ιστορικά κείμενα/αναφορές/εργασίες

Ξεκινάω από το κείμενο του Dijkstra λοιπόν το οποίο αφορούσε στην γλώσσα προγραμματισμού Basic η οποία ήταν (και παραμένει ;-)) μια γλώσσα πολύ ευέλικτη. Αυτό ήταν το βασικό της προτέρημα, αλλά και το μειονέκτημά της: η υπερβολική «ελευθερία» που έδινε στον προγραμματιστή, οδήγησε στα περίφημα προγράμματα «σπαγγέτι», στα οποία ήταν πολύ δύσκολο να δει κανείς τη δομή.

Αυτό το είδος προγραμματισμού οδήγησε τον E. W. Dijsktra στο να γράψει το άρθρο του “Goto considered harmful” – στην πραγματικότητα μια επιστολή μιας σελίδας, που άλλαξέ όμως την πορεία του προγραμματισμού.

Ακολουθεί το κείμενο (το οποίο μπορείτε να το βρείτε και εδώ: http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html

Go To Statement Considered Harmful
Edsger W. Dijkstra


Reprinted from Communications of the ACM, Vol. 11, No. 3, March 1968, pp. 147-148. Copyright © 1968, Association for Computing Machinery, Inc.

This is a digitized copy derived from an ACM copyrighted work. It is not guaranteed to be an accurate copy of the author's original work.


Key Words and Phrases:
go to statement, jump instruction, branch instruction, conditional clause, alternative clause, repetitive clause, program intelligibility, program sequencing
CR Categories:
4.22, 6.23, 5.24

Editor:

For a number of years I have been familiar with the observation that the quality of programmers is a decreasing function of the density of go to statements in the programs they produce. More recently I discovered why the use of the go to statement has such disastrous effects, and I became convinced that the go to statement should be abolished from all "higher level" programming languages (i.e. everything except, perhaps, plain machine code). At that time I did not attach too much importance to this discovery; I now submit my considerations for publication because in very recent discussions in which the subject turned up, I have been urged to do so.

My first remark is that, although the programmer's activity ends when he has constructed a correct program, the process taking place under control of his program is the true subject matter of his activity, for it is this process that has to accomplish the desired effect; it is this process that in its dynamic behavior has to satisfy the desired specifications. Yet, once the program has been made, the "making' of the corresponding process is delegated to the machine.

My second remark is that our intellectual powers are rather geared to master static relations and that our powers to visualize processes evolving in time are relatively poorly developed. For that reason we should do (as wise programmers aware of our limitations) our utmost to shorten the conceptual gap between the static program and the dynamic process, to make the correspondence between the program (spread out in text space) and the process (spread out in time) as trivial as possible.

Let us now consider how we can characterize the progress of a process. (You may think about this question in a very concrete manner: suppose that a process, considered as a time succession of actions, is stopped after an arbitrary action, what data do we have to fix in order that we can redo the process until the very same point?) If the program text is a pure concatenation of, say, assignment statements (for the purpose of this discussion regarded as the descriptions of single actions) it is sufficient to point in the program text to a point between two successive action descriptions. (In the absence of go to statements I can permit myself the syntactic ambiguity in the last three words of the previous sentence: if we parse them as "successive (action descriptions)" we mean successive in text space; if we parse as "(successive action) descriptions" we mean successive in time.) Let us call such a pointer to a suitable place in the text a "textual index."

When we include conditional clauses (if B then A), alternative clauses (if B then Aelse A2), choice clauses as introduced by C. A. R. Hoare (case[i] of (A1, A2,···, An)),or conditional expressions as introduced by J. McCarthy (B1 -> E1, B2 -> E2, ···, Bn -> En), the fact remains that the progress of the process remains characterized by a single textual index.

As soon as we include in our language procedures we must admit that a single textual index is no longer sufficient. In the case that a textual index points to the interior of a procedure body the dynamic progress is only characterized when we also give to which call of the procedure we refer. With the inclusion of procedures we can characterize the progress of the process via a sequence of textual indices, the length of this sequence being equal to the dynamic depth of procedure calling.

Let us now consider repetition clauses (like, while B repeat A or repeat A until B). Logically speaking, such clauses are now superfluous, because we can express repetition with the aid of recursive procedures. For reasons of realism I don't wish to exclude them: on the one hand, repetition clauses can be implemented quite comfortably with present day finite equipment; on the other hand, the reasoning pattern known as "induction" makes us well equipped to retain our intellectual grasp on the processes generated by repetition clauses. With the inclusion of the repetition clauses textual indices are no longer sufficient to describe the dynamic progress of the process. With each entry into a repetition clause, however, we can associate a so-called "dynamic index," inexorably counting the ordinal number of the corresponding current repetition. As repetition clauses (just as procedure calls) may be applied nestedly, we find that now the progress of the process can always be uniquely characterized by a (mixed) sequence of textual and/or dynamic indices.

The main point is that the values of these indices are outside programmer's control; they are generated (either by the write-up of his program or by the dynamic evolution of the process) whether he wishes or not. They provide independent coordinates in which to describe the progress of the process.

Why do we need such independent coordinates? The reason is - and this seems to be inherent to sequential processes - that we can interpret the value of a variable only with respect to the progress of the process. If we wish to count the number, n say, of people in an initially empty room, we can achieve this by increasing n by one whenever we see someone entering the room. In the in-between moment that we have observed someone entering the room but have not yet performed the subsequent increase of n, its value equals the number of people in the room minus one!

The unbridled use of the go to statement has an immediate consequence that it becomes terribly hard to find a meaningful set of coordinates in which to describe the process progress. Usually, people take into account as well the values of some well chosen variables, but this is out of the question because it is relative to the progress that the meaning of these values is to be understood! With the go to statement one can, of course, still describe the progress uniquely by a counter counting the number of actions performed since program start (viz. a kind of normalized clock). The difficulty is that such a coordinate, although unique, is utterly unhelpful. In such a coordinate system it becomes an extremely complicated affair to define all those points of progress where, say, n equals the number of persons in the room minus one!

The go to statement as it stands is just too primitive; it is too much an invitation to make a mess of one's program. One can regard and appreciate the clauses considered as bridling its use. I do not claim that the clauses mentioned are exhaustive in the sense that they will satisfy all needs, but whatever clauses are suggested (e.g. abortion clauses) they should satisfy the requirement that a programmer independent coordinate system can be maintained to describe the process in a helpful and manageable way.

It is hard to end this with a fair acknowledgment. Am I to judge by whom my thinking has been influenced? It is fairly obvious that I am not uninfluenced by Peter Landin and Christopher Strachey. Finally I should like to record (as I remember it quite distinctly) how Heinz Zemanek at the pre-ALGOL meeting in early 1959 in Copenhagen quite explicitly expressed his doubts whether the go to statement should be treated on equal syntactic footing with the assignment statement. To a modest extent I blame myself for not having then drawn the consequences of his remark

The remark about the undesirability of the go to statement is far from new. I remember having read the explicit recommendation to restrict the use of the go to statement to alarm exits, but I have not been able to trace it; presumably, it has been made by C. A. R. Hoare. In [1, Sec. 3.2.1.] Wirth and Hoare together make a remark in the same direction in motivating the case construction: "Like the conditional, it mirrors the dynamic structure of a program more clearly than go to statements and switches, and it eliminates the need for introducing a large number of labels in the program."

In [2] Guiseppe Jacopini seems to have proved the (logical) superfluousness of the go to statement. The exercise to translate an arbitrary flow diagram more or less mechanically into a jump-less one, however, is not to be recommended. Then the resulting flow diagram cannot be expected to be more transparent than the original one.

References:

  1. Wirth, Niklaus, and Hoare C. A. R. A contribution to the development of ALGOL. Comm. ACM 9 (June 1966), 413-432.
  2. BÖhm, Corrado, and Jacopini Guiseppe. Flow diagrams, Turing machines and languages with only two formation rules. Comm. ACM 9 (May 1966), 366-371.

Edsger W. Dijkstra
Technological University
Eindhoven, The Netherlands



Τρίτη 16 Νοεμβρίου 2021

34ος Πανελλήνιος Διαγωνισμός Πληροφορικής


Ενδεικτικός Προγραμματισμός

Δευτέρα, 17 Ιανουαρίου 2022: Λήξη υποβολών Α Φάσης

Σάββατο, 15 Ιανουαρίου 2022: Πέρας εγγραφών 34ου ΠΔΠ

Δευτέρα, 8 Νοεμβρίου 2021: Ανοιγμα συστήματος υποβολών HelleniCO

Κυριακή, 10 Οκτωβρίου 2021: Εναρξη εγγραφών 34ου Πανελλήνιου μαθητικού διαγωνισμού Πληροφορικής 

Οι οδηγίες είνα διαθέσιμες ΕΔΩ

Το θέμα της πρώτης φάσης είναι διαθέσιμο ΕΔΩ



Τετάρτη 10 Νοεμβρίου 2021

Τρίτη 9 Νοεμβρίου 2021

5α - microbit: Μετρητής Βημάτων (Μεταβλητές Ι)


Το φύλλο εργασίας "Μετρητής Βημάτων" είναι διαθέσιμο ΕΔΩ

Ακολουθήστε βήμα-βήμα το αρχικό tutorial και στη συνέχεια αντιμετωπίστε τις προκλήσεις



Τρίτη 28 Σεπτεμβρίου 2021

0 - microbit: Τι είναι


Το BBC micro:bit είναι μια υπολογιστική συσκευή τσέπης :-) 

Το μέγεθος του είναι μικρότερο απο το μέγεθος μιας πιστωτικής κάρτας, μόλις 4 x 5 εκατοστά και μοιάζει έτσι...

Παρά το μικρό του μέγεθος το microbit περιέχει 

  • επεξεργαστή, 
  • κύρια μνήμη, 
  • οθόνη 25 led, 
  • δύο κουμπιά ελέγχου, 
  • επιταχυνσιόμετρο, 
  • μετρητή θερμοκρασίας, 
  • αισθητήρα φωτός, 
  • πιξύδα,
  • πομπό ραδιοσημάτων, pins 
  • διασύνδεσης με άλλες συσκευές, 
  • δυνατότητα σύνδεσης με υπολογιστή μέσω θύρας USB
  • ηχείο και μικρόφωνο (έκδοση 2.0)

Το micro:bit υποστηρίζεται από μία πολύ ενεργή/δραστήρια κοινότητα η οποία έχει δημιουργήσει και συνεχίζει να εξελίσσει εξαιρετικής ποιότητας εκπαιδευτικό υλικό. Περισσότερα στο https://microbit.org/ 

Στο σχήμα που ακολουθεί μπορείτε να δείτε αναλυτικά το υλικό του BBC micto:bit



Τρίτη 21 Σεπτεμβρίου 2021

Πληροφορική Β Γυμνασίου: Εισαγωγή στην Έννοια του Αλγορίθμου και στον Προγραμματισμό


Εισαγωγή στην Έννοια του Αλγορίθμου και στον Προγραμματισμό

Μελετήστε από το σχολικό βιβλίο την Ενότητα Εισαγωγή στην Έννοια του Αλγορίθμου και στον Προγραμματισμό (σελ. 176)

Στο κεφάλαιο αυτό θα απαντήσουμε στα εξής ερωτήματα:
  • Τι είναι πρόβλημα;
  • Πώς μπορούμε να περιγράψουμε με σαφήνεια τη λύση ενός προβλήματος;
  • Σε ποια γλώσσα «καταλαβαίνει» ο υπολογιστής τις εντολές που του δίνουμε;




Τρίτη 18 Μαΐου 2021

Προγραμματισμός με το BBC micro:bit - Όλα σε ένα


Το BBC micro:bit

Το BBC micro:bit είναι μια υπολογιστική συσκευή τσέπης :-) Το μέγεθος του είναι μικρότερο απο το μέγεθος μιας πιστωτικής κάρτας, μόλις 4 x 5 εκατοστά. Παρά το μικρό του μέγεθος το microbit περιέχει επεξεργαστή, κύρια μνήμη, οθόνη 25 led, δύο κουμπιά ελέγχου, επιταχυνσιόμετρο, μετρητή θερμοκρασίας, αισθητήρα φωτός, πιξύδα, ηχείο, μικρόφωνο, πομπό ραδιοσημάτων, pins διασύνδεσης με άλλες συσκευές, δυνατότητα σύνδεσης με υπολογιστή μέσω θύρας USB.

Το micro:bit υποστηρίζεται από μία πολύ ενεργή/δραστήρια κοινότητα η οποία έχει δημιουργήσει και συνεχίζει να εξελίσσει εξαιρετικής ποιότητας εκπαιδευτικό υλικό. 

Περισσότερα στο https://microbit.org/ 

Στο πλαίσιο του ομίλου υπολογιστικής σκέψης του ΠΣΠΘ καθώς και του μαθήματος Πληροφορικής της Β γυμανσίου δημιουργήθηκε το παρακάτω εκπαιδευτικό υλικό για τη διδασκαλία βασικών αρχών/εννοιών προγραμματισμού.

Το περιβάλλον προγραμματισμού του microbit είναι διαθέσιμο ΕΔΩ

Δραστηριότητες και Προκλήσεις Προγραμματισμού με τον μικρο-ελεγκτή BBC micro:bit

Microbit και Python ΕΔΩ

Tα Leds τους BBC micro:bit διαθέσιμο ΕΔΩ

Τα κουμπιά του BBC micro:bit διαθέσιμο ΕΔΩ

Το επιταχυνσιόμετρου του BBC micro:bit διαθέσιμο  ΕΔΩ

Ο αισθητήρας φωτός του BBC micro:bit διαθέσιμος ΕΔΩ

Αισθητήρας μαγνητικού προσανατολισμού διαθέσιμος ΕΔΩ

Αισθητήρας θερμοκρασίας διαθέσιμος ΕΔΏ

Μεταβλητές διαθέσιμο ΕΔΏ και ΕΔΩ

Παιχνίδι Πέτρα-Ψαλίδι-Χαρτί διαθέσιμο ΕΔΩ

Παιχνίδι Κορώνα-Γράμματα διαθέσιμο ΕΔΩ

Εφαρμογή Ήχοι, διαθέσιμη ΕΔΩ

Επικοινωνία με ραδιο-κύματα, διαθέσημη ΕΔΩ


Στο σχήμα που ακολουθεί μπορείτε να δείτε αναλυτικά το υλικό του BBC micto:bit