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

Algorithmes et structures de données Discussion :

Comparaison de nombre dans un tableau.


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Comparaison de nombre dans un tableau.
    Quelqu'un peut t'il m'aider sur cet algo ?

    Un tableau contient des nombres : ex 21 15 15 15 23 23 18 21 21 21 21
    J'appelle un plateau une sous séquence de nombres identiques qui se suivent.

    - Je désire connaitre la liste des nombres de chacun des plateaux de la séquence/
    Ici : 21 15 23 18 21
    - la longueur du plateau le plus long : ici 4
    - la valeur du (ou des) plateaux le plus long : 21

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Salut

    as tu deja des idées sur le problème?

    As tu deja quelque chose, meme si ca ne marche pas?

    Essaie de reflechir un peu et si vraiment t'y arrives pas quelqu'un (peut etre moi...) t'expliquera comment on peut faire

    @++

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Oui j'ai des idées (mais c'est pas gagné!), je vais essayer de les poster dans la soirée. A ++ Merci

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Ok...

    essaie de nous dire ce que tu as deja fait, qu'on puisse t'aiguiller ;)

    ++

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    T() : un nombre
    i : un nombre
    n : un nombre
    longueur : un nombre

    n = lire "nombre de valeurs ?"

    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
    T(n)
    i = 1 To n
    T(i) = "valeur ?"
    Next i
     
    If T(i)=T(i+1) Then
    	écrire "les nombres de chaque plateau sont :" 
    	ecrire T(i)
    If End 
     
    If T(i)=T(i+1)...=T(i+n)  Then
    	i+n=longeur
    	écrire "la longueur du plateau le plus long est" :
    	écrire longueur
    If End 
     
    If longeur=?? Then 
    	écrire "les valeurs des plateaux ayant la même longueur est :" 
    	écrire T(i)=longeur
    [Balises code ajoutées par King Kaiser]

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    En fait je vois bien qu'il faut comparer les nombres dans le tableau. Mais je ne vois pas comment. C'est bien là mon problème. Et je bloque!! Je n'ai pas fait beaucoup de programmes avec un tableau dynamique. Mon objectif est de faire un programme en Visual Basic après. Mais, sans une aide extérieure, je suis vraiment mal barré! Je compte sur vous ... SOS

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Deja je ne pense pas que T() soit un nombre....

    N'est ce pas plutot un tableau de nombres??

    Ok pour la première parite, tu entres toutes tes valeurs dans le tableau

    Mais pour le reste... comment comptes tu réaliser concrètement ce que tu écris?

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Oui c un tableau. Ms je l'ai défini comme un nombre car a l'intérieur, je vais mettre des nombres. En VB, je fais un Redim T(i).

    C'est justement le reste qui me pose problème. Je sais que la meilleure solution pour parvenir a faire cet algo, c'est de passer par un tableau dynamique. La 1st partie, y'a pas de soucis, je pense que c'est cela.

    La suite est plus problématique car il faut résonner avec la position des nombres présents dans le tableau et non pas les nombres concrets.

    J'ai oublié de rajouter "next i" en plus a la fin des conditions.

    Qu'est ce que t'en penses ? Tu n'as pas de pistes ?

    C'est vraiment pas faute de chercher, je bloque vraiment. Si ça ne tenait qu'a moi je ne passerais pas par un forum et ferais mes programmes seul comme un grand.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Bon pour retourner les nombres qui sont présents dans ton tableau, il y a la technique suivante:

    -Tu définis un autre tableau
    -Tu parcours le premier et pour chaque nombre, tu regardes s'il est deja présent dans l'autre
    -> s'il est présent tu passe au nombre suivant du tableau
    -> sinon tu ajoutes ce nombre à ton deuxième tableau

    Tu continues jusqu'à la fin de ton premier tableau, et tu renvoies le 2ème, qui contient les nombres de ton tableau de départ

    Ca va deja pour la première partie?

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Je vais essayé ça demain. La, je suis bien trop fatigué. Je tenterais de suivre tes conseils et je le mettrais sur le forum. Comme ça si ta le temps, tu pourras me dire si ça va ou non ... merci beaucoup et bonne soirée

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Voilà ce que j'ai fait en VB. Mais ça ne marche pas. Je n'ai pas compris ce que tu voulais dire par

    "Tu parcours le premier et pour chaque nombre, tu regardes s'il est deja présent dans l'autre
    -> s'il est présent tu passe au nombre suivant du tableau
    -> sinon tu ajoutes ce nombre à ton deuxième tableau "

    Ms si tu connais le réponse, c'est sympa de me la donner. Car j'ai beau me retourner le cerveau, vu mes faibles connaissance en algo et VB j'ai une probabilité de trouver très faible. Si tu me propose un modèle, je pourrais essayer de comprendre. Pr l'instant je n'ai réalisé que 5 programmes dans ma carrière d'informaticien du dimanche. Je suis vraiment un débutant. Est ce que tu es d'accord pr me faire l'algo ? Ce serait vraiment très cool et charitable.

    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
     
    Sub saisie_tab()
     
    Dim T() As Integer
    Dim i As Integer
    Dim n As Integer
     
    n = InputBox("nombre de valeurs ?")
    ReDim T(n)
    For i = 1 To n
    T(i) = InputBox("valeur ?")
    Next i
     
    End Sub
     
    Sub valeur_de_chaque_plateau()
     
    Dim T() As Integer
    Dim i As Integer
    Dim n As Integer
    Dim j As Integer
    Dim valeur_nombre As Integer
     
     
    ReDim T(i)
    For i = 1 To n
        If T(i) = T(i + 1) Then
                T(i) = valeur_nombre
        End If
    Next i
     
    MsgBox ("les nombres de chaque plateau sont" & ":" & valeur_nombre)
     
    End Sub
    [/quote]

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Salut

    bon normalement personne ici ne doit te faire l'algo....

    Si vraiment tu as envie de progresser (et je pense que c'est le cas) il te faut suivre les pistes qu'on te donne et creuser un pti peu....

    Ce que je voulais dire, c'etait:
    - tu as un tableau (T1) de taille n, dans lequel se trouve une séquence de nombres
    - tu définis un tableau T2, qui va contenir, à la fin, les différents nombres présents dans T1
    - apres tu appliques l'algo suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    POUR i = 1 jusqu'à n FAIRE
    (
         Nombre <- T1(i)
         SI Nombre n'est pas présent dans T2, ALORS ajouter Nombre dans T2
    ) FIN POUR

    Bon, maintenant il faut un algo afin de voir si un nombre est présent dans T2 ou pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Nombre <- élement à rechercher
    n <- Longueur de T2
    i <- 1
    Trouvé = Faux   /* Trouvé = Vrai si l'élément a été trouvé */
     
    TANT QUE ((i <= n) & (Trouvé = Faux))
    (
         SI Nombre = T2(i) ALORS Trouvé <- Vrai
         i <- i + 1
    ) FIN TANT QUE
    A ce stade, si Trouvé = Vrai alors ton élément est présent, sinon il n'est pas ds T2


    Voila essaie de regarder un peu ca.....

    @++

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    J'avoue que je n'ai pas tt compris. Je laisse tomber pr le moment cet algo. J'attend d'être plus calé pour le faire. J'ai touché a l'autre programme sur les chiffres d'affaire. Il me semble plus accessible. Peux tu passer le voir stp.

  14. #14
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Une autre solution est de trier ton tableau. Ensuite, tu n'as plus qu'à le parcourir en gardant les valeurs intéressantes :
    longueur_du_plateau_maximum
    indice_de_parcours_du_tableau
    valeur_de_l'indice_maximum
    ...

    Comme ca (outre le tri), tu ne parcours on tableau qu'une seule fois.

    Méthode optimisée : tu récupères ces valeurs pendant le tri, ce qui t'enlève un parcours de tableau. Attention, c'est un peu plus complexe, donc je te conseillerait de ne le réaliser que si tu as déjà réussi à résoudre ton problème.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  15. #15
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 39
    Points : 37
    Points
    37
    Par défaut
    Pas besoin de trier !
    Il suffit de parcourir le tableau une seule fois en comparant chaque élément avec le précédent uniquement.

    S'il il est égal : le plateau commencé (sa longueur) augmente de 1
    sinon, c'est le début d'un nouveau plateau : l'ancien est fini (exception pour le premier indice) donc on regarde si ce plateau qui vient de finir est le plus long que le plus long qu'on a gardé. pour le nouveau plateau qui commence, on enrégiste son début dans un vecteur et on initiallise sa longueur à 1.

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Je commence a comprendre (un peu) . Comment fait on pour trier les valeurs de 2 tableaux (par ordre croissant par exemple) et de faire fusionner le tout dans un autre tableau ?
    Là aussi il faut comparer les indices des 2 tableaux 2 a 2. Concrètement cela donnerait cela ? C'est un peu la même chose non ?

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 136
    Points : 133
    Points
    133
    Par défaut
    bonjour

    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
     
    t[n]                                            //tableau à traiter
     
    valeur_du_plus_long = t[0]      //valeur du plus long plateau
    plus_long = 1                           //nombre d'éléments du plus long plateau
    courant = 1                              //nombre d'éléments du plateau courant
     
    i = 0
    tant que i < (n - 1)
        si t[i] == t[i + 1];
            courant++
            si courant >= plus_long
               plus_long =  courant
               valeur_du_plus_long = t[i]  
            fsi
        sinon
            courant = 1
        fsi
    fin tant que
    voilà

  18. #18
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Pour trier deux tableaux, et regrouper le résultat dans un autre tableau, tu n'as pas beaucoup le choix :
    Soit tu construit d'abord le nouveau tableau, puis tu le tries.
    Soit tu tries d'abord les tableaux, puis tu construits ensuite le nouveau tableau en respectant le tri que tu veins de faire.

    Solution 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    tab1[n];tab2[m]; tab_res[n+m];
    Pour i = 1 à n
      tab_res[i] = tab1[i];
    FinPour
     
    pour j = 1 à m
      tab_res[n+j] = tab2[j];
    FinPour
     
    trier (tab_res);
    Solution 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    tab1[n];tab2[m]; tab_res[n+m];
    trier (tab1);
    trier (tab2);
     
    Si (tab1[i] < tab2[j])
      tab_res [i+j-1] = tab1[i];
      i = i+1;
    sinon
      tab_res [i+j-1] = tab2[j];
      j = j+1;
    FinSi
    Attention, je n'ai pas vérifié ces indications, donc je ne garantie rien (surtout au niveau des indices des tableaux)
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  19. #19
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 82
    Points
    82
    Par défaut
    Salut,

    Etant le 29 avril et n'ayant pas encore vu te TAG resolu voici un algo qui te permet de réaliser à peu pres ce que tu demandes.

    "A peu pres" car comme il est dit plus haut , il faut que tu trouves toi meme la solution.
    A partir de l'algo que je te donne tu n'auras pas grand chose à 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
    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
     
     		tab1 : Tableau d'entiers		
    		i : Entier
    		taille: Entier		
    		echange : Entier
    		nbrOccurence : Entier
    		nbrMaxOccurrence : Entier
    		indexOfMaxElement : Entier
    		elementCourrant : Entier
    		inverstion : Booleen
     
     
    		//On initialise les variables
    		tab1 := { 21, 15, 15, 15, 23, 23, 18, 21, 21, 21, 21 };
    		taille := 11;
    		i :=0;
    		inversion := false;
    		echange := 0;		
    		nbrOccurence := 1;
    		nbrMaxOccurrence := 0;
    		indexOfMaxElement := 0;
     
    		//Trie (à bulle) du tableau (ordre croissant) 
    		Faire		
    			inversion := false
    			Pour i de 0 à taille - 1	
    				Si (tab1[i] > tab1[i + 1]) ALORS
    				Debut					
    					echange := tab1[i];
    					tab1[i] := tab1[i + 1];
    					tab1[i + 1] := echange;
    					inversion := true;
    				Fin Si
    			Fin Pour
    		Fin
    		Tant que (inversion);	
     
    		//On cherche combien de fois est present chaque element
     
    	    Pour i de 0 à taille - 1	    	
    	    	elementCourrant := tab1[i];
    	    	//Tant que l'element courrant est egale à l'element suivant
    	    	//On incremente le nombre d'occurence de celui
    	    	Si (elementCourrant = tab1[i+1]) Alors
    	    		nbrOccurence := nbrOccurence+1;
    	    	Sinon
    	    	    //On a trouve un nouvelle element
    	    		//Si le nombre d'occurence de l'element courrant est superieur au nombre maximum d'occurence
    	    		// de l'element indeOfMaxElement
    	    		// alors l'element courrant devient celui qui a le plus d'occurences 
    	    		Si (nbrOccurence>nbrMaxOccurrence) Alors
    	    			nbrMaxOccurrence := nbrOccurence;
    	    			indexOfMaxElement := i;
    	    		Fin Si
    	    		//On affiche le nombre d'occurence de l'element courrant 
    	    		Afficher "le nombre " + elementCourrant + " est present " + nbrOccurence +" fois";
    	    		//On reinitialise le nombre d'occurence, pour compter le nombre d'occurence de l'element suivant l'element courrant
    	    		nbrOccurence := 1;
    	    	Fin Si
    	    Fin Pour
    	    //on traite le derniere element
    	    Afficher "le nombre " + tab1[i] +" est present " + nbrOccurence +" fois";
     
    	    //on affiche le maximum
    	    Afficher "le nombre " + tab1[indexOfMaxElement]+ " est repeter le plus de fois : " + max;
    A+
    "Il n'existe que deux choses infinies, l'univers et la bêtise humaine... mais pour l'univers, je n'ai pas de certitude absolue." A. Einstein

Discussions similaires

  1. Comparaison de Nombre dans une zone de texte
    Par kiki89 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/04/2008, 11h20
  2. [Tableaux] Comparaison avec recherche dans un tableau
    Par Hotfirenet dans le forum Langage
    Réponses: 4
    Dernier message: 26/08/2007, 22h24
  3. [MySQL] Multiplication de 2 nombres dans un tableau
    Par BertMont dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/05/2007, 17h48
  4. Comparaison de données dans un tableau
    Par Azertime dans le forum LabVIEW
    Réponses: 3
    Dernier message: 12/05/2007, 23h13
  5. Charger et générer des nombres dans un tableau
    Par virtuadrack dans le forum C
    Réponses: 7
    Dernier message: 30/03/2007, 16h35

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