Fréquence d'un nombre en C

Fermé
the-kraken Messages postés 1 Date d'inscription mercredi 26 janvier 2011 Statut Membre Dernière intervention 26 janvier 2011 - 26 janv. 2011 à 22:43
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 28 janv. 2011 à 05:55
Bonjour,

salut a tous
j'aimerais résoudre un exercice en C mais je gallere depuis pas mal de temps, alors l'énoncé dit:
on doit afficher la frequence d'un nombre dans une serie, par ex:
10 10 15 12 15 3 3 3 8 8 9
on doit avoir a la sortie
10 2 fois
15 2 fois
12 1 fois
3 3 fois
8 2 fois
9 1 fois
j'espère que j'etait bien claire, merci d'avance

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
26 janv. 2011 à 23:05
Oui, c'est bien clair.
Le plus simple est d'utiliser un tableau pour stocker les éléments.
Tu prends le premier, et tu regardes le nombre de fois qu'il apparaît.
Puis tu passes au suivant (attention à ce qu'il soit différent des éléments précédents) et tu comptes son nombre d'apparition. Etc.

Voilà, l'idée. A toi d'approfondir pour bien comprendre le principe.
Ensuite tu pourras écrire l'algorithme et enfin le programme C.

Cdlt,
1
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
Modifié par Hxyp le 28/01/2011 à 07:00
Bonjour,

#include <stdio.h>    

int main()    
{    
    /*  mise de la serie dans un tableau de int    
        c'est à vous de voir comment les y mettre */    
    int tab_serie[]={10,10,15,12,15,3,3,3,8,8,9};    
    /*  récupération de la taille du tableau    
        sizeof(tab_de_int) retourne la taille en octet du tableau    
        alors pour savoir le nombre de int qu'il contient on divise    
        par la taille que prend un int en octet */    
    int taille_tab=sizeof(tab_serie)/sizeof(int);    
    /*  i et j : pour les boucle    
        nb_cpt : pour compter les repetitions d'un nombre    
        dejavu : si un nombre a déjà été vu alors pas besoin de l'afficher    
        à nouveau. Il y a une tonne de façons de faire... */    
    int i,j,nb_cpt,dejavu;    
    /*  première boucle i faite sur chaque int du tableau    
        permet de garder le nombre courant i pour le tester ensuite dans une    
        boucle interne sur le tableau en utilisant j    
    */    
    for(i=0;i<taille_tab;i++)    
    {    
        nb_cpt=0,dejavu=0;    
        /*  boucle j permet de faire le teste et d'incrémenter nb_cpt */    
        for(j=0;j<taille_tab;j++)    
        {    
            if(tab_serie[i]==tab_serie[j])    
            {    
                nb_cpt++;    
            }    
        }    
        /*  recyclage de j (qui est devenu inutile) pour créer une boucle    
            sur les nombres précédemment utilisés afin de ne pas faire de    
            copies. si le nombre courant i se retrouve dans ceux déjà vu    
            (entre j=0 à j=i-1 enfin c'est une façon de voir) alors dejavu++ */    
        for(j=0;j<i;j++)    
        {    
            if(tab_serie[i]==tab_serie[j])    
            {    
                dejavu++;    
            }    
        }    
        if(dejavu==0)    
        {    
            printf("%d %d fois\n",tab_serie[i],nb_cpt);    
        }    
    }    

    return 0;    
}    



La même chose mais d'une manière à ne pas réutiliser la boucle servant à récupérer le nombre de répétition d'un nombre si il a déjà été testé :
Vous devriez pouvoir le comprendre sans commentaires

#include <stdio.h> 

int main() 
{ 
    int tab_serie[]={10,10,15,12,15,3,3,3,8,8,9}; 
    int taille_tab=sizeof(tab_serie)/sizeof(int); 

    int i,j,nb_cpt,dejavu; 

    for(i=0;i<taille_tab;i++) 
    { 
        nb_cpt=0,dejavu=0; 
        for(j=0;j<i;j++) 
        { 
            if(tab_serie[i]==tab_serie[j]) 
            { 
                dejavu++; 
            } 
        } 
        if(dejavu==0) 
        { 
            for(j=0;j<taille_tab;j++) 
            { 
                if(tab_serie[i]==tab_serie[j]) 
                { 
                    nb_cpt++; 
                } 
            } 
            printf("%d %d fois\n",tab_serie[i],nb_cpt); 
        } 
    } 
    return 0; 
} 


La même chose encore pour la route :

int main()
{
    int tab_serie[]={10,10,15,12,15,3,3,3,8,8,9};
    int taille_tab=sizeof(tab_serie)/sizeof(int);

    int i,j,nb_cpt;

    for(i=0;i<taille_tab;i++)
    {
        nb_cpt=0;
        for(j=0;j<taille_tab;j++)
        {
            if(tab_serie[i]==tab_serie[j])
            {
                if(j<i){ break; }
                else { nb_cpt++; }
            }
            if(j==taille_tab-1){ printf("%d %d fois\n",tab_serie[i],nb_cpt); }
        }
    }
    return 0;
}
1