Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Δομή επανάληψης => Γ΄ Λυκείου => Εντολή ΓΙΑ...ΑΠΟ...ΜΕΧΡΙ => Μήνυμα ξεκίνησε από: droopy στις 31 Οκτ 2007, 12:23:59 ΠΜ

Τίτλος: μεταβλητή για βήμα
Αποστολή από: droopy στις 31 Οκτ 2007, 12:23:59 ΠΜ
ΕΙΝΑΙ ΣΩΣΤΟ ΤΟ ΠΑΡΑΚΑΤΩ ΤΜΗΜΑ ΚΩΔΙΚΑ?

ΔΙΑΒΑΣΕ Ν
ΓΙΑ Χ ΑΠΟ 1 ΜΕΧΡΙ 10 ΜΕ ΒΗΜΑ Ν
ΕΜΦΑΝΙΣΕ Χ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


ΕΥΧΑΡΙΣΤΩ
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: alexis_zoure στις 31 Οκτ 2007, 12:27:12 ΠΜ
Προσωπικα νομιζω πως ναι, αν Ν να ειναι δηλωμενος ως ακεραιος...
Αλλα δεν ειμαι σιγουρος,μπορει να κανω λαθος,αρα ας περιμενουμε καποιον εμπειροτερο!!! ;)
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: COACH στις 31 Οκτ 2007, 12:45:10 ΠΜ
Συγχωρέστε με αν αγνοώ κάτι αλλά...

Το Ν δεν καταλαβαίνω γιατί πρέπει να είναι ακέραιος...
Σελ. 44 στο βιβλίο λέει ότι οι τιμές
από
μέχρι
με_βήμα
δεν είναι απαραίτητο να είναι ακέραιες...
μπορεί να είναι και πραγματικές και έχει και παράδειγμα...
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: Eri στις 31 Οκτ 2007, 12:53:47 ΠΜ
Δημήτρη έχεις δίκιο. Ο παραπάνω αλγόριθμος δε χρειάζεται να δεσμευει το Ν ως προς τον τύπο..
Είτε ακέραιος, είτε πραγμαικός .. κανένα πρόβλημα..
Το βασικό είναι να είναι το Ν θετικός... σε διαφορετική περίπτωση ..
ο βρόχος είναι ατέρμων... και προφανως παραβιάζεται η περατότητα..
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: alexis_zoure στις 31 Οκτ 2007, 01:09:53 ΠΜ
Πραγματι εχετε δικιο...Ν<>0 και τελειωνει η δουλεια...
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: alkisg στις 31 Οκτ 2007, 01:10:24 ΠΜ
Κώδικας (ΓΛΩΣΣΑ) [Επιλογή]

ΠΡΟΓΡΑΜΜΑ τεστ
ΜΕΤΑΒΛΗΤΕΣ
 ΠΡΑΓΜΑΤΙΚΕΣ: χ, Ν
ΑΡΧΗ
 Ν <- 1.1
 ΓΙΑ χ ΑΠΟ 1 ΜΕΧΡΙ 10 ΜΕ_ΒΗΜΑ Ν
   ΓΡΑΨΕ χ
   Ν <- Ν + 5
 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


Κώδικας (Αποτελέσματα) [Επιλογή]

1.00
2.10
3.20
4.30
5.40
6.50
7.60
8.70
9.80


Προσέξτε την εντολή Ν <- Ν + 5.

(Δεν βλέπω το λόγο γιατί να μην) επιτρέπεται, απλά το Ν (υποχρεωτικά) αποτιμάται μία μόνο φορά, κατά την αρχή της ΓΙΑ. Ειδάλλως, αν η ΓΙΑ χρησιμοποιούσε κάθε φορά τη νέα τιμή του Ν, και το Ν γινόταν άλλοτε θετικό και άλλοτε αρνητικό, ο βρόχος θα μπορούσε να είναι ατέρμων ή να μην έχει σταθερό αριθμό επαναλήψεων, κάτι που έρχεται σε αντιδιαστολή με τον ορισμό της ΓΙΑ.

Το αρνητικό Ν δεν πειράζει, απλά η ΓΙΑ δεν θα εκτελεστεί ποτέ. Δεν παραβιάζεται η περατότητα.
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: COACH στις 31 Οκτ 2007, 09:36:24 ΠΜ
Θέλω Άλκη πάνω σε αυτά που γράφεις να συζητήσουμε τα εξής μαζί και με τους υπόλοιπους συναδέλφους ώστε να υπάρχει ενιαία γραμμή....

1)Έχω ακριβώς την ίδια άποψη μαζί σου για την περίπτωση που Ν αρνητικός (στο βιβλίο βέβαια λέει ότι πρέπει αν το βήμα είναι αρνητικό, η τελική τιμή να είναι μικρότερη της αρχικής...)Αλλά νομίζω ότι αν κάποιος απαντήσει ότι
η εντολή μέσα στο σώμα της επανάληψης δεν εκτελείται ποτέ και με την υποσημείωση ότι όταν το βήμα είναι αρνητικό για να εκτελείται η εντολή μέσα στό σώμα της επανάληψης ΠΡΕΠΕΙ η τελική τιμή να είναι μικρότερη της αρχικής ώστε να φαίνεται και η θεωρία του βιβλίου
τότε είμαστε καλυμένοι από κάθε άποψη

2)Αν το βήμα είναι 0 πρέπει να απαντήσουμε ότι η εντολή μέσα στο σώμα επανάληψης εκτελείται άπειρες φορές άρα ο αλγόριθμος δεν πληρεί το κριτήριο της περατότητας διότι ποτέ δεν βγαίνουμε από το σώμα της επανάληψης...
τότε είμαστε καλυμένοι από κάθε άποψη

3)Όσο για το τελευταίο που λες...δεν το είχα σκεφτεί ποτέ...
Όντως στο βιβλίο δεν το απαγορεύει άρα μάλλον μπορεί να γίνει...
Όμως έχω ένσταση στον τρόπο με τον οποίο δουλεύει...
Δεν λέω ότι η πρότασή σου για την λειτουργία του είναι λάθος...
το αντίθετο μάλιστα...μου φαίνεται πολύ σωστή...
αλλά αφού δεν μας υπαγορεύει το βιβλίο πουθενά ότι πρέπει να γίνει έτσι γιατί να μην δουλεύει με  τον άλλο τρόπο??
Δεν θα μπορούσε να δουλεύει και με τον άλλο τρόπο που περιγράφεις με κάποιο ΠΡΕΠΕΙ???
Και επαναλαμβάνω ότι η δική σου ιδέα και πρόταση μου φαίνεται πιο λογική αλλά δεν ξέρω αν μπορούμε να την υιοθετήσουμε...

Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: gpapargi στις 31 Οκτ 2007, 09:49:28 ΠΜ
Πέρα από το τι επιτρέπεται συντακτικά, να τονίσουμε (ειδικά στα παιδιά που παρακολουθούν) ότι υπάρχει και το τι πρέπει. Το να αλλάζεις το μετρητή, τα άκρα ή το βήμα της "Για" είναι μια πολύ κακή προγραμματιστική τεχνική και πρέπει να αποφεύγεται ανεξάρτητα από το αν είναι ή όχι συντακτικά σωστό.

Συγκεκριμένα στο πρώτο post του Droopy φαίνεται πως θέλουμε να εκτυπώσουμε τους αριθμούς από το 1 μέχρι το 10 βηματίζοντας ανά ν. Η ενδεδειγμένη προσέγγιση είναι με μια από τις άλλες 2 εντολές. Πχ

