language c exo

Download Language C EXO

If you can't read please download the document

Post on 08-Jul-2016

4 views

Category:

Documents

0 download

Embed Size (px)

DESCRIPTION

sdfdsfdsfdsdsfd

TRANSCRIPT

Exercice 1 :CorrectionOn dsire programmer une application de gestion de produit dun magasin. Pour cela, on va crire une structureProduitet une structureMagasin. Chaque produit est caractris par son nom (chaine de caractre), son prix d'achat (double), son prix de vente (double) et le nombre d'exemplaires en stock (int).1.Dfinir la structureProduit.2.Dfinir les fonctions suivantes utilisant la structureProduit:a.void initProduit(Produit * adrP, char n[], double prixA, double prixV)permettant linitialisation dun produit avec un nom, un prix d'achat et un prix de vente (c'est--dire que ces donnes son fournies en argument). Par dfaut, la quantit de produits en stock est nulle.b.void afficherProduit(Produit p)qui affiche les donnes dun produit.c.void modifier(Produit * adrP, double prix)qui permet de modifier le prix de vente dun produit.d.int egaux(Produit p1, Produit p2)permettant de comparer deux produits (deux produit sont gaux sils ont le mme nom).e.void ajouterExemplaire(Produit * adrP, int nbExp)permettant daugmenter le nombre d'exemplaires en stock dun produit.f.void retirerExemplaire(Produit * adrP, int nbExp)permettant de diminue le nombre d'exemplaires en stock dun produit.Un magasin se caractrise par son solde (double), un nombre courant de produit dans le magasin et par son stock de produits (adresse vers desProduit). Le stock de produit est reprsent par un tableau dadresse vers desProduitallou dynamiquement lors de linitialisation dun nouveau magasin par une taille donne en paramtre. Le nombre courant de produit dans le magasin est initialis nulle lors de linitialisation dun nouveau magasin et incrment dans chaque ajout dun produit au magasin. La structureMagasinaura donc la forme suivante :typedef struct Magasin{ double solde; int taille; int nbProduit; Produit ** tabProd;}Magasin;

Simest un objetMagasinetp1etp2sont deux objetsProduitajouts aux magasinmalors on aura la configuration suivante:

3.Dfinir la fonction permettant dinitialiser un magasin avec un soldesolet une tailletdont le prototype est :void initMagasin(Magasin * adrM, double sol, int t);Avant de pouvoir acheter ou vendre un produit, il faut l'avoir ajout dans le stock. Pour cela, on doit disposer d'une fonctionvoid ajouterProduit (Magasin * adrM, Produit * adrP)et de la mthodeint verifierProduit(Magasin m, Produit p)permettant de vrifier si le produit pass en argument existe dans le magasin ou pas (Ne pas ajouter un produit qui existe dj).4.Dfinir les fonctionsverifierProduitetajouterProduit.5.Pour acheter ou vendre ce produit, on utilise alors ladresse du produit comme argument des fonctions. Dfinir les deux fonctions suivantes :void acheterProduit(Magasin * adrM, Produit * adrProd, int nbExemplaires)vendreProduit(Magasin * adrM, Produit * adrProd, int nbExemplaires)6.Dfinir galement la fonctionvoid getBilan(Magasin m)qui permet d'afficher le bilan du magasin (affichage du stock).7.Ecrire un programme main permettant de tester lensemble des structures et des fonctions dfinies prcdemment.

Exercice 2 :CorrectionOn dsire programmer une application de gestion des employs dune entreprise. Pour cela, on va crire une structureEmployeet une structureEntreprise. Chaque employ est caractris par son nom (chaine de caractre), sa fonction (chaine de caractre), son salaire (double) et son anciennet (int) (le nombre dannes de la personne dans lentreprise).1.Ecrire la structureEmploye.2.Dfinir les fonctions suivantes :a.void initEmploye(...)permettant linitialisation dun employ, on fixe son nom, sa fonction, son salaire et son anciennet (c'est--dire que ces donnes son fournies en argument).b.void modifier(...)qui permet de modifier le salaire dun employ.c.int egaux(...)permettant de comparer deux employs (deux employs sont gaux sils ont le mme nom).d.void augmenterAnnee(...)permettant daugmenter lanciennet dun employ.e.void afficherEmploye(...)permettant dafficher le nom, la fonction, le salaire et lanciennet dun employ.Lentreprise se caractrise par son nom (chaine de caractres), son chiffre daffaire (double) et par son staff demploys (structureEmploye). Le staff demploy est reprsent par un tableau de taille100dadresse vers les employs (Employe * tabEmp[100]) et un nombre demploy de lentreprise (int) initialis 0lors de linitialisation de lentreprise, incrment chaque ajout dun employ lentreprise et dcrment chaque retrait dun employ de lentreprise. Avant de pouvoir ajouter un employ lentreprise, il faux le vrifier quil nest pas ajout dj au tableau des employs de lentreprise.La dclaration de la structure Entreprise sera donc comme suit :typedef struct Entreprise{ char nom[50]; double chiffreAffaire; Employe * tabEmp[100]; int nbEmp;}Entreprise;

3.Ecrire la structureEntreprise4.Dfinir les fonctions suivantes :a.void initEntreprise(...)permettant linitialisation dune entreprise.b.int verifier(...)permettant de vrifier si un employ pass en argument existe dans une entreprise ou pas.c.void ajouterEmploye(...)permettant dajouter un employ pass au paramtre au tableau des employs de lentreprise sil nexiste pas.d.void retirerEmploye(...)permettant de librer (supprimer) un employ pass en paramtre du tableau des employs de lentreprise sil existe.e.void afficherEntreprise(...)permettant d'afficher lensemble des employs de lentreprise.5.Ecrire un programmemainpermettant de tester lensemble des structures et des fonctions dfinies prcdemment.

Exercice 3 :CorrectionDfinir une structurePolynome, qui reprsente un polynme de degrn, par ses coefficients enregistrs dans un tableau dynamique den + 1nombres rels (float) et le champDegrereprsentant le degr du polynme (le plus grand exposant deXdont le coefficient n'est pas nul). Par exemple, le polynme de degr 4:A(X) = 9.5*X4- 7*X3+ 1.5*X - 2.8, sera reprsent par le champDegre = 4, et par le tableauCoef = {2.8, 1.5, 0, 7, 9.5}de taille5, ocoef[i]est le coefficient deXi.On souhaite dfinir les fonctions suivantes:1.La fonctionvoid initPoly(Polynome * adrP, float tabC[], int t)qui permet dinitialiser lobjet polynme dadresseppar le tableau de nombres relstabCde taillet.Par exemple: SiTest un tableau qui contient les valeurs{2.8, 1.5, 0, 7, 9.5}, lobjet polynmeAdonn comme exemple sera initialis par lappel de:Polynome A;initPoly (&A, T, 5);2.La fonctionvoid detruirePoly(Polynome * adrP)qui permet de dtruire le tableau dynamique de coefficients du polynme dadresseadrP.3.La fonctionfloat valPoly(Polynome p, float X)qui calcule la valeur du polynmeppour une valeur deXdonne. Cette fonction calculera pour le polynme A la valeurA(3) = 9.5* 34 7*33+ 1.5*X - 2.8 = 582.2par linstruction:float v = valPoly(A, 3);4.La fonctionPolynome somme(Polynome p1, Polynome p2)qui permet de retourner le polynme somme des deux polynmesp1etp2.5.La fonctionPolynome produitReel(Polynome p, float x)qui permet de retourner le polynme produit dun polynme et un relx.6.La fonctionPolynome derivee(Polynome p)qui permet de retourne le polynme drive du polynmep.Par exemple, la drive du polynmeAde l'exemple sera :(9.5*4)*X3 (7*3)*X2+ 1.5.N.B.:La drive de a*Xbtant a*b*Xb-1.7.La fonctionvoid afficher(Polynome p)qui permet dafficher le polynmepsous la forme :9.5*X^4 7*X^3 + 1.5*X 2.8Exercice 4 :CorrectionOn veut crire un programme permettant de grer lensemble des livres contenus dans une bibliothque. Pour chaque livre, on conserve les informations suivantes :-le code du livre (code : long),-le titre du livre (titre : chaine de caractres),-le nom de lauteur (auteur : chaine de caractres),-le nombre dexemplaires (nbExpl : long).On souhaite grer une bibliothque permettant de contenir un nombre quelconque de livres (non prdfini). On veut de plus concevoir une structure permettant de faciliter le classement des livres dans la bibliothque.Types et fonctions de bases1.Dfinir le typeLivrequi reprsente correctement un livre.2.Dfinir la fonctionvoid initLivre(Livre * adrLiv, int c, char t[], char a[], int nbE)permettant dinitialiser le code, le titre, lauteur et le nombre dexemplaire dun livre.3.Dfinir la fonctionvoid afficherLivre(Livre liv)qui permet dafficher le contenu dun livre sous forme :code titre nom de l'auteur nombre exemplaire4.Dfinir une fonction permettant de comparer deux livres passs en paramtres. Deux livres sont gaux sils ont le mme code et le mme titre.Remarque :Vous pouvez utiliser la fonctionstrcmpde la bibliothquequi permet de comparer une chaness1et une chanes2. La fonction retourne une valeur ngative sis1s2. Le prototype de la fonction est :int strcmp (const char *s1, const char *s2);5.Expliquez pourquoi une liste chane est une solution lgante ce problme.6.Ecrivez la structureNoeuddune telle liste, chaque nud reprsente un livre de la bibliothque.Ajout dun Livre7.Ecrivez une fonction qui permet de vrifier si un livre est dans une bibliothque, reprsent par une liste de Noeud de livre, ou non.int existeLivre(Noeud * bib, Livre liv): la fonction retourne1si le livre existe dans la liste,0sinon.8.Ecrivez une fonctionvoid ajouterLivre(Noeud ** adrBib, Livre liv)qui permet d'ajouter un livre la fin de liste si le livre nexiste pas dans la liste, sinon il augmente le nombre dexemplaires de ce livre.Fonction de recherche9.Dfinir une fonction qui affiche tous les livres dune bibliothque dont lauteur est pass en paramtrevoid afficherLivresAuteur(Noeud * bib, char auteur[]).10.Dfinir une fonctionint nbrLivresAuteur(Noeud * bib, char auteur[]) qui permet de renvoyer le nombre de livres d'un auteur pass en paramtre.11.Dfinir une fonctionint nbExemplairesBib(Noeud * bib)qui permet de renvoyer le nombre dexemplaire de lensemble des livres de la bibliothque.12.Dfinir une fonctionNoeud * fusionnerBibliotheque(Noeud * bib1, Noeud * bib2)qui permet de renvoyer la fusion de deux liste de livre (bibliothque) passs en paramtre. La fusion rsultante ne doit pas comporter des livres en double.Triage13.Ecrivez une fonctionvoid trierLivres(Noeud ** adrBib) qui permet de trier les livres d'une bibliothque en ordre croissant des cod