"Παράξενοι" Αλγόριθμοι με "Για"

Ξεκίνησε από DaKnOb, 25 Ιαν 2013, 03:45:51 ΜΜ

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

DaKnOb

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

Έλεγχος Δεδομένων χωρίς δομή επανάληψης μέσα σε Για


Άγνωστος Αριθμός Επαναλήψεων με Για


Ατέρμων Βρόγχος με Για


***

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

Ποιά είναι η γνώμη σας;

petrosp13

Το βιβλίο αναφέρει οτι δεν είναι καλή τακτική να αλλάζει με εντολή εντός επανάληψης ο μετρητήσ της για και αυτό αρκεί
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

DaKnOb

Παράθεση από: petrosp13 στις 25 Ιαν 2013, 06:39:00 ΜΜ
Το βιβλίο αναφέρει οτι δεν είναι καλή τακτική να αλλάζει με εντολή εντός επανάληψης ο μετρητήσ της για και αυτό αρκεί

Το θέμα είναι πως δουλεύει. Μπορεί να μην είναι καλή πρακτική, και 100% αν ήμουν καθηγητής δεν θα το ανέφερα καν στους μαθητές, αλλά δεν παύει να λειτουργεί. :P

evry

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

Παράθεση από: DaKnOb στις 25 Ιαν 2013, 09:29:25 ΜΜ
Το θέμα είναι πως δουλεύει. Μπορεί να μην είναι καλή πρακτική, και 100% αν ήμουν καθηγητής δεν θα το ανέφερα καν στους μαθητές, αλλά δεν παύει να λειτουργεί. :P

Πάντως το θέμα πραγματικά δεν είναι αν δουλεύει ή όχι. Είναι απλά θέμα ορισμού. Οποιοσδήποτε μπορεί να φτιάξει μια γλώσσα και να μην δουλεύει κάτι τέτοιο. Δεν έχει καμία σημασία αλγοριθμικά. Ο αλγόριθμος δεν αλλάζει. Είναι καθαρά τυπολατρικό θέμα.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

DaKnOb

Παράθεση από: evry στις 25 Ιαν 2013, 10:16:27 ΜΜ
όχι , το θέμα δεν είναι αν δουλεύει, το θέμα είναι αν ρισκάρεις να το γράψεις στις εξετάσεις και να σου κόψουν , ή θα "συμβιβαστείς" ώστε να πετύχεις τη μεγαλύτερη δυνατή βαθμολογία.

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

P.Tsiotakis

και το goto δουλεύει
γιατί αλλάζεις το μετρητή και δε βάζεις ένα Πήγαινε;;;

DaKnOb

Παράθεση από: Παναγιώτης Τσιωτάκης στις 25 Ιαν 2013, 11:32:57 ΜΜ
και το goto δουλεύει
γιατί αλλάζεις το μετρητή και δε βάζεις ένα Πήγαινε;;;
Δεν το μάθαμε πουθενά. Προφανώς αν υποστηρίζεται το GOTO, μπορούμε να κάνουμε έλεγχο δεδομένων και δομές επανάληψης με Αν. Ούτε καν δομή επανάληψης. Και να κάνουμε έλεγχο με Όσο. ;)

P.Tsiotakis

κεφάλαιο 6 σε βιβλίο και τετράδιο μαθητή

ψάξε εκεί που λέει "μαύρο πρόβατο". Το μαύρο (ως σημειολογία) σημαίνει οτι δεν πρέπει να το κάνουμε, όπως το κάπνισμα (επιτρέπεται αλλά είναι επιβλαβές).

DaKnOb

Παράθεση από: Παναγιώτης Τσιωτάκης στις 26 Ιαν 2013, 03:01:46 ΜΜ
κεφάλαιο 6 σε βιβλίο και τετράδιο μαθητή

ψάξε εκεί που λέει "μαύρο πρόβατο". Το μαύρο (ως σημειολογία) σημαίνει οτι δεν πρέπει να το κάνουμε, όπως το κάπνισμα (επιτρέπεται αλλά είναι επιβλαβές).

Το οτι συμπεριλαμβάνεται σε αυτό το κομματι το ξέρω, δεν ήξερα πως μπορεί να χρησιμοποιηθεί στην ΓΛΩΣΣΑ και σε Αλγόριθμους.
Πάντως είναι πολύ πιο εύκολο να γίνονται τα διαγράμματα ροής με επαναλήψεις έτσι.. :P

Ή σαν τύπους σαν κι εμένα που μου αρέσει μερικές φορές να κάνω obfuscate τον κώδικα και να γίνει αδιάβαστος

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

