αλλαγη μετρητη Για

Ξεκίνησε από ΜΑΚΡΙΔΑΚΗ ΣΤΕΛΛΑ, 10 Δεκ 2014, 02:32:34 ΜΜ

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

ΜΑΚΡΙΔΑΚΗ ΣΤΕΛΛΑ

Καλησπέρα, θα ήθελα να κάνω μία ερώτηση.

Γίνεται να πειράξουμε τον μετρητή της Για μέσα στο βρόχο της;
π.χ. Για i απο 1 μέχρι 45
           διαβασε χ
           Αν (χ=0) τοτε
                i=46
           τελος_αν
       Τέλος επανάληψης

Laertis

Καλό είναι να μην το κάνεις. Είναι μια ΚΑΚΗ προγραμματιστική τακτική. Εφόσον η επαναληπτική δομή που θέλεις ελέγχεται (και) απο συνθήκη (χ=0) είναι προτιμότερη η χρήση της Όσο, οπότε :

  i <-- 1
Διάβασε χ
Όσο χ <> 0 και   i<=45 επανάλαβε
    i <--   i + 1
   Διάβασε χ
Τέλος_επανάληψης
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

programmer

Γενικα αυτο που ρωτησε η στελλα εμενα ου αρεσει παρα πολυ και με εχει σωσει αρκετες φορες και μου χει γλιτωσει και γραμμες κωδικα.μαλιστα δειχνει οποιος το ξερει αυτο οτι εχει καταλαβει εις βαθος τις δομες τις εντολες και πως λειτουργουν.εγω παντως δεν το θεωρω κακη τακτικη ισα ισα εντυπωσιαστηκα και μπραβο απο μενα που το σκεφτηκες

Λαμπράκης Μανώλης

Παράθεση από: programmer στις 12 Φεβ 2015, 06:06:36 ΠΜ
Γενικα αυτο που ρωτησε η στελλα εμενα ου αρεσει παρα πολυ και με εχει σωσει αρκετες φορες και μου χει γλιτωσει και γραμμες κωδικα.μαλιστα δειχνει οποιος το ξερει αυτο οτι εχει καταλαβει εις βαθος τις δομες τις εντολες και πως λειτουργουν.εγω παντως δεν το θεωρω κακη τακτικη ισα ισα εντυπωσιαστηκα και μπραβο απο μενα που το σκεφτηκες

καλημέρα σε όλους

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

programmer

ναι νταξει καλα κανεις και το λες εσυ και οντως το βιβλιο απο οτι θυμαμαι το 2010 που εδινα ετσι το ειχε.αλλα νταξει το χουν κανει πολυ οτι να ναι το μαθημα ενω στην πραγματικοτητα ειναι παρα πολυ ωραιο και ενδιαφερον.και πιστευω οτι ολοι πρεπει να ξεκινησουν μαθαινοντας ΓΛΩΣΣΑ.τωρα στο πανεπιστημιο που εχουμε και τετοια εχω μαθει c c ++ fortran javascript python java php ktl και με βοηθησε πολυ αυτο το μαθημα και πιστευω οτι θα επρεπε να αφηνουν απο το υπουργειο τα παιδια να ανακαλυψουν την ομορφια αυτου του μαθηματος και να μην ζαλιζουν τους καθηγητες πες τα ετσι και καντα ετσι

itt

Παράθεση από: mkouv στις 12 Φεβ 2015, 08:03:04 ΠΜ
καλημέρα σε όλους

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

Πολύ καλά κάνει και δεν συμφωνεί με αυτήν την τακτική, δεδομένου ότι είναι εντελώς anti pattern. Ποτέ και για κανέναν λόγο δεν πρέπει να πειράζεται ο μετρήτης της Για έτσι.

programmer

