Typedef struct ..........
kazanani
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
Définissez un type Triangle correspondant à trois Points, puis complétez votre programme en définissant une fonction supplémentaire Triangle trois_plus_proches(Point depart, Commune village);???????
sachant que :
est ce que cela repond a cette question??? (plus precisement type veut dire ici introduire une nouvelle structure ????)
a quoi revient a dire le type triangle? est ce que je dois definir une nouvelle structure ? et concernant la fonction trois_plus_proche qui retourne le type triangle comment ca???
sachant que :
- on a deja definit une structure point qui contient deux variables ('x' et 'y')
struct Point
{
double x;
double y;
};
- une fonction :' double distance(Point p1, Point p2)' (elle retourne la distance entre les deux points )
- commune est un type comme etant un tableau dynamique de Points: ce seront toutes les coordonnées de toutes les habitations de la commune.
est ce que cela repond a cette question??? (plus precisement type veut dire ici introduire une nouvelle structure ????)
#define MAX 100
struct Commune
{
Point maisons[MAX];
int nombre;
};
- une fonction 'Point plus_proche(Point depart, Commune village)' qui retourne le point le plus proche
a quoi revient a dire le type triangle? est ce que je dois definir une nouvelle structure ? et concernant la fonction trois_plus_proche qui retourne le type triangle comment ca???
3 réponses
-
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 !
-
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;
} -
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 ?-
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 )
- 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...
-