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 10. 11. 2015 00:13

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

Pronč nefunguje?

PROGRAM Vigenere;
FUNCTION letternum(letter: CHAR): BYTE;
BEGIN
letternum := (ord(letter)-ord('A'));
END;
FUNCTION uch(ch: CHAR): CHAR;
BEGIN
uch := ch;
IF ch IN ['a'..'z'] THEN
uch := chr(ord(ch) AND $5F);
END;
FUNCTION ucase(str: STRING): STRING;
VAR i: BYTE;
BEGIN
ucase := '';
FOR i := 1 TO Length(str) DO
ucase := ucase + uch(str[i]);
END;
FUNCTION vstr(pt: STRING): STRING;
VAR c: Cardinal;
s: STRING;
BEGIN
vstr:= '';
s := ucase(pt);
FOR c := 1 TO Length(s) DO BEGIN
IF s[c] IN ['A'..'Z'] THEN
vstr += s[c];
END;
END;
FUNCTION vkey(pt, key: STRING): STRING;
VAR c,n: Cardinal;
k : STRING;
BEGIN
k := vstr(key);
vkey := '';
FOR c := 1 TO Length(pt) DO BEGIN
n := c mod Length(k);
IF n>0 THEN vkey += k[n] ELSE vkey += k[Length(k)];
END;
END;
FUNCTION enVig(pt,key:STRING): STRING;
VAR ct: STRING;
c,n : Cardinal;
BEGIN
ct := pt;
FOR c := 1 TO Length(pt) DO BEGIN
n := letternum(pt[c])+letternum(key[c]);
n := n mod 26;
ct[c]:=chr(ord('A')+n);
END;
enVig := ct;
END;
FUNCTION deVig(ct,key:STRING): STRING;
VAR pt: STRING;
c,n: INTEGER;
BEGIN
pt := ct;
FOR c := 1 TO Length(ct) DO BEGIN
n := letternum(ct[c])-letternum(key[c]);
IF n<0 THEN n:=26+n;
pt[c]:=chr(ord('A')+n);
END;
deVig := pt;
END;

VAR key: STRING = 'Vigenere cipher';
msg: STRING = 'Beware the Jabberwock! The jaws that bite, the claws that catch!';
vtx: STRING = '';
ctx: STRING = '';
ptx: STRING = '';

BEGIN
vtx := vstr(msg);
key := vkey(vtx,key);
ctx := enVig(vtx,key);
ptx := deVig(ctx,key);
Writeln('Message : ',msg);
Writeln('Plaintext : ',vtx);
Writeln('Key : ',key);
Writeln('Ciphertext : ',ctx);
Writeln('Plaintext : ',ptx);
END.

Offline

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

#2 10. 11. 2015 14:32

Formol
Místo: Praha
Příspěvky: 782
Pozice: krotitel mikroskopů (UHIEM 1. LF UK)
Reputace:   42 
 

Re: Pronč nefunguje?

↑ misha2015:
Zdravím,
především zkus používat štábní kulturu a prostředí code, program pak bude mnohem čitelnější. Z prvního náhledu na tvůj kód se mi úplně nepozdává to, že v rámci funkce používáš jméno funkce jako proměnnou na obou stranách přiřazení (např. +=) - ale to je spíše o tom, že jsem stará struktura.

Každopádně když jsem tvůj program předhodil Ideone, tak s kompilátorem fpc funguje. Když jsem si dal kompilátor gpc, tak protestuje proti syntaxi - používáš konstrukce, které nejsou ze standardního Pascalu (+=, datový typ cardinal,...).

Nebo snad nefunguje jen to, že ti to vrací vyučující? (prostě by vhodné popsat, jaký je konkrétně tvůj problém) ;-)


Доктор сказал «в морг» — значит в морг!

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson