Συζήτηση για τις δομές επανάληψης

Ξεκίνησε από Vagelis, 27 Δεκ 2002, 12:20:58 ΜΜ

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

Vagelis

Εδώ μπορούμε να συζητάμε ό,τι αφορά τις δομές επανάληψης

alkisg

#1
Θα ήθελα την γνώμη σας σχετικά με το τι αποτέλεσμα θα θέλατε να έχει η χρήση της Για στα παρακάτω τμήματα κώδικα.

Ερώτηση 1ου τμήματος:
Τι τιμή θέλετε να έχει το ι μετά την εκτέλεση ενός Για;
Για ι από 1 μέχρι 10
!Τίποτα
τέλος_επανάληψης
Γράψε ι        !Θα γράψει 10 ή 11;


Ερώτηση 2ου τμήματος:
Αν ένα Για δεν πρόκειται να εκτελεστεί, πρέπει ή όχι να γίνει η αρχικοποίηση του μετρητή;
ι <-- 5
Για ι από 10 μέχρι 1
!Τίποτα
τέλος_επανάληψης
Γράψε ι         !Θα γράψει 5 ή 10;


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

Γιάννης Μοδέας

Η αρχικοποίηση λογικά θα γίνεται πάντα. Μετά εξετάζεται η συνθήκη και αν δεν ισχύει, βγαίνουμε από την επανάληψη. Έτσι όπως ορίζει το βιβλίο τη ΓΙΑ, θυμίζει το πώς χειρίζεται το for η C... Δεν συμφωνείτε;

Vagelis

Στην πρώτη περίπτωση 11. (Νομίζω ότι κάτι τέτοιο κάνει και το βιβλίο)

Στη δεύτερη περίπτωση γιατί να μην εκτελεστεί?

alkisg

Βαγγέλη στην δεύτερη το Για δεν πρόκειται να εκτελεστεί γιατί η αρχική τιμή είναι 10, η τελική 1 και το βήμα 1. Δηλαδή ενώ πρέπει να κατέβει, το βήμα είναι θετικό. Αν δηλαδή υπήρχε μία Γράψε μέσα στην Για, δεν θα εκτελούταν και δεν θα έγραφε τίποτα.
Σε τέτοια περίπτωση στην Pascal η αρχικοποίηση του i δεν γίνεται, ενώ στην Basic γίνεται.

Στην Γλώσσα τι κάνουμε;

Vagelis

Ρώτησα γιατί νόμιζα ότι ξέχασες να γράψεις το βήμα.
Νομίζω ότι και εδώ πρέπει να γίνεται αρχικοποίηση.
(Για δες σελ. 99 του βιβλίου. Είναι εκτός ύλης, και δεν είναι ακριβώς το ίδιο αλλά...)

Michael Baladinos

 Νομίζω ότι στην πρώτη περίπτωση στο τέλος της Για το ι πρέπει να είναι 11 ενώ η αρχικοποίηση γίνεται πάντα (σύμφωνα με το βιβλίο)

alkisg

#7
Βαγγέλη έχεις δίκιο, όντως στην σελίδα 99 αναφέρει ότι στο
Για i από 0 μέχρι 4
που έχει σαν παράδειγμα, η αύξηση του i θα γίνει 5 φορές, και άρα τελικά το i θα πάρει την τελική τιμή 5. Επομένως είμαστε ΟΚ με την τελική τιμή του μετρητή. Για την αρχικοποίηση όμως δεν πρόσεξα κάτι.

Μιχάλη μήπως είδες κάτι συγκεκριμένο στο βιβλίο για την αρχικοποίηση του Για;

Sergio

Θεωρώντας ότι η υλοποίηση της ΓΙΑ έχει τη λογική:

μεταβλητή <-- αρχική_τιμή
ΟΣΟ μεταβλητή <= τελική_τιμή ΕΠΑΝΑΛΑΒΕ
   ...
   μεταβλητή <-- μεταβλητή + βήμα
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

όταν το βήμα είναι θετικό, ενώ όταν το βήμα είναι αρνητικό αντίστοιχα τη λογική:

μεταβλητή <-- αρχική_τιμή
ΟΣΟ μεταβλητή >= τελική_τιμή ΕΠΑΝΑΛΑΒΕ
   ...
   μεταβλητή <-- μεταβλητή + βήμα
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

πιστεύω ότι οι απαντήσεις στα δύο θέματα που συζητάμε πρέπει να είναι:

1) τελικά το ι παίρνει την τιμή 11, οπότε και εξέρχεται από το βρόχο (με αυτή την τιμή)

2) Αφού το βήμα παραλείπεται (άρα θεωρείται +1):
- η αρχικοποίηση γίνεται (ι <-- 10)
- η συνθήκη (10 <= 1) αποδίδει Ψευδής οπότε
- η εκτέλεση εξέρχεται από το βρόχο και
- το ι παραμένει να έχει την τιμή 10

Τώρα εάν η Pascal δεν κάνει την αρχικοποίηση, μήπως είναι θέμα compiler optimization;

Έχει δεί κανείς τίποτα να προσδιορίζεται σχετικά στο Pascal standard;
Απ τη μια η θητεία μου σε σχολικές αίθουσες: να φλυαρώ - να ελπίζω πως κατι κατάλαβαν - να εξερευνώ - να μαθαίνω. Απ την άλλη, σχεδόν συνομήλικη, η Διδακτική της Πληροφορικής: ερευνά διαδικασίες μάθησης - φλερτάρει με την Ψυχολογία - με καλεί να αφήσω το βλέμμα του Πληροφορικού και να δω με τα μάτια του δασκάλου. Τέκνα των 2, οι απόψεις μου.. (προσαρμοσμένο από τον πρόλογο του βιβλίου "Το μακρόν Φυσική προ του βραχέως διδάσκω" του Ανδρέα Κασσέτα)

Vagelis

Ο Sergio έχει δίκιο. Άλλωστε αυτό το χρησιμοποιούμε για να διδάξουμε την "Έξυπνη φυσσαλίδα"

Sergio

#10
Για να απαντήσω και στο ερώτημα που έβαλα εγώ στο τέλος της προηγούμενής μου απάντησης, τελικά δεν είναι θέμα compiler optimization στην περίπτωση της Pascal.... Έτσι ορίζει το standard.  Λίγο ... σκάψιμο ... στα παλιά τεφτέρια και... γεννηθήτω φώς :(

Σύμφωνα με το standard της Pascal (ISO 7185), η μεταβλητή ελέγχου σε ένα βρόχο ΓΙΑ, είναι απροσδιόριστη μετά το τέλος εκτέλεσης του βρόχου.  Μεταφέρω από το standard το κομμάτι το οποίο θεωρώ ότι αφορά τη συζήτηση:
___________________
...
After a for statement is executed (other than being left by a goto-statement leading out of it) the control-variable shall be undefined
...
Apart from the restrictions imposed by these requirements, the for statement


  for v := e1 to e2 do body

shall be equivalent to


01  begin
02  temp1 := e1;
03  temp2 := e2;
04  if temp1 <= temp2 then
05     begin
06     v:= temp1;
07     body;
08     while v <> temp2 do
09        begin
10        v := succ(v);
11        body
12        end
13     end
14  end


and the for-stament


  for v := e1 downto e2 do body


shall be equivalent to


01  begin
02  temp1 := e1;
03  temp2 := e2;
04  if temp1 >= temp2 then
05     begin
06     v:= temp1;
07     body;
08     while v <> temp2 do
09        begin
10        v := succ(v);
11        body
12        end
13     end
14  end


where temp1 and temp2 denote auxilliary variables that the program does not otherwise contain, and that possess the type possessed by the variable v ........
.....
____________________________

Τα παραπάνω εκτιμώ ότι οδηγούν στο συμπέρασμα πως το standard ορίζει ότι η αρχικοποίηση στην Pascal γίνεται μόνο εφόσον e1 >= e1 (για την πρώτη περίπτωση) ή e1 <= e2 (για τη δεύτερη περίπτωση) σύμφωνα με τις γραμμές 04 στα δύο παραπάνω τμήματα κώδικα.  Επίσης ορίζει σαφέστατα, ότι η μεταβλητή ελέγχου ΔΕΝ ξεπερνά την τελική τιμή της επανάληψης (βλ.γραμ.08 )

Επομένως, για να επανέλθουμε στα δικά μας ερωτήματα, πιστεύω ότι εάν ακολουθήσουμε το παράδειγμα της Pascal (όπως αυτή ορίζεται στο πρότυπο), η πρώτη περίπτωση:


Για ι από 1 μέχρι 10
!Τίποτα
τέλος_επανάληψης
Γράψε ι


Θα πρέπει να γράψει 10 (βλ.γραμμές 08-13 στην πρώτη περίπτωση κώδικα)

ενώ η δεύτερη:


ι <-- 5
Για ι από 10 μέχρι 1
!Τίποτα
τέλος_επανάληψης
Γράψε ι


θα γράψει 5. (βλ. γραμμή 04, στην πρώτη περίπτωση κώδικα)

Όμως οι ερωτήσεις της συζήτησης αφορούν τη ΓΛΩΣΣΑ και όχι την Pascal.  Και όσο και αν μοιάζει στην Pascal, η ΓΛΩΣΣΑ ΔΕΝ ΕΙΝΑΙ Pascal. Αν θεωρήσουμε ότι για τη ΓΛΩΣΣΑ το standard περιγράφεται στο βιβλίο (Κεφ.7,8,9) κάπου εκεί θα πρέπει (ή θα έπρεπε) να υπάρχει η απάντηση.

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

Βέβαια, στην ίδια σελίδα (λίγο πιό πάνω) το βιβλίο λέει ότι: "... αν η τιμή είναι μικρότερη της αρχικής τότε ο βρόχος εκτελείται ξανά ...".

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

Εν τούτοις, όταν τον Ιούνιο του 2001 στο θέμα 1Β τέθηκε το ερώτημα της μετατροπής του ΓΙΑ σε ΟΣΟ, η απάντηση που είχε δωθεί σαν σωστή ήταν απλά η:


ι <-- τιμή1
ΟΣΟ (ι <= τιμή2) επανάλαβε
  εντολές
  ι <-- ι + β
Τέλος_επανάληψης


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

Επομένως, η προσωπική μου άποψη είναι αυτή που έδωσα και στην προηγούμενη απάντησή μου.  Δηλαδή ότι η πρώτη περίπτωση:


Για ι από 1 μέχρι 10
!Τίποτα
τέλος_επανάληψης
Γράψε ι


Θα πρέπει να γράψει 11

ενώ η δεύτερη:


ι <-- 5
Για ι από 10 μέχρι 1
!Τίποτα
τέλος_επανάληψης
Γράψε ι


θα πρέπει να γράψει 10.

Όμως, πιστεύω ότι στο θέμα μας πρέπει να ερωτηθούν ίσως και οι συγγραφείς του βιβλίου.  (Ή ίσως το Υπουργείο;;; Ακούει κανένας ΠΛΗΝΕΤ;  )  Δεν είμαι σίγουρος κατά πόσο είναι αποκλειστικά θέμα πλειοψηφίας, αφού κάποιος μπορεί κάποια στιγμή να θέσει θέμα εξετάσεων που να προϋποθέτει σαφή θέση και απάντηση στα παραπάνω ερωτήματα.  Και τότε...

ποιά παιδάκια θα την πληρώσουν;
Απ τη μια η θητεία μου σε σχολικές αίθουσες: να φλυαρώ - να ελπίζω πως κατι κατάλαβαν - να εξερευνώ - να μαθαίνω. Απ την άλλη, σχεδόν συνομήλικη, η Διδακτική της Πληροφορικής: ερευνά διαδικασίες μάθησης - φλερτάρει με την Ψυχολογία - με καλεί να αφήσω το βλέμμα του Πληροφορικού και να δω με τα μάτια του δασκάλου. Τέκνα των 2, οι απόψεις μου.. (προσαρμοσμένο από τον πρόλογο του βιβλίου "Το μακρόν Φυσική προ του βραχέως διδάσκω" του Ανδρέα Κασσέτα)

Λευτέρης Δουκέρης

paidia!!!!!!!!!!!
sthn proth periptvsh kai bash osa leei to biblio kai basizomenos sto diagramma rohs poy dinei sthn ΓΙΑ....
 THA EMFANISEI TO 11 GIATI GIA I=10 THA GINEI H EPANALIPSH LOGO ...OTI TO BHMA EINAI 1 TO I THA GINEI 11 ...THA GINEI PSEYTHS H SYNTHKH POY ELEGXETAI STO .....GIA .....KAI THA STAMATISEI H EPANALIPSH .....ARA THA EKTYPOTHEI TO 11 ...

GIA THN DEYTERH PERIPTOSH ...... O BROGXOS THA EINAI ATERMON MIA KAI SYMFWNA ME TO BIBLIO OTAN EXW DOWN LOOP PRPEI NA DHLOSW TO BHMA -1 ALIOS TO I THA EXEI TIME 10-11-12-13 KLT ARA H EPANALIPSH DEN THA TERMATISTEI POTE ....ARA DEN THA EMFANISTEI KAMIA TIMH TOY I ......
ΛΕΥΤΕΡΗΣ  ΚΕΡΑΤΕΑ
http://glavrio.blogspot.com"Ο ιδανικός δάσκαλος είναι εκείνος που γίνεται γέφυρα για να περάσει αντίπερα ο μαθητής του και όταν , πια του διευκολύνει το πέρασμα , αφήνεται χαρούμενα να γκρεμιστεί , ενθαρρύνοντας το μαθητή του να φτιάξει τις δικές του γέφυρ

Λευτέρης Δουκέρης

h parapanw skepsh gia to b erwthma htan malon proxeirh ek meroys moy .....
diortonw
h syntikh tha einai 10<=1 ...oxi ara den ekteleitai h epanalipsh ara ektypwnei to 10 .......

h biasinh ....skotose GATA
ΛΕΥΤΕΡΗΣ  ΚΕΡΑΤΕΑ
http://glavrio.blogspot.com"Ο ιδανικός δάσκαλος είναι εκείνος που γίνεται γέφυρα για να περάσει αντίπερα ο μαθητής του και όταν , πια του διευκολύνει το πέρασμα , αφήνεται χαρούμενα να γκρεμιστεί , ενθαρρύνοντας το μαθητή του να φτιάξει τις δικές του γέφυρ

pfan

Θα συμφωνήσω με τον lefteris_doy γιατί αν δείτε στη σελίδα 43 από το βιβλίο μαθητή και στη σελίδα 24 από το τετράδιο το λογικό διάγραμμα που προτείνουν οι συγγραφείς του βιβλίου τότε δεν θα πρέπει να υπάρχει διχογνωμία για το τι τιμές θα έχει το ι μετά τις επαναλήψεις. Επομένως στο α θα γράψει 11 και στο β θα γράψει 10. Εδώ οι συγγραφείς φέρνουν την Γλώσσα (στην ουσία την ψευδογλώσσα γιατί οι σελίδες αυτές αναφέρονται στην ψευδογλώσσα και όχι στη ΓΛΩΣΣΑ) πιο κοντά στην Basic παρά στη Pascal. Αλλά βέβαια δεν έχει και ιδιαίτερη σημασία γιατί οι διορθωτές θα διορθώσουν σύμφωνα με τις δικές τους εμπειρίες και προτιμήσεις.
Πύρζα Φανή
Καθηγήτρια Πληροφορικής