Πέμπτη 18 Φεβρουαρίου 2016

Εγχειρίδιο της Μ2000 - Τεύχος 10ο

5.7 Πολλαπλή Επιλογή Διακλάδωσης

Σαν έννοια η πολλαπλή επιλογή διακλάδωσης περιλαμβάνει δυο πράγματα και όχι ένα:
1. Επιλογή Διακλάδωσης βάσει ενός αριθμού ως αριθμός επιλογής,
2. Επιλογή Διακλάδωσης βάσει αποτελέσματος έκφρασης και διαδοχικών ελέγχων συνθηκών.

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

Μπορεί κανείς να συνδυάσει την πολλαπλή διακλάδωση για μια εντολή ή για ένα μπλοκ εντολών ή όπως θα δούμε για μια σειρά μπλοκ εντολών.
(τα παραδείγματα είναι σχεδόν εκνευριστικά απλοϊκά αλλά δίνονται για να αφαιρεθεί η οποιαδήποτε απόσπαση από αυτό που πρέπει να μεταφέρουν)

5.7.1 Από Προς

Η πιο απλή περίπτωση είναι το Από Προς. Προϋποθέτει ότι οι αριθμοί θα είναι μεταξύ 1 και 5.
Αν θέλουμε αφαιρούμε κάποια Προς 500 για να συνεχίσουμε στην επόμενη. Φυσικά και εδώ έχουμε κώδικα σπαγγέτι!

Σειρά 1,5,2,3,3,4,1,2,1
Ενώ όχι κενό {
      Διάβασε Χ
      Από Χ Προς 100,200,300,αλφα,400
      100 Τύπωσε 1 : Προς 500
      200 Τύπωσε 2 : Προς 500
      300 Τύπωσε 3 : Προς 500
      αλφα:
             Τύπωσε 4 : Προς 500 \\ όχι στην ίδια γραμμή με την ετικέτα
      400 Τύπωσε 5
      500 Τύπωσε "Τα κατάφερες"
}      
 

5.7.2 Από Διαμέσου

Άδειασε
Σειρά 1,5,2,3,3,4,1,2,1
Ενώ όχι κενό {
      Διάβασε Χ
      Από Χ Διαμέσου 100,200,300,αλφα,400
      Προς 500
      100 Τύπωσε 1 : Επιστροφή
      200 Τύπωσε 2 : Επιστροφή
      300 Τύπωσε 3 : Επιστροφή
      αλφα:
             Τύπωσε 4 : Επιστροφή   \\ όχι στην ίδια γραμμή με την ετικέτα
      400 Τύπωσε 5 : Επιστροφή
      500 Τύπωσε "Τα κατάφερες"
}      


5.7.3 Επίλεξε Με/Επέλεξε Με Αριθμό

Εδώ θα δούμε το προηγούμενο πρόγραμμα με Επίλεξε Με, με Προς και με Διαμέσου ως εσωτερικές εντολές:

Άδειασε
Σειρά 1,5,2,3,3,4,1,2,1
Ενώ όχι Κενό {
      Διάβασε Χ
      Επιλεξε με Χ
      Με 1
            Προς 100
      Με 2
            Προς 200
      Με 3
            Προς 300
      Με 4
            Προς αλφα
      Με 5
            Προς 400
      Τέλος επιλογής
      Προς 500
      100 Τύπωσε 1 : Προς 500
      200 Τύπωσε 2 : Προς 500
      300 Τύπωσε 3 : Προς 500
      αλφα:
             Τύπωσε 4 : Προς 500 \\ όχι στην ίδια γραμμή με την ετικέτα
      400 Τύπωσε 5
      500 Τύπωσε "Τα κατάφερες"
}



Άδειασε
Σειρά 1,5,2,3,3,4,1,2,1
Ενώ όχι Κενό {
      Διάβασε Χ
      Επίλεξε με Χ
      Με 1
            Διαμέσου 100
      Με 2
            Διαμέσου 200
      Με 3
            Διαμέσου 300
      Με 4
            Διαμέσου αλφα
      Με 5
            Διαμέσου 400
      Τέλος επιλογής
      Προς 500
      100 Τύπωσε 1 : Επιστροφή
      200 Τύπωσε 2 : Επιστροφή
      300 Τύπωσε 3 : Επιστροφή
      αλφα:
             Τύπωσε 4 : Επιστροφή   \\ όχι στην ίδια γραμμή με την ετικέτα
      400 Τύπωσε 5 : Επιστροφή
      500 Τύπωσε "Τα κατάφερες"
}


Αυτό το παράδειγμα δόθηκε για να φανεί πόσο γενική είναι η Επίλεξε Με. Πιάνει και αυτό που κάνει η Από Προς και η Από Διαμέσου. Όμως δουλεύει χωρίς την ανάγκη Προς ή Διαμέσου:
Άδειασε
Σειρά 1,5,2,3,3,4,1,2,1
Ενώ όχι Κενό {
      Διάβασε Χ
      Επιλεξε με Χ
      Με 1
             Τύπωσε 1
      Με 2
            Τύπωσε 2
      Με 3
            Τύπωσε 3
      Με 4
            Τύπωσε 4
      Με 5
            Τύπωσε 5
      Τέλος επιλογής
      Τύπωσε "Τα κατάφερες"
}


