Beruflich Dokumente
Kultur Dokumente
doc ______________________________________________________________________________
DI GALLO Frdric
PROGRAMMATION
CLASSIQUE : LANGAGE C
___________________________________________________________________
DI GALLO Frdric Page 2 01/04/01
PROGRAMMATION CLASSIQUE EN C
I. LES VARIABLES DE TYPE SIMPLE ...........................................................................4 II. LES VARIABLES DE TYPE STRUCTURE ..................................................................6 III. INTERET DES TYPES SIMPLES & STRUCTURES.....................................................8 IV. LES INSTRUCTIONS DU LANGAGE ........................................................................10 4.1) L'instruction d'affectation..........................................................................................10 4.2) Les instructions dentre-sortie .................................................................................15 4.3) Les instructions de choix ...........................................................................................17 4.4) Les instructions itratives ..........................................................................................20 V. LES FONCTIONS ET LES BIBLIOTHEQUES ...............................................................23 5.1) Utilisation et cration de fonctions ...........................................................................23 5.2) La fonction main() .....................................................................................................27 VI. ANNEXES .........................................................................................................................29 6.1) Calcul des primtres et surface d'un rectangle.........................................................29 6.2) Calcul d'une note arrondie au point.......................................................................29 6.3) Vrification de la majorit..........................................................................................30 6.4) Affichage de l'anne scolaire en cours .......................................................................31 6.5) Somme de deux horaires.............................................................................................32 6.6) Oprations mathmatiques simples ............................................................................33 6.7) PGCD par la division EUCLIDIENNE ......................................................................34 6.8) Connatre le nombre de chiffre d'un entier ................................................................35 6.9) Test des fonctions PGCD et arrondi...........................................................................36
___________________________________________________________________
DI GALLO Frdric Page 3 01/04/01
PROGRAMMATION CLASSIQUE EN C
I. LES VARIABLES DE TYPE SIMPLE
On rappelle quen programmation classique, pour mmoriser une valeur en mmoire centrale, il est ncessaire dintroduire une variable. Celle-ci est dfinie au moyen de deux lments : son nom encore appel identificateur - qui permet daccder la valeur quelle contient et de la manipuler dans lalgorithme ou dans le programme, son type qui prcise la nature de la valeur quelle peut accueillir. Par exemple en C, la dclaration suivante dfinit deux variables destines accueillir respectivement un entier et un caractre. int I ; char C ; Remarque : le langage C distingue les lettres minuscules des lettres majuscules. Les identificateurs i et I dsignent donc deux variables diffrentes. Le type dune variable induit plus prcisment la reprsentation de la valeur en mmoire centrale et donc lespace - en terme doctets - monopolis par cette valeur. Ainsi, le type int permet daccueillir un entier cod en arithmtique signe sur deux octets. Le type char utilise quant lui le code ASCII (un octet) pour reprsenter un caractre. La dclaration dune variable peut donc tre assimile la rservation en mmoire centrale dun emplacement dont la taille dpend de son type. On peut reprsenter de la manire suivante les consquences de la dclaration des deux variables I et C. I 2 octets C 1 octet
Pour la mmorisation des nombres, le langage C propose diffrents types dont la taille dpend de limplmentation en machine. Le tableau ci-dessous prsente les caractristiques des types numriques proposs par TURBO C. Nom du type Nature de la valeur Nbre doctets int Entier sign 2 short Entier sign 2 long Entier sign 4 float Rel 4 double Rel 8 Domaine -32 768 ; 32 767 -32 768 ; 32 767 -2 147 483 648 ; 2 147 483 647 3.4 10 38 ; 3.4 10 38 1.7 10 308 ; 1.7 10 308
Il est important de noter quen C la dclaration dune variable nentrane pas son initialisation et le compilateur signalera une erreur si le programmeur la rfrence sans lavoir initialise. Linitialisation dune variable peut se faire au moment de sa dclaration de la manire suivante : NomDuType NomVariable=Valeur;
___________________________________________________________________
DI GALLO Frdric Page 4 01/04/01
Programmation Classique en C.doc ______________________________________________________________________________ Les valeurs entires sont de type int , mais on peut leur affecter un type long en suffixant leur nom dun l ou dun L . Par exemple la valeur 32L dsigne une valeur entire de type long . De mme les valeurs relles sont par dfaut de type double , mais on peut leur affecter un type float en suffixant leur nom dun f ou dun F . Lors d'une initialisation, il est important de veiller la compatibilit du type de la valeur et de la variable. Le langage C ralise des conversions de type avec ventuellement perte dinformation. Par exemple la dclaration int I=78 934 est accepte par le compilateur C mais entrane laffectation de la valeur 13 398 dans la variable I. La dclaration float tva=5.5 est aussi accepte alors que la valeur 5.5 est de type double alors que la variable destine accueillir la variable est de type float . Il serait plus juste dcrire float tva=5.5f .
___________________________________________________________________
DI GALLO Frdric Page 5 01/04/01
Le tableau denregistrements est un driv des deux types prcdents puisquil sagit
dun tableau 1 dimension dans lequel chaque composant est un enregistrement. Comme pour les variables de type simple, toute dclaration dune variable de type structur entrane la rservation en mmoire centrale dun emplacement dont la structure et la taille dpend du type. Le tableau ci-dessous prsente des exemples de variables de types structurs. Tableau 1 dimension T de 5 entiers 0 1 2 3 4 int T[5]; Tableau 2 dimensions TD dentiers (4 lignes et 3 colonnes) 0 0 1 2 3 int TD[4][3]; struct horaire { int heure; int minute; }; struct horaire H; 1 2 Enregistrement H compos de deux champs : heure, minute heure minute
Laccs aux valeurs contenues dans une variable de type structur est ralis en mentionnant le nom de la variable suivi dune information qui identifie la valeur dans la variable. Par exemple, pour accder au ime composant du tableau T 1 dimension on utilise la rfrence T[i+1] car le premier composant porte le numro 0. Pour accder au composant heure de lenregistrement H, il faut utiliser la notation : H.heure. Exemple de tableau d'enregistrement: Famille Nom Prnom Age 0 C B 18 1 B O 17 2 C B 23 Struct personne Famille[30] Famille[2].age Famille[0] Remarque : pour mmoriser une chane de caractres lune des possibilits en C est de dclarer un tableau 1 dimension de caractres. Par exemple la dclaration char Mess[25] permet de stocker un message dau plus 25 caractres dans la variable Mess.
___________________________________________________________________
DI GALLO Frdric Page 6 01/04/01
Remarque : le bit de plus fort poids est plac dans le composant 0 du tableau Decomp. Combien de composants devra-t-on dclarer pour le tableau Decomp afin quil soit en mesure de mmoriser la dcomposition binaire de tout entier saisi au clavier ? Un entier correspond 2 octets donc 16 bits. Decomp devra donc tre en mesure de contenir 16 composants. On le dclare par int Decomp[16].
___________________________________________________________________
DI GALLO Frdric Page 7 01/04/01
Cette implantation ne se prte pas une exploitation facile car lextraction des monmes constituant le polynme impose la mise en uvre dun traitement complexe sur les chanes de caractres.
Cette reprsentation interne est satisfaisante et permet de dvelopper sans trop de difficults toutes les oprations sur un polynme.
___________________________________________________________________
DI GALLO Frdric Page 8 01/04/01
La reprsentation propose devra permettre une exploitation simple de larborescence et dans un mme temps une optimisation de la mmoire. Lexploitation concerne les oprations lmentaires que lon peut effectuer sur un arbre cest--dire : - la consultation du pre, des fils et des frres dun sommet, - lajout et la suppression dun sommet. Info A B E F I J Avec racine: 0 Fils gauche Fils droit 1 2 3 0 4 5 0 0 0 0 0 0
___________________________________________________________________
DI GALLO Frdric Page 9 01/04/01
Les oprateurs +, -, *, / peuvent tre combins avec laffectation. Ainsi lexpression i += j est quivalente i = i + j . Les deux derniers oprateurs sont unaires. Leur rle est dincrmenter ou de dcrmenter le contenu de la variable. Ainsi, les expressions ++i ou i++ ajoute une unit la variable i. Lorsquils sont intgrs lexpression dune affectation il est important de noter quils modifient le contenu de la variable laquelle ils sont attachs. Dans une telle situation laffectation ne modifie plus seulement le contenu de la variable place gauche du signe =. Selon la position de loprateur par rapport la variable (avant ou aprs) lvaluation de lexpression composant le membre droit de laffectation prendra la valeur de la variable avant quelle soit modifie ou aprs.
___________________________________________________________________
DI GALLO Frdric Page 10 01/04/01
Programmation Classique en C.doc ______________________________________________________________________________ Dans lexemple suivant les deux affectations modifient le contenu de la variable i qui prend la valeur 3. La premire affectation renvoie la valeur 2 j alors que la seconde renvoie la valeur 3. void main() { int i =2; int j; j=i++ ; j=++i ; } En plus des oprateurs cits dans le tableau ci-dessus, il existe loprateur ternaire qui permet linclusion dune expression conditionnelle dans le calcul dune expression. Sa syntaxe a la valeur suivante : (expression logique) ? ExpressionSiVrai : ExpressionSiFaux. Par exemple, lexpression (i>0) ?i*2 :i+2, renvoie le produit de i par 2 si i est strictement positif et le rsultat de lajout de 2 i si i est ngatif ou nul.
MontantAPayer = (NbProduits>3)?TotalAchats-(TotalAchats*0.20):TotalAchats; }
___________________________________________________________________
DI GALLO Frdric Page 11 01/04/01
Auto-valuation 1:
___________________________________________________________________
DI GALLO Frdric Page 12 01/04/01
Programmation Classique en C.doc ______________________________________________________________________________ Lvaluation de toute expression repose dune part sur les rgles de priorit entre les oprateurs en labsence dun parenthsage et dautre part sur les types des oprandes qui constituent lexpression. Pour ce dernier point, il est utile de savoir que lordinateur ne sait calculer une expression arithmtique de la forme oprande1 oprateur oprande2 que lorsque les deux oprandes sont du mme type. Lorsque ce nest pas le cas, lordinateur transforme le type de lun des oprandes pour que les deux membres deviennent du mme type. La conversion applique suit une hirarchie destine ne pas perdre linformation. Ainsi lorsque lon a une variable de type float et une variable de type int il y aura conversion automatique de la seconde variable en float . Le rsultat obtenu est toujours du mme type que celui des deux oprandes. Avec un tel principe le rsultat de lexpression 5/2 est gal 2 et non 2.5 car 5 et 2 sont des valeurs de type int . En revanche, lexpression 5/2f fournit 2.5 comme rsultat car lordinateur convertit en float les deux oprandes.
L'oprateur de transtypage:
Loprateur de cast encore appel oprateur de transtypage - permet de modifier le type dune variable dans une expression arithmtique. Cet oprateur qui a une priorit suprieure aux oprateurs arithmtiques usuels scrit en entourant par des parenthses le type vers lequel on veut transformer une expression. Le programme ci-dessous illustre le principe de cet oprateur. void main() { int i=5,j=2 float x ; x=i/j; x=(float)i/j; x=(float)(i/j); }
/* le rsultat est 2 car i et j sont des entiers ; le rsultat est donc un entier */ /* le rsultat est 2.5 car loprateur (float) (prioritaire par rapport la division) */ /* a transform le type de la variable i en float ; le rsultat est donc un float */ /* le rsultat est 2 car la division est value et donne un entier qui est ensuite */ /* transform en rel */
___________________________________________________________________
DI GALLO Frdric Page 13 01/04/01
Programmation Classique en C.doc ______________________________________________________________________________ I + J Oprande 1 Oprateur Oprande 2 Type T1 Type T2 oui T <- T1 T1 = T2 non
Conversion de type Soit T1 vers T2 Soit T2 vers T1
Le rsultat est de type T Sens de la conversion int --------- > float ------>double
b) Indiquer les cast qui sont inutiles. 1.5+(float)i/j; 1.5+(float)(i+1)/(float)j +5/i; 1+(float)(i/2f)+(float)(i/j);
___________________________________________________________________
DI GALLO Frdric Page 14 01/04/01
Par exemple, linstruction scanf ( %d ,&I) permet dacqurir un entier et de le stocker dans la variable I de type int . Lexpression &Variable correspond ladresse de la variable. Cest le contenu de cette adresse qui sera valorise par la fonction scanf ().
Linstruction printf():
Elle permet dafficher lcran un message pouvant intgrer des expressions faisant rfrence des variables de type simple ou des composants de variables de type structur. Le format prcise le type de la valeur contenue dans la variable cite. Il peut prendre de nombreuses valeurs mais on se limitera aux mmes valeurs que pour linstruction scanf(). Syntaxe : printf ( Message format , variable ou expression)
Par exemple, linstruction printf ( le double de %d est %d\n, I, I*2) affiche le message le double de 5 est 10 si le contenu de la variable I est 5. Le caractre \n provoque un retour la ligne aprs laffichage du message.
___________________________________________________________________
DI GALLO Frdric Page 15 01/04/01
___________________________________________________________________
DI GALLO Frdric Page 16 01/04/01
___________________________________________________________________
DI GALLO Frdric Page 17 01/04/01
#include <stdio.h>
void main() { int a,b,result,B=0,encore=0; char operateur; do { clrscr(); /* efface l'cran */ printf ("\noprande n1 : "); /* Affiche l'interrogation */ scanf ("%d",&a); /* rcupre l'oprande date saisie par l'utilisateur */ printf ("\noprateur (+,*,-) : "); scanf ("%s",&operateur); printf ("\noprande n2 : "); /*on demande l'oprande n2 */ scanf ("%d",&b); switch (operateur) { case '+': { result=a+b; break; } case '-': { result=a-b; break; } case '*': { result=a*b; break; } default : { printf ("\n\nl'oprateur saisie n'est pas correct"); B=1;} } if (B==0) printf ("\n\nRsultat : %d",result); getch(); /* attente de validation */ printf ("\n\n Voulez vous encore jouer (entrez 1 pour Oui)?"); scanf ("%d",&encore); /* on rcupre la rponse */ } while (encore==1); /* si la rponse est 1, on relance la boucle */ } /* fin */
___________________________________________________________________
DI GALLO Frdric Page 18 01/04/01
/* Dclaration d'un type date */ /* 1ere case : entier jour */ /* 2ieme case : entier mois */ /* D du type date contiendra la date saisie */
do { clrscr(); /* efface l'cran */ printf ("\nhoraire n1 : "); /* Affiche l'interrogation */ scanf ("%d:%d",&H1.heure,&H1.minute); /* rcupre la date saisie par l'utilisateur */ printf ("\n\nhoraire n2 : "); /*on crit l'anne scolaire en cours */ scanf ("%d:%d",&H2.heure,&H2.minute); H3.heure=H1.heure+H2.heure; H3.minute=H1.minute+H2.minute; if (H3.minute>=60) { H3.minute-=60; H3.heure++; } if (H3.heure>=24) H3.heure-=24; printf ("\n\nSomme des horaires : %d:%d",H3.heure,H3.minute); getch(); /* attente de validation */ printf ("\n\n Voulez vous encore jouer (entrez 1 pour Oui)?"); scanf ("%d",&encore); /* rcupre la rponse */ } while (encore==1); /* si la rponse est 1, on relance la boucle */ } /* fin */
___________________________________________________________________
DI GALLO Frdric Page 19 01/04/01
Instruction TqueFinTQ Instruction algorithmique TantQue Condition Faire Bloc d'instructions FinTQ Rpter Bloc d'instructions Jusqu Condition Pour Compteur Valeur initiale Valeur finale Bloc d'instructions FinPour
Traduction en langage C while (Condition) { Bloc dinstructions } do { Bloc dinstructions } while (!(Condition)) For (Compteur=Valeur initiale ;Compteur <=Valeur finale ; Compteur ++) { Bloc dinstructions }
Remarques : Si le bloc dinstructions est limit une seule, on peut se dispenser des accolades. La condition spcifie dans linstruction do while est la ngation de la condition exprime dans le Rpter jusqu . Lexcution de linstruction : for(expression1 ;expression2 ;expression3) {bloc dinstructions} est quivalente la squence dinstructions suivante : Evaluer expression1 While (Expression2) { bloc dinstructions Evaluer expression3 }
___________________________________________________________________
DI GALLO Frdric Page 20 01/04/01
___________________________________________________________________
DI GALLO Frdric Page 21 01/04/01
Application 2: Ecrire le programme C qui affiche le nombre de chiffres qui compose un entier positif saisi au clavier :
#include <stdio.h> void main() { int i=0,test=0; struct stat { int valeur; int effectif; }; struct stat tstat[100]; clrscr(); do { printf ("\n\nEntrer la valeur de la case %d du tableau : ",i); scanf ("%d",&tstat.valeur[i]); printf ("\n\nEntrer l'effectif de la case %d du tableau : ",i); scanf ("%d",&tstat.effectif[i] while (entier>9) { i++; entier/=10; } printf ("\n\nNombre de chiffres : %ld",i); getch(); i=1; printf ("\n\nVoulez vous continuer (Oui=1) :"); scanf ("%ld",&test); } while (test==1);
___________________________________________________________________
DI GALLO Frdric Page 22 01/04/01
V.
Dans ce paragraphe, seuls les modules admettant: - 0 n paramtres dentre - 0 ou 1 paramtre de sortie seront traits et seront dsigns par le terme de fonction. Cette terminologie diffre en algorithmique. Dans ce domaine, on appelle, en effet, fonction les modules qui admettent 1 et 1 seul paramtre de sortie, et procdure les autres modules Une fonction est un outil destine faciliter le dveloppement dapplications. Ainsi, le langage C fournit dans des bibliothques, des fonctions pour rpondre aux besoins de diverses applications. Par exemple, la bibliothque math.h regroupe diffrentes fonctions trigonomtriques et logarithmiques. Pour pouvoir utiliser les fonctions dune bibliothque il faut spcifier la clause #include <NomDeLaBibliothque> en dbut de programme. Le programme C ci-dessous utilise la fonction sqrt de la bibliothque math.h pour calculer les solutions de lquation du second degr ax2+bx+c=0. #include <math.h> void main()
___________________________________________________________________
DI GALLO Frdric Page 23 01/04/01
Programmation Classique en C.doc ______________________________________________________________________________ {float a,b,c,delta ; delta =b*b-4*a*c ; if (delta < 0) printf ( pas de solution relle\n ) ; else if (delta == 0) printf ( la solution double est : %f\n ,-b/(2*a)) ; else { printf ( la premire solution est : %f\n ,(-b-sqrt(delta))/(2*a)) ; printf ( la seconde solution est : %f \n, (-b+sqrt(delta)/(2*a)) ; } } Le programmeur peut aussi crer ses propres fonctions et ensuite les intgrer dans une bibliothque afin de les mettre la disposition dautres programmeurs. En C, la cration dune fonction respecte la syntaxe suivante : TypeRes NomFonction (Liste des paramtres d'entre) { Dclaration des variables locales Liste des instructions } Remarques : Chaque paramtre dentre est dcrit par son type suivi de son nom ; les paramtres dans la liste sont spars par une virgule. Dans le cas o la fonction ne renvoie aucun rsultat, cest le mot cl void qui est spcifi avant le nom de la fonction. Dans le cas o la fonction renvoie un rsultat, cest linstruction return (Expression) qui permet de renvoyer au programme appelant le rsultat souhait. Les exemples ci-dessous prsentent deux fonctions : lune charge de renvoyer le primtre dun rectangle partir des deux paramtres dentre reprsentant la longueur et la largeur, lautre charge dafficher ce mme primtre. int Perimetre(int Largeur, int longueur) { return (2*(Largeur+Longueur)) ; } void AffichePerimetre (int Largeur, int Longueur) { printf ( le primtre est : %d ,2*(Largeur+Longueur)) }
___________________________________________________________________
DI GALLO Frdric Page 24 01/04/01
Programmation Classique en C.doc ______________________________________________________________________________ Dans le programme appelant, il va de soi que lappel de la fonction diffre totalement selon si la fonction renvoie 0 ou 1 rsultat. Ainsi une fonction de type void doit sutiliser comme une instruction, alors quune fonction qui renvoie un rsultat doit tre intgre une instruction algorithmique. Ce propos est illustr par les appels des deux fonctions prsentes ci-dessus. void main() { printf( le primtre dun rectangle de largeur 2 et de longueur 4 est : %d , Perimetre(2,4)) ; AffichePerimetre(2, 4) ; }
___________________________________________________________________
DI GALLO Frdric Page 25 01/04/01
___________________________________________________________________
DI GALLO Frdric Page 26 01/04/01
___________________________________________________________________
DI GALLO Frdric Page 27 01/04/01
Programmation Classique en C.doc ______________________________________________________________________________ Travaux pratiques 1. On souhaite construire la bibliothque fraction.h destine raliser les oprations suivantes sur les fractions : - initialiser une fraction partir de la donne dun numrateur et dun dnominateur - afficher une fraction sous la forme : numrateur/dnominateur - ajouter deux fractions - multiplier deux fractions - diviser deux fractions - calculer linverse dune fraction - mettre sous forme irrductible une fraction a) Proposer une reprsentation interne pour implanter en mmoire centrale une fraction. b) Dfinir en C, pour chacune des oprations cites, linterface de la fonction charge de la raliser. c) Ecrire en langage C le contenu de chacune des fonctions. Les tester sur machine.
2. On souhaite construire la bibliothque periode.h destine raliser les oprations suivantes sur des priodes horaires caractrises par un horaire dbut (exprim en heure minute) infrieur un horaire fin (exprim en heure minute). - initialiser une priode partir de la donne dun horaire dbut et dun horaire fin. On suppose que lhoraire dbut est infrieur lhoraire fin - afficher une priode sous la forme [hh1 :mm1 ;hh2 :mm2] - calculer lintersection entre deux priodes ; dans le cas o la priode rsultat est vide, la priode [00 :00 ;00 :00] sera renvoye. - Calculer le nombre de minutes associe une priode a) Proposer une reprsentation interne pour implanter en mmoire centrale une priode ainsi dfinie. b) Dfinir en C, pour chacune des oprations cites, linterface de la fonction charge de la raliser. c) Ecrire en C le contenu de chacune des fonctions. Les tester sur machine.
___________________________________________________________________
DI GALLO Frdric Page 28 01/04/01
VI. ANNEXES
6.1) Calcul des primtres et surface d'un rectangle
#include <stdio.h> void main() { float surface, perimetre, longueur, largeur; clrscr(); printf ("Saisir la longueur: "); scanf ("%f",&longueur); printf ("\nSaisir la largeur: "); scanf ("%f",&largeur); perimetre=2*(longueur+largeur); surface=longueur*largeur; printf("\n\nle primtre est %f et la surface est %f",perimetre,surface); getch(); }
___________________________________________________________________
DI GALLO Frdric Page 29 01/04/01
___________________________________________________________________
DI GALLO Frdric Page 30 01/04/01
___________________________________________________________________
DI GALLO Frdric Page 31 01/04/01
/* Dclaration d'un type date */ /* 1ere case : entier jour */ /* 2ieme case : entier mois */ /* D du type date contiendra la date saisie */
do { clrscr(); /* efface l'cran */ printf ("\nhoraire n1 : "); /* Affiche l'interrogation */ scanf ("%d:%d",&H1.heure,&H1.minute); /* rcupre la date saisie par l'utilisateur */ printf ("\n\nhoraire n2 : "); /*on crit l'anne scolaire en cours */ scanf ("%d:%d",&H2.heure,&H2.minute); H3.heure=H1.heure+H2.heure; H3.minute=H1.minute+H2.minute; if (H3.minute>=60) { H3.minute-=60; H3.heure++; } if (H3.heure>=24) H3.heure-=24; printf ("\n\nSomme des horaires : %d:%d",H3.heure,H3.minute); getch(); /* attente de validation */ printf ("\n\n Voulez vous encore jouer (entrez 1 pour Oui)?"); scanf ("%d",&encore); /* rcupre la rponse */ } while (encore==1); /* si la rponse est 1, on relance la boucle */ } /* fin */
___________________________________________________________________
DI GALLO Frdric Page 32 01/04/01
void main() { int a,b,result,B=0,encore=0; char operateur; do { clrscr(); /* efface l'cran */ printf ("\noprande n1 : "); /* Affiche l'interrogation */ scanf ("%d",&a); /* rcupre l'oprande date saisie par l'utilisateur */ printf ("\noprateur (+,*,-) : "); scanf ("%s",&operateur); printf ("\noprande n2 : "); /*on demande l'oprande n2 */ scanf ("%d",&b); switch (operateur) { case '+': { result=a+b; break; } case '-': { result=a-b; break; } case '*': { result=a*b; break; } default : { printf ("\n\nl'oprateur saisie n'est pas correct"); B=1;} } if (B==0) printf ("\n\nRsultat : %d",result); getch(); /* attente de validation */ printf ("\n\n Voulez vous encore jouer (entrez 1 pour Oui)?"); scanf ("%d",&encore); /* on rcupre la rponse */ } while (encore==1); /* si la rponse est 1, on relance la boucle */ } /* fin */
___________________________________________________________________
DI GALLO Frdric Page 33 01/04/01
#include <stdio.h> void main() { int a,b,r=1; clrscr(); printf ("\n\nValeur de a : "); scanf ("%d",&a); printf ("\nValeur de b : "); scanf ("%d",&b); r=a%b; while (r!=0) { a=b; b=r; r=a%b; } printf ("\n\nLe PGCD est : %d",b); getch(); }
___________________________________________________________________
DI GALLO Frdric Page 34 01/04/01
___________________________________________________________________
DI GALLO Frdric Page 35 01/04/01
___________________________________________________________________
DI GALLO Frdric Page 36 01/04/01
___________________________________________________________________
DI GALLO Frdric Page 37 01/04/01
___________________________________________________________________
DI GALLO Frdric Page 38 01/04/01