Διάβασε ν
χ<-1
Όσο Χ<=10 επανάλαβε
  Εμφάνισε χ
  χ<- χ+ν
Τέλος_επανάληψης
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: alkisg στις 31 Οκτ 2007, 01:54:38 ΜΜ
Παράθεση από: COACH στις 31 Οκτ 2007, 09:36:24 ΠΜ
3)Όσο για το τελευταίο που λες...δεν το είχα σκεφτεί ποτέ...
Όντως στο βιβλίο δεν το απαγορεύει άρα μάλλον μπορεί να γίνει...
Όμως έχω ένσταση στον τρόπο με τον οποίο δουλεύει...
Δεν λέω ότι η πρότασή σου για την λειτουργία του είναι λάθος...
το αντίθετο μάλιστα...μου φαίνεται πολύ σωστή...
αλλά αφού δεν μας υπαγορεύει το βιβλίο πουθενά ότι πρέπει να γίνει έτσι γιατί να μην δουλεύει με  τον άλλο τρόπο??
Δεν θα μπορούσε να δουλεύει και με τον άλλο τρόπο που περιγράφεις με κάποιο ΠΡΕΠΕΙ???
Και επαναλαμβάνω ότι η δική σου ιδέα και πρόταση μου φαίνεται πιο λογική αλλά δεν ξέρω αν μπορούμε να την υιοθετήσουμε...

Το βιβλίο αναφέρει ρητά ότι η ΓΙΑ χρησιμοποιείται για συγκεκριμένο αριθμό επαναλήψεων. Με μεταβλητό βήμα δεν υπάρχει συγκεκριμένος αριθμός επαναλήψεων. Γι' αυτό λέω "ΠΡΕΠΕΙ" υποχρεωτικά το βήμα να αποτιμάται μόνο μία φορά.
Δεν ισχύει γενικά στις γλώσσες προγραμματισμού, π.χ. στη C μεταβάλλεις ό,τι θέλεις. Το λέω απλά και μόνο με βάση το σκεπτικό του βιβλίου.


Παράθεση από: gpapargi στις 31 Οκτ 2007, 09:49:28 ΠΜ
Συγκεκριμένα στο πρώτο post του Droopy φαίνεται πως θέλουμε να εκτυπώσουμε τους αριθμούς από το 1 μέχρι το 10 βηματίζοντας ανά ν. Η ενδεδειγμένη προσέγγιση είναι με μια από τις άλλες 2 εντολές.

Γιώργο νομίζω διάλεξες λάθος παράδειγμα, στο συγκεκριμένο που έδωσε ο Droopy το βήμα δεν μεταβάλλεται οπότε ενδείκνυται να χρησιμοποιηθεί η ΓΙΑ. Σύμφωνοι, χρησιμοποιείται μεταβλητή, αλλά εφόσον δεν μεταβάλλεται κατά τη διάρκεια της επανάληψης δεν υπάρχει πρόβλημα.
Στο παράδειγμα που έδωσα εγώ, επίτηδες μετέβαλλα το βήμα εντός της επανάληψης μόνο και μόνο για χάρη της συζήτησης.
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: Eri στις 31 Οκτ 2007, 05:39:41 ΜΜ
Ναι έχουν δίκιο οι συνάδελφοι καθηγητές-προγραμματιστές...
Όμως θα ήταν καλό μιας και διαβάζουν τις απαντήσεις μαθητές που τώρα μαθαίνουν αλγοριθμική και έχουν
εύλογες και βασικές αποροίες να είμαστε λίγο πιο συνοπτικοί και σαφείς στις απάντησεις για να γινομαστε και κατανοητοί..
 
Οσό αφορά στο παράδειγμα του μαθητή:
Η ΠΕΡΑΤΟΤΗΤΑ στο παράδειγμα παραβιάζεται ΜΟΝΟ στην περίπτωση που το βήμα
(στην προκειμένη περίπτωση το Ν) ισούται με το μηδεν....
Βιαστηκά απάντησα και θεώρησα το βρόχο ατέρμων και για την περίπτωση που Ν<0...  :-X
Όταν το Ν<0 -και ας με διορθώσουν οι συνάδελφοι- το τμήμα το αλγορίθμου δεν θα εκτελεστεί ΚΑΜΙΑ ΦΟΡΑ (το
θέμα είναι κατα πόσο το τμήμα αλγορίθμου σε αυτή την περίπτωση θεωρείται αλγοριθμικά αποδεκτο;;Ή μήπως έχει λογικό σφάλμα;;)
Όταν τέλος το Ν>0 τότε δεν υπάρχει πρόβλημα ... εκτελείται βρόχος κάποιες φορές
(ανάλογα με το βήμα και βάσει του τύπου: ((τελική τιμή - αρχική τιμή) DIV N) + 1)..

ΟΛΑ τα παραπάνω ισχύουν για την προκειμένη περίπτωση που η τελικη τιμή είναι μεγαλύτερη της αρχικής (διότι 10>1) ..

Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: P.Tsiotakis στις 31 Οκτ 2007, 06:24:09 ΜΜ
Μπράβο Άλκη, καλύπτεις απόλυτα τα θέματα που τέθηκαν
Σωστή και η παρατήρηση του/της  Eri
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: gpapargi στις 01 Νοε 2007, 02:04:59 ΜΜ
Έχεις δίκιο Άλκη, διάλεξα λάθος παράδειγμα.
Προσπαθώντας να θυμηθώ τι σκεφτόμουν την ώρα που το έγραφα νομίζω πως οι 2 παράγραφοι ήταν ανεξάρτητες μεταξύ τους (έτσι όπως τα είχα στο μυαλό μου εκείνη τη στιγμή).

Ομολογώ πάντως πως δεν θα συμβούλευα το μαθητή να βάλει μεταβλητή διαβασμένη από είσοδο στο βήμα της «Για» και θα πρότεινα μια από τις άλλες 2 εντολές. Αυτό δε σημαίνει πως αν το κάνεις πρόκειται για την τεχνική που καταδικάζουμε. Μάλλον ο τρόπος που λειτουργεί μέσα μου είναι κάτι σαν ταμπού. (Και λέω ταμπού γιατί δε με χαλάει η μεταβλητή που παίρνει τιμή από είσοδο στο άνω άκρο της «Για»). Ίσως δεν το εφαρμόζω στην πράξη… για αυτό και κάτι αντιδράει μέσα μου.
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: evry στις 08 Νοε 2007, 12:06:16 ΠΜ
Η παρακάτω επανάληψη πόσες φορές θα εκτελεστεί;

Κώδικας [Επιλογή]

ΓΙΑ Ι ΑΠΟ 4 ΜΕΧΡΙ 5 ΜΕ ΒΗΜΑ -1


όπως επίσης και η παρακάτω

Κώδικας [Επιλογή]

ΓΙΑ Ι ΑΠΟ 5 ΜΕΧΡΙ 4 ΜΕ ΒΗΜΑ 1



Αν κατάλαβα καλά δεν θα εκτελεστούν καμία φορά. Δεν ξέρω αλλά κάτι δε μου αρέσει εδώ. Από τη στιγμή που λέμε από 4 ΜΕΧΡΙ 5 τότε στην Όσο...Επανάλαβε δεν θα έπρεπε να είναι Ι<=5 ανεξάρτητα από το βήμα? Όταν το βήμα είναι αρνητικό θεωρούμε ότι ντε και καλά I>=5 ?
Αν είναι έτσι τότε ποια είναι η ισοδύναμη δομή Για..από...μέχρι της παρακάτω δομής

Κώδικας [Επιλογή]

Ι<-10
ΟΣΟ Ι<=12 ΕΠΑΝΑΛΑΒΕ
     Ι <-Ι-1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ



Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: alkisg στις 08 Νοε 2007, 12:26:59 ΠΜ
Το βασικό σημείο είναι ότι "η ΓΙΑ χρησιμοποιείται για συγκεκριμένο αριθμό επαναλήψεων".

Η παραπάνω ΌΣΟ είναι ατέρμων βρόχος, δεν είναι συγκεκριμένος αριθμός επαναλήψεων... Γιατί να πρέπει ντε και καλά να αντιστοιχεί σε μία ΓΙΑ;

Τι χρησιμότητα θα είχε (είτε προγραμματιστική είτε παιδαγωγική) μία ΓΙΑ που θα μας επέτρεπε να κάνουμε ατέρμονες βρόχους;
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: evry στις 08 Νοε 2007, 12:53:12 ΠΜ

   Απλά μου φαίνεται περίεργο το ότι η φορά της ανισότητας στη συνθήκη τερματισμού εξαρτάται από το πρόσημο του βήματος. Κάτι δεν πάει καλά. Ναι μεν το λέει στο βιβλίο καθηγητή ξεκάθαρα, αλλά αυτό δε σημαίνει ότι είναι και σωστό.
   Όσον για τον ατέρμων βρόχο όλοι οι servers υλοποιούνται με έναν ατέρμων βρόχο, οπότε προγραμματιστικά έχει κάποια αξία. Τώρα για το παιδαγωγικό κομμάτι όταν λες σε κάποιον ότι πηγαίνω από το 3 στο 4 με βήμα -1 πιο λογικό μου φαίνεται να σου πει ότι πρόκειται για ατέρμων βρόχο παρά ότι δεν εκτελείται καμία φορά.
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: alkisg στις 08 Νοε 2007, 07:31:29 ΠΜ
Δηλαδή θα έφτιαχνες ποτέ τον apache με
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 2 ΜΕ_ΒΗΜΑ -1
;;;

Δεν θα ήταν (προγραμματιστικά) πιο κατανοητό αν χρησιμοποιούσες
ΌΣΟ ΑΛΗΘΗΣ ΕΠΑΝΑΛΑΒΕ
;;;

(Παρένθεση, μάλιστα δεν είναι καν άπειρο loop, αλλά είναι του στυλ

while (getmessage() != QUIT) {
εξυπηρέτησε...
}

αλλά οκ, δεν παίζει ρόλο στη συζήτηση).


Για το παιδαγωγικό κομμάτι, δεν εννοώ τι ερμηνεία θα έδινε κάποιος μαθητής, αλλά ποια είναι η παιδαγωγική χρησιμότητα μιας ΓΙΑ που δεν τερματίζει ποτέ... Σε ποιο σημείο της διδασκαλίας θα λέγαμε στους μαθητές να τη χρησιμοποιήσουν και τι θα έκαναν με αυτήν;
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: evry στις 08 Νοε 2007, 07:48:59 ΜΜ

Για τον apache δεν ξέρω, αλλά έχω δει πολλές φορές κάτι τέτοιο σε κάποιον εξυπηρέτη που περιμένει κάποιο σήμα
for ( ; ; )
και μετά κάνει break

Τώρα για το παιδαγωγικό κομμάτι δε μίλησα συγκεκριμένα για τη ΓΙΑ, αλλά για τον ατέρμονα βρόχο, δηλαδή όταν θες να δείξεις στα παιδιά ένα παράδειγμα υπολογιστικής διαδικασίας που δεν είναι αλγόριθμος γιατί παραβιάζει το κριτήριο της περατότητας δεν θα χρησιμοποιήσεις κάποιο είδος ατέρμονα βρόχου; Αν θυμάμαι καλά είχε πέσει και στις εξετάσεις σχετικά πρόσφατα μια δομή επανάληψης με βήμα 0 που δεν τερμάτιζε.

Αυτό στο οποίο θέλω να σταθώ είναι ότι κάτι δεν είναι καλά ορισμένο εδώ. Και πιο συγκεκριμένα στο θέμα της μετατροπής της Για σε Όσο. Εκεί με ξενίζει λίγο αυτή η ιδέα. Το πότε μετατρέπουμε δηλαδή το ΜΕΧΡΙ σε <= ή >= . Δεν ξέρω αν αυτό πρέπει να καθορίζεται αποκλειστικά από το βήμα. Αν δηλαδή δώσεις σε κάποιον την παρακάτω δομή

ΓΙΑ Ι ΑΠΟ 3 ΜΕΧΡΙ 4 ΜΕ ΒΗΜΑ -1

δεν είναι πιο λογικό να σκεφτεί ότι ξεκινάω από το 3 και μειώνω κατά -1 μέχρι να φτάσω στο 4? Αλλά επειδή δεν φτάνω ποτέ στο 4 έχω ατέρμων βρόχο. Ποιο λογικό μου φαίνεται αυτό παρά το ότι δεν εκτελείται καμία φορά.
Δε λέω ότι το βιβλίο έχει κάποιο λάθος, απλά δε μου φαίνεται τόσο ξεκάθαρο και πολλοί μαθητές μπορεί να μπερδευτούν.
Για παράδειγμα αν τους ζητήσουμε να μετατρέψουν το παρακάτω τμήμα σε ΓΙΑ..ΑΠΟ...ΜΕΧΡΙ

Κώδικας [Επιλογή]

Ι<--4
ΟΣΟ Ι<=5 ΕΠΑΝΑΛΑΒΕ
     ΓΡΑΨΕ Ι
     Ι <-- Ι - 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

φαντάζομαι ότι σχεδόν όλοι θα κάνουν κάτι τέτοιο
Κώδικας [Επιλογή]

ΓΙΑ Ι ΑΠΟ 4 ΜΕΧΡΙ 5 ΜΕ ΒΗΜΑ -1
     ΓΡΑΨΕ Ι
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


το οποίο όμως με βάση τη θεώρηση του βιβλίου δεν είναι σωστό

Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: alkisg στις 08 Νοε 2007, 11:49:56 ΜΜ
> for ( ; ; )
Σύμφωνοι, αλλά αυτό δεν έχει καμία σχέση με το αντίθετο βήμα (ούτε και με τη ΓΙΑ της ΓΛΩΣΣΑΣ)... Φαντάζεσαι να το γράφανε
for (int i = 0; i < 1; i--)
ποιος θα καταλάβαινε τι εννοούν;

> Τώρα για το παιδαγωγικό κομμάτι δε μίλησα συγκεκριμένα για τη ΓΙΑ, αλλά για τον ατέρμονα βρόχο...
Νομίζω ότι καλύτερα να χρησιμοποιηθεί η ΟΣΟ σαν παράδειγμα ατέρμονα βρόχου, όχι η ΓΙΑ.

