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

Γενικό Λύκειο => Δομή επιλογής => Γ΄ Λυκείου => Εντολή ΑΝ => Μήνυμα ξεκίνησε από: droopy στις 01 Νοε 2007, 09:13:58 ΜΜ

Τίτλος: ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΕΜΦΩΛΕΥΜΕΝΗ ΣΕ ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ
Αποστολή από: droopy στις 01 Νοε 2007, 09:13:58 ΜΜ
ΒΡΗΚΑ ΣΕ ΕΝΑ ΒΟΗΘΗΜΑ ΤΟ ΠΑΡΑΚΑΤΩ:

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

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

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

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

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

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

ΕΥΧΑΡΙΣΤΩ

Τίτλος: Απ: ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΕΜΦΩΛΕΥΜΕΝΗ ΣΕ ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ
Αποστολή από: alkisg στις 01 Νοε 2007, 11:46:52 ΜΜ
Droopy, αν σε βολεύει, καλύτερα να γράφεις με μικρά, είναι πιο ευανάγνωστα.

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

Να ένα κομμάτι κώδικα που δεν μετατρέπεται σε πολλαπλή επιλογή:
Κώδικας (ΓΛΩΣΣΑ) [Επιλογή]

ΔΙΑΒΑΣΕ θέση, όνομα
ΑΝ θέση <= Ν ΤΟΤΕ
  ΑΝ όνομα = ονόματα[θέση] ΤΟΤΕ
    ΓΡΑΨΕ 'Βρέθηκε το όνομα στη θέση ', θέση
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ


Δεν επιτρέπεται να βάλεις και τις δύο συνθήκες σε μία γραμμή γιατί αν η θέση είναι μεγαλύτερη από το Ν θα προσπαθήσεις να συγκρίνεις στοιχείο εκτός των ορίων του πίνακα. Αυτό λέγεται range error.
Τίτλος: Απ: ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΕΜΦΩΛΕΥΜΕΝΗ ΣΕ ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ
Αποστολή από: droopy στις 02 Νοε 2007, 12:16:16 ΠΜ
Αν τις βάλουμε σε μία γραμμή τότε:

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

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

Εκτός αν είναι κάτι άλλο που δεν κατάλαβα.
Τίτλος: Απ: ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΕΜΦΩΛΕΥΜΕΝΗ ΣΕ ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ
Αποστολή από: alkisg στις 02 Νοε 2007, 07:08:30 ΠΜ
Σόρρυ, το έγραψα λάθος, εννοούσα ονόματα[θέση].

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

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

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

Κάνε και μια δοκιμή, τρέξε το παρακάτω στο Διερμηνευτή:
Κώδικας (ΓΛΩΣΣΑ) [Επιλογή]

ΠΡΟΓΡΑΜΜΑ Δοκιμή
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Ν, θέση
  ΧΑΡΑΚΤΗΡΕΣ: ονόματα[10], όνομα
ΑΡΧΗ
  Ν <- 10
  θέση <- 20
  όνομα <- 'Droopy'
!Με εμφωλευμένη, τρέχει κανονικά
  ΑΝ θέση <= Ν ΤΟΤΕ
    ΑΝ όνομα = ονόματα[θέση] ΤΟΤΕ
      ΓΡΑΨΕ 'Βρέθηκε το όνομα στη θέση ', θέση
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΑΝ
!Με πολλαπλή, δεν τρέχει
  ΑΝ θέση <= Ν ΚΑΙ όνομα = ονόματα[θέση] ΤΟΤΕ
    ΓΡΑΨΕ 'Βρέθηκε το όνομα στη θέση ', θέση
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


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

(πρόσεξε όμως να έχεις ενεργοποιημένη την επιλογή «Να γίνεται πλήρης αποτίμηση των λογικών συνθηκών» από το μενού Εργαλεία » Επιλογές » καρτέλα Γλώσσα).
Τίτλος: Απ: ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΕΜΦΩΛΕΥΜΕΝΗ ΣΕ ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ
Αποστολή από: Juan στις 17 Οκτ 2008, 08:38:40 ΜΜ
Παράθεση από: droopy στις 01 Νοε 2007, 09:13:58 ΜΜ
ΒΡΗΚΑ ΣΕ ΕΝΑ ΒΟΗΘΗΜΑ ΤΟ ΠΑΡΑΚΑΤΩ:

ΑΝ Χ>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 στις 08 Δεκ 2008, 04:46:10 ΜΜ
Έχεις δίκιο.

Ευχαριστώ για την διόρθωση.
Τίτλος: Απ: ΜΕΤΑΤΡΟΠΗ ΑΠΟ ΕΜΦΩΛΕΥΜΕΝΗ ΣΕ ΠΟΛΛΑΠΛΗ ΕΠΙΛΟΓΗ
Αποστολή από: tsakmaki στις 16 Οκτ 2009, 11:20:22 ΠΜ
Αν το διατυπώσουμε έτσι; Τότε δεν μετατρέπεται. Σωστά;
ΑΝ Χ>0 ΤΟΤΕ
    ΑΝ Χ>5 ΤΟΤΕ
         Υ <-- 1
    ΑΛΛΙΩΣ
         Υ <-- 18
     ΤΕΛΟΣ_ΑΝ
ΑΛΛΙΩΣ
     ΔΙΑΒΑΣΕ Χ
     ΑΝ Χ>=-5 ΤΟΤΕ
          Υ <-- 3
     ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