Elimination de repetition

mb42 Messages postés 553 Statut Membre -  
tarek_dotzero Messages postés 834 Statut Membre -
Bonjour,

j'ai un question concernant un programme qui dois eliminer tous repititions et les remplacer par "0"

a titre d'exemple si une matrice de cette forme
2 4 5
6 2 5
2 8 9

le programme doit éliminer tous les répétitions c'est à dire le résultat du programme doit être une matrice où chaque élément est présent une seule fois,

conserve la première valeur et remplacer les autre répétitions par "0"

c'est à dire la matrice devienne 2 4 5
6 0 0
0 8 9

povez m'aider
Configuration: Windows XP
Firefox 3.0.14

7 réponses

  1. Dynamix Messages postés 206 Statut Membre 76
     
    Tu fais une méthode estPresent(n) pour savoir si un entier est présent dans ta matrice.
    Ensuite tu pars de la fin de ta matrice et tu parcours tous les éléments.
    Pour chaque élément tu parcours tous les éléments se trouvant avant, si alors tu trouves un élément égal à l'élément parcouru en cours alors tu mets un zéro.

    Mais c'est qu'une proposition doit y avoir plus simple.

    (J'ai pas été très clair peut être...)
    0
  2. loupius Messages postés 789 Statut Membre 148
     
    Le plus simple (seulement 2 parcours de la matrice et un tableau de 10 booléens (tous faux au départ)) :
    - 1er parcours-> booléen[valeur de l'élément de la matrice] = vrai,
    - 2ème parcours-> un seul test: si booléen[valeur de l'élément de la matrice] est vrai, alors valeur de l'élément de la matrice vaut zéro.
    On peut faire un seul parcours mais c'est un peu plus complexe.
    Bonne continuation.
    0
  3. mb42 Messages postés 553 Statut Membre 7
     
    tout d'abord les valeur ne son pas de 0-->9

    il peuvent etre 400,66,8.....

    et la solution ne dois pas contenir des methodes car pour le moment on traite juste la matrice avec des parcours simple

    avec l'utilisations des structures repetetives seulement (" for,while,do while)

    pouver m'aidez SVP
    0
  4. tarek_dotzero Messages postés 834 Statut Membre 122
     
    Avec les conditions que tu pause là, cette solution parait très débile, mais elle doit marcher:

    
    x = 3 'Ou une autre taille (nombres colonnes)
    y = 3 'Ou une autre taille (nombres lignes)
    
    tableau(x, y) 'La matrice
    
    for i = 1 to x
       for j = 1 to y
           if (i > 1) or (j>1) then
    
               ' La case précedente:
    
               if (i = 1) then 
                  tempI = x
                  tempJ = j - 1
               else if (j = 1) then 
                  tempJ = y
                  tempI = i - 1
               else
                   tempI = i - 1
                   tempJ = j - 1
               end if
                
               for m = 1 to (tempI)
                   for n = 1 to (tempJ)
    
                          if(tableau(m, n) = tableau(i, j)) then tableau(i, j) = 0
                   next
               next
    
            end if
          next
    next
    
    
    0
    1. tarek_dotzero Messages postés 834 Statut Membre 122
       
      J'ai fait une erreur, le parcours (tempI, tempJ) est plus compliqué de ce que j'ai pensé.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mb42 Messages postés 553 Statut Membre 7
     
    je ne connait pas ce language

    je veux juste language c

    je veux essayer de le traduire en c
    0
  7. tarek_dotzero Messages postés 834 Statut Membre 122
     
    C'est le .vbs, je pense qu'il est très compréhensible, c'est pratiquement de l'anglais et c'est pour ça que je l'ai mis. Malheureusement, j'ai de compilateur c installé pour le moment.

    Bon Courage.
    0
  8. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
     
    l'idée générale :

    avoir un tableau (disons : "DejaFait") qui contiendra les valeurs déjà utilisées. Au départ il est vide (ou plutot il n'y a que des zéros partout). Il faut que ce tableau soit aussi grand que le nombre de valeurs dans la matrice (9 pour une matrice 3x3).

    Tu gardes trace du nombre d'élément déjà utilisé (disons N). au début il est zéro.

    Ensuite tu commences à boucler sur chaque élément de la matrice, dans l'ordre que tu le souhaites.

    Pour chaque élément de la matrice il faut faire ceci :
    Chercher avec une boucle allant de 0 à N-1 dans les valeurs de "DejaFait" pour voir si l'élément que tu regardes est déjà dedans.
    Si pendant cette recherche tu tombes dessus, alors tu met 0 la place dans la matrice.
    Si par contre il n'est pas deja dans la liste DejaFait, alors tu l'ajoutes dans DejaFait[N], et ensuite tu augmentes
    N de 1.
    0