Δομή επιλογής - Μεθοδολογική προσέγγιση

Άσκηση 1. Στο κρατίδιο της Τενεούπολης η ανεξάρτητη Αρχή Τηλεπικοινωνιών σε συνεργασία με τις εταιρείες τηλεφωνίας αποφάσισε πως όλοι οι τηλεφωνικοί αριθμοί θα είναι δεκαψήφιοι και θα υπακούουν στους παρακάτω κανόνες:

Δύο πρώτα
       ψηφία αριθμού      

Τρίτο
    ψηφία αριθμού    

  Εταιρεία που διαχειρίζεται 
τους αριθμούς

69
κινητή τηλεφωνία

4

City U

5

CityTel telephony

9

TEVERLAS

21
σταθερή τηλεφωνία

0

  Τηλεπικοινωνίες Τενεούπολης 

1

Vodo City

Να αναπτυχθεί αλγόριθμος που θα διαβάζει έναν δεκαψήφιο αριθμό και θα εκτυπώνει το όνομα της εταιρείας που τον διαχειρίζεται

Λύση

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

Ας υποθέσουμε ότι μας δίνεται ο αριθμός 6941111111, παρατηρούμε ότι τα πρώτα δυο ψηφία του αριθμού είναι 69, επομένως ο αριθμός αντιστοιχεί σε κινητό τηλέφωνο. Στη συνέχεια παρατηρούμε το τρίτο ψηφίο του αριθμού που είναι ο αριθμός 4, επομένως ο αριθμός αυτός αντιστοιχεί σε συνδρομητή της εταιρείας City U.

Το δεύτερο βήμα είναι η αποτύπωση της παραπάνω διαδικασίας σε βήματα αλγορίθμου.
i. Πώς θα διασπαστεί ο αριθμός που δίνεται ως είσοδος;
ii. Πρέπει να έχει διασφαλιστεί ότι είναι δεκαψήφιος ή όχι; Αν ναι, πώς θα γίνει αυτό;
iii. Πώς θα απομονωθεί το τρίτο ψηφίο;
iv. Πόσες περιπτώσεις υπάρχουν;
v. Πρέπει να ελέγχω και ενδεχόμενες περιπτώσεις λάθους;

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

i. Ο αριθμός θα διασπαστεί με την κατάλληλη χρήση των αριθμητικών τελεστών diν και mod.
ii. Πρέπει να ελέγξουμε το δεδομένο εισόδου διότι αν δεν είναι δεκαψήφιος, ο αλγόριθμος δεν θα δουλέψει σωστά – πρέπει να υπάρχουν 10 ψηφία. Ο έλεγχος θα γίνει με τη χρήση απλής δομής επιλογής.
iii. Για την απομόνωση του τρίτου ψηφίου θα χρησιμοποιήσουμε την ίδια προσέγγιση με το ερώτημα i.

iv. Κατ’ αρχάς μπορεί να έχει δοθεί (δεκαψήφιος) αριθμός τηλεφώνου ή όχι. Στη συνέχεια, ελέγχοντας τα δυο ψηφία του αριθμού υπάρχουν δυο περιπτώσεις: να αντιστοιχεί σε κινητό (69) ή σταθερό (21) τηλέφωνο, υπάρχει όμως και η περίπτωση να μην έχει κάποια από τις δυο τιμές. Αν ο αριθμός αντιστοιχεί σε κινητό τηλέφωνο, τότε υπάρχουν 3 υπο-περιπτώσεις για τις τιμές που μπορεί να λάβει το τρίτο ψηφίο με ισάριθμες εταιρείες κινητής τηλεφωνίας. Όμοια, αν ο αριθμός αντιστοιχεί σε σταθερό τηλέφωνο, τότε υπάρχουν 2 υπο-περιπτώσεις για τις τιμές που μπορεί να λάβει το τρίτο ψηφίο με ισάριθμες εταιρείες σταθερής τηλεφωνίας.
v. Εκτός από τον έλεγχο για δεκαψήφιο αριθμό, πρέπει να ελέγχω και ενδεχόμενο λάθος σε κάθε μια από τις παραπάνω περιπτώσεις καθώς μπορεί τα πρώτα δυο ψηφία να μην έχουν καμία εκ των τιμών 69 ή 21. Ακόμη μπορεί το τρίτο ψηφία να μην έχει καμία εκ των τιμών που προβλέπονται από τον πίνακα της εκφώνησης.

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

Μια άλλη προσέγγιση είναι να χρησιμοποιεί μια δομή επιλογής με σύνθετες συνθήκες π.χ.
Αν πρώτα ψηφία = 69 και τρίτο_ψηφίο = 4 τότε
ωστόσο με αυτόν τον τρόπο δεν θα διερευνηθούν σωστά οι περιπτώσεις λάθους και θα αυξηθεί η πολυπλοκότητα του προβλήματος χωρίς λόγο.

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

Ακολουθεί ο αλγόριθμος :

Αλγόριθμος Τηλεπικοινωνίες
  Διάβασε τηλέφωνο
  Αν (τηλέφωνο >= 1000000000) και (τηλέφωνο <= 9999999999) τότε
    πρώτα_ψηφία  τηλέφωνο div 10^8   !  απομονώνουμε τα 2 πρώτα ψηφία του αριθμού
    υπόλοιπο  τηλέφωνο mod 10^8      !  απομονώνουμε τα υπόλοιπα ψηφία του αριθμού
    τρίτο_ψηφίο  υπόλοιπο div 10^7   !  απομονώνουμε το 3ο ψηφίο του αριθμού
    Αν πρώτα_ψηφία = 69 τότε
      Αν τρίτο_ψηφίο = 4 τότε
        Εκτύπωσε "City U"
      Αλλιώς_αν τρίτο_ψηφίο = 5 τότε
        Εκτύπωσε "CityTel telephony"
      Αλλιώς_αν τρίτο_ψηφίο = 9 τότε
        Εκτύπωσε "TEVERLAS"
      Αλλιώς
        Εκτύπωσε "Ο αριθμός που δόθηκε δεν αντιστοιχεί σε κινητό τηλέφωνο"
      Τέλος_Αν
    Αλλιώς_αν πρώτα_ψηφία = 21 τότε
      Αν τρίτο_ψηφίο = 0 τότε
        Εκτύπωσε "Τηλεπικοινωνίες Τενεούπολης"
      Αλλιώς_αν τρίτο_ψηφίο = 5 τότε
        Εκτύπωσε "Vodo City"
      Αλλιώς
        Εκτύπωσε "Ο αριθμός που δόθηκε δεν αντιστοιχεί σε σταθερό τηλέφωνο"
      Τέλος_Αν
    Αλλιώς
      Εκτύπωσε "Ο αριθμός που δόθηκε δεν αντιστοιχεί σε τηλέφωνο"
    Τέλος_Αν
  Αλλιώς
    Εκτύπωσε "Δεν δώσατε 10ψήφιο αριθμό"
  Τέλος_Αν
Τέλος Τηλεπικοινωνίες

Ημερομηνία τελευταίας τροποποίησης: 3/10/2005
Επικοινωνία: Τσιωτάκης Παναγιώτης