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 21. 02. 2016 21:27

Pascal2015
Zelenáč
Příspěvky: 7
Reputace:   
 

Pascal, Césarova šifra nemůžu najít chybu v kodu

Program funguje podle ulohy, ale když zadavam do Codexu tak dostavam chybu
Jailing user 'codex-prg' (UID 1003, GID 1003) into directory '/home/codex-prg/workers/eval3/jail'
Initializing... OK
Preparing sandbox... running locally (INSECURE), OK
Finding source... ./inbox/source.pas
Compiling... FAILED: Free Pascal Compiler version 2.4.0-0 [2009/12/21] for i386
Copyright (c) 1993-2009 by Florian Klaempfl
Target OS: Linux for i386
Compiling 60-2.pas
60-2.pas(21,12) Error: Ordinal expression expected
60-2.pas(25,4) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
Test 1... <init> CE:Compile error
Test 2... <init> CE:Compile error
Test 3... <init> CE:Compile error
Test 4... <init> CE:Compile error
Test 5... <init> CE:Compile error
Test 6... <init> CE:Compile error

Code:

procedure Crypt(var s: String; k: String; Encode: Boolean);
var i, j, p: Integer;
begin
  j:=0; p:=-1+2*Ord(Encode);
  for i:=1 to Length(k) do Dec(k[i],Ord('A')-1);
  for i:=1 to Length(s) do
    if s[i] in ['A'..'Z'] then begin
      s[i]:=Chr(Ord('A')+
        (Ord('A')+Ord(s[i])+p*(Ord(k[j mod Length(k)+1])))
        mod (Ord('Z')-Ord('A')+1));
      Inc(j);
    end;
end;
var
  s, k: String;
  o: string;
begin
  ReadLn(o);
   ReadLn(k);
   ReadLn(s);
  if o in ['sifrovat','desifrovat'] then begin
    Crypt(s,k,o='sifrovat');
    WriteLn(s); 
  end;
end.

Offline

 

#2 21. 02. 2016 21:28

Pascal2015
Zelenáč
Příspěvky: 7
Reputace:   
 

Re: Pascal, Césarova šifra nemůžu najít chybu v kodu

Uloha
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

Offline

 

#3 22. 02. 2016 17:57 — Editoval Wrunx (22. 02. 2016 17:59)

Wrunx
Příspěvky: 65
Reputace:   
 

Re: Pascal, Césarova šifra nemůžu najít chybu v kodu

zná to prostředí syntaxi

if o in ['sifrovat','desifrovat']?

můj fp ne. zkus jí nahradit  třeba výrazem

if (o='sifrovat') or (o='desifrovat')

Offline

 

#4 22. 02. 2016 21:28 — Editoval Pascal2015 (22. 02. 2016 21:29)

Pascal2015
Zelenáč
Příspěvky: 7
Reputace:   
 

Re: Pascal, Césarova šifra nemůžu najít chybu v kodu

Zadal jsem to takhle ale ted mam takove cyby
Jailing user 'codex-prg' (UID 1003, GID 1003) into directory '/home/codex-prg/workers/eval3/jail'
Initializing... OK
Preparing sandbox... running locally (INSECURE), OK
Finding source... ./inbox/source.pas
Compiling... OK
Test 1... <init> <run> <check> OK:OK (1 points)
Test 2... <init> <run> <check> OK:OK (1 points)
Test 3... <init> <run> <check> OK:OK (248 points)
Test 4... <init> <run> <check> OK:OK (250 points)
Test 5... <init> <run> <check> WA:Wrong answer
Test 6... <init> <run> <check> WA:Wrong answer

Code:

procedure Crypt(var s: String; k: String; Encode: Boolean);
var i, j, p: Integer;
begin
  j:=0; p:=-1+2*Ord(Encode);
  for i:=1 to Length(k) do Dec(k[i],Ord('A')-1);
  for i:=1 to Length(s) do
    if s[i] in ['A'..'Z'] then begin
      s[i]:=Chr(Ord('A')+
        (Ord('A')+Ord(s[i])+p*(Ord(k[j mod Length(k)+1])))
        mod (Ord('Z')-Ord('A')+1));
      Inc(j);
    end;
end;
const sifrovat='sifrovat'; desifrovat='desifrovat';
var
  s, k: String;
  o: string;
begin
  ReadLn(o);
   ReadLn(k);
   ReadLn(s);
   if (o=sifrovat) or (o=desifrovat) then begin
    Crypt(s,k,o=sifrovat);
    WriteLn(s);
  end;
end.

Offline

 

#5 23. 02. 2016 17:46

Wrunx
Příspěvky: 65
Reputace:   
 

Re: Pascal, Césarova šifra nemůžu najít chybu v kodu

No, to nevím. Řešil jsem jen syntaxi.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson