Σάββατο, 20 Οκτωβρίου 2018

Κρυπτογράφηση

Βαθμός Δυσκολίας:
4/5
Εκφώνηση Ασκησης: 

Σε μια επιχείρηση οι κωδικοί  χρηστών εισόδου στο ηλεκτρονικό της σύστημα φανερώθηκαν σε μία αντίπαλή της επιχείρηση μετά από παράνομη επίθεση.Το Διοικητικο συμβουλιο της  αποφάσισε να σας προσλάβει  για να κωδικοποιήσετε τους κωδικούς των 5000 εργαζομένων τους.
Να γράψετε πρόγραμμα το οποίο :
Α.  Διαβάζει τα ονόματα και τους κωδικούς όλων των εργαζομένων της επιχείρησης  και τα αποθηκεύει σε δύο μονοδιάστατους  πίνακες. Οι κωδικοί αποτελούνται από επταψήφιους, ακέραιουςαριθμούς .
Β. Κρυπτογραφεί τους κωδικούς και τους αποθηκεύει σε έναν νέο πίνακα. Η κρυπτογράφηση γίνεται αντικαθιστώντας τον κάθε αριθμό με το γράμμα της αλφάβητου που του αντιστοιχεί κατά σειρά. Ανά έναν εργαζόμενο η κρυπτογράφηση γίνεται αντίθετα δηλαδή από το τελευταίο γράμμα της αλφάβητου προς το πρώτο.(Ο κωδικός του πρώτου κρυπτογραφείται κανονικά του δεύτερου αντίστροφα κ.ο.κ)
Γ.Δέχεται τον κωδικό ενός εργαζομένου και εμφανίζει το όνομα και τον κρυπτογραφημένο κωδικό του,αν δεν βρεθεί  ο κωδικός εμφανίζει κατάλληλο μήνυμα.
Δεν χρειαζεται να γίνει έλεγχος εισόδου δεδομένων.
Θεωρήστε ότι η αλφάβητος είναι ήδη τοποθετημένη σε έναν μονοδιάστατο πίνακα.(ΑΒ[1]="Α",ΑΒ[2]="Β" κ.ο.κ.)

Επιμέλεια: Γιώργος Κένης


H άσκηση συμμετέχει στον διαγωνισμό 1 Άσκηση = 1 Tablet.


Βαθμολογία Κριτών

Χρήστος Τσάλης Γιάννης Καψάλης Φανή Αναγνώστου Δημήτρης Τζανέκας Μίλτος Στάμος
7.4 8 9 9 8

 

Συνολική Βαθμολογία Κριτών                41.4

Συνολική Βαθμολογία από τα Likes        50

Συνολική Βαθμολογία                       91.4

Λύση Άσκησης: 

ΠΡΟΓΡΑΜΜΑ ΚΡΥΠΤ
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: ΟΝ[5000], ΚΚ[5000], ΑΒ[24]
  ΑΚΕΡΑΙΕΣ: Κ[5000], i, κωδ, pos
  ΛΟΓΙΚΕΣ: Done

ΑΡΧΗ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5000
    ΔΙΑΒΑΣΕ ΟΝ[i], Κ[i]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 5000

    ΚΑΛΕΣΕ ΚΡΥΠΤΟΓΡΑΦΗΣΗ(i, ΑΒ, Κ, ΚΚ)
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  Done <- ΨΕΥΔΗΣ
  ΔΙΑΒΑΣΕ κωδ
  i <- 0
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    i <- i + 1
    ΑΝ κωδ = Κ[i] ΤΟΤΕ
      Done <- ΑΛΗΘΗΣ
      pos <- i
    ΤΕΛΟΣ_ΑΝ
  ΜΕΧΡΙΣ_ΟΤΟΥ Done = ΑΛΗΘΗΣ Η i = 5000
  ΑΝ Done = ΑΛΗΘΗΣ ΤΟΤΕ
    ΓΡΑΨΕ ΟΝ[pos], ΚΚ[pos]
  ΑΛΛΙΩΣ
    ΓΡΑΨΕ 'Ο κωδικός δεν βρέθηκε'
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


ΔΙΑΔΙΚΑΣΙΑ ΚΡΥΠΤΟΓΡΑΦΗΣΗ(i, ΑΒ, Κ, ΚΚ)
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: Temp1, Temp2, Temp3, Temp4, Temp5, Temp6, Temp7, ΑΒ[24], ΚΚ[5000]
  ΑΚΕΡΑΙΕΣ: i, Κ[5000]
ΑΡΧΗ
  ΑΝ i mod 2 <> 0 ΤΟΤΕ
    Temp1 <- ΑΒ[Κ[i] div (10^6)]
    Temp2 <- ΑΒ[Κ[i] div (10^5) mod 10]
    Temp3 <- ΑΒ[Κ[i] div (10^4) mod (10^2)]
    Temp4 <- ΑΒ[Κ[i] div (10^3) mod (10^3)]
    Temp5 <- ΑΒ[Κ[i] div (10^2) mod (10^4)]
    Temp6 <- ΑΒ[Κ[i] div (10) mod (10^5)]
    Temp7 <- ΑΒ[Κ[i] mod 10]
  ΑΛΛΙΩΣ
    Temp1 <- ΑΒ[24 - (Κ[i] div (10^6))]
    Temp2 <- ΑΒ[24 - (Κ[i] div (10^5) mod 10)]
    Temp3 <- ΑΒ[24 - (Κ[i] div (10^4) mod (10^2))]
    Temp4 <- ΑΒ[24 - (Κ[i] div (10^3) mod (10^3))]
    Temp5 <- ΑΒ[24 - (Κ[i] div (10^2) mod (10^4))]
    Temp6 <- ΑΒ[24 - (Κ[i] div (10) mod (10^5))]
    Temp7 <- ΑΒ[24 - (Κ[i] mod 10)]
  ΤΕΛΟΣ_ΑΝ
  ΚΚ[i] <- Temp1 + Temp2 + Temp3 + Temp4 + Temp5 + Temp6 + Temp7
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