Έλεγχος εγκυρότητας κωδικού

Ξεκίνησε από nikolasmer, 01 Μαρ 2014, 08:48:41 ΜΜ

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

nikolasmer

Με προβληματίζει μια άσκηση που κάποιος συνάδελφος εδωσε σε μαθητές.
Θα αναρτήσω την εκφώνησή της και αν υπάρχει πρόβλημα διακαιωμάτων ευχαρίστως να την αποσύρω.
Λοιπόν..
"Ένας κωδικός χρήστη αποτελείται από το πολύ 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

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

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

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

nikolasmer

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

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

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

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