Για i απο...

Ξεκίνησε από coolio, 15 Φεβ 2006, 08:06:07 ΜΜ

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

coolio

Ειμαι μαθητής της 3ης ταξης του ενιαίου λυκειου και έχω κάποια παράπονα σχετικα με το μαθημα!

Επειδή γνωρίζω αρκετα καλα μπορώ να πω , τρεις γλώσσες προγραμματισμου, βλέπω πως στις ασκήσεις του βιβλίου παρουσιάζονται μεγάλα κενα και σκοτεινά μερη για την επεξήγηση της "ψευδογλώσσας" !

Θα ήθελα κάποιος να μου απαντήσει στις :

1)Γινεται διάκριση πεζών/ κεφλαίων στη γλώσσα;
2)Δεν αναφέται η σειρα "ισχυρότητας των λογικών τελεστών!
   Γνωρίζω πως η σειρά τους είναι ΟΧΙ, ΚΑΙ , Η , αλλα στο βιββλιο δεν αναφέρεται πουθενά αυτό! ΕΠΕΙΔΗ δεν αναφέρεται η σειρά στις πανελλήνιες δεν πρέπει να χωρίζουν τις πράξεις με παρενθέσεις
π.χ.   ΟΧΙ( (10<40 Η 80>100)ΚΑΙ (20<45)  )

3)παραθέτω το κομματι του κώδικα :

Για ι απο 1 μεχρι Ν
      Αν    Α[ι] = α   τοτε
            θέση <--  ι
            ι <--  Ν+1
Τελος_επανάλληψης 

Ειχα ασκηση στο διαγώνισμα να γραψω αλγόριθμο που να βρίσκει την πρώτη θέση που εμφανίζεται το στοιχείο που θα δώσει ο χρήστης (υποτίθεται πως υπάρχει στον πίνακα) !

Μου την πέιρε λάθος την άσκηση επειδή τερματισα την "για" μεταβάλοντας το "ι" .
Δικαιολογία :
Στο τετράδιο ασκήσεων λέει πως δεν ππρεπει να παρεμβαινουμε στη "για"...
Απ' οσο ξέρω απο προγραμματισμό μπορώ να το πράξω αυτό!
Ποια είναι η άποψή σας;

;D ;D ;D ;D ;D

Τα παιδία στη τάξη δισκολέυονται να μάθουν να γράφουν κωδικα!
Τους φαίνεται δύσκολο (ευτυχώς για εμένα για να αριστεύσω στις πανελλαδικές)
Στην οιπόλοιπα σχολεία  στην ελλαδα σημβαίνει το ίδιο ;

Φιλικα.

P.Tsiotakis


Αγαπητέ φίλε,

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

Το βιβλίο έχει αρκετά θολά σημεία (μερικά από τα οποία αναφέρεις) αλλά αυτό δε σημαίνει οτι όλα αυτά είναι λάθη. Πολλά έγιναν συνειδητά. Δεν μπήκαν σε τόσες λεπτομέρειες γιατί δεν ήταν αυτό ο σκοπός τους μαθήματος.

1. Στο βιβλίο καθηγητή λέει οτι όλα τα παραδείγματα του διδακτικού πακέτου σε ΓΛΩΣΣΑ είναι με κεφαλαία, αλλά δεν λέει οτι αυτό είναι συντακτικά απαραίτητο - αυτή είναι η αλήθεια. Για λόγους ομοιογένειας λοιπόν σχεδόν όλα τα βοηθήματα και καθηγητές πράττουν το ίδιο. Κάποιοι άλλοι όμως (οι αυθεντίες) γράφουν με πεζά ή και αλλιώς (χρήση Εμφάνισε στο πρόγραμμα κ.λ.π.)
Αυτό δεν αποκλείει και θέματα πανελλαδικών που έγραφαν προγράμματα (ή και υποπρογράμματα) με πεζά γράμματα. Δεν είναι λάθος, αλλά μερικά πράγματα πρέπει να προβάλλονται και υπο παιδαγωγικό πρίσμα και την πλευρά των μαθητών

Από την άλλη, μπορεί κανείς να υπογράψει, οτι αν κάποιος μαθητής γράψει με πεζά ένα πρόγραμμα, δεν θα βρεθεί κάποιος εξεταστής που θα του κόψει μονάδες;

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

3. Στο τετράδιο μαθητή λέει πως ποτέ δεν πρέπει να τροποποιείς στο Για την αρχική, τελική τιμή, το βήμα και την τιμή του μετρητή εντός του βρόχου.
Αφού είσαι μαθητής, αυτό το κείμενο απευθύνεται κυρίως σε σένα
ΔΕΝ ΜΠΟΡΩ ΝΑ ΣΚΕΦΤΩ ΚΑΠΟΙΟ ΛΟΓΟ ΓΙΑ ΝΑ ΜΗΝ ΤΟ ΚΑΝΕΙΣ. Αν θέλεις να υλοποιήσεις μια επανάληψη που τερματίζεται νωρίτερα, υπάρχει η ωραιότατη δομή Όσο (η Για χρησιμοποιείται σε γνωστό εξαρχής πλήθος επαναλήψεων)...

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

Όλοι οι μαθητές της κατεύθυνσής σου δυσκολεύονται στην κατανόηση των εννοιών του μαθήματος.
Το δικό μου σλογκαν είναι πως το μάθημα είναι εύκολο αν ΣΚΕΦΤΟΜΑΣΤΕ ΑΠΛΑ και λύνουμε κάθε άσκηση ΒΗΜΑ-ΒΗΜΑ

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

Καλή επιτυχία στο δύσκολο έργο σου. Δίνεις 6 (ή 7) μαθήματα και όχι 1

Με εκτίμηση,

gpapargi

Και τα 3 θέματα που έθεσες είναι εύστοχα και μας έχουν απασχολήσει κατά καιρούς.

Απαντώ καταρχήν στο 3ο

Καταρχήν να πω ότι και εγώ διαφωνώ με τον αλγόριθμό σου και το συγκεκριμένο παράδειγμα της εξόδου από την «Για» με αλλάγή του μετρητή το έχω θέσει ευθέως σε ένα άλλο θέμα που άνοιξα με τίτλο «Ανορθόδοξοι αλγόριθμοι».

Όμως δε μου αρκεί σαν αιτιολόγηση το «Έτσι τα λέει το βιβλίο». Το βιβλίο κάνει και λάθη αλλά πέρα από αυτό με ενδιαφέρουν τα επιχειρήματα και όχι το τι λέει κάποιο  βιβλίο. Το να επικαλείσαι το σχολικό βιβλίο είναι ένα καλό επιχείρημα όταν θες να εξηγήσεις γιατί διδάσκεις κάτι και όχι όταν θες να εξηγήσεις γιατί ισχύει κάτι. Θα προσπαθήσω να σταθώ στο δεύτερο.

Στον προγραμματισμό δεν ισχύει το «Ότι τρέχει και δίνει σωστά αποτελέσματα είναι σωστό». Παλιά τα προγράμματα ήταν εντελώς άναρχα. Η χρήση της εντολής goto τα έκανε δυσανάγνωστα και δύσκολα μπορούσαν να συντηρηθούν. Ακόμα και ο ίδιος ο προγραμματιστής μετά από λίγο καιρό δεν μπορούσε να καταλάβει τα ίδια του τα προγράμματα..

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

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

Ο σωστός προγραμματισμός έχει κάποια φιλοσοφία.

Η εντολή «Όσο.. επανάλαβε» φτιάχτηκε έτσι ώστε να μπορεί να διακοπεί από κάτι που συμβαίνει μέσα στο βρόχο. Αυτό μπορεί να είναι και το ότι φτάσαμε σε κάποιον αριθμό επαναλήψεων.
Η εντολή «Για.. από.. μέχρι» φτιάχτηκε για να εγγυάται σταθερό αριθμό επαναλήψεων. Αυτός ακριβώς είναι ο λόγος για τον οποίο χρησιμοποιήσαμε συγκεκριμένη  λεκτική περιγραφή της εντολή «Για.. από.. μέχρι» και όχι κάποια άλλη.

Το ερώτημα που θέτεις είναι σαν λες «μπορώ να κόψω την εντολή Για αλλάζοντας το μετρητή;» Η απάντηση είναι ότι μπορείς! Αλλά θα ανοίξεις το σκουπιδοντενεκέ και θα πετάξεις μέσα το λόγο για τον οποίο φτιάξαμε αυτές τις 2 εντολές και δε φτιάξαμε μόνο μία.

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

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

Απαντώ στο 1ο

Ο υπολογιστής χρησιμοποιεί διαφορετικό κωδικό όταν αποθηκεύει τα κεφαλαία και τα μικρά γράμματα. Έτσι στη γενική περίπτωση άλλο κεφαλαία και άλλο μικρά. Πολλά περιβάλλοντα το τηρούν αυτό και είναι case sensitive. Σε άλλα αυτό δεν ισχύει και όλα τα γράμματα αντιμετωπίζονται το ίδιο. Επειδή δεν υπάρχει κάποια εγκεκριμένη υλοποίηση της ΓΛΩΣΣΑΣ δεν γνωρίζουμε με βεβαιότητα τι ισχύει σε αυτή την περίπτωση. Επειδή το βιβλίο στον ορισμό των εντολών τα έχει όλα κεφαλαία έτσι για λόγους ασφάλειας τα βάζουμε κεφαλαία. Επίσης τα βάζουμε κεφαλαία για λόγους ομοιομορφίας. Καλό είναι να γράφουμε με ένα τρόπο και ας είναι αυτός του διδακτικού πακέτου. Αλλά δε νομίζω να υπάρχει κανείς που θα κόψει βαθμούς αν χρησιμοποιήσει κανείς μικρά. Τη σκέψη βαθμολογούμε. Και αυτή δεν κρύβεται πίσω από το μέγεθος των χαρακτήρων.

Απαντώ και στο 2ο

Στο ζήτημα της προτεραιότητας των λογικών τελεστών έχει γίνει μεγάλη κουβέντα.
Στη λογική άλγευρα μπορείς να ορίσεις το «ΚΑΙ» να έχει μεγαλύτερη προτεραιότητα από το «Ή» αλλά μπορείς να τα ορίσεις να έχουν και την ίδια προτεραιότητα. Συνήθως τα βιβλία την ορίζουν με τον πρώτο τρόπο. Σπάνια ορίζεται ο δεύτερος.
Δυστυχώς το βιβλίο δεν ορίζει την προτεραιότητα των λογικών τελεστών. Οπότε υπάρχει ασάφεια. Στα μαθηματικά δεν αρκεί να ορίσεις μια πράξη. Πρέπει να πεις πως εντάσσεται και στο υπόλοιπο περιβάλλον. Από κουβέντες που κάναμε λίγο πολύ όλοι συμφωνούμε στο ότι υπάρχει ασάφεια στο βιβλίο. Φαίνεται όμως πως αυτοί που βάζουν τα θέματα είναι γνώστες τις κατάστασης και δε θα βάλουν την κακιά ερώτηση

Α Ή Β ΚΑΙ Γ

η οποία θα ξεμπροστιάσει την ασάφεια.

Εύχομαι καλή επιτυχία


evry

Γενικά συμφωνώ με αυτά που λες απλά έχω να προσθέσω δυο πράγματα (1 ερώτηση)

1)Είχα την εντύπωση ότι γενικά όσον αφορά το θέμα της προτεραιότητας των λογικών τελεστών, προηγείται το ΟΧΙ, μετα είναι το ΚΑΙ, και μετά είναι το Ή. Ξέρεις κάποια γλώσσα στην οποία να ισχύει κάτι διαφορετικό?

2) Όσον αφορά την goto σήμερα χρησιμοποιείται αρκετά το αδερφάκι της η break (βλέπε switch στις C,C++,Java) και μην ξεχνάμε και τα exceptions τα οποία είναι ουσιαστικά άλμα σε άλλο σημείο του προγράμματος, και όπως είχε πει και ο Ken Thomson

If you want to go somewhere, goto is the best way to get there :-)

Παράθεση από: gpapargi στις 16 Φεβ 2006, 10:43:31 ΠΜ

Στο ζήτημα της προτεραιότητας των λογικών τελεστών έχει γίνει μεγάλη κουβέντα.
Στη λογική άλγευρα μπορείς να ορίσεις το «ΚΑΙ» να έχει μεγαλύτερη προτεραιότητα από το «Ή» αλλά μπορείς να τα ορίσεις να έχουν και την ίδια προτεραιότητα. Συνήθως τα βιβλία την ορίζουν με τον πρώτο τρόπο. Σπάνια ορίζεται ο δεύτερος.
Δυστυχώς το βιβλίο δεν ορίζει την προτεραιότητα των λογικών τελεστών. Οπότε υπάρχει ασάφεια. Στα μαθηματικά δεν αρκεί να ορίσεις μια πράξη. Πρέπει να πεις πως εντάσσεται και στο υπόλοιπο περιβάλλον. Από κουβέντες που κάναμε λίγο πολύ όλοι συμφωνούμε στο ότι υπάρχει ασάφεια στο βιβλίο. Φαίνεται όμως πως αυτοί που βάζουν τα θέματα είναι γνώστες τις κατάστασης και δε θα βάλουν την κακιά ερώτηση

Α Ή Β ΚΑΙ Γ

η οποία θα ξεμπροστιάσει την ασάφεια.

Εύχομαι καλή επιτυχία


What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

moi

Εγώ πάντως πιστεύω ότι δεν ξέρεις τρεις γλώσσες προγραμματισμού(δεν εννοώ τα ονόματά τους)  :o

gpapargi

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

Για το θέμα της goto δε διαφωνούμε. Είχα αναφέρει την άποψή μου στο θέμα

https://alkisg.mysch.gr/steki/index.php?topic=221.0

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

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

Στην απάντησή μου στον coolio τη χρησιμοποίησα για να του εξηγήσω ότι ο προγραμματισμός έχει κάποιες αρχές και φιλοσοφία. Ουσιαστικά επικαλέστηκα τις περιπτώσεις που η goto κάνει τον κώδικα μπάχαλο. Δεν είπα ότι αυτό συμβαίνει πάντα.

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

Βέβαια όσοι καταλαβαίνουν τη διαφορά έτσι κι αλλιώς δεν τη  χρησιμοποιούν στα πλαίσια του μαθήματος  :)

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

Προκόπης

Νομίζω οτι το πρόβλημά σου στην λανθασμένη άσκηση είναι , τελικά , η έλλειψη της τέλος_αν και οχι η "βίαιη" διακοπή τηε εντολής "Για ....   ".
Είναι όμως πολύ καλή πνευματική και προγραμματιστική άσκηση , η χρήση των άλλων δύο μορφών επαναληπτικής δομής και κάκιστη τακτική της καθολικής χρήσης της " Για ....   ".
Θα ήθελα να μάθω όμως , αν το πολύ καλό ενδιαφέρον σου για το συγκεκριμένο μάθημα , το εχεις και για τα υπόλοιπα μαθήματα . Σου το εύχομαι.
Φιλικά

EleniK

Αγαπητέ μαθητή,

θα σου είναι ιδιαίτερα χρήσιμες οι γνώσεις σου στον προγραμματισμό, ειδικά αφού περάσεις σε κάποια σχετική σχολή. Παρολαυτά για το συγκεκριμένο μάθημα, έχω συναντήσει μαθητές με καλές γλώσσες προγραμματισμού. Κανείς από αυτούς δεν πήρε 100! Οι πολλές τους γνώσεις μάλλον τους μπέρδευαν παρά τους βοήθησαν. Έχεις κάποιο πλεονέκτημα αλλά πρέπει να μάθεις να σκέφτεσαι και να ενεργείς με τους κανόνες που προσδιορίζει το συγκεκριμένο μάθημα και όχι γενικά από τις γλώσσες προγραμματισμού. Αντίθετα, παιδιά με καμία προηγούμενη σχέση με προγραμματισμό κατάφεραν πολλές φορές να φτάσουν το 100 και αυτό γιατί είχαν πιο καθαρή και απλή σκέψη.
Πρόσεξε λοιπόν και καλή σου επιτυχία.   
Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19

pchrist

Μια ερώτηση για την Για ...

Έστω Για i απο τ1 μέχρι τ2 με_βήμα τ3

1. Αν τι<τ2 και τ3<0 τι θα γίνει; Ελέγχεται πρώτα το βήμα ή εκτελούνται τα βήματα κανονικά οπότε έχουμε ατέρμων βρόχο;
2. Αν τ1=τ2 τότε τι γίνεται ανάλογα με το βήμα; Αν είναι θετικό έχω μία επανάληψη και τέλος (όπως έχουμε συνηθίσει αν ήταν τ1 διάφορο του τ2). Αν όμως είναι αρνητικό συμβαίνει το ίδιο ή όχι;

Τελικά γίνεται έλεγχος του βήματος στην αρχή πριν εκτελεστεί οτιδήποτε ή γίνεται μόνο έλεγχος τ1-τ2 και καθορίζεται το κριτήριο - είδος ανισότητας;


π.χ

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

Αν θεωρήσω ότι ελέγχω τ1-τ2<0 άρα ελέγχω πάντα αν τ1<=τ2 τότε έχω ατέρμων βρόχο
Αν θεωρήσω από την αρχή ότι έχω αρνητικό βήμα τότε ελέγχω τ1>=τ2 άρα δεν εκετελείται ποτε


Η κρίσιμη ερώτηση αν τ1=τ2 τότε τι γίνεται;

Καρκαμάνης Γεώργιος

Το συγκεκριμένο ερώτημα που θέτεις έχει συζητηθεί πολλές φορές στο στέκι
Μπορείς κάνοντας μια αναζήτηση να βρεις όσες πληροφορίες θέλεις. Επιγραμματικά:

1. Πρώτα ελέγχεται η συνθήκη και μετά εκτελούνται οι εντολές
2. Η συνθήκη καθορίζεται από το βήμα.
3. Αν τι<τ2 και τ3<0 τότε δεν εκτελείται
4. Αν τ1=τ2 για θετικό και για αρνητικό βήμα θα εκτελεστεί μια φορά


nikosx

Αν και έχει περάσει καιρός, τι έχετε να πείτε για τη έλλειψη του Τέλος_Αν στο παράδειγμα στην αρχή της συζήτησης;
Δηλαδή το τμήμα:

Για Ι από 1 μέχρι 10
  Αν Ι<=5 τότε
      Εμφάνισε 'Ναι'
Νίκος Ξένος
Καθηγητής Πληροφορικής
nxenos@sch.gr

nikosx

Sorry για το προηγούμενο, λάθος.

Αν και έχει περάσει καιρός, τι έχετε να πείτε για τη έλλειψη του Τέλος_Αν στο παράδειγμα στην αρχή της συζήτησης;
Δηλαδή το τμήμα:
 
  Αλγόριθμος Α1
  Διάβασε Ι
  Αν Ι<=5 τότε
      Εμφάνισε 'Ναι'
      Εμφάνισε 'Οχι'
  Τέλος Α1

είναι σωστό;
Αν είναι τι ακριβώς θα εμφανίσει; Τι λέτε;
Νίκος Ξένος
Καθηγητής Πληροφορικής
nxenos@sch.gr

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

Παράθεση από: nikosx στις 17 Μαρ 2009, 07:42:13 ΠΜ
Sorry για το προηγούμενο, λάθος.

Αν και έχει περάσει καιρός, τι έχετε να πείτε για τη έλλειψη του Τέλος_Αν στο παράδειγμα στην αρχή της συζήτησης;
Δηλαδή το τμήμα:
 
  Αλγόριθμος Α1
  Διάβασε Ι
  Αν Ι<=5 τότε
      Εμφάνισε 'Ναι'
      Εμφάνισε 'Οχι'
  Τέλος Α1

είναι σωστό;
Αν είναι τι ακριβώς θα εμφανίσει; Τι λέτε;

Κανονικά δεν είναι σωστό... Ας πούμε ότι έχει συντακτικό λάθος...

Laertis

Αν το Ι<=5 τότε θα εμφανίσει και "ναι" και "όχι"
Αν το Ι>5 τότε θα εμφανίσει  "όχι"
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

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

Παράθεση από: Laertis στις 17 Μαρ 2009, 09:59:14 ΠΜ
Αν το Ι<=5 τότε θα εμφανίσει και "ναι" και "όχι"
Αν το Ι>5 τότε θα εμφανίσει  "όχι"

Δεν συμφωνώ!

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

Γιατί δηλαδή να θεωρήσουμε ότι το "Εμφάνισε 'Ναι'" ανήκει στο "τότε" της Αν; Και τότε γιατί να μη θεωρήσουμε ότι η μόνη εντολή που υπάρχει στο "τότε" είναι η "κενή εντολή" που υπάρχει δεξιά από αυτό;  >:D
Άρα έτσι καμία Εμφάνισε δεν ανήκει στην Αν, άρα θα εμφανίζεται και το 'Ναι' και το 'Όχι' σε κάθε περίπτωση!

Εγώ λοιπόν πιστεύω ότι ο προηγούμενος τρόπος γραφής δεν πρέπει να χρησιμοποιείται...

Laertis

Αυτό με τη "χωροταξία" Νίκο είναι δική σου θεώρηση. Εγώ θεωρώ ότι αν δεν υπάρχει τέλος _αν εκτελείται μόνο η επόμενη εντολή μετά το τότε (είτε δεξιά είτε απο κάτω).
Τι σημαίνει "κενή εντολή"  μετά το τότε ; Το τίποτα ; Μετά το τότε η εντολή που υπάρχει είναι η εμφάνισε "Ναι". Δεν οριζεται "κενή εντολή" .

Παράθεση από: Νίκος Αδαμόπουλος στις 17 Μαρ 2009, 10:04:35 ΜΜ

Άρα έτσι καμία Εμφάνισε δεν ανήκει στην Αν, άρα θα εμφανίζεται και το 'Ναι' και το 'Όχι' σε κάθε περίπτωση!

Εγώ λοιπόν πιστεύω ότι ο προηγούμενος τρόπος γραφής δεν πρέπει να χρησιμοποιείται...

Μα αν καμία εμφάνισε δεν ανήκει στην Αν τότε έχουμε συντακτικό λάθος και δεν εκτελείται τίποτα .Πως μπορούν να εμφανίζονται και τα δύο .....  :o

Δεν υποστηρίζω ότι πρέπει να χρησιμοποιείται , απλά απάντησα στο ερώτημα τι θα εμφανίσει, όχι αν είναι σωστό.
Νικολακάκης Γιώργος
Μηχανικός Η/Υ Συστημάτων
Καθηγητής Πληροφορικής
http://users.sch.gr/gnikola

evry


   Η γενική ιδέα είναι πως όταν γράφουμε σε ψευδογλώσσα δεν είμαστε τόσο συντακτικά αυστηροί αλλά μας ενδιαφέρει πιο πολύ η λογική. Το λέω αυτό επειδή στη συγκεκριμένη περίπτωση το βιβλίο δε λέει πουθενά ότι πρέπει ντε και καλά η εντολή μετά το τότε να είναι στην ίδια γραμμή. Φυσικά θα μπορούσε κάποιος να θεωρήσει ότι εννοείται από το βιβλίο.
   Όμως δεν μπορώ να διανοηθώ ότι στην ψευδογλώσσα υπάρχει ένας τόσο αυστηρός συντακτικός κανόνας ο οποίος εξαρτάται από τη θέση του χαρακτήρα αλλαγής γραμμής. Μου φαίνεται πολύ τραβηγμένο. Στη ΓΛΩΣΣΑ μπορεί να το δεχόμουν αλλά στην ψευδογλώσσα θα έλεγα ότι αν δεν υπάρχει τέλος_αν και επίσης δεν υπάρχει εντολή δίπλα στο τότε θα πρέπει να θεωρήσουμε ότι η επόμενη εντολή είναι και αυτή που ταιριάζει με την τότε.
   Πιστεύω πως έτσι όπως το διατυπώνει το βιβλίο κανείς μας δεν είναι σίγουρα λάθος και για αυτό θα δεχόμουν από έναν μαθητή οποιονδήποτε και από τους 2 τρόπους.

Φυσικά εμείς λέμε στους μαθητές να βάζουν πάντα Τέλος_Αν και να λήγει η υπόθεση
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

Παράθεση από: Laertis στις 17 Μαρ 2009, 10:24:50 ΜΜ
Αυτό με τη "χωροταξία" Νίκο είναι δική σου θεώρηση. Εγώ θεωρώ ότι αν δεν υπάρχει τέλος _αν εκτελείται μόνο η επόμενη εντολή μετά το τότε (είτε δεξιά είτε απο κάτω).

Ας δούμε ένα άλλο παράδειγμα. Αυτό πώς θα σας φαινόταν:

Αν α>5 τότε χ<-1 y<-2 όσο χ<10 επανάλαβε χ<-χ+1 y<-1 Τέλος_επανάληψης αλλιώς χ<χ+1 Τέλος_αν

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

Τότε όμως αυτό πώς θα σας φαινόταν:

όσο χ<
10
επανάλαβε χ<-χ+1 y<-1 Τέλος_
επανάληψης

Δεν είμαι λοιπόν σίγουρος ότι αυτό με τη "χωροταξία" είναι δικιά μου θεώρηση...
Ας δούμε τώρα το βιβλίο. Στις σελ. 33 και 46 αναφέρεται η σύνταξη της Αν με μία μόνο εντολή. Την έχει δεξιά από το τότε. Κατά σύμπτωση; Υπάρχει κάποιο αντιπαράδειγμα που να δείχνει ότι η θεώρηση δεν ισχύει;

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

Παράθεση από: Laertis στις 17 Μαρ 2009, 10:24:50 ΜΜ
Τι σημαίνει "κενή εντολή"  μετά το τότε ; Το τίποτα ; Μετά το τότε η εντολή που υπάρχει είναι η εμφάνισε "Ναι". Δεν οριζεται "κενή εντολή" .

Προφανώς το είπα αστειευόμενος (για αυτό έβαλα και το διαβολάκι!). Αν και δεν είναι και τόσο σίγουρο ότι δεν υπάρχει κενή εντολή!!!!

Δηλαδή αυτό θα ήταν λάθος;

Αν α>10 τότε

αλλιώς
  χ<-5
Τέλος_αν

Άρα αν θεωρήσουμε (ξανά) ότι η όποια εντολή στην Αν χωρίς Τέλος_αν πρέπει να μπαίνει στην ίδια γραμμή τότε ,ναι πράγματι  >:D, στο παράδειγμα

Αλγόριθμος Α1
Διάβασε Ι
Αν Ι<=5 τότε
Εμφάνισε 'Ναι'
Εμφάνισε 'Οχι'
Τέλος Α1

στην Αν δεν εκτελείται καμία εντολή και τα δύο εμφάνισε είναι εκτός της Αν  :o.

Για να το ξεκαθαρίσουμε όμως, κι εγώ δεν υποστηρίζω ότι πρέπει να χρησιμοποιείται, αλλά ίσως το αν είναι σωστό ή όχι, ή το τι θα εμφανίζει να μην είναι τόσο ξεκάθαρο και να είναι τελικά θέμα θεώρησης...  8)
[/quote]

Καρκαμάνης Γεώργιος

Παράθεση από: nikosx στις 17 Μαρ 2009, 07:42:13 ΠΜ
Sorry για το προηγούμενο, λάθος.

Αν και έχει περάσει καιρός, τι έχετε να πείτε για τη έλλειψη του Τέλος_Αν στο παράδειγμα στην αρχή της συζήτησης;
Δηλαδή το τμήμα:
 
  Αλγόριθμος Α1
  Διάβασε Ι
  Αν Ι<=5 τότε
      Εμφάνισε 'Ναι'
      Εμφάνισε 'Οχι'
  Τέλος Α1

είναι σωστό;
Αν είναι τι ακριβώς θα εμφανίσει; Τι λέτε;

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

Laertis

Παράθεση από: Νίκος Αδαμόπουλος στις 17 Μαρ 2009, 11:57:15 ΜΜ

Δηλαδή αυτό θα ήταν λάθος;

Αν α>10 τότε

αλλιώς
  χ<-5
Τέλος_αν

Άρα αν θεωρήσουμε (ξανά) ότι η όποια εντολή στην Αν χωρίς Τέλος_αν πρέπει να μπαίνει στην ίδια γραμμή τότε ,ναι πράγματι  >:D, στο παράδειγμα

Αλγόριθμος Α1
Διάβασε Ι
Αν Ι<=5 τότε
Εμφάνισε 'Ναι'
Εμφάνισε 'Οχι'
Τέλος Α1

στην Αν δεν εκτελείται καμία εντολή και τα δύο εμφάνισε είναι εκτός της Αν  :o.


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

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

evry

Παράθεση από: Νίκος Αδαμόπουλος στις 17 Μαρ 2009, 11:57:15 ΜΜ
Ας δούμε ένα άλλο παράδειγμα. Αυτό πώς θα σας φαινόταν:

Αν α>5 τότε χ<-1 y<-2 όσο χ<10 επανάλαβε χ<-χ+1 y<-1 Τέλος_επανάληψης αλλιώς χ<χ+1 Τέλος_αν

Το παραπάνω ισοδυναμεί με αυτό

Κώδικας: ΓΛΩΣΣΑ
Αν α>5 τότε
   χ <- 1
   y <-2
   Όσο χ<10 επανάλαβε
      χ<-χ+1 
      y<-1 
   Τέλος_επανάληψης 
αλλιώς 
   χ<χ+1 
Τέλος_αν

Δε βλέπω να υπάρχει κάποιο πρόβλημα

Παράθεση
Τότε όμως αυτό πώς θα σας φαινόταν:
όσο χ<
10
επανάλαβε χ<-χ+1 y<-1 Τέλος_
επανάληψης
Αυτό είναι λάθος διότι ο μεταγλωττιστής δεν θα διαβάσει το λεκτικό Τέλος_επανάληψης αλλά 2 διαφορετικά λεκτικά Τέλος_  και  επανάληψης αφού μεταξύ των δύο λέξεων μεσολαβεί ο χαρακτήρας αλλαγής γραμμής.

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

Πάντως στο βιβλίο καθηγητή λέει ότι

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

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

Κώδικας: ΓΛΩΣΣΑ
ΑΝ συνθήκη ΤΟΤΕ  Χ<-1; Π<-Χ+1; Εμφάνισε Π


όπου ; είναι διαχωριστικό εντολών
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

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

#21
Παράθεση από: Laertis στις 18 Μαρ 2009, 12:33:10 ΠΜ
Το μόνο που μπορώ να δεχτώ (παραχώρηση κάνω  :) ) από όσα αναφέρεις, θεωρώντας ότι η εντολή μετά το τότε μπαίνει μόνο δεξιά απο το τότε, είναι ότι υπάρχει συντακτικό λάθος και δεν εκτελείται τίποτα.
...........

Το μόνο που θα συμφωνήσω μαζί σου Νίκο είναι ότι είναι τελικά θέμα θεώρησης ... ;)

Εντάξει, συμβιβαζόμαστε σε αυτό!!!  ;)

Άλλωστε, η αρχική μου άποψη ήταν:

Παράθεση από: Νίκος Αδαμόπουλος στις 17 Μαρ 2009, 08:53:58 ΠΜ
Κανονικά δεν είναι σωστό... Ας πούμε ότι έχει συντακτικό λάθος...

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

Παράθεση από: evry στις 18 Μαρ 2009, 01:01:34 ΠΜ
Παράθεση από: Νίκος Αδαμόπουλος στις 17 Μαρ 2009, 11:57:15 ΜΜ
Τότε όμως αυτό πώς θα σας φαινόταν:
όσο χ<
10
επανάλαβε χ<-χ+1 y<-1 Τέλος_
επανάληψης
Αυτό είναι λάθος διότι ο μεταγλωττιστής δεν θα διαβάσει το λεκτικό Τέλος_επανάληψης αλλά 2 διαφορετικά λεκτικά Τέλος_  και  επανάληψης αφού μεταξύ των δύο λέξεων μεσολαβεί ο χαρακτήρας αλλαγής γραμμής.

Προφανώς το παράδειγμα το έγραψα για το εξής:

Παράθεση από: evry στις 17 Μαρ 2009, 11:13:24 ΜΜ
Όμως δεν μπορώ να διανοηθώ ότι στην ψευδογλώσσα υπάρχει ένας τόσο αυστηρός συντακτικός κανόνας ο οποίος εξαρτάται από τη θέση του χαρακτήρα αλλαγής γραμμής. Μου φαίνεται πολύ τραβηγμένο.

Πάντως, δεν νομίζω ότι διαφωνούμε τελικά, αφού μάλλον όλοι δεν θα υιοθετούσαμε τη γραφή:

Αλγόριθμος Α1
Διάβασε Ι
Αν Ι<=5 τότε
Εμφάνισε 'Ναι'
Εμφάνισε 'Οχι'
Τέλος Α1

θεωρώντας ότι το Εμφάνισε 'Ναι' ανήκει στο "τότε"…

Αα, επίσης μάλλον είμαστε εκτός θέματος (Για i απο...)...  :)