Μετατροπή δομής Όσο...Επανάλαβε σε Για...Από...Μέχρι

Ξεκίνησε από evry, 11 Δεκ 2007, 03:01:48 ΜΜ

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

evry


    Αν σας έλεγαν να μετατρέψετε την παρακάτω δομή επανάληψης σε Για...Από...Μέχρι τι θα απαντούσατε?

Ι <-- 27
ΟΣΟ Ι <= 28 ΕΠΑΝΑΛΑΒΕ
   ΕΜΦΑΝΙΣΕ Ι
   Ι <-- Ι  - 8
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

clevercitizen

Ατέρμονος βρόγχος? Χρησιμοποιούμε την ΓΙΑ όταν ξέρουμε τον ακριβή αριθμό επαναλήψεων. Εδώ οι επαναλήψεις είναι άπειρες.
ΘΕΛΩ
                ΑΛΛΑΓΗ
                ΕΚΠΑΙΔΕΥΤΙΚΟΥ
                ΣΥΣΤΗΜΑΤΟΣ

alkisg

Κώδικας: ΓΛΩΣΣΑ
ΓΙΑ ι ΑΠΟ 27 ΜΕΧΡΙ 28 !ΜΕ_ΒΗΜΑ 1
  ΓΡΑΨΕ ι
  ι <- ι - 9
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


:) :) :) lol

Βρακόπουλος Αθανάσιος Λ.

#3
Αυτή η επανάληψη εκτελείται άπειρες φορές.
Μια τέτοια δομή επανάληψης δεν μπορεί να γραφεί με το την δομή «Για».
Η δομή επανάληψης  «Για» χρησιμοποιείται για να  εκφράσουμε επανάληψη με καθορισμένο αριθμό επαναλήψεων.
Το τμήμα αλγορίθμου:
ΓΙΑ ι ΑΠΟ 27 ΜΕΧΡΙ 28 !ΜΕ_ΒΗΜΑ 1
  ΓΡΑΨΕ ι
  ι <- ι - 9
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

δεν πρέπει να έχει την εντολή "ι <- ι - 9" διότι αυτή αλλάζει την τιμή της μεταβλητής "ι".

alkisg

Εννοείται ότι το πρότεινα για αστείο, γι' αυτό έβαλα και τα lol (laugh out loud) στο τέλος...

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

EleniK

και εγώ νομίζω θα έγραφα οτι δε γίνεται η μεατροπή, λόγω του ότι είναι ατερμων.
Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19

Χάρης Τσιαΐρης

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

Χάρης Τσιαΐρης

prapasl

Στα θέματα Εσπερινών Ιουνίου 2007 έχει την εξής ερώτηση:

(ΘΕΜΑ 1β)
Δίνεται η παρακάτω εντολή:

Για Α από Β μέχρι Γ με_βήμα Δ
  Εμφάνισε "ΚΑΛΗΣΠΕΡΑ"
Τέλος_επανάληψης

Να γράψετε στο τετράδιό σας πόσες φορές εκτελείται η εντολή Εμφάνισε για καθένα από τους παρακάτω συνδυασμούς των τιμών των μεταβλητών Β, Γ και Δ:
1. Β = 2 Γ = 5 Δ = 1
2. Β =-1 Γ = 1 Δ = 0,5
3. Β =-7 Γ =-6 Δ =-5
4. Β = 5 Γ = 5 Δ = 1

Στον συνδυασμό 3 η απάντηση είναι άπειρες ή καμμία;

Η μετατροπή σε Όσο είναι αυτή...

Α <-- -7
ΟΣΟ Α >= -6 ΕΠΑΝΑΛΑΒΕ
  ΕΜΦΑΝΙΣΕ 'ΚΑΛΗΣΠΕΡΑ'
  Α <-- Α - 5
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

... οπότε δεν εκτελείται καμμία ή αυτή...

Α <-- -7
ΟΣΟ Α <= -6 ΕΠΑΝΑΛΑΒΕ
  ΕΜΦΑΝΙΣΕ 'ΚΑΛΗΣΠΕΡΑ'
  Α <-- Α - 5
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

... οπότε εκτελείται άπειρες !!

Τελικά η φορά του τελεστή σύγκρισης αποφασίζεται από το βήμα (αν θετικό τότε <=, αν αρνητικό >=) ή από το αν τα όρια τιμών του μετρητή πηγαίνουν από κάτω προς τα πάνω (<=) ή από πάνω προς τα κάτω (>=); Είναι προφανές ότι το ένα κριτήριο έρχεται σε σύγκρουση με το άλλο.

