Vigenére tábla
Érettségi feladat - 2005. május 27.
Már a XVI. században komoly titkosítási módszereket találtak ki az üzenetek elrejtésére. A század egyik legjobb kriptográfusának Blaise de Vigenère-nek a módszerét olvashatjuk a következőkben.
A kódoláshoz egy táblázatot és egy ún. kulcsszót használt. A tábla adatait a vtabla.dat fájlban találjuk a következő formában.
A kódolás feltételei:
- A magyar ékezetes karakterek helyett ékezetmenteseket kell használni. (Például á helyett a, ő helyett o, stb.)
- A nyílt szövegben az átalakítás után csak az angol ábécé betűi szerepelhetnek.
- A nyílt szöveg az átalakítás után legyen csupa nagybetűs.
Készítsünk programot kodol néven a következő feladatok végrehajtására!
Kérjünk be a felhasználótól egy maximum 255 karakternyi, nem üres szöveget!
A továbbiakban ez a nyílt szöveg. (3 pont)
1 2 3 4 5 6 | #define MAX 256 void beker(char s[]){ printf("Adjon meg egy maximum %d karakternyi, nem üres szöveget!\n",MAX-1); fgets(s,MAX,stdin); } |
Olvassunk be a szabvány bemenetről egy maximum 255 karakter hosszú szöveget, és tároljuk le egy karaktertömbben.
Alakítsuk át a nyílt szöveget, hogy a későbbi kódolás feltételeinek megfeleljen! (12 pont)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <ctype.h> void atalakit(char s[]){ int j,i,k=0; char kis[]={"áéíóöőúüű"},nagy[]={"ÁÉÍÓÖŐÚÜŰ"},angol[]={"aeiooouuu"}; for(i=0;s[i];i++){ j=0; while(kis[j] && (s[i]!=kis[j] && s[i]!=nagy[j])){ j++; } if(kis[j]){ s[i]=angol[j]; } if(isalpha(s[i])){ s[k]=toupper(s[i]); k++; } } s[k]='\0'; } |
Alakítsuk át a bekért szöveget a kódolási elvárások szerint. Egy karaktertömbben határozzuk meg az ékezetes karaktereket, és a bekért szövegben helyettesítsük őket nem ékezetes karakterekkel. Ügyeljünk arra, hogy ne tegyünk különbséget a kis- és nagybetűk között. Távolítsuk el a szövegből az oda nem illő karaktereket úgy, hogy csak az angol ábécé karaktereit tartalmazza. A megmaradt karakterlánc elemeit alakítsuk nagybetűssé.
Írjuk ki a képernyőre az átalakított nyílt szöveget! (1 pont)
Lásd a főprogramban...
Kérjünk be a felhasználótól egy maximum 5 karakteres, nem üres kulcsszót! A kulcsszó a kódolás feltételeinek megfelelő legyen! Alakítsuk át a kulcsszót csupa nagybetűssé! (4 pont)
1 2 3 4 5 6 | #define KMAX 6 void kulcsszo_beker(char s[]){ printf("Adjon meg egy maximum %d karakternyi kulcsszót!\n",KMAX-1); fgets(s,KMAX,stdin); } |
A bekérésnél sem átalakítás, sem ellenőrzés nem kell.
A kódolás első lépéseként fűzzük össze a kulcsszót egymás után annyiszor, hogy az így kapott karaktersorozat (továbbiakban kulcsszöveg) hossza legyen egyenlő a kódolandó szöveg hosszával! Írjuk ki a képernyőre az így kapott kulcsszöveget! (6 pont)
A kódolás második lépéseként a következőket hajtsuk végre! Vegyük az átalakított nyílt szöveg első karakterét, és keressük meg a vtabla.dat fájlból beolvasott táblázat első oszlopában! Ezután vegyük a kulcsszöveg első karakterét, és keressük meg a táblázat első sorában! Az így kiválasztott sor és oszlop metszéspontjában lévő karakter lesz a kódolt szöveg első karaktere. Ezt ismételjük a kódolandó szöveg többi karakterével is! (15 pont)
Írjuk ki a képernyőre és a kodolt.dat fájlba a kapott kódolt szöveget! (4 pont)
A főprogram
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <stdio.h> #include <ctype.h> #define MAX 256 #define KMAX 6 /* Függvények... */ int main(void){ char szoveg[MAX],kulcsszo[KMAX]; system("CHCP 1250"); system("CLS"); /* 1. feladat */ beker(szoveg); /* 2. feladat */ atalakit(szoveg); /* 3. feladat */ printf("\nAz átalakított nyílt szöveg: %s\n\n",szoveg); /* 4. feladat */ kulcsszo_beker(kulcsszo); atalakit(kulcsszo); printf("\nAz átalakított kulcsszó: %s\n\n",kulcsszo); return 0; } |
Hívjuk meg a fent bemutatott függvényeket a főprogramban, és jelenítsük meg a képernyőn a kapott eredményeket.
A program egy lehetséges kimenete
Adjon meg egy maximum 255 karakternyi, nem üres szöveget! Ez a próba szöveg, amit kódolunk! Az átalakított nyílt szöveg: EZAPROBASZOVEGAMITKODOLUNK Adjon meg egy maximum 5 karakternyi kulcsszót! autó Az átalakított kulcsszó: AUTO
Az itt található érettségi feladat megoldása nem az Oktatási Minisztérium által kiadott hivatalos megoldás. A feladatokat azért dolgoztam ki C nyelven is, hogy segítsem a diákjaim sikeres emelt szintű érettségi felkészülését. A megoldások irányadó jellegűek, a feladatok többféleképpen is megoldhatóak.
Ha a lakattal jelölt feladatok megoldásaira is kíváncsi vagy, keress bizalommal!