begin process at 2012 05 29 20:10:11
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

problème avec des listes > 30 éléments


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

problème avec des listes > 30 éléments

dimanche 25 septembre 2005 à 20:46:17 | problème avec des listes > 30 éléments

tomalille

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!!

Voici mon code au complet:

#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);
}

 //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];
}


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

for(i=0;i<lg;i++)

 tab2[i]=0;
}

for(i=lg-1;i>=0;i--)
{
 tab2[tab1[inter[i]]-1]=tab[i];
 tab1[inter[i]]=tab1[inter[i]]-1;
}

return tab2;

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


 //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);
 }


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

}

Une petite aide m'aiderai beaucoup!
Merci d'avance
Thomas

dimanche 25 septembre 2005 à 21:26:53 | Re : problème avec des listes > 30 éléments

Joky

Membre Club
Un peu d'aide t'aiderait beaucoup :o
Bé dis donc lol

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

dimanche 25 septembre 2005 à 21:34:40 | Re : problème avec des listes > 30 éléments

tomalille

Ben ouai,

c'est quand même bizare cette affaire non?
Pourquoi il ne plante pas pour 29 valeurs et à partir de 30 valeurs ca plante!!

Thomas
dimanche 25 septembre 2005 à 21:35:01 | Re : problème avec des listes > 30 éléments

tomalille

Ben ouai,

c'est quand même bizare cette affaire non?
Pourquoi il ne plante pas pour 29 valeurs et à partir de 30 valeurs ca plante!!

Thomas
dimanche 25 septembre 2005 à 21:35:02 | Re : problème avec des listes > 30 éléments

tomalille

Ben ouai,

c'est quand même bizare cette affaire non?
Pourquoi il ne plante pas pour 29 valeurs et à partir de 30 valeurs ca plante!!

Thomas
lundi 26 septembre 2005 à 09:37:33 | Re : problème avec des listes > 30 éléments

ymca2003

Réponse acceptée !
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; 
 }

samedi 5 novembre 2005 à 18:09:55 | Re : problème avec des listes > 30 éléments

romit

Membre Club
Réponse acceptée !
Réponsé acceptée ???

Romit.


Cette discussion est classée dans : int, temp, tab, for, max


Répondre à ce message

Sujets en rapport avec ce message

Help! Pb de spécif en C [ par tomalille ] 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.Vou Pb à l'exécution [ par tomalille ] Bonjour,J'ai un petit pb à l'execution de ce prog. Il compile et les liens sont fait sans erreur ni warning. Par contre lorsque j'appelle le sous-prog help une fonction qui a besoin de vous [ par natacha86 ] Re bonjour a tout le monde, voila j'ai mis tout le prog si vous voulez tester, en fait le pb viens de la fonctino tri_shell(), je ne sais pas pkoi ell tableau [ par imanedaoudi ] Salut,Je veux récuperer le tableaux triée sans faire return, avec ce programme je recupere le tableau non trier ,comment faire pour recuperer le tab t compilation mai au lancement "erreur la memoire ne peu pas pas etre read" [ par touny23 ] je maitrise pas tro le C.mai comme j ai un projet a faire dessus pour la rentré , je sui obligé de m y mettre .j arrive a compiler sous dev-cpp mai lo Besoin d'aide urgent SVP [ par paulina82 ] Bonjour, j'ai un gros probleme avec mon programme ecri en langage C.lorsque je complile il n'afiche pa d'erreur mais lorsque j'esaye de l'executé il Problem Affichage de mon Tableau [ par Orezza ] salut à tous, j'ai un blem à l'affichage du tableau. l'utilisateur parametre son tableau, c lui qui l'initilize mais j'arrive pas à afficher apres le tri tableau en ligne [ par TWITTI ] bonjour , je suis etudiant en mécanique et la programmtion c est embetant pour moi.J ai un probleme sur mon programme main().Je n arrive pas a faire pb en c urgenttttttttttttttttt [ par natacha86 ] bonjour, j'ai un probleme avec mon programme, il ne veut pas sortir, j'ai fais un menu et apparement ya un bug mais je ne comprend rien.le code est as problème avec l'initialision d'un tableau [ par khen ] Bonjour,voila j'ai un petite problème avec l'initialisation de mon tableau , je vous explique le problèmeon a un tableau de 3 dimension appelé tab et


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 9,079 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales