Απορια-Διευκρινηση

Ξεκίνησε από aggeloni, 25 Οκτ 2010, 03:55:47 ΜΜ

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

aggeloni

Δίνεται το παρακάτω τμήμα αλγορίθμου:
Διάβασε α, β
Αρχή_επανάληψης
Αν β>α τότε
Εκτύπωσε  '*'
β ← β -2
Τέλος_αν
α←α-2
Μέχρις_ότου α=0

Να εκτελεστεί το παραπάνω τμήμα αλγορίθμου για τιμές εισόδου 8 και 5 και να απαντήσετε στα ερωτήματα:

I.   Πόσες φορές θα εκτελεστούν οι εντολές της δομής επιλογής;
II.   Για ποιες τιμές του α το συγκεκριμένο τμήμα αλγορίθμου δεν παραβιάζει το κριτήριο της περατότητας;
III.   Να τροποποιήσετε (αφήνοντας τη συνθήκη του Μέχρις_ότου  ως έχει)  το παραπάνω τμήμα αλγορίθμου, ώστε να μην παραβιάζεται το κριτήριο της περατότητας.   
IV.   Να μετατρέψετε το τροποποιημένο τμήμα αλγορίθμου (ερώτημα III)  ώστε να χρησιμοποιείται η δομή επανάληψης   Όσο .... επανάλαβε.
V.   Μπορεί να γίνει μετατροπή σε Για ... από ... μέχρι;  Να δικαιολογήσετε την απάντησή σας.

Παραθετω ενα παλιοτερο θεμα. Ηθελα να ρωτησω αν στο ερωτημα ΙΙΙ θελει ουσιαστικα ελεγχο εγκυροτητας για το α ή απλα μια Αν πριν απο την επαναληψη που θα τσεκαρει αν το α ειναι θετικο κ αρτιο. Επισης στο 5ο ερωτημα, νομιζω οτι γινεται η μετατροπη.Κανω λαθος??

savatage

Καλησπερα,

Στον ερωτημα ΙΙΙ θελει απλα ενα Αν ( α>=0 και α mod 2 = 0 )  τοτε πριν απο το Αρχη_επαναληψης , με το Τελος_Αν στο τελος του αλγοριθμου.

Η μετατροπη σε Για.. δε γινετε. Για τον μετρητη της επαναληψης ( το α ) εχουμε τελικη τιμη ( το 0 ) και βημα ( το -2 ) αλλα οχι αρχικη τιμη.

manpap

Η δική μου λύση είναι πιο κοντά στις αρχικές υποδείξεις του συναδέλφου, δηλαδή:
Αρχή_επανάληψης
Διάβασε α
Μέχρις_ότου α mod 2 =0
Διάβασε β
Αρχή_επανάληψης
Αν β>α τότε
Εκτύπωσε  '*'
β ← β -2
Τέλος_αν
α←α-2
Μέχρις_ότου α=0

Σε ΓΙΑ μετατρέπεται η διορθωμένη μορφή ως εξής:

Αρχή_επανάληψης
Διάβασε α
Μέχρις_ότου α mod 2 =0
Διάβασε β
! Επειδή ο βρόχος εκτελείται οπωσδήποτε την 1η φορά ανεξάρτητα σχέσης α με 0
Αν β>α τότε
Εκτύπωσε  '*'
β ← β -2
Τέλος_αν
α←α-2
! Κρατάω την τιμή του α σε βοηθητική μεταβλητή
α1<-α
! Γράφω το σχετικό Για. Ακόμα και αν α<0 απλώς δε θα γίνει η επανάληψη αλλά δεν έχει πρόβλημα
Για α Από α1 μέχρι 0 με_βήμα -2
Αν β>α τότε
Εκτύπωσε  '*'
β ← β -2
Τέλος_αν
Τέλος_Επανάληψης

Βέβαια τώρα που το ξαναβλέπω με δεδομένη την οδηγία για μη χρήση mod, div σε αρνητικούς, θα πρόσθετα στον έλεγχο εγκυρότητας και την συνθήκη για α>0.
Συντηρώ το μυαλό μου ακοίμητο, λαγαρό, ανήλεο. Το αμολώ να παλεύει ακατάλυτα. Άλλο αργαστήρι να κάνω το σκοτάδι φως δεν έχω.
Ν. Καζαντζάκης