> δεν είναι πιο λογικό να σκεφτεί ότι ξεκινάω από το 3 και μειώνω κατά -1 μέχρι να φτάσω στο 4?
Ακόμα κι αν υποθέσουμε ότι το εφαρμόζαμε στην πράξη, τελικά δεν θα ήταν άπειρος βρόχος. Στη ΓΛΩΣΣΑ αναγκαστικά (αφού υποτίθεται είμαστε σε Η/Υ) υπάρχει περιορισμένο εύρος στους ακεραίους. Θα "κατέβαινε" μέχρι τον -2^(αριθμός bits-1) (π.χ. -9223372036854775808 για 64bit ακεραίους που χρησιμοποιεί ο Διερμηνευτής) και μετά θα έκανε ανακύκλωση και θα πήγαινε στον θετικό 2^(αριθμός bits-1), οπότε θα σταματούσε η επανάληψη. Άντε να το εξηγήσεις αυτό στους μαθητές... Πιο λογικό είναι να τους πεις ότι άπειρος βρόχος είναι ο παρακάτω, επειδή ξέχασαν να αλλάξουν το μετρητή...

Κώδικας (ΓΛΩΣΣΑ) [Επιλογή]

ι <- 1
ΟΣΟ ι < 10 ΕΠΑΝΑΛΑΒΕ
  ΓΡΑΨΕ Ι
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: evry στις 09 Νοε 2007, 09:55:20 ΠΜ

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

Κώδικας [Επιλογή]

Ι <-- 4
ΟΣΟ Ι<=5 ΕΠΑΝΑΛΑΒΕ
      Ι <-- Ι - 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: alkisg στις 09 Νοε 2007, 10:53:41 ΠΜ
Αυτό που λέω είναι ότι δεν πρέπει να του θέσουμε τέτοιο ερώτημα. Όταν μετά πάμε στα κεφάλαια 7-10 και του κάνουμε ΓΛΩΣΣΑ, τι θα του πούμε; Τώρα δεν είμαστε σε ψευδογλώσσα, είμαστε σε Η/Υ και άρα αυτά που σου έλεγα ότι είναι άπειρο loop δεν ισχύουν;

Αλλά και στην ψευδογλώσσα, πόσο λογικό ακούγεται ένας αριθμός να έχει άπειρα ψηφία; Δεν είναι ενάντια στον ψηφιακό κόσμο των Η/Υ, στους οποίους δεν υπάρχει τίποτα "άπειρο"; Ακόμα και οι αλγόριθμοι σε χαρτί θα πρέπει να σέβονται ορισμένους βασικούς περιορισμούς (και όντως τους σέβονται, δεν θα βρεις αλγόριθμο που να υποθέτει ότι οι αριθμοί έχουν άπειρα ψηφία)...

Καλύτερα δηλαδή θα είναι να μην θεωρούμε/διδάσκουμε άπειρα loops με μεταβολή του μετρητή. Καλύτερα όταν αναφερόμαστε σε άπειρα loops να δίνουμε σαν παράδειγμα μία ΟΣΟ ή μία ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ όπου δεν αλλάζει ποτέ η συνθήκη.
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: evry στις 10 Νοε 2007, 01:54:28 ΜΜ

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

Κώδικας [Επιλογή]

ΓΙΑ Ι ΑΠΟ 4 ΜΕΧΡΙ 5 ΜΕ ΒΗΜΑ -1
     ΓΡΑΨΕ Ι
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


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

Ι <-- 4
ΟΣΟ Ι>=5 ΕΠΑΝΑΛΑΒΕ
      ΓΡΑΨΕ Ι
      Ι <-- Ι - 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


ενώ η παρακάτω

Κώδικας [Επιλογή]

ΓΙΑ Ι ΑΠΟ 4 ΜΕΧΡΙ 5 ΜΕ ΒΗΜΑ 0
     ΓΡΑΨΕ Ι
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


έτσι;

Κώδικας [Επιλογή]

Ι <-- 4
ΟΣΟ Ι<=5 ΕΠΑΝΑΛΑΒΕ
      ΓΡΑΨΕ Ι
      Ι <-- Ι - 0
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: alkisg στις 10 Νοε 2007, 04:45:24 ΜΜ
Όσο γι' αυτό συμφωνώ και επαυξάνω.

