ΔΤ1 ΚΕΦΑΛΑΙΟ 6 ΤΕΤΡΑΔΙΟ ΜΑΘΗΤΗ
ΟΣΟ συνθηκη_1 ΕΠΑΝΑΛΑΒΕ
εντολη_2
ΑΝ συνθηκη_3 ΤΟΤΕ
εντολη_4
GOTO !Label
ΑΛΛΙΩΣ
εντολη_5
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Label
θα ήθελα να σχολιάσετε την παρακάτω λύση:
ΟΣΟ συνθηκη_1 και ΟΧΙ(συνθηκη_3) ΕΠΑΝΑΛΑΒΕ
εντολη_2
εντολη_5
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΑΝ συνθηκη_1=αληθης τοτε
εντολη_2
εντολη_4
τελος_αν
Δεν είναι σωστή. Ένα παράδειγμα είναι π.χ. αν η συνθήκη_3 γίνει ΑΛΗΘΗΣ, ενώ η συνθήκη_1 παραμείνει ΨΕΥΔΗΣ.
Τότε στο αρχικό παράδειγμα εκτελείται η εντολή_4, ενώ στην παραπάνω λύση όχι.
Το βιβλίο καθηγητή προτείνει την παρακάτω λύση:
ΑΡΧΗ
ΟΣΟ συνθήκη1 ΕΠΑΝΑΛΑΒΕ
Εντολή2
ΑΝ συνθήκη3 ΤΟΤΕ
Εντολή4
H συνθήκη1 γίνεται ΨΕΥΔHΣ
ΑΛΛΙΩΣ
Εντολή5
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
και ένας λογικός τρόπος να μεταφράσουμε το "Η συνθήκη1 γίνεται ΨΕΥΔΗΣ" είναι να προσθέσουμε μια boolean μεταβλητή (σημαία) στη συνθήκη1: ΟΣΟ συνθήκη1 ΚΑΙ flag=ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ
Aν η συνθήκη_1 είναι ΨΕΥΔΗΣ αυτό σημαίνει ότι δεν θα εκτελεστεί καμία εντολή στο 1ο πρόγραμμα όπως και στο δεύτερο.
Επομένως νομίζω ότι η περίπτωση που περιέγραψες δουλεύει και για τις 2 περιπτώσεις
Σόρρυ, εννοούσα να γίνει (όχι να παραμείνει) ψευδής. Αναλυτικά:
Μπαίνουμε στο loop με συνθήκη_1 = αληθής και συνθήκη_3 = ψευδής.
Και έστω ότι η εντολή_2 αντιστρέφει και τις δύο συνθήκες και τις κάνει
συνθήκη_1 = ψευδής, συνθήκη_3 = αληθής.
Στην πρώτη περίπτωση θα εκτελεστούν: εντολή_2, εντολή_4.
Στη δεύτερη περίπτωση θα εκτελεστούν: εντολή_2, εντολή_5.
Ένα παράδειγμα εντολής που αντιστρέφει δύο συνθήκες μαζί:
α <- 10 (ενώ πριν ήταν αρνητικός)
και οι δύο συνθήκες να είναι α < 0, α > 5.
Eυχαριστώ.
Η συγκεκριμένη άσκηση είναι φωτογραφία της σειριακής αναζήτησης. Οπότε καλύτερα μεταφέρεις τη γνώση της αναζήτησης και καθαρίζεις. Είναι κάτι σαν υλοποίηση break σε ψευδογλώσσα.
Επίσης νομίζω πως στο συγκεκριμένο παράδειγμα ένα διάγραμμα ροής δεν μπορεί να βοηθήσει.
Τέλος θα ήθελα να επαναλάβω για μια ακόμα φορά ότι ασκήσεις μετατροπής αδόμητου σε δομημένο πηγαίνουν το μάθημα πολύ πίσω. Ελπίζω πως δε θα τις ξαναδούμε ποτέ σε εξετάσεις.
Παράθεση από: gpapargi στις 09 Απρ 2008, 12:58:40 ΜΜ
Τέλος θα ήθελα να επαναλάβω για μια ακόμα φορά ότι ασκήσεις μετατροπής αδόμητου σε δομημένο πηγαίνουν το μάθημα πολύ πίσω. Ελπίζω πως δε θα τις ξαναδούμε ποτέ σε εξετάσεις.
...τώρα κατάλαβα τι εννοούσε ο Γιώργος: ;D >:D
(http://imgs.xkcd.com/comics/goto.png)
;D ;D ;D ;D
Δείτε κι αυτό:
ΑΡΧΗ
ΛΟΓΙΚΗ<--ΣΥΝΘΗΚΗ1
ΟΣΟ ΛΟΓΙΚΗ ΕΠΑΝΑΛΑΒΕ
ΕΝΤΟΛΗ 2
ΑΝ ΣΥΝΘΗΚΗ 3 ΤΟΤΕ
ΕΝΤΟΛΗ 4
ΛΟΓΙΚΗ<--ΨΕΥΔΗΣ
ΑΛΛΙΩΣ
ΕΝΤΟΛΗ 5
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
f<-Ψευδής
ΟΣΟ συνθηκη_1 και f=Ψευδής ΕΠΑΝΑΛΑΒΕ
εντολη_2
ΑΝ συνθηκη_3 ΤΟΤΕ
εντολη_4
f<-Αληθής
ΑΛΛΙΩΣ
εντολη_5
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΟΚ
Αλλά πες μου αν υπάρχει κάτι που σ`ενοχλεί στη λύση που παρέθεσα
Θα πω εγώ τι με ενοχλεί
Μπορούμε να γράψουμε
ΙΣΧΥΕΙ <- ΑΛΗΘΗΣ
ΟΣΟ ΙΣΧΥΕΙ ΕΠΑΝΑΛΑΒΕ
αντί για
ΟΣΟ ΙΣΧΥΕΙ=ΑΛΗΘΗΣ ΕΠΑΝΑΛΑΒΕ
φυσικά και μου φαίνεται λογικό, δε λέω αλλά το έχει δει κανείς πουθενά στο διδακτικό πακέτο?
ΑΡΧΗ
ΛΟΓΙΚΗ<--ΣΥΝΘΗΚΗ1
ΟΣΟ ΛΟΓΙΚΗ=ΑΛΗΘΗΣ ΕΠΑΝΑΛΑΒΕ
ΕΝΤΟΛΗ 2
ΑΝ ΣΥΝΘΗΚΗ 3 ΤΟΤΕ
ΕΝΤΟΛΗ 4
ΛΟΓΙΚΗ<--ΨΕΥΔΗΣ
ΑΛΛΙΩΣ
ΕΝΤΟΛΗ 5
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Ετσι είναι καλύτερα. Συμφωνώ. Αν και ο στόχος δεν ήταν αυτός αλλα απλά να μην προσθέσω επιπλέον συνθήκη στην ΟΣΟ.
Πέρα απ` το διδακτικό πακέτο δεν αποκλείω να πέσει κάτι σαν .. ΑΝ flag ΤΟΤΕ..
Θάθελα τη γνώμη σας
Δε νομίζω ... Πιθανότερο βλέπω να βάζουν στη θεωρία τι είναι σημαία (flag) και γιατί τη χρησιμοποιούμε (Κεφ.8 ) 8)
Σημαία είναι το σύμβολο κάθε κράτους και το χρησιμοποιούμε κυρίως για τα αμφίβια (όσα έμβυα όντα έχουν βρόχους ή βρόγχους)