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

Langage Pascal Discussion :

[LG] Problème pour afficher une matrice


Sujet :

Langage Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut [LG] Problème pour afficher une matrice
    Bonjour

    Je suis une débutante dans la programmation en pascal, et j'ai un problème dans un cours. J'ai un devoir et j'ai de la difficulté à faire afficher ma matrice. Voici les consignes de mon devoir:

    Créez un programme qui permettra d’inverser les lignes et les colonnes d’une matrice de N lignes et de N colonnes, c’est-à-dire prendre les informations de la ligne 1 et de les transférer dans la colonne 1.
    Le programme devra saisir la matrice, l’inverser, puis faire imprimer la matrice originale et la matrice inversée.


    Alors voilà le code que j'ai écrit:


    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
    program Project1;
     
    {$APPTYPE CONSOLE}
     
    uses
      SysUtils;
    type 
    MATRICE1=ARRAY[1..10]OF ARRAY[1..10]OF INTEGER;     //MATRICE D'ORIGINE
    MATRICE2=ARRAY[1..10]OF ARRAY[1..10]OF INTEGER;     //MATRICE INVERSÉE
     
     
    Tnombre=record 
             nombre: integer;
             end;
     
     
     
    var
    liste: ARRAY[1..10,1..10] of Tnombre; 
    TABLEAU_1:MATRICE1;
    TABLEAU_2:MATRICE2;
    x, y, ligne, colonne, i, grandeur: INTEGER;
     
     
     
    begin
     
    writeln('Inscrire le nombre de lignes et de colonnes de votre matrice ici');                                                                                       
    readln(grandeur);
    writeln('');                                                                    
    colonne:=0;
    ligne:=0;
    i:=0;
     
     
     
            for y:=colonne+1 to grandeur do
     
            begin
            i:=i+1;
                for x:=ligne+1 to grandeur do
                begin
     
                  writeln('Inscrire le nombre de la position:',x, '-',y);
                  readln(liste[i].nombre);
                  liste[i].nombre:=TABLEAU_1[x,y];
     
                end;
            end;
     
     
     
    write(TABLEAU_1[x,y]);
      end;
      end;
     
     
     
    write('Appuyez sur ENTREE pour quitter...');     
    readln;
    end.


    Donc, j'en suis à entrer les données dans la première matrice. Je m'occuperai plus tard de l'inversion. Mais voilà, mes nombres ne s'affiches pas : ce ne sont que des 0 qui apparaissent. De plus, ça ne ressemble même pas à une matrice.

    Quelqu'un pourrait m'aider à trouver mon problème??

    Merci à l'avance...


    [edit]Balises de code ajoutées par Pascal Jankowski[/edit]

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Ta variable liste ne te sert à rien ici. Pour l'instant ton but est de remplir une matrice avec des valeurs rentrées par l'utilisateur, tu n'a donc besoin que de deux variables : la matrice et le nombre lu au clavier (sans compter les variables x et y pour accéder à ta matrice).

    Une fois que tu as récupéré le nombre, tu affectes ce nombre à la case de ta matrice (et pas le contraire !). Tu obtiens donc le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var nombre: integer;
    ...
            for y:=colonne+1 to grandeur do
            begin
            i:=i+1;
                for x:=ligne+1 to grandeur do
                begin
                  writeln('Inscrire le nombre de la position:',x, '-',y);
                  readln(nombre);
                  TABLEAU_1[x,y] := nombre;
                end;
            end;
    Que tu peux simplifier en supprimant les variable colonne et ligne (qui font double emploi avec x et y, ou inversement tu peux supprimer x et y...) :

    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
    program Project1;
     
    {$APPTYPE CONSOLE}
     
    uses
      SysUtils;
    type
      TMatrice = Array[1..10, 1..10] Of Integer;
     
    var
      matrice:TMatrice;
      ligne, colonne, nombre, grandeur: Integer;
     
    begin
      writeln('Inscrire le nombre de lignes et de colonnes de votre matrice ici');                                                                                       
      readln(grandeur);
      writeln;
      colonne:=0;
      ligne:=0;
      for colonne := 1 to grandeur do
      begin
        for ligne := 1 to grandeur do
        begin
          writeln('Inscrire le nombre de la position:',ligne, '-',colonne);
          readln(nombre);
          matrice[x,y] := nombre;
        end;
      end;
      write(TABLEAU_1[x,y]);
      write('Appuyez sur ENTREE pour quitter...');     
      readln;
    end.
    Voilà, pense aussi à indenter ton code, pour plus de lisibilité

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci wormful_sickfoot, ça marche effectivement....

    Seulement, lorsque ma matrice affiche, il y a des 0 qui ne devrais pas être... Par exemple, pour une matrice de 3X3, il y a :

    0
    12 13 14 0
    34 56 67 0
    98 76 45

    Quelqu'un sait pourquoi??

    Voilà mon code pour afficher les nombre de la matrice:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    (*Afficher la matrice avec les nombres entrés par l'utilisateur*)
     
        for ligne := 1 to grandeur do
        begin
        writeln(matrice[ligne,colonne]);
        for colonne := 1 to grandeur do
        begin
        write(matrice[ligne,colonne],' ');
        end;
        end;
    C'est mon seul petit problème, puisque la matrice inversée fonctionne très bien (à part pour les 0 qui y apparaisse aussi).

    Merci

  4. #4
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 847
    Points
    4 847
    Par défaut
    Pense à indenter ton code, comme te l'a fait remarquer Wormful : c'est beaucoup plus facile de le comprendre car il est plus clair - quand c'est bien fait.


    Pour "débugger" ton programme, tu n'as qu'à suivre pas-à-pas ce qu'il fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for ligne := 1 to grandeur do
       begin
       writeln(matrice[ligne,colonne]);
       for colonne := 1 to grandeur do
          begin
          write(matrice[ligne,colonne],' ');
          end;
       end;
    Je ne vais faire que le premier passage de boucle pour grandeur:=3 :

    1. {ligne := 1}
    écrit la valeur de matrice[1,0] (ligne = 1 et colonne = 0) et revient à la ligne (car 'writeln(...);').

    2. {colonne := 1}
    écrit la valeur de matrice[1,1] sans revenir à la ligne.
    {retour au début de la boucle 'colonne'}

    3. {colonne := 2}
    écrit la valeur de matrice[1,2] sans revenir à la ligne.
    {retour au début de la boucle 'colonne'}

    4. {colonne := 3}
    écrit la valeur de matrice[1,3] sans revenir à la ligne.
    {retour au début de la boucle 'ligne'}


    A toi de voir ce qui ne convient pas dans ce que tu as écrit.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci Loceka...

    J'ai finalement réussi.....

    Et je dois avoué que je n'aurais pas trouvé toute seule (ça doit être ça quand on est débutante )...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche composant silverlight pour afficher une matrice
    Par narglix dans le forum Silverlight
    Réponses: 4
    Dernier message: 08/04/2010, 20h38
  2. Réponses: 13
    Dernier message: 23/12/2004, 18h01
  3. Comment faire pour afficher une image ds une dbgrid
    Par totomaze dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/10/2004, 15h31
  4. [SWING][THREAD]Méthodes pour afficher une Frame
    Par pompidouwa dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 05/05/2004, 10h35
  5. Réponses: 3
    Dernier message: 29/08/2003, 10h57

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