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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
et ma matrice dans un fichier text :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
mon objectif serait de supprimer les doublons du vecteur après le tri.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Cordialement, Takout
Partager