(*********************************************************** * * * DCV na PGM * * * * Autor: Jan Pacner * * * * Zadani: * * caesarovska sifra: * * zadame o kolik se ma dany text posunout * * zadame text k posunuti * * program vypise posunuty text, * * pote se zepta, jestli chceme zasifrovanou vetu * * odsifrovat, kdyz ano, zepta se na "posun" * * (sifrovaci klic) * * kdyz nebudeme chtit odsifrovavat, zepta se jestli * * chceme skoncit nebo znovu cele od zacatku * * * * made 26.2.2008 and last modified 1.3.2008 16:31 * * * ***********************************************************) program caesar_sifra; var input,output,keyin,odsifrovat,exit:string[99]; key,pozice,numtrue:integer; i:byte; begin repeat (*** KLIC ***) writeln ('napiste sifrovaci klic (cislo - o kolik se ma posunovat)'); {abcde fghij klmno pqrst uvwxy z} writeln ('(v abecede o 26 znacich - tzn. od -25 do 25)'); repeat readln (keyin); val(keyin,key,numtrue); if not(numtrue=0) then writeln ('zadane znaky nelze povazovat za cislo',chr(10),'zkuste to znovu:'); until numtrue=0; //writeln ('posunuti: ',key); if key<0 then begin repeat key:=key+26 until key>=0; writeln ('posunovat se bude o ',key,' znaku'); end; if key>=26 then begin repeat key:=key-26 until key in [0..26]; writeln ('posunovat se bude o ',key,' znaku'); end; (*** ZASIFROVANI - VETA 2.POKUS ***) writeln ('zadejte vetu, ktera ma byt zasifrovana:'); readln (input); output:=(''); for i:=1 to length(input) do begin if (input[i] in ['A'..'Z']) or (input[i] in ['a'..'z']) then begin if input[i] in ['A'..'Z'] then begin pozice:=ord(input[i])+key; if not(pozice in [65..90]) then begin pozice:=65+(pozice-90)-1; end; end else begin (* if input[i] in ['a'..'z'] *) pozice:=ord(input[i])+key; if not(pozice in [97..122]) then begin pozice:=97+(pozice-122)-1; end; end; end else pozice:=ord(input[i]); output:=concat(output,chr(pozice)); end; writeln ('toto je zasifrovana veta:'); writeln (output); (*** ODSIFROVANI ***) writeln ('chcete zasifrovanou vetu zase odsifrovat? (ano/ne):'); repeat readln (odsifrovat); if not(odsifrovat=('ano')) or not(odsifrovat=('ne')) then writeln ('neodpovedela jste "ano" nebo "ne"',chr(10),'zkuste to znovu:'); // writeln ('toto je promenna odsifrovat: ',odsifrovat); until (odsifrovat=('ano')) or (odsifrovat=('ne')); (*** KLIC ***) if odsifrovat=('ano') then begin writeln ('napiste sifrovaci klic (cislo - o kolik je veta posunuta)'); writeln ('(v abecede o 26 znacich - tzn. od -25 do 25)'); repeat readln (keyin); val(keyin,key,numtrue); if not(numtrue=0) then writeln ('zadane znaky nelze povazovat za cislo',chr(10),'zkuste to znovu:') else writeln ('posunuti: ',key); until numtrue=0; key:=-key; if key<0 then begin repeat key:=key+26 until key>=0; writeln ('posunovat se bude o ',key,' znaku'); end; if key>=26 then begin repeat key:=key-26 until key in [0..26]; writeln ('posunovat se bude o ',key,' znaku'); end; (*** ODSIFROVANI - VETA ***) input:=output; output:=(''); for i:=1 to length(input) do begin if (input[i] in ['A'..'Z']) or (input[i] in ['a'..'z']) then begin if input[i] in ['A'..'Z'] then begin pozice:=ord(input[i])+key; if not(pozice in [65..90]) then begin pozice:=65+(pozice-90)-1; end; end else begin (* if input[i] in ['a'..'z'] *) pozice:=ord(input[i])+key; if not(pozice in [97..122]) then begin pozice:=97+(pozice-122)-1; end; end; end else pozice:=ord(input[i]); output:=concat(output,chr(pozice)); end; writeln ('toto je odsifrovana veta:'); writeln (output); end else exit:=('ukoncit'); (*konec odsifrovani*) writeln (chr(10),'chcete ukoncit program, nebo si to cele dat znovu?'); writeln ('pro pokracovani napiste: pokracovat, pro ukonceni napiste: ukoncit'); repeat readln (exit); if not(exit=('ukoncit')) or not(exit=('pokracovat')) then begin writeln ('napsali jste neco jineho nez "pokracovat" nebo "ukoncit"'); writeln ('zkuste to znovu:'); end; until (exit=('ukoncit')) or (exit=('pokracovat')); until (exit=('ukoncit')); writeln ('this program was made by Globator007 and'); writeln ('is licenced under GNU-GPLv3 or higher'); writeln ('pro ukonceni stisknete klavesu Enter'); readln; end.