Αποστολέας Θέμα: Αυτόματη αρχικοποίηση μεταβλητών  (Αναγνώστηκε 2381 φορές)

gthal

  • Ομάδα διαγωνισμάτων 2017
  • *
  • Μηνύματα: 891
Αυτόματη αρχικοποίηση μεταβλητών
« στις: 20 Φεβ 2010, 11:30:05 πμ »
Ποιο το παιδαγωγικό ώφελος της ύπαρξης απροσδιόριστων τιμών πριν την πρώτη ανάθεση;
Μήπως αυτό συμβαίνει επειδή έτσι δούλευε η Pascal και η C;
Μήπως θα μπορούσαμε να έχουμε μία προκαθορισμένη τιμή ανά τύπο δεδομένων;
Ενδιαφέρον ...
Ας το ανοίξουμε !
Φιλικά,
Γιώργος Θαλασσινός

Vangelis

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 786
  • Για ακούτε και κανένα μεγαλύτερο!!!
Απ: Αυτόματη αρχικοποίηση μεταβλητών
« Απάντηση #1 στις: 20 Φεβ 2010, 01:51:48 μμ »
Στον προγραμματισμό ο πίνακας είναι γνωστό ότι δεσμεύει ένα τμήμα της κύριας μνήμης.  Το πόσο ακριβώς είναι αυτό εξαρτάται από τον τύπο των δεδομένων και γι'αυτό το λόγο (οικονομία χώρου) υπάρχει η δήλωση των μεταβλητών.
Τώρα όταν διαγράφονται περιεχόμενα από την κύρια μνήμη στην πράξη (για λόγους απόδοσης) ο ΗΥ στην πράξη  δεν "διαγράφει" τα περιεχόμενα  αλλά απλά σημαδεύει την περιοχή σαν ελεύθερη.  Τώρα κατά την δημιουργία ενός  πίνακα υπάρχει περίπτωση να "καθαρίζονται" τα υπάρχοντα περιεχόμενα ή να παραμένουν όπως έχουν. Για το λόγο αυτό είναι "απαραίτητη" η αρχικοποίηση των τιμών που περιέχει ένας πίνακας.   
Στο θέμα της απροσδιόριστης τιμής συμφωνώ με τον Παναγιώτη "Κατά τη γνώμη μου απροσδιόριστη τιμή για τους μαθητές απλά σημαίνει πως δεν έχουμε δικαίωμα να την επικαλεστούμε (για πράξεις, εμφάνιση ή κάτι άλλο).
Και δεν έχουμε δικαίωμα γιατί η συγκεκριμένη μεταβλητή δεν έχει λάβει τιμή. Όλα τα άλλα είναι περιττά..."

Παναγιώτης Τσιωτάκης

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 3190
  • I love you 3000
    • Panagiotis Tsiotakis
Απ: Αυτόματη αρχικοποίηση μεταβλητών
« Απάντηση #2 στις: 21 Φεβ 2010, 12:00:53 πμ »
Συμφωνώ  με αυτό, αλλά μήπως έρχεται σε αντίθεση με το γεγονός ότι όλα πρέπει να είναι σαφώς καθορισμένα σε έναν αλγόριθμο;

Μια μεταβλητή, πριν χρησιμοποιηθεί για πρώτη φορά (αρχικοποιηθεί) δεν έχει καθορισμένη τιμή!

sstergou

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 983
  • Program or be Programmed
    • pseudoglossa.gr
Απ: Αυτόματη αρχικοποίηση μεταβλητών
« Απάντηση #3 στις: 21 Φεβ 2010, 12:21:57 πμ »
Η μη αρχικοποίηση μιας μεταβλητής από τον προγραμματιστή είναι συχνή πηγή λαθών.
Ακόμη και αν ο μεταγλωττιστής την αρχικοποιεί, δίνει μια αυθαίρετη τιμή που δεν είναι πάντα αυτό που θέλουμε. Έτσι καταλήγουμε σε λάθη χωρίς ο υπολογιστής να αναφέρει κάτι.

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

