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

Γενικό Λύκειο => Αλγοριθμική και Προγραμματισμός => Διερμηνευτής της ΓΛΩΣΣΑΣ => Μήνυμα ξεκίνησε από: nikolasmer στις 08 Φεβ 2017, 04:58:30 ΜΜ

Τίτλος: Αλλαγή αρχικής ή τελικής τιμής ή βήματος εντός της Για
Αποστολή από: nikolasmer στις 08 Φεβ 2017, 04:58:30 ΜΜ
Τι είδους λάθος είναι;
Δε θυμάμαι σε ποιό νήμα έχει απαντηθεί;
(Στο Διερμηνευτή είπαμε γιατί τρέχει και δεν βγάζει λάθος;)
Τίτλος: Απ: Αλλαγή αρχικής ή τελικής τιμής ή βήματος εντός της Για
Αποστολή από: alkisg στις 08 Φεβ 2017, 09:18:45 ΜΜ
Είναι λάθος... τακτικής. Σαν την goto, δεν προτείνεται λόγω του ότι κάνει το πρόγραμμα πιο δυσνόητο (αν θυμάμαι καλά κάπου στο βιβλίο καθηγητή το αναφέρει πιο αναλυτικά). Έτσι δεν έχει νόημα να απαγορευτεί από το περιβάλλον του Διερμηνευτή.
Το να αλλάξει η αρχική τιμή βέβαια δεν είναι και ιδιαίτερο πρόβλημα, γιατί η αρχική τιμή έτσι κι αλλιώς δεν ξαναχρησιμοποιείται μέσα στο βρόχο.
Το να αλλάξει η τελική τιμή ή το βήμα προκαλεί και ένα ζήτημα καθοριστικότητας, το αν θα χρησιμοποιείται η νέα τελική τιμή (όπως θα γινόταν στην όσο) ή η παλιά τελική τιμή, όπως κάνει ο Διερμηνευτής: https://alkisg.mysch.gr/ΓΛΩΣΣΑ/ΓΙΑ/ (https://alkisg.mysch.gr/%CE%93%CE%9B%CE%A9%CE%A3%CE%A3%CE%91/%CE%93%CE%99%CE%91/) - η οποία συμπίπτει με την υλοποίηση κάποιας Pascal που είχα ελέγξει.

Δες και αυτό: https://alkisg.mysch.gr/steki/index.php?topic=1797.0;all
Τίτλος: Απ: Αλλαγή αρχικής ή τελικής τιμής ή βήματος εντός της Για
Αποστολή από: evry στις 08 Φεβ 2017, 09:45:03 ΜΜ
Το έχουμε ξαναθίξει το θέμα. Στο τετράδιο μαθητή το παρουσιάζει ως κακή πρακτική
Ποτέ μη χρησιμοποιείς εντολές που αλλάζουν την αρχική τιμή, την τελική τιμή, το βήμα ή τη μεταβλητή που ελέγχει την επανάληψη μέσα σε ένα βρόχο ΓΙΑ. Αν και μερικές γλώσσες προγραμματισμού επιτρέπουν αυτές τις αλλαγές, να τις αποφεύγεις, γιατί οδηγούν σε προγράμματα δυσνόητα και συνήθως λανθασμένα.
έχει σταλεί από το ΠΙ και σχετική οδηγία.
Τίτλος: Απ: Αλλαγή αρχικής ή τελικής τιμής ή βήματος εντός της Για
Αποστολή από: nikolasmer στις 08 Φεβ 2017, 09:51:44 ΜΜ
Άρα επειδή είναι κακή προγραμματιστική τεχνική δεν είναι συντακτικό η λογικό λάθος.
Και επειδή τρέχει στον Διερμηνευτή δε σημαίνει πως είναι και αποδεκτό. Σωστά;

Ανακεφαλαίωση γιατί παίζονται καναδυο καφέδες στοίχημα στους μαθητές μου. Απλά αυτό...

Evry στην Python δουλεύει;;;
Τίτλος: Απ: Αλλαγή αρχικής ή τελικής τιμής ή βήματος εντός της Για
Αποστολή από: evry στις 08 Φεβ 2017, 10:57:29 ΜΜ
Σε όλες τις σύγχρονες γλώσσες υπάρχει η break για τη βίαιη διακοπή του βρόχου η οποία χρησιμοποιείται ευρέως.
Η αλλαγή του μετρητή γενικά δεν είναι καλή ιδέα.
Αυτό που μπορείς να πεις στους μαθητές σου είναι ότι αν στις εξετάσεις κάνουν κάτι τέτοιο θα χάσουν μονάδες και ότι δεν επιτρέπεται στο μάθημα.
Τίτλος: Απ: Αλλαγή αρχικής ή τελικής τιμής ή βήματος εντός της Για
Αποστολή από: nikolasmer στις 08 Φεβ 2017, 11:47:00 ΜΜ
Παράθεση από: evry στις 08 Φεβ 2017, 10:57:29 ΜΜ
Σε όλες τις σύγχρονες γλώσσες υπάρχει η break για τη βίαιη διακοπή του βρόχου η οποία χρησιμοποιείται ευρέως.
Η αλλαγή του μετρητή γενικά δεν είναι καλή ιδέα.

Ναι σωστά .
Επίσης χωρίς να θέλω να ξεφύγω από τον τίτλο του νήματος , αυτή η Continue πέρα από το να μας τερματίζει την συγκεκριμένη επανάληψη , ποια είναι η χρησιμότητα της; ( εννοώ , σε ένα πιο ευρύ πλαίσιο)
Τίτλος: Απ: Αλλαγή αρχικής ή τελικής τιμής ή βήματος εντός της Για
Αποστολή από: itt στις 09 Φεβ 2017, 06:13:09 ΜΜ
Παράθεση από: nikolasmer στις 08 Φεβ 2017, 11:47:00 ΜΜ
Ναι σωστά .
Επίσης χωρίς να θέλω να ξεφύγω από τον τίτλο του νήματος , αυτή η Continue πέρα από το να μας τερματίζει την συγκεκριμένη επανάληψη , ποια είναι η χρησιμότητα της; ( εννοώ , σε ένα πιο ευρύ πλαίσιο)

Τι εννοείς ποια είναι η χρησιμότητά της σε πιο ευρύ πλαίσιο;  Εννοείς από high-level σκοπιά, γιατί να κάνεις skip ένα iteration του βρόγχου;

Συνήθως η λογική για την continue (και συμμετρικά για την break) είναι κάτι τέτοιο:

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

for(..) {
  if(!condition) continue | break;
  // do cool things here
}


Δηλαδή ελέγχεις κάποιο precondition για το στοιχείο που είσαι (ή για κάποιο άλλο state τελοσπάντων) στην αρχή του iteration και άμα δεν σε ικανοποιήσει  ή σκιπάρεις το στοιχείο ή σταματάς εντελώς.

Το να βάζεις continue βαθιά μέσα στον βρόγχο γενικά _πρέπει_ να αποφεύγεται γιατί μπορεί να σου δημιουργήσει τεράστιο πρόβλημα στο reasoning του τι κάνει ο κώδικας.
Τίτλος: Απ: Αλλαγή αρχικής ή τελικής τιμής ή βήματος εντός της Για
Αποστολή από: evry στις 09 Φεβ 2017, 08:14:11 ΜΜ
Δεν έχω χρησιμοποιήσει ποτέ continue ενώ break χρησιμοποιώ συνεχώς. Πάντα μου φαινόταν πολύ περίεργη εντολή και εγώ είχα την απορία για την χρησιμότητά της.
Η μόνη εξήγηση που μπορώ να δώσω είναι ότι αυτός που την σκέφτηκε βαριόταν να χρησιμοποιεί την if και να βάζει τα σύμβολα { } για την οριοθέτηση ενός μπλοκ.
Η continue σε αντίθεση με την break είναι μια εντολή που νομίζω ότι θα μπορούσε να δημιουργήσει πολλά προβλήματα σε μεγάλα τμήματα κώδικα.
Τίτλος: Απ: Αλλαγή αρχικής ή τελικής τιμής ή βήματος εντός της Για
Αποστολή από: itt στις 09 Φεβ 2017, 09:22:38 ΜΜ
Γενικά υπάρχει χρήση για το continue, μπορείς να βελτιώσεις το readability του κώδικα εαν σου γλυτώσει deep nesting.

