Typedef struct ..........
Fermé
kazanani
Messages postés
6
Date d'inscription
dimanche 18 octobre 2015
Statut
Membre
Dernière intervention
26 février 2016
-
Modifié par Chris 94 le 31/10/2015 à 14:48
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 31 oct. 2015 à 19:01
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 31 oct. 2015 à 19:01
3 réponses
Chris 94
Messages postés
50978
Date d'inscription
mardi 8 janvier 2008
Statut
Modérateur
Dernière intervention
17 février 2023
7 337
31 oct. 2015 à 14:50
31 oct. 2015 à 14:50
Bonjour,
Comment vas-tu ? Je crois que tu as eu un souci puisque :
- tu oublies que les réponses sont données par des personnes, pas par des robots. Merci d'user des formules de politesse courante (bonjour, merci, s'il vous plait...). ;
- tu essayes de nous faire faire ton exercice !
Comment vas-tu ? Je crois que tu as eu un souci puisque :
- tu oublies que les réponses sont données par des personnes, pas par des robots. Merci d'user des formules de politesse courante (bonjour, merci, s'il vous plait...). ;
- tu essayes de nous faire faire ton exercice !
kazanani
Messages postés
6
Date d'inscription
dimanche 18 octobre 2015
Statut
Membre
Dernière intervention
26 février 2016
31 oct. 2015 à 15:31
31 oct. 2015 à 15:31
ok .... la totalite du code :
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define MAX 100
typedef struct Point Point;
typedef struct Commune Commune;
typedef struct Triangle t;
struct Point
{
double x;
double y;
};
struct Commune
{
Point maisons[MAX];
int nombre;
};
struct Triangle
{
Point p1;
Point p2;
Point p3;
};
double distance(Point p1,Point p2)
{
return sqrt(p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y);
}
Point plus_proche(Point depart,Commune village)
{
int i;
int n;
Point plusProche={0,0};
printf("Entrez le nombre des habitations de la commune : ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
if(distance(village.maisons[i],depart)<distance(village.maisons[i+1],depart))
{
plusProche=village.maisons[i];
}
else
{
plusProche=village.maisons[i+1];
}
}
return plusProche;
}
Triangle trois_plus_proches(Point depart, Commune village)
{
Point p1=plus_proche(depart,village);
Point p2=plus_proche(p1,village);
Point p3=plus_proche(p2,village);
return (p1,p2,p3);
Point proposition(Point depart, Commune village)
{
Point pointCompromis;
Point p1=plus_proche(depart,village);
Point p2=plus_proche(p1,village);
Point p3=plus_proche(p2,village);
pointCompromis.x=(p1.x+p2.x+p3.x)/3;
pointCompromis.y=(p1.y+p2.y+p3.y)/3;
return pointCompromis;
}
void affiche_point(Point maison)
{
printf("(%.2lf, %.2lf)",maison.x ,maison.y);
}
void affiche_village(Commune village)
{
int i;
printf("{\n");
for(i=0;i<village.nombre;i++) {
printf(" ");
affiche_point(village.maisons[i]);
printf("\n");
}
printf("}");
}
void affiche_triangle(Triangle t)
{
Commune c;
Point p[]={t.maisons[0],t.maisons[1],t.maisons[2] };
c.maisons=p;
c.nombre=3;
affiche_village(c);
}
void test(Point depart, Commune village)
{
int i;
printf("Pour le point ");
affiche_point(depart);
printf(" dans le village : ");
affiche_village(village);
printf(", les distances à toutes les habitations sont :\n");
for(i=0;i<village.nombre;i++) {
printf(" ");
affiche_point(village.maisons[i]);
printf(" --> %.5lf\n",distance(depart, village.maisons[i]));
}
printf(", le point le plus proche est ");
affiche_point(plus_proche(depart, village));
printf(",\nles trois points les plus proches sont ");
affiche_triangle(trois_plus_proches(depart, village));
printf(", et la nouvelle proposition de position est ");
affiche_point(proposition(depart, village));
printf(".\n");
}
int main()
{
Commune commune;
Point maisons[]={
{ 1 , 5 },
{ 1.25, 0.5 },
{ 3 , 2 },
{ 5 , 6.25 },
{ 5.5 , 1.5 }
};
commune.maisons=maisons;
commune.nombre=5;
test( (Point){ 4, 3 }, commune);
return 0;
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
31 oct. 2015 à 16:22
31 oct. 2015 à 16:22
Bonjour,
C'est tellement mieux avec le code :-).
Je n'ai pas tout lu mais voici quelques erreurs :
printf("(%.2lf, %.2lf)",maison.x ,maison.y);
Ce n'est pas %lf qu'il faut mettre dans un printf(), mais %f.
return sqrt(p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y);
Attention la formule est fausse. Ici sqrt ne s'applique qu'à p2.x-p1.x. Mets des parenthèses autour de l'ensemble : return sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y));
Au niveau des structures ton code est très bien et semble répondre à l'énoncé ;-).
Maintenant qu'est-ce que tu attends de nous ? Ton code ne compile pas ? Qu'on l'améliore ? Ou y a-t-il un point où tu sèches ?
C'est tellement mieux avec le code :-).
Je n'ai pas tout lu mais voici quelques erreurs :
printf("(%.2lf, %.2lf)",maison.x ,maison.y);
Ce n'est pas %lf qu'il faut mettre dans un printf(), mais %f.
return sqrt(p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y);
Attention la formule est fausse. Ici sqrt ne s'applique qu'à p2.x-p1.x. Mets des parenthèses autour de l'ensemble : return sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y));
Au niveau des structures ton code est très bien et semble répondre à l'énoncé ;-).
Maintenant qu'est-ce que tu attends de nous ? Ton code ne compile pas ? Qu'on l'améliore ? Ou y a-t-il un point où tu sèches ?
kazanani
Messages postés
6
Date d'inscription
dimanche 18 octobre 2015
Statut
Membre
Dernière intervention
26 février 2016
31 oct. 2015 à 18:16
31 oct. 2015 à 18:16
mercii bcp .... mais concernant ta premiere remarque le %lf est aussi correct c juste une question de memoire ........franchement j'attend que vous l'ameliore :P (s'il ne compile pas alors il y a qlq chose qui cloche qlq part !) ... (je suis une debutante en c alors un langage de programmation est une accumulation )
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
>
kazanani
Messages postés
6
Date d'inscription
dimanche 18 octobre 2015
Statut
Membre
Dernière intervention
26 février 2016
31 oct. 2015 à 19:01
31 oct. 2015 à 19:01
mais concernant ta premiere remarque le %lf est aussi correct c juste une question de memoire
Non. Dans le printf() le float sera promu en double. Et le double est traité par "%f". "%lf" est donc incorrect dans le printf(). Néanmoins, "%lf" est de plus en plus toléré par les compilateurs comme synonyme de "f". Pour autant, ce n'est pas correct...
Ta fonction trois_plus_proches n'a pas d'accolades finales.
Tu n'as pas défini le type Triangle. Il faut donc soit mettre struct Triangle, soit mettre typedef struct Triangle Triangle; (au lieu de t).
return (p1,p2,p3);
Impossible. En C, on ne peut retourner qu'un type à la fois. Pourquoi ne pas retourne un triangle ?
A un moment, tu as mis t.maison. Mais il n'y a pas de type "maison" dans ta structure Triangle. Que souhaites-tu faire ?
Il y a encore pas mal d'erreurs. Je te laisse déjà corrigé tout ça. Lorsque c'est fait, reposte ton code pour qu'on puisse le relire et corriger les dernières erreurs.
Note : n'oublie pas de corriger le problème sur le sqrt...
Non. Dans le printf() le float sera promu en double. Et le double est traité par "%f". "%lf" est donc incorrect dans le printf(). Néanmoins, "%lf" est de plus en plus toléré par les compilateurs comme synonyme de "f". Pour autant, ce n'est pas correct...
Ta fonction trois_plus_proches n'a pas d'accolades finales.
Tu n'as pas défini le type Triangle. Il faut donc soit mettre struct Triangle, soit mettre typedef struct Triangle Triangle; (au lieu de t).
return (p1,p2,p3);
Impossible. En C, on ne peut retourner qu'un type à la fois. Pourquoi ne pas retourne un triangle ?
A un moment, tu as mis t.maison. Mais il n'y a pas de type "maison" dans ta structure Triangle. Que souhaites-tu faire ?
Il y a encore pas mal d'erreurs. Je te laisse déjà corrigé tout ça. Lorsque c'est fait, reposte ton code pour qu'on puisse le relire et corriger les dernières erreurs.
Note : n'oublie pas de corriger le problème sur le sqrt...
31 oct. 2015 à 15:10
31 oct. 2015 à 15:15
31 oct. 2015 à 15:18