0% ont trouvé ce document utile (0 vote)
14 vues10 pages

Calculs de fonctions et intégrales en C

Ce document présente un support de travaux pratiques pour un module d'informatique, incluant plusieurs exercices sur les fonctions en C. Les exercices couvrent des sujets tels que le calcul de la distance euclidienne, l'évaluation de fonctions mathématiques, et le calcul d'intégrales à l'aide de méthodes numériques. Chaque exercice est accompagné de code source en C pour illustrer les concepts abordés.

Transféré par

Mohamed Lichouri
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
14 vues10 pages

Calculs de fonctions et intégrales en C

Ce document présente un support de travaux pratiques pour un module d'informatique, incluant plusieurs exercices sur les fonctions en C. Les exercices couvrent des sujets tels que le calcul de la distance euclidienne, l'évaluation de fonctions mathématiques, et le calcul d'intégrales à l'aide de méthodes numériques. Chaque exercice est accompagné de code source en C pour illustrer les concepts abordés.

Transféré par

Mohamed Lichouri
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi