Bonjour,
Voilà, je souhaite soustraire entre deux valeurs d'une liste chainée simple. Comment faire?
Voici mon programme. ça compile sauf que je n'obtiens pas les bons résultats. Il m'affiche que des zéros (exemple distance[0][0]=0.0, distance[0][1]= 0.0, etc). Alors que je dois avoir des les valeurs de matrice distance comme ceci
distance[0][0] = 0.0
distance[0][1] = 12.12
...
Des idées?
Les donnéesCode:#include<stdio.h> #include<stdlib.h> #include<math.h> typedef struct noeud noeud; struct noeud{ int identifiant; double abscisse; double ordonee; int demande; //demande du client int temps_service; int borne_inf_tw; int borne_sup_tw; int capacite; struct noeud *suivant; }; typedef struct solution solution; typedef noeud* llist; typedef solution* llist_s; llist ajouter_noeud(llist client_liste, int id, double abs,double ord,int dde,int tps_service,int b_inf_tw,int b_sup_tw,int cap) { noeud* nouveau = (noeud*) malloc(sizeof(noeud)); nouveau->identifiant = id; nouveau->abscisse = abs; nouveau->ordonee = ord; nouveau->demande = dde; nouveau->temps_service = tps_service; nouveau->borne_inf_tw = b_inf_tw; nouveau->borne_sup_tw = b_sup_tw; nouveau->capacite = cap; nouveau->suivant = client_liste; return nouveau; } void trier_distance (llist client_liste) { noeud *p = client_liste; int i; int j; double **distance; FILE * fichier; fichier = fopen("D:\\Codes \\TS2004t3\\test.txt", "r"); if(fichier == NULL) { printf("Impossible d'ouvrir fichier .txt \n"); exit (-1); } for(i=0;i<7;i++) fscanf(fichier, "%d %lf %lf %d %d %d %d %d",&(p->identifiant),&(p->abscisse),&(p->ordonee),&(p->demande),&(p->temps_service),&(p->borne_inf_tw),&(p->borne_sup_tw),&(p->capacite)); distance = (double ** ) malloc (7 * sizeof (double)); for (i=0;i<7;i++) { distance[i]=(double *) malloc (7 * sizeof(double)); } for(i=0;i<7;i++) { for(j=0;j<i+1;j++) { if(i == j) { distance[i][j]= 0.0; } distance[i][j]= distance[j][i] = sqrt(pow((p->abscisse - p->abscisse),2.0)+ pow((p->ordonee - p->ordonee),2.0)); } } /*affichage sur l'écran de la matrice distance triée*/ for (i=0;i<7;i++) { for (j=0;j<7;j++) { printf("\n distance[%i][%i]=%.1lf\n",i, j, distance[i][j]); } } void afficher_liste(llist client_liste) { noeud *p = client_liste; printf("contenu de la liste\n"); while(p!= NULL) { printf("%d %lf %lf %d %d %d %d %d\n",p->identifiant,p->abscisse,p->ordonee,p->demande,p->temps_service,p->borne_inf_tw,p->borne_sup_tw,p->capacite); p = p->suivant; } } int main (void) { llist ma_liste = NULL; int id; double abs; double ord; int dde; int tps_service; int b_inf_tw; int b_sup_tw; int cap; double **distance_entre_noeud; int i; FILE *fp; if(ma_liste!= NULL) printf("la liste est non vide \n"); fp = fopen("D:\\Codes \\TS2004t3\\test.txt", "r"); if(fp == NULL) { printf("Impossible d'ouvrir fichier donnees .txt \n"); exit (-1); } for(i=0;i<7;i++){ fscanf(fp,"%d %lf %lf %d %d %d %d %d\n",&id,&abs,&ord,&dde,&tps_service,&b_inf_tw,&b_sup_tw,&cap); ma_liste = ajouter_noeud(ma_liste,id,abs,ord,dde,tps_service,b_inf_tw,b_sup_tw,cap); } /*allocation dynamique du tableau distance*/ distance_entre_noeud = (double ** ) malloc (7 * sizeof (double)); for (i=0;i<7;i++) { distance_entre_noeud[i]=(double *) malloc (7 * sizeof(double)); } trier_distance(ma_liste); fclose (fp); getchar(); return EXIT_SUCCESS; }
0 0.00 0.00 0 0 1 40 4
1 12.20 -12.30 +3 1 1 5 4
2 10.11 22.10 -1 1 1 7 4
3 22.34 12.34 -2 1 1 9 4
4 42.33 23.24 +4 1 1 10 4
5 15.66 17.89 -2 1 1 14 4
6 22.13 40.30 -2 1 1 20 4
-----