Για μένα, η σωστή μετάφραση ενός ΓΙΑ σε ΟΣΟ, όπως αναφέρω και στη βοήθεια του Διερμηνευτή (https://alkisg.mysch.gr/help/?p=Gia), είναι η εξής:

Κώδικας (ΓΛΩΣΣΑ) [Επιλογή]

ΓΙΑ μετρητής ΑΠΟ έκφραση_αρχής ΜΕΧΡΙ έκφραση_τέλος ΜΕ_ΒΗΜΑ έκφραση_βήματος
  (εντολές)
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


ισοδυναμεί με:

Κώδικας (ΓΛΩΣΣΑ) [Επιλογή]

μετρητής <- έκφραση_αρχής
βοηθητική_έκφραση_τέλους <- έκφραση_τέλους
βοηθητική_έκφραση_βήματος <- έκφραση_βήματος
ΑΝ βοηθητική_έκφραση_βήματος = 0 ΤΟΤΕ
  ΚΑΛΕΣΕ ΛάθοςΕκτέλεσης('Το βήμα στη ΓΙΑ δεν μπορεί να είναι μηδέν')
ΑΛΛΙΩΣ
  ΑΝ βοηθητική_έκφραση_βήματος > 0 ΤΟΤΕ
    ΟΣΟ μετρητής <= βοηθητική_έκφραση_τέλους ΕΠΑΝΑΛΑΒΕ
      (εντολές)
      μετρητής <- μετρητής + βοηθητική_έκφραση_βήματος
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΑΛΛΙΩΣ
    ΟΣΟ μετρητής >= βοηθητική_έκφραση_τέλους ΕΠΑΝΑΛΑΒΕ
      (εντολές)
      μετρητής <- μετρητής + βοηθητική_έκφραση_βήματος
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ


Οι βοηθητικές_ΧΧΧ μεταβλητές είναι απαραίτητες επειδή η ΓΙΑ, έτσι όπως θεωρείται στη ΓΛΩΣΣΑ και τις παραπλήσιες γλώσσες (Pascal, Basic αλλά όχι τη C που δεν έχει καμία σχέση), χρησιμοποιείται για σταθερό αριθμό επαναλήψεων. Επομένως δεν μπορούμε να επιτρέπουμε στην τελική τιμή ή στο βήμα να αλλάζουν εντός της επανάληψης. Και φυσικά, αν π.χ. στην έκφραση_βήματος υπήρχε μία συνάρτηση, δεν θα θέλαμε να καλείται κάθε φορά.

Αυτή πιστεύω ότι είναι η σωστή μετάφραση. Είναι περίεργο που δεν την έχει έτσι το βιβλίο; Είναι περίεργο που κανένας καθηγητής δεν την διδάσκει έτσι;
Νομίζω πως όχι, γιατί ο σκοπός μιας εκπαιδευτικής ΓΛΩΣΣΑΣ είναι να "γλυτώσει" από το μαθητή όσες προγραμματιστικές λεπτομέρειες μπορεί.

Το λάθος πιστεύω είναι ότι ζητάμε μετατροπές από ΓΙΑ σε ΟΣΟ κτλ σε διαγωνίσματα και εξετάσεις. ΔΕΝ είναι εύκολη η αντιστοιχία μεταξύ τους, ας είμαστε λοιπόν συνεπείς και ας μην υποχρεώνουμε το μαθητή να μαθαίνει λεπτομέρειες που σκοπίμως του αποκρύψαμε.
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: d_bam στις 14 Νοε 2007, 12:07:17 ΜΜ
Παράθεση από: evry στις 10 Νοε 2007, 01:54:28 ΜΜ

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

Κώδικας [Επιλογή]

ΓΙΑ Ι ΑΠΟ 4 ΜΕΧΡΙ 5 ΜΕ ΒΗΜΑ -1
     ΓΡΑΨΕ Ι
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


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

Ι <-- 4
ΟΣΟ Ι>=5 ΕΠΑΝΑΛΑΒΕ
      ΓΡΑΨΕ Ι
      Ι <-- Ι - 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


ενώ η παρακάτω

Κώδικας [Επιλογή]

ΓΙΑ Ι ΑΠΟ 4 ΜΕΧΡΙ 5 ΜΕ ΒΗΜΑ 0
     ΓΡΑΨΕ Ι
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


έτσι;

Κώδικας [Επιλογή]

Ι <-- 4
ΟΣΟ Ι<=5 ΕΠΑΝΑΛΑΒΕ
      ΓΡΑΨΕ Ι
      Ι <-- Ι - 0
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ




Πιστεύω πως αν και δεν είναι καλά ορισμένη η μετατροπή όπως φαίνεται και στο παράδειγμά σου, θα μπορούσαμε να αποφύγουμε κάποια σύγχιση
ΠΩΣ;
Δεν υπάρχει λόγος να δώσόυμε ούτε εμείς οι καθηγητές ούτε στις πανελλήνιες για μετατροπή κάποιον ατέρμων βρόχο από μια μορφή σε κάποια άλλη.
Επιπλέον πιστεύω πως όταν στο ΓΙΑ ΑΠΟ ΜΕΧΡΙ το βήμα είναι θετικός θα πρέπει στη μετατροπή να παίρνουμε συνθήκη με <= ,ενώ αν είναι αρνητικός θα πρέπει να παίρνουμε συνθήκη με >= 
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: Αλεξόπουλος Ανδρέας στις 15 Νοε 2007, 02:01:01 ΜΜ
Θα συμφωνήσω κι εγώ με τον φίλο d_bam σε αυτά που έγραψε πιο πάνω. Δεν υπάρχει κανένας λόγος να προσπαθήσουμε να δείξουμε πως μετατρέπεται ένας ατέρμων βρόχος από μια μορφή στην άλλη. Δεν πιστεύω πως είναι αυτός ο σκοπός του μαθήματος, και προσωπικά το θεωρώ απίθανο να ζητηθεί ποτέ τέτοιο θέμα. Το θέμα είναι να μάθουμε στα παιδιά να σκέφτονται σωστά για το πώς θα αντιμετωπίσουν και θα λύσουν έναν αλγόριθμο που "λύνεται".
Και μια γενικότερη προσωπική άποψη την οποία και ακολουθώ στο μάθημά μου. Πιστεύω ότι δεν πρέπει να κοιτάμε τι ακριβώς γίνεται στις κανονικές γλώσσες προγραμματισμού. Στην C για παράδειγμα μπορείς να γράψεις ό,τι σκεφτείς, το οποίο πιθανώς να τρέξει και να βγάλει κάποιο αποτελέσμα. Δεν σημαίνει ότι θα πρέπει να προσπαθήσουμε να κάνουμε το ίδιο και στην ΓΛΩΣΣΑ ή σε έναν ψευδοκώδικα. Γιατί να προσπαθήσουμε να αλλάξουμε με κάποιο τρόπο το ΒΗΜΑ στην εντολή ΓΙΑ...ΑΠΟ...ΜΕΧΡΙ ενώ αυτή έχει ξεκινήσει να εκτελείται; Ακομά κι αν αυτό γίνεται στην C και τη Java, τι θα κερδίσουμε με το να πούμε στα παιδιά πως αυτό σε μια γλώσσα προγραμματισμού γίνεται, αλλά σε εσάς όχι; Μάλλον, μόνο να τα μπερδέψουμε!
Και για να φέρω ένα παράδειγμα κλείνοντας. Έγραψα το παρακάτω πρόγραμμα σε C το οποίο έτρεψε κανονικά
-----------
main() {

        int a;
        a = 4.3;
        printf("a=%d\n",a);
}
------------
και εμφάνισε το 4 στην οθόνη. Πρέπει δηλαδή να προσπαθήσουμε να δούμε πώς θα το κάναμε σε ΓΛΩΣΣΑ; Φυσικά όχι γιατί είναι λάθος σύμφωνα με το συντακτικό της.
Απλώς εκεί που ήθελα να καταλήξω είναι πως δεν υπάρχει λόγος πολλές φορές να κάνουμε δύσκολη τόσο την ζωή την δική μας όσο και των μαθητών...

Φιλικά,
Ανδρέας.
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: evry στις 15 Νοε 2007, 03:02:15 ΜΜ

   Νομίζω το καλύτερο θα ήταν να ήταν όλα αυτά καλά ορισμένα ώστε να μην δημιουργούνται τέτοια θέματα. Δε μπορεί να μιλάς στα παιδιά για ισοδύναμους βρόχους και να κάνεις στον πίνακα μετατροπές αλλά όταν φτάσεις σε ατέρμων βρόχο να τους πεις ότι τώρα δε μετατρέπεται. Ούτε μπορεί ένα μάθημα να σχεδιάζεται με το σκεπτικό "Για ποιο λόγο να το ρωτήσουν αυτό?". Από τη στιγμή που έχεις βάλει τα παιδιά στη διαδικασία της μετατροπής μεταξύ δομών επαναλήψης γιατί να βγάλεις τον ατέρμονα έξω? Το μάθημα έχει αρκετές ασάφειες, αν απλά ακολουθούμε την τακτική ότι δεν θα ρωτήσουμε αυτό ή δεν θα ρωτήσουμε το άλλο απλά κρύβουμε το πρόβλημα.
    Επίσης εντάξει καλές οι πανελλήνιες αλλά δε μπορούμε να μπαίνουμε συνέχεια στο σκεπτικό τι θα ζητηθεί και τι όχι και να διδάσκουμε μόνο αυτά.
 
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: Αλεξόπουλος Ανδρέας στις 15 Νοε 2007, 08:27:27 ΜΜ
Φυσικά και δεν θεωρώ σωστό να προσπαθούμε να διδάξουμε μόνο ό,τι είναι πιθανό να πέσει σε πανελλήνιες (Πότε δεν το έκανα αυτό και ούτε έχω σκοπό να το κάνω). Αλλά όπως είπα και πιο πάνω, πρέπει να τους μαθαίνουμε να σκέφτονται σωστά. Απλώς προσπαθώντας να τους μάθουμε να μετατρέπουν έναν ατέρμων βρόχο σε άλλο, δεν το θεωρώ και τόσο χρήσιμο από παιδαγωγικής άποψης (άποψή μου βέβαια και μπορεί να κάνω λάθος). Υπάρχουν άλλωστε τόσα και τόσα παραδείγματα με μετατροπές που μπορεί να κάνει κάποιος.
Επειδή όμως αυτό το βιβλίο έχουμε και αυτή είναι η κατάσταση, προσπαθώ να βρω μια μέση λύση σε ορισμένα θέματα. Επίσης, επειδή (καλώς ή κακώς) δεν κάνουμε προγραμματισμό με την αυστηρή έννοια του προγραμματισμού, αλλά ετοιμάζουμε τα παιδιά για να γράψουν εξετάσεις, κάποια εξηζητημένα θέματα ίσως πρέπει να τα αποφεύγουμε. Και επειδή στην τελική ανάλυση, "κρίνεται" και το μέλλον τους από το πώς θα γράψουν σε κάθε μάθημα, και επειδή ποτέ δεν μπορείς να ξέρεις πώς σκέφεται αυτός που διορθώνει το κάθε θέμα, προσπαθώ να μάθω τα παιδιά να είναι όσο πιο τυπικά μπορούν σε κάποια πράγματα.
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: gpapargi στις 16 Νοε 2007, 10:47:49 ΠΜ
Παράθεση από: alkisg στις 09 Νοε 2007, 10:53:41 ΠΜ
Αλλά και στην ψευδογλώσσα, πόσο λογικό ακούγεται ένας αριθμός να έχει άπειρα ψηφία; Δεν είναι ενάντια στον ψηφιακό κόσμο των Η/Υ, στους οποίους δεν υπάρχει τίποτα "άπειρο"; Ακόμα και οι αλγόριθμοι σε χαρτί θα πρέπει να σέβονται ορισμένους βασικούς περιορισμούς (και όντως τους σέβονται, δεν θα βρεις αλγόριθμο που να υποθέτει ότι οι αριθμοί έχουν άπειρα ψηφία)...

Να πω πάνω σε αυτό ότι ο Knuth στο βιβλίο του έτσι ακριβώς ορίζει την αποτελεσματικότητα (effetciveness). Δηλαδή θα πρέπει να μπορούν οι αλγόριθμοι να εκτελεστούν από τον άνθρωπο με μολύβι και χαρτί. Και αναφέρει σαν παράδειγμα ακριβώς αυτό που γράφει και ο Άλκης. Στην περίπτωση που έχουμε πράξεις με πραγματικούς αριθμούς αναπτυγμένους σε άπειρα δεκαδικά ψηφία παραβιάζεται η αποτελεσματικότητα λόγω του ότι δεν μπορεί να γίνει το ίδιο με μολύβι και χαρτί.  Δεν μπορώ να μη θυμήσω την άποψή μου ότι το effectiveness μεταφέρθηκε λανθασμένα στα ελληνικά. Το effectiveness το χρησιμοποίησε ο Knuth με την άλλη έννοια που δίνουν τα λεξικά: αυτή της πραγματοποιησιμότητας  και όχι της αποτελεσματικότητας. Ο χειρισμός απείρων δεκαδικών αναπτυγμάτων των πραγματικών είναι "μη πραγματοποιήσιμος". Τι θα μπορούσε να σημαίνει το "μη αποτελεσματικός";

Στα άλλα τώρα

Με είχε προβληματίσει παλαιότερα Ευριπίδη αυτό που λες για τη λογική. Μου φαινόταν και εμένα «παράλογο»… ότι κι αν σημαίνει τέλος πάντων λογικό και παράλογο.

Ας δούμε το παράδειγμα «Για ι από 1 μέχρι 5 με_βήμα -1»

Η λογική που αναφέρεις (και η δική μου δηλαδή) λέει το εξής:

«Ξεκινάω από 1 και θέλω να ανέβω αφού το άλλο άκρο είναι το 5. ʼρα ο συγκριτικός τελεστής που θα χρησιμοποιήσω είναι ο <=. ʼρα η ισοδύναμη Όσο είναι η παρακάτω:

ι<-1
Όσο ι<=5 επανάλαβε
…
   ι<-ι-1
Τέλος_επανάληψης

ʼρα πάω σε ατέρμονα βρόχο.»


Η «λογική» που δείχνει να έχει το βιβλίο είναι η εξής: «Ξεκινάω από το 1 και θέλω να κατέβω αφού το βήμα είναι αρνητικό. ʼρα ο συγκριτικός τελεστής είναι το >=. ʼρα η ισοδύναμη Όσο είναι η παρακάτω:

ι<-1
Όσο ι>=5 επανάλαβε
…
   ι<-ι-1
Τέλος_επανάληψης

ʼρα δεν μπαίνω καμία φορά στο βρόχο.»

Η διαφορά των 2 «λογικών» είναι στο κριτήριο με βάση το οποίο αποφασίζουμε αν ανεβαίνουμε ή κατεβαίνουμε. Η πρώτη λογική βασίζεται στο άλλο άκρο. Η δεύτερη λογική βασίζεται στο βήμα. Βέβαια το πρόβλημα είναι ότι έχουμε να κάνουμε με μια παθολογική περίπτωση (είτε 0 είναι οι επαναλήψεις είτε άπειρες). Έτσι το βήμα και το δεξί άκρο δίνουν διαφορετικές "εκτιμήσεις".

Στη λογική του βιβλίου τίθεται το θέμα του τι γίνεται με βήμα 0. Δεν υπάρχει σαφής ορισμός μετατροπής, οπότε η πρώτη σκέψη που θα μπορούσα να κάνω είναι η εξής:
Για να υπάρχει συμμετρία ως προς τις 2 κατευθύνσεις θα έπρεπε να χρησιμοποιηθεί ο τελεστής <>. Δηλαδή:
ι<-1
Όσο ι<>5 επανάλαβε
…
   ι<-ι+0
Τέλος_επανάληψης

Βέβαια υπάρχει και η σκέψη του ʼλκη: «Αφού ο αριθμός επαναλήψεων πρέπει να είναι συγκεκριμένος και σταθερός τότε δεν επιτρέπεται να είναι ατέρμων ο βρόχος γιατί το άπειρο δεν είναι συγκεκριμένος αριθμός. ʼρα αν μπει βήμα 0 τότε δεν θα πρέπει να έχουμε ατέρμων βρόχο. ʼρα τι μένει; Να είναι λάθος εκτέλεσης»

Βασικά έχω προσέξει ʼλκη ότι εμείς οι 2 έχουμε μια διαφορετική προσέγγιση των πραγμάτων. Εσύ κυρίως ενδιαφέρεσαι για το πώς θα μπορούσαν να είναι τα πράγματα έτσι ώστε να βγαίνουν αληθής όλες οι προτάσεις του σχολικού βιβλίου. Λογικό μια που έχεις κάνει την υλοποίηση και κεντρικό σου μέλημα ήταν να υλοποιήσεις αυτό ακριβώς που περιγράφεται και όχι κάτι άλλο. Εγώ είμαι πιο πολύ «φιλόσοφος». Με απασχολεί το πως θα μπορούσαν να είναι τα πράγματα (συμπεριλαμβανομένου και του σχολικού βιβλίου) έτσι ώστε να δένουν όλα όσο γίνεται καλύτερα μεταξύ τους.

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

Επιτρέπεται τελικά να ρωτήσουμε σε Σ-Λ αν η Για με βήμα 0 παραβιάζει την περατότητα;

Αν είναι λάθος η σύνταξη της "Για" με βήμα 0 τότε δεν θα παραβιαστεί καμία περατότητα γιατί δεν υπάρχει τέτοια σύνταξη. Αν υπήρχε τέτοια σύνταξη τότε θα είχαμε παραβίαση της περατότητας. Αλλά δεν υπάρχει γιατί σύμφωνα με το βιβλίο "Η Για πρέπει να εκτελείται για προκαθορισμένο αριθμό επαναλήψεων" και το άπειρο δεν είναι προκαθορισμένος αριθμός επαναλήψεων. Για να το θέσω διαφορετικά: Υπάρχει περίπτωση να κατασκευάσει κάποιος ατέρμονα βρόχο στο Διερμηνευτή χρησιμοποιώντας τη Για; Εννοώ να τον βάλει να τρέξει και να μην τελειώνει ποτέ.
Από την άλλη μεριά το βιβλίο λέει: "το βήμα δεν μπορεί να είναι μηδέν γιατί ο βρόχος εκτελείται επ' άπειρον". Ίσως  μια διέξοδος να είναι ότι η Για με βήμα 0 απλά δεν χρησιμοποιείται λόγω του ότι δε λύνει κάποιο πρόβλημα. Δηλαδή ότι το βιβλίο εννοεί ότι δεν χρησιμοποιείται και όχι ότι δεν γίνεται να χρησιμοποιηθεί. Θα μπορούσε δηλαδή να επιτρέπεται η χρηση του με τον κίνδυνο εγκλωβισμού σε ατέρμονα βρόχο.
Φυσικά δεν τίθεται κανένα θέμα παιδαγωγικής αξίας. Για να χρησιμοποιήσεις τη "Για" θα πρέπει να ξέρεις πόσες φορές θα την εκτελέσεις. ʼρα αποκλείεται να συλλάβεις λύση προβλήματος με "Για" που έχει βήμα 0.
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: evry στις 16 Νοε 2007, 01:21:02 ΜΜ
@gpapargi

Γιώργο αυτό που λες έχει πέσει θέμα το 2005. Μάλιστα η πλάκα είναι ότι στην εκφώνηση λέει "ο παρακάτω αλγόριθμος" ενώ θα έπρεπε να λέει τμήμα εντολών ή υπολογιστική διαδικασία. Το βήμα 0 δηλαδή υπάρχει και επίσημα στα θέματα οπότε δε μπορούμε να μην το εξηγήσουμε στα παιδιά

Κώδικας [Επιλογή]

2. Ποιο κριτήριο δεν ικανοποιεί ο παρακάτω αλγόριθμος και γιατί;
      S  ← 0
      Για I από 2 μέχρι 10 με_βήμα 0
         S ← S + I
      Τέλος_επανάληψης
      Εμφάνισε S


@aalexop

  Προφανώς και συμφωνώ σε αυτά που λες. Εννοείται ότι δε μπορούμε να δίνουμε στους μαθητές ασκήσεις που έχουν ασάφειες. Όπως βλέπεις όμως το παραπάνω θέμα έπεσε στις εξετάσεις και είναι ατέρμων βρόχος, δηλαδή κάποιες φορές όταν δεν έχεις ορίσει καλά κάποια πράγματα, μπορεί κάποια άσκηση να δημιουργήσει σύγχυση στα παιδιά.
Αυτό που θέλω να τονίσω είναι ότι η δομή Για...από...μέχρι που παρουσιάζει το βιβλίο έχει κάποια κενά για τα οποία πρέπει να απολογηθείς σε κάποιον πιο υποψιασμένο μαθητή. Πιστεύω ότι θα έπρεπε αυτή η δομή να αλλάξει ή τουλάχιστον αν θέλουμε μια δομή που να μην υπάρχει αυτούσια σε κάποια γλώσσα προγραμματισμού ας την ορίσουμε καλά.
    Πιο συγκεκριμένα δε μου αρέσει να απαντάω σε ερωτήσεις μαθητών με την απάντηση "Γιατί έτσι το λέει το βιβλίο". Προσπάθω να εξηγώ κάθε φορά οτιδήποτε όσο πιο απλά γίνεται και να αποκαλύπτω τη λογική που υπάρχει πίσω από κάθε εντολή ή μηχανισμό της γλώσσας. Και υπάρχουν πράγματα στα οποία δε μπορεί να γίνει αυτό. Θα μπορούσε όμως αν είχαν οριστεί διαφορετικά.
  π.χ. στην Pascal (από την οποία προέρχεται κατά μεγάλο βαθμό η Γλώσσα) δεν υπάρχει πρόβλημα με το αρνητικό βήμα γιατί εκεί υπάρχει το DOWNTO οπότε ξέρεις αν ανεβαίνεις ή κατεβαίνεις. Δεν θα ήταν πιο απλό και λογικό αν υπήρχε ένα αντίστοιχο DOWNTO και στη Γλώσσα;

Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: koniordos στις 16 Νοε 2007, 01:31:50 ΜΜ
Bέβαια στην Pascal δεν υπάρχει step στη for. Οπότε, πας αναγκαστικά με while ή repeat.

Στα παιδιά εγώ "αναγκάζομαι" να διδάσκω πως ο συγκεκριμένος "Αλγόριθμος" (τί παράδοξο και αυτο? Αφού δεν ικανοποιεί ένα sine qua non κριτήριο - πώς είναι αλγόριθμος?)
δεν ικανοποιεί το κριτήριο της περατότητας γιατί ξέρω πως αυτό αναμένεται σαν απάντηση, ενώ πέρα των όλων ασαφειών που κουβαλάει, νιώθω πως είναι καθαρή περίπτωση παραβίασης της αποτελεσματικότητας - βλέπω μια μη πραγματοποιήσιμη εντολή!
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: alkisg στις 16 Νοε 2007, 01:49:18 ΜΜ
Παράθεση από: gpapargi στις 16 Νοε 2007, 10:47:49 ΠΜ
Ξεκινάω από 1 και θέλω να ανέβω αφού το άλλο άκρο είναι το 5. Άρα ο συγκριτικός τελεστής που θα χρησιμοποιήσω είναι ο <=.
Όχι, αυτό δεν είναι σωστό. Το σωστό είναι να αποφασιστεί το <= ή >= ανάλογα με την τιμή του βήματος. Εκτός του ότι έτσι το κάνουν και οι άλλες γλώσσες προγραμματισμού, είναι και πιο λογικό, γιατί μπορεί να χρησιμεύσει σε περισσότερα σενάρια από ότι αν κοιτάμε τα άκρα. Δεν γράφω παραδείγματα για να μην μακρυγορήσω.

Παράθεση από: gpapargi στις 16 Νοε 2007, 10:47:49 ΠΜ
Για να υπάρχει συμμετρία ως προς τις 2 κατευθύνσεις θα έπρεπε να χρησιμοποιηθεί ο τελεστής <>.

Κώδικας (ΓΛΩΣΣΑ) [Επιλογή]

ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 1
 ΓΡΑΨΕ ι
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


Το παραπάνω προφανώς επαναλαμβάνεται ακριβώς μία φορά.

Κώδικας (ΓΛΩΣΣΑ) [Επιλογή]

ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ 0
 ΓΡΑΨΕ ι
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


Αν το μεταφράσουμε με ΟΣΟ και <>, τότε αυτό δεν θα επαναληφθεί καμία φορά, το οποίο δεν στέκει. Επομένως δεν μπορούμε να χρησιμοποιήσουμε <> για τη μετάφραση του ΜΕ_ΒΗΜΑ 0.


Παράθεση από: gpapargi στις 16 Νοε 2007, 10:47:49 ΠΜ
Εσύ κυρίως ενδιαφέρεσαι για το πώς θα μπορούσαν να είναι τα πράγματα έτσι ώστε να βγαίνουν αληθής όλες οι προτάσεις του σχολικού βιβλίου.

Αν και με ενδιαφέρει να ερμηνεύεται πιστά το βιβλίο, ώστε μέσα από το Διερμηνευτή να δίνονται όσο πιο σωστές κατευθύνσεις γίνεται, δεν είναι το μόνο που με ενδιαφέρει. Με ενδιαφέρει επίσης η ΓΛΩΣΣΑ να είναι κατάλληλη για εκπαιδευτικούς σκοπούς. Όταν (σωστά) λέμε ότι η ΓΙΑ χρησιμοποιείται για συγκεκριμένο αριθμό επαναλήψεων, δεν μπορούμε στη συνέχεια να ρωτάμε στις πανελλήνιες τι γίνεται για βήμα = 0. Αναμενόμενες μετά είναι και οι συναφείς ερωτήσεις "μπορούμε να αλλάξουμε το μετρητή μέσα στη ΓΙΑ;" ή "ποια τιμή έχει ο μετρητής μετά την ΓΙΑ;".
Σε επόμενες εκδόσεις του Διερμηνευτή σκέφτομαι να απαγορευτούν τα παραπάνω. Είναι λάθος από τη μία να χρησιμοποιούμε την εκπαιδευτική ΓΛΩΣΣΑ για να μην μπαίνουμε σε "λεπτομέρειες ενός συγκεκριμένου προγραμματιστικού περιβάλλοντος" και από την άλλη να εξετάζουμε ακριβώς αυτές τις λεπτομέρειες.
Αν μπορούσε να διορθωθεί το βιβλίο, θα απαντούσα σε όλα τα παραπάνω "Είναι λάθος εκτέλεσης. Τελεία. Δεν το χρησιμοποιούμε, δεν μας ενδιαφέρει".

Παράθεση από: gpapargi στις 16 Νοε 2007, 10:47:49 ΠΜ
Υπάρχει περίπτωση να κατασκευάσει κάποιος ατέρμονα βρόχο στο Διερμηνευτή χρησιμοποιώντας τη Για;
Μέχρι στιγμής ναι, αρκεί κάποιος να μεταβάλλει την τιμή του μετρητή στο εσωτερικό της επανάληψης. Σκέφτομαι όμως να το αλλάξω σε επόμενη έκδοση και να προκαλείται λάθος χρόνου εκτέλεσης. Θα δούμε, ίσως μία ψηφοφορία ή μια ακόμα επιλογή στο διάλογο επιλογών. :)

