Læringsmål:
- Løkker
- Datatype char
- Modulo
Pensum:
- PLACEHOLDER
I disse dager er personvern på dagsorden. Det skal lages en funksjon som skal kryptere en setning ved hjelp av Cæsarskift.
a)
...
- Strenger
- Char
- Betingelser
- For-løkker
Pensum:
- 3.3 Input and Output
- 3.7 User-Defined Functions That Return a Single Value
- 4.1 The if statement
- 4.2 The if-else statement
- 4.3 Nested if-else statements
- 5.1 The for loop
- 7.2 Operations on Strings
- 7.3 The "is" Functions for Strings
Code Block |
---|
Klartekst: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Chiffertekst: DEFGHIJKLMNOPQRSTUVWXYZABC |
a)
caesar(word, key)
, som tar inn en bokstav word
og forskyver hver bokstav (som er av typen char
) i word
med key
antall tegn i alfabetet....
...
a-z
. Du kan anta at det kun tas inn små bokstaver.Code Block | ||
---|---|---|
| ||
>> caesar('terningen', 3)
ans =
'whuqlqjhq' |
b)
Utvid nå funksjonen du lagde i deloppgave a) til å kunne håndtere setninger (hvis den ikke allerede gjør det).
Expand | ||
---|---|---|
| ||
Dersom funksjonen din støter på andre tegn enn a-z , slik som ,.-;: og mellomrom osv. skal disse bare ignoreres. Her kan continue komme til nytte. |
Lag deretter en funksjon plaintext(word,
key) som tar inn et cæsarchiffer og dekrypterer dette. Dette er med andre ord en slags omvendt funksjon av caesar()
.
Expand | ||
---|---|---|
| ||
Finner du en måte å gjøre dette på, uten å skrive så mye ny kode? |
Code Block | ||
---|---|---|
| ||
>> caesar('terningen er kastet.', 3)
ans =
'whuqlqjhq hu ndvwhw.'
>> plaintext('whuqlqjhq hu ndvwhw.', 3)
ans =
'terningen er kastet.' |
b)
...
c)
Lag funksjonen safeTalk()
. Den skal gi brukeren valget mellom kryptering eller dekrypteringå kryptere eller dekryptere et cæsarchiffer. Deretter skal den be brukeren om en tekstreng og antall steg. Den skal returnere den krypterte eller dekrypterte strengen.
d)
Lag en kode som dekrypterer tekst uten å vite steglengden. Bruk at bokstaven e er den den mest hyppige av alle bokstaver. Hint: Dette kan løses ved å finne den hyppigste bokstaven i strengen. Avstanden fra e til denne bokstaven er da forskyvningen.
Code Block | ||
---|---|---|
| ||
zmumujmz, zmumujmz, bpm nqnbp wn vwdmujmz, bpm ocvxwelmz bzmiawv ivl xtwb. q svwe wn vw zmiawv epg bpm ocvxwelmz bzmiawv apwctl mdmz jm nwzowb. |
| |
>> safeTalk
Vil du kryptere(k) eller dekryptere(d):
k
Hva vil du kryptere:
storebror ser deg
Hva er nøkkelen til chifferet?:
-6
ans =
'mnilyvlil myl xya' |
...