Το Στέκι των Πληροφορικών

Γενικό Λύκειο => Δομή επιλογής => Γ΄ Λυκείου => Εντολή ΕΠΙΛΕΞΕ => Μήνυμα ξεκίνησε από: droopy στις 02 Ιαν 2009, 09:45:56 ΜΜ

Τίτλος: METATΡΟΠΗ ΑΝ ΣΕ ΕΠΙΛΕΞΕ
Αποστολή από: droopy στις 02 Ιαν 2009, 09:45:56 ΜΜ
ΚΑΛΗ ΧΡΟΝΙΑ ΣΕ ΟΛΟΥΣ.

Βρήκα σε ένα διαγώνισμα το παρακάτω θέμα:

Να ξαναγράψετε το παρακάτω τμήμα αλγορίθμου χρησιμοποιώντας την δομή Επίλεξε

Αν συνθήκη1 τοτε
     εντολες1
αλλιως
      αν συνθήκη2 τοτε
        εντολες2
      αλλιως
        εντολές3
      τελος_αν
τελος_αν

Αν η συνθήκη1 περιέχει διαφορετική μεταβλητή απο τη συνθηκη2, π.χ α>0 η συνθηκη1 και β>5 η συνθηκη2, πως θα μπορούσε να γίνει αυτή η μετατροπή?

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

Επίσης, δίπλα στην επίλεξε τι θα βάλουμε???

Ευχαριστώ



Τίτλος: Απ: METATΡΟΠΗ ΑΝ ΣΕ ΕΠΙΛΕΞΕ
Αποστολή από: sstergou στις 02 Ιαν 2009, 10:48:51 ΜΜ
Το πρώτο πράγμα που μου ήρθε στο μυαλό είναι αυτό:

Κώδικας (Ψευδογλώσσα) [Επιλογή]
Επίλεξε συνθήκη1
  περίπτωση Αληθής
    εντολές1
  περίπτωση αλλιώς
    Επίλεξε συνθήκη2
      περίπτωση Αληθής
        εντολές2
      περίπτωση αλλιώς
        εντολές3
    Τέλος_επιλογών
Τέλος_επιλογών
Τίτλος: Απ: METATΡΟΠΗ ΑΝ ΣΕ ΕΠΙΛΕΞΕ
Αποστολή από: Καρκαμάνης Γεώργιος στις 12 Ιαν 2009, 01:35:32 ΠΜ
Νομίζω droopy  πως κάτι δεν πάει καλά με την ερώτηση του διαγωνίσματος που βρήκες :
Ζητάει να γραφεί με μια εντολή Επίλεξε ή να γίνουν εμφωλευμένες Επίλεξε όπως απάντησε σωστά ο Στάθης;

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

Νομίζω υπάρχει μια ασάφεια στην διατύπωση.
Τίτλος: Απ: METATΡΟΠΗ ΑΝ ΣΕ ΕΠΙΛΕΞΕ
Αποστολή από: Γιαννούλης Γιώργος στις 09 Νοε 2019, 10:20:40 ΠΜ
Λίγα χρόνια καθυστερημένος  ;D υπάρχει σωστή απάντηση αλλά δεν θα την έβαζα σε Πανελλήνιες.
Βασίζεται στο ότι δεν επιτρέπεται να χρησιμοποίησουμε λογικούς τελεστές στο ΕΠΙΛΕΞΕ, αλλά μπορούμε να χρησιμοποιήσουμε = και <> για λογικές τιμές.

Οπότε το παράδειγμα :
Κώδικας [Επιλογή]
Επίλεξε συνθήκη1
  περίπτωση Αληθής
    εντολές1
  περίπτωση αλλιώς
    Επίλεξε συνθήκη2
      περίπτωση Αληθής
        εντολές2
      περίπτωση αλλιώς
        εντολές3
    Τέλος_επιλογών
Τέλος_επιλογών


μπορεί να μετατραπεί σε μία μόνο επίλεξε ως εξής:
Κώδικας [Επιλογή]

Επίλεξε συνθήκη1
  περίπτωση Αληθής
    εντολές1
  περίπτωση <> (συνθήκη2)
    εντολές2
  περίπτωση αλλιώς
    εντολές3
Τέλος_επιλογών