Παράθεση από: itt στις 13 Φεβ 2015, 12:14:29 ΠΜ
Πολύ καλά κάνει και δεν συμφωνεί με αυτήν την τακτική, δεδομένου ότι είναι εντελώς anti pattern. Ποτέ και για κανέναν λόγο δεν πρέπει να πειράζεται ο μετρήτης της Για έτσι.
εγω απο την αλλη πιστευω οτι ο προγραμματισμος ειναι φαντασια.ο καθενας με τη γνωμη του.απο τη στιγμη που και αυτη η λογικη δουλευει για μενα δεν ειναι λαθος.φυσικα προτιμαται η οσο για τετοιες δουλειες αλλα και αν το κανει καποιος με για δεν ειναι λαθος ασχετα με το αν συνηθιζεται η οχι.βεβαια στις εξετασεις του λυκειου δεν ξερω πως βαθμολογουν διαφοροι.εγω μιλαω γενικα για προγραμματσμο.μαλιστα στο πανεποστημιο οταν ημουν πρωτο ετος μας ειχε πεσει κατι παρομοιο να μετατρεψουμε μια οσο σε για που ειχε και συνθηκη ελεγχου.τωρα αν το υπουργειο για το συγκεκριμενο μαθημα εχει τις δικες του παραξενιες τι να πω.αναθεμα κι αν αυτοι οι τυποι εχουν ιδεα απο προγραμματισμο.

itt

Παράθεση από: programmer στις 13 Φεβ 2015, 12:23:22 ΠΜ
εγω απο την αλλη πιστευω οτι ο προγραμματισμος ειναι φαντασια.ο καθενας με τη γνωμη του.απο τη στιγμη που και αυτη η λογικη δουλευει για μενα δεν ειναι λαθος.φυσικα προτιμαται η οσο για τετοιες δουλειες αλλα και αν το κανει καποιος με για δεν ειναι λαθος ασχετα με το αν συνηθιζεται η οχι.βεβαια στις εξετασεις του λυκειου δεν ξερω πως βαθμολογουν διαφοροι.εγω μιλαω γενικα για προγραμματσμο.μαλιστα στο πανεποστημιο οταν ημουν πρωτο ετος μας ειχε πεσει κατι παρομοιο να μετατρεψουμε μια οσο σε για που ειχε και συνθηκη ελεγχου.τωρα αν το υπουργειο για το συγκεκριμενο μαθημα εχει τις δικες του παραξενιες τι να πω.αναθεμα κι αν αυτοι οι τυποι εχουν ιδεα απο προγραμματισμο.

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

ether

Παράθεση από: programmer στις 13 Φεβ 2015, 12:23:22 ΠΜ
εγω απο την αλλη πιστευω οτι ο προγραμματισμος ειναι φαντασια.ο καθενας με τη γνωμη του.απο τη στιγμη που και αυτη η λογικη δουλευει για μενα δεν ειναι λαθος.φυσικα προτιμαται η οσο για τετοιες δουλειες αλλα και αν το κανει καποιος με για δεν ειναι λαθος ασχετα με το αν συνηθιζεται η οχι.βεβαια στις εξετασεις του λυκειου δεν ξερω πως βαθμολογουν διαφοροι.εγω μιλαω γενικα για προγραμματσμο.μαλιστα στο πανεποστημιο οταν ημουν πρωτο ετος μας ειχε πεσει κατι παρομοιο να μετατρεψουμε μια οσο σε για που ειχε και συνθηκη ελεγχου.τωρα αν το υπουργειο για το συγκεκριμενο μαθημα εχει τις δικες του παραξενιες τι να πω.αναθεμα κι αν αυτοι οι τυποι εχουν ιδεα απο προγραμματισμο.
Μια και σπουδάζεις Πληροφορική, και προφανώς σ' ενδιαφέρει ιδιαίτερα ο προγραμματισμός, καλό είναι να έχεις υπόψη και τα must read για οποιονδήποτε θέλει ν' ασχολείται σοβαρά με development. Δες τι λέει σχετικά με την αλλαγή μετρητή σε ένα for loop ένα από τα κλασσικά must read για developers, το Code Complete του Steve McConnel
https://books.google.gr/books?id=I-83BAAAQBAJ&lpg=PA377&ots=4ER0wHmz8m&dq=Don't%20monkey%20with%20the%20loop%20index%20of%20a%20for%20loop%20to%20make%20the%20loop%20terminate&hl=el&pg=PA377#v=onepage&q=Don't%20monkey%20with%20the%20loop%20index%20of%20a%20for%20loop%20to%20make%20the%20loop%20terminate&f=false

