Problème tri d'un tableau
Bonjour à tous,
Je souhaiterai écrire un programme qui range et trie les éléments d'une matrice qui se situe dans un fichier text. Mon souci c'est que lors du tri mon programme n'affiche pas le bon résultat. J'ai remarqué qu'avec des nombres décimaux proches de zéros (0.5 par exemple) mon programme affiche n’importe quoi, tandis qu'avec d'autres nombres il semble fonctionner.
Quelqu'un peut t'il m'aider s'il vous plaît ?
voici mon main :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include "quicksort.h"
int main(){
double **A;
int i,j,k=0,nrow,ncol,size_v=4*4;
double tridoublon[4*4];
FILE* fichier = NULL;
nrow=4;ncol=4;
/* lecture du fichier */
fichier=fopen("test.txt","r");
A=malloc(nrow*sizeof(double*));
for(i=0;i<nrow;i++)
{ A[i]=malloc(ncol*sizeof(double)); }
if (fichier != NULL)
{
for(i=0;i<nrow;++i){
for(j=0;j<ncol;++j){ fscanf(fichier, "%lf", &A[i][j]); }}
}
fclose(fichier);
/*creation du vecteur */
for (i=0;i<nrow;++i){
for(j=0;j<ncol;++j){tridoublon[k]=A[i][j]; ++k;}}
/*trie du vecteur */
quicksort(tridoublon,0,size_v-1);
for(i=0;i<size_v;++i)
{ printf("%lf \n",tridoublon[i]);}
for(i=0;i<nrow;i++){
for(j=0;j<ncol;j++){
printf("%lf \t",A[i][j]);
} printf("\n");
}
return(0);
} |
mes fonctions :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
#include<stdio.h>
#include<stdlib.h>
#include"quicksort.h"
#define Malloc(n,type) (type*)malloc((n)*sizeof(type))
#define Free(p) free(p); p=NULL
void echanger(double tableau[], int a, int b)
{
int temp = tableau[a];
tableau[a] = tableau[b];
tableau[b] = temp;
}
void quicksort(double *v, int gauche, int droit)
{
int i, dernier;
if(gauche>=droit)
return;
echanger(v,gauche,(gauche+droit)/2); /* i */
/*place l'élément du centre en v[0] */
dernier=gauche;
for(i=gauche+1;i<=droit;++i)
if (v[i]<v[gauche])
echanger(v,++dernier,i);
echanger(v,gauche,dernier);
/* remet en place l'élément de partage */
quicksort(v,gauche,dernier-1);
quicksort(v,dernier+1,droit);
}
int nombre_doublon(double *tab, int size)
{
register int i;
int k=1;
for(i=0;i<size-1;++i)
{
if(tab[i]!=tab[i+1])
{ ++k;}
}
return(k);
}
int suprime_doublon(double **res,double *tab,int size)
{
double *t;
int i,j,n_nondoublon;
j=0;
n_nondoublon=nombre_doublon(tab,size);
t=Malloc(n_nondoublon,double);
t[j]=tab[0];
for(i=0;i<size;++i)
{
if(t[j]!=tab[i])
{ ++j;
t[j]=tab[i];
}
}
*res=t;
return(n_nondoublon);
} |
et ma matrice dans un fichier text :
Code:
1 2 3 4 5
|
0.7 0.6 0.5 0.4
0.8 0.5 0.4 0.3
0.9 0.4 0.3 0.2
0.0 0.3 0.2 0.1 |
mon objectif serait de supprimer les doublons du vecteur après le tri.
Cordialement, Takout