LIFAP1 – TP10 : Les structures
Objectifs : Manipulation des structures
Petit exercice d’échauffement
Une fleur est définie par
son nom,
sa couleur,
un tableau comparatif de son prix chez 3 commerçants sélectionnés.
Une liste de fleurs est définie par
le nombre de fleurs qu’elle contient,
un tableau de fleurs.
1. Définir en langage C/C++ une constante CHMAX ayant pour valeur 50 qui sera
utilisée comme taille maximale des chaines de caractères.
2. Définir en langage C/C++ les structures de données fleur et liste_fleurs
permettant de stocker toutes les informations concernant une fleur et une liste de
fleurs.
3. Écrire en langage C/C++ un sous-programme saisir_fleur permettant de saisir
toutes les informations relatives à une fleur. Attention on recommencera la saisie tant
que les données de prix ne sont pas strictement positives.
4. Écrire en langage C/C++ un sous-programme saisir_liste_fleurs permettant
de saisir toutes les informations relatives à une liste de fleurs. On utilisera pour cela le
sous-programme de la question 3.
5. Afin d’effectuer des comparaisons tarifaires entre les 3 commerçants sélectionnés, on
souhaite connaître pour une liste de fleurs, le prix total de toutes les fleurs chez chacun
des 3 commerçants. Écrire en langage C/C++ un seul sous-programme
prix_liste_fleurs permettant d’extraire ces 3 informations. On s’assurera de
ne parcourir qu’une seule fois le tableau de fleurs.
6. Écrire en langage C/C++ un sous-programme affiche_fleurs_rouges
permettant d’afficher le nom de toutes les fleurs de couleur rouge de la liste de fleurs.
7. Écrire en langage C/C++ le programme principal permettant de remplir un tableau
avec les caractéristiques de 5 fleurs, d’afficher le nom de toutes les fleurs rouges de
cette liste et d’afficher le numéro du commerçant le moins cher des 3 pour cette liste.
#include <iostream>
#include <string.h>
using namespace std;
const int CHMAX =50;
struct fleur
{
char nom[CHMAX];
char couleur[CHMAX];
float prix[3];
};
struct bouquet
{
int nb;
struct fleur tab_fleur[15];
};
struct fleur saisir_fleur (void)
{
struct fleur f;
int i;
cout<<"donnez le nom de la fleur"<<endl;
cin>>[Link];
cout<<"donnez la couleur de la fleur"<<endl;
cin>>[Link];
for (i=0;i<3;i++)
{
do
{
cout<<"donnez le prix de la fleur chez le commercant "<<i<<endl;
cin>>[Link][i];
}
while ([Link][i]<=0);
}
return f;
}
void saisir_liste_fleurs (struct bouquet &b)
{
b.tab_fleur[[Link]]=saisir_fleur();
[Link]++;
}
void prix_liste (struct bouquet b, float &com1, float &com2, float &com3)
{
int i;
com1=0;
com2=0;
com3=0;
for (i=0;i<[Link];i++)
{
com1+=b.tab_fleur[i].prix[0];
com2+=b.tab_fleur[i].prix[1];
com3+=b.tab_fleur[i].prix[2];
}
void affiche_fleurs_rouges (struct bouquet b)
{ int i;
cout<<"Voila la liste des fleurs de couleur rouge : "<<endl;
for (i=0;i<[Link];i++)
{
if (strcmp(b.tab_fleur[i].couleur,"rouge")==0)
cout<<b.tab_fleur[i].nom<<endl;
}
}
int main (void)
{
struct bouquet bq;
float c1,c2,c3;
[Link]=0;
for (int i=0;i<5;i++)
{
saisir_liste_fleurs(bq);
}
affiche_fleurs_rouges (bq);
prix_liste(bq,c1,c2,c3);
cout<<"Prix chez le commercant 1 : "<<c1<<endl;
cout<<"Prix chez le commercant 2 : "<<c2<<endl;
cout<<"Prix chez le commercant 3 : "<<c3<<endl;
return 0;
}