Παράθεση από: DaKnOb στις 26 Ιαν 2013, 04:29:00 ΜΜ
Ή σαν τύπους σαν κι εμένα που μου αρέσει μερικές φορές να κάνω obfuscate τον κώδικα και να γίνει αδιάβαστος

Πάντως σχετικά με τη βαθμολόγηση της ΑΕΠΠ, αν ο κώδικας δεν διαβάζεται τότε ο βαθμολογητής πώς θα το αξιολογήσει;

noname

Ενδιαφέροντα όλα αυτά αλλά εξηγούνται πολύ απλά από τη στιγμή που το:
Για ι από 1 μέχρι Ν
Τέλος_επανάληψης

Αντιστοιχεί στο:
ι <- 1
Όσο ι<=Ν επανάλαβε
  ι <- ι + 1
Τέλος_επανάληψης


Μου θύμισες έναν μαθητή που έγραφε στους αλγόριθμους κάτι τέτοια:
Π.χ. σε άθροισμα
S <- (S + X*E(0))/ΣΥΝ(0)

Αν και είναι σωστό δεν νομίζω ότι βοηθάει ιδιαίτερα στην εικόνα του γραπτού σου.


DaKnOb

Παράθεση από: noname στις 27 Ιαν 2013, 03:21:13 ΜΜ
Μου θύμισες έναν μαθητή που έγραφε στους αλγόριθμους κάτι τέτοια:
Π.χ. σε άθροισμα
S <- (S + X*E(0))/ΣΥΝ(0)

Αν και είναι σωστό δεν νομίζω ότι βοηθάει ιδιαίτερα στην εικόνα του γραπτού σου.

Κι εγώ τέτοια γράφω. Έχω μάθει και χρησιμοποιώ όσο πιο λίγες μεταβλητές γίνεται..

nikolasmer

Τώρα κόλλησα.
κ ← 4
Για i από 1 μέχρι κ με_βήμα 1
  κ ← κ + 1
  Εμφάνισε "*"
Τέλος_επανάληψης
Εμφάνισε κ


Μμμμ... η τελική τιμή παραμένει αναλλοίωτη από την αρχή μέχρι το τέλος. Και δεν αλλοιώνω το βήμα της i μέσα στη Για. Στο τέλος εμφανίζεται 8.
Δηλαδή εδώ λέμε πως η κ στην τελική τιμή της Για είναι By Value ή δεν ισχύει κάτι τέτοιο;
Μερεντίτης Νικόλαος
Πληροφορικός

petrosp13

Εκτός από την μεταβλητή, απαγορεύεται να μεταβάλλεις εντός επανάληψης και την τελική τιμή και το βήμα
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

nikolasmer

Μερεντίτης Νικόλαος
Πληροφορικός

nikolasmer

κ <-- 4
Για i από 1 μέχρι κ με_βήμα 2
  κ <-- κ – 2
  Εμφάνισε 'ΟΕΦΕ'
Τέλος_Επανάληψης

Για αυτό το θέμα ΟΕΦΕ 2008 είχαμε σχολιάσει τίποτα παλιότερα;
Μερεντίτης Νικόλαος
Πληροφορικός

itt

Πιστεύω ότι το να μεταβάλεις το range του Για δεν θεωρείται στα πλαίσια του μαθήματος δομήμενος προγραμματισμός. (Επίσης κάτι τέτοιο  δεν είναι και maintainable). Γενικά άστοχο θέμα.

Γιάννης Αναγνωστάκης

Παράθεση από: itt στις 02 Νοε 2013, 11:06:51 ΠΜ
Πιστεύω ότι το να μεταβάλεις το range του Για δεν θεωρείται στα πλαίσια του μαθήματος δομήμενος προγραμματισμός. (Επίσης κάτι τέτοιο  δεν είναι και maintainable). Γενικά άστοχο θέμα.

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

Διαβασε α,β
Για ι απο α μέχρι β
...
)

προφανώς και μπορεί να παίξει..(και εχει παίξει με την περιβόητη διαμάχη -> Θέμα Γ, 2010 )



itt

Παράθεση από: janag79 στις 02 Νοε 2013, 11:48:39 ΠΜ
Εγώ θα έλεγα το να αλλάξεις το range της Για μέσα στη Για δεν υπάγεται στην φιλοσοφία του μαθήματος (άσχετα αν μπορεί να υλοποιηθεί σε κανονικές γλώσσες προγραμματισμού..) Το να έχει όμως μεταβλητή αρχή και μεταβλητό τέλος (το οποίο θα καθορίζεται πριν την Για, του στυλ:

Ήταν ασαφές έτσι όπως το έγραψα, αυτό που εννοούσα είναι ότι δεν θα πρέπει να μεταβάλεις το range από το εσωτερικό της Για.