tomalille
Messages postés52Date d'inscriptionjeudi 16 juin 2005StatutMembreDernière intervention 5 juin 2007
-
25 sept. 2005 à 20:46
romit
Messages postés160Date d'inscriptionjeudi 28 août 2003StatutMembreDernière intervention30 juin 2011
-
5 nov. 2005 à 18:09
Bonjour,
je finalise un programme qui fonctionne parfaitement sauf que je ne peux pas travailler avec une liste de plus de 30 éléments pour le tri par base. Sinon Windows plante!!
Apparemment, le pb vient de cette petite partie de code:
do
{
buff=buff/div;
temp=temp+1;
div=div*10;
}while(buff!=0);
où je cherche sur combien de chiffre un nombre est représentée. Je trouve cela vraiment bizare!!
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]);
//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);
}
//Construction du "tableau de compte"
tab1 = (int*)malloc((k+1)*sizeof(int));
for(i=0;i<=k;i++)
{
tab1[i]=0;
//Tri par base
void base(int* tab,int max)
{
int i=0;
int j=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;
}
//Algorithme de tri
for(i=1;i<=c;i++)
{
tab=denombrement(tab,i,max);
}
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 26 sept. 2005 à 09:37
il faut réinitialiser div avant chaque boucle sinon, tu fait des multiplications par 10 indéfiniement. Mais comme les int ont une borne max, il y a overflow et tu repart modulo la borne max => à un momment, tu tombe sur 0 et boom division par 0 ça plante.
for(i=0;i<max;i++)
{
buff=tab[i];
temp=0;
div = 1;
do
{
buff=buff/div;
temp=temp+1;
div=div*10;
}while(buff!=0);
if(temp+1>c)
c=temp+1;
temp=0;
}