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 :

Problème d'occurrence !


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Student in Computer Science
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Student in Computer Science
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Par défaut Problème d'occurrence !
    Bonjour,
    j'ai un soucis concernant ma détermination d’occurrence...

    Je dois trouver les occurrences de mes entiers stockés dans un tableau. Une fois que j'ai trouvé ces occurrences, je dois les divisé par le nombre d'entiers contenu dans mon tableau (pour moi, ça sera 10).

    J'a donc commencé par déterminer quel sont les occurrences, et que ça me les affiche sur l'écran comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int occurence(int tab[]) { //ma fonction, qui reçoit mon tableau de 10 entiers en argument
    int a, b;
    for (a=0; a < 10; a++) {      
       for (b=0; b < 10; b++) {
           if (tab[a]==tab[b]) {
              printf("%d %d donc %d %d", a, b, tab[a], tab[b]);
           }
       }
    }
    return 0;
    }
    J'aimerai maintenant pouvoir calculer le nombre d'occurence/10 pour chaques entiers.
    Et savoir aussi si je suis bien parti ou non...

    Merci

  2. #2
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    si tu sais que les valeurs sont restreintes à un petit intervalle, et SEULEMENT dans ce cas, tu peux déclarer un tableau de taille = à ton intervalle, et tu incremente chaque case en passant dans ton tableau.

    Cordialement,

  3. #3
    Membre habitué
    Homme Profil pro
    Student in Computer Science
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Student in Computer Science
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Par défaut
    C'est ce que fait mon code non ? Je sais que le tableau possède 10 entiers, j'ai donc mis comme opérateur bolléens: i < 10 et i++
    Je suis donc bien parti ?

  4. #4
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    je ne penses pas que ce sot la même chose, j'essaie de m'expliquer mieux :

    admettons un tableau qui contient 7 8 8 7 8 6 5 4 3 8, appelons le T.

    voici le code dont je parle (en pseudo-code) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int T_occ[9] = {0,0,0,0,0,0,0,0,0}; //initialisation du tableau qui va recevoir les occurrences (+1 par rapport à la valeur max, ici 8)
    int T[10] = {7,8,8,7,8,6,5,4,3,8};
     
    //appel de la méthode que tu auras créé au préalable
    CalculOccurences(T_occ, T);
    //MODE DEBUG
    //on rentre dans la fonction
    void CalculOccurences(int t_occ[], int t_val[])
    {
        boucle pour //on parcours t_val
           t_occ[t_val[i]] += 1;//ici, on va faire des +1 directement dans la bonne case, cela permet d'avoir une seule boucle pour  
        fin boucle pour
    }
    ATTENTION, ce code n'est absolument pas une bonne méthode en général, car la complexité en mémoire est potentiellement énorme.


    Cordialement

  5. #5
    Membre habitué
    Homme Profil pro
    Student in Computer Science
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Student in Computer Science
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Par défaut
    Merci pour ta méthode, je vais toujours essayer celle là.
    Sinon, il existerait donc une autre façon de calculer l'occurrence sans pour cela augmenter la complexité du programme ?

  6. #6
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    si bien sur, et ta méthode me semble (j'ai lu en diagonale) bien parti à part que ton type de retour est un int, et que si tu dois appeler ta fonction pour chaque nombre, c'est bizarre. Sinon tu peux utiliser des structures, etc.


    @Trademark : lis mon deuxième post

  7. #7
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    @Kamuui: C'est le nombre d'entiers qui est limité, pas leurs valeurs.

    Comme tu l'as fait, la méthode naïve est de parcourir l'entièreté du tableau pour chaque entier et encore une fois (boucle imbriquée), pour chaque entier de parcourir le tableau et de compter le nombre d’occurrence à ce moment.

    Sinon tu peux aussi commencer par trier ton tableau et puis le parcourir simplement. Mais il existe encore d'autres méthodes, comme utiliser un tableau annexe qui ne contient que des entiers différents et leur nombre d'occurrences. A chaque itération dans ta boucle, tu regardes si ce tableau contient la valeur courante (si oui tu incrémentes, si non tu l'ajoutes avec une occurrence initiale de 1). Pour aller plus loin, tu peux trié le tableau annexe et ainsi accéder à ses éléments de manière dichotomique. Ou encore plus complexe, utiliser une table de hachage (qui garantis presque un accès immédiat).

    Il existe peut-être encore d'autres solutions plus efficace.

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 146
    Par défaut
    Citation Envoyé par Trademark Voir le message

    Sinon tu peux aussi commencer par trier ton tableau et puis le parcourir simplement. Mais il existe encore d'autres méthodes, comme utiliser un tableau annexe qui ne contient que des entiers différents et leur nombre d'occurrences. A chaque itération dans ta boucle, tu regardes si ce tableau contient la valeur courante (si oui tu incrémentes, si non tu l'ajoutes avec une occurrence initiale de 1). Pour aller plus loin, tu peux trié le tableau annexe et ainsi accéder à ses éléments de manière dichotomique. Ou encore plus complexe, utiliser une table de hachage (qui garantis presque un accès immédiat).

    Il existe peut-être encore d'autres solutions plus efficace.
    Niveau algorithmique, ta méthode, qui est très proche du "tri par comptage", est la plus optimale, me semble t'il...

Discussions similaires

  1. Problème de sélection après filtre si 0 occurrence du filtre
    Par mister_vba dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/11/2013, 17h16
  2. TobjectList problème d'occurrence
    Par mortapa dans le forum Débuter
    Réponses: 4
    Dernier message: 10/09/2010, 14h36
  3. Réponses: 4
    Dernier message: 30/03/2006, 18h14

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