Αποστολέας Θέμα: ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΕΜΦΩΛΕΥΜΕΝΗ ΣΕ ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ  (Αναγνώστηκε 5065 φορές)

droopy

  • Θαμώνας
  • ***
  • Μηνύματα: 36
  • you know what... i'm happy
ΒΡΗΚΑ ΣΕ ΕΝΑ ΒΟΗΘΗΜΑ ΤΟ ΠΑΡΑΚΑΤΩ:

ΑΝ Χ>0 ΤΟΤΕ
    ΑΝ Χ>5 ΤΟΤΕ
         Υ <-- 1
    ΑΛΛΙΩΣ
         Υ <-- 18
     ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ
     Χ <-- Χ - 1
     ΑΝ Χ>=-5 ΤΟΤΕ
          Υ <-- 3
     ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ

ΚΑΙ ΑΝΑΦΕΡΕΙ ΟΤΙ ΑΥΤΗ Η ΕΜΦΩΛΕΥΜΕΝΗ ΔΟΜΗ ΕΠΙΛΟΓΗΣ ΔΕΝ ΜΠΟΡΕΙ ΝΑ ΓΡΑΦΕΙ ΜΕ ΤΗ ΧΡΗΣΗ ΤΗΣ ΔΟΜΗΣ ΑΝ...ΤΟΤΕ...ΑΛΛΙΩΣ_ΑΝ

ΟΜΩΣ ΝΟΜΙΖΩ ΟΤΙ ΜΕΤΑΤΡΕΠΕΤΑΙ ΩΣ ΕΞΗΣ:

ΑΝ (Χ>0) ΚΑΙ (Χ>5) ΤΟΤΕ
     Υ<--1
ΑΛΛΙΩΣ_ΑΝ (Χ>0) ΚΑΙ (Χ<=5) ΤΟΤΕ
     Υ<-- 18
ΑΛΛΙΩΣ_ΑΝ (Χ<=0) ΚΑΙ (Χ>=-5)
     Χ<--Χ-1
     Υ<--3
ΑΛΛΙΩΣ
     Χ<--Χ-1
ΤΕΛΟΣ_ΑΝ

ΕΧΕΙ ΚΑΠΟΙΟ ΛΑΘΟΣ Η ΜΕΤΑΤΡΟΠΗ ΑΥΤΗ?

ΑΝ ΟΧΙ, ΥΠΑΡΧΕΙ ΕΜΦΩΛΕΥΜΕΝΗ ΔΟΜΗ ΤΗΣ ΑΝ ΠΟΥ ΔΕΝ ΜΠΟΡΕΙ ΝΑ ΜΕΤΑΤΡΑΠΕΙ ΣΕ ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ?

ΕΥΧΑΡΙΣΤΩ


alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 4388
    • alkisg@im.sch.gr
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΕΜΦΩΛΕΥΜΕΝΗ ΣΕ ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ
« Απάντηση #1 στις: 01 Νοέ 2007, 11:46:52 μμ »
Droopy, αν σε βολεύει, καλύτερα να γράφεις με μικρά, είναι πιο ευανάγνωστα.

Δεν βλέπω κανένα λάθος στη μετατροπή, πέρα από τις επαναλήψεις συνθηκών και εντολών.

Να ένα κομμάτι κώδικα που δεν μετατρέπεται σε πολλαπλή επιλογή:
Κώδικας: Text
  1. ΔΙΑΒΑΣΕ θέση, όνομα
  2. ΑΝ θέση <= Ν ΤΟΤΕ
  3.   ΑΝ όνομα = ονόματα[θέση] ΤΟΤΕ
  4.     ΓΡΑΨΕ 'Βρέθηκε το όνομα στη θέση ', θέση
  5.   ΤΕΛΟΣ_ΑΝ
  6. ΤΕΛΟΣ_ΑΝ
  7.  

Δεν επιτρέπεται να βάλεις και τις δύο συνθήκες σε μία γραμμή γιατί αν η θέση είναι μεγαλύτερη από το Ν θα προσπαθήσεις να συγκρίνεις στοιχείο εκτός των ορίων του πίνακα. Αυτό λέγεται range error.

droopy

  • Θαμώνας
  • ***
  • Μηνύματα: 36
  • you know what... i'm happy
Απ: ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΕΜΦΩΛΕΥΜΕΝΗ ΣΕ ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ
« Απάντηση #2 στις: 02 Νοέ 2007, 12:16:16 πμ »
Αν τις βάλουμε σε μία γραμμή τότε:

Διάβασε θέση, όνομα
Αν (θέση<=Ν) ΚΑΙ (όνομα = ονόματα [Ν]) τότε
  εμφάνισε "βρέθηκε στη θέση", θέση
Τέλος_αν

Αν η θέση > Ν τότε δεν θα μπει μέσα οπότε δίνουν το ίδιο αποτέλεσμα.

Εκτός αν είναι κάτι άλλο που δεν κατάλαβα.

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 4388
    • alkisg@im.sch.gr
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΕΜΦΩΛΕΥΜΕΝΗ ΣΕ ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ
« Απάντηση #3 στις: 02 Νοέ 2007, 07:08:30 πμ »
Σόρρυ, το έγραψα λάθος, εννοούσα ονόματα[θέση].

Έστω ότι ο πίνακας έχει 10 στοιχεία (Ν=10) και μας δίνουν θέση=20.
ΑΝ (θέση <= Ν) ΚΑΙ (όνομα = ονόματα[θέση]) ΤΟΤΕ
ισοδυναμεί τότε με
ΑΝ (20 <= 10) ΚΑΙ (όνομα = ονόματα[20]) ΤΟΤΕ

Ο υπολογιστής, τρέχοντας την τελευταία γραμμή, θα προσπαθήσει να διαβάσει την 20ή θέση του πίνακα ονόματα (ονόματα[20]), η οποία δεν υπάρχει, και επομένως το πρόγραμμα θα κολλήσει.

Αν χρησιμοποιούσαμε εμφωλευμένη ΑΝ, τότε δεν θα "έμπαινε" στην δεύτερη ΑΝ και επομένως δεν θα προσπαθούσε να διαβάσει το ονόματα[20].

Κάνε και μια δοκιμή, τρέξε το παρακάτω στο Διερμηνευτή:
Κώδικας: Text
  1. ΠΡΟΓΡΑΜΜΑ Δοκιμή
  2. ΜΕΤΑΒΛΗΤΕΣ
  3.   ΑΚΕΡΑΙΕΣ: Ν, θέση
  4.   ΧΑΡΑΚΤΗΡΕΣ: ονόματα[10], όνομα
  5. ΑΡΧΗ
  6.   Ν <- 10
  7.   θέση <- 20
  8.   όνομα <- 'Droopy'
  9. !Με εμφωλευμένη, τρέχει κανονικά
  10.   ΑΝ θέση <= Ν ΤΟΤΕ
  11.     ΑΝ όνομα = ονόματα[θέση] ΤΟΤΕ
  12.       ΓΡΑΨΕ 'Βρέθηκε το όνομα στη θέση ', θέση
  13.     ΤΕΛΟΣ_ΑΝ
  14.   ΤΕΛΟΣ_ΑΝ
  15. !Με πολλαπλή, δεν τρέχει
  16.   ΑΝ θέση <= Ν ΚΑΙ όνομα = ονόματα[θέση] ΤΟΤΕ
  17.     ΓΡΑΨΕ 'Βρέθηκε το όνομα στη θέση ', θέση
  18.   ΤΕΛΟΣ_ΑΝ
  19. ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
  20.  

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

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

Juan

  • Θαμώνας
  • ***
  • Μηνύματα: 26
Απ: ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΕΜΦΩΛΕΥΜΕΝΗ ΣΕ ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ
« Απάντηση #4 στις: 17 Οκτ 2008, 08:38:40 μμ »
ΒΡΗΚΑ ΣΕ ΕΝΑ ΒΟΗΘΗΜΑ ΤΟ ΠΑΡΑΚΑΤΩ:

ΑΝ Χ>0 ΤΟΤΕ
    ΑΝ Χ>5 ΤΟΤΕ
         Υ <-- 1
    ΑΛΛΙΩΣ
         Υ <-- 18
     ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ
     Χ <-- Χ - 1
     ΑΝ Χ>=-5 ΤΟΤΕ
          Υ <-- 3
     ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ

ΚΑΙ ΑΝΑΦΕΡΕΙ ΟΤΙ ΑΥΤΗ Η ΕΜΦΩΛΕΥΜΕΝΗ ΔΟΜΗ ΕΠΙΛΟΓΗΣ ΔΕΝ ΜΠΟΡΕΙ ΝΑ ΓΡΑΦΕΙ ΜΕ ΤΗ ΧΡΗΣΗ ΤΗΣ ΔΟΜΗΣ ΑΝ...ΤΟΤΕ...ΑΛΛΙΩΣ_ΑΝ

ΟΜΩΣ ΝΟΜΙΖΩ ΟΤΙ ΜΕΤΑΤΡΕΠΕΤΑΙ ΩΣ ΕΞΗΣ:

ΑΝ (Χ>0) ΚΑΙ (Χ>5) ΤΟΤΕ
     Υ<--1
ΑΛΛΙΩΣ_ΑΝ (Χ>0) ΚΑΙ (Χ<=5) ΤΟΤΕ
     Υ<-- 18
ΑΛΛΙΩΣ_ΑΝ (Χ<=0) ΚΑΙ (Χ>=-5)
     Χ<--Χ-1
     Υ<--3
ΑΛΛΙΩΣ
     Χ<--Χ-1
ΤΕΛΟΣ_ΑΝ

ΕΧΕΙ ΚΑΠΟΙΟ ΛΑΘΟΣ Η ΜΕΤΑΤΡΟΠΗ ΑΥΤΗ?

ΑΝ ΟΧΙ, ΥΠΑΡΧΕΙ ΕΜΦΩΛΕΥΜΕΝΗ ΔΟΜΗ ΤΗΣ ΑΝ ΠΟΥ ΔΕΝ ΜΠΟΡΕΙ ΝΑ ΜΕΤΑΤΡΑΠΕΙ ΣΕ ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ?

ΕΥΧΑΡΙΣΤΩ



Νομίζω η μετατροπή σου δεν είναι σωστή. Το λάθος βρίσκεται στην τελευταία ΑΛΛΙΩΣ_ΑΝ. Αν το x είναι -5 το y δεν πρέπει να πάρει την τιμή 3. Θα το διόρθωνα ως εξής λοιπόν:

ΑΝ (Χ>0) ΚΑΙ (Χ>5) ΤΟΤΕ
     Υ<--1
ΑΛΛΙΩΣ_ΑΝ (Χ>0) ΚΑΙ (Χ<=5) ΤΟΤΕ
     Υ<-- 18
ΑΛΛΙΩΣ_ΑΝ (Χ<=0) ΚΑΙ (Χ-1>=-5) TOTE
     Χ<--Χ-1
     Υ<--3
ΑΛΛΙΩΣ
     Χ<--Χ-1
ΤΕΛΟΣ_ΑΝ

droopy

  • Θαμώνας
  • ***
  • Μηνύματα: 36
  • you know what... i'm happy
Απ: ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΕΜΦΩΛΕΥΜΕΝΗ ΣΕ ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ
« Απάντηση #5 στις: 08 Δεκ 2008, 04:46:10 μμ »
Έχεις δίκιο.

Ευχαριστώ για την διόρθωση.

tsakmaki

  • Οπαδός
  • **
  • Μηνύματα: 12
Απ: ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΕΜΦΩΛΕΥΜΕΝΗ ΣΕ ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ
« Απάντηση #6 στις: 16 Οκτ 2009, 11:20:22 πμ »
Αν το διατυπώσουμε έτσι; Τότε δεν μετατρέπεται. Σωστά;
ΑΝ Χ>0 ΤΟΤΕ
    ΑΝ Χ>5 ΤΟΤΕ
         Υ <-- 1
    ΑΛΛΙΩΣ
         Υ <-- 18
     ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ
     ΔΙΑΒΑΣΕ Χ
     ΑΝ Χ>=-5 ΤΟΤΕ
          Υ <-- 3
     ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