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 :

[TP 7] Matrice dans matrice


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 2
    Par défaut [TP 7] Matrice dans matrice
    Bonjour à tous je débute en tp7 et j'ai un petit problème:

    je dois créer un progr en pascal qui permet de voir si une matrice m2
    (2X2) est présente dans une matrice m1 (5X5).

    Merci d'avance pour votre aide.

    Kedink.

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Qu'est ce que tu as déjà fait ? Quel est exactement ton problème ?

    Car on est pas ici pour te faire tes exercices

  3. #3
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    bonjour
    Citation Envoyé par kedink
    je dois créer un progr.....................................
    Merci d'avance pour votre aide.
    Genial c'est deja dit montre ce que tu as deja fait,
    j'espere que t'a deja un algo pour commencer a programmer sinon
    bon est ce que tu sais deja par ou commencer et ce que tu compte faire?
    @+

  4. #4
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 2
    Par défaut voilà la 1ère version
    En fait le problème que j'ai avec cette version , est qu'elle n'est pas très belle visuellement , et donc le programme n'est pas sympa à l'utilisation .
    Je voudrais apporter qlq modification qui rendrai le programme plus cool à l'utilisation. Merci...

    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
    program Matrice_dans_matrice ;
     
            uses crt;
            const
                 a=4 ;
                 b=4 ;
                 d=2 ;
                 e=2 ;
                 f=2 ;
            type matrice=array[0..a,0..b]of Integer;
                 matricePat=array[0..d,0..e]of Integer;
                 matriceIncl=array[0..a*b,0..f]of integer;
            var mat:matrice;
                pattern:matricePat;
                inclusions:matriceIncl;
                i,j:integer;
     
     
    procedure matrice1(Var mat:matrice);
      var m,n:integer;
    begin
         for m:=1 to a do
                       for n:=1 to b do
                                     begin
                                     write('entrer un nombre entre 1 et 4 : ');
                                     readln(mat[m][n]);
                                     end;
    end;
     
     
    procedure matrice2(Var pattern:matricePat);
      var l,c:integer;
    begin
         for l:=1 to d do
                       for c:=1 to e do
                                     begin
                                     write('entrer un nombre entre 1 et 2 : ');
                                     readln(pattern[l][c]);
                                     end;
    end;
     
     
    Function matrice3(mat:matrice;pattern:matricePat;inclusions:matriceIncl):integer;
      var m,n,l,c,e,f:integer;
    begin
         e:=1;
         f:=1;
         l:=1;
         c:=1;
         for m:=1 to a do
                       for n:=1 to b do
                                     if(mat[m,n]=pattern[l,c])and
                                      (mat[m+1,n]=pattern[l+1,c])and
                                      (mat[m,n+1]=pattern[l,c+1])and
                                      (mat[m+1,n+1]=pattern[l+1,c+1])then
                                                                     begin
                                                                     inclusions[e,f]:=m;
                                                                     inclusions[e+1,f]:=n;
                                                                     f:=f+1 ;
                                                                     end;
      if(mat[d,n]=pattern[l,c])and
        (mat[d,n+1]=pattern[l,c+1])and
        (mat[1,n]=pattern[l+1,c])and
        (mat[1,n+1]=pattern[l+1,c+1])then
                                     begin
                                     inclusions[e,f]:=d;
                                     inclusions[e+1,f]:=n;
                                     f:=f+1;
                                     end;
      if(mat[m,e]=pattern[l,c])and
        (mat[m+1,e]=pattern[l+1,c])and
        (mat[m,1]=pattern[l,c+1] )and
        (mat[m+1,1]=pattern[l+1,c+1]) then
                                      begin
                                      inclusions[e,f]:=m;
                                      inclusions[e+1,f]:=e;
                                      f:=f+1;
                                      end;
      matrice3:=f-1;
    end;
     
     
    begin
         clrscr;
         matrice1(mat);
         matrice2(pattern);
         writeln('Le nombre de couples-position de pattern dans mat sont :',matrice3(mat,pattern,inclusions));
         for i:=1 to f do
                       begin
                       for j:=1 to (d*e) do
                                         begin
                                         write (inclusions[i][j],' ',inclusions[i+1][j]);
                                         writeln(' ');
                                         end;
                       end;
         writeln(' ');
         readln; readln;
    end.


    Ps : Si vous voyez des erreurs , merci de me le faire savoir...

  5. #5
    Membre Expert
    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
    Par défaut
    Le programme que tu as fait ne correspond pas tout à fait à l'énoncé que tu as écrit :
    -> la matrice 'Pattern' est une matrice 3x3
    -> tu ne testes pas si elle est présente dans une matrice 5x5 mais combien de fois elle est présente et où. Donc tu en fait plus que l'énoncé de départ (c'est pas forcément un mal mais ça complique l'exercice).

    Il serait bien aussi que tes variables globales aient des noms plus parlant...

    Pour que ce soit plus joli (déjà indente avec moins d'espaces, ce sera plus lisible), écrit une fonction qui teste si ta matrice pattern est présente dans une sous-matrice de la matrice initiale. Fait aussi en sorte que cette fonction te permette de résoudre un problème plus global et ne se limite pas à une matrice 2x2, tant qu'à faire.

    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
    function contient_matrice(pattern, sousMatrice : MatricePat; ligne, colonne : integer) : boolean;
    var (* on suppose que nbLignesDansPattern et nbColonnesDansPattern sont des variables globales *)
      i, j : integer;
      contenue : boolean;
    begin
      contenue := true;
      for i :=0 to nbLignesDansPattern do (* j'ai fait commencer i à 0 parce que c'était comme ça dans ton programme, mais on commence généralement à 1 en Pascal *)
      begin
        for j := 0 to nbColonnesDansPattern do (* idem, ce qui veut dire que nbLignesDansPattern et nbColonnesDansPattern sont en fait le nb de lignes et de colonnes - 1 *)
        begin
          if (pattern[i,j] <> sousMatrice[ligne+i, colonne+j])
            contenue := false; (* on ne teste que le cas d'erreur *)
        end;
      end;
     
      (* resultat : *)
      contient_matrice := contenue;
    end;
    Bon, c'est juste un exemple. On peut bien sûr optimiser ça en utilisant des while à la place des for. Il faut aussi faire des tests sur la position de (ligne, colonne) dans la matrice avant d'appeler cette fonction, sinon ça plante.

  6. #6
    Membre expérimenté 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
    Par défaut
    Bonjour,
    La sous matrice est une matrice 2*2 et la matrice pattern est une matrice 5*5
    Il y aura donc un problème de dimension avec le code de Loceka.
    De plus le bon algo et celui qui vérifiera tout les carrés 2*2 qu’il y a dans pattern.

    Voici un exemple de programme fonctionnel :
    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
    var
      mat55         : array [1..5,1..5] of INTEGER;
      mat22         : array [1..2,1..2] of INTEGER;
      i,j           ,
      nb_mat_detect : CARDINAL;
     
    begin
      randomize;
      writeln('Matrice 5*5');
      for i:= 1 to 5 do
      begin
        for j:= 1 to 5 do
        begin
          mat55[i,j]:= random(2);
          write(mat55[i,j]:3);
        end;
        writeln;
      end;
     
      writeln('Matrice 2*2');
      for i:= 1 to 2 do
      begin
        for j:= 1 to 2 do
        begin
          mat22[i,j]:= random(2);
          write(mat22[i,j]:3);
        end;
        writeln;
      end;
     
    nb_mat_detect:= 0;
     
    for i:=1 to 4 do
      for j:=1 to 4 do
        if mat55[j,i] = mat22[1,1] then
          if mat55[succ(j),i] = mat22[2,1] then
            if mat55[succ(j),succ(i)] = mat22[2,2] then
              if mat55[j,succ(i)] = mat22[1,2] then
                inc(nb_mat_detect);
     
      writeln('Il y a ',nb_mat_detect,'''Matrice 2*2'' dans ''Matrice 5*5''');
    end.

Discussions similaires

  1. nom matrice dans matrice
    Par Ni_Dieux_Ni_Maitre dans le forum MATLAB
    Réponses: 3
    Dernier message: 05/07/2010, 21h53
  2. Matrice de Matrice dans un tableau de taille dynamique
    Par J_help dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 14/04/2010, 22h03
  3. [VBA-E] ComboBox en cascade avec correspondance dans matrice
    Par ViperSpy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2006, 17h01
  4. [Numarray]Coller une matrice dans une plus grande.
    Par parp1 dans le forum Calcul scientifique
    Réponses: 9
    Dernier message: 27/04/2006, 16h48
  5. enregistrement de matrices dans une base
    Par funkadelic dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 02/06/2005, 17h17

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