Διαφορά μεταξύ Εμφωλευμένων Επιλογών

Ξεκίνησε από blackadder, 18 Δεκ 2006, 01:14:25 ΠΜ

« προηγούμενο - επόμενο »

blackadder

Καλημέρα (ή νύχτα, δεν είμαι σίγουρος).

Ήθελα να κάνω μια ερώτηση σχετικά με τις δομές επιλογής και την διαφορά μεταξύ της μορφής ΑΝ.. ΤΟΤΕ.. ΑΛΛΙΩΣ...ΑΝ...ΤΟΤΕ...ΤΕΛΟΣ_ΑΝ και της μορφής ΑΝ..ΤΟΤΕ..ΑΛΛΙΩΣ_ΑΝ...ΤΕΛΟΣ_ΑΝ.

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

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

ΔΙΑΒΑΣΕ Β
ΑΝ Β >= 0 ΚΑΙ Β < 9.5 ΤΟΤΕ
   ΓΡΑΨΕ ‘ΑΠΟΡΡΙΠΤΕΤΑΙ’
ΑΛΛΙΩΣ
ΑΝ Β >= 9.5 ΚΑΙ Β < 12 ΤΟΤΕ
      ΓΡΑΨΕ ‘ΜΕΤΡΙΑ’
ΑΛΛΙΩΣ
      ΑΝ Β >= 12 ΚΑΙ Β < 15 ΤΟΤΕ
         ΓΡΑΨΕ ‘ΚΑΛΑ’
      ΑΛΛΙΩΣ
         ΑΝ Β >= 15 ΚΑΙ Β < 18.5 ΤΟΤΕ
            ΓΡΑΨΕ ‘ΠΟΛΥ ΚΑΛΑ’
         ΑΛΛΙΩΣ
            ΑΝ Β >= 18.5 ΚΑΙ Β <= 20 ΤΟΤΕ
            ΓΡΑΨΕ ‘ΑΡΙΣΤΑ’
            ΑΛΛΙΩΣ
               ΓΡΑΨΕ ‘ΛΑΘΟΣ ΒΑΘΜΟΣ’
            ΤΕΛΟΣ_ΑΝ
         ΤΕΛΟΣ_ΑΝ
      ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ


ΔΙΑΒΑΣΕ Β
ΑΝ Β >= 0 ΚΑΙ Β < 9.5 ΤΟΤΕ
   ΓΡΑΨΕ ‘ΑΠΟΡΡΙΠΤΕΤΑΙ’
ΑΛΛΙΩΣ_ΑΝ Β >= 9.5 ΚΑΙ Β < 12 ΤΟΤΕ
   ΓΡΑΨΕ ‘ΜΕΤΡΙΑ’
ΑΛΛΙΩΣ_ΑΝ Β >= 12 ΚΑΙ Β < 15 ΤΟΤΕ
   ΓΡΑΨΕ ‘ΚΑΛΑ’
ΑΛΛΙΩΣ_ΑΝ Β >= 15 ΚΑΙ Β < 18.5 ΤΟΤΕ
   ΓΡΑΨΕ ‘ΠΟΛΥ ΚΑΛΑ’
ΑΛΛΙΩΣ_ΑΝ Β >= 18.5 ΚΑΙ Β <= 20 ΤΟΤΕ
   ΓΡΑΨΕ ‘ΑΡΙΣΤΑ’
ΑΛΛΙΩΣ
   ΓΡΑΨΕ ‘ΛΑΘΟΣ ΒΑΘΜΟΣ’
ΤΕΛΟΣ_ΑΝ

Ευχαριστώ πολύ,
καλό ξημέρωμα!

nikosx

Καλημέρα,

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

ΠΠ <-- 0
ΠΑ <-- 0
ΔΙΑΒΑΣΕ Β
ΑΝ Β >= 0 ΚΑΙ Β < 9.5 ΤΟΤΕ
   ΠΑ <-- ΠΑ + 1
   ΓΡΑΨΕ ‘ΑΠΟΡΡΙΠΤΕΤΑΙ’
ΑΛΛΙΩΣ
  ΠΠ <-- ΠΠ + 1
  ΑΝ Β >= 9.5 ΚΑΙ Β < 12 ΤΟΤΕ
       ΓΡΑΨΕ ‘ΜΕΤΡΙΑ’
  ΑΛΛΙΩΣ
      ΑΝ Β >= 12 ΚΑΙ Β < 15 ΤΟΤΕ
         ΓΡΑΨΕ ‘ΚΑΛΑ’
      ΑΛΛΙΩΣ
         ΑΝ Β >= 15 ΚΑΙ Β < 18.5 ΤΟΤΕ
            ΓΡΑΨΕ ‘ΠΟΛΥ ΚΑΛΑ’
         ΑΛΛΙΩΣ
            ΑΝ Β >= 18.5 ΚΑΙ Β <= 20 ΤΟΤΕ
            ΓΡΑΨΕ ‘ΑΡΙΣΤΑ’
            ΑΛΛΙΩΣ
               ΓΡΑΨΕ ‘ΛΑΘΟΣ ΒΑΘΜΟΣ’
            ΤΕΛΟΣ_ΑΝ
         ΤΕΛΟΣ_ΑΝ
      ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ

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

Νίκος Ξ.
Νίκος Ξένος
Καθηγητής Πληροφορικής
nxenos@sch.gr

EleniK

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

gpapargi

Ίσως έχει ενδιαφέρον να πούμε 2 λόγια για την ιστορία της πολλαπλής επιλογής ...αλλιώς_αν...

Στις γλώσσες πριν υπάρξει η συγκεκριμένη εντολή, οι προγραμματιστές διέκριναν μεταξύ πολλών περιπτώσεων μέσω της εμφωλευμένης. Δεν υπήρχε άλλος τρόπος. Το πρόβλημα ήταν ότι με κάθε εμφώλευση ο κώδικας ξεκίναγε και από πιο μέσα με αποτέλεσμα να γίνεται δυσανάνωστος. Οπότε αυτό που έκαναν ήταν το εξής:
Άλλαξαν τη στοίχηση βάζοντας το αλλιώς κάτω από το αν (και όχι πιο μέσα από το αν). Επίσης κάθε αν (εκτος του πρωτου) έμπαινε δίπλα στο αλλιώς. Παρακάτω κάνω αυτό που περιγράφω.  Όπως βλέπεις είναι ο δικός σου πρώτος κώδικας έχοντας αλλάξει απλά τη στοίχιση. Είναι απλώς εμφώλευση.


ΔΙΑΒΑΣΕ Β
ΑΝ Β >= 0 ΚΑΙ Β < 9.5 ΤΟΤΕ
   ΓΡΑΨΕ ‘ΑΠΟΡΡΙΠΤΕΤΑΙ’
ΑΛΛΙΩΣ ΑΝ Β >= 9.5 ΚΑΙ Β < 12 ΤΟΤΕ
      ΓΡΑΨΕ ‘ΜΕΤΡΙΑ’
ΑΛΛΙΩΣ ΑΝ Β >= 12 ΚΑΙ Β < 15 ΤΟΤΕ
      ΓΡΑΨΕ ‘ΚΑΛΑ’
ΑΛΛΙΩΣ ΑΝ Β >= 15 ΚΑΙ Β < 18.5 ΤΟΤΕ
      ΓΡΑΨΕ ‘ΠΟΛΥ ΚΑΛΑ’
ΑΛΛΙΩΣ ΑΝ Β >= 18.5 ΚΑΙ Β <= 20 ΤΟΤΕ
      ΓΡΑΨΕ ‘ΑΡΙΣΤΑ’
ΑΛΛΙΩΣ
      ΓΡΑΨΕ ‘ΛΑΘΟΣ ΒΑΘΜΟΣ’
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΑΝ

Η παραπάνω στοίχιση έκανε εμφανή την ανάγκη για τη δημιουργία  μιας νέας δομής της "αλλιώς_αν". Μπήκε το "_" ανάμεσα στο "αλλιώς" και το "αν" και τα πολλά "Τέλος_αν" αντικαταστάθηκαν από ένα.

Με όλα αυτά θέλω να πω πως οι 2 κώδικες εξ'ορισμού είναι ισοδύναμοι. Η "αλλώς_αν" ορίστηκε για να κάνει αυτό που κάνει η εμφωλευμένη με τον παραπάνω τρόπο. Φυσικά όλα τα παραπάνω είναι σε ορολογία ψευδογλώσσας για να γίνουν κατανοητά και όχι κάποιας αληθινής γλώσσας προγραμματισμού.
Συνηθίζω να λέω αυτή την ιστορία την τάξη όταν μιλάω για μετατροπές μεταξύ πολλαπλής και εμφωλευμένης. Όποιος την καταλάβει κάνει τις μετατροπές απλά βάζοντας ή βγάζοντας χαρακτήρες "_" και αλλάζοντας τη στοίχιση.

petrosp13

Πάντως, να σχολιάσουμε πως δεν είναι καλό οποιαδήποτε εμφωλευμένη επιλογή να μετατρέπεται σε "Αν..Αλλιώς_αν"
Υπάρχουν πολλές περιπτώσεις στις οποίες η εμφωλευμένη επιλογή είναι πιο εύκολα κατανοητή στην λογική ροή της, όσο βαθιά κι αν φτάνει η διακλάδωση της
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

gpapargi

Συμφωνώ απόλυτα. Είναι η δομή του προβλήματος που θα υπαγορέψει αν θα χρησιμοποιήσουμε εμφωλευμένη, πολλαπλή ή σύνθετη συνθήκη με λογικούς τελεστές. Ένα κλασσικό παράδειγμα που το πρόβλημα περιγράφεται  καλύτερα με εμφωλευμένη από ότι με πολλαπλή είναι η λύση της πρωτοβάθμιας εξίσωσης αχ+β=0. Λύνεται ασφαλώς και με πολλαπλή αλλά δεν περιγράφεται το πρόβλημα με φυσικό τροπο.

petrosp13

Ακριβώς αυτό είχα κι εγώ στον νου μου
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

michalis

τελικά βάζουμε τόσα Τελος_αν όσα είναι και τα Αν

EleniK

@michalis

Στο 2ο κεφάλαιο έχει παραδείγματα που όταν η εμφωλευμένη εντολή είναι μία τότε τα γράφει σε μια γραμμή χωρίς τέλος_αν.

Προσωπική τακτική είναι να διδάσκω τις δομές επιλογής όπως αυτές παρουσιάζονται στο κεφάλαιο 8, δλδ όσα Αν τόσα τέλος_αν κλπ.

Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19

EleniK

Επίσης προσοχή μην μπερδέψεις τα αλλιώς_αν,  όσα Αν τόσα τέλος_αν και όχι όσα αλλιώς_αν. Είναι ένα κοινό λάθος που κάνουν αρχικά οι μαθητές.
Ελένη Κοκκίνου
Καθηγήτρια Πληροφορικής, ΠΕ19