Αυτόματη αρχικοποίηση μεταβλητών

Ξεκίνησε από gthal, 20 Φεβ 2010, 11:30:05 ΠΜ

« προηγούμενο - επόμενο »

gthal

Παράθεση από: pgrontas στις 19 Φεβ 2010, 03:28:23 ΜΜ
Ποιο το παιδαγωγικό ώφελος της ύπαρξης απροσδιόριστων τιμών πριν την πρώτη ανάθεση;
Μήπως αυτό συμβαίνει επειδή έτσι δούλευε η Pascal και η C;
Μήπως θα μπορούσαμε να έχουμε μία προκαθορισμένη τιμή ανά τύπο δεδομένων;
Ενδιαφέρον ...
Ας το ανοίξουμε !
Φιλικά,
Γιώργος Θαλασσινός

Vangelis

Στον προγραμματισμό ο πίνακας είναι γνωστό ότι δεσμεύει ένα τμήμα της κύριας μνήμης.  Το πόσο ακριβώς είναι αυτό εξαρτάται από τον τύπο των δεδομένων και γι'αυτό το λόγο (οικονομία χώρου) υπάρχει η δήλωση των μεταβλητών.
Τώρα όταν διαγράφονται περιεχόμενα από την κύρια μνήμη στην πράξη (για λόγους απόδοσης) ο ΗΥ στην πράξη  δεν "διαγράφει" τα περιεχόμενα  αλλά απλά σημαδεύει την περιοχή σαν ελεύθερη.  Τώρα κατά την δημιουργία ενός  πίνακα υπάρχει περίπτωση να "καθαρίζονται" τα υπάρχοντα περιεχόμενα ή να παραμένουν όπως έχουν. Για το λόγο αυτό είναι "απαραίτητη" η αρχικοποίηση των τιμών που περιέχει ένας πίνακας.   
Στο θέμα της απροσδιόριστης τιμής συμφωνώ με τον Παναγιώτη "Κατά τη γνώμη μου απροσδιόριστη τιμή για τους μαθητές απλά σημαίνει πως δεν έχουμε δικαίωμα να την επικαλεστούμε (για πράξεις, εμφάνιση ή κάτι άλλο).
Και δεν έχουμε δικαίωμα γιατί η συγκεκριμένη μεταβλητή δεν έχει λάβει τιμή. Όλα τα άλλα είναι περιττά..."

P.Tsiotakis

Παράθεση από: pgrontas στις 20 Φεβ 2010, 09:32:11 ΠΜ
Συμφωνώ  με αυτό, αλλά μήπως έρχεται σε αντίθεση με το γεγονός ότι όλα πρέπει να είναι σαφώς καθορισμένα σε έναν αλγόριθμο;

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

sstergou

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

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

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

ntzios kostas

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

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

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

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

Και εντάξει με αριθμητικές μεταβλητές τι γίνεται με τις αλφαριθμητικές και με τις λογικές;
Γενικότερα σε ένα πρόγραμμα θα το δεχόμουνα να μην υπάρχει αρχικοποίηση. Ο προγραμνατιστής ίσως να εκμεταλλεύται κάποιες ιδιαιτερότητας της γλώσσας που χρησιμοποιεί. Στον αλγόριθμο όμως που θα στηριχτεί για να το κάνει;



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