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
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 :
  • 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

Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 341
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 !
0
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:10
ouii tu as tellement raison .... je m'excuse.... ça fait des heures que je cherche une solution a ce code mais tout en vain il ne se compile meme pas ........so j'ai ecrit le machinalement
0
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:15
mais non j'ai deja fait tout l'exercice j'essaye justement de clarifier mes idees et de corriger mes fautes .....donc ton proverbe n'est pas dans sa place .......je suis d'accord avec toi concernant les formules de politesse c tt
0
Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 341 > 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:18
Bon, si tu veux juste contrôler ce que tu as déjà fait, propose ta démarche aux critiques des participants. Ca, c'est admis ! Mais n'oublie pas que tu as affaire à des bénévoles qui répondent selon le temps dont il dispose.
0
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
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;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
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 ?
0
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
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 )
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844 > 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
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...
0