Παράθεση από: evry στις 16 Νοε 2007, 01:21:02 ΜΜ
π.χ. στην Pascal (από την οποία προέρχεται κατά μεγάλο βαθμό η Γλώσσα) δεν υπάρχει πρόβλημα με το αρνητικό βήμα γιατί εκεί υπάρχει το DOWNTO οπότε ξέρεις αν ανεβαίνεις ή κατεβαίνεις. Δεν θα ήταν πιο απλό και λογικό αν υπήρχε ένα αντίστοιχο DOWNTO και στη Γλώσσα;
Στην Pascal δεν υπάρχει ΜΕ_ΒΗΜΑ. Το downto ισοδυναμεί με "ΜΕ_ΒΗΜΑ -1". Αφού όμως η ΓΛΩΣΣΑ υποστηρίζει ΜΕ_ΒΗΜΑ, το downto θα ήταν πλεονασμός.
Η Basic και αν θυμάμαι καλά και η Fortran μοιάζουν πολύ με τη ΓΛΩΣΣΑ στη λειτουργία της ΓΙΑ.
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: gpapargi στις 19 Νοε 2007, 12:18:24 ΜΜ
Έχεις δίκιο για το <>. Όμως υπάρχει άλλο πρόβλημα. Αν θέλουμε η Για να έχει έλεγχο συνθήκης στην αρχή (σαν την Όσο) και θέλουμε να μη δείχνεται κάποια προτίμηση σε κάποια από τις 2 κατευθύνσεις, τότε έχουμε πρόβλημα μετατροπής από τη Για σε Όσο.  Άλλο δεν ξέρουμε κι άλλο δεν γίνεται. Και προκύπτει το ερώτημα «Γιατί είναι ατέρμων βρόχος η Για με βήμα 0;». Για να δεχτώ κάτι τέτοιο θα πρέπει να δω κάτι… πχ μια μετατροπή σε ισοδύναμη Όσο, ή έστω ένα διάγραμμα ροής. Διαφορετικά είναι κάτι σαν ορισμός. Δε μου αρέσει να είναι ορισμός το ότι Για με βήμα 0 εκτελεί άπειρες επαναλήψεις. Θέλω να προκύπτει από τη μετατροπή της σε Όσο ή σε διάγραμμα ροής.
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: dionissis στις 28 Νοε 2007, 03:18:38 ΜΜ
το πρόβλημα στο μεταβαλλόμενο βήμα είναι ότι η ΓΛΩΣΣΟΜΑΘΕΙΑ και ΓΛΩΣΣΑ δίνουν διαφορετικά αποτελέσματα για τον ίδιο αλγόριθμο με μεταβαλλόμενο βήμα μέσα στην επανάληψη, γιατί η ΓΛΩΣΣΑ ορίζει το βήμα μία φορά πριν ξεκινήσει η επανάληψη και δεν το ελέγχει αν αλλάζει μέσα στον βρόγχο, σε αντίθεση με την ΓΛΩΣΣΟΜΑΘΕΙΑ η οποία ουσιαστικά το μετατρέπει σε ΟΣΟ οπότε και λειτουργεί με αυτόν τον τρόπο δηλ να μεταβάλει το βήμα κατά την εκτέλεση .

ΠΡΟΓΡΑΜΜΑ τεστ_για2
ΜΕΤΑΒΛΗΤΕΣ
  ΠΡΑΓΜΑΤΙΚΕΣ: χ, Ν
ΑΡΧΗ
  Ν <- 1.1
  ΓΙΑ χ ΑΠΟ 1 ΜΕΧΡΙ 10 ΜΕ_ΒΗΜΑ Ν
    ΓΡΑΨΕ χ, Ν
    Ν <- Ν + 5
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΟΘΟΝΗ ΓΛΩΣΣΑΣ

1.00 1.10
2.10 6.10
3.20 11.10
4.30 16.10
5.40 21.10
6.50 26.10
7.60 31.10
8.70 36.10
9.80 41.10


ΟΘΟΝΗ ΓΛΩΣΣΟΜΑΘΕΙΑΣ

1 1.10
7.10 6.10



Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: alkisg στις 28 Νοε 2007, 03:51:58 ΜΜ
Κώδικας (ΓΛΩΣΣΑ) [Επιλογή]

Ν <- 1
ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 100 ΜΕ_ΒΗΜΑ Ν
  ΔΙΑΒΑΣΕ Ν
  ΓΡΑΨΕ ι, Ν
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


Κι αν στο παραπάνω ο χρήστης άλλοτε δίνει θετικό Ν κι άλλοτε αρνητικό τι γίνεται; Δεν θα τελειώσει ποτέ η επανάληψη; Δεν έρχεται αυτό σε αντίθεση με το ότι "η ΓΙΑ χρησιμοποιείται για σταθερό αριθμό επαναλήψεων";

Πιστεύω ότι η σωστή μετάφραση της ΓΙΑ σε ΟΣΟ είναι αυτή που έγραψα στην προηγούμενη σελίδα (https://alkisg.mysch.gr/steki/index.php?topic=1118.msg7185#msg7185). Το κακό είναι ότι δεν έχει ένα παράρτημα το βιβλίο καθηγητή με σχετικές επεξηγήσεις...
Τίτλος: Απ: μεταβλητή για βήμα
Αποστολή από: gpapargi στις 29 Νοε 2007, 09:41:08 ΠΜ
Ξέρεις τι με χαλάει στο βήμα 0; Ότι αν χτυπάει λάθος ο Διερμηνευτής τελικά η Για με βήμα 0 δεν είναι ατέρμων βρόχος όπως λέει το βιβλίο. Είναι λάθος. Θα ήθελα να είναι ατέρμων, δηλαδή να ξεκινάει και να μην τελειώνει ποτέ. Αλλά για να γίνει κάτι τέτοιο θα πρέπει να έχεις κι εσύ ένα ορισμό μετατροπής.