Tableau dynamique

Tableau dynamique - C - Programmation

Marsh Posté le 04-10-2012 à 21:36:33    

Bonsoir, j'ai essayer de coder un programme en c qui alloue dynamiquement de la mémoire à 2 tableaux, puis remplit les 2 tableaux et retire les doublons mais mon problème c'est que mon programme marche une fois sur deux, quand il ne va pas, il tourne en boucle après le remplissage des 2 tableaux. Si quelqu'un peux me donner une indication sur mon problème ce serait sympa merci.
 
Voici mon code.
 
#include <stdio.h>
#include <stdlib.h>
 
int tailleTab(){
 int dim;
 printf("\nTaille des tableaux (>0): " );
 scanf("%d",&dim);
 while(dim<=0){
  printf("\nErreur, la taille doit etre superieur a 0, veuillez recommencer: " );
  scanf("%d",&dim);
 }
 return (dim);
}
 
 
void afficherTableau(int tableau[], int dim){
 int i;
 for(i=0;i<dim;i++)printf("\n%d",tableau[i]);
}
 
 
int main(){
 int *ptr1=NULL, *ptrDebut1=NULL, *ptr2=NULL, *ptrDebut2=NULL;  
 int i, dim=0;
 
 //taille des tab  
 dim=tailleTab();
 
 //allocation dynamique
 ptr1= (int*)malloc(dim*sizeof(int));  
 ptr2= (int*)malloc(dim*sizeof(int));  
 
 //remplissage des tableaux (meme valeurs)
 if((ptr1!=NULL)&&(ptr2!=NULL)){
  ptrDebut1=ptr1;
  ptrDebut2=ptr2;
  for(i=0;i<dim;i++){
   printf("\nTab[%i]: ",i+1);
   scanf("%d", ptr1);
   *ptr2=*ptr1;
   ptr1++;
   ptr2++;
  }
   
  ptr1=ptrDebut1;
  ptr2=ptrDebut2;
     
  //on retire les doublons premier tableau méthode normal
   
  int temp;
  i=0;
  int j;
  int y;
  while(i<dim-1){
   j=i+1;
   while(j<dim){
    if(ptr1[i]==ptr1[j]){
     ptr1[j]=-1;
     y=j+1;
     while((y<dim)&&(ptr1[y]!=-1)){
      temp=ptr1[y];
      ptr1[y]=ptr1[y+1];
      ptr1[y+1]=temp;
     }
    }
   j++;
   }
   i++;
  }
   
     
  //on retire les doublons deuxieme tableau avec pointeur
  i=0;
  while(i<dim-1){
   j=i+1;
   while(j<dim){
    if(*(ptr2+i)==*(ptr2+j)){
     *(ptr2+j)=-1;
     y=j+1;
     while((y<dim)&&(*(ptr2+y)!=-1)){
      temp=*(ptr2+y);
      *(ptr2+y)=*(ptr2+y+1);
      *(ptr2+y+1)=temp;
     }
    }
   j++;
   }
   i++;
  }  
   
 }
   
 printf("\nPtr1: " );
 afficherTableau(ptrDebut1, dim);
 printf("\n\nPtr2:" );
 afficherTableau(ptrDebut2, dim);
 exit(0);
}

Reply

Marsh Posté le 04-10-2012 à 21:36:33   

Reply

Marsh Posté le 04-10-2012 à 22:04:24    

Dans votre boucle ci-dessous ...
 

bigprog a écrit :


     y=j+1;
     while((y<dim)&&(ptr1[y]!=-1)){
      temp=ptr1[y];
      ptr1[y]=ptr1[y+1];
      ptr1[y+1]=temp;
     }


 
 
Vous n'incrémentez pas y, le programme part donc en boucle infinie si le nombre qui doublonne n'est pas en dernière position du tableau !
 
Et c'est a priori la même chose en utilisant la deuxième méthode !
 
Cordialement,


Message édité par Farian le 04-10-2012 à 22:05:00
Reply

Marsh Posté le 04-10-2012 à 22:22:48    

Merci beaucoup je n'avais pas fait attention à ça.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed