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

 C Discussion :

matrice et case


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Par défaut matrice et case
    Si on a une matrice M[i][j] pour i variant de 0 jusqu'à n-1 et j variant de 1 jusqu'à m-1,s'il y a plus de qautre case qui ont la même valeur, (horizontalement ou vericalement) on met à leurs place la valeur 0.

    par exemple:

    on considére la matrice suivante:

    0 0 0 0 0 0 0 0
    0 0 3 0 1 0 4 5
    1 5 3 6 4 8 5 9
    1 5 3 3 9 8 7 2
    9 8 3 4 2 6 8 2
    9 5 3 2 1 9 8 2

    il devient aprés compilation:

    0 0 0 0 0 0 0 0
    0 0 0 0 1 0 4 5
    1 5 0 6 4 8 5 9
    1 5 0 3 9 8 7 2
    9 8 0 4 2 6 8 2
    9 5 0 2 1 9 8 2

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Et alors ?
    Quelle est la question ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Par défaut
    désolé j'étais pas claire.

    ma question est d'écrire un programme qui fait cela,c'est-à-dire s'il existe plus de quatres coefficients d'une matrice qui sont voisins,soit horizontalement soit verticalement,on remplace leurs valeurs par 0.L'exemple de matrice que j'ai donné en est une illustration.

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    ma question est d'écrire un programme qui fait cela...
    J'avais bien compris mais c'est toi qui dois faire l'exercice. Nous pouvons seulement t'aider à comprendre les points qui te posent problèmes.

    Poste le code que tu as déjà écrit et pose tes questions sur les difficultés que tu rencontres.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Par défaut
    la seule difficulté que je trouve c'est de varier le nombre de case où il y la même valeur.
    par exemple pour 4.pour faire cela sur un ligne horizontale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(i=0;i<n;i++)
    for(j=0;j<m;j++)
    if(A[i][j]=A[i][j+2]=A[i][j+3]=A[i][j+4]
    A[i][j]=0;
    A[i][j+1]=0;
    A[i][j+2]=0;
    A[i][j+3]=0;
    et j'ai fait la même chose ne variant maintenant i de i jusqu'à i+4.

    Donc y'a-t-il une façon de varier même le nombre de case,et de rassembler à la fois la vertical et l'horizontale en seule fonction.

    j'ai pensé à faire une autre fonction qui calcule le nombre de case voisins qui ont la même valeur,et puis si cette somme est supérieur par exemple à 4,je met tt les cases en 0,mais j'ai pas pu la faire.

    merci d'avance pour vous

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    1) Attention à bien vérifier de ne pas déborder de ton tableau. Dans tes conditions if, tu débordes.

    2) Tu confonds les opérateurs = et ==.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Par défaut
    oui,oui pour une matrice A[m][n] le bon code pour la detection de 4 cases horizontales le bon code est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for(i=0;i<n;i++)
    {
         for(j=0;j<m;j++)
             {if(A[i][j]==A[i][j+2]==A[i][j+3]==A[i][j+4])
                     A[i][j]=0;
                     A[i][j+1]=0;
                     A[i][j+2]=0;
                     A[i][j+3]=0;
              }
    }
    Y'en a pas des propositions pour le cas général

  8. #8
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Au lieu d'écrire des suites de tests ou d'affectation, on peut utiliser des boucles for :

    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A[i][j]=0;
    A[i][j+1]=0;
    A[i][j+2]=0;
    A[i][j+3]=0;
    on écrira
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(k = 0; k < 4; ++k) {
        A[i][j+k] = 0;
    }
    A peu près la même chose pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(A[i][j]==A[i][j+2]==A[i][j+3]==A[i][j+4])
    : on compare dans la boucle A[i][j] à A[i][j+k].

  9. #9
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    - Ceci est faux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(A[i][j]==A[i][j+2]==A[i][j+3]==A[i][j+4])
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(A[i][j]==A[i][j+2] && A[i][j]==A[i][j+3]&& A[i][j]==A[i][j+4])
    - Pourquoi y a t-il un A[i][j+4] et pas de A[i][j+1]

    - Qu'est ce qui garantit que A[i][j+2], A[i][j+3] ou A[i][j+4] ne débordent pas du tableau ?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Par défaut
    merci pour vos réponses et votre aide.

    mon objectif est à chaque fois je trouve une alignement d'au moins 4 coefficients d'une matrice ayant la même valeur verticalement ou horizontalement,je leur affecte la valeur 0.

    ce que j'ai fait est le suivant:

    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
    int i,j,k,l,zero;
         zero=0;
     
         for(j=0;j<m;j++){
             for (i=0; i<(n-3); i++){
                 if ( (A[i][j]==A[i+1][j]) && (A[i+1][j]==A[i+2][j]) && (A[i+2][j]==A[i+3][j]) ){
                      A[i][j]=0;
                      A[i+1][j]=0;
                      A[i+2][j]=0;
                      A[i+3][j]=0;
                      zero=zero+4;
     
                   }
             }
         }
     
         for(i=0;i<n;i++){
             for (j=0;j<(m-3);j++){
                 if ( (A[i][j]==A[i][j+1]) && (A[i][j+1]==A[i][j+2]) && (A[i][j+2]==A[i][j+3]) ){
                     A[i][j]=0;
                     A[i][j+1]=0;
                     A[i][j+2]=0;
                     A[i][j+3]=0;
                     zero=zero+4;
     
                    }
             }
         }
    return(zero);
    }
    toutefois ce que j'ai fait n'est valable que pour un alignement de quatre coefficients,je sais pas comment faire pour un alignement de plus de 4.En fait c'est un jeu que je veux programmer qui consiste à supprimer tout alignement vertical ou horizontale de billes,ou à la fois.

    merci encore une fois

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    toutefois ce que j'ai fait n'est valable que pour un alignement de quatre coefficients,je sais pas comment faire pour un alignement de plus de 4.En fait c'est un jeu que je veux programmer qui consiste à supprimer tout alignement vertical ou horizontale de billes,ou à la fois.
    Si tu as X nombres à vérifier, il n'y a rien de miraculeux : il faut passer par un système de boucle.

    Toute cette partie est donc à modifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if ( (A[i][j]==A[i+1][j]) && (A[i+1][j]==A[i+2][j]) && (A[i+2][j]==A[i+3][j]) )
    {
       A[i][j]=0;
       A[i+1][j]=0;
       A[i+2][j]=0;
       A[i+3][j]=0;
    }
    Et la condition du for le plus imbriqué doit aussi être modifiée, elle aussi, pour qu'aucun débordement ne se produise.

    Après, il faudra coder pour vérifier ton tableau horizontalement. Le principe est le même.

  12. #12
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Je crains que ce ne soit un peu plus compliqué que de traiter séparément les cases verticales et les cases horizontales. Prenons cet exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                               - Traitement des -
         origine         horizontales      Verticales
    0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 
    0 3 3 3 3 3 4 5    0 0 0 0 0 0 4 5   0 3 0 3 3 3 4 5 
    1 5 3 6 4 8 5 9    1 5 3 6 4 8 5 9   1 5 0 6 4 8 5 9 
    1 5 3 3 9 8 7 2    1 5 3 3 9 8 7 2   1 5 0 3 9 8 7 2 
    9 8 3 4 2 6 8 2    9 8 3 4 2 6 8 2   9 8 0 4 2 6 8 2 
    9 5 3 2 1 9 8 2    9 5 3 2 1 9 8 2   9 5 0 2 1 9 8 2
                             - Et c'est terminé -
    Le but n'est t-il pas d'avoir ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 4 5 
    1 5 0 6 4 8 5 9 
    1 5 0 3 9 8 7 2 
    9 8 0 4 2 6 8 2 
    9 5 0 2 1 9 8 2

Discussions similaires

  1. matrice de case à cocher
    Par indefini dans le forum Langage
    Réponses: 3
    Dernier message: 04/04/2009, 14h08
  2. copier une case dans une matrice
    Par liverbird dans le forum SL & STL
    Réponses: 3
    Dernier message: 05/02/2008, 17h16
  3. Réponses: 6
    Dernier message: 28/12/2007, 02h04
  4. Compter les voisins d'une case dans une matrice
    Par Vivian Pennel dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 06/10/2007, 17h09
  5. algo sur matrice de case genre "échiquier"
    Par dom_dev dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 14/03/2007, 12h45

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