Αποστολέας Θέμα: Έλεγχος εγκυρότητας κωδικού  (Αναγνώστηκε 2569 φορές)

nikolasmer

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 541
  • There can be only one...may it be AEPP.
Έλεγχος εγκυρότητας κωδικού
« στις: 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

  • Βετεράνος
  • ****
  • Μηνύματα: 86
Απ: Έλεγχος εγκυρότητας κωδικού
« Απάντηση #1 στις: 02 Μάρ 2014, 01:44:59 πμ »
Σαρώνεις τον κωδικό και μετράς το συνολικό μήκος, τους περίεργους χαρακτήρες, τους αριθμούς και τα κενά. Στο τέλος ελέγχεις αν αυτά που μέτρησες είναι συμβατά με τον σωστό κωδικό. Υποθέτω το τέλος της εισαγωγής του κωδικού γίνεται με απλό enter.

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

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

nikolasmer

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 541
  • There can be only one...may it be AEPP.
Απ: Έλεγχος εγκυρότητας κωδικού
« Απάντηση #2 στις: 02 Μάρ 2014, 01:52:12 πμ »
Σαρώνεις τον κωδικό και μετράς το συνολικό μήκος, τους περίεργους χαρακτήρες, τους αριθμούς και τα κενά. Στο τέλος ελέγχεις αν αυτά που μέτρησες είναι συμβατά με τον σωστό κωδικό. Υποθέτω το τέλος της εισαγωγής του κωδικού γίνεται με απλό enter.

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

αποδεκτός_κωδικός <- μήκος > 5 και μήκος < 11 και κενά = 0 και περίεργα > 1
Ναι ναι !! Αυτό ήθελα. Πολύ καλό. Ευχαριστώ πάρα πολύ.
Απ' τα τσακάλια δεν γλυτώνεις μ'ευχές ή παρακάλια
(Κ. Βάρναλης)

Μερεντίτης Νικόλαος
Καθηγητής Πληροφορικής - Φροντιστής