savatage

Με το Αρχη_επαναληψης υποχρεωνεις τον χρηστη να δωσει συγκεκριμενες τιμες. Αυτο δε γινετε αυθερετα , σκοπος δεν ειναι να δουλεψει ντε και καλα ο αλγοριθμος , αλλα να πληρη καθε κριτιριο οπως αυτον την περατοτητας. Συνεπως το Αν...τοτε , καλυπτει τον αλγοριθμο απο πλευρας κριτηριων , χωρις να αλλαζει τη φυση του. Να τονιζετε στους μαθητες σας - απλη συμβουλη και σε καμια περιπτωση υπεροπτικη παρατηρηση - οτι η καλυψη των κριτηριων σε ενα δοσμενο αλγοριθμο που δε τα ικανοποιει ολα , πρεπει να γινετε χωρις να αλλαζει ο πυρηνας και ο σκοπος του αρχικου αλγοριθμου , στα μετρα παντα του εφικτου.

Οσο για τη μετατροπη , να θυμισω οτι η χρηση του Για... ειναι σε περιπτωσεις οπου ξερουμε πριν την εκτελεση του αλγοριθμου τον αριθμο των επαναληψεων . Στο παραπανω τμημα , δεν τον ξερουμε....

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

Παράθεση από: savatage στις 27 Οκτ 2010, 08:35:16 ΠΜ
...να θυμισω οτι η χρηση του Για... ειναι σε περιπτωσεις οπου ξερουμε πριν την εκτελεση του αλγοριθμου τον αριθμο των επαναληψεων

?


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

Γιατί πριν την εκτέλεση του αλγορίθμου; Στο παρακάτω παράδειγμα, το Ν δεν θα είναι γνωστό πριν την εκτέλεση του αλγορίθμου...

Διάβασε Ν
Για ι από 1 μέχρι Ν
...

savatage

#7
Δε χρειάζεται να γίνετε ούτε μπέρδεμα , ούτε παρανόηση. Προς διευκρίνηση κάποιων πραγμάτων έχω να πω τα εξής:

Στο παράδειγμα που δίνεις ακριβώς πιο πάνω , το Για.. δουλεύει οκ , εκτελείτε ο αλγόριθμος και δίνει τα αποτελέσματά του.
Αλλά αυτό ΕΙΝΑΙ ΤΕΛΕΙΩΣ ΔΙΑΦΟΡΕΤΙΚΟ με την κατ επιλογή χρήση του Για... . Στον αρχικό αλγόριθμο που δόθηκε στο πρώτο μήνυμα , μπορείς να φανταστείς κάποια εκφώνηση??? Σίγουρα ναι... Θα την επίλυες εξ αρχής με χρήση του Για... , απ τη στιγμή που δε ξέρεις τις επαναλήψεις   Σίγουρα όχι . Ας μη φύγουμε από την ουσία του Για... , να το χρησιμοποιούμε εκεί που πραγματικά και εξ αρχής μπορεί. Ένας αλγόριθμος σαν τον αρχικό δε μπορεί ούτε να λυθεί εξ αρχής με Για , ούτε εξαναγκασμένα να μετατραπεί σε αυτό.


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


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

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

Έτσι λοιπόν δεν μπορούμε να πούμε στο συγκεκριμένο παράδειγμα ότι «η μετατροπή σε Για.. δεν γίνεται» δίνοντας ως δικαιολογία στην απάντησή μας ότι «για τον μετρητή της επανάληψης (το α) έχουμε τελική τιμή (το 0) και βήμα (το -2) αλλά όχι αρχική τιμή», αφού έχουμε και την αρχική τιμή – είχε διαβαστεί λίγο πιο πάνω!

Για το ίδιο λόγο, δεν μπορούμε να πούμε ότι «...η χρήση του Για... είναι σε περιπτώσεις όπου ξέρουμε πριν την εκτέλεση του αλγορίθμου τον αριθμό των επαναλήψεων...». Εγώ δεν «θυμάμαι» κάτι τέτοιο από πουθενά! Άλλο να λέμε «πριν την εκτέλεση του αλγορίθμου» και άλλο «πριν την εκτέλεση της Για.. » - εξ ου και το παράδειγμα που έδωσα και που όντως «εκτελείται».