Η δυσκολία είναι στο να σκεφτείς ότι στην εντολή ΠΕΡΙΠΤΩΣΗ <> (συνθήκη2) ξέρεις ότι η συνθήκη1 είναι ψευδής οπότε για να σιγουρέψεις μια άλλη συνθήκη ότι είναι αληθής αρκεί να είναι διαφορή της συνθήκη1.

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

Κώδικας [Επιλογή]
ΠΡΟΓΡΑΜΜΑ δοκιμη_επιλεξε
ΣΤΑΘΕΡΕΣ
  α = 2
  β = 3
  γ = 4
  δ = 5
  κ = 6
  λ = 7
ΑΡΧΗ
  ΑΝ α > β ΤΟΤΕ
    ΓΡΑΨΕ α + β
  ΑΛΛΙΩΣ_ΑΝ γ > δ ΤΟΤΕ
    ΓΡΑΨΕ γ*δ
  ΑΛΛΙΩΣ_ΑΝ κ > λ ΤΟΤΕ
    ΓΡΑΨΕ κ - λ
  ΑΛΛΙΩΣ
    ΓΡΑΨΕ α + δ + λ
  ΤΕΛΟΣ_ΑΝ

  ΕΠΙΛΕΞΕ α > β
    ΠΕΡΙΠΤΩΣΗ ΑΛΗΘΗΣ
      ΓΡΑΨΕ α + β
    ΠΕΡΙΠΤΩΣΗ <> (γ > δ)
      ΓΡΑΨΕ γ*δ
    ΠΕΡΙΠΤΩΣΗ <> (κ > λ)
      ΓΡΑΨΕ κ - λ
    ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
      ΓΡΑΨΕ α + δ + λ
  ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ δοκιμη_επιλεξε


Χρησιμοποίησα σταθερές στο παραπάνω παράδειγμα γιατί στην υλοποίηση της γλώσσας στον διερμηνευτή της γλώσσας, δεν δέχεται να χρησιμοποιηθούν μεταβλητές, κάτι που (στο παρόν βιβλίο του 2019) δεν αναφέρεται στην ύλη.
Τίτλος: Απ: METATΡΟΠΗ ΑΝ ΣΕ ΕΠΙΛΕΞΕ
Αποστολή από: epsilonXi στις 11 Νοε 2019, 08:53:07 ΠΜ
Γενικά δεν είμαι ούτε φανατικά κατά, ούτε φανατικά υπέρ της ΕΠΙΛΕΞΕ (είναι κανείς φανατικά υπέρ άραγε;  )... προσωπικά δε θα επέλεγα :P να τη χρησιμοποιήσω ποτέ, γιατί απλά βρίσκω ότι η ΑΝ μού επιτρέπει να εκφράσω ό,τι θελήσω να εκφράσω...

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

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

άπαπα
Τίτλος: Απ: METATΡΟΠΗ ΑΝ ΣΕ ΕΠΙΛΕΞΕ
Αποστολή από: alkisg στις 11 Νοε 2019, 12:32:04 ΜΜ
Παράθεση από: Γιαννούλης Γιώργος στις 09 Νοε 2019, 10:20:40 ΠΜ
Χρησιμοποίησα σταθερές στο παραπάνω παράδειγμα γιατί στην υλοποίηση της γλώσσας στον διερμηνευτή της γλώσσας, δεν δέχεται να χρησιμοποιηθούν μεταβλητές, κάτι που (στο παρόν βιβλίο του 2019) δεν αναφέρεται στην ύλη.

Απ' όσο θυμάμαι, δεν είχα δει το συγκεκριμένο σημείο να ξεκαθαρίζεται στο βιβλίο και ακολούθησα την πεπατημένη της Pascal. Ο λόγος της απαγόρευσης μεταβλητών εκεί απ' όσο ξέρω είναι για ταχύτητα, οι compilers στην ΕΠΙΛΕΞΕ μπορούν να χρησιμοποιήσουν jump tables ή binary searches αντί για συνεχόμενες ΑΝ, επιταχύνοντας έτσι το παραγόμενο πρόγραμμα. Δηλαδή 100 ΑΝ θέλουν 100 χρονικές μονάδες εκτέλεσης ενώ μία ΕΠΙΛΕΞΕ με 100 περιπτώσεις πιθανώς μόνο 1 χρονική μονάδα.

https://en.wikipedia.org/wiki/Switch_statement#Compilation