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

Γενικό Λύκειο => Δομή επανάληψης => Γ΄ Λυκείου => Εντολή ΜΕΧΡΙΣ_ΟΤΟΥ => Μήνυμα ξεκίνησε από: nikolasmer στις 01 Μαρ 2014, 08:48:41 ΜΜ

Τίτλος: Έλεγχος εγκυρότητας κωδικού
Αποστολή από: nikolasmer στις 01 Μαρ 2014, 08:48:41 ΜΜ
Με προβληματίζει μια άσκηση που κάποιος συνάδελφος εδωσε σε μαθητές.
Θα αναρτήσω την εκφώνησή της και αν υπάρχει πρόβλημα διακαιωμάτων ευχαρίστως να την αποσύρω.
Λοιπόν..
"Ένας κωδικός χρήστη αποτελείται από το πολύ 10 χαρακτήρες και το ελάχιστο από 6. Ο κωδικός αυτός μπορεί να περιέχει οποιοδήποτε χαρακτήρα αλλά τουλάχιστον ένα σύμβολο (@,#,$,%,&,*) και δυο αριθμούς (0-9). Επιπλέον απαγορέυεται η εισαγωγή του κενού. Να γίνει αλγόριθμος που θα ελέγχει την εγκυρότητα ενός κωδικού."
και με βάση μια παρατήρηση του συναδέλφου η άσκηση θα πρέπει να γίνει χωρίς τη χρήση πίνακα.

Δυο ερωτήσεις επί της εκφώνησης:
1. Όταν λέει "..και δυο αριθμούς " εννοεί μόνο 2 ; Δεν μπορώ από τα συμφραζόμενα να το καταλάβω. Μπορεί να μην περιέχει και κανένα άλλο χαρακτήρα εκτός από τους 2 αριθμούς και τους ειδικούς χαρακτήρες που αναφέρονται παραπάνω; Δηλαδή είναι αποδεκτός ο "$%&17@*" ή οχι;
2. Οι αριθμοί, πώς θα εισαχθούν σε μια αλφαριθμητική μεταβλητή; Η συνθήκη χ >= "0" και χ <= "10" ελέγχει το επιθυμητό;
3. Γίνεται έλεγχος χωρίς τιμή φρουρό ή το κενό θεωρείται με βάση την εκφώνηση, η τιμή φρουρός;

Μια δική μου λύση είναι η παρακάτω
Κώδικας [Επιλογή]

μ ← 0
ι ← 0
flag1 ← Ψευδής
flag2 ← Ψευδής
Αρχή_επανάληψης
  Διάβασε χ
  Αν χ = "@" ή χ = "#" ή χ = "$" ή χ = "%" ή χ = "^" ή χ = "&" ή χ = "*" τότε
    flag1 ← Αληθής
  Τέλος_αν
  Αν χ = " " και ι < 6 ή ι > 10 τότε
    Εμφάνισε "Λάθος κωδικός"
    ι ← 0
    μ ← 0
    flag1 ← Ψευδής
    flag2 ← Ψευδής
  Τέλος_αν
  Αν χ ≥ "0" και χ ≤ "9" τότε
    μ ← μ + 1
    Αν μ = 2 τότε
      flag2 ← Αληθής
    αλλιώς_αν μ > 2 τότε
      flag2 ← Ψευδής
      ι ← 0
      μ ← 0
    Τέλος_αν
  Τέλος_αν
  ι ← ι + 1
Μέχρις_ότου ι ≥ 6 και ι ≤ 10 και flag1 = Αληθής και flag2 = Αληθής και χ = ""

:D
Αν υπάρχει κάποια καλύτερη λύση με πιο σφιχτό κώδικα θα ήθελα να τη δώ.
Τίτλος: Απ: Έλεγχος εγκυρότητας κωδικού
Αποστολή από: apoldem στις 02 Μαρ 2014, 01:44:59 ΠΜ
Σαρώνεις τον κωδικό και μετράς το συνολικό μήκος, τους περίεργους χαρακτήρες, τους αριθμούς και τα κενά. Στο τέλος ελέγχεις αν αυτά που μέτρησες είναι συμβατά με τον σωστό κωδικό. Υποθέτω το τέλος της εισαγωγής του κωδικού γίνεται με απλό enter.

Κώδικας [Επιλογή]

μήκος <- 0
περίεργα <- 0
αριθμοί <- 0
κενά <- 0
Αρχή_επανάληψης
  Διάβασε χ
  μήκος <- μήκος + 1
  Αν χ = "@" ή χ = "#" ή χ = "$" ή χ = "%" ή χ = "^" ή χ = "&" ή χ = "*" τότε
    περίεργα <- περίεργα +1
  Αλλιώς_αν χ >= '0' και χ <= '9' τότε
    αριθμοί <- αριθμοί + 1
  Αλλιώς_αν χ = ' ' τότε ! space
    κενά <- κενά +1
  Τέλος_Αν
Μέχρις_ότου χ = ""

αποδεκτός_κωδικός <- μήκος > 5 και μήκος < 11 και κενά = 0 και περίεργα > 1
Τίτλος: Απ: Έλεγχος εγκυρότητας κωδικού
Αποστολή από: nikolasmer στις 02 Μαρ 2014, 01:52:12 ΠΜ
Παράθεση από: apoldem στις 02 Μαρ 2014, 01:44:59 ΠΜ
Σαρώνεις τον κωδικό και μετράς το συνολικό μήκος, τους περίεργους χαρακτήρες, τους αριθμούς και τα κενά. Στο τέλος ελέγχεις αν αυτά που μέτρησες είναι συμβατά με τον σωστό κωδικό. Υποθέτω το τέλος της εισαγωγής του κωδικού γίνεται με απλό enter.

Κώδικας [Επιλογή]

μήκος <- 0
περίεργα <- 0
αριθμοί <- 0
κενά <- 0
Αρχή_επανάληψης
  Διάβασε χ
  μήκος <- μήκος + 1
  Αν χ = "@" ή χ = "#" ή χ = "$" ή χ = "%" ή χ = "^" ή χ = "&" ή χ = "*" τότε
    περίεργα <- περίεργα +1
  Αλλιώς_αν χ >= '0' και χ <= '9' τότε
    αριθμοί <- αριθμοί + 1
  Αλλιώς_αν χ = ' ' τότε ! space
    κενά <- κενά +1
  Τέλος_Αν
Μέχρις_ότου χ = ""

αποδεκτός_κωδικός <- μήκος > 5 και μήκος < 11 και κενά = 0 και περίεργα > 1

Ναι ναι !! Αυτό ήθελα. Πολύ καλό. Ευχαριστώ πάρα πολύ.