Tableau en c

Fermé
sweetwink Messages postés 77 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 13 janvier 2009 - 16 nov. 2008 à 22:15
dioufym Messages postés 2 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 20 novembre 2008 - 20 nov. 2008 à 19:40
Bonjour,
je veux chercher la valeur la plus fréquente dans 1 tableau ..je sais bien que je doi parcourir le tableu avec 2 compteur dans 2 boucles pour ..mais le probléme si je retrouve 1e valeur ke jé deja fé la recherche de son nombre d'occurence 1e autre foi dans 1e autre case.kommon jpourré donc évité ke le méme parcour de tableaue se fé
            
                

13 réponses

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
16 nov. 2008 à 22:18
je te conseille de faire une seule boucle pour parcourir ton tableau (si il est a une dimension)
e te conseille d'utiliser une liste chainée, stockant dans l'odre croissant tout les nombres que tu trouve.

la structure de ta liste chainée sera:

struct maillon{
maillon* suivant;
int valeur;
int occurence;
};
0
tu peut utiliser soit:
1- les pointeurs :(ptr.num ,ptr.nb_occ)
2- un tableau de 2 dimensions :(t[0][0]pour le num ,t[0][1] pour nb_occ)
cdlt
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
16 nov. 2008 à 22:29
Oui, utilise deux boucles for, c'est le plus simple.
Poste ton code que tu as fait jusqu'à maintenant qu'on te corrige ;)
Cdlt
0
sweetwink Messages postés 77 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 13 janvier 2009 6
16 nov. 2008 à 22:57
#include<stdio.h>
void main()
{
int tab[100];
int i,j,n,nbmax,x,nbocc;

do{
printf("n=");
scanf("%i",&n);}
while( (n>0) &&(n<100));
for (i=0;i<n;i++)
{printf("saisir le element ",i);
scanf("%i\t",t[i]);
nbmax=0;
for(i=0;i<n;i++) ///là je peu avoir kom par hasard 1e autre valeur x ke jé déja fai son parcour de tableau dé le
{ début or je né pa besoin puiske jé trouvé son nb d'occurence////


x=t[i];
nbocc=o;
for(j=0;j<n;j++)
{
if{(x==t[i])
nbocc=nbocc+1}
}
if{(nbocc>nbmax)
nbmax=nbocc;
valfréq=x;
}
}
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
16 nov. 2008 à 23:01
Reposte ton algo en utilisant la balise code ( à droite du bouton souligner) !
Et avant de poster, corrige les petites erreurs d'inattention que ton compilateur te signale. Du genre l'oubli de point virgule ou des o à la place de 0.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sweetwink Messages postés 77 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 13 janvier 2009 6
16 nov. 2008 à 23:22
#include<stdio.h>
void main()
{
int tab[100];
int i,j,n,nbmax,x,nbocc,valfréq;

do{
printf("saisir n":);
scanf("%i",&n);}
while( (n>0) &&(n<100));
for (i=0;i<n;i++)
{printf("saisir le element ",i);
scanf("%i\t",t[i]);
nbmax=0;
for(i=0;i<n;i++) ///là je peu avoir kom par hasard 1e autre valeur x ke jé déja fai son parcour de tableau dé le
{ début or je né pa besoin puiske jé trouvé son nb d'occurence////
x=t[i];
nbocc=o;
for(j=0;j<n;j++)
{
if{(x==t[i])
nbocc=nbocc+1}
}
if{(nbocc>nbmax)
nbmax=nbocc;
valfréq=x;
}
}
}

                
0
marouendjerbien Messages postés 35 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 19 novembre 2008 1
17 nov. 2008 à 18:38
Bonjour,
as tu résolu le problème??
0
sweetwink Messages postés 77 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 13 janvier 2009 6
17 nov. 2008 à 19:50
nn pa encor si tu veux m'aider
0
marouendjerbien Messages postés 35 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 19 novembre 2008 1
18 nov. 2008 à 13:25
Bonjour,
je suis débutant en c , je suis en train d'essayer ,
ce que j'ai comme idée c'est le suivant :

- Trier le tableau ( tri croissant ) ;

- construire un autre tableau : T2 à partir du T1 en supprimant toutes les occurrences des éléments de T1 ;

- faire une fonction "nboccu" qui détermine le nombre d'occurrences d'une valeur donnée dans un tableau ;

- construire un troisième tableau : T3 à deux dimension ( n lignes et 2 colonnes ) dont :
* chaque ligne contient une valeur de T2 suivi du nombre d'occurrences correspondant
0
marouendjerbien Messages postés 35 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 19 novembre 2008 1
18 nov. 2008 à 21:51
Salut,
Comme je vous ai déjà dit , je suis débutant en C, j'ai rencontré pas mal de difficultés ,
Je suis pas sûr du résultat, j'ai fait ce que je peux ,
mais çà donne des résultats correctes ;
Tu peux me demander des explications .


#include<stdio.h>
#include<conio.h>
int nbocc(int t[],int x)
{
int d=0;
int i=0;
while(t[i])
{
if(t[i]==x)
d++;
i++;
}
return(d);
}
void remplir(int t[],int n)
{
for(int i=0;i<n;i++)
{
printf("\n donnerle %diŠme ‚l‚ment ",i+1);
scanf("%d",&t[i]);
}
}
void trier(int t[],int n)
{
int intermid;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(t[j]<t[i])
{
intermid=t[i];
t[i]=t[j];
t[j]=intermid;
}
}
}
}
void affiche(int t[],int y)
{
printf("\n");
for(int i=0;i<y;i++)
{
printf("%d \t",t[i]);
}
}
void main()
{
int t[100];
int p[100];
int T[100][2];
int i,n,j;
int k;
clrscr();
do
{
printf("donner la dimension du tableau : ");
scanf("%d",&n);
}
while(n<0 || n>100);
remplir(t,n);
affiche(t,n);
trier(t,n);
// printf("\n");
// puts("\n Le tableau tri‚ est :");
// affiche(t,n);
i=0;
k=0;
j=0;
int nbelem=0;
do
{
j=i+1;
p[k]=t[i];
if(t[j]==t[i])
{
i=j;
}
else
{
k++;
i=j;
nbelem++;
}
}
while(j<n);
printf("\n");
puts("\n Le tableau lors du tri et de suppression d'occu est :");
affiche(p,nbelem);
for(int q=0;q<nbelem;q++)
{
T[q][0]=p[q];
T[q][1]=nbocc(t,p[q]);
}
for(int x=0;x<nbelem;x++)
{
printf("\n \n");
printf("%d : existe %d fois",T[x][0],T[x][1]);
}
int indicemax=0;
for(int m=0;m<nbelem;m++)
{
if(T[m][1]>T[indicemax][1])
indicemax=m;
}
printf("\n \n");
printf(" La valeur la plus fr‚quente est : %d",T[indicemax][0]);
printf("\n \n");
printf(" Et son nombre d'occurence est : %d", T[indicemax][1]);
getch();
}
0
salut
pourquoi t'a pas utilisé les balises code? ton programme sera plus lisible...
cdlt
0
belsen Messages postés 128 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 2 août 2009 13
18 nov. 2008 à 22:48
c est compliquer ton programme
0
marouendjerbien Messages postés 35 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 19 novembre 2008 1
19 nov. 2008 à 02:19
Bon, je vais faire une explication pas à pas de mon programme :
SVP en cas d'erreurs de compilation , informez moi ,
En cas de besoin d'autres explications ...


#include<stdio.h>
#include<conio.h>

// nbocc est une fonction qui retourne le le nombre d'occurences
// d'un entier donné x dans un tableau t ;

int nbocc(int t[],int x)
{
int d=0;
int i=0;
while(t[i])
{
if(t[i]==x)
d++;
i++;
}
return(d);
}

// remplir : permet de remplir un tableau t de dimension n ;

void remplir(int t[],int n)
{
for(int i=0;i<n;i++)
{
printf("\n donner le %d ième élément ",i+1);
scanf("%d",&t[i]);
}
}

// la fonction trier permet de trier un tableau t de dimension n dans l'ordre croissant ;

void trier(int t[],int n)
{
int intermid;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(t[j]<t[i])
{
intermid=t[i];
t[i]=t[j];
t[j]=intermid;
}
}
}
}

// affiche permet l'affichage des élément d'un tableau t de dimension y ;

void affiche(int t[],int y)
{
printf("\n");
for(int i=0;i<y;i++)
{
printf("%d \t",t[i]);
}
}


void main()
{
// déclaration des variables ;

int t[100];
int p[100];
int T[100][2];
int i,n,j;
int k;
clrscr();

// la boucle do-while suivante permet d'assurer que la valeur de la dimension n
// du tableau t introduite soit positive et ne dépasse pas 100 ;

do
{
printf("donner la dimension du tableau : ");
scanf("%d",&n);
}
while(n<0 || n>100);

remplir(t,n); // remplir le tableau t ;

affiche(t,n); // afficher les valeurs du tableau t ;

trier(t,n); // trier le tableau t dans l'ordre croissant ;

// printf("\n");
// puts("\n Le tableau trié est :");
// affiche(t,n);

/* Dans cette partie , notre tableau t est bien trié dans l'ordre croissant , je vais créer un autre tableau nommé p de telle façon que je supprime toutes les occurences , exemple : si (après avoir trier le tableau ) on a : t = |1|1|2|3|3|5| alors le tableau p doit être comme suit :
p= |1|2|3|5|

*/
i=0;
k=0;
j=0;
int nbelem=0; // nbelem est un conteur sur le nombre d'éléments du tab p ;
do
{
j=i+1;
p[k]=t[i];
if(t[j]==t[i])
{
i=j;
}
else
{
k++;
i=j;
nbelem++;
}
}
while(j<n);

// affichage du tableau p ;

printf("\n");
puts("\n Le tableau lors du tri et de suppression d'occu est :");
affiche(p,nbelem);

/* Dans cette partie l'idée c'est de costruire un tableau nommé T à deux dimensions ( nbelem lignes et 2 colonnes )
dont chaque ligne contient un élément du tableau p ( dans la colonne 0)
suivie du nombre d'occurences qui lui correspend ( la colonne 1 du T)
*/

for(int q=0;q<nbelem;q++)
{
T[q][0]=p[q];
T[q][1]=nbocc(t,p[q]);
}

// Affichage du tableau T ;

for(int x=0;x<nbelem;x++)
{
printf("\n \n");
printf("%d : existe %d fois",T[x][0],T[x][1]);
}

/* Enfin , pour déterminer la valeur la plus fréquente dans le tableau initial t , il suffit de parcourir la colonne 1 du tableau T pour déterminer la valeur max , ( cette valeur max corespend au nombre d'occurences de la valeur la plus fréquente dans le tableau t )
une fois trouvée on affiche l'élément qui lui correspend dans la même ligne .

*/

int indicemax=0;
for(int m=0;m<nbelem;m++)
{
if(T[m][1]>T[indicemax][1])
indicemax=m;
}
printf("\n \n");
printf(" La valeur la plus fr‚quente est : %d",T[indicemax][0]);
printf("\n \n");
printf(" Et son nombre d'occurence est : %d", T[indicemax][1]);
getch();
}
0
sweetwink Messages postés 77 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 13 janvier 2009 6
19 nov. 2008 à 20:34
je ne sais pas mais je t'assure que cet exercice ne demande pas tout ce travail moi aussi je suis débutante , je crois que le probléme en c c'est l'optimisation est c'est ce qu'on en pense pas de le faire souvent
0
marouendjerbien Messages postés 35 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 19 novembre 2008 1
19 nov. 2008 à 22:26
Bon, je vois ce que tu veux dire ,
mais avez-vous une autre proposition ??
voulez-vous bien la poster .
Si tu as d'autres idées informez moi .
0
dioufym Messages postés 2 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 20 novembre 2008
20 nov. 2008 à 10:53
pour voir la valeur la plus fréquente on peut se baser sur leur pourcentaga
#include<conio.h>
#include<stdio.h>
void pourcentage(int n,int t[])
{int i=0,j,l,k,cpt;
while(i<n)
{for(j=0;j<n;j++)
{if(tab[i]=tab[j])
cpt++;}
printf("le pourcentage de %d est %d",t[i],cpt*100/n);
}
i++;l=i;k=0;
while((k<i)&&(l=i))
{if(tab[i]==tab[k])
i++;
else
k++;
}}
void main()
{int n,t[n],i;
printf("entrer la dimension\n);
scanf("%d",&n);
printf("remplissage du tableau\n");
for(i=0;i<n;i++)
scanf("%d",t[i]);
pourcentage(n,t)
getch();
}
0
dioufym Messages postés 2 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 20 novembre 2008
20 nov. 2008 à 19:40
salut c dioufym le sènègalais j'avè ècri un progamme mais yavè kelkes erreus car gtè pressè mais ce programme ci dessous est meilleur ke tout autre programme et facile a comprendre.il te donne la presence de chaque occurence du tableau et èvite les doublons

#include<conio.h>
#include<stdio.h>
void frequent(int n,int t[])
{
int i=0,j,k,l,cpt;
while(i<n)
{
cpt=0;
for(j=0;j<n;j++)
{if(t[i]==t[j])
cpt++;
}
printf("la presence de %d dans le tableau est %d\n",t[i],cpt);
i++;l=i;k=0;
while((k<i)&&(l=i))
{if(t[i]==t[k])
i++;
else
k++;}
}
}
main()
{int n,t[n],i;
printf("entrer la dimension du tableau\n");
scanf("%d",&n);
printf("remplissage du tableau\n");
for(i=0;i<n;i++)
scanf("%d",&t[i]);
frequent(n,t);
getch();
}
0