Support de TP pour Module d'Info3
[Link]
4 janvier 2013
1 Solution de la serie 2 : Les fonctions
1.1 Exercice 1
A l'aide d'une fonction f calculez la distance Euclidienne entre deux points
A et B. 1ere Méthode :
1 #include
#include
< s t d i o . h>
2
#include
<c o n i o . h>
3 <math . h>
4 ∗ ∗/
float float float float float
/ Declaration de la fonction qui calcul la distance Euclidienne
5 EuclidDist ( x1 , y1 , x2 , y2 )
6
float
{
7 dist ;
8 −x1 , 2 ) + pow ( y2−y1 , 2 ) ) ;
return
d i s t =s q r t ( pow ( x2
9 dist ;
10 }
11 ∗ Aquisition ∗/
void
/ des donnees a travers la fonction principale main ( )
12 main ( )
13 {
14 ∗ Declaration ∗/
float
/ des variables
15 x1 , x2 , y1 , y2 , d ;
16 / ∗ A q u i s i t i o n s d e s c o o r d o n n e e s d e A e t B∗ /
17 printf ( " donner les coordonnees de A" ) ;
18 s c a n f ( "%f %f" ,& x1 ,& y 1 ) ;
19 p r i n t f ( " donner les coordonnees de B" ) ;
20 s c a n f ( "%f %f" ,& x2 ,& y 2 ) ;
21 /∗ Appel de l a fonction E u c l i d D i s t ∗/
22 d=E u c l i d D i s t ( x1 , y1 , x2 , y 2 ) ;
23 / ∗ A f f i c h a g e du r e s u l t a t ∗ /
24 printf ( "d =% f" , d ) ;
25 getch ( ) ;
26 }
2eme Méthode :
1 #include
#include
< s t d i o . h>
2 <c o n i o . h>
1
3 #include <math . h>
4 ∗ ∗/
float float float float float
/ Declaration du prototype de la fonction EuclidDist
5
void
EuclidDist ( x1 , y1 , x2 , y2 ) ;
6 main ( )
7
float
{
8 x1 , x2 , y1 , y2 , d ;
9 printf ( " donner les coordonnees de A" ) ;
10 scanf ( "%f %f" ,& x1 ,& y 1 ) ;
11 p r i n t f ( " donner les coordonnees de B" ) ;
12 s c a n f ( "%f %f" ,& x2 ,& y 2 ) ;
13 d=E u c l i d D i s t ( x1 , y1 , x2 , y 2 ) ;
14 printf ( "d =% f" , d ) ;
15 getch ( ) ;
16 }
17 ∗ Declaration ∗/
float float float float float
/ de la fonction qui calcul la distance Euclidienne
18 EuclidDist ( x1 , y1 , x2 , y2 )
19
float
{
20 dist ;
21 −x1 , 2 ) + pow ( y2−y1 , 2 ) ) ;
return
d i s t =s q r t ( pow ( x2
22 dist ;
23 }
1.2 Exercice 2
Écrire une fonction f √
qui ache une table de valeurs f(x) tq :
f (x) = sin(x) + ln(x) − x.
et x compris entre 1 et 10.
1 #include
#include
< s t d i o . h>
2
#include
<c o n i o . h>
3
float float
<math . h>
4 f ( x)
5
float
{
6 y;
7 −sqrt (x );
return
y=s i n ( x)+ l o g ( x)
8 y;
9 }
10
11 void main ( )
12
int
{
13
for
x;
14 ( x = 1 ; x <=10; x++)
15 {
16 printf ( "f(x )=% f\n" , f ( x ) ) ;
17 }
18 getch ( ) ;
19 }
2
1.3 Exercice 3
En utilisant une fonction f calculer l'integrale de f (x) = 1+x
1
5 sur l'intervalle
[a,b] en en utilisant la méthode des trapezes. I = 2 ×[f (a) + f (b) + 2 × ni=1 f (xi )]
h
P
h = b−a
n
xi = a + i × h
1 #include
#include
< s t d i o . h>
2
float float
<c o n i o . h>
3 f ( x)
4
return
{
5 1/(1+ pow ( x , 5 ) ) ;
6
void
}
7 main ( )
8
float
{
9
int
a ,b,n,h,x, I ,S;
10 j ;
11 printf ( " donnez les valeurs de a ,b et n: " ) ;
12 scanf ( "%f%f%f" ,& a ,& b ,& n ) ;
13 h=(b −a ) / n ;
14
for
S =0;
15 ( j = 1 ; j <=n ; j ++)
16 {
17 x=a+ j ∗h ;
18 S=S+ f ( x ) ;
19 }
20 I =(h / 2 ) ∗ ( f ( a )+ f ( b )+2 ∗ S ) ;
21 printf ( "I =% f" , I ) ;
22 getch ( ) ;
23 }
1.4 Exercice 4
En utilisant une fonction f calculer l'integrale de f (x) = 1
1+x6 sur l'intervalle
[a,b] en en utilisant la méthode de SIMPSON.
1 #include
#include
< s t d i o . h>
2
#include
<c o n i o . h>
3 <math . h>
4 ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗ ∗ /
float float
/ declaration de la fonction f
5 f ( x)
6
return
{
7 ( 1 / ( 1 + pow ( x , 6 ) ) ) ;
8 }
9
10 ∗ ∗∗∗∗∗∗∗∗∗∗∗ f o n c t i o n ∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /
void
/ principale main
11 main ( )
12 {
3
13 ∗ ∗∗∗ D e c l a r a t i o n ∗∗∗ ∗ /
float
/ de varibales
14
int
a , b , n , h , S1 , S2 , I ;
15 j ,k;
16
17 /∗ ∗∗∗∗∗ A f f i c h a g e d ' un m e s s a g e d ' a c c u e i l ∗∗∗∗∗∗ ∗ /
18 printf ( "\n\t\t\ tCALCUL DE L ' INTEGRALE I PAR LA METHODE DE SIMPSON \n" ) ;
19 p r i n t f ( "\t\t\t *************************************************\ n" ) ;
20
21 ∗ ∗∗∗∗∗ A q u i s i t i o n d e s d o n n e e s ∗∗∗∗∗∗∗∗ ∗ /
/
22 printf ( " Donnez les valeurs de a ,b et n: " ) ;
23 s c a n f ( "%f%f%f" ,& a ,& b ,& n ) ;
24 h=(b−a ) / n ;
25
26 / ∗ ∗∗∗∗∗∗ C a l c u l de la somme S1=somme ( f ( a +(2 i +1)h ) ) ∗ ∗ ∗ ∗ ∗/
27
for
S1 = 0 ;
28 ( j = 1 ; j <=n ; j ++)
29 {
30 S1=S1+ f ( a +(2 ∗ j +1) ∗ h ) ;
31 }
32
33 / ∗ ∗∗∗∗∗∗ C a l c u l de la somme S2=somme ( f ( a+2 i h ) ∗ ∗ ∗ ∗ ∗/
34
for
S2 = 0 ;
35 ( k = 1 ; k<=n − 1 ; k++)
36 {
37 S2=S2+ f ( a+2 k ∗ ∗h ) ;
38 }
39
40 /∗ ∗∗∗∗∗∗ C a l c u l d e l ' i n t e g r a l e I ∗∗∗∗∗∗∗∗∗∗ ∗ /
41 I =(h / 2 ) ∗ ( f ( a )+ f ( b )+2 ∗ S2+4∗ S1 ) ;
42 p r i n t f ( "I =% f" , I ) ;
43 getch ( ) ;
44 }
1.5 Exercice 5
En utilisant une fonction PAIR, trouver les termes de la suite Un dénie par :
Un /2 siUn paire
Un+1 =
3 × Un + 1 sinon
La suite se termine si un terme vaut 1.
1 #include
#include
< s t d i o . h>
2 <c o n i o . h>
3 ∗ ∗∗∗∗∗∗∗∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
int int
/ Declaration de la fonction p a i r ( nb )
4
int
pair ( nb )
5
if
{ p;
6 ( nb%2==0)
7 p =1;
4
8 else
9
return
p =0;
10 p;
11 }
12 ∗ ∗∗∗∗∗∗∗∗∗∗ F o n c t i o n ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /
void
/ principale main
13 main ( )
14 {
15 ∗ ∗∗∗∗∗∗∗ D e c l a r a t i o n d e s v a r i b a l e s ∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /
int
/
16 / ∗ ∗ Nombre d e t e r m e d a n s l a s u i t e Un ∗∗∗∗ ∗ /
int
n, i ;
17 U0 , p ; / ∗ ∗∗ U0 : P r e m i e r t e r m e d e l a s u i t e ∗∗∗∗∗ ∗ /
18
19 /∗ ∗∗∗∗∗ A f f i c h a g e d ' un m e s s a g e d ' a c c u e i l ∗∗∗∗ ∗ /
20 printf ( "\n\t\t\ tCALCUL DES TERMES DE LA SUITE Un \n" ) ;
21 p r i n t f ( "\t\t\t ********************************\ n" ) ;
22
23 / ∗ ∗∗∗∗∗ A q u i s i t i o n du p r e m i e r t e r m e U0 ∗∗∗∗ ∗ /
24 printf ( " Donnez la valeur du premier terme U0 : " ) ;
25 s c a n f ( "%d" ,&U0 ) ;
26
27 / ∗ ∗∗∗∗ C o n d i t i o n sur U0 ∗∗∗∗ ∗ /
28
while
i =0;
29 ( U0>1)
30 {
31 p=p a i r ( U0 ) ;
32
if
i=i +1;
33
else
( p==1) U0=U0 / 2 ;
34 ∗
U0=3 U0+ 1 ;
35 printf ( "U%d =% d\n" , i , U0 ) ;
36 }
37 printf ( "\ nVous avez soit entrer un nombre inferieur ou egale a 1\ n" ) ;
38 printf ( " Ou bien on a rencontrer un terme qui est egale a 1" ) ;
39 getch ( ) ;
40 }
1.6 Exercice 6
Calculer Fn (x) = 1 + 1!x + x2! + ... + xn! . Et cela en utilisanat trois fonctions
2 n
fact, puiss et terme.
1 #include
#include
< s t d i o . h>
2
#include
<c o n i o . h>
3 <math . h>
4 / ∗ ∗∗∗∗∗∗∗∗ D e c l a r a t i o n d e l a f o n c t i o n f a c t o r i e l l e n! ( Methode iterative ) ∗ ∗ ∗ ∗ ∗ ∗ ∗/
5 / ∗ ∗∗∗∗∗ n != n \ t i m e s ( n − 1)\ t i m e s . . . \ t i m e s 1 ∗∗∗∗ ∗ /
6 int int
int
fact ( m)
7
for
{ i , f =1;
8 ∗i
return
( i = 1 ; i <=m; i ++) f=f ;
9 f ;
10 }
5
11 ∗ ∗∗∗∗∗∗∗∗ D e c l a r a t i o n ∗∗∗∗∗∗∗ ∗ /
float float int
/ de la fonction puissance a^b
12 puiss ( a , b)
13
return
{
14 pow ( a , b ) ;
15 }
16 ∗ ∗∗∗∗∗∗∗∗ D e c l a r a t i o n ∗∗∗∗∗∗∗∗∗∗∗ ∗ /
float float int
/ de la fonction terme y /m
17 term ( y, m)
18
return
{
19 y /m;
20 }
21 ∗ ∗∗∗∗∗∗∗ F o n c t i o n ∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /
void
/ principale main
22
int
main ( )
23
float
{ i , n ,M;
24 x , f n x , Y, T ;
25 printf ( " donnez les valeurs de x et n" ) ;
26 scanf ( "%f%d" ,& x ,& n ) ;
27
for
f n x =1;
28 ( i = 1 ; i <=n ; i ++)
29 {
30 M= f a c t ( i ) ;
31 Y=p u i s s ( x , i ) ;
32 T=t e r m ( Y ,M) ;
33 f n x=f n x+T ;
34 }
35 printf ( " fnx =% f" , f n x ) ;
36 getch ( ) ;
37 }
2 Exercice Supplimentaire
2.1 Exercice sup 1
Ecrire une fonction "fact" qui prend en entrée un nombre entier "n" et
renvoie son factorielle n !. Ecrire ensuite une autre fonction "Comb" qui calcul
la combinaison Cnm = m!×(n−m)!
n!
.
1 #include
#include
< s t d i o . h>
2 <c o n i o . h>
3 / ∗ ∗∗∗∗∗∗∗∗ D e c l a r a t i o n d e la fonction factorielle n! ( Methode recursive ) ∗ ∗ ∗ ∗ ∗ ∗ ∗/
4 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗ n != n \ t i m e s − 1 ) ! ∗∗∗∗ ∗ /
int int
(n
5 fact ( m)
6
if return
{
7
else return ∗
( n==0) 1;
8 (n fact (n −1));
9 }
10 ∗ ∗∗∗∗∗∗∗ D e c l a r a t i o n ∗∗∗∗ ∗ /
float int int
/ de la fonction combinaison
11 comb ( n, m)
12 {
6
13 return ( f a c t ( n ) / ( f a c t (m) ∗ f a c t ( n−m ) ) ) ;
14 }
15 ∗ ∗∗∗∗∗∗∗∗ F o n c t i o n ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /
void
/ main
16 main ( )
17
int
{
18 a ,b;
19 printf ( " donnez les valeurs de a et b" ) ;
20 scanf ( "%d%d" ,& a ,& b ) ;
21 p r i n t f ( " Combinaison a b =% f" , comb ( a , b ) ) ;
22 getch ( ) ;
23 }
2.2 Exercice sup 2
A l'aide des fonction fact et puissance, calculer la valeur de fn(x) denie par :
Fn (x) = 1 − x2! + x4! ... + (−1)n × x2n! .
2 4 2n
1 #include
#include
< s t d i o . h>
2
#include
<c o n i o . h>
3 <math . h>
4 / ∗ ∗∗∗∗∗∗∗∗ D e c l a r a t i o n d e la fonction factorielle n! ( Methode recursive ) ∗ ∗ ∗ ∗ ∗ ∗ ∗/
5 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗ n != n \ t i m e s − 1 ) ! ∗∗∗∗ ∗ /
int int
(n
6 fact ( m)
7
if return
{
8
else return ∗
( n==0) 1;
9 (n fact (n −1));
10 }
11 ∗ ∗∗∗∗∗∗∗∗ D e c l a r a t i o n ∗∗∗∗∗∗∗ ∗ /
float float int
/ de la fonction puissance a ^{b }
12 puiss ( a , b)
13
return
{
14 pow ( a , b ) ;
15 }
16 ∗ ∗∗∗∗∗∗∗∗ D e c l a r a t i o n − 1)^{ n } ∗∗∗∗∗∗∗∗∗∗∗ ∗ /
int int
/ de la fonction sign (
17 sign ( m)
18
return
{
19 pow ( −1 , n ) ;
20 }
21 ∗ ∗∗∗∗∗∗∗ F o n c t i o n ∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /
void
/ principale main
22
int
main ( )
23
float
{ i , n ,M;
24 x , f n x , Y, T ;
25 printf ( " donnez les valeurs de x et n" ) ;
26 scanf ( "%f%d" ,& x ,& n ) ;
27
for
f n x =1;
28 ( i = 1 ; i <=n ; i ++)
29 {
30 M= f a c t ( 2 ∗i );
31 Y=p u i s s ( x , 2 ∗i );
32 T=Y/M;
7
33 f n x=f n x+T ∗ sign ( i );
34 }
35 printf ( " fnx =% f" , f n x ) ;
36 getch ( ) ;
37 }
2.3 Exercice sup 3
A l'aide des fonction fact et puissance, calculer la valeur de fn(x) denie par :
3!+x3 − 5!+x5 · · ·. Avant de commencer à résoudre ce probleme, il est
1+x2 1+x4
EX = 1 +
à noter que la premiere chose à faire est de trouver l'expression du nième terme.
(One peut considéré que EX est la somme d'une série de terme numérique dont
le premier terme est : U 1 = 3!+x 3 ainsi de suite.
1+x2
D'ici on peut déterminer Un qui vaut : U n = (−1)n+1 × (2n+1)!+x 1+x2n
2n+1 . La
deuxiéme chose à faire est de recupérer l'expression générale de EX. Dans ce
cas, on aura : EX = 1 + ni=1 (−1)i+1 × (2i+1)!+x 1+x2i
P
2i+1
Pour le programme, on ne va changer que la partie situé à l'intérieure de la
fonction main().
1 #include
#include
< s t d i o . h>
2
#include
<c o n i o . h>
3 <math . h>
4 / ∗ ∗∗∗∗∗∗∗∗ D e c l a r a t i o n d e la fonction factorielle n! ( Methode recursive ) ∗ ∗ ∗ ∗ ∗ ∗ ∗/
5 / ∗ ∗∗∗∗∗∗∗∗∗∗∗∗ n != n \ t i m e s − 1 ) ! ∗∗∗∗ ∗ /
int int
(n
6 fact ( m)
7
if return
{
8
else return ∗
( n==0) 1;
9 (n fact (n −1));
10 }
11 ∗ ∗∗∗∗∗∗∗∗ D e c l a r a t i o n ∗∗∗∗∗∗∗ ∗ /
float float int
/ de la fonction puissance a ^{b }
12 puiss ( a , b)
13
return
{
14 pow ( a , b ) ;
15 }
16 ∗ ∗∗∗∗∗∗∗∗ D e c l a r a t i o n − 1)^{ n } ∗∗∗∗∗∗∗∗∗∗∗ ∗ /
int int
/ de la fonction sign (
17 sign ( m)
18
return
{
19 pow ( −1 , n ) ;
20 }
21 ∗ ∗∗∗∗∗∗∗ F o n c t i o n ∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /
void
/ principale main
22
int
main ( )
23
float
{ i , n ,M;
24 x , EX, Y , T ;
25 printf ( " donnez les valeurs de x et n" ) ;
26 scanf ( "%f%d" ,& x ,& n ) ;
27
for
EX= 1 ;
28 ( i = 1 ; i <=n ; i ++)
8
29 {
30 M=1+ p u i s s ( x , 2 ∗ i );
31 Y= f a c t ( 2 ∗ i +1)+ p u i s s ( x , 2 ∗ i + 1 ) ;
32 T=Y/M;
33 EX=EX+T ∗ s i g n ( i +1);
34 }
35 printf ( " EX =% f" ,EX ) ;
36 getch ( ) ;
37 }
2.4 Exercice sup 4
Acher soit le triangle suivant :
****
***
**
*
ou bien
****
***
**
*
Et cela en considérant un menu de choix ; 1- triangle 1 et 2 pour le second.
En plus de cela on doit considérer deux fonctions, une pour chaque triangle.
Le but ici, est d'analyser les données que nous avons, comprendre ce que
nous y demander de réaliser. Et enn dénir une démarche à suivre.
Finissons-on avec ce blablabla, en bref les deux fonctions qu'on doit créer
n'aurons besoin que d'un seul paramètre qui est le nombre de ligne (n entier),
et qui nous fournis rien (void).
1 #include
#include
< s t d i o . h>
2 <c o n i o . h>
3 ∗ ∗/
void int
/ Declaration de la fonction triangle normale
4
int
trianNorm ( n)
5
for
{ i , j ;
6 ( i = 1 ; i <=n ; i ++)
7
for
{
8 ( j = 1 ; j <=i ; j ++)
9 { printf ( "*" ) ; }
10 printf ( "\n" ) ;
11 }
12 }
13 ∗ Declaration ∗/
void int
/ de la fonction triangle inverse
14
int
trianInv ( n)
15 { i , j ;
9
16 for ( i = 1 ; i <=n ; i ++)
17
for
{
18 −−)
( j =n ; j >=i ; j
19 { printf ( "*" ) ; }
20 p r i n t f ( "\n" ) ;
21 }
22
void
}
23 main ( )
24
int
{
25 n , choix ;
26 printf ( " donner le nombre de lignes n:" ) ;
27 scanf ( "%d" ,& n ) ;
28 p r i n t f ( " donner votre choix :" ) ;
29 s c a n f ( "%d" ,& c h o i x ) ;
30 switch ( choix )
31
case
{
32
break
1: trianNorm ( n ) ;
33
case
;
34
break
2: trianInv (n ) ;
35
default
;
36 : printf ( " Erreur !" ) ;
37 }
38 getch ( ) ;
39 }
10