Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 09. 11. 2015 17:37

misha2015
Zelenáč
Příspěvky: 13
Reputace:   
 

Chtěl bych se podělit o zajímavou úlohu

Napište program na šifrování a dešifrování textu tzv. Césarovou šifrou. Na prvním řádku dostane program buď řetězec 'sifrovat' nebo řetězec 'desifrovat', podle toho, zda bude program šifrovat nebo dešifrovat. Na druhém řádku bude klíč a na třetím bude samotný text k šifrování/dešifrování.

Text je šifrován posunem písmenek v abecedě podle klíče. Klíč je slovo tvořené písmeny 'A' - 'Z', 'A' znamená posun o 1 písmeno, 'B' znamená posun o 2 písmena, atd. až 'Z' znamená posun o 26 písmen. Posun je chápán cyklicky, čili po písmenu Z následuje opět písmeno A. Pokud je text delší než klíč, tak se po dosažení konce klíče pokračuje opět od začátku klíče.

Klíč je řetězec znaků tvořený pouze písmeny 'A' až 'Z' a vejde se do datového typu string.
Text je řetězec libovolně dlouhý (nemusí se tedy vejít do stringu) a obsahuje pouze znaky 'A' - 'Z' a ' ' (mezera). Mezery ponechte mezerami:-)

Výstupem programu je právě jeden řádek se zašifrovaným/dešifrovaným textem.

Příklad 1:
Vstup:
sifrovat
AAB
SIFRUJI SIFRU

Výstup:
TJHSVLJ TKGSW

Příklad 2:
Vstup:
desifrovat
AAB
TJHSVLJ TKGSW

Výstup:
SIFRUJI SIFRU
v Pascalu

Offline

  • (téma jako vyřešené označil(a) misha2015)

#2 09. 11. 2015 18:21

Eratosthenes
Příspěvky: 2593
Reputace:   132 
 

Re: Chtěl bych se podělit o zajímavou úlohu

ahoj ↑ misha2015:,

co myslíš tím podělením se o úlohu? Máš vyřešeno a dáváš to nám, anebo s tím potřebuješ pomoct?


Budoucnost patří aluminiu.

Offline

 

#3 09. 11. 2015 18:26

misha2015
Zelenáč
Příspěvky: 13
Reputace:   
 

Re: Chtěl bych se podělit o zajímavou úlohu

↑ Eratosthenes:  potřebuju і tím  pomoct

Offline

 

#4 09. 11. 2015 18:33

Eratosthenes
Příspěvky: 2593
Reputace:   132 
 

Re: Chtěl bych se podělit o zajímavou úlohu

↑ misha2015:

a už jsi něco zkoušel? Pokud ano, nějak to sem napiš.


Budoucnost patří aluminiu.

Offline

 

#5 09. 11. 2015 18:37

misha2015
Zelenáč
Příspěvky: 13
Reputace:   
 

Re: Chtěl bych se podělit o zajímavou úlohu

↑ Eratosthenes:
procedure cc(var c:char; sh:integer);
const s='AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz';
begin
if pos(c,s)<>0 then c:=upcase(s[(pos(c,s)-1+2*sh+length(s))mod length(s)+1]);
end;
procedure cs(var s:string; sh:integer);
var i:integer; begin for i:=1 to length(s) do cc(s[i],sh)
end;
var s:string; sh:integer;
begin
readln(sh);
readln(s); 
cs(s,sh);
writeln(s);

end.
mám jenom takový kod, a nedokažu to udělat podle teto  ulohy

Offline

 

#6 09. 11. 2015 19:20

zn
Zelenáč
Příspěvky: 19
Škola: JČU
Pozice: student
Reputace:   
 

Re: Chtěl bych se podělit o zajímavou úlohu

↑ misha2015:ahoj
máme zrovna podobnou úlohu, sice jen prohazujeme písmenka, ale vypadá to podobně. Kryptogram const je řetězec písmen a vše se řeší posouváním v ASCII tabulce tímhle (mám to i celé, ale neodvažuji se):
begin
write('napiste zpravu: ');
readln(veta);
for i:=1 to length(veta) do
veta[i]:=kryptogram[ord(veta[i])-64];
end.

(*a pro desifrovani*)
begin
write(napiste zpravu);
readln(veta);
for i:=1 to length(veta) do
begin
   j:=0;
   repeat
     j:=j+1;
     until kryptogram[j]=veta[i]
     veta[i]:=chr(j+64);
     end;                     
zn

Offline

 

#7 09. 11. 2015 20:07

misha2015
Zelenáč
Příspěvky: 13
Reputace:   
 

Re: Chtěl bych se podělit o zajímavou úlohu

↑ zn:
pokud je to možné tak napiš cely kod

Offline

 

#8 09. 11. 2015 20:17

jelena
Jelena
Místo: Opava
Příspěvky: 30020
Škola: MITHT (abs. 1986)
Pozice: plním požadavky ostatních
Reputace:   100 
 

Re: Chtěl bych se podělit o zajímavou úlohu

↑ misha2015:, ↑ zn:

zdravím, celý kód - není možné viz pravidla + doporučení pro odpověď

Děkuji.

Offline

 

#9 09. 11. 2015 21:21

Eratosthenes
Příspěvky: 2593
Reputace:   132 
 

Re: Chtěl bych se podělit o zajímavou úlohu

ahoj ↑ misha2015:

abych se přiznal, tomu kódu vůbec nerozumím. Inspirativní je kód kolegy ↑ zn: a jeho upozornění na ASCII tabulku. Pro úplnost:

//forum.matweb.cz/upload3/img/2015-11/00084_ASCII.png

Pro náš případ jsou rozhodující hodnoty 65 - 90 resp. 97 - 122. Záleží na tom, zda se mají rozlišovat malá a velká písmena. Pokud ne, je lepší všechno převést na velká pomocí funkce UpCase. Pro posouvání jsou nejdůležitější funkce Chr - převádí ASCII hodnotu na znak (např. Chr(100) = 'd'  ) a funkce Ord, která naopak převede znak na ASCII hodnotu - Ord('d')=100.


Budoucnost patří aluminiu.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson