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

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

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

itt

Παράθεση από: programmer στις 14 Φεβ 2015, 05:09:39 ΜΜ

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

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

itt

Παράθεση από: fupat2 στις 14 Φεβ 2015, 05:15:09 ΜΜ
Αν κάποιος φτάσει να διαβάζει το loop, σχεδόν με την ίδια ευκολία θα καταλάβει τον κώδικα είτε είναι γραμμένος με τον ένα τρόπο είτε με τον άλλο.

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

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

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

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

Ναι οκ, όταν γράφεις for-loop σε οποιαδήποτε γλώσσα σε οποιοδήποτε non trivial codebase το convention που ακολουθείται κατά κανόνα (όπου κατα κανόνα = 99% των περιπτώσεων) είναι να χρησιμοποιείς το i επειδή συνήθως κάνεις index κάποιον πίνακα. Αυτός άλλωστε είναι και ο λόγος που θα έγραφες ένα vanilla for. Ο μοναδικός λόγος που δεν θα έβαζες i είναι επειδή κάνεις κάποια επεξεργασία σε pointers. Οπότε λοιπόν είναι πολύ λογικό να διδάσκεται το i στην Για, αφού καλύπτει μεγαλύτερο πλήθος περιπτώσεων.

ether

Παράθεση από: fupat2 στις 14 Φεβ 2015, 05:15:09 ΜΜ
Αν ήμουν υπουργός παιδείας και έβγαζα κανονισμούς βαθμολόγησης, θα έκοβα μονάδες στον παραπάνω κώδικα για την χρήση των i και χ και όχι γιατί βγαίνει ανορθόδοξα από το Loop.
Μας διαβάζουν και μαθητές...

fupat2

Παράθεση από: ether στις 15 Φεβ 2015, 08:52:08 ΠΜ
Μας διαβάζουν και μαθητές...

Καλά ντε! Μην μαλώνετε!
Είπα και εγώ μια βλακεία , να περάσει η ώρα!   ::)
Νομίζω πάντως ότι η συζήτηση σε αυτό το θρεντ είναι "περι όνου σκιάς"
Η παιδεία είναι άσκηση ελευθερίας, που λυτρώνει τόσο τον μαθητή όσο και τον παιδαγωγό από μια δίδυμη υποδούλωση. Την υποδούλωση της σιωπής (που αφορά κυρίως τον μαθητή) και την υποδούλωση του μονολόγου (που αφορά κυρίως τον παιδαγωγό).

itt

Παράθεση από: fupat2 στις 15 Φεβ 2015, 11:30:35 ΠΜ
Καλά ντε! Μην μαλώνετε!
Είπα και εγώ μια βλακεία , να περάσει η ώρα!   ::)
Νομίζω πάντως ότι η συζήτηση σε αυτό το θρεντ είναι "περι όνου σκιάς"

Το αντίθετο, κάποια πράγματα φαινομενικά μικρά, αξίζει να ξεκαθαριστούν. Το πρόβλημα είναι να μην κάνουμε ηλίθιες γενικεύσεις.

fupat2

Παράθεση από: itt στις 15 Φεβ 2015, 06:15:32 ΜΜ
Το αντίθετο, κάποια πράγματα φαινομενικά μικρά, αξίζει να ξεκαθαριστούν.

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

Και είναι και θέμα γούστου στην τελική.

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

programmer

Σε αυτο που λεμε ειναι οτι φυσικα και ο κανονας ελεγχου ειναι με οσο αλλα μερικες φορες αξιζει να παραστρατα κανεις.πχ σε μια ασκηση που εκανα εχτες απο εδω για εξασκηση μια με ποδοσφαιρο ηταν σε ενα σημειο που η οσο το παρατραβουσε με τους ελεγχους κτλ και επρεπε να βαλω μαλιστα 2 οσο.ζητουσε το προγραμμα να δωσει μια τιμη ο χρηστης και επρεπε να ελεγξω αν υπαρχει σε εναν πινακα.αν υπηρχε ξεραμε οτι ειναι μοναδικη.ε εβαλα λοιπον στην δευτερη για μεσα που ηταν απο 1 μεχρι 5 (το ιδιο και η πρωτη) i<-6 j<-6 μολις βρει το στοιχειο ωστε να μην συνεχιζουν οι ασκοπες επαναληψεις.ακομα ετσι δεν χρειαστηκα νεες μεταβλητες του τυπου βρεθηκε ωστε να σταματαει η οσο χρησιμοποιησα αυτες που ειχα ηδη γιατι ειχα ηδη αρκετες μεταβλητες και ηθελα οσο να ναι να τις περιορισω.αυτο εννοω εγω οτι μερικες φορες αξιζει να παραστρατεις.φυσικα για αυτους που ειναι τριτη λυκειου εγω προσωπικα λεω καλυτερα να μαθουν τωρα να δουλευουν με τους κανονες και στο πανεπιστημιο ασ πειραματιστουν οσο θελουν απλα αυτο που ειπα ειναι οτι πτοσωπικα εγω παραδεχομαι ενα παιδι τριτης λυκειου που εχει καταλαβει οτι η ΓΙΑ μπορει να χρησιμοποιηθει και ετσι γιατι αυτο σημαινει οτι δεν τα μαθαινει παπαγαλια στυλ αοδε αλλα εχει καταλαβει σε βαθος πως λειτουργει ενας αλγοριθμος/προγραμμα

programmer

Και κατι ακομα.στο λυκειο ειχα μαθει οτι το πλεονεκτημα της οσο εναντι της ΓΙΑ ειναι οτι μπορει να χρησιμοποιηθει παντα και παντου ενω η ΓΙΑ μονο οταν ξερω ποσες επαναληψεις θα κανω. αυτο φυσικα οπως καταλαβα τωρα που ασχολουμαι με προγραμματισμο οχι επειδη μου το εχει δειξει καποιος το συγκεκριμενο αλλα εμπειρικα ειναι οτι και η ΓΙΑ μπορει να χρησιμοποιηθει παντα και παντου χωρις καμια απολυτως εξαιρεση.το θεμα ειναι οτι θα ειναι 'ανορθοδοξος'
ο αλγοριθμος μας.πχ να γινει αλγοριθμος που θα διαβαζει αριθμους και θα τους εμφανιζει μεχρι ο χρηστης να δωσει τον αριθμο 0. ΤΕΛΕΙΩΣ ανορθοδοξο φυσικα!!!
απλα επειδη ειπα οτι παντα μπορω να χρησιμοποιησω την ΓΙΑ.

ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 1
    ΔΙΑΒΑΣΕ ΑΡΙΘΜΟΣ
    ΑΝ ΑΡΙΘΜΟΣ <> 0 ΤΟΤΕ
      ΓΡΑΨΕ "ΜΟΥ ΕΔΩΣΕΣ ΤΟ ", ΑΡΙΘΜΟΣ
      Ι <- Ι - 1
    ΑΛΛΙΩΣ
      Ι <- 2
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

petrosp13

Για ποιο λόγο τότε να υπάρχει η δομή "Για";
Για διαφορετικό προγραμματιστικό στυλ;
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

Laertis

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

programmer

