Programmation spaghetti
10 i = 0
20 i = i + 1
30 IF i <> 11 THEN GOTO 80
40 IF i = 11 THEN GOTO 60
50 GOTO 20
60 PRINT "Programme terminé."
70 END
80 PRINT i & " au carré = " & i * i
90 GOTO 20
Le même résultat est obtenu par le programme suivant, plus respectueux des principes de la programmation structurée :
10 FOR i = 1 TO 10
20 PRINT i & " au carré = " & i * i
30 NEXT i
40 PRINT "Programme terminé."
50 END
L'exemple suivant, en Fortran 77, calcule le nombre de solutions du problème des huit dames généralisé à un damier n×n. La forte imbrication des sauts (goto
) rend le programme particulièrement difficile à suivre. L'algorithme consiste en un backtracking récursif. Les configurations possibles des dames sont considérées comme des matrices de permutations, et le programme parcourt toutes les permutations en éliminant les « branches » impossibles, qui sont détectées lorsqu'on trouve deux dames sur une même diagonale. La récursivité, qui n'existe pas en Fortran 77, est elle-même implémentée à l'aide de tableaux et de l'instruction goto
.
PROGRAM DAMES
IMPLICIT INTEGER(A-Z)
PARAMETER(L=14)
DIMENSION A(L),S(L),U(4*L-2)
DO 10 I=1,L
A(I)=I
10 CONTINUE
DO 20 I=1,4*L-2
U(I)=0
20 CONTINUE
DO 110 N=1,L
M=0
I=1
R=2*N-1
GO TO 40
30 S(I)=J
U(P)=1
U(Q+R)=1
I=I+1
40 IF(I.GT.N) GO TO 80
J=I
50 Z=A(I)
Y=A(J)
P=I-Y+N
Q=I+Y-1
A(I)=Y
A(J)=Z
IF((U(P).EQ.0).AND.(U(Q+R).EQ.0)) GO TO 30
60 J=J+1
IF(J.LE.N) GO TO 50
70 J=J-1
IF(J.EQ.I) GO TO 90
Z=A(I)
A(I)=A(J)
A(J)=Z
GO TO 70
80 M=M+1
90 I=I-1
IF(I.EQ.0) GO TO 100
P=I-A(I)+N
Q=I+A(I)-1
J=S(I)
U(P)=0
U(Q+R)=0
GO TO 60
100 PRINT *,N,M
110 CONTINUE
END
Exemple de flux de données spaghetti
10 in:INTEGER
20 out:INTEGER
30
40 PROCEDURE Square
50 out = in * in
60 END PROCEDURE
Le même résultat est obtenu par le programme suivant, plus respectueux des principes de la programmation structurée :
10 FUNCTION Square( in:INTEGER ):INTEGER
20 Square = in * in
30 END FUNCTION