164 lines
5.4 KiB
COBOL
164 lines
5.4 KiB
COBOL
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.
|