αυτο που ακριβως ειπα οτι η για μπορει να χρησιμοποιηθει παντα.αλλα οπως ειπα και συμφωνω μαζι σας καποιες φορες ειναι πολυ προτιμοτερη η οσο και η για πρεπει να αποφευγεται.και ναι η ΓΙΑ για αυτο ακριβως υπαρχει. μερικες φορες ενας κωδικας ειναι πολυ πιο ευκολονοητος με οσο και αλλες φορες με για.το παραδειγμα που εδωσα παραπανω ειναι απλα για να δειξω οτι η για μπορει να κανει ακριβως τις ιδιες ενεργειες χωρις να δημιουργει σφαλματα.ακομα για γνωστες επαναληψεις εχει επικρατησει η χρηση της για συντομια του κωδικα εναντι της οσο.ετσι οταν εχουμε εναν μεγαλο κωδικα και εχουμε πολλες για και οσο ο αλλος να καταλαβαινει ευκολα τι κανει ο αλγοριθμος πχ οταν θα δει οσο ή για. σε περιπτωσεις λοιπον που ξερουμε ποσες επαναληψεις θα κανουμε η ΓΙΑ προσφερει ιδια αποτελεσματα γλιτωνοντας καποιες γραμμες κωδικα και επισης ο αλλος που διαβαζει τον κωδικα καταλαβαινει πιο ευκολα τι κανουμε και ποσες επαναληψεις.ενω με την οσο πχ θα καταλαβει οτι ελεγχουμε αν κατι ισχυει για να συνεχιστει η επαναληψη.το παραδειγμα που εδωσα ηταν φυσικα τελειως ακραιο και πρεπει να αποφευγεται για τους λογους που ειπαμε.ακομα η οσο με τη για και ποτε χρησιμοποιουμε το ενα και ποτε το αλλο βοηθαει τους μαητες τριτς λυκειου να τα διαχωρισουν στο μυαλο τους και να καταλαβουν καλυτερα καποια πραγματα.προσωπικα εμενα παντως αν καποιος εφτιαχνε εναν αλγοριθμο με μονο για και καθολου οσο για προσωπικη του χρηση δεν θα με ενοχλουσε καθολου.αν βεβαια δουλευε σε εταιριες που συνεργαζονται πολλοι ανθρωποι και φτιαχνει ο καθενας δικο του κομματι κωδικα πρεπει να γινει οσο πιο απλο γινεται και κατανοητο και τοτε while kai for χρησιμοποιουνται οπως γνωριζουμε.δλδ αν ενας θελέι να φτιαξει εναν αλγοριθμο με μονο για και χωρις οσο για την πλακα του και για δικη του χρηση θα του πω εγω:αυτο που εκανες ειναι λαθος.και θα μου πει αυτος:o compiler διαφωνει μαζι σου μιας και οτι ηθελα να κανει το προγραμμα το κανει μια χαρα.αυτο λοιπον που θελω να πω ειναι πως αν ενας αλγοριθμος ειναι για προσωπικη χρηση ας γινει οσο ανορθοδοξα θελει.αν ειναι σε εταιριες η συνεργαζονται πολλα ατομα πρεπει να γινει οσο πιο απλος γινεται για να τον καταλαβουν ολοι και να μπορουν ευκολα να διορθωθουν σφαλματα.αυτα

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

Πολύ το μπλέκουμε το πράγμα! Να με συγχωρείς αλλά το πλαίσιο της ΑΕΠΠ είναι πιο συγκεκριμένο από αυτό που προσπαθείς να πεις...!

Υ.Γ. Βάλε και κανένα τόνο και κανένα κεφαλαίο που και που!

ether

#27
Παράθεση από: programmer στις 16 Φεβ 2015, 11:54:16 ΜΜ
το παραδειγμα που εδωσα παραπανω ειναι απλα για να δειξω οτι η για μπορει να κανει ακριβως τις ιδιες ενεργειες χωρις να δημιουργει σφαλματα
Όχι σε όλες τις γλώσσες. Π.χ. σε διάφορες "εκδόσεις" της PASCAL και της FORTRAN, η απόπειρα αλλαγής του μετρητή της FOR στο σώμα της επανάληψης είναι συντακτικό σφάλμα.
Επίσης, από θεωρητική σκοπιά, στη Θεωρία Υπολογισιμότητας ορίζονται οι έννοιες του LOOP program και του WHILE program. Ένα LOOP πρόγραμμα (που από δομές επανάληψης περιέχει μόνο τη LOOP, κάτι σαν τη FOR/ΓΙΑ δηλαδή) τερματίζει πάντοτε. Αντίθετα, υπάρχουν WHILE προγράμματα που περιέχουν και δομές επανάληψης WHILE, τα οποία μπορεί και να μην τερματίσουν ποτέ. Στις γλώσσες προγραμματισμού που επιτρέπουν την αλλαγή της τιμής του μετρητή ή υποστηρίζουν την εντολή break κ.α., προκειμένου να διευκολύνεται ο προγραμματιστής σε συγκεκριμένες περιπτώσεις, προφανώς δεν ισχύει αυτή η διαφορά.

evry

με διαφορά η πιο εύστοχη παρατήρηση σε αυτή τη συζήτηση....
Παράθεση από: Laertis στις 16 Φεβ 2015, 03:16:54 ΜΜ
......  ??? έχει χαθεί εντελώς το μέτρο ή μου φαίνεται ; Τι προσπαθείς να (μας) αποδείξεις programmer ;
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

fupat2

Μάλλον το παρακάτω θέλει να πει: ::)

Παράθεση από: programmer στις 16 Φεβ 2015, 11:54:16 ΜΜ
Aυτο που ακριβως ειπα οτι η για μπορει να χρησιμοποιηθει παντα.
Aλλα οπως ειπα και συμφωνω μαζι σας καποιες φορες ειναι πολυ προτιμοτερη η οσο και η για πρεπει να αποφευγεται.
Kαι ναι η ΓΙΑ για αυτο ακριβως υπαρχει.
Mερικες φορες ενας κωδικας ειναι πολυ πιο ευκολονοητος με οσο και αλλες φορες με για.
Tο παραδειγμα που εδωσα παραπανω ειναι απλα για να δειξω οτι η για μπορει να κανει ακριβως τις ιδιες ενεργειες χωρις να δημιουργει σφαλματα.
Aκομα για γνωστες επαναληψεις εχει επικρατησει η χρηση της για συντομια του κωδικα εναντι της οσο.
Eτσι οταν εχουμε εναν μεγαλο κωδικα και εχουμε πολλες για και οσο ο αλλος να καταλαβαινει ευκολα τι κανει ο αλγοριθμος πχ οταν θα δει οσο ή για.
Σε περιπτωσεις λοιπον που ξερουμε ποσες επαναληψεις θα κανουμε η ΓΙΑ προσφερει ιδια αποτελεσματα γλιτωνοντας καποιες γραμμες Κωδικα και επισης ο αλλος που διαβαζει τον κωδικα καταλαβαινει πιο ευκολα τι κανουμε και ποσες επαναληψεις.ενω με την οσο πχ θα καταλαβει οτι ελεγχουμε αν κατι ισχυει για να συνεχιστει η επαναληψη.
Το παραδειγμα που εδωσα ηταν φυσικα τελειως ακραιο και πρεπει να αποφευγεται για τους λογους που ειπαμε.
Ακομα η οσο με τη για και ποτε χρησιμοποιουμε το ενα και ποτε το αλλο βοηθαει τους μαητες τριτς λυκειου να τα διαχωρισουν στο μυαλο τους και να καταλαβουν καλυτερα καποια πραγματα.
Προσωπικα εμενα παντως αν καποιος εφτιαχνε εναν αλγοριθμο με μονο για και καθολου οσο για προσωπικη του χρηση δεν θα με ενοχλουσε καθολου.
Αν βεβαια δουλευε σε εταιριες που συνεργαζονται πολλοι ανθρωποι και φτιαχνει ο καθενας δικο του κομματι κωδικα πρεπει να γινει οσο πιο απλο γινεται και κατανοητο και τοτε while kai for χρησιμοποιουνται οπως γνωριζουμε.
Δλδ αν ενας θελέι να φτιαξει εναν αλγοριθμο με μονο για και χωρις οσο για την πλακα του και για δικη του χρηση θα του πω εγω:"αυτο που εκανες ειναι λαθος."
Και θα μου πει αυτος:"o compiler διαφωνει μαζι σου μιας και οτι ηθελα να κανει το προγραμμα το κανει μια χαρα."
Αυτο λοιπον που θελω να πω ειναι πως αν ενας αλγοριθμος ειναι για προσωπικη χρηση ας γινει οσο ανορθοδοξα θελει.
Αν ειναι σε εταιριες η συνεργαζονται πολλα ατομα πρεπει να γινει οσο πιο απλος γινεται για να τον καταλαβουν ολοι και να μπορουν ευκολα να διορθωθουν σφαλματα.

Αυτα

πάντως Programmer , αν θες να κάνεις ακόμα πιο δύσκολο να σε διαβάζουν, δοκίμασε να γράφεις και έτσι:

Παράθεση από: programmer στις 16 Φεβ 2015, 11:54:16 ΜΜ
αυτο που αιβκρως ειπα οτι η για μρποει να χροποησιμιηθει πτανα.αλλα οπως ειπα και σφωυμνω μαζι σας κοιαπες φεορς ειναι πολυ πμοτερροτιη η οσο και η για περεπι να αγετποφευαι.και ναι η ΓΙΑ για αυτο αριβκως υρχπαει. μρικεες φεορς ενας κδικωας ειναι πολυ πιο ευονοκολητος με οσο και αλελς φεορς με για.το παδαρειγμα που εσδωα ππααρανω ειναι απλα για να δξειω οτι η για μρποει να κανει αβκριως τις ιδιες εγεινερες χωρις να δυρημιογει σαφαλμτα.ακομα για γστενως εαληπανψεις εχει εατηπικρσει η χσρηη της για σμιυντοα του κδικωα ετνανι της οσο.

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