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 :

Matrice carrée en zigzag


Sujet :

Pascal

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 74
    Points : 39
    Points
    39
    Par défaut Matrice carrée en zigzag
    Bonjour

    Nom : zig-zag.jpg
Affichages : 865
Taille : 53,7 Ko

    J'ai essayé le code suivant en Pascal :
    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
    program zigzag;
    uses wincrt;
    var
    nbligne,nbcolonne,nblignemax,nbcolonnemax,i,j,taille,k:integer;
    mat:array [1..3,1..3] of integer;
    begin
    nbligne:=1;
    nbcolonne:=1;
    nblignemax:=3;
    nbcolonnemax:=3;
    k:=1;
    taille:=36;
    mat[nbligne,nbcolonne]:=k;
    while(taille<9) do
    begin
    k:=k+1;
    if(nbligne=1) or(nbligne=nblignemax) and(nbcolonne mod 2=1) then
    begin
    nbcolonne:=nbcolonne+1;
    mat[nbligne,nbcolonne]:=k;
    end
    else
    if(nbcolonne=1) or(nbcolonne=nbcolonnemax) and (nbligne mod 2 =0) then
    begin
    nbligne:=nbligne+1;
    mat[nbligne,nbcolonne]:=k;
    end
    else
    if(nbcolonne mod 2=0) then
    begin
    repeat
    nbligne:=nbligne+1;
    nbcolonne:=nbcolonne-1;
    mat[nbligne,nbcolonne]:=k;
    k:=k+1;
    until(nbcolonne=1);
    end 
    else
    if(nbligne mod 2=1) then
    begin
    repeat
    nbligne:=nbligne-1;
    nbcolonne:=nbcolonne+1;
    mat[nbligne,nbcolonne]:=k;
    k:=k+1;
    until(nbligne=1);
    end;
    end;
    for i:=1 to 3 do
    begin
    for j:=1 to 3 do
    write(mat[i,j]);
    writeln;
    end;
    end.
    mais il m'affiche le résultat
    123
    456
    789
    et non pas le résultat attendu
    126
    357
    489
    SVP quelqu'un peut-il me proposer une correction ?

  2. #2
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Bonjour.

    J'ai répondu hier au post que vous avez publié dans le forum Algorithmes.
    Vous y trouverez des explications sur la méthode que j'utilise ci-dessous.

    Voici un programme en Pascal qui remplit une matrice en zigzag.
    ( pour simplifier l'exemple, j'ai pris une matrice 3x3, mais il est facile de généraliser à une matrice 8x8 )
    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
    Program Zigzag;
     
    const N = 3;
          table : array[1..N*N] of integer = (1,4,2,3,5,7,8,6,9);  { table de conversion }
     
    var   A : array[1..N,1..N] of integer;              { A est une matrice }
          T : array[1..N*N] of ^integer;                { T est une table d'adresses }
          i,j,k : integer;
     
    begin
      for i := 1 to N do                                { initialisation de la table T }
          for j := 1 to N do T[(i-1)*N+j] := @A[i,j];
     
      for k := 1 to N*N do T[table[k]]^:= k;            { remplissage en zigzag de la matrice A }
     
      for i := 1 to N do                                { affichage de la matrice A }
          begin
             for j := 1 to N do write(A[i,j]:4);
             writeln;
          end;
     
      writeln;                                          { pause }
      readln;
    end.
    Et la sortie écran :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       1   3   4
       2   5   8
       6   7   9

Discussions similaires

  1. Liste des sous-matrices carrées
    Par potimarara dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 12/10/2006, 18h30
  2. Calculer le determinant d'une matrice carrée
    Par NThierry dans le forum C
    Réponses: 15
    Dernier message: 27/08/2006, 11h31
  3. Diagonales de matrices carrées
    Par samtheh dans le forum Mathématiques
    Réponses: 9
    Dernier message: 08/02/2006, 09h19
  4. Sous matrice carrée d'une matrice carrée
    Par devils55 dans le forum C++
    Réponses: 2
    Dernier message: 13/11/2005, 19h07
  5. Initialisation d'une matrice carrée (malloc...)
    Par kilinette dans le forum C
    Réponses: 4
    Dernier message: 17/10/2005, 19h57

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