Langage c: erreur dans mon code m'échappe
Fermé
sportif_C
Messages postés
18
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
16 janvier 2012
-
7 avril 2011 à 08:48
sportif_C Messages postés 18 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 16 janvier 2012 - 7 avril 2011 à 21:45
sportif_C Messages postés 18 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 16 janvier 2012 - 7 avril 2011 à 21:45
A voir également:
- Langage c: erreur dans mon code m'échappe
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
- Dev-Pascal - Télécharger - Édition & Programmation
2 réponses
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
7 avril 2011 à 11:49
7 avril 2011 à 11:49
Dans le main : la fonction ajouter_noeud ne prend pas 3 arguments mais 9 !!!
Sinon il n'y a pas de problème à la compilation pour afficher_distance...
Sinon il n'y a pas de problème à la compilation pour afficher_distance...
sportif_C
Messages postés
18
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
16 janvier 2012
7 avril 2011 à 12:19
7 avril 2011 à 12:19
Au fait, j'ai essayé de mettre le truc qui me pose problème. J'ai raté de modifier la fonction ajouter_noeud.
Sinon, le compilateur me renvoie une erreur sur cette ligne
Quand je réecris de cette façon , ça plante également.
Merci de vos lumières.
Sinon, le compilateur me renvoie une erreur sur cette ligne
sqrt((p1->abscisse * p2->abscisse) + (p1->abscisse * p2->abscisse) -(p1->ordonee * p2->ordonee) + (p1->ordonee * p2->ordonee));
Quand je réecris de cette façon , ça plante également.
Merci de vos lumières.
void afficher_distance (llist client_liste) { noeud *h = client_liste; noeud *p1 = client_liste; noeud *p2 = client_liste; noeud *debut_liste = client_liste; int i; int j; double c = p1->abscisse - p2->abscisse; double d = p1->ordonee - p2->ordonee; 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, " %lf %lf", &(h->abscisse),&(h->ordonee); distance = (double ** ) malloc (7 * sizeof (double)); for (i=0;i<7;i++) { distance[i]=(double *) malloc (7 * sizeof(double)); } i=0; j=0; for(p1=debut_liste;p1->suivant!=NULL;p1=p1->suivant) { for(p2=p1->suivant;p2->suivant!=NULL;p2=p2->suivant) { if(i == j) { distance[i][j]= 0.0; } else { distance[i][j]= distance[j][i]= sqrt(c * c + d * d); } j++; } i++; } /*affichage sur l'écran de la matrice distance */ for (i=0;i<7;i++) { for (j=0;j<7;j++) { printf("\n distance[%i][%i]=%.1lf\n",i, j, distance[i][j]); } } }
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
7 avril 2011 à 13:25
7 avril 2011 à 13:25
L'idéal serait d'avoir à chaque fois le code complet, et la sortie de ton compilateur c'est à dire l'intitulé exact de l'erreur. Et encore mieux nous expliquer ce qu'est censé faire ton programme...
sportif_C
Messages postés
18
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
16 janvier 2012
7 avril 2011 à 15:39
7 avril 2011 à 15:39
Bonjour,
En fait, mon programme permet de créer une liste chainée simple qui contient deux élements: abscisse et coordonées ensuite de calculer la distance entre tous les noeuds et la mémoriser dans une matrice. Afficher cette matrice à la fin.
Vous trouverez ci-dessous mon code complet. J'utilise CodeBlocks (gcc). Il m'affiche erreur sur la ligne ci-après dans la fonction afficher_distance. Il ne m'indique pas l'intitulé de l'erreur :(((
Merci de vos lumières.
En fait, mon programme permet de créer une liste chainée simple qui contient deux élements: abscisse et coordonées ensuite de calculer la distance entre tous les noeuds et la mémoriser dans une matrice. Afficher cette matrice à la fin.
Vous trouverez ci-dessous mon code complet. J'utilise CodeBlocks (gcc). Il m'affiche erreur sur la ligne ci-après dans la fonction afficher_distance. Il ne m'indique pas l'intitulé de l'erreur :(((
Merci de vos lumières.
#include<stdio.h> #include<stdlib.h> #include<math.h> typedef struct noeud noeud; struct noeud{ double abscisse; double ordonee; struct noeud *suivant; }; typedef noeud* llist; llist ajouter_noeud(llist client_liste, double abs,double ord) { noeud* nouveau = (noeud*) malloc(sizeof(noeud)); nouveau->abscisse = abs; nouveau->ordonee = ord; nouveau->suivant = client_liste; return nouveau; } void afficher_distance (llist client_liste) { noeud *h = client_liste; noeud *p1 = client_liste; noeud *p2 = client_liste; noeud *debut_liste = client_liste; int i; int j; double c = p1->abscisse - p2->abscisse; double d = p1->ordonee - p2->ordonee; 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, " %lf %lf ",&(h->abscisse),&(h->ordonee)); distance = (double ** ) malloc (7 * sizeof (double)); for (i=0;i<7;i++) { distance[i]=(double *) malloc (7 * sizeof(double)); } i=0; j=0; for(p1=debut_liste;p1->suivant!=NULL;p1=p1->suivant) { for(p2=p1->suivant;p2->suivant!=NULL;p2=p2->suivant) { if(i==j) { distance[i][j]= 0.0; } else { distance[i][j]= distance[i][j]= sqrt(c * c + d * d); } i++; } j++; } /*affichage sur l'écran de la matrice distance */ for (i=0;i<7;i++) { for (j=0;j<7;j++) { printf("\n distance[%i][%i]=%.1lf\n",i, j, distance[i][j]); } } for(i=0;i<7;i++)free(distance[i]); free(distance); fclose (fichier); } void afficher_liste(llist client_liste) { noeud *p = client_liste; printf("contenu de la liste\n"); while(p!= NULL) { printf(" %lf %lf \n",p->abscisse,p->ordonee); p = p->suivant; } } int main (void) { llist ma_liste = NULL; double abs; double ord; 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," %lf %lf \n",&abs,&ord); ma_liste = ajouter_noeud(ma_liste,abs,ord); } afficher_distance(ma_liste); fclose (fp); getchar(); return EXIT_SUCCESS; }
sportif_C
Messages postés
18
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
16 janvier 2012
7 avril 2011 à 20:21
7 avril 2011 à 20:21
Quelqu'un pourrait-il m'aider?
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
7 avril 2011 à 21:26
7 avril 2011 à 21:26
Chez moi ce code compile, et chez toi il n'y a pas de message d'erreur explicite !
Comment t'aider à trouver une erreur fantôme ?
Essaye avec qqch d'autre que Code::Blocks, par exemple Dev-C++
Comment t'aider à trouver une erreur fantôme ?
Essaye avec qqch d'autre que Code::Blocks, par exemple Dev-C++
sportif_C
Messages postés
18
Date d'inscription
samedi 22 août 2009
Statut
Membre
Dernière intervention
16 janvier 2012
7 avril 2011 à 21:45
7 avril 2011 à 21:45
Il compile mais il me renvoie des valeurs bizarres de la matrice distance. Voici une capture écran
https://www.imagup.com/data-recovery-solutions-for-small-businesses-of-san-francisco/
:(
https://www.imagup.com/data-recovery-solutions-for-small-businesses-of-san-francisco/
:(