Pensez à utiliser les fonctions déjà écrites dans les TD et TP précédents en incluant les fichiers dans votre projet.


Exercice 1

Le but de cet exercice est de créer un programme capable de calculer le périmètre et la surface de n'importe quel polygone simple.

Un polygone simple est un polygone sans aucune intersection d'aucune paire quelconque de côtés, en dehors du sommet commun à deux côtés successifs comme celui représenté sur la figure suivante.


Ne connaissant pas à l'avance le nombre de points du polygone, les points devront être stockés dans un pointeur. On demandera donc le nombre de points à l'utilisateur et on fera une allocation en fonction de la saisie.

Pour stocker les coordonnées des points, vous utiliserez la structure suivante :

typedef struct{
    int x;
    int y;
}point;

Afin de réaliser ce programme, vous devez écrire les fonctions suivantes :

  • Une fonction permettant d'ajouter les points dans le tableau de points.

    point *saisirPointsPolygone(point *listePoints, int nbPoints);

  • Une fonction qui calcule la distance entre 2 points.

    float distanceSommets(point p1,point p2);

  • Une fonction qui calcule le périmètre du polygone. Cette fonction renvoie la somme de toutes les distances entre les points.

    float perimetrePolygone(point *listePoints, int nbPoints);

  • Une fonction qui calcule la surface du polygone.

    float surfacePolygone(point *listePoints, int nbPoints);

Formules Distance entre 2 points d = ( x 1 - x 2 ) 2 + ( y 1 - y 2 ) 2
Surface d'un polygone S = 1 2 i = 0 N - 1 ( x i y i + 1 - x i + 1 y i )

Exercice 2

Cet exercice est tiré d'un sujet de stage ayant eu lieu il y a quelques années dans un autre langage.

Une école maternelle dispose d'une station météo située dans la cour et l'institutrice relève avec ses élèves les températures du matin et du soir afin de pouvoir voir l'évolution de celles-ci.

Jusqu'à présent, les relevés étaient écrits dans un cahier, et par conséquent étaient difficiles à exploiter.


Un cahier des charges a donc été proposé afin d'informatiser la gestion de ces relevés.

Vous devez donc réaliser un programme capable de travailler avec des données du type releveMeteo et date dont les structures sont :

typedef struct{
    int jour;
    int mois;
    int annee;
    }date;
typedef struct{
    date today;
    float tempMatin;
    float tempSoir;
    }releveMeteo;

Parmi les fonctionnalités que le client désire, on doit pouvoir :

  • ajouter un relevé à la liste déjà existante avec la fonction suivante;

    releveMeteo *ajouterReleve(releveMeteo *p);

  • calculer la moyenne des températures matinales, du soir et de la journée pour tous les relevés;

    void calculerMoyennes(releveMeteo *p,float *result);

  • afficher tous les relevés. L'affichage se fera sous cette forme : jour/mois/année - matin (ou soir) : température;

    void afficherReleves(releveMeteo *p);

  • sauvegarder les relevés (on utilisera la sauvegarde par blocs). La fonction renvoie -1 si la sauvegarde s'est mal passée;

    int sauvegarderReleves(releveMeteo *p, char *filename);

  • charger les anciens relevés (on utilisera la lecture par blocs);

    releveMeteo *chargerReleves(releveMeteo *p, char *filename);

  • exporter les relevés vers un tableur (du type Excel ou Calc de OpenOffice) afin de pouvoir tracer des courbes et avoir une évolution graphique des températures.

    void exportExcel(releveMeteo *p, char *filename);

    Afin de pouvoir rendre compatible ce fichier avec un tableur, il faut obligatoirement sauvegarder les données sous le format suivant :

    jour/mois/année;tempMatin;tempSoir

    comme sur la figure ci-dessous.

    Image exemple


    Une fois la sauvegarde effectuée, cliquer avec le bouton droit sur le fichier et choisir ouvrir avec OpenOffice.

NB : Il faudra également prévoir un menu qui permette à l'utilisateur d'effectuer toutes ces opérations.