/* IFT1166 - démonstration #6 - exercice 7 14-octobre -2005 v1.08 M.Lokbani MàJ pour A05 à partir de ex-démo02-ex01 + gcc3.4.2, +comments 21-septembre-2003 v1.07 M.Lokbani A03 & gcc 3.2 20- aout -2000 v1.06 M.Lokbani modification sur la précision exo1 07- mai -2000 v1.05 M.Lokbani mise a jour pour E00 08- octobre -1999 v1.04 (#3 ex.1.03) M.Lokbani commentaires supplémentaires 28-septembre-1999 v1.03 (#3 ex.1.02) P.Langlais commentaires+correction exos 2+3 26-septembre-1999 v1.02 (#3 ex.1.01) M.Lokbani exos 2+3 P.Langlais 13-septembre-1999 v1.01 (#1) M.Lokbani mise a jour des commentaires pour exo1 12-septembre-1999 v1.00 (#1) M.Lokbani écriture du programme pour exo1 contact: lokbani@iro.umontreal.ca Cet exercice a pour but de vous familiariser avec les commandes entrées et sorties de la classe io. Copyright (C) 1999-2005 Université de Montréal Département d'informatique et de Recherche Opérationnelle Mohamed Lokbani -- Tous Droits Réservés -- All Rights Reserved -- */ #include // contient les déclarations E/S #include // contient les manipulateurs de formats E/S #include // !! le string de C++ pas celui de C // Structure produit a deux champs typedef struct { char nom[40]; // nom du produit float prix; // prix du produit } produit; // Déclaration de la fonction min_max // Deux paramètres en entrées: // un tableau du type "produit", et un nombre entier représentant la taille de ce tableau. // La fonction ne retourne aucune valeur void min_max (produit liste[],int nbliste); // La fonction principale main, retourne une valeur égale à 0, utilisée généralement // pour détecter que le programme s'est exécuté correctement. int main(int argc, char *argv[]) { // Initialisation du tableau aliments ayant le type produit. Remarquez les accolades {} // utilisées pour séparer chaque élément du tableau aliments. produit aliments[5] = { {"Carottes", 1.0879}, {"Bananes", 0.2976}, {"Pommes de terre", 0.4537}, {"Raisin", 2.3769}, {"Salade", 0.9995} }; //appel de la fonction min_max avec comme arguments: // le tableau aliments du type produit, et la taille de ce tableau qui est égale a 5. min_max (aliments, 5); // on retourne 0 pour signifier que le programme s'est exécuté correctement. return 0; } // Fonction permettant de rechercher dans un tableau // l'élément le plus cher et l'élément le moins cher. // Deux arguments sont passés à la fonction: le tableau du type produit et sa taille void min_max (produit liste[],int nbliste) { using namespace std; // on vérifie que la taille de la liste n'est pas nulle if (nbliste == 0) { cout << "liste vide!" << endl; return; } // au départ on suppose que l'élément le plus cher est // le premier élément du tableau afin d'accélérer la recherche. int pcher = 0; // index du produit le plus cher dans le tableau liste float pprix = liste[0].prix; // le prix du produit le plus cher // on suppose aussi que le produit le moins cher est // le premier élément du tableau. // index du produit le moins cher dans le tableau liste int mcher = 0; // le prix du produit le plus cher float mprix = liste[0].prix; /* on boucle sur l'ensemble des éléments du tableau liste. Remarquez que nous ne commençons pas par l'élément indexé "1", car le produit de l'élément "0" (index=0) du tableau nous a servi à l'initialisation du test (voir plus haut, pprix & mprix)*/ for(int i=1;i pprix) { // si oui .... alors on mémorise l'index pcher = i; // et on mémorise aussi le prix le plus cher jusqu'à la trouvé pprix = liste[i].prix; } else { // si le produit n'est pas plus cher que la référence ... if (liste[i].prix < mprix) { // est-il moins cher? // si oui, on mémorise l'index mcher = i; // et le prix le moins cher qui servira de nouvelle référence. mprix = liste[i].prix; } } } /* initialisation de la justification vers la gauche, nécessaire si on veut avant d'utiliser la justification à gauche. Par défaut la justification est à droite. */ cout.setf( ios::left, ios::adjustfield); /* afficher la chaîne en tenant en compte 35 caractères. Si cette chaîne contient moins de 35 caractères alors compléter par le caractère "." i.e. point. l'affichage de la chaîne va tenir compte de la justification à gauche affichage du nom, puis la chaîne au sujet du prix et finalement le prix du du produit. Dans ce cas, le prix sera affiche avec une précision de 3 caractères après la virgule. showpoint forcera l'affichage du point c-à-d la virgule, et fixed pour une représentation en virgule fixe. Le nombre 78.80 est représenté ici en virgule fixe alors que sa représentation en virgule flottante est 7880E-02.*/ cout << setiosflags (ios::fixed | ios::showpoint) << setw(35) << setfill('.') << setiosflags(ios::left) << "plus cher => nom: " << liste[pcher].nom << " prix : " << setprecision(3) << liste[pcher].prix << endl; // remise à zéro du drapeau ajustement à gauche, dans ce cas c'est la justification // à droite qui sera prise en compte. cout.unsetf( ios::left ); // idem que le produit le plus cher, sauf qu'ici la justification est à droite. cout << setprecision(3) << setw(35) << setfill('.') << setiosflags(ios::right) << "moins cher => nom: " << liste[mcher].nom << " prix : " < nom: .................Raisin prix : 2.377 ................moins cher => nom: Bananes prix : 0.298 #endif //---------------------------------------------------------------------------------