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 :

Recherche séquentielle d'une occurence dans un tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 123
    Par défaut Recherche séquentielle d'une occurence dans un tableau
    Bonjour,

    J'ai programmé la recherche séquentielle de la première occurence d'un élément dans un tableau, mais ça ne fonctionne pas, est ce que vous pouvez m'aider ?

    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
    #include <ctype.h>
    #include <stdio.h>
    #include <stdlib.h>  /* nécessaire pour srand(n) et rand() */
    #include <time.h>
     
    #define NMAX 200001
     
    void gen_aleat( double v[], int n )
    {
     int i;
     /* rand() retourne un entier aléatoire de l'ens {0,1,2,..,RAND_MAX} (RAND_MAX fixé à 32767 sous VC++)*/
     for(i = 0; i < n; i++) v[i] = ( rand() - rand() ) %32768;/* pour avoir aussi des nbrs<0 */
    }
     
    void aff_vect( double v[], int n )
    {
     int i;
     for( i = 0; i < n; i++ )
     {
    	 printf( "%7.0f ", v[i] );
         if ( (i+1) % 10 == 0 ) printf( "\n" );
     }
     printf( "\n" );
    }
     
    int chercheseq (double v[],int n,double e)
    {
        int i;
     
        i = 0;
        while (i < n)
        {
            if (v[i]==e) return (i);
            i++;
        }
        return (-1);
    }
    int main()
    {
        double v[NMAX];
        int n;
        char rep;
        int ok;
        double e;
     
        srand( time( NULL ) );
     
        do
        {
            printf( "Entrer le nb d'elements du vecteur ( <= %d ) : ", NMAX );
            ok = scanf( "%d", &n );
            while( getchar( ) != '\n' );  /* ou fgets(vb,80,stdin)  avec  char vb[81];  */
        } while( !ok || n < 0 || n > NMAX );
     
        gen_aleat( v, n );
        printf( "Voici le tableau genere :\n" );
        aff_vect( v, n );
     
        do
        {
            printf("Taper l'element a rechercher dans le tableau : ");
            ok = scanf( "%d", &e );
            while( getchar( ) != '\n' );
        } while (!ok);
     
        if (chercheseq(v,n,e)==-1) printf("L'element ne figure pas dans le tableau.");
        else printf("L'indice de l'element recherche est %d",chercheseq(v,n,e));
     
     
        return 0;
    }

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    La comparaison d'égalité, sur les flottants, ce n'est pas trop ça.

    Mais puisque tu demandes un entier dans la recherche, tu peux comparer la partie entière des nombres au lieu de comparer les nombres eux-mêmes.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 123
    Par défaut
    Oui en fait j'aurais pu mettre int au lieu de double.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Par défaut
    Bonjour. L'égalité exacte entre deux flottants étant impossible (à ma connaissance), pour savoir si deux flottants sont égaux, on fixe un ordre de précision pour prétendre que deux flottants sont égaux.
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <float.h>
    #include <math.h>
    ...
    int comparer(double a,double b)
    {
        if ( fabs(a - b) < FLT_EPSILON )
            return 1;
        else
            return 0;
    }
    FLT_EPSILON étant le plus petit nombre e tel que 1.0 + e <> 1.0.
    Il est déclaré dans le fichier "float.h"

  5. #5
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 123
    Par défaut
    J'ai tout remplacé par des int et c'est bon ça marche merci.

  6. #6
    Invité
    Invité(e)
    Par défaut ! ! !
    Citation Envoyé par Armays Voir le message
    J'ai tout remplacé par des int et c'est bon ça marche merci.
    N'oublie pas ce que t'as dit " esired ", sa peut te servir pour demain.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 14
    Dernier message: 19/07/2009, 03h55
  2. Réponses: 10
    Dernier message: 05/01/2008, 11h59
  3. Rechercher une valeur dans un tableau
    Par pafi76 dans le forum Access
    Réponses: 2
    Dernier message: 29/06/2006, 14h23
  4. [Tableaux] Recherche d'une chaine dans un tableau
    Par tom06440 dans le forum Langage
    Réponses: 5
    Dernier message: 20/10/2005, 23h27
  5. recherche du nombre d'occurences dans une table
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/01/2004, 20h03

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