Πχ. κάτι τέτοιο:

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

for(...) {
    foo();
    bar();
   
    if(condition) {
       DoCoolThings1();
       DoCoolThings2();
       if(anotherCondition) {
          DoCoolThings3();
       }
    }

}


μπορείς να το κάνεις rewrite σε κάτι τέτοιο:

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

for(...) {
    foo();
    bar();
   
    if(!condition) continue;

    DoCoolThings1();
    DoCoolThings2();

    if(!anotherCondition) continue;

    DoCoolThings3();
       
}
Τίτλος: Απ: Αλλαγή αρχικής ή τελικής τιμής ή βήματος εντός της Για
Αποστολή από: akalest0s στις 05 Ιουλ 2017, 10:21:40 ΜΜ
Παράθεση από: evry στις 08 Φεβ 2017, 10:57:29 ΜΜ
Σε όλες τις σύγχρονες γλώσσες υπάρχει η break για τη βίαιη διακοπή του βρόχου η οποία χρησιμοποιείται ευρέως.
Η αλλαγή του μετρητή γενικά δεν είναι καλή ιδέα.
Αυτό που μπορείς να πεις στους μαθητές σου είναι ότι αν στις εξετάσεις κάνουν κάτι τέτοιο θα χάσουν μονάδες και ότι δεν επιτρέπεται στο μάθημα.
Εννοείται ότι αποτρέπω τους μαθητές μου από τέτοια χρήση. Αλλά βρίσκω ευκαιρία να ρωτήσω μια απορία μου. Από το "δεν είναι καλή ιδέα", μέχρι το "θα χάσουν μονάδες, δεν επιτρέπεται στο μάθημα", δεν είναι μεγάλη η απόσταση; Ειδικά με δεδομένο ότι (δυστυχώς) ακόμη και τα κριτήρια αλγορίθμων (καθοριστικότητα) δεν εξετάζονται ουσιαστικά πάνω στις ασκήσεις...
::)
Τίτλος: Απ: Αλλαγή αρχικής ή τελικής τιμής ή βήματος εντός της Για
Αποστολή από: ilias_s στις 02 Αυγ 2017, 03:17:38 ΜΜ
Παράθεση από: akalest0s στις 05 Ιουλ 2017, 10:21:40 ΜΜ
Εννοείται ότι αποτρέπω τους μαθητές μου από τέτοια χρήση. Αλλά βρίσκω ευκαιρία να ρωτήσω μια απορία μου. Από το "δεν είναι καλή ιδέα", μέχρι το "θα χάσουν μονάδες, δεν επιτρέπεται στο μάθημα", δεν είναι μεγάλη η απόσταση; Ειδικά με δεδομένο ότι (δυστυχώς) ακόμη και τα κριτήρια αλγορίθμων (καθοριστικότητα) δεν εξετάζονται ουσιαστικά πάνω στις ασκήσεις...
::)

Εδώ υπάρχει ένα "αλλά".

Μέχρι σήμερα και εγώ θα έλεγα πως κάτι τέτοιο δεν είναι "καλή πρακτική" και θα πρέπει να αποφεύγεται γενικά και ΕΚΕΙ θα τελείωνε η κουβέντα ΑΛΛΑ...

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

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

Υ.Γ : Φέτος, για παράδειγμα, ένα ερώτημα του Α1 βασίζονταν στο ότι μπορούμε να κάνουμε μία ΓΙΑ να μην επαναλαμβάνεται καμία φορά (πράγμα που στην πράξη αποφεύγουμε γενικά). Αφού όμως ρώτησαν κάτι τέτοιο (που δεν το λες και καλή πρακτική) γιατί να μη ρωτήσουν και αυτό?