Strict Standards: Declaration of action_plugin_importoldchangelog::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/lib/plugins/importoldchangelog/action.php on line 8 Strict Standards: Declaration of action_plugin_importoldindex::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/lib/plugins/importoldindex/action.php on line 0 Deprecated: Function split() is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/auth.php on line 154 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/auth.php on line 456 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/auth.php on line 456 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/auth.php on line 453 Strict Standards: Only variables should be passed by reference in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/doku.php on line 71 program sifra; const N = 4; {velikost mrizky} const HVEZDICKA = '*'; const NULA = '0'; const JEDNA = '1'; type Mrizka = array [1..N, 1..N] of boolean; {true zde znamena otvor mrizky} type Sekvence = array[1..N*N] of char; {najednou zakoduje sekvenci tolika znaku, kolik se jich schova pod mrizku} var vstup, vystup: text; {pro vstupni a vystupni soubor} function zkontrolujMrizku (var m: Mrizka): boolean; var i, j: integer; {pocitani v cyklu for} var pocetJednicek: integer; {neni-li roven N, chybna mrizka} begin zkontrolujMrizku := true; {v pripade chyby bude prenastaveno} pocetJednicek := 0; {zaciname pocitat} for i := 1 to N do {prochazeni radku} for j := 1 to N do {prochazeni policek} if m[i, j] then begin {nalezen otvor mrizky} inc (pocetJednicek); if m[j, N - i + 1] or m[N - i + 1, N - j + 1] or m[N - j + 1, i] then zkontrolujMrizku := false; {prochazi "zakazane" otvory} end; {nalezen otvor mrizky} if pocetJednicek <> N then zkontrolujMrizku := false; end; {of zkontrolujMrizku} procedure otocMrizku (var m: Mrizka); var i, j: integer; {pocitani v cyklu for} var pomocna: Mrizka; {meziprodukt} begin for i:= 1 to N do {do pomocne zkopiruje puvodni otocenou o 90 stupnu} for j := 1 to N do pomocna[j, N - i + 1] := m[i, j]; for i:= 1 to N do {do puvodni zkopiruje pomocnou} for j := 1 to N do m[i, j] := pomocna[i, j]; end; {of otocMrizku} procedure prectiSekvenci (var s: Sekvence); var i: integer; var ukazatel: integer; {prave ctena zapisovana pozice sekvence} var ch: char; {pro ulozeni prave precteneho znaku} begin ukazatel := 0; while (not eof (vstup)) and (ukazatel < N*N) do begin inc (ukazatel); read (vstup, ch); s[ukazatel] := ch; {zapise precteny znak na danou pocici} end; {precteni a zapis jednoho znaku} for i := ukazatel + 1 to N*N do s[i] := HVEZDICKA; {pokud jsme se dostali za konec souboru, doplni sekvenci hvezdickami} end; {of prectiSekvenci} procedure zasifrujDleMrizky (m: Mrizka); var i, j: integer; {souradnice policka mrizky} var k: integer; {poloha mrizky} var s: Sekvence; begin while not eof (vstup) do begin {sifrovani jedne sekvence} prectiSekvenci (s); for k := 1 to N do begin {pri dane poloze mrizky} for i := 1 to N do for j := 1 to N do if m[i, j] then write (vystup, s[N*(i - 1) + j]); otocMrizku (m); end; {pri dane poloze mrizky} end; {sifrovani jedne sekvence} end; {of zasifruj} procedure rozsifrujDleMrizky (m: Mrizka); var vstupniSekvence, vystupniSekvence: Sekvence; var ukazatel: integer; var i, j: integer; {souradnice policka} var k: integer; {poloha mrizky} begin while not eof (vstup) do begin {rozsifrovani jedne sekvence} prectiSekvenci (vstupniSekvence); ukazatel := 0; for k := 1 to N do begin {pri dane poloze mrizky} for i := 1 to N do for j := 1 to N do if m[i, j] then begin inc (ukazatel); vystupniSekvence[N*(i - 1) + j] := vstupniSekvence [ukazatel]; end; {zapis znaku na spravne misto} otocMrizku (m); end; {for k -- pri dane poloze mrizky} for i := 1 to N*N do write (vystup, vystupniSekvence[i]); end; {rozsifrovani jedne sekvence} end; {of rozsifrujDleMrizky} function nactiMrizku (var m: Mrizka; var soubor: string): boolean; var zdroj: text; {soubor, z nejz budeme cist} var ch: char; {prave cteny znak} var i, j: integer; {souradnice policka mrizky} var chyba: boolean; {priznak chyby} begin chyba := false; {implicitne je vse OK} assign (zdroj, soubor); reset (zdroj); for i := 1 to N do begin {cteni radku} if eof (zdroj) then chyba := true {soubor obsahuje mene nez N radku} else for j := 1 to N do if eoln (zdroj) then chyba := true {radek obsahuje mene nez N znaku} else begin read (zdroj, ch); if ch = NULA then m[i, j] := false else if ch = JEDNA then m[i, j] := true else chyba := true; {nic nez 1 a 0 neni povoleno} end; {cteni znaku} readln (zdroj); {zabranime nacteni znaku konec radku} end; {cteni radku} nactiMrizku := not chyba; {unkce vraci true, je-li vse v poradku} end; {of nactiMrizku} var m: Mrizka; var jmenoVstupnihoSouboru, jmenoVystupnihoSouboru, jmenoSouboruMrizky: string; var volba: integer; {1 - zasifrovat, 2 - desifrovat} begin writeln ('zadejte jmeno vstupniho souboru:'); readln (jmenoVstupnihoSouboru); writeln ('zadejte jmeno vystupniho souboru:'); readln (jmenoVystupnihoSouboru); writeln ('zadejte jmeno souboru s mrizkou:'); readln (jmenoSouboruMrizky); writeln ('Jaka operace se ma provest? 1 - sifrovani, 2 - desifrovani'); read (volba); if nactiMrizku (m, jmenoSouboruMrizky) then begin if zkontrolujMrizku (m) then begin assign (vstup, jmenoVstupnihoSouboru); assign (vystup, jmenoVystupnihoSouboru); reset (vstup); rewrite (vystup); case volba of 1: zasifrujDleMrizky (m); 2: rozsifrujDleMrizky (m); end; close (vstup); close (vystup); end else write ('Vase mrizka nemuze fungovat.'); end else writeln ('Chyba pri nacitani mrizky.'); end.