{ Petr Hruska } {$R+} Const SOUBOR_MRIZKY = 'mrizka.txt'; MaxN = 16; Type TMrizka = Array [1 .. MaxN, 1 .. MaxN] Of Boolean; TMrizky = Array [1 .. 4] Of TMrizka; TBlok = Array [1 .. MaxN] Of String[MaxN]; TVelikost = 1 .. MaxN; Var M : TMrizka; M4 : TMrizky; { pole s pootocenymi mrizkami } I : Integer; B : TBlok; N : TVelikost; { velikost mrizky } Vstup, Vystup : Text; { nacte mrizku ze souboru } Procedure NactiMrizku(Var N : TVelikost; Var M : TMrizka); Var I, J, B : Integer; F : Text; Begin { otevreni souboru pro cteni } Assign(F, SOUBOR_MRIZKY); Reset(F); { nacteni dat } Readln(F, N); For J := 1 To N Do Begin For I := 1 To N Do Begin Read(F, B); M[I, J] := B > 0; End; end; { uzavreni souboru } Close(F); End; Procedure Rotace(N : Integer; Var M : TMrizka); Var P : TMrizka; { pomocna mrizka } I, J : Integer; Begin For J := 1 To N Do For I := 1 To N Do P[N+1-J, I] := M[I, J]; For J := 1 To N Do For I := 1 To N Do M[I, J] := P[I, J]; End; Procedure TiskniMrizku(N : TVelikost; Var M : TMrizka); Var I, J : Integer; Begin Writeln(N); For J := 1 To N Do Begin For I := 1 To N Do Write(Ord(M[I, J]), ' '); Writeln; End; End; Procedure OtevriSoubory(Var Vstup, Vystup : Text); Begin Assign(Vstup, 'vstup.txt'); Reset(Vstup); Assign(Vystup, 'vystup.txt'); Rewrite(Vystup); End; Procedure NactiBlok(N : TVelikost; Var B : TBlok; Var Vstup : Text); Var I : Integer; Begin For I := 1 To N Do Readln(Vstup, B[I]); { For I := 1 To N Do Writeln(B[I]);} End; Procedure ZavriSoubory(Var Vstup, Vystup : Text); Begin Close(Vstup); Close(Vystup); End; Procedure Prilozeni(N : TVelikost; Var M : TMrizka; Var B : TBlok; Var Vystup : Text); Var I, J : Integer; S : String; Begin S := ''; For J := 1 To N Do For I := 1 To N Do If M[I, J] Then S := S + B[J][I]; Writeln(Vystup, S); End; { Desifruje a zapise do souboru desifrovany text } Procedure DesifrujBlok(N : TVelikost; Var M4 : TMrizky; Var B : TBlok; Var Vystup : Text); Var I : Integer; Begin For I := 1 To 4 Do Prilozeni(N, M4[I], B, Vystup); End; Begin NactiMrizku(N, M); For I := 1 To 4 Do Begin M4[I] := M; Rotace(N, M); End; OtevriSoubory(Vstup, Vystup); While Not Eof(Vstup) Do Begin NactiBlok(N, B, Vstup); DesifrujBlok(N, M4, B, Vystup); End; ZavriSoubory(Vstup, Vystup); End.