Help! Pb de spécif en C [Résolu]

Signaler
Messages postés
52
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
5 juin 2007
-
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
-
Bonjour, je suis en train d'écrire un programme et je voudrai faire une fonction qui renvoit un tableau d'entier.
Je n'arrive pas à faire la spécif.
Vous verrez dans le programme suivant, je veux que dénombrement renvoi un tableau de int.
De plus mon prog fonctionne bien mais quand on demande à windows une liste de plus de 30 éléments avec le tri base alors ca plante! Bizare!!

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>



void bulle(int* tab,int max);
void base(int* tab,int max);
int denombrement(int* tab,int c,int max);


void main(void)
{
//Initialisation des variables
int max =5;
int i = 0;
int temp = 0;
int* tab = NULL;
printf("\n Entrer la longueur du tableau \n");
scanf("%d",&max);
tab = (int*)malloc(max*sizeof(int));



//valeur au hasard
srand( (unsigned)time( NULL ));
for( i = 0;i < max;i++ )
tab[i]=rand();


//Présentation du tableau
printf("\n **** Tableau de depart **** \n");
for(i=0;i<max;i++)
printf("%d \n",tab[i]);

// bulle(tab,max);
base(tab,max);
// denombrement(tab,1,max);


free(tab);
}


//Tri par bulles


void bulle(int* tab,int max)
{
int i =0;
int ok = 1;
int temp = 0;


do
{
ok=1;
for(i=1;i<max;i++)
{
if(tab[i-1]>tab[i])
{
ok=0;
temp=tab[i-1];
tab[i-1]=tab[i];
tab[i]=temp;
}
}


}while(!ok);


//Résultat final
printf("\n **** Tableau final **** \n");
for(i=0;i<max;i++)
printf("%d \n",tab[i]);
printf("\n");

}


int denombrement(int* tab,int c,int max)
{
int i = 0;
int k = 9;
int lg = max;
int div = 1;
int* tab1 = NULL; // Tableau de compte
int* tab2 = NULL; // Tableau de résultats
int* inter = NULL; //tableau de travail


//construction du div
for(i=1;i<=c;i++)
{
div=div*10;
}


//construction du tableau de travail
inter = (int*)malloc((max)*sizeof(int));
for(i=0;i<max;i++)
{
inter[i]=tab[i]%div/(div/10);
// printf("\n %d \n ",inter[i]);
}


//recherche de la valeur maximale du tableau
/*for(i=0;i<max;i++)
{
if(inter[i]>k)
k=inter[i];
}
*/
//Construction du "tableau de compte"
tab1 = (int*)malloc((k+1)*sizeof(int));
for(i=0;i<=k;i++)
{
tab1[i]=0;

}


for(i=0;i<max;i++)
{
tab1[inter[i]]=tab1[inter[i]]+1;

}

for(i=1;i<k+1;i++)
{
tab1[i]=tab1[i]+tab1[i-1];
// printf("\n %d -> %d \n",i,tab1[i]);
}



//Construction du tableau de résultats
tab2 = (int*)malloc(lg*sizeof(int));


for(i=0;i<lg;i++)
{
tab2[i]=0;
// printf("\n %d -> %d \n",i,tab2[i]);
}


for(i=lg-1;i>=0;i--)
{
tab2[tab1[inter[i]]-1]=tab[i];
tab1[inter[i]]=tab1[inter[i]]-1;
// printf("\n %d -> %d \n",tab1[inter[i]],inter[i]);
}


for(i=0;i<lg;i++)
{
printf("\n %d -> %d \n",i+1,tab2[i]);
}


return tab2;


free(inter);
free(tab2);
free(tab1);
}



//Tri par base
void base(int* tab,int max)
{
int i=0;
int temp=0;
int buff = 0;
int div=1;
int c=1; //Nombre de chiffres max de représentation des valeurs à tester


for(i=0;i<max;i++)
{
buff=tab[i];
temp=0;

do
{

buff=buff/div;
temp=temp+1;
div=div*10;
}while(buff!=0);
if(temp+1>c)
c=temp+1;
temp=0;
}
// printf("\n %d \n",c);


//Algorithme de tri
for(i=c;i>=1;i--)
{
printf("\n *********** Etape %d ************ \n",c-i+1);
denombrement(tab,i,max);
}


}

Ce serait sympa de me donner une piste merci!
Thomas

1 réponse

Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
int* ReturnTabAuCarre(int* Tab, int n)

{

int *TabToReturn = (int*)malloc(sizeof(int) * n);



for(int i=0; i<n; i++)

TabToReturn[i] = Tab[i]*Tab[i];



return TabToReturn;

free(TabToReturn);

}

if(!Meilleur("Joky")) return ERREUR;<