Top.Mail.Ru
Ответы

Не могу разобраться в коде

Имеется програмка на паскале для составления судоку.
Помогите пожалуйста в ней разобраться(желательно в виде коментариев в самом коде).
uses crt;
label 1,2,3,4;
type mas=array[1..4,1..4]of longint;
var s:mas;
m:mas;
i,j,l,chis,k,a,b,c1,c2:longint;
prav:boolean;
begin
clrscr;
randomize;
prav:=false;
k:=0;
for j:=1 to 4 do
begin
while not prav do
begin
chis:=random(5);
if (chis=0) then prav:=false
else begin
for l:=1 to 4 do
if s[1,l]=chis then k:=k+1;
if k>0 then prav:=false
else begin
s[1,j]:=chis;
prav:=true;
end;
k:=0;
end;
end;
prav:=false;
end;
for j:=1 to 4 do
s[2,j]:=s[1,4-j+1];
for i:=3 to 4 do
for j:=1 to 4 do
begin
if (i mod 2)=0
then if j>=3 then s[i,j]:=s[2,4-j+3]
else s[i,j]:=s[2,4-j-1]
else if j>=3 then s[i,j]:=s[1,4-j+3]
else s[i,j]:=s[1,4-j-1]
end;
for i:=1 to 4 do
begin
for j:=1 to 4 do
write(s[i,j]:2);
writeln;
end;
readln;

for i:=1 to 2 do
begin
for j:=1 to 2 do
1:a:=random(3);
b:=random(3);
if (a=0) or (b=0)
then goto 1
else
s[a,b]:=0;
s[b,a]:=0;
end;

for i:=1 to 2 do
begin
for j:=3 to 4 do
2:a:=random(3);
b:=random(5);
if (a=0) or (b=0) or (b<3)
then goto 2
else
s[a,b]:=0;
s[b,a]:=0;
end;

for i:=3 to 4 do
begin
for j:=3 to 4 do
3:a:=random(5);
b:=random(5);
if (a=0) or (b=0)or (a<3) or (b<3)
then goto 3
else
s[a,b]:=0;
s[b,a]:=0;
end;
for i:=3 to 4 do
begin
for j:=1 to 2 do
4:a:=random(5);
b:=random(3);
if (a<3) or (j>2) or (a=0) or (b=0)
then goto 4
else
s[a,b]:=0;
s[b,a]:=0;
end;
for i:=1 to 4 do
begin
for j:=1 to 4 do
write(s[i,j]:2);
writeln;
end;
readln;
end.

По дате
По рейтингу
Аватар пользователя
Новичок
14лет

Во первых: увдиел label… засомневался.
Во-вторых: увидел, что массив 4х4… в судоку, обычно 9х9.
В-третьих: значения массива типа longint… Это явно, лишних 48 байт памяти…
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Вывод: Весь код − «в топку»!

Аватар пользователя
Профи
14лет

Писал какой-то дурак. Легче заново написать, чем разбираться.

Аватар пользователя
14лет

За такую неотформатированную портянку придётся неплохо заплатить.

Аватар пользователя
Оракул
14лет

можно, но! тут в принципе понятно.. .
есть такое слово - ДЕБАГГЕР! учитесь пользоваться!