IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Optimisation d'un code !


Sujet :

Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut Optimisation d'un code !
    Bonjour à tous !! Mon problème :

    Voici une procedure qui a pour but de résoudre un carré latin (3 par 3 cases). Voyez vous même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    procedure resolution(var t : tableau);
     
    label 1;
     
    var i, j : integer;
     
    begin
     
         for j := 1 to n do begin
     
             for i := 1 to n do begin
     
                 if t[i, j] = 0 then begin
     
                    1:
     
                    inc(t[i, j]);
     
                    if (j = 1) and (i = 1) then begin
     
                       while (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j + 2]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i + 2, j]) do begin
     
                             inc(t[i, j]);
     
                       end;
     
                    end;
     
                    if (j = 1) and (i = 2) then begin
     
                       while (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j + 2]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i - 1, j]) do begin
     
                             inc(t[i, j]);
     
                       end;
     
                    end;
     
                    if (j = 1) and (i = 3) then begin
     
                       while (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j + 2]) or (t[i, j] = t[i - 1, j]) or (t[i, j] = t[i - 2, j]) do begin
     
                             inc(t[i, j]);
     
                       end;
     
                    end;
     
                    if (j = 2) and (i = 1) then begin
     
                       while (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i + 2, j]) do begin
     
                             inc(t[i, j]);
     
                       end;
     
                    end;
     
                    if (j = 2) and (i = 2) then begin
     
                       while (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i - 1, j]) do begin
     
                             inc(t[i, j]);
     
                       end;
     
                    end;
     
                    if (j = 2) and (i = 3) then begin
     
                       while (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i - 1, j]) or (t[i, j] = t[i - 2, j]) do begin
     
                             inc(t[i, j]);
     
                       end;
     
                    end;
     
                    if (j = 3) and (i = 1) then begin
     
                       while (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i, j - 2]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i + 2, j]) do begin
     
                             inc(t[i, j]);
     
                       end;
     
                    end;
     
                    if (j = 3) and (i = 2) then begin
     
                       while (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i, j - 2]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i - 1, j]) do begin
     
                             inc(t[i, j]);
     
                       end;
     
                    end;
     
                    if (j = 3) and (i = 3) then begin
     
                       while (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i, j - 2]) or (t[i, j] = t[i - 1, j]) or (t[i, j] = t[i - 2, j]) do begin
     
                             inc(t[i, j]);
     
                       end;
     
                    end;
     
                 end;
     
                 if t[i, j] > 3 then begin
     
                    t[i, j] := 0;
     
                    dec(i);
     
                    if i < 1 then begin
     
                       i := 3;
     
    		           dec(j);
     
                       if j < 1 then begin
     
                          erreur('Ce tableau est impossible !');
     
                       end;
     
                    end;
     
                    while (t[i, j] <> 0) and (t[i, j] = s[i, j]) do begin
     
                          dec(i);
     
                          if i < 1 then begin
     
                             i := 3;
     
    			             dec(j);
     
                             if j < 1 then begin
     
                                erreur('Ce tableau est impossible !');
     
                             end;
     
                          end;
     
                    end;
     
                    goto 1;
     
                 end;
     
             end;
     
         end;
     
    end;
    Mais j'ai un souci majeur concernant cette procédure, c'est que si je veux changer le n (ici n est une constante égale à 3) en une valeur supérieure, alors il me faut réécrire beaucoup plus de lignes (ici 9 test mais imaginons un tableau de 9 par 9 cases il faudrait 81 tests !!! ). Pouvez vous m'indiquer une méthode pour optimiser ce code pour ne pas avoir de problèmes lors du changement de la constante n ?

    Merci d'avance pour vos réponse !!

  2. #2
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 234
    Points : 2 337
    Points
    2 337
    Par défaut
    Petite piste de réflexion :
    - Pourquoi autant de tests ?
    - Que se passerait-il s'il y avait, par exemple 4x4 cases ? 5x5 ?
    - Entre autres, est-ce que le traitement pour les cases "du milieu" ne serait-il pas commun à toutes ces cases ?
    - Ensuite, quoi de commun entre toutes les cases des bords ?
    - Comment traiter de façon identique toutes ces cases ?

    À la fin de cette étude, ton code sera plus simple & plus clair.

    Bon courage
    « Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux. »
    Attribué indistinctement à :
    Thomas Jefferson
    Benjamin Franklin
    Albert Einstein !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Petite absence ce week-end...

    Alors alors ça parais compliqué tout ca... Surtout que ce programme je l'ai eu sous le nez durant quelques heures et la je ne vois plus trop autrement que ce que j'ai fait... Je n'arrive pas a voir aussi ce qui se passe d'identique dans les cases externe (ou du bord comme tu l'a dit précédemment) et dans celles du "milieu"... et le seul moyen, pour moi , de trouver un moyen de traiter toutes les cases de la même manière est de faire une boucle qui englobe ma procédure en écrivant un seul test qui variera en fonction de cette boucle mais le souci c'est que même ca je n'arrive plus à trouver... help help

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Commençons par optimiser l'écriture du code :

    pourquoi toutes ces lignes vides ?

    Certes, il en faut un peu pour aérer le code, mais une ligne vide sur 2, ça ne fait que rendre le code moins lisible (comme ceux de tous, mon écran n'est pas extensible, et je n'ai pas les moyens de me payer un 46 pouces 4000 * 3000 )

    Et virer ce goto qui me défrise.
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    beu le goto ca te défrise ?

    Enfait c'est le seul truc qui me paraissais possible pour ca...

    Pour les lignes vides en fait je crois que c'est quand j'ai fait le copié-collé... eheh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    procedure resolution(var t : tableau);
    label 1;
    var i, j : integer;
    begin
         for j := 1 to n do begin
             for i := 1 to n do begin
                 if t[i, j] = 0 then begin
                    1:
                    inc(t[i, j]);
                    if (j = 1) and (i = 1) then begin
                       while (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j + 2]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i + 2, j]) do begin
                             inc(t[i, j]);
                       end;
                    end;
                    if (j = 1) and (i = 2) then begin
                       while (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j + 2]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i - 1, j]) do begin
                             inc(t[i, j]);
                       end;
                    end;
                    if (j = 1) and (i = 3) then begin
                       while (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j + 2]) or (t[i, j] = t[i - 1, j]) or (t[i, j] = t[i - 2, j]) do begin
                             inc(t[i, j]);
                       end;
                    end;
                    if (j = 2) and (i = 1) then begin
                       while (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i + 2, j]) do begin
                             inc(t[i, j]);
                       end;
                    end;
                    if (j = 2) and (i = 2) then begin
                       while (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i - 1, j]) do begin
                             inc(t[i, j]);
                       end;
                    end;
                    if (j = 2) and (i = 3) then begin
                       while (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i - 1, j]) or (t[i, j] = t[i - 2, j]) do begin
                             inc(t[i, j]);
                       end;
                    end;
                    if (j = 3) and (i = 1) then begin
                       while (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i, j - 2]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i + 2, j]) do begin
                             inc(t[i, j]);
                       end;
                    end;
                    if (j = 3) and (i = 2) then begin
                       while (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i, j - 2]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i - 1, j]) do begin
                             inc(t[i, j]);
                       end;
                    end;
                    if (j = 3) and (i = 3) then begin
                       while (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i, j - 2]) or (t[i, j] = t[i - 1, j]) or (t[i, j] = t[i - 2, j]) do begin
                             inc(t[i, j]);
                       end;
                    end;
                 end;
                 if t[i, j] > 3 then begin
                    t[i, j] := 0;
                    dec(i);
                    if i < 1 then begin
                       i := 3;
    		           dec(j);
                       if j < 1 then begin
                          erreur('Ce tableau est impossible !');
                       end;
                    end;
                    while (t[i, j] <> 0) and (t[i, j] = s[i, j]) do begin
                          dec(i);
                          if i < 1 then begin
                             i := 3;
    			             dec(j);
                             if j < 1 then begin
                                erreur('Ce tableau est impossible !');
                             end;
                          end;
                    end;
                    goto 1;
                 end;
             end;
         end;
    end;

  6. #6
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    Bonjour,

    Il est vrai que goto est un élément du langage pascale, mais il est totalement déconseillé, voir interdit, de l’utiliser . La raison en est simple : il y a des centaines de manière d’optimiser un code sans utiliser goto.

    J'ai une idée pour optimiser ton programme mais j'aimerai que tu m'explique éxactement, c-a-d clairement ce que la procedure resolution doit faire.

    Salut.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Le but de cette procedure et de remplir un tableau n x n en prenant en compte le fait que l'utilisateur du programme nous donne déjà certaine valeures pour ce tableau.

    Exemple pour un tableau 3 x 3 :

    L'utilisateur rentre :

    1 ? 2
    ? ? 3
    3 ? ?

    et le programme renvoit :

    1 3 2
    2 1 3
    3 2 1

    Ma procedure fonctionne pour un tableau 3 x 3 mais pas pour plus ni moins... d'ou la demande d'une optimisation pour le faire fonctionner pour n'importe quel n

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    soit z la taille du carré

    var z integer;
    matrice(1 to z,1 to z):integer
    (*je définis les possibilités*)

    structure de résolution
    pour boucle :=1 to z
    u:=boucle
    if u>9 then then u:= chr(z+55)
    chainepossible:=chainepossible & u
    next boucle
    pour boucle=1 to z
    for boucle2=1 to z
    matrice(boucle1,boucle2)=chainepossible
    next boucle2
    next boucle1

    structure de lecture des données
    faire
    ligne:=readln("donner l'adresse en ligne"
    si ligne> z alors arrêt saisie valeur
    colonne:=readln("entrer l'adresse en colonne"
    valeur="entrez la valeur"
    matrice(ligne,colonne):=valeur
    structure de calcul
    faire
    nbmod=0
    lire toutes les valeurs de matrice nommé plus bas h
    si leur longueur(h)=1
    alors pour toutes les cellules de la ligne et de la colonne
    retirer de leur valeur celle de h
    et si ceci diminue leur longueur
    alors nbmod=nbmod+1
    tant que nbmod<>0

    structure de restitution
    Elle est pas belle la vie ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Whaou ! Ca c'est de la traduction française...

    Un "premier point" et que je croyais, et dites moi si je me trompe, qu'on ne pouvais pas passer par variable un nombre permettant de définir le nombre de colonnes ou de ligne d'un tableau mais par une constante de la manière suivante (pour notre situation):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    const z = 10; {exemple pour un tableau 10 x 10}
     
    type matrice = array[1..z, 1..z] of integer; {on défini la matrice carrée d'ordre z}
    et le seul moyen de changer l'ordre de cette matrice et de modifier la constante dans le programme lui même.

    Ensuite je suis vraiment désolé mais je n'arrive pas à saisir ce genre de "vulgarisation" random...

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    je ne vais pas écrire ton programme
    désolé mais je ne fais plus de pascal
    c'était seulement histoire de te dire comment faire, dans un français intelligible, ce qui ne semble pas très réussi.
    pour ton tableau si pascal ne permet pas de définir de tableau à taille dynamique tu peux toujours fixer une taille maxi par exemple 36
    et ne parcourir que les éléments inférieurs ou égaux à z
    si ta version de pascal permet redim tu peux aussi le rédéfinir
    Elle est pas belle la vie ?

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup pour ta réponse en tout cas random et je vais essayer m'en servir

    thewho et ALT, vous avez des compléments à m'apporter par rapport a ce que vous me disiez ?

  12. #12
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut tableau
    Bonjour,
    Je sais qu'il existe la procédure setLength(t,taille) qui permet de changer la taille d'un tableau si tu veux, parcontre je ne l'ais utilisé que pour des tableaux unidimensionnels.

  13. #13
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Eric Sigoillot a écrit un très bon tutoriel sur les tableaux dynamiques :
    http://pascal.developpez.com/cours/artdynarr/

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  14. #14
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 234
    Points : 2 337
    Points
    2 337
    Par défaut
    thewho et ALT, vous avez des compléments à m'apporter par rapport a ce que vous me disiez ?
    Pas pour le moment.
    Bon courage.
    « Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux. »
    Attribué indistinctement à :
    Thomas Jefferson
    Benjamin Franklin
    Albert Einstein !

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Salut tout le monde me revoila !! Cette fois çi avec un autre problème mais toujours en rapport. Voyez plutôt ma procedure (qui a beaucoup changé je l'avou... pour résoudre cette fois un sudoku... assez dur en fait... ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    function resol_c(t : tableau ; v, i : integer) : boolean;
    var a, b : integer;
    begin
         result := true;
         i := a;
         for b := 1 to n do begin
             if t[a, b] = v then begin
                exit(false);
             end;
         end;
    end;
     
    function resol_l(t : tableau ; v, j : integer) : boolean;
    var a, b : integer;
    begin
         result := true;
         j := b;
         for a := 1 to n do begin
             if t[a, b] = v then begin
                exit(false);
             end;
         end;
    end;
     
    function resol_t(t : tableau ; i, j : integer) : boolean;
    var a, b : integer;
    begin
         result := true;
         if ((1 > j) and (j < 3)) and ((1 > i) and (i < 3)) then begin
            for b := 1 to 3 do begin
                for a := 1 to 3 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((1 > j) and (j < 3)) and ((4 > i) and (i < 6)) then begin
            for b := 1 to 3 do begin
                for a := 4 to 6 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((1 > j) and (j < 3)) and ((7 > i) and (i < 9)) then begin
            for b := 1 to 3 do begin
                for a := 7 to 9 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((4 > j) and (j < 6)) and ((1 > i) and (i < 3)) then begin
            for b := 4 to 6 do begin
                for a := 1 to 3 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((4 > j) and (j < 6)) and ((4 > i) and (i < 6)) then begin
         for b := 4 to 6 do begin
                for a := 4 to 6 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((4 > j) and (j < 6)) and ((7 > i) and (i < 9)) then begin
            for b := 4 to 6 do begin
                for a := 7 to 9 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((7 > j) and (j < 9)) and ((1 > i) and (i < 3)) then begin
            for b := 7 to 9 do begin
                for a := 1 to 3 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((7 > j) and (j < 3)) and ((4 > i) and (i < 6)) then begin
            for b := 7 to 9 do begin
                for a := 4 to 6 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((7 > j) and (j < 9)) and ((7 > i) and (i < 9)) then begin
            for b := 7 to 9 do begin
                for a := 7 to 9 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
    end;
     
    procedure resolution(var t : tableau);
    var i, j : integer;
    begin
         for j := 1 to n do begin
             for i := 1 to n do begin
                 s[i ,j] := t[i, j];
             end;
         end;
         for j := 1 to n do begin
             for i := 1 to n do begin
                 if t[i, j] = 0 then begin
                    while (resol_c(t, t[i, j], i) = false) and (resol_l(t, t[i, j], j) = false) and (resol_t(t, i, j) = false) do begin
                    inc(t[i, j]);
                    end;
                 end;
                 if t[i, j] > n then begin
                    t[i, j] := 0;
                    dec(i);
                    if (i < 1) then begin
                       i := n;
                       dec(j);
                       if (j < 1) then begin
                          Erreur('Ce Sudoku est impossible !');
                       end;
                    end;
                 end;
             end;
         end;
    end;
    Et la donc mon problème c'est qu'il me dit, quand je compile, qu'il y a un souci dans le tableau et que cette procedure "sort" du tableau, en gros que l'indice i ou j est trop grand pour la définition du tableau... Ou est l'erreur car je ne la trouve pas...

    Merci d'avance !!

  16. #16
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 941
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 941
    Points : 5 652
    Points
    5 652
    Par défaut
    Hi,

    Quelle est la définition de ton type "tableau" ?

    Dans tes fonctions/procédures, tu utilises une variable globale n, ce n'est pas une bonne habitude. Ajoute un paramètre à tes fonctions/procédures.

    Citation Envoyé par leserapheen
    Et la donc mon problème c'est qu'il me dit, quand je compile, qu'il y a un souci dans le tableau et que cette procedure "sort" du tableau, en gros que l'indice i ou j est trop grand pour la définition du tableau... Ou est l'erreur car je ne la trouve pas...
    sur quelle ligne se produit l'erreur ?

    Une bonne chose serait de mettre un code compilable, réduit au minimum permettant de montrer l'erreur, car là, impossible même d'essayer sans avoir les définitions personnelles que tu utilises.
    Ou même ton code complet, mais dans tous les cas tout ce qu'il faut pour essayer de compiler (j'ai vu assez souvent dans les sujets du forum "Nous ne sommes pas devins", ce qui est clairement véridique, pas besoin d'être devin pour le "deviner" )
    Si les cons volaient, il ferait nuit à midi.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Yes tu a raison !! Alors pour te répondre :

    n n'est pas une variable globale mais une constante qui sert à définir les marges du tableau mais voit mon code complet par toi même (bon c'est peut-être un peu fouillis et puis surement qu'en ce moment certains fonction/procedure ne servent à rien...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    program table_3x3; uses console, crt; {$R+}
     
    const n = 9;
     
    type tableau = array[1..n, 1..n] of integer;
     
    var s : tableau;
     
    procedure erreur(s : string);
    begin
         writeln('ERREUR : ', s);
         writeln;
         halt;
    end;
     
    procedure acquisition(var t : tableau);
    var i, j : integer;
    begin
         writeln('Le remplir avec des valeurs entre 1 et ', n,' (valeur 0 si case inconnue) :');
         writeln;
         for j := 1 to n do begin
             for i := 1 to n do begin
                 write('    - Ligne ', j, ', colonne ', i, ' : '); readln(t[i, j]);
                 s[i, j] := t[i, j];
             end;
         end;
         writeln;
    end;
     
    procedure verification(t : tableau);
    var i, j : integer;
    begin
         for j := 1 to n do begin
             for i := 1 to n do begin
                 if (t[i, j] < 0) or (t[i, j] > n) then begin
                    erreur('Valeurs saisies non comprises entre 0 et n !');
                 end;
             end;
         end;
         for j := 1 to n do begin
             for i := 1 to n do begin
                 if t[i, j] <> 0 then begin
                    if (j = 1) and (i = 1) then begin
                       if (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j + 2]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i + 2, j]) then begin
    	                  erreur('Deux même valeur sur une même ligne ou une même colonne !');
                       end;
                    end;
                    if (j = 1) and (i = 2) then begin
                       if (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j + 2]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i - 1, j]) then begin
                          erreur('Deux même valeur sur une même ligne ou une même colonne !');
                       end;
                    end;
                    if (j = 1) and (i = 3) then begin
                       if (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j + 2]) or (t[i, j] = t[i - 1, j]) or (t[i, j] = t[i - 2, j]) then begin
                          erreur('Deux même valeur sur une même ligne ou une même colonne !');
                       end;
                    end;
                    if (j = 2) and (i = 1) then begin
                       if (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i + 2, j]) then begin
                          erreur('Deux même valeur sur une même ligne ou une même colonne !');
                       end;
                    end;
                    if (j = 2) and (i = 2) then begin
                       if (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i - 1, j]) then begin
                          erreur('Deux même valeur sur une même ligne ou une même colonne !');
                       end;
                    end;
                    if (j = 2) and (i = 3) then begin
                       if (t[i, j] = t[i, j + 1]) or (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i - 1, j]) or (t[i, j] = t[i - 2, j]) then begin
                          erreur('Deux même valeur sur une même ligne ou une même colonne !');
                       end;
                    end;
                    if (j = 3) and (i = 1) then begin
                       if (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i, j - 2]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i + 2, j]) then begin
                          erreur('Deux même valeur sur une même ligne ou une même colonne !');
                       end;
                    end;
                    if (j = 3) and (i = 2) then begin
                       if (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i, j - 2]) or (t[i, j] = t[i + 1, j]) or (t[i, j] = t[i - 1, j]) then begin
                          erreur('Deux même valeur sur une même ligne ou une même colonne !');
                       end;
                    end;
                    if (j = 3) and (i = 3) then begin
                       if (t[i, j] = t[i, j - 1]) or (t[i, j] = t[i, j - 2]) or (t[i, j] = t[i - 1, j]) or (t[i, j] = t[i - 2, j]) then begin
                          erreur('Deux même valeur sur une même ligne ou une même colonne !');
                       end;
                    end;
                 end;
             end;
         end;
    end;
     
    function resol_c(t : tableau ; v, i : integer) : boolean;
    var a, b : integer;
    begin
         result := true;
         i := a;
         for b := 1 to n do begin
             if t[a, b] = v then begin
                exit(false);
             end;
         end;
    end;
     
    function resol_l(t : tableau ; v, j : integer) : boolean;
    var a, b : integer;
    begin
         result := true;
         j := b;
         for a := 1 to n do begin
             if t[a, b] = v then begin
                exit(false);
             end;
         end;
    end;
     
    function resol_t(t : tableau ; i, j : integer) : boolean;
    var a, b : integer;
    begin
         result := true;
         if ((1 > j) and (j < 3)) and ((1 > i) and (i < 3)) then begin
            for b := 1 to 3 do begin
                for a := 1 to 3 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((1 > j) and (j < 3)) and ((4 > i) and (i < 6)) then begin
            for b := 1 to 3 do begin
                for a := 4 to 6 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((1 > j) and (j < 3)) and ((7 > i) and (i < 9)) then begin
            for b := 1 to 3 do begin
                for a := 7 to 9 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((4 > j) and (j < 6)) and ((1 > i) and (i < 3)) then begin
            for b := 4 to 6 do begin
                for a := 1 to 3 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((4 > j) and (j < 6)) and ((4 > i) and (i < 6)) then begin
         for b := 4 to 6 do begin
                for a := 4 to 6 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((4 > j) and (j < 6)) and ((7 > i) and (i < 9)) then begin
            for b := 4 to 6 do begin
                for a := 7 to 9 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((7 > j) and (j < 9)) and ((1 > i) and (i < 3)) then begin
            for b := 7 to 9 do begin
                for a := 1 to 3 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((7 > j) and (j < 3)) and ((4 > i) and (i < 6)) then begin
            for b := 7 to 9 do begin
                for a := 4 to 6 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
         if ((7 > j) and (j < 9)) and ((7 > i) and (i < 9)) then begin
            for b := 7 to 9 do begin
                for a := 7 to 9 do begin
                    if t[i, j] = t[a, b] then begin
                       exit(false);
                    end;
                end;
            end;
         end;
    end;
     
    procedure resolution(var t : tableau);
    var i, j : integer;
    begin
         for j := 1 to n do begin
             for i := 1 to n do begin
                 s[i ,j] := t[i, j];
             end;
         end;
         for j := 1 to n do begin
             for i := 1 to n do begin
                 if t[i, j] = 0 then begin
                    while (resol_c(t, t[i, j], i) = false) and (resol_l(t, t[i, j], j) = false) and (resol_t(t, i, j) = false) do begin
                    inc(t[i, j]);
                    end;
                 end;
                 if t[i, j] > n then begin
                    t[i, j] := 0;
                    dec(i);
                    if (i < 1) then begin
                       i := n;
                       dec(j);
                       if (j < 1) then begin
                          Erreur('Ce Sudoku est impossible !');
                       end;
                    end;
                 end;
             end;
         end;
    end;
     
    function question(r : string) : boolean;
    begin
         result := r = 'O';
    end;
     
    var t : tableau;
        r : string;
    begin
         r := 'O';
         while question(r) do begin
               clrscr;
               writeln('Voici un tableau 3x3 que l''on souhaite remplir automatiquement :');
               writeln;
               writeln('                                   A  B  C');
               writeln('                                   D  E  F');
               writeln('                                   G  H  I');
               writeln;
               acquisition(t);
               verification(t);
               writeln('Le tableau inscrit est le suivant :');
               writeln;
               writeln('                                   ', t[1, 1], '  ', t[2, 1], '  ', t[3, 1], '  ', t[4, 1], '  ', t[5, 1], '  ', t[6, 1], '  ', t[7, 1], '  ', t[8, 1], '  ', t[9, 1]);
               writeln('                                   ', t[1, 2], '  ', t[2, 2], '  ', t[3, 2], '  ', t[4, 2], '  ', t[5, 2], '  ', t[6, 2], '  ', t[7, 2], '  ', t[8, 2], '  ', t[9, 2]);
               writeln('                                   ', t[1, 3], '  ', t[2, 3], '  ', t[3, 3], '  ', t[4, 3], '  ', t[5, 3], '  ', t[6, 3], '  ', t[7, 3], '  ', t[8, 3], '  ', t[9, 3]);
               writeln('                                   ', t[1, 4], '  ', t[2, 4], '  ', t[3, 4], '  ', t[4, 4], '  ', t[5, 4], '  ', t[6, 4], '  ', t[7, 4], '  ', t[8, 4], '  ', t[9, 4]);
               writeln('                                   ', t[1, 5], '  ', t[2, 5], '  ', t[3, 5], '  ', t[4, 5], '  ', t[5, 5], '  ', t[6, 5], '  ', t[7, 5], '  ', t[8, 5], '  ', t[9, 5]);
               writeln('                                   ', t[1, 6], '  ', t[2, 6], '  ', t[3, 6], '  ', t[4, 6], '  ', t[5, 6], '  ', t[6, 6], '  ', t[7, 6], '  ', t[8, 6], '  ', t[9, 6]);
               writeln('                                   ', t[1, 7], '  ', t[2, 7], '  ', t[3, 7], '  ', t[4, 7], '  ', t[5, 7], '  ', t[6, 7], '  ', t[7, 7], '  ', t[8, 7], '  ', t[9, 7]);
               writeln('                                   ', t[1, 8], '  ', t[2, 8], '  ', t[3, 8], '  ', t[4, 8], '  ', t[5, 8], '  ', t[6, 8], '  ', t[7, 8], '  ', t[8, 8], '  ', t[9, 8]);
               writeln('                                   ', t[1, 9], '  ', t[2, 9], '  ', t[3, 9], '  ', t[4, 9], '  ', t[5, 9], '  ', t[6, 9], '  ', t[7, 9], '  ', t[8, 9], '  ', t[9, 9]);
               writeln;
               resolution(t);
               write('Resolution du tableau'); delay(500); write('.'); delay(500); write('.'); delay(500); write('. '); delay(500); writeln(':');
               writeln;
               writeln('                                   ', t[1, 1], '  ', t[2, 1], '  ', t[3, 1], '  ', t[4, 1], '  ', t[5, 1], '  ', t[6, 1], '  ', t[7, 1], '  ', t[8, 1], '  ', t[9, 1]);
               writeln('                                   ', t[1, 2], '  ', t[2, 2], '  ', t[3, 2], '  ', t[4, 2], '  ', t[5, 2], '  ', t[6, 2], '  ', t[7, 2], '  ', t[8, 2], '  ', t[9, 2]);
               writeln('                                   ', t[1, 3], '  ', t[2, 3], '  ', t[3, 3], '  ', t[4, 3], '  ', t[5, 3], '  ', t[6, 3], '  ', t[7, 3], '  ', t[8, 3], '  ', t[9, 3]);
               writeln('                                   ', t[1, 4], '  ', t[2, 4], '  ', t[3, 4], '  ', t[4, 4], '  ', t[5, 4], '  ', t[6, 4], '  ', t[7, 4], '  ', t[8, 4], '  ', t[9, 4]);
               writeln('                                   ', t[1, 5], '  ', t[2, 5], '  ', t[3, 5], '  ', t[4, 5], '  ', t[5, 5], '  ', t[6, 5], '  ', t[7, 5], '  ', t[8, 5], '  ', t[9, 5]);
               writeln('                                   ', t[1, 6], '  ', t[2, 6], '  ', t[3, 6], '  ', t[4, 6], '  ', t[5, 6], '  ', t[6, 6], '  ', t[7, 6], '  ', t[8, 6], '  ', t[9, 6]);
               writeln('                                   ', t[1, 7], '  ', t[2, 7], '  ', t[3, 7], '  ', t[4, 7], '  ', t[5, 7], '  ', t[6, 7], '  ', t[7, 7], '  ', t[8, 7], '  ', t[9, 7]);
               writeln('                                   ', t[1, 8], '  ', t[2, 8], '  ', t[3, 8], '  ', t[4, 8], '  ', t[5, 8], '  ', t[6, 8], '  ', t[7, 8], '  ', t[8, 8], '  ', t[9, 8]);
               writeln('                                   ', t[1, 9], '  ', t[2, 9], '  ', t[3, 9], '  ', t[4, 9], '  ', t[5, 9], '  ', t[6, 9], '  ', t[7, 9], '  ', t[8, 9], '  ', t[9, 9]);
               writeln;
               write('L''opération est terminée ! Recommencer ? (O/N)'); readln(r);
               while (r <> 'O') and  (r <> 'N') do begin
                     write('Valeur non acceptée !'); readln(r);
               end;
         end;
    end.
    Voila !! J'espère que c'est assez lisible...

  18. #18
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 234
    Points : 2 337
    Points
    2 337
    Par défaut
    Si c'est dans la procédure, regarde mieux ton code.

    Là, on ne peut rien pour toi, puisque tu ne nous donnes pas les déclarations.
    En gros : c'est quoi n ? C'est quoi s ? Etc.

    Bon courage
    « Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux. »
    Attribué indistinctement à :
    Thomas Jefferson
    Benjamin Franklin
    Albert Einstein !

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    J'arrive plus à rien voir dans ce fichu code...

    Pour te répondre :

    n est une constante qui sert à définir le tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const n = 9;
     
    type tableau : array[1..n, 1..n] of integer; //On définit la matrice carrée d'ordre n. Ici n = 9 donc identique à un Sudoku (9 x 9 cases).
    s est de type tableau et sert enfait a copier les donnée qu'a rentré l'utilisateur afin de comparer au modifications du tableau en cours et donc de ne pas modifier les donnée rentrée par l'utilisateur. En gros si t[i, j] = s[i, j], on passe à la case suivante.

    Autrement j'ai donné mon code complet donc je ne voit pas trop ce que vous ne pourriez pas savoir au niveau des déclarations...

    Glurp je ne trouve toujours paaas... C'est énervant à la fin... Help !!

  20. #20
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 941
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 941
    Points : 5 652
    Points
    5 652
    Par défaut
    Hello,

    Quelques remarques rapides, car classiques:

    - Il faut utiliser des noms suffisamment explicites.

    Ce n'est pas le cas pour, "n" pour une constante qui sert de partout, les noms si courts devraient être réservés à des variables/constantes locales, et uniquement si leur signification est claire (sinon, ajouter une petit commentaire expliquant à quoi elles servent).

    - Il faut mettre des commentaires, y compris le but des fonctions/procédures, voire l'algorithme qu'elles sont censées implémenter.

    Ces remarques sont toujours d'actualité, encore plus quand il s'agit de faire lire/utiliser ton code par d'autres.


    Je n'ai donc fait que parcourir ton code, mais j'y vois:

    Dans le programme principal, tu as une boucle dans laquelle tu veux passer au moins une fois.

    La structure de contrôle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    repeat
    ...
    until ...
    est faite pour ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while ... do
    begin
    ...
    end;
    sert pour gérer des boucles dans lesquelles il est possible qu'on ne passe jamais.

    Tes procédures sont trop longues, et pourraient être éclatées en plusieurs morceaux.
    Par exemple "verification" pourrait être éclatée en
    - verificationLigne(x: integer)
    - verificationColonne(x : integer)
    - verificationCarre(x : integer)

    - verification
    qui se contenterait d'appeler les autres fonctions.

    Cela regroupe le code en morceaux plus cohérents, et verification devient plus simple à lire/comprendre.

    Ce sont mes remarques élémentaires sur ton code.

    Continue, tu sembles être sur la bonne voie.
    Si les cons volaient, il ferait nuit à midi.

Discussions similaires

  1. Optimisation d'un code SQL
    Par Myriam25 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/11/2007, 12h14
  2. [Optimisation C++] Calcul code altitude
    Par Spout dans le forum C++
    Réponses: 7
    Dernier message: 13/11/2007, 23h17
  3. Y a-t-il une solution pour optimiser mon petit code ?
    Par pierre987321 dans le forum Delphi
    Réponses: 20
    Dernier message: 14/06/2007, 11h53
  4. Optimisation de mon code ActionScript
    Par amnesias dans le forum Flash
    Réponses: 9
    Dernier message: 01/04/2007, 23h04
  5. [MMX] Optimisation d'un code C++ -> plus lent
    Par Laurent Gomila dans le forum x86 32-bits / 64-bits
    Réponses: 12
    Dernier message: 17/05/2006, 19h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo