Vous êtes sur la page 1sur 8

OFPPT

Office de la Formation Professionnelle et de la


Promotion du Travail

Projets :
Filire
Dure
Form ateur

: TDI : Gr B & C
: 1 m ois
:AHBOUZ Must apha

Documents : autoriss
Modules : Technique & Langage de programmation structure (Langage C)

Projet 1:

Cahier de charge1:
Petit avant got de ce qui pourrait tre demand l'examen: le logiciel fourni ne
peut pas tre install sur un ordinateur, il faut donc analyser la situation.Un collge
doit raliser un programme simple: une calculatrice, crite en langage C, qui
permet d'effectuer les quatre oprations (addition, soustraction, division et

multiplication) sur deux nombres entier introduit par l'utilisateur.


Part one:

Votre travail consiste :


- rechercher les diffrentes fonctions dfinies dans le programme Calculette.c
- dessiner le programme sous forme de schma, en reprsentant les fonctions
l'aide de blocs . De placer les variables aux endroits adquat.
- A l'aide du schma, dterminez les variables locales chacune des fonctions, ainsi
que les variables globales ?
Correction:
//Calculette.c
#include<stdio.h>
static float rsultat ; // rsultat est une variable globale
int main( )
{
int a, b;
// a et b sont des variables locale la fonction main()
menu();
printf("Entrer la premiere valeur ");
scanf( %d ,&a );
printf ("Entrer la seconde valeur ");
scanf( %d ,&b );
calculer();
afficher();
return 0 ;
}
void calculer()
{
char opration ;
// opration est une variable locale la fonction calculer()
switch (opration) {
case '+' : rsultat = a + b ;break ;
case '-' : rsultat = a - b ;break ;
case '/' : rsultat = a / b ;break ;
case '*' : rsultat = a * b ;break ;
}
}
void afficher()
{
char opration ;
//opration est une variable locale la fonction afficher()
printf (" %d
%c
%d
=%f\n ",a, opration,b, rsultat);
}
void menu()

{
char opration;
// opration est
printf ("Je sais
printf (" + pour
printf (" - pour
printf (" * pour
printf (" / pour
printf (" (+, -,

une variable locale la fonction menu()


compter, entrez l'opration choisie") ;
additionner ") ;
soustraire ") ;
multiplier ") ;
diviser ") ;
*, /) ? : ") ;

scanf( %c ,&opration );
}

Questions: Aprs excution de la fonction menu( ) et lecture des deux valeurs


numriques a et b, la fonction calculer ( ) peut-elle raliser l'opration demande?
Pourquoi?
Part two:
Pour corriger le programme Calculette.c, nous supposons prsent que les
variables rsultat et oprations sont dclares en tant que variables globales et non
plus localement aux fonction afficher() et menu().
Questions: quelle technique devez vous utiliser pour que les fonctions calculer() et
afficher() connaissent le contenu des variables a et b, afin d'effectuer ensuite les
instructions qui les composent?
crivez les fonctions en utilisant cette technique
Nous supposons que le programme calculette ne contienne plus de variable
globales. Les variables rsultat et opration sont maintenant dclares localement
aux fonctions qui les utilisent.
1. Quelles sont les consquences de cette nouvelle hypothse sur le rsultat du
programme?
2. Comment la fonction Calculer( ) peut-elle connatre l'oprateur choisi par
l'utilisateur dans la fonction menu( )?
3. Transformez la fonction menu() de telle sorte que l'oprateur soit transmis la
fonction main( ).
4. Modifier la fonction calculer() de sorte lui transmettre l'oprateur fourni par la
fonction menu().
5. Comment la fonction afficher() peut-elle connatre le rsultat de la fonction
calculer?
6. Transformez la fonction calculer() de telle faon que le rsultat soit transmis la
fonction main().

7. Enfin, modifiez la fonction afficher() de sorte lui transmettre le rsultat fourni


par la fonction calculer().

FIN
Projet 2:

Pour mettre en application se que nous avons vu en cours, je vous propose dtudier
le projet : MAAC (Machine Automatique A Coca, a nous changera du caf..).
Pour raliser ce projet nous devons construire une boucle do..while, mais nous
aurons aussi a compter et a accumuler des valeurs. Il faut dire que le comptage des
valeurs, quelles quelles soient, tiennent une grande place dans les listings
informatiques. Il existe au moins deux mthodes :
- La comptage dun certain nombre de valeurs. (On compte le nombre de notes
obtenues par un tudiant).
- Laccumulation de valeurs (les notes de ltudiant sont ajoutes les unes aux
autres).
Ainsi le calcul de la moyenne des notes dun tudiant seffectue en divisant
laccumulation des notes par le nombre (ou comptage) des notes obtenues.
Notre objectif : construire une machine virtuelle qui simulerait de faon simplifie
un distributeur automatique de coca.

Cahier de charge2:
Pour obtenir une canette, lutilisateur doit fournir le montant indiqu en
introduisant un certain nombre de pices de monnaie dans le distributeur. Celui ci
naccepte que les pices de (5, 10, 20 cents deuro). Au fur et mesure de
lintroduction des pices le distributeur affiche la valeur totale engage, ainsi que le
nombre de pices par catgorie (nombres de pices de 5, 10) Le distributeur
dclenche louverture de la trappe canette ds que le montant atteint (ou dpasse,
car elle rend la monnaie) le prix indiqu, savoir 45 cents1 deuro (Prix dami).
Voil, il ne vous reste plus qua faire le programmemais non je plaisante, nous
allons le faire ensemble.
Dabord analysons ce cahier des charges. Le processus se droule en trois tapes :
- 1. Introduire une une des pices dans le distributeur.
- 2. Pour chaque pice engage, il faut calculer et afficher :
- 2.1. le nombre de pice de 20, 10 et 5 cents.
- 2.2. la somme totale actuellement engage.
- 3. Le prix fix est il atteint ou dpass ?
- 3.1. Non et dans ce cas on revient la premire ligne dinstruction
- 3.2. Oui, alors on libre la trappe, on distribue la canette et on rend la monnaie si
il y a lieu.
Tous les grands stratges vous le diront : Il faut diviser, pour rgner ! traduit
dans le monde informatique cela revient dire quil faut essayer de rsoudre les
petits problmes qui constituent le grand ! Et cest ce que nous allons faire en
essayant de trouver une solution pour chacun des points prcdents.
Premirement : Construction de la boucle et introduction des pices.
En pratique, les points 1 et 3.1 dcrivent une structure de boucle. Lintroduction
des pices dans la fente du distributeur est une opration rptitive, qui ne sarrte
que lorsque lutilisateur engag suffisamment de pices dans lappareil (c a d

quand le montant du prix est atteint ou dpass), on peut donc crire lalgorithme
suivant :
Dbut rpter
Entrer une pice de monnaie
Compter la somme engage
Tant que la somme engage ne dpasse pas 45 cents, retourner Dbut rpter.
Essayons de le traduire en langage C :
do // cest le Dbut rpter
{
// Entrer une pice de monnaie
// Compter la somme engage
}
while (somme engage < 45) ; // et fin de la boucle
Ici, nous avons respect lalgorithme, on ne sort de la boucle que lorsque le
montant de 45 cents est atteint, ensuite pour simuler lintroduction des pices par
lutilisateur, notre programme demandera une saisie au clavier.
Nous pouvons crire par exemple :
printf ( montant de votre pice : ) ;
scanf( %d ,&pice) ;

Deuximement : compter le nombre de pices et faire la somme totale


Pour compter le nombre de pices, notre programme doit pouvoir faire la
distinction entre les diffrentes catgories de pices. On va donc dclarer autant de
variables quil y a de catgorie :
short nbPice20c = 0, nbPice10c = 0, nbPice5c = 0, pice, totalReu = 0 ;
On aussi dclarer une variable pice qui accueil la valeur saisie au clavier
ainsi qu une variable totalReu qui reprsente la somme totale engage en
cours dexcution de la boucle. On sait que ces valeurs ne dpasserons pas 127
donc on leurs affecte un type short.
Pour arriver nos fins, compter sparment les pices de monnaies par catgories,
la meilleur mthode consiste placer dans la boucle do..while une structure switch
qui distinguera 4 cas :
switch (pice)
{
case 5 :
// Compter les pices de 5 cents
break ;
case 10 :

// Compter les pices de 10 cents


break ;
case 20 :
// Compter les pices de 20 cents
break ;
default :
printf ( Votre pice nest pas autorise : ) ;
}

Suivant la valeur de la pice engage, le programme compte le nombre de pice


pour chacune des catgories en utilisant une instruction du type :
a = a+1 ;
O a reprsente lobjet compter. Si la variable e est initialise 0, la nouvelle
valeur de a, aprs affectation, vaut 1. Plac dans une structure rptitive, le nombre
dobjet reprsent par a augmente de 1 chaque tour de boucle. En jargon
informatique on dit que a est incrment de 1. Dans notre problme, pour compter
le nombre de pices, il suffit de remplacer la variable a par : nbPice20c,
nbPice10c ou nbPice5c, nous obtenons alors :
nbPice20c = nbPice20c + 1 ;
nbPice10c = nbPice10c + 1 ;
nbPice5c = nbPice5c + 1 ;
Il ne nous reste plus ensuite qua copier ces instruction dans les tiquettes
Compter les pices de la structure switch
Pour calculer la somme totale engage chaque pice introduite, la technique est
un peu diffrente de la prcdente. En effet, la somme engage doit tre augmente
non plus du nombre de pices introduite, mais de la valeur de la pice. Lincrment
lui aussi nest plus de 1 mais correspond la valeur de la pice. Linstruction
daccumulation est la suivante :
TotalReu = TotalReu + pice ;
Cest ainsi que la variable totalReu, initialise zro, augmente progressivement
de la valeur de chaque pice engage, par accumulation de la valeur prcdente de
totalReu avec la valeur de la pice entre.
Constat : ce calcul est ralis quelle que soit la valeur de la pice, du coup, on
placera linstruction en dehors de la structure swich, mais lintrieur de la boucle.
Mais attention, pour viter daccumuler dans totalReu la valeur dune pice non
autorise, il nous faut modifier la valeur de la pice dans ltiquette default de la
structure switch par linstruction :
Default :
Pice = 0 ;
printf ( pice interdite ) ;

Ainsi lorsquune mauvaise pice est introduite, la variable pice prend la valeur
0 afin de ne pas modifier indment la variable totalReu.
On viens de faire le plus difficile, reste a afficher les diffrentes valeurs
correspondantes au nombre de pices comptes et au montant total calcul. On
utilisera des instructions du genre :
printf
printf
printf
printf
printf

( vous avez entr : ) ;


(%d pice(s) de 5 cents \n, nbPice5c) ;
(%d pice(s) de 10 cents \n , nbPice10c) ;
(%d pice(s) de 20 cents \n , nbPice20c) ;
( soit au total : %d cents \n , totalReu) ;

Question : est o place ton ces instructions ? Avant le test de sortie de la boucle,
bien sr ! (Puisque les valeurs calcules sont afficher, chaque fois que lutilisateur
entre une pice.)
Troisimement : Le prix fix est il atteint ou dpass
Quand le montant du prix est atteint, le programme le signale par linstruction :
printf ( Merci, je vous donne votre boisson ! ) ;
Enfin il nous reste un dernier dtail rgler, la dtection du trop peru : on test si la
variable totalReu dpasse 45, et si tel est le cas, on calcul la monnaie rendre :
If (totalReu > 45)
printf ( et je vous rends %d-45 cents\n , totalReu) ;
Voil, cest ici que je vous quitte. Jai fait le gros de lanalyse et je vous laisse le
soin de raliser le programme completque nous appellerons CompteurMonnaie.c
(par exemple).

FIN

Vous aimerez peut-être aussi