evry

Στο Code Complete λέει ότι όποιος πειράζει τον μετρητή μέσα στο Για είναι ερασιτέχνης. οκ, γιατί όμως?
Δεν λέει πουθενά γιατί ούτε το τεκμηριώνει. Για ποιο λόγο αυτό είναι κακή πρακτική?
Το ότι το λέει κάποιος όποιος και να είναι αυτός δεν σημαίνει ότι εμείς πρέπει να το δεχτούμε. Ποια ακριβώς είναι τα επιχειρήματα που καθιστούν κάτι τέτοιο πολύ κακό?
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

ether

#10
Παράθεση από: evry στις 14 Φεβ 2015, 03:08:32 ΜΜ
Στο Code Complete λέει ότι όποιος πειράζει τον μετρητή μέσα στο Για είναι ερασιτέχνης. οκ, γιατί όμως?
Δεν λέει πουθενά γιατί ούτε το τεκμηριώνει. Για ποιο λόγο αυτό είναι κακή πρακτική?
Το ότι το λέει κάποιος όποιος και να είναι αυτός δεν σημαίνει ότι εμείς πρέπει να το δεχτούμε. Ποια ακριβώς είναι τα επιχειρήματα που καθιστούν κάτι τέτοιο πολύ κακό?
1. Διάβασε μια παράγραφο παραπάνω: "Make loop-termination conditions obvious. If you use a for loop and don't fool around with the loop index and don't use a goto or break to get out of the loop, the termination condition will be obvious. Likewise, if you use a while or repeat-until loop and put all the control in the while or repeat-until clause, the termination condition will be obvious. The key is putting the control in one place".
Υποθέτω ότι πολλοί από όσους έχουν συντηρήσει αρκετά κώδικα, θα συμφωνούν σε μεγάλο βαθμό ότι η παραπάνω συμβουλή διευκολύνει πολύ τη συντηρησιμότητα του κώδικα.
2. Προφανώς και δεν πρέπει να το δεχτείς. Καλό είναι όμως να το έχεις κι αυτό στα υπόψη, όπως και τα παραπάνω και παρακάτω που λέει, δηλαδή όλο το βιβλίο. Ειδικά όταν αυτός που τα λέει και το βιβλίο στο οποίο τα αναφέρει χαίρουν εκτιμήσεως πολλών καταξιωμένων ανθρώπων (κι επαγγελματιών) του χώρου του λογισμικού (μεταξύ των οποίων Ralph Johnson, John Vlissides, Diomidis Spinellis, Martin Fowler, Grady Booch, Jon Bentley, Alan Cooper)
http://cc2e.com/Default.aspx?hid=338


evry

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

programmer



καταρχας δεν σπουδαζω πληροφορικη αλλα ηλεκτρολογος μηχανικος.ακομα το κολπακι αυτο μου το εμαθε εννοω τα πλεονεκτηματα του φιλος μου ο οποιος ασχολειται με χακκιν και πιστεψε με ξερει πιο πολλα απο ολους μας εδω μεσα.και μαλιστα αυτος μου ειχε πει το εξης:αυτοι που ακολου8ουν τους κανονες δεν ξεχωριζουν ποτε.και εγω αυτο με τη για σε διαφορες γλωσσες το εχω κανει και μαλιστα εχω δεχτει και μπραβο απο καθηγητες.ο καθενας λοιπον με τη γνωμη του
ακομα δεν θα με πεισει ενα βιβλιο οτι κατι κανω λαθος επειδη ετσι το λεει ενω αντιθετως το προγραμμα τρεχει μια χαρα.αφηστε λοιπον τα παιδια να μαθουν προγραμματισμο ουσιαστικα αν θελετε και μην τους κανετε το μαθημα σαν το Α.Ο.Δ.Ε

fupat2

#13
Αν κάποιος φτάσει να διαβάζει το loop, σχεδόν με την ίδια ευκολία θα καταλάβει τον κώδικα είτε είναι γραμμένος με τον ένα τρόπο είτε με τον άλλο.

ΠαράθεσηΓια i απο 1 μέχρι 45
           διαβασε χ
           Αν (χ=0) τοτε
                i=46
           τελος_αν
       Τέλος επανάληψης

To ερώτημα που πρέπει να μας απασχολεί στον παραπάνω κώδικα είναι τι είναι η i , γιατί πάει μέχρι 45, και γιατί την ονόμασε i και όχι κάπως αλλιώς. Το ότι βγαίνει ανορθόδοξα έξω από το Loop, άλλους δυσκολεύει και άλλους διευκολύνει στην κατανόηση. Ενώ το ότι ονομάζει i την μεταβλητή, αυτό όλους τους δυσκολεύει στο να κατανοήσουν.

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

Σήμερα όμως; Είναι λογικό να κάνουμε οικονομία στην μνήμη εις βάρος της αναγνωσιμότητας του κώδικα; Τα i και x είναι μια κακιά συνήθεια. Ακόμα και αν γράφεις σε low level προγραμματισμό, η σωστή πρακτική για να είναι αναγνώσιμος ο κώδικάς σου είναι να δίνεις μαζί με τον κώδικά σου και έναν εξωτερικό αρχείο-χάρτη με νοηματικώς σωστά ονόματα μεταβλητών που να αντιστοιχούν στα i και χ που χρησιμοποιείς (λόγω οικονομίας στην μνήμη).

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

Η παιδεία είναι άσκηση ελευθερίας, που λυτρώνει τόσο τον μαθητή όσο και τον παιδαγωγό από μια δίδυμη υποδούλωση. Την υποδούλωση της σιωπής (που αφορά κυρίως τον μαθητή) και την υποδούλωση του μονολόγου (που αφορά κυρίως τον παιδαγωγό).

ether

Παράθεση από: evry στις 14 Φεβ 2015, 05:09:00 ΜΜ
Επίσης λέει ότι δεν πρέπει να χρησιμοποιείς ούτε break, το οποίο όμως το χρησιμοποιούν πάρα πολλά βιβλία.
Επίσης δεν αναφέρεται συγκεκριμένα στην for. μιλάει για οποιαδήποτε δομή επανάληψης.
Αν διαβάσεις παρακάτω, λέει και για περιπτώσεις που μπορεί η χρήση break να οδηγεί σε πιο ευανάγνωστο και ευκολοσυντήρητο κώδικα. Προφανώς όταν λέμε ότι καλό είναι γενικά να κάνουμε κάτι ή να αποφεύγουμε κάτι άλλο, δε σημαίνει ότι δεν υπάρχουν και περιπτώσεις που βολεύει να το κάνουμε ή να μην το κάνουμε. Ακόμη και η εξω-απο-δω GOTO, σε περίπτωση εμφωλευμένου βρόχου με πολλά επίπεδα εμφώλευσης όπου απαιτείται υπό κάποιες συνθήκες η έξοδος από όλα, θα μπορούσε σε κάποιες περιπτώσεις να βολεύει η χρήση της. Αυτό δε σημαίνει ότι γενικά πρέπει να τη χρησινοποιούμε. Απλά καλό είναι να έχουμε υπόψη τι θεωρείται best-practise σε κάποιο πεδίο, για να κρίνουμε καλύτερα και πότε "αξίζει" να αποκλίνουμε.