userkef1992
Geregistreerd op: 06 Okt 2010 Berichten: 220
|
Geplaatst: 27-05-2011 11:40:06 Onderwerp: |
|
|
Code: |
function z=tovervierkant(A)
//checkt of de matrix A een tovervierkant is, ja: z = uitkomst: z = 0
if length(A)<>0 then
X = A(1,:)
Y = A(:,1)
somdiag = sum(diag(A))
somdiag2 = 0
z = sum(X)
i = 1
if length(X)==length(Y) then
while i<=length(X) & z==sum(X)
//horizontaal, vertikaal
if sum(A(i,:))<>sum(X) | sum(A(:,i))<>sum(X) then
z = 0
end
//omgekeerde diagonaal optellen
getal = length(X)+1-i
somdiag2 = somdiag2 + A(i,getal)
i = i +1
end
//als de som van de diagonaal == som X dan is het een mogelijk magisch vierkant
if somdiag <> sum(X) | somdiag2 <> sum(X) then
z = 0
end
else
error("Geen tovervierkant")
end
else
error("Geen matrix")
end
if z==0 then
error("Geen tovervierkant")
end
endfunction
function B=maakToverVierkant(n)
//maakt een vierkant B met zijde n adhv de taale methode
//hulpvierkanten
hulpVector = zeros(n)
hulpVector2 = zeros(n)
for i= 1:n
hulpVector(1,i) = i
hulpVector2(1,n+1-i) = i
end
hulpmatrix1 = zeros(n,n)
hulpmatrix2 = zeros(n,n)
for i = 1:n
hulpmatrix1(i,:) = cyclischeVerschuiving(hulpVector,(n+1)/2+i-1)
hulpmatrix2(i,:) = cyclischeVerschuiving(hulpVector2,(n+1)/2-i)
end
hulpvector3 = vectorb(n*n,1)
hulpmatrix3 = verdeelVector(hulpvector3,n,n)
//uiteindelijke magisch vierkant
toverVierkant = zeros(n,n)
for i = 1:n
for j = 1:n
toverVierkant(i,j) = hulpmatrix3(hulpmatrix1(i,j),hulpmatrix2(i,j))
end
end
B = toverVierkant
endfunction
function S=invertVierkant(X)
//flipt de matrix S horizontaal en vertikaal
S=flipdim(flipdim(X,1),2)
endfunction
function Vierkant=diagonaalmethode(n)
//n is de grootte van het vierkant
if modulo(n,4)<>0
error("geen veelvoud van 4")
else
// vullen
vectormatrix = vectorb(n*n,1)
// verdelen
matrix1= verdeelVector(vectormatrix,n,n)
//flip
omgekeerd = invertVierkant(matrix1)
//select veranderde getallen
//rijen & kolommen
for i=1:n
if modulo(i,4)==0 | modulo(i,4)==1 then
for j = 1:n
if modulo(j,4)<>0 & modulo(j,4)<>1 then
matrix1(i,j)=omgekeerd(i,j)
matrix1(j,i)=omgekeerd(j,i)
end
end
end
end
Vierkant = matrix1
end
endfunction
function A=maakonevenvierkant(n)
A = zeros(n,n)
i = 1
j = (n+1)/2
for k = 1:n*n
A(i,j)=k
i = i - 1
j = j + 1
if modulo(k,n)==0 then
j = j - 1
i = i + 2
else
if j==n+1 then
j = 1
end
if i==0 then
i = n
end
end
end
endfunction
|
_________________
Citaat: |
if it ain't broke, fiddle with it until it is |
534907 |
|