Précédent   Forum des professionnels en informatique > Autres langages > Algorithmes
Algorithmes Forum d'entraide sur l'algorithmique, l'intelligence artificielle, le traitement numérique d'images et les mathématiques. Avant de poster : Cours d'algorithmique
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/02/2012, 10h37   #1
Membre du Club
 
Avatar de Imène_23
 
Femme
Inscription : avril 2009
Messages : 195
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 25

Informations forums :
Inscription : avril 2009
Messages : 195
Points : 54
Points : 54
Par défaut Extraction d'éléments d'une matrice

Bonjour à tous

je suis en train d'écrire une fonction qui aura par exemple en entrée la matrice X : et en sortie elle me renvoie le vecteur T: donc elle me site les éléments de la matrice.
j'ai fais ca pour commencer:
Code :
1
2
3
4
5
6
7
8
9
10
ini=X(i,j); p=2;  T(1)=X(i,j)
for i=1 to 3
    for j=1 to 3
        if X(i,j) ≠ ini
            T(p)=X(i,j)
            p=p+1;
            ini=X(i,j)
        end
    end
end
cela marche très bien pour les trois premiers éléments mais après ca se répéte
quelqu'un aurais une idée SVP pour régler ca?
Imène_23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 11h19   #2
Membre éclairé
 
Doctorant en informatique
Inscription : juin 2009
Messages : 244
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Doctorant en informatique

Informations forums :
Inscription : juin 2009
Messages : 244
Points : 347
Points : 347
Tu devrais faire un effort de reformulation, car personnellement je ne comprends pas ce qu'il faut faire.

Que prend ta fonction en entrée et que doit-elle retourner ?
Alexis.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 11h21   #3
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 418
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 39
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 418
Points : 14 121
Points : 14 121
Citation:
Envoyé par Alexis.M Voir le message
Tu devrais faire un effort de reformulation, car personnellement je ne comprends pas ce qu'il faut faire.

Que prend ta fonction en entrée et que doit-elle retourner ?
Vu l'allure du code, je suppose qu'elle doit retourner la liste éléments de la matrice, sans doublons.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 12h06   #4
Membre expérimenté
 
Avatar de b_reda31
 
Homme Réda Bentata
Étudiant
Inscription : avril 2007
Messages : 521
Détails du profil
Informations personnelles :
Nom : Homme Réda Bentata
Âge : 28
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2007
Messages : 521
Points : 533
Points : 533
Envoyer un message via MSN à b_reda31
Citation:
Envoyé par Imène_23 Voir le message
Code :
1
2
3
4
5
6
7
8
9
10
ini=X(i,j); p=2;  T(1)=X(i,j)
for i=1 to 3
    for j=1 to 3
        if X(i,j) ≠ ini
            T(p)=X(i,j)
            p=p+1;
            ini=X(i,j)
        end
    end
end
1.à quoi sont initialisé i et j ? Peut être que vous vouliez écrire ini=X(1,1). Bien que cela soit aussi faux.
2.Pourquoi initialiser p à 2, s'il représente l'indice du vecteur de sortie T, vous devriez commencer à partir de la valeur 1, non?
3. Dans la condition

Code :
1
2
3
4
5
if X(i,j) ≠ ini
            T(p)=X(i,j)
            p=p+1;
            ini=X(i,j)
        end
Vous comparer la valeur de X(i,j) par rapport au dernier élément ajouté dans T et non pas par rapport à l'ensemble des éléments contenus dans T ; par conséquent, vous éviter uniquement d'avoir des doublons successifs dans le vecteur T.
__________________
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»
b_reda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 12h55   #5
Membre du Club
 
Avatar de Imène_23
 
Femme
Inscription : avril 2009
Messages : 195
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 25

Informations forums :
Inscription : avril 2009
Messages : 195
Points : 54
Points : 54
oui voilà je cherche à retourner la liste d'éléments de la matrice, sans doublons.

Citation:
Envoyé par b_reda31 Voir le message
1.à quoi sont initialisé i et j ? Peut être que vous vouliez écrire ini=X(1,1). Bien que cela soit aussi faux.
2.Pourquoi initialiser p à 2, s'il représente l'indice du vecteur de sortie T, vous devriez commencer à partir de la valeur 1, non?.
oui au debut c'est X(1,1) et je le met dans le vecteur, forcement c'est le premier élément (T(1)=X(1,1)=1); après je compare avec les autre éléments de la matrice si c'est différent, je l'ajoute au vecteur donc il sera forcement dans T(2) d'où le p=2... et je continue en incrementant le p;
Mon soucis est maintenant que ca se répéte..
j'espère que j'été plus claire.
Imène_23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 13h22   #6
Membre éclairé
 
Doctorant en informatique
Inscription : juin 2009
Messages : 244
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Doctorant en informatique

Informations forums :
Inscription : juin 2009
Messages : 244
Points : 347
Points : 347
De quel langage s'agit-t-il ?
Existe-t-il une notion de liste dans ce langage ?
As-tu des contraintes connus sur les éléments qui peuvent apparaître dans la matrice.

Dans tous les cas ils manque dans ton code un parcours de la liste déjà existante pour savoir si elle contient ou non l'élément courant.

Si tu possèdes une structure de liste, le pseudo code s'écrirait:
Code :
1
2
3
4
5
6
7
8
9
T = liste_vide()
for i=1 to nrows(X)
   for j=1 to ncol(X):
       if not contains(T,X(i,j)) 
            append(T,X(i,j))
       endif
   endfor
endfor

Si tu dois impérativement t'en sortir avec un tableau et que tu ne connais pas à l'avance quels sont les éléments que ta matrice doit contenir tu dois parcourir a chaque fois ton tableau pour t'assurer que l'élément courant n'est pas présent:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
T(1) = X(1,1); p = 1
for i = 1 to 3
   for j = 1 to 3 
      e = X(i,j)
      present = False
      for k = 1 to p 
         if T(k) == e
             present = True
             break
         endif
      if not e :
          p = p+1
          T(p) = e
Pour des matrices 3x3 c'est acceptable, avec plus d'éléments il faudrait commencer a songer a des stratégie de recherche plus évoluées.
Alexis.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2012, 16h42   #7
Invité de passage
 
Homme Seydinan Oumar Fadiga
Étudiant
Inscription : février 2012
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Seydinan Oumar Fadiga
Localisation : Côte d'Ivoire

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

Informations forums :
Inscription : février 2012
Messages : 2
Points : 3
Points : 3
j'ai ajouté une variable b
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Ini ← x(I;j); p←2; T(1) ←x(i;j);
pour i←1 à 3 faire
      pour j←1 à 3 faire
          si x(i;j) ≠ ini alors
             T(p) ←x(x;j);
              p←p-1;
             pour b←1 à p faire
                si T(b) = ini  alors
                     T(b) ← ‘’  ‘’ ;
               Finsi
             Finpour
             P←p+2 ;
             Ini ← x(i ;j) ;
          Finsi
     Finpour
Finpour
seydinan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2012, 23h52   #8
Invité de passage
 
Homme Seydinan Oumar Fadiga
Étudiant
Inscription : février 2012
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Seydinan Oumar Fadiga
Localisation : Côte d'Ivoire

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

Informations forums :
Inscription : février 2012
Messages : 2
Points : 3
Points : 3
Par défaut correctif à ma précédente publication

Au lieu de [si T(b) = ini alors] dans le code c'est plutôt
si T(b) = x(i;j) alors
seydinan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 22h57   #9
Futur Membre du Club
 
Inscription : décembre 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 12
Points : 16
Points : 16
C'est quel langage que vous utilisez ici? il faut voir avec le structures des listes et des tableaux du langages utilisé, ça pourrait rendre le calcul plus facile, et plus rapide. Je ne comprends pas très bien votre algorithme, l'idée n'est pas claire mais si on galère déjà avec une matrice 3X3, comment ça va être avec une plus grande matrice?!
vol-de-mort est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 10h44   #10
Membre du Club
 
Avatar de Imène_23
 
Femme
Inscription : avril 2009
Messages : 195
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 25

Informations forums :
Inscription : avril 2009
Messages : 195
Points : 54
Points : 54
Bonjour à tous

Merci à chacun de vous d'avoir pris le temps de me répondre. j'ai enfin réussi à le faire, mais le plus drôle dans l'histoire c'est que je travaille avec Matlab et qu'il fallait juste utiliser la fonction

Merci encore...
Imène_23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h16.


 
 
 
 
Partenaires

Hébergement Web