Αυτό δεν ισχυέι πάντοτε, όπως στο παρακάτω παράδειγμα:
ΑΝ Χ <> 0 ΚΑΙ Υ<> 0 ΤΟΤΕ
ΑΝ Χ MOD Υ = 0 Ή Υ MOD X = 0 ΤΟΤΕ
ΓΡΑΨΕ 'ΠΟΛΛΑΠΛΑΣΙΑ'
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'ΟΧΙ ΠΟΛΛΑΠΛΑΣΙΑ'
ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ
ΓΡΑΨΕ 'ΚΑΠΟΙΟΣ ΜΗΔΕΝ'
ΤΕΛΟΣ_ΑΝ
Δεν κατάλαβα, το παρακάτω εννοείς?
ΑΝ (Χ <> 0 ΚΑΙ Υ<> 0) ΚΑΙ (Χ MOD Υ = 0 Ή Υ MOD X = 0) ΤΟΤΕ
ΓΡΑΨΕ 'ΠΟΛΛΑΠΛΑΣΙΑ'
ΤΕΛΟΣ_ΑΝ
ΑΝ (Χ <> 0 ΚΑΙ Υ<> 0) ΚΑΙ (Χ MOD Υ <> 0 ΚΑΙ Υ MOD X <> 0) ΤΟΤΕ
ΓΡΑΨΕ 'ΟΧΙ ΠΟΛΛΑΠΛΑΣΙΑ'
ΤΕΛΟΣ_ΑΝ
ΑΝ (Χ = 0 Η Υ= 0)ΤΟΤΕ
ΓΡΑΨΕ 'ΚΑΠΟΙΟΣ ΜΗΔΕΝ'
ΤΕΛΟΣ_ΑΝ
Αν το Χ=0 ή το Υ=0 δεν γίνονται οι δύο πρώτες ΑΝ, αφού θα ελεγχθούν και διαιρέσεις με παρονομαστή το μηδέν (0).
Είσαι σίγουρος ότι δε γίνεται?
Η δεύτερη συνθήκη δεν χρειάζεται να ελεγθεί αν η πρώτη είναι ψευδής.
Δεν λέει πουθενά ότι ισχύει στη ΓΛΩΣΣΑ κάτι τέτοιο αλλά ούτε ότι δεν ισχύει, από την υλοποίηση εξαρτάται
η μετατροπή αυτή σε απλές ΑΝ δεν δουλεύει ούτε στη Γλωσσομάθεια ούτε στη Γλώσσα, αλλά απ' ότι θυμάμαι σε κάποιες γλώσσες ισχύει αυτό που λες. Το θέμα είναι τι απαντάνε οι μαθητές σε μία τέτοια ερώτηση;
Παρακαλώ θα ήθελα την γνώμη και άλλων συναδέλφων
Ευχαριστώ
Η ερώτηση στην ουσία είναι το αν στην γλώσσα/ψευδογλώσσα έχουμε πλήρη ή μερική αποτίμηση των συνθηκών.
Είχαν γίνει διάφορες κουβέντες στο παρελθόν με την πιο διεξοδική που θυμάμαι να ήταν αυτή : https://alkisg.mysch.gr/steki/index.php?topic=752.0
Προσωπικά κατά την διδασκαλία του μαθήματος θεωρώ ότι υπάρχει πλήρης αποτίμηση των συνθηκών (π.χ. σε ασκήσεις με πίνακες όπου υπάρχει παραβίαση των ορίων)για διδακτικούς λόγους και αφού το βιβλίο αφήνει χωρίς ανάλυση το συγκεκριμένο ζήτημα.
Κανονικά αποτιμώνται όλες οι συνθήκες στη ΓΛΩΣΣΑ, δεν ήθελα να αμφισβητήσω αυτό
Αυτό που ήθελα να πω είναι πως στο αντι-παράδειγμα που έδωσες για να αποδείξεις τον ισχυρισμό σου πατάς πάνω σε ένα ζήτημα που είναι θέμα "υλοποίησης" και όχι καθαρά αλγοριθμικής. Έτσι σε μια γλώσσα που επιτρέπει short-circuit evaluation αυτό που θα έλεγες δεν ισχύει. Θα προτιμούσα ένα παράδειγμα που να ισχύει πάντου και να είναι πιο "αλγοριθμικό" ας πούμε.
Ένα απλοϊκό παράδειγμα είναι αν έχεις μία boolean μεταβλητή που παίρνει τιμές 0 ή 1 (true ή false) και θες να την αντιστρέψεις.
Ο κώδικας:
Αν Α=0 Τότε
Α←1
Αλλιώς_Αν Α=1
Α←0
Τέλος_Αν
δουλεύει
ενώ ο κώδικας:
Αν Α=0 Τότε
Α←1
Τέλος_Αν
Αν Α=1 Τότε
Α←0
Τέλος_Αν
προφανώς δεν δουλεύει στην περίπτωση που Α=0 καθώς θα εκτελεστούν σειριακά και οι δύο εντολές.
Κρίσιμο δηλαδή είναι αν επηρεάζεται η συνθήκη από την εκτέλεση της εντολής.
Βέβαια εδώ η εμφωλευμένη Αν είναι περιττή καθώς ισχύει μόνο μία από τις δύο συνθήκες.
Τροποποιήστε για μεταβλητή με παραπάνω τιμές :D
Με μια απλή Αν...Τότε
Αν 1=1 Τότε
Α <-- (Α +1) mod 2
Τέλος_Αν
:D
Πάντως το κάθε της αρχικής ερώτησης είναι βαριά κουβέντα. Μπορεί όπως ανέφερε ο/η amihail να σου βάλει μία εκχώρηση ή ένα διάβασε μέσα στην εξωτερική αν και πριν την εσωτερική που να τροποποιεί μία από τις μεταβλητές που συμμετέχουν στις συνθήκες. Κάτι τέτοιο δεν μπορεί να αναπαρασταθεί σε έκφραση οπότε και η εμφωλευμένη/πολλαπλή αν δεν μπορει να μετατραπεί σε απλές.
Νομίζω ότι το παράδειγμα:
Αν Α=0 Τότε
Α←1
Αλλιώς_Αν Α=1
Α←0
Τέλος_Αν
μετατρέπεται με απλές αν
flag ← 1
Αν Α=0 Τότε
Α←1
flag ← 0
Τέλος_Αν
Αν Α=1 ΚΑΙ flag = 1 ΤΟΤΕ
Α←0
Τέλος_Αν
λογικό είναι, χρειάζεσαι τιμή σημαία