TD corrigés : Tests et boucles
Transcription
TD corrigés : Tests et boucles
L3-Mag1 Phys. fond., TD C 13-14 Corrigés Tests et boucles 2013-11-15 01 :01 :40 TD corrigés : Tests et boucles //factorielle.cpp //Calcul de n! #include<iostream> using namespace std; int main() { int i,n,fac; cout << "Valeur de n="; cin >> n; //--------------------------------------cout << "Avec un for : "; for(fac=1,i=1;i<=n;i++) { fac*=i; } cout << n << "!=" << fac << endl; //--------------------------------------cout << "Avec un while : "; fac=1; i=1; while(i<=n) { fac*=i; i++; } cout << n << "!=" << fac << endl; //--------------------------------------cout << "Avec un for infini : "; for(fac=1,i=1;;) { fac*=i; i++; if(i>n) break; } cout << n << "!=" << fac << endl; return 0; } **************************************************************************************** //factorielle_avec_test.cpp //Calcul de i!, montre que le résultat est faux à partir de i=12, en redivisant par i #include <iostream> using namespace std; int main() { int i,imax,fac; imax=15; for(fac=1,i=1;i<=imax;i++) { fac*=i; cout << i << "!=" << fac << " " << i << "!/" << i << "=" << fac/i << endl; } return 0; } 1 page 1 L3-Mag1 Phys. fond., TD C 13-14 Corrigés Tests et boucles 2013-11-15 01:01:40 page 2 **************************************************************************************** //combinaison.cpp //Calcul de c(n,k) pas d’avertissement en cas de dépassement #include<stdlib.h> #include<iostream> using namespace std; int main() { int n,k,c,j; cout << "Valeur de n="; cin >> n; cout << "Valeur de k="; cin >> k; if(k>n-k) k=n-k; // pour utiliser la propriété C(n,k)=C(n,n-k) for(c=1,j=1;j<=k;j++) c=c*(n-j+1)/j; // différent de c*=(n-j+1)/j; ! cout << "C(" << n << "," << k << ")=" << c << endl; return 0; } **************************************************************************************** //pluie.cpp #include <iostream> #include <cmath> using namespace std; int main() { int n,c,j; double p,b; cout << "Nombre de jours de la période = "; cin >> n; cout << "Probabilité d’avoir de la pluie pour un jour donné = "; cin >> p; c=1; j=0; while(j<=n) { b=c*pow(p,j)*pow(1-p,n-j); cout << "Probabilité d’avoir " << j << " jours de pluie sur une période de " << n << " jours = " < j++; c=c*(n-j+1)/j; } return 0; } **************************************************************************************** //suite.cpp #include<iostream> #include<iomanip> #include<cmath> using namespace std; int main(void) { int i,n=10; double a,u,up,eps=1e-15; a=2.; cout << setprecision(15); for(u=a,i=1;i<=n;i++) { 2 L3-Mag1 Phys. fond., TD C 13-14 Corrigés Tests et boucles 2013-11-15 01:01:40 cout << "Nombre d’iterations=" << i-1 << " racine(" << a << ")=" << u << up=(u+a/u)/2; if(fabs(up-u)<eps) {cout << "Convergence atteinte" << endl; break;} u=up; } cout << "Nombre d’iterations=" << i-1 << " racine(" << a << ")=" << u << return 0; page 3 " sqrt(" << a << ")="<< " sqrt(" << a << ")="<< sqrt } **************************************************************************************** //sinus.cpp #include<stdio.h> #include<iostream> #include<iomanip> #include<cmath> using namespace std; int main(void) { int i,imax=9,n; double x,dx=10,xr,u,s,eps=1e-10,coeff=M_PI/180.; for(i=0;i<=imax;i++) { x=i*dx; xr=coeff*x; s=0; u=xr; n=0; do { s+=u; n++; u=-u*xr*xr/(2*n+1)/2/n; } while(fabs(u)>eps); cout << "sin_programme(" << x << ")=" << s << " sin_machine(" << x << ")=" << sin(xr) << endl; } return 0; } **************************************************************************************** //test_egalite_deux_reels.cpp #include<iostream> using namespace std; int main() { int i; double x; x=-1.; for(i=1;i<=10;i++) { x=x+0.1; } if(x!=0.) cout << "x=" << x << " le test trouve x différent de 0" << endl; else cout << "x=" << x << " le test trouve x égal à 0" << endl; return 0; } **************************************************************************************** 3 L3-Mag1 Phys. fond., TD C 13-14 Corrigés Tests et boucles //equation_second_degre.cpp #include<iostream> #include<cmath> using namespace std; int main() { int ind; double a,b,c,x1,x2,delta,rd; a=1.; b=-9.; c=14.; if(a==0.) { if(b==0.) {if(c==0.) ind=3; else ind=0;} else {x1=-c/b; x2=x1; ind=1;} } else { delta=b*b-4.*a*c; if(delta<0.) ind=0; else if(delta==0.) {x1=-b/2./a; x2=x1; ind=1;} else {rd=sqrt(delta); x1=(-b-rd)/2./a; x2=(-b+rd)/2./a; ind=2;} } if(ind==0) cout << "Pas de racines" << endl; if(ind==1) cout << "Une racine : " << x1 << endl; if(ind==2) cout << "Deux racines : " << x1 << " " << x2 << endl; if(ind==3) cout << "Infinité de racines (pas d’équation)" << endl; return 0; } 4 2013-11-15 01 :01 :40 page 4