Αποστολέας Θέμα: METATΡΟΠΗ ΑΝ ΣΕ ΕΠΙΛΕΞΕ  (Αναγνώστηκε 2233 φορές)

droopy

  • Θαμώνας
  • ***
  • Μηνύματα: 38
  • you know what... i'm happy
METATΡΟΠΗ ΑΝ ΣΕ ΕΠΙΛΕΞΕ
« στις: 02 Ιαν 2009, 09:45:56 μμ »
ΚΑΛΗ ΧΡΟΝΙΑ ΣΕ ΟΛΟΥΣ.

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

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

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

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

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

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

Ευχαριστώ




sstergou

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 983
  • Program or be Programmed
    • pseudoglossa.gr
Απ: METATΡΟΠΗ ΑΝ ΣΕ ΕΠΙΛΕΞΕ
« Απάντηση #1 στις: 02 Ιαν 2009, 10:48:51 μμ »
Το πρώτο πράγμα που μου ήρθε στο μυαλό είναι αυτό:

Κώδικας: Text
  1. Επίλεξε συνθήκη1
  2.   περίπτωση Αληθής
  3.     εντολές1
  4.   περίπτωση αλλιώς
  5.     Επίλεξε συνθήκη2
  6.       περίπτωση Αληθής
  7.         εντολές2
  8.       περίπτωση αλλιώς
  9.         εντολές3
  10.     Τέλος_επιλογών
  11. Τέλος_επιλογών
  12.  
Στάθης Στέργου - sstergouATgmailDOTcom - http://www.pseudoglossa.gr

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

  • Ομάδα διαγωνισμάτων 2010
  • *
  • Μηνύματα: 1095
Απ: METATΡΟΠΗ ΑΝ ΣΕ ΕΠΙΛΕΞΕ
« Απάντηση #2 στις: 12 Ιαν 2009, 01:35:32 πμ »
Νομίζω droopy  πως κάτι δεν πάει καλά με την ερώτηση του διαγωνίσματος που βρήκες :
Ζητάει να γραφεί με μια εντολή Επίλεξε ή να γίνουν εμφωλευμένες Επίλεξε όπως απάντησε σωστά ο Στάθης;

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

Νομίζω υπάρχει μια ασάφεια στην διατύπωση.

Γιαννούλης Γιώργος

  • Βετεράνος
  • ****
  • Μηνύματα: 59
Απ: METATΡΟΠΗ ΑΝ ΣΕ ΕΠΙΛΕΞΕ
« Απάντηση #3 στις: 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) δεν αναφέρεται στην ύλη.

epsilonXi

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

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

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

άπαπα

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5145
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: METATΡΟΠΗ ΑΝ ΣΕ ΕΠΙΛΕΞΕ
« Απάντηση #5 στις: 11 Νοέ 2019, 12:32:04 μμ »
Χρησιμοποίησα σταθερές στο παραπάνω παράδειγμα γιατί στην υλοποίηση της γλώσσας στον διερμηνευτή της γλώσσας, δεν δέχεται να χρησιμοποιηθούν μεταβλητές, κάτι που (στο παρόν βιβλίο του 2019) δεν αναφέρεται στην ύλη.

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

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