Tableau dynamique - C - Programmation
Marsh Posté le 04-10-2012 à 22:04:24
Dans votre boucle ci-dessous ...
bigprog a écrit : |
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,
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);
}