IDENTIFICATION DIVISION. PROGRAM-ID. carmag0. AUTHOR. OD. ***--------------------------------------------------------------- *----------------------------------------------------------------* * PROGRAMME * * CREATION TABLEAU IMPAIR * *----------------------------------------------------------------* ENVIRONMENT DIVISION. ***--------------------------------------------------------------- DATA DIVISION. WORKING-STORAGE SECTION. *--------------------------* * DEFINITION DES VARIABLES * *--------------------------* * Nombre entre au clavier 77 NBR-DPRT PICTURE 999 VALUE ZERO. * Tableau du carre magique 01 TABLE-CARMAG. * - Numero de ligne 05 LGN OCCURS 25. * - Colonnes de la ligne 10 CLN OCCURS 25. * - - Contenu de chaque colonne : chiffre 15 CNTN PICTURE 999. * Nombre pour verifier le nombre saisie 77 NBR PICTURE 999 VALUE ZERO. 88 IMPAIR VALUE 1. * Valeur a inserer dans le tableau final 77 VALEUR PICTURE 999 VALUE 1. * Curseur ligne 77 CRSR-LGN PICTURE 999 VALUE 1. * Curseur colonne 77 CRSR-CLN PICTURE 999 VALUE 1. * Total d'un calcul puis reutilisation pour diverses taches 77 TOTAL PICTURE 999 VALUE ZERO. * Nombre de cases dans le tableau a afficher 77 NBR-CRR PICTURE 999 VALUE ZERO. * Reste dans la division euclidienne 77 RST PICTURE 999 VALUE ZERO. ***--------------------------------------------------------------- PROCEDURE DIVISION. * * Nom du programme * PROGRAMME SECTION. * Debut du programme (initialisation) DEBUT. DISPLAY "Debut de la saisie...". PERFORM SAISIE UNTIL IMPAIR. DISPLAY "Saisie terminee !". * Corps du programme (contenu) CORPS. DISPLAY "Taille du tableau : " NBR-DPRT. PERFORM REMPLISSAGE. * Fin du programme FIN. DISPLAY "Carre magique fini !!!". STOP RUN. * * Arborescence de niveau 2 : Saisie de l'utilisateur * SAISIR SECTION. SAISIE. DISPLAY "Saisissez un chiffre impair inferieur a 26 : " WITH NO ADVANCING. ACCEPT NBR-DPRT. PERFORM VERIF. VERIF. DIVIDE NBR-DPRT BY 2 GIVING TOTAL REMAINDER RST. IF (RST NOT EQUAL TO ZERO AND NBR-DPRT LESS THAN 26) THEN MOVE 1 TO NBR. * * Arborescence niveau 2 : REMPLISSAGE PUIS AFFICHAGE * REMPLISSAGE SECTION. * Affectation de la premiere valeur, ligne une, colonne du milieu VAL-UNE. DISPLAY "Affectation valeur une...". * COMPUTE TOTAL ROUNDED = NBR-DPRT / 2. DIVIDE 2 INTO NBR-DPRT GIVING TOTAL ROUNDED. * Affectation de la premiere valeur a la colonne trouvee MOVE 1 TO CNTN(1,TOTAL). * Affectation du numero de colonne vers le curseur des colonnes MOVE TOTAL TO CRSR-CLN. DISPLAY "Affectation terminee ! Colonne actuelle : " TOTAL. VAL-SUIV. DISPLAY "Affectation des valeurs suivantes...". MULTIPLY NBR-DPRT BY NBR-DPRT GIVING TOTAL. MOVE TOTAL TO NBR-CRR. PERFORM TRAITEMENT UNTIL VALEUR EQUAL TO NBR-CRR. DISPLAY "Affectations terminees ! Total : " VALEUR. AFFICHAGE. DISPLAY "AFFICHAGE DU TABLEAU". MOVE 1 TO CRSR-LGN. MOVE 1 TO CRSR-CLN. PERFORM PARCOURS VARYING CRSR-LGN FROM 1 BY 1 UNTIL CRSR-LGN > NBR-DPRT. * AFTER CRSR-CLN FROM 1 BY 1 UNTIL CRSR-CLN * > NBR-DPRT. DISPLAY "AFFICHAGE TERMINE". * * Arborescence niveau 3 : TRAITEMENT PLACEMENT * TRAITEMENT SECTION. INCREMENTE. ADD 1 TO VALEUR. MLTPL. DIVIDE VALEUR BY NBR-DPRT GIVING TOTAL REMAINDER RST. IF (RST EQUAL TO 1) THEN PERFORM SS-PLCMT ELSE PERFORM SR-PLCMT. VERIFICATION. PERFORM VERIFIER. PLACEMENT. DISPLAY "|_Affectation de : " VALEUR. MOVE VALEUR TO CNTN(CRSR-LGN,CRSR-CLN). DISPLAY "| Affectee a : " CRSR-LGN ", "CRSR-CLN. * * Arborescence niveau 3 : Affichage du tableau * AFFICHER SECTION. PARCOURS. PERFORM AFFICHE VARYING CRSR-CLN FROM 1 BY 1 UNTIL CRSR-CLN >= NBR-DPRT. DISPLAY "|" CNTN(CRSR-LGN,CRSR-CLN) "|". AFFICHE. DISPLAY "|" CNTN(CRSR-LGN,CRSR-CLN) "|" WITH NO ADVANCING. * * Arborescence niveau 4 : MULIPLE + 1 * MULTPL SECTION. SS-PLCMT. ADD 1 TO CRSR-LGN. SR-PLCMT. SUBTRACT 1 FROM CRSR-LGN. SUBTRACT 1 FROM CRSR-CLN. * * Arborescence niveau 4 : VERIFICATION LIGNE / COLONNE * VERIFIER SECTION. LIGNE. IF (CRSR-LGN < 1) THEN MOVE NBR-DPRT TO CRSR-LGN. IF (CRSR-LGN > NBR-DPRT) THEN MOVE 1 TO CRSR-LGN. COLONNE. IF (CRSR-CLN < 1) THEN MOVE NBR-DPRT TO CRSR-CLN. IF (CRSR-CLN > NBR-DPRT) THEN MOVE 1 TO CRSR-CLN.