Επίσης, άλλο είναι να λέμε ότι «δεν γίνεται» και άλλο να λέμε ότι «δεν το προτιμάμε» ή «δεν συνίσταται». Κάποιος μαθητής που θα διάβαζε τα παραπάνω είναι πιθανό να κατέληγε σε παρερμηνείες.

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

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

savatage

Αφού σε ενοχλούσε τόσο πολύ η ορθογραφία , τη διόρθωσα. Απλά είναι αρκετά δύσκολο - και μάλλον δε σου έχει τύχει ποτέ - να είσαι στη δουλειά , να πρέπει ν προλάβεις πολλές καταστάσεις , ο προϊστάμενος να είναι εκεί γύρω , και εσύ να προσπαθείς να κλέψεις λίγο χρόνο να συντάξεις μια απάντηση. Η ορθογραφία είναι το τελευταίο που σε νοιάζει...

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

andreas_p

Η ορθογραφία είναι στάση και θέση !!!

manpap

Μένω στο αρχικό ερώτημα αυστηρά και συμπληρώνω:

Παράθεση από: Νίκος Αδαμόπουλος στις 27 Οκτ 2010, 03:12:09 ΜΜ
...η συνθήκη  ( α>=0 και α mod 2 = 0 )  θεωρώ ότι έχει πρόβλημα αποτίμησης σε περίπτωση που α<0, δεδομένου ότι υπάρχει επίσημη οδηγία να μη χρησιμοποιούμε το mod με αρνητικούς, και επίσης η επικρατούσα άποψη είναι ότι στην ΑΕΠΠ γίνεται πλήρης αποτίμηση των λογικών εκφράσεων και όχι μερική.
Συμφωνώ ...

Θεωρώ ότι η άσκηση θέλει να εξετάσει αν ο μαθητής αντιλαμβάνεται ότι ο αριθμός των επαναλήψεων είναι γνωστός ή τέλος πάντων μπορεί να υπολογιστεί για μία δεδομένη τιμή του α και επομένως μπορεί να γραφεί ισοδύναμο τμήμα με ΓΙΑ. Τίποτα περισσότερο. Αποτελεί και αυτό μία δεξιότητα. Θυμίζω ότι έχει μπει σε πανελλήνιες σχετικό τμήμα για αντίστοιχη μετατροπή, δε θυμαμαι ακριβώς πήγαινε κάπως έτσι
Διαβασε α,β
Αρχή_Επανάληψης
τυπωσε α
α<-α+2
μέχρισ_οτου α>β
ή κάτι τέτοιο...

Παράθεση από: savatage στις 27 Οκτ 2010, 08:35:16 ΠΜ
Με το Αρχη_επαναληψης υποχρεωνεις τον χρηστη να δωσει συγκεκριμενες τιμες. Αυτο δε γινετε αυθερετα , σκοπος δεν ειναι να δουλεψει ντε και καλα ο αλγοριθμος , αλλα να πληρη καθε κριτιριο οπως αυτον την περατοτητας. Συνεπως το Αν...τοτε , καλυπτει τον αλγοριθμο απο πλευρας κριτηριων , χωρις να αλλαζει τη φυση του. Να τονιζετε στους μαθητες σας - απλη συμβουλη και σε καμια περιπτωση υπεροπτικη παρατηρηση - οτι η καλυψη των κριτηριων σε ενα δοσμενο αλγοριθμο που δε τα ικανοποιει ολα , πρεπει να γινετε χωρις να αλλαζει ο πυρηνας και ο σκοπος του αρχικου αλγοριθμου , στα μετρα παντα του εφικτου.
Δε διαφωνώ με αυτό.
Όμως, αν δε γνωρίζουμε την εκφώνηση του προβλήματος το οποίο λύνει ο αλγόριθμος δε μπορούμε να αποφανθούμε ποια από τις 2 προτεινόμενες λύσεις είναι η καλύτερη. Το ζητούμενο είναι να έχουμε ένα αλγόριθμο που να λύνει το ζητούμενο πρόβλημα και όχι απλώς να ικανοποιεί τα κριτήρια.
Συντηρώ το μυαλό μου ακοίμητο, λαγαρό, ανήλεο. Το αμολώ να παλεύει ακατάλυτα. Άλλο αργαστήρι να κάνω το σκοτάδι φως δεν έχω.
Ν. Καζαντζάκης

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