Poniżej fragment mojego programu układającego krzyżówkę 6 na 6 z wyrazów 6, 7 i 8 literowych. Prosiłbym o spojrzenie na ten program profesjonalnym okiem i podpowiedź, co można w nim zmienić w celu przyspieszenia działania.
Program Krzyzowka6na6;
Uses Crt,Dos;
Type short9 = Array[1..8] Of Char;
plik = Array[1..8000] Of Short9;
plik2 = Array[8001..16000] Of Short9;
plik3 = Array[16001..24000] Of Short9;
plik4 = Array[24001..32000] Of Short9;
tab5 = Array[65..99,65..100] Of Word;
tab5a = Array[65..82] Of tab5;
tab5b = Array[83..99] Of tab5;
ind0 = Array[4..10] Of tab5;
ind1 = Array[2..3,65..100] Of Word;
Var zbior : File;
plik1,plik11, plik5: Text;
A : ^plik;
AX : ^plik2;
AY : ^plik3;
AZ : ^plik4;
ind5s : ind0;
ind3s : ind1;
ind5a : ^tab5a;
ind5b : ^tab5b;
znak : Char;
wpoz,wpion : String[8];
wpion1,wpion2,wpoz1 : String[8];
wzero : String[11];
licz, ii : Integer;
i,j,k,x,xy,st7a,ko7a,st8a,ko8a : Word;
st1,ko1,st2a,ko2a,st6a,ko6a,st9a : Word;
st3a,ko3a,st4a,ko4a,st5a,ko5a,ko9a : Word;
st10a,ko10a,st6,st7,st8,st9,st10 : Word;
w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11 : short9;
Procedure LadujWyrazy;
Begin
Assign(zbior,'PN8X.BLR');Reset(zbior,1);BlockRead(zbior,A^,64000);Close(zbior);
Assign(zbior,'PN8Y.BLR');Reset(zbior,1);BlockRead(zbior,AX^,64000);Close(zbior);
Assign(zbior,'PN8Z.BLR');Reset(zbior,1);BlockRead(zbior,AY^,64000);Close(zbior);
Assign(zbior,'PN8Q.BLR');Reset(zbior,1);BlockRead(zbior,AZ^,31248);Close(zbior);
Assign(zbior,'PN8A.IND');Reset(zbior,1);BlockRead(zbior,IND5A^,45360);Close(zbior);
Assign(zbior,'PN8B.IND');Reset(zbior,1);BlockRead(zbior,IND5B^,42840);Close(zbior);
End;
Procedure LadujTablice;
Begin
For i:=4 To 10 Do
For j:=65 To 99 Do
For k:=65 To 100 Do
Begin
If Ord(wzero[i])<=82 Then ind5s[i,j,k]:=ind5a^[Ord(wzero[i]),j,k]
Else ind5s[i,j,k]:=ind5b^[Ord(wzero[i]),j,k];
End;
End;
Procedure LadujIndeksy;
begin
For i:=2 To 3 Do
For k:=65 To 100 Do
ind3s[i,k]:=ind5b^[87,Ord(wzero[i]),k];
End;
Procedure Wyraz10;
Begin
Repeat
If st10a<=8000 Then w10:=A^[st10a] Else If st10a<=16000 Then w10:=AX^[st10a] Else
If st10a<=24000 Then w10:=AY^[st10a] Else w10:=AZ^[st10a];
If w10[2]=w9[2] Then
If w10[3]=w7[2] Then
If w10[4]=w5[2] Then
If w10<>w9 Then
If (w8[1]='o') Or (w10[1]='o') Then
If (w8[8]='o') Or (w10[8]='o') Then Zapis;
st10a:=st10a+1;
Until st10a=ko10a;
End;