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

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

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

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

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

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

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