cours3
Transcription
cours3
Rappel: instructions conditionnelles 2 structures conditionnelles principales: Le si -- sinon si -- sinon: if (expression){ instructions; } else if (expression){ instructions; } else { instructions; } Le switch switch (expression){ case val1: instructions; break; case val2: instructions; break; … default: instructions; } Etapes a suivre pour développer un programme -1-traduction du problème -> Représentation mathématique -2-Identification des variables et des types -3-Décomposition en tâches simples -> Structure générale + fonctions -> écriture du pseudo-code (algo) -4-Transposition dans le langage C Algorithme -> pseudo-code -> C Racines d’un polynôme du second ordre P(x)=a.x2+b.x+c Δ=b2-4.a.c Δ=0 →x0=-b/2a Δ>0 →x1,2=(-b±√∆)/2a Lire réels a,b,c delta=b*b-4*a*c Si (delta==0){ x=-b/2./a; } sinon si (delta>0){ x1=(-b+sqrt(delta))/2./a; x2=(-b=sqrt(delta))/2./a; } sinon{ pas de solution; } #include <stdio.h> int main(){ float a,b,c scanf(“%f %f %f”,&a,&b,&c); float delta=b*b-4.*a*c; if (abs(delta)<1.e-5){ float x=-b/2./a; printf(“un racine reelle: %f”,x); } else if (delta>0){ float x1=(-b+sqrt(delta))/2./a; float x2=(-b-sqrt(delta))/2./a; printf(“deux racines reelles %f %f”,x1,x2); } else { printf(“pas de racine reelle”); } return 0; } Les boucles: tant que (while) Structure du tant que en langage algorithmique: tant que (expression) est vrai, la boucle continue. while (expression) { block d’instructions; } expression retourne une valeur logique vrai/faux Ex: incrémenter x tant que x est plus petit que la valeur 10. Sort de la boucle quand x==10 est vrai int x=0; while(x<10){ x++; } Les boucles: pour (for) init cond. repet. compteur La boucle for est une structure principalement de comptage mais est néanmoins plus générale. for (<expr1>;<expr2>;<expr3>) { block d’instructions; } Ex: exécute une instruction 20 fois. int I; for (I=0;I<20;I++){ instruction; } for est plus général car <expr2> n’agit pas nécessairement sur la même variable que <expr1>. Ex: int x,y; for (x=1;y>30;x++){ y=rand(); } Les boucles: faire tant que (do while) do - while est similaire au while a la différence prêt que le while évalue la condition avant le block d’instructions tandis que le do-while le fait après. do{ block d’instructions; } while (<expr>); Cette structure est moins fréquente que le while mais apporte parfois une solution plus élégante au niveau de l’algorithme. Ex: float N; do { printf(“introduisez un nombre entre 1 et 10:”); scanf(“%f”,&N); } while (N<1 || N >10); Comment choisir la boucle adaptée Si le block d’instructions doit être exécute au moins 1 fois : do-while Si vous connaissez au préalable le nombre d’itérations: for Si le block d’instruction ne doit pas être exécuté si la condition est fausse: while ou for for a le désavantage de favoriser la prog. de structures surchargées while a le désavantage de mener à de longues structures où les conditions de répétitions sont noyées. Les fonctions Utiliser une fonction se fait en deux temps en C: 1-déclaration 2- définition déclaration: avant le main (global) ou dans le main ou une fonction (locale) <TypeRes> <NomFonc> (<TypePar1> [<NomPar1>], <TypePar2> [<NomPar2>],…); définition: après le main <TypeRes> <NomFonc> (<TypePar1> [<NomPar1>], <TypePar2> [<NomPar2>],…) { <déclarations locales>; <instructions>; return; } Les fonctions #include <stdio.h> Commandes préprocesseur (#) float aplusb(float a, float b); Déclaration des fonctions Programme principal int main () { float a,b,c; Déclaration des variables a=1.5; b=3.1; c=0.; Initialisation des variables c=aplusb(a,b); printf(“a+b=%f”,c); Appel des modules/fonctions return 0; } float aplusb(float a,float b) { return a+b; } Définition des fonctions/modules Les fonctions recursives Les fonctions récursives sont des fonctions qui s’appellent elles-même. La déclaration est identique a une déclaration de fonction standard. Pour définir une fonction récursive il faut 1- une condition de récurence int ajout(int x,int N){ 2- une condition d’arrêt if (N==0){ return x; exemple: } else { ajouter N fois 1 à un entier return 1+ajout(x,N-1); } } Portée des variables Les variables définies dans un bloc ({…}) sont disponibles dans le bloc. Re-déclarer dans un bloc une variable supprime toute utilisation de la première variable dans le bloc Ex: int X=199,i; if (X>0){ float X; for (i=0;i<10;i++){ X=i+1.5; printf(“%f\n”,X); } } printf(“%d\n”,X); dans cette partie X sera une variable de type float Exercices: Ex 6: factorielle On désire calculer la factorielle d’un nombre entier. Donner l’algorithme itératif qui permet de le faire et transcrivez le en C. Donner ensuite l’algorithme récursif permettant de calculer la factorielle et transposer le en C. Exercices: Ex 7: devinette Que fait le programme ci-contre? Ecrivez un programme qui permet de faire la même chose mais en utilisant une variable intermédiaire. Int main() { int a,b; printf(“Veuillez entrer 2 entiers\n”); scanf(“%d %d”,&a,&b); b=a+b; a=b-a; b=b-a; printf(“a=%d b=%d\n”,a,b); return 0; }