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 57 Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/parserutils.php on line 205 Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/parserutils.php on line 208 Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/parserutils.php on line 389 Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/parserutils.php on line 530 Strict Standards: Declaration of cache_instructions::retrieveCache() should be compatible with cache::retrieveCache($clean = true) in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/cache.php on line 291 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 sifra_monte_christo [Programování]
 
Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/parser/parser.php on line 66 Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/parser/lexer.php on line 292 Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/parser/handler.php on line 22 Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/parser/handler.php on line 49 Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/parser/handler.php on line 213 Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/parser/handler.php on line 241 Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/parser/handler.php on line 295 Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/parser/handler.php on line 328 Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/parser/handler.php on line 575 Deprecated: Assigning the return value of new by reference is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/parser/xhtml.php on line 939
 
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.
 
sifra_monte_christo.txt · Poslední úprava: 2008/02/04 11:52 autor: rimsky
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki
Strict Standards: Only variables should be passed by reference in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/doku.php on line 79