Δείτε μια παραλλαγή:
Άδειασε
Λ=100
Σειρά 110, 35,0,60,5,110, 42, 4
Ενώ όχι Κενό {
      Διάβασε Χ
      Τύπωσε ">>>>>>>>>>", Χ
      Επίλεξε με Χ
      Με 0
            Τύπωσε "Μηδέν": Λ=0
      Με 1 έως 9
            Τύπωσε "Κάτω από δέκα"
      Με 15, 20, 25, 30, 40 έως 45
            Τύπωσε " 15 ή 20 ή 25 ή 30 ή 40 έως 45"
      Με <50, 60, 70
            Τύπωσε "Μικρότερο από 50, ή ίσο με 60, ή ίσο με 70"
      Με =110 και Λ=100
            Τύπωσε "Έίναι 110 και το Λ είναι 100"
      Αλλιώς Με
            Τύπωσε "Εκτός επιλογών"
      Τέλος επιλογής
      Τύπωσε "Τα κατάφερες"
}

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

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

Άδειασε
Σειρά 1,2,3,4,0, 10
Ενώ όχι Κενό {
      Διάβασε Χ
      Επίλεξε με Χ
      Με 0
            {
                   Τύπωσε "Μηδέν"
                   Διέκοψε
             }
      Με 1
            Τύπωσε 1
      Με 2
            Τύπωσε 2
      Με 3
             {
                    Τύπωσε 3
                    Συνέχισε
              }
      Με 4
            Τύπωσε 4
      Αλλιώς Με
            Τύπωσε "Κάτι άλλο"
      Τέλος επιλογής
      Τύπωσε "Τα κατάφερες"
}


5.7.4 Επίλεξε Με/Επέλεξε Με Αλφαριθμητικό


Με αλφαριθμητικό, δείτε εδώ την διέκοψε, έξω από μπλοκ να διακόπτει την Επίλεξε Με

Καθαρό Σ
Επανέλαβε {
      Εισαγωγή "Αριθμομηχανή:",Α$
      Επίλεξε Με Α$
      Με ""
            Διέκοψε  \\ αυτό διακόπτει κανονικά - σαν έξοδος
      Με "A" έως "Z99", "a" έως "z99"
            Τύπωσε "Μεταβλητή:"; Α$
      Με "1" έως "9999999999"
            Τύπωσε "Ακέραιος:"; Α$
      Με "=","+","-","*","/"
            Τύπωσε "Ενέργεια:";Α$
      Αλλιώς Με
            Μηδένισε()
      Τέλος Επιλογής
} Πάντα
Τύπωσε "Τερματισμός"
Ρουτίνα Μηδένισε()
      Σ=0
Τέλος Ρουτίνας



5.8 Χρήση ενός μπλοκ για επαναλήψεις

Ένα μπλοκ εντολών μπορεί να σημανθεί για επανάληψη. Η σήμανση κάνει μια φορά το μπλοκ να ξανατρέξει. Αν την ξαναβρεί όμως θα συνεχίσει τις επαναλήψεις. Δεν έχει σημασία που θα βρει ο διερμηνευτής την εντολή Κυκλικά, αρκεί να είναι στο μπλοκ.Θα εκτελέσει όλο το μπλοκ και μετά θα το ξανατρέξει.

Χ=1
{
      Τύπωσε Χ
      Χ++
      Αν Χ<=20 Τότε Κυκλικά
      Τύπωσε "πάμε πάλι"
}


Εντολές όπως Συνέχισε και Ξεκίνα χρησιμεύουν:
Η συνέχισε αν έχει προηγηθεί η Κυκλικά κάνει ότι η Ξεκίνα, αν όχι τότε κάνει έξοδο. Η ξεκίνα μας πάει στην αρχή του μπλοκ χωρίς να συνεχίσουμε την εκτέλεσή του και μετά να επιστρέψουμε!
Μπορούμε να βγούμε με Έξοδο.

5.9 Μπλοκ που εκτελείται βάσει χρόνου:

Εδώ αν πατήσουμε ένα οποιοδήποτε πλήκτρο τότε η "ένα κομβίο" ενκομ$ θα μας δώσει τη συνθήκη ενκομ$<>"" αληθής.

Χ=0
Κάθε 10 {
      Χ++
      τύπωσε Χ
      Αν ενκομ$<>"" τότε έξοδος
}


Με Κάθε 1000/60 { } τρέχουμε ένα μπλοκ κάθε 60ό του δευτερολέπτου. Αν όμως ο χρόνος που απαιτείται για την εκτέλεση του μπλοκ είναι μεγαλύτερος, το επόμενο μπλοκ θα τρέξει πιο μετά, δηλαδή ισχύει ο χρόνος όσο δεν ζητάμε περισσότερο σε κάθε επανάληψη.

( Σε επόμενο τεύχος θα δούμε τη χρήση τμημάτων, συναρτήσεων, ρουτινών σε σχέση με την ροή προγράμματος)
(Σε επόμενο τεύχος θα δούμε όλες τις εντολές σχετικές με το χρόνο! Τόσο για τον υπολογισμό, όσο και για τρόπο να χωρίσουμε το χρόνο μας σε τμήματα εργασιών.)


Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.