Aller au contenu

Programmation spaghetti

Un article de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 8 novembre 2022 à 10:19 et modifiée en dernier par Linkdu128 (discuter | contributions) (Exemple de flux de contrôle spaghetti). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.
 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

Voir aussi

Notes et références