Langage c: erreur dans mon code m'échappe
sportif_C
Messages postés
23
Statut
Membre
-
sportif_C Messages postés 23 Statut Membre -
sportif_C Messages postés 23 Statut Membre -
Bonjour,
Voilà, je suis depuis hier sur ce bout de code. Il se plante. Je n'arrive pas à corriger le problème.
Le debuggeur me renvoie une erreur dans la formule du calcul de distance dans la focntion afficher_distance!!
Pourriez-vous m'aider?
Merci par avance.
Voilà, je suis depuis hier sur ce bout de code. Il se plante. Je n'arrive pas à corriger le problème.
Le debuggeur me renvoie une erreur dans la formule du calcul de distance dans la focntion afficher_distance!!
Pourriez-vous m'aider?
Merci par avance.
#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, 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->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 **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((p1->abscisse * p2->abscisse) + (p1->abscisse * p2->abscisse) -(p1->ordonee * p2->ordonee) + (p1->ordonee * p2->ordonee));
}
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]);
}
}
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 ",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 ",&abs,&ord);
ma_liste = ajouter_noeud(ma_liste,abs,ord);
}
afficher_distance(ma_liste);
fclose (fp);
getchar();
return EXIT_SUCCESS;
}
A voir également:
- Langage c: erreur dans mon code m'échappe
- Langage ascii - Guide
- Langage binaire - Guide
- Langage visual basic - Télécharger - Langages
- Pascal langage - Télécharger - Édition & Programmation
- Langage basic gratuit - Télécharger - Édition & Programmation
2 réponses
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...
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]);
}
}
}
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;
}
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++
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/
:(