Bonjour;
j'ai un probléme dans un exo d'algorithmique et je souhaite trouver la solution ici. voici l'exo:
une grille autoreferente est une matrice de 5 lignes et 5 colonnes. elle est composée de 2 parties:
- une partie A composée des 2 colonnes de gauche
- une partie B composée des 3 colonnes de droite

4 2 1 2 2
5 1 2 4 5
1 1 5 6 7
2 0 8 0 0
3 6 0 0 0

dans la premiere colonne de la partie A
4 indique le nombre de 1 de la grille
5 indique le nombre de 2 de la grille
:
:
3 indique le nombre de 5 de la grille

dans la deuxieme colonne de la partie A
2 indique le nombre de 6 de la grille
1 indique le nombre de 7 de la grille
:
:
6 indique le nombre de 0 de la grille
il s’agit toujours de grille autoréférentes , mais on demande de trouver la solution qui consistera à remplir la partie A à partir de la partie B.
Code:
program exo64;
uses biblio;
type t2d=array[1..100,1..100] of integer;
var mat:t2d;l,c:integer;

PROCEDURE lect_B(var mat:t2d);
var i,j:integer;
Begin
        For i:=1 to 5 do
            Begin
                 For j:=3 to 5 do
                      Begin
                           write('mat[',i,',',j,']=');
                           readln(mat[i,j]);
                      End;
            End;
End;

FUNCTION nb_occ(mat:t2d; n:integer):integer;
var i,j,cpt:integer;
Begin
        cpt:=0;
        For j:=1 to 5 do
             Begin
                  For i:=1 to 5 do
                       Begin
                            If mat[i,j]=n then cpt:=cpt+1;
                       End;
             End;
        nb_occ:=cpt;
End;

PROCEDURE remplir_A(var mat:t2d);
var n,i,j:integer; verif:boolean;
Begin
        verif:=true;
        while verif=true do
             Begin
                  verif:=false;
                  n:=1;
                  For j:=1 to 2 do
                       Begin
                            For i:=1 to 5 do
                                 Begin
                                      If mat[i,j]<>nb_occ(mat,n) then
                                           Begin
                                           mat[i,j]:=nb_occ(mat,n);
                                           verif:=true;
                                           End;
                                      n:=(n+1)mod 10;
                                 End;
                       End;
             End;
End;

BEGIN
        writeln('Veuillez entrer les chiffres pour remplir la partie B de la table');
        lect_B(mat);
        remplir_A(mat);
        l:=5;c:=5;
        ecrire_2d(mat,l,c);
        readln;
END.
voila le programme fonctionne dans certain cas mais dans d'autres cas je tombe sur une boucle infinie;
je veu savoir si il y a possibilité d'eviter cette boucle infinie ou de generer un message d'erreur si elle est inevitable.
SVP je me retrouve dos au mur face a ce probléme et c'est trés urgent. j'attends vos réponses.
merci d'avance