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