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

Turbo Pascal Discussion :

Tri de matrice sans décomposition [Turbo Pascal]


Sujet :

Turbo Pascal

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Par défaut Tri de matrice sans décomposition
    Bonjour, je cherche à trier une matrice m de dimension [1..a, 1..b] d'entiers.
    Mais il apparaît qu'il y a une erreur.
    Voilà le code :
    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
    procedure tri ( var m : mat; a, b : integer );
    var
    v1, v2 : boolean;
    begin
    repeat
    	v1 := false;
    	v2 := false;
    	for l := 1 to a do
    		begin
    			for c := 2 to b do
    				if m[l, c] < m[l, c-1] then
    					begin
    						permut ( m[l, c], m[l, c-1]);
    						v1 := true;
    					end;
    		end;
    	for l := 2 to a do
    		if m[l-1, b] > m[l, 1] then
    			begin
    				permut ( m[l-1, b], m[l, 1]);
    				v2 := true;
    			end;
    until
    	(not (v1)) and (not(v2));
    end;

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Difficile de chercher une erreur sans avoir le programme en entier. Quel genre d'erreur d'ailleurs ? Sois un peu plus explicite !

    Et utilise les balises appropriées pour poster ton code, en te servant du bouton marqué #. Sans parler de l'indentation ! (Tu peux regarder d'autres discussions du forum pour voir comment le code est présenté.)

    A première vue, il y a déjà une petite chose à corriger. Les variables "l" et "c" devraient plutôt être déclarées à l'intérieur de la procédure, au même endroit que "V1" et "V2".

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Par défaut
    bonjour!

    bon desolé pour la forme du post, c'est ma premiére fois, en tout cas, les variables l et c sont déclarés déja avec les variables du program principale, l'erreur qu'aucune affichage se fait, mais la faute n'est pas au niveau du procedure affichage..

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Encore une fois, il est impossible d'examiner ton programme sans l'avoir en entier. Qu'est-ce que le type "mat" ? Qu'y a-t-il dans la procedure "permut" ? Avec quelles valeurs la procedure "tri" est-elle appelée depuis le programme principal ? Si on ne sait pas tout cela, on ne peut pas chercher ton erreur.

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Hoe,
    Citation Envoyé par abdou monta Voir le message
    bonjour!

    bon desolé pour la forme du post, c'est ma premiére fois, en tout cas, les variables l et c sont déclarés déja avec les variables du program principale, l'erreur qu'aucune affichage se fait, mais la faute n'est pas au niveau du procedure affichage..
    En principe, un compilateur Pascal refuse d'utiliser des variables globales comme compteurs de boucle, qui doivent être locaux à la fonction.

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Par défaut
    résolu
    merci tt le monde

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Par défaut
    Citation Envoyé par droggo Voir le message
    Hoe,

    En principe, un compilateur Pascal refuse d'utiliser des variables globales comme compteurs de boucle, qui doivent être locaux à la fonction.
    non sa marche

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Hoe,
    Citation Envoyé par abdou monta Voir le message
    non sa marche
    J'avoue que ça m'étonne, en particulier avec TP.

  9. #9
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Par défaut
    Citation Envoyé par droggo Voir le message
    Hoe,

    J'avoue que ça m'étonne, en particulier avec TP.
    oupps, sa marche qu'avec les fonctions, pas avec les procedures merci pour votre remarque, respect!

  10. #10
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Par défaut
    voici le code entier

    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
    program tri_mat;
    uses wincrt;
    type mat = array[1..10, 1..10]of integer;
    var t : mat; x, y : integer;
    procedure lecture (var x, y : integer);
    begin
         repeat
               write('x= ');        readln(x);
         until
               x in [1..10];
         repeat
               write('y= ');        readln(y);
         until
               y in [1..10];
    end;
    procedure remplire (var t : mat; x, y : integer);
    var i , j : integer;
    begin
         for i := 1 to y do
             for j := 1 to x do
                 begin
                      write('t[', j, ',', i, ']= ');        readln(t[j,i]);
                 end;
    end;
    procedure permut ( var a, b : integer);
    var aux : integer;
    begin
         aux := a;
         a := b;
         b := aux;
    end;
    procedure tri ( var t : mat; x, y : integer);
    var i , j : integer; verif1, verif2 : boolean;
    begin
    repeat
         verif2 := true;
         verif1 := true;
         for i := 1 to y-1 do
                if t[x,i] < t[1, i+1] then
                   begin
                        permut (t[x,i], t[1,i+1]);
                        verif2 := false;
                   end;
         for j := 1 to y do
             begin
                   for i := 1 to x-1 do
                       if t[i,j] < t[i+1,j] then
                          begin
                               permut(t[i,j], t[i+1,j]);
                               verif1 := false;
                          end;
             end;
    until
          (verif1 = true) and (verif2 = true);
    end;
    procedure affiche (t: mat; x, y: integer);
    var i , j : integer;
    begin
    for j := 1 to y do
         for i := 1 to x do
         begin
             write(' ', t[i,j], ' ');
             if i = x then
                writeln(' ');
         end;
    end;
    begin
    lecture(x, y);
    writeln('x= ', x, ' y= ', y); 
    remplire(t, x, y);
    writeln(' ');
    writeln('la matrice donnée');
    affiche(t, x, y);
    tri(t,x,y);
    writeln('la matrice triée');
    affiche(t, x, y);
    end.

  11. #11
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Joa,

    Je n'ai pas lu ton code, mais juste une petite remarque sur la mise en forme :

    - bien indenter, de manière uniforme

    - aérer, en ajoutant des lignes vides pour bien séparer visuellement les blocs logiques

    - comme les noms de fonctions, procédures, variables ... sont explicites, on se passe bien de commentaires (ça, c'est un bon point).

    Voici un exemple de mise en forme de ton code :
    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
    program tri_mat;
     
    uses
      wincrt;
     
    type
      mat = array[1..10, 1..10] of integer;
    var
      t: mat;
      x, y: integer;
     
      procedure lecture(var x, y: integer);
      begin
        repeat
          Write('x= ');
          readln(x);
        until x in [1..10];
        repeat
          Write('y= ');
          readln(y);
        until y in [1..10];
      end;
     
      procedure remplire(var t: mat; x, y: integer);
      var
        i, j: integer;
      begin
        for i := 1 to y do
          for j := 1 to x do
          begin
            Write('t[', j, ',', i, ']= ');
            readln(t[j, i]);
          end;
      end;
     
      procedure permut(var a, b: integer);
      var
        aux: integer;
      begin
        aux := a;
        a := b;
        b := aux;
      end;
     
      procedure tri(var t: mat; x, y: integer);
      var
        i, j: integer;
        verif1, verif2: boolean;
      begin
        repeat
          verif2 := True;
          verif1 := True;
          for i := 1 to y - 1 do
            if t[x, i] < t[1, i + 1] then
            begin
              permut(t[x, i], t[1, i + 1]);
              verif2 := False;
            end;
          for j := 1 to y do
          begin
            for i := 1 to x - 1 do
              if t[i, j] < t[i + 1, j] then
              begin
                permut(t[i, j], t[i + 1, j]);
                verif1 := False;
              end;
          end;
        until (verif1 = True) and (verif2 = True);
      end;
     
      procedure affiche(t: mat; x, y: integer);
      var
        i, j: integer;
      begin
        for j := 1 to y do
          for i := 1 to x do
          begin
            Write(' ', t[i, j], ' ');
            if i = x then
              writeln(' ');
          end;
      end;
     
    begin
      lecture(x, y);
      writeln('x= ', x, ' y= ', y);
      remplire(t, x, y);
      writeln(' ');
      writeln('la matrice donnée');
      affiche(t, x, y);
      tri(t, x, y);
      writeln('la matrice triée');
      affiche(t, x, y);
    end.
    Bonne continuation.

  12. #12
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 71
    Par défaut
    !!!

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

Discussions similaires

  1. Réécrire dans une matrice sans l'effacer
    Par jmbonnaz dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/07/2007, 19h45
  2. Comparaison de deux matrices sans boucle for
    Par zicos dans le forum MATLAB
    Réponses: 8
    Dernier message: 04/05/2007, 18h16
  3. Requête récalcitrante avec un tri par COUNT sans GROUP BY
    Par Ancalagon77 dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/10/2006, 14h27
  4. Réponses: 3
    Dernier message: 08/08/2005, 11h24
  5. tri a bulle sans les doublons
    Par comme de bien entendu dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 10/03/2003, 16h29

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