Είναι κάτι που έχει να κάνει με την υλοποίηση μιας γλώσσας και κατά τη γνώμη μου πρέπει να απομακρυνθούμε από τέτοια χαρακτηριστικά αφού δεν μας προσφέρουν τρόπους τρόπους αντιμετώπισης περισσότερων προβλημάτων ούτε δίνουν κάτι παραπάνω σε εκφραστικότητα αλλά είναι ένας τρόπος να "συντομεύσουμε" κάποιες διαδικασίες όχι όμως πάντα με τη γνώση μας (αφού μπορεί απλά να έχουμε ξεχάσει).
Στάθης Στέργου - sstergouATgmailDOTcom - http://www.pseudoglossa.gr

ntzios kostas

  • Καθηγητής Πληροφορικής
  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 599
    • Ανάπτυξη Εφαρμογών
Απ: Αυτόματη αρχικοποίηση μεταβλητών
« Απάντηση #4 στις: 21 Φεβ 2010, 12:53:29 μμ »
Γι' αυτό πρέπει να διδάσκεται το 2ο κεφάλαιο μαζί με το 7ο. Μπορείς να εξηγήσεις τι είναι μεταβλητή τι είναι απροσδιόριστη τιμή και που αλλά και πώς αποθηκεύεται το περιεχόμενό της. Τέλος να εξηγήσεις καλύτερα τι σημαίνει ψευδογλώσσα και ποια η διαφορά της από το πρόγραμμα (δεν μιλάω βέβαια για συντακτικές διαφορές). 
Το μάθημα Ανάπτυξη Εφαρμογών δεν έχει σαν στόχο την εκμάθηση κάποιου συγκεκριμένου προγραμματιστικού περιβάλλοντος ούτε την καλλιέργεια προγραμματιστικών δεξιοτήτων από τη μεριά των μαθητών. Δεν αποσκοπεί στη λεπτομερειακή εξέταση της δομής, του ρεπερτορίου και των συντακτικων κανόνων κάποιας γλώσσας...

Νίκος Αδαμόπουλος

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2780
  • Πύργος Ηλείας
    • ΚΕΠΛΗΝΕΤ Ηλείας
Απ: Αυτόματη αρχικοποίηση μεταβλητών
« Απάντηση #5 στις: 21 Φεβ 2010, 03:39:39 μμ »
Κι εγώ πιστεύω πως δεν είναι καλύτερη από παιδαγωγική άποψη η αυτόματη αρχικοποίηση των μεταβλητών. Κατ' αρχάς αυτό σχετίζεται περισσότερο με το στάδιο του προγραμματισμού και όχι αυτό της αλγοριθμικής σχεδίασης. Κι αφού προκρίνουμε την αλγοριθμική σκέψη σε σχέση με τις προγραμματιστικές τεχνικές, τότε οι μεταβλητές θα πρέπει να θεωρούνται στην αρχή απροσδιόριστες ώστε αυτός που φτιάχνει τον αλγόριθμο να φροντίσει για την κατάλληλη αρχικοποίησή τους.

1ο παράδειγμα:

Για το άθροισμα και γινόμενο 10 αριθμών που θα διαβαστούν έχουμε τον αλγόριθμο:

Κώδικας: [Επιλογή]
Αλγόριθμος άθροισμα_γινόμενο
Αθρ<-0
Γιν<-1
Για ι από 1 μέχρι 10
  Διάβασε α
  Αθρ <- Αθρ+α
  Γιν<-Γιν*α
Τέλος_επανάληψης
Αποτελέσματα // Αθρ, Γιν //
Τέλος άθροισμα_γινόμενο

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

Κώδικας: [Επιλογή]
Αλγόριθμος άθροισμα_γινόμενο
Γιν<-1
Για ι από 1 μέχρι 10
  Διάβασε α
  Αθρ <- Αθρ+α
  Γιν<-Γιν*α
Τέλος_επανάληψης
Αποτελέσματα // Αθρ, Γιν //
Τέλος άθροισμα_γινόμενο

Ποιο όμως είναι το όφελος από παιδαγωγική άποψη; Έχουμε και αδικία:  το Αθρ ευνοείται αλλά το Γιν πληρώνει κανονικά το μάρμαρο!

*******************************

2ο παράδειγμα:

Για να διαβαστούν 20 αριθμοί και να βρούμε το μέσο όρο των 10 αρχικών από αυτούς και το μέσο όρο όλων μαζί των αριθμών, έχουμε:

Κώδικας: [Επιλογή]
Αλγόριθμος Μέσοι_όροι

Αθρ<-0
Για ι από 1 μέχρι 10
  Διάβασε α
  Αθρ <- Αθρ + α
Τέλος_επανάληψης
ΜΟ1 <- Αθρ /10

Για ι από 1 μέχρι 10
  Διάβασε α
  Αθρ <- Αθρ + α
Τέλος_επανάληψης
ΜΟ2 <- Αθρ /20

Αποτελέσματα // ΜΟ1, ΜΟ2 //
Τέλος Μέσοι_όροι

Το παρακάτω θα ήταν λάθος και θα έδειχνε κάποια παρανόηση του μαθητή:

Κώδικας: [Επιλογή]
Αλγόριθμος Μέσοι_όροι

Αθρ<-0
Για ι από 1 μέχρι 10
  Διάβασε α
  Αθρ <- Αθρ + α
Τέλος_επανάληψης
ΜΟ1 <- Αθρ /10

Αθρ<-0
Για ι από 1 μέχρι 10
  Διάβασε α
  Αθρ <- Αθρ + α
Τέλος_επανάληψης
ΜΟ2 <- Αθρ /20

Αποτελέσματα // ΜΟ1, ΜΟ2 //
Τέλος Μέσοι_όροι

... εκτός κι αν γραφόταν έτσι:

Κώδικας: [Επιλογή]
Αλγόριθμος Μέσοι_όροι

Αθρ1<-0
Για ι από 1 μέχρι 10
  Διάβασε α
  Αθρ1 <- Αθρ1 + α
Τέλος_επανάληψης
ΜΟ1 <- Αθρ1 /10

Αθρ2<-0
Για ι από 1 μέχρι 10
  Διάβασε α
  Αθρ2 <- Αθρ2 + α
Τέλος_επανάληψης
ΜΟ2 <- (Αθρ1+Αθρ2) /20

Αποτελέσματα // ΜΟ1, ΜΟ2 //
Τέλος Μέσοι_όροι


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

Κώδικας: [Επιλογή]
Αλγόριθμος Μέσοι_όροι

Για ι από 1 μέχρι 10
  Διάβασε α
  Αθρ <- Αθρ + α
Τέλος_επανάληψης
ΜΟ1 <- Αθρ /10

Για ι από 1 μέχρι 10
  Διάβασε α
  Αθρ <- Αθρ + α
Τέλος_επανάληψης
ΜΟ2 <- Αθρ /20

Αποτελέσματα // ΜΟ1, ΜΟ2 //
Τέλος Μέσοι_όροι

... ή και έτσι:

Κώδικας: [Επιλογή]
Αλγόριθμος Μέσοι_όροι

Για ι από 1 μέχρι 10
  Διάβασε α
  Αθρ1 <- Αθρ1 + α
Τέλος_επανάληψης
ΜΟ1 <- Αθρ1 /10

Για ι από 1 μέχρι 10
  Διάβασε α
  Αθρ2 <- Αθρ2 + α
Τέλος_επανάληψης
ΜΟ2 <- (Αθρ1+Αθρ2) /20

Αποτελέσματα // ΜΟ1, ΜΟ2 //
Τέλος Μέσοι_όροι

Ποιο όμως είναι το όφελος από παιδαγωγική άποψη;

ntzios kostas

  • Καθηγητής Πληροφορικής
  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 599
    • Ανάπτυξη Εφαρμογών
Απ: Αυτόματη αρχικοποίηση μεταβλητών
« Απάντηση #6 στις: 21 Φεβ 2010, 09:15:44 μμ »
Και εντάξει με αριθμητικές μεταβλητές τι γίνεται με τις αλφαριθμητικές και με τις λογικές;
Γενικότερα σε ένα πρόγραμμα θα το δεχόμουνα να μην υπάρχει αρχικοποίηση. Ο προγραμνατιστής ίσως να εκμεταλλεύται κάποιες ιδιαιτερότητας της γλώσσας που χρησιμοποιεί. Στον αλγόριθμο όμως που θα στηριχτεί για να το κάνει;



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