Læringsmål:

  • Strenger
  • Char
  • Betingelser
  • For-løkker
  • Cell-Array

Et Substitusjonschiffer er en generalisering av det kanskje litt mer kjente Cæsarchifferet som vi introduserte i øving 7. Substitusjonschifferet vi skal lage i denne oppgaven fungerer på en litt annen måte en dette. Her erstatter vi hvert enkelt tegn i en streng med et annet vilkårlig tegn, og lager oss på denne måten en kryptert melding. Vi følger dermed ikke noen fast steglengde for alle tegn som i et cæsarchiffer, men har heller et gitt tegn som hver enkelt bokstav "oversettes" til. Legg merke til at også dette er en ekstremt rudimentær/grunnleggende krypteringsalgoritme som er ekstremt enkelt å dekryptere, og denne typen kryptering brukes nå til dags kun for å introdusere til kryptering.


Lag funksjonen substitute som tar inn en gitt tekststreng og returnerer den som en kryptert melding. Du er gitt følgende chiffer som to cell arrays, hvor posisjonen til tegnet representerer dens "nøkkel". Dvs. at 'a' skal gjøres om til '#' osv.

 

Chiffer
% Input:
{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}
% Output:
{'#', '.', '~', '1', '_', '>', '-', '*', '<', '=', ':', '4', '\', '8', '+', '2', '?', '7', '!', '3', '0', '9', '6', '@', '&', '5'}

Input kan kun være bokstavene i det engelske alfabetet, altså a-z, både med små og store bokstaver. Output skal kun være små bokstaver som vist over (dvs. at 'A' krypteres til '#' og dekrypteres til 'a'). Mellomrom skal i tillegg kunne tas inn, men de skal bare ignoreres og sendes ut igjen. Dersom noe annet enn dette sendes inn som input skal det kjøres en feilmelding og funksjonen skal avsluttes.

 

Du kan for eksempel bruke strcmp(A, B) for å finne hvilke celler i B som inneholder verdien A. Resultatet som returneres er en liste som er like lang som B og inneholder sannhetsverdier, hvor 1 tilsier at A ble funnet på denne posisjonen i B.

Ved å bruke find(X), hvor X er en liste med sannhetsverdier, vil man få indeksene til de elementene i listen som er 1. Dersom det kun er ett tall i listen som ikke er null, vil det bare returneres én indeks.

 


Eksempel på kjøring
>> substitute('Hello world')
ans =

    '*_44+ 6+741'
    

 

 

  • No labels