Στις τάξεις διαφορετικοί καθηγητές δίνουν διαφορετικές απάντήσεις.
Παρακαλώ πείτε τη γνώμη σας.
Λεωνίδας Πράπας
Καθηγητής ΠΕ19, MSc Πληροφορικής

Αλεξόπουλος Ανδρέας

Σύμφωνα και με τα παραδείγματα του βιβλίου το πρώτο, δηλαδή το βήμα καθορίζει την φορά του τελεστή σύγκρισης. Εξάλλου η ερώτηση αυτή είναι παρόμοια με το παράδειγμα που αναφέρει το βιβλίο στη σελίδα 44 στο πλάι αριστερά όπου λέει ότι ο βρόχος "Για κ από 5 μέχρι 1" (ενοείται το βήμα θετικό) δεν εκτελείται καμμία φορά. Δηλαδή εδώ έχουμε αρχική τιμή μεγαλύτερη της τελικής και βήμα θετικό, ενώ η ερώτηση στις πανελλήνιες ήταν αρχική τιμή μικρότερη της τελικής και βήμα αρνητικό

P.Tsiotakis

Ακριβώς Ανδρέα..

Λεωνίδα, μας βλέπω να καραφλιάζουμε

andreas_p

Στις τάξεις διαφορετικοί καθηγητές δίνουν διαφορετικές απάντήσεις.

To  καθηγητές , αν το βάλεις σε   '  '  τότε  ...  είμαστε  οκ. (no comment)


Ανδρέας

MichaelP

Αν και εχει να λαβει απαντησεις καιρό, θα ήθελα να ρωτησω, ποιο το πρόβλημα του να μεταβάλλεται η μεταβλητη της ΓΙΑ εντός του block αυτης, αν ο κώδικας που προκύπτει δεν είναι ατερμων βρογχος, δηλαδή πληροί τα αλγοριθμικά κριτηρια; :-\

Μ.

Laertis

Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

evry

  Παραβιάζει τα κριτήρια ορθότητας της δομής Για όπως αυτή ορίζεται στο τετράδιο του μαθητή και φέρνει σε δύσκολη θέση
τους συγγραφείς του διδακτικού πακέτου >:D

Παράθεση από: MichaelP στις 04 Δεκ 2008, 04:05:15 ΠΜ
Αν και εχει να λαβει απαντησεις καιρό, θα ήθελα να ρωτησω, ποιο το πρόβλημα του να μεταβάλλεται η μεταβλητη της ΓΙΑ εντός του block αυτης, αν ο κώδικας που προκύπτει δεν είναι ατερμων βρογχος, δηλαδή πληροί τα αλγοριθμικά κριτηρια; :-\

Μ.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

pgrontas

Παράθεση από: evry στις 04 Δεκ 2008, 04:01:00 ΜΜ
  Παραβιάζει τα κριτήρια ορθότητας της δομής Για όπως αυτή ορίζεται στο τετράδιο του μαθητή και φέρνει σε δύσκολη θέση
τους συγγραφείς του διδακτικού πακέτου >:D

Παράθεση από: MichaelP στις 04 Δεκ 2008, 04:05:15 ΠΜ
Αν και εχει να λαβει απαντησεις καιρό, θα ήθελα να ρωτησω, ποιο το πρόβλημα του να μεταβάλλεται η μεταβλητη της ΓΙΑ εντός του block αυτης, αν ο κώδικας που προκύπτει δεν είναι ατερμων βρογχος, δηλαδή πληροί τα αλγοριθμικά κριτηρια; :-\

Μ.

Σωστός!!!
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

MichaelP

Θα μπορούσαμε να ισχυριστούμε ότι είναι αυτό που λέμε: "Κακή προγραμματιστική τεχνική". Σαφώς και είναι διότι, δεν συμβάλει στην ευκολία συντήρισης του κώδικα. Αυτό όμως δε σημαίνει ότι απαγορεύεται... Με κάτι τέτοιο θα συμφωνούσα, αλλά δεν θα συμφωνίσω, με όλο το σεβασμό, ότι ή δομή έχει κριτήρια ορθότητας πέρα απο το συντακτικό της.
Επιπλέον, σκευθείτε ότι το βιβλίο αναφέρει πως η μόνη δομή επανάληψης που πάντα εκτελείται τουλάχιστον μία φορά είναι η "Αρχή_Επανάληψης" και που υποννοεί σαφώς ότι η "Για" μπορεί να μήν εκτελεστεί ούτε μία φορά όταν τέλος>αρχή και βήμα < 0 (ή αντίστροφα) και αυτό δεν θεωρείται κακή προγραμματιστική τεχνική, συμπεραίνουμε ότι υπάρχει ασάφεια ως προς τα όρια χρήσης των δομών.
Άλλο παράδειγμα είναι το άν "επιτρέπεται" η χρήση της "Για" με όρια ή/και βήμα μεταβλητές. Αυτό θεωρείται καλή προγραμματιστική τεχνική; Κατα τη γνώμη μου ναι γιατι συμβάλει στη δημιουργία μικρότερου και πιό συμπαγούς κώδικα...

Με εκτίμηση.

Μ.

ntzios kostas

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

Σούλας Βασίλης

#17
Μετατρέπετε:

ΓΙΑ Ι ΑΠΟ 27 ΜΕΧΡΙ 28 ΜΕ_ΒΗΜΑ -8
  ΕΜΦΑΝΙΣΕ Ι
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

και θα εκτελεστεί μηδέν φορές. Το Ι<--Ι-8 είναι το βήμα και δεν μπαίνει μέσα νομίζω. Έχω φτιάξει κάτι σχετικά με τις μετατροπές των δομών επανάληψης.
Σούλας Βασίλης
Ηλεκτρολόγος Μηχανικός & Μηχανικός Η/Υ Δ.Π.Θ.
Καθηγητής Πληροφορικής ΠΕ19
http://users.sch.gr/vasisoulas
http://eclass.sch.gr/modules/auth/opencourses.php?fc=%D4-52

andreas_p

Στην 1η μετατροπή  :

Όχι πάντα  το   "Εντολές"  πριν την ΟΣΟ.

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

Καλή χρονιά

Σούλας Βασίλης

Ναι το εντολές στην πρώτη μετατροπή δεν βγαίνει πάντα έξω. Βγαίνει έξω όταν η συνθήκη περιέχει μεταβλητές που διαβάζονται, αν δεν έχει μεταβλητές που διαβάζονται είναι περιτό να τις βγάλεις έξω αλλά όχι λάθος. Έχεις δίκιο επανάλαβε και όχι επανέλαβε. (ο δαίμων του πληκτρολογίου  :D)

Καλή χρονιά!!!!
Σούλας Βασίλης
Ηλεκτρολόγος Μηχανικός & Μηχανικός Η/Υ Δ.Π.Θ.
Καθηγητής Πληροφορικής ΠΕ19
http://users.sch.gr/vasisoulas
http://eclass.sch.gr/modules/auth/opencourses.php?fc=%D4-52

evry

Όχι δεν μετατρέπεται, αυτό που έδωσες δεν εκτελείται καμία φορά, ενώ αυτό που έδωσα στην αρχή του thread εκτελείται άπειρες φορές. Ο σκοπός του ερωτήματος ήταν να δω τι πιστεύουν οι περισσότεροι για το συγκεκριμένο θέμα. Προσωπικά το θεωρώ αδιανόητο να εξαρτάται η συνθήκη στην Όσο από το πρόσημο του βήματος κατά τη μετατροπή αλλά αφού το λέει το βιβλίο τι να κάνουμε, το λέμε και εμείς στους μαθητές.....
  Απλά όταν βλέπεις πρώτη φορά το παρακάτω κομμάτι κώδικα
Κώδικας: ΓΛΩΣΣΑ
ΓΙΑ Ι ΑΠΟ 27 ΜΕΧΡΙ 28 ΜΕ ΒΗΜΑ -1
   ΕΜΦΑΝΙΣΕ Ι
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


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

Φυσικά αν ποτέ δεν είχαν βάλει μετατροπές δομών επανάληψης στις εξετάσεις δεν θα συζητάγαμε ποτέ αυτό το θέμα έτσι?

Παράθεση από: Σούλας Βασίλης στις 31 Δεκ 2008, 12:11:43 ΠΜ
Μετατρέπετε:

ΓΙΑ Ι ΑΠΟ 27 ΜΕΧΡΙ 28 ΜΕ_ΒΗΜΑ -8
  ΕΜΦΑΝΙΣΕ Ι
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

και θα εκτελεστεί μηδέν φορές. Το Ι<--Ι-8 είναι το βήμα και δεν μπαίνει μέσα νομίζω. Έχω φτιάξει κάτι σχετικά με τις μετατροπές των δομών επανάληψης.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

evry

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

Παράθεση από: Σούλας Βασίλης στις 31 Δεκ 2008, 11:34:50 ΠΜ
Ναι το εντολές στην πρώτη μετατροπή δεν βγαίνει πάντα έξω. Βγαίνει έξω όταν η συνθήκη περιέχει μεταβλητές που διαβάζονται, αν δεν έχει μεταβλητές που διαβάζονται είναι περιτό να τις βγάλεις έξω αλλά όχι λάθος.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Σούλας Βασίλης

#22
Για την μετατροπή την οποία ξεκίνησες στην αρχή του thread έχεις απόλυτο δίκιο. Για την μετατροπή της αρχή_επανάληψης σε Όσο.. επανάλαβε απλά δίνω ένα γενικό τρόπο, αν τώρα θα μπουν οι εντολές μια φορά απ' έξω πιστεύω ότι είναι εύκολο να διακριθεί, αλλά και να τις βάλει κάποιος λέω δεν θα είναι λάθος γιατί την μετατροπή την έκανε. Αν βάλει τις εντολές όσες φορές εκτελείται η επανάληψη μπορεί να μην είναι λάθος αλλά μετατροπή δεν κάνει με χρήση της Όσο.
Σούλας Βασίλης
Ηλεκτρολόγος Μηχανικός & Μηχανικός Η/Υ Δ.Π.Θ.
Καθηγητής Πληροφορικής ΠΕ19
http://users.sch.gr/vasisoulas
http://eclass.sch.gr/modules/auth/opencourses.php?fc=%D4-52

Σούλας Βασίλης

#23
ΠαράθεσηΑν σας έλεγαν να μετατρέψετε την παρακάτω δομή επανάληψης σε Για...Από...Μέχρι τι θα απαντούσατε?

Κώδικας:

Ι <-- 27
ΟΣΟ Ι <= 28 ΕΠΑΝΑΛΑΒΕ
   ΕΜΦΑΝΙΣΕ Ι
   Ι <-- Ι  - 8
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Τι λέτε γι αυτό;

Ι <-- 27
ΓΙΑ Κ ΑΠΟ 1 ΜΕΧΡΙ 3 ΜΕ_ΒΗΜΑ 0 !ότι αρχ. τιμή, τελ. τιμή θέλουμε
ΕΜΦΑΝΙΣΕ Ι
Ι <-- Ι-8
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Αφού έχει τα ίδια αποτελέσματα με το Όσο... επανάλαβε και χρησιμοποιώ την Για θεωρείται σωστό; Η έννοια της μετατροπής είναι να κάνω κάτι ισοδύναμο με την χρήση της Για αντί της Όσο; Πιστεύω ότι αυτή η μετατροπή καλύπτει αυτό που μας ζητήται να κάνουμε.
Σούλας Βασίλης
Ηλεκτρολόγος Μηχανικός & Μηχανικός Η/Υ Δ.Π.Θ.
Καθηγητής Πληροφορικής ΠΕ19
http://users.sch.gr/vasisoulas
http://eclass.sch.gr/modules/auth/opencourses.php?fc=%D4-52

evry

#24
Ενδιαφέρουσα μετατροπή, ας περιμένουμε να μπει ο νέος χρόνος για να δούμε τι θα πουν και οι άλλοι συνάδελφοι
για την παραπάνω μετατροπή

Καλή Χρονιά σε όλους με υγεία και ευτυχία
μακάρι οι ευχές σας να βγουν αληθινές, η δική μου ευχή είναι:
να βγει από την ύλη το κεφάλαιο 6 και να μπουν τα 3 (ολόκληρο), 4 και 5  :Dκαι Ειρήνη στον Κόσμο
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

gpapargi

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

Αν λοιπόν το βήμα της Για είναι αρνητικό, ο τελεστής  της Όσο είναι >=. Άρα  το «Ι <= 28» και το «Ι <-- Ι-8» δεν πάνε μαζί. Το ότι κάθε για μετατρέπεται σε Όσο δε σημαίνει ότι ισχύει και το αντίστροφο. Δεν μετατρέπεται κάθε Όσο σε Για ακόμα κι αν έχει το μετρητή στο τέλος και τελεστή <= ή >=. Δεν έχει αρκετή ελευθερία η εντολή Για προκειμένου να κάνει κάτι τέτοιο.

P.Tsiotakis

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

Eri

Παράθεση από: Σούλας Βασίλης στις 31 Δεκ 2008, 01:56:27 ΜΜ
ΠαράθεσηΑν σας έλεγαν να μετατρέψετε την παρακάτω δομή επανάληψης σε Για...Από...Μέχρι τι θα απαντούσατε?

Κώδικας:

Ι <-- 27
ΟΣΟ Ι <= 28 ΕΠΑΝΑΛΑΒΕ
   ΕΜΦΑΝΙΣΕ Ι
   Ι <-- Ι  - 8
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Τι λέτε γι αυτό;

Ι <-- 27
ΓΙΑ Κ ΑΠΟ 1 ΜΕΧΡΙ 3 ΜΕ_ΒΗΜΑ 0 !ότι αρχ. τιμή, τελ. τιμή θέλουμε
ΕΜΦΑΝΙΣΕ Ι
Ι <-- Ι-8
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Αφού έχει τα ίδια αποτελέσματα με το Όσο... επανάλαβε και χρησιμοποιώ την Για θεωρείται σωστό; Η έννοια της μετατροπής είναι να κάνω κάτι ισοδύναμο με την χρήση της Για αντί της Όσο; Πιστεύω ότι αυτή η μετατροπή καλύπτει αυτό που μας ζητήται να κάνουμε.


Μα το παραπάνω παράδειγμα παραβιάζει το κριτήριο της περατότητας, άρα ΔΕΝ είναι αλγόριθμος!! Τι μετατροπή να γίνει;; Νομίζω κάτι τέτοιο θα ήταν εντελώς άτοπο ως θέμα... ετσί δεν είναι είναι;

gpapargi

Παράθεση από: Τσιωτάκης Παναγιώτης στις 05 Ιαν 2009, 10:47:22 ΠΜ
Κάθε Όσο μπορεί να μετατραπεί σε Για, καθώς θεωρούμε οτι μπορούμε να διακόψουμε την επανάληψη του Για, αλλάζοντας την τιμή του μετρητή εντός του βρόχου

Είσαι ο τελευταίος από τον οποίο θα περίμενα να ακούσω κάτι τέτοιο  ;D :D

Εννοώ χωρίς αλλαγές μετρητών, goto και γενικά διάφορα "απαγορευμένα" κόλπα.

Καλή χρονιά σε όλους (το παρέλειψα πριν)

P.Tsiotakis

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

Εγώ λέω πως ΠΟΤΕ να μην το κάνουμε (όπως λέει και το τετράδιο μαθητή).

Το ερώτημά μου αυτό είναι στην ίδια κατηγορία με το "ποιες είναι τελικά οι δεσμευμένες λέξεις στις ψευδογλώσσα?"

pgrontas

Καλά Παναγιώτη με κούφανες και μένα.

Η άποψη την οποία υποστήριζα ανέκαθεν (δείτε και μια έντονη συζήτηση για σχετικό θέμα στις πανελλήνιες του 2007 ) είναι ότι όλες οι δομές επανάληψης είναι ισοδύναμες.
Κάποιες συστήνεται (η λέξη κλειδί εδώ) να χρησιμοποιούνται σε ειδικές περιπτώσεις στην ψευδογλώσσα-γλώσσα (πχ. η ΓΙΑ σε γνωστό αριθμό επαναλήψεων) κάποιες είναι πιο γενικές. Συμφωνώ στο ότι είναι καλό οι μαθητές να εξασκούνται στην πειθαρχία σωστής χρήσης της κάθε δομής. Αυτό δεν σημαίνει όμως πως δεν είναι δυνατόν να μετατρέψουμε την μία στην άλλη ή πολύ περισσότερο αν δούμε μια τέτοια λύση να την κόψουμε χωρίς να δούμε προσεκτικά την σκέψη του μαθητή.

Χρόνια πολλά και καλή χρονιά σε όλους.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

P.Tsiotakis

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

Και επιμένω οτι βλέπω πολύ μικρή την πιθανότητα κάποιος μαθητής απο μόνος του να χρησιμοποιήσει με τέτοιο τρόπο τη δομή Για.

Laertis

Ας συζητήσουμε τώρα το θέμα της Μετατροπής του Ευριπίδη σε Άρη ...
Είναι ή δεν είναι εφικτή ;  :)
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

ntzekakis

Ηθελά να επαναφέρω το θέμα της μετατροπής της ΟΣΟ σε ΓΙΑ.
Θέλω να ρωτήσω αν μπορώ να έχω σαν βήμα της ΓΙΑ μια μεταβλητή. Πιστεύω ότι αν γνωρίζω το πρόσημο αυτής της μεταβλητής δεν θα ήταν λάθος. Τι λέτε;

P.Tsiotakis

Ναι...

Βέβαια δεν πρέπει η μεταβλητή αυτή να έχει την τιμή 0 (άπειρες επαναλήψεις)

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

Τη μεταβλητή αυτή σκοπεύεις να τη "μεταβάλεις" κατά τη διάρκεια των επαναλήψεων;

vistrian

#36
καλημέρα συνάδελφοι. Η παρακάτω μετατροπή είναι σωστή; Έχω έναν ενδιασμό για το μετρητή της Για

Διάβασε χ
α← 35
Εκτύπωσε α
Όσο α<=χ επανάλαβε
   α← α + α div 6
   Εκτύπωσε α
Τέλος_επαναληψης
Εμφάνισε "--------------------"

Δίαβασε χ
α←35
εκτύπωσε α
Για α απο α + 5 μέχρι χ + 5 με_βημα α div 6
   Εκτύπωσε α
Τέλος_επανάληψης
VR in Computing

Laertis

Το βήμα δε μπορεί να μεταβάλλεται σε κάθε επανάληψη.
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

meteo_xampos

Ναι, αλλά το τμήμα κώδικα που δίνεται παραπάνω τρέχει στο pseudoglossa.gr...

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

Από την επίσημη διευκρίνηση του υπουργείου: http://dide.ilei.sch.gr/keplinet/education/docs/aepp_yp_2010.pdf

...αντιγράφω:

Όσον αφορά τη μεταβολή του μετρητή μιας ΓΙΑ μέσα στο βρόχο του, δεύτερη υπόδειξη της σελίδας 78 του Τετραδίου Μαθητή αναφέρεται: «Ποτέ μην χρησιμοποιείς εντολές που αλλάζουν την αρχική τιμή, την τελική τιμή, το βήμα ή τη μεταβλητή που ελέγχει την επανάληψη μέσα σε ένα βρόχο ΓΙΑ. Αν και μερικές γλώσσες προγραμματισμού επιτρέπουν αυτές τις αλλαγές, να τις αποφεύγεις, γιατί οδηγούν σε προγράμματα δυσνόητα και συνήθως λανθασμένα». Από το απόσπασμα αυτό προκύπτει ότι η ΓΛΩΣΣΑ δεν περιλαμβάνεται στις «μερικές γλώσσες προγραμματισμού». Επίσης, στο Βιβλίο Μαθητή στην ενότητα 8.2.3, σελ. 179, για τη λειτουργία της ΓΙΑ ... ΑΠΟ ... ΜΕΧΡΙ αναφέρεται: «ΛΕΙΤΟΥΡΓΙΑ Οι εντολές του βρόχου εκτελούνται για όλες τις τιμές της μεταβλητής από την αρχική τιμή μέχρι την τελική τιμή, αυξανόμενες με την τιμή του βήματος. Αν το βήμα είναι ίσο με 1, τότε παραλείπεται». Από τα προαναφερθέντα προκύπτει ότι η ΓΛΩΣΣΑ αποκλείει τη μεταβολή του μετρητή.

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

gthal

Κατ' αρχήν θέλω να πω ότι δεν έχω καμία αντίρρηση η ΓΛΩΣΣΑ, ως εκπαιδευτική γλώσσα, να μην επιτρέπει τη μεταβολή των εν λόγω μεταβλητών.

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

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

και το κορυφαίο, κάπου εκεί στη μέση αναφέρει ένα απόσπασμα του βιβλίου:
«... Αν και μερικές γλώσσες προγραμματισμού επιτρέπουν αυτές τις αλλαγές, να τις αποφεύγεις, γιατί οδηγούν σε προγράμματα δυσνόητα και συνήθως λανθασμένα»
και σχολιάζει:
Από το απόσπασμα αυτό προκύπτει ότι η ΓΛΩΣΣΑ δεν περιλαμβάνεται στις «μερικές γλώσσες προγραμματισμού».
Μάλιστα !!!   :D
Τότε και από τη δήλωση "μερικές γλώσσες προγραμματισμού δεν είναι αντικειμενοστραφείς" προκύπτει ότι η ΓΛΩΣΣΑ δεν ανήκει σε αυτές, άρα η ΓΛΩΣΣΑ είναι αντικειμενοστραφής!   :D
Φιλικά,
Γιώργος Θαλασσινός