• Aucun résultat trouvé

Langage C avancé pour la simulation numérique Examen du 10 janvier 2013

N/A
N/A
Protected

Academic year: 2022

Partager "Langage C avancé pour la simulation numérique Examen du 10 janvier 2013"

Copied!
3
0
0

Texte intégral

(1)

MASTER 2 MPM Université Paris XIII

Année 2012-2013 Institut Galilée

Langage C avancé pour la simulation numérique Examen du 10 janvier 2013

Durée : 3h

Aucun document autorisé Aucun appareil electronique autorisé

Exercice 1 : (4 points)

Listing 1: exo9.c

1

#include <s t d i o . h>

2

#include <math . h>

3

4

void f 1 ( int i , int * j , double *x , double y ) ;

5

6

int main ( ) {

7

int i =1, j =2;

8

double x =3. , y=M_PI;

9

10

f 1 ( i ,& j ,&x , y ) ;

11

p r i n t f ( "main: i=%6d, j =%6d, x =%.16lf , y=%.16 lf\n" , i , j , x , y ) ;

12

f 1 ( j ,& i ,&y , x ) ;

13

p r i n t f ( "main: i=%6d, j =%6d, x =%.16lf , y=%.16 lf\n" , i , j , x , y ) ;

14

return 1 ;

15

}

16

17

void f 1 ( int i , int * j , double *x , double y ){

18

(* j )++;

19

i ;

20

*x=y / 2 . ;

21

y*=2;

22

p r i n t f ( "f1 : i=%6d, *j=%6d, *x=%.16lf , y=%.16 lf\n" , i , * j , * x , y ) ;

23

}

Q. 1 A l'aide de diagrammes de représentation mémoire, expliquer le déroulement du programme et donner les

resultats achés.

Q. 2 Donner les commandes Linux/Unix permettant d'exécuter le code précédent.

Exercice 2 : (8 points)

Q. 1 Ecrire la fonction GetData d'entrée des données a, b et n avec a P R , b P R et n P N

. Elles seront saisies

au clavier par l'utilisateur.

Q. 2 Ecrire une fonction InitMesh1D permettant d'initialiser h p b a q{ n et un tableau alloué dynamiquement

contenant l'ensemble des x

i

a ih, i P t 0, . . . , n u .

Q. 3 Ecrire une fonction CalculF permettant d'initialiser un tableau alloué dynamiquement contenant l'ensemble des valeurs f p x

i

q , i P t 0, . . . , n u où f est une fonction réelle à valeurs réelles supposée donnée (paramètre de la

fonction CalculF).

1

(2)

Q. 4 Ecrire un programme utilisant les fonctions précédentes, sachant que la fonction f de CalculF sera f p x q cos p 2x q , et que l'on achera l'ensemble des couples p x

i

, f p x

i

qq (un couple par ligne).

On va maintenant reprendre les questions précédentes en utilisant la structure mesh1D de champs : N : nombre de discrétisation n,

X : tableau dynamique contenant l'ensemble des x

i

, H : pas de discrétisation h,

Q. 5 Donner la déclaration de la structure mesh1D et dénir le type MESH1D correspondant à la structure

mesh1D.

Q. 6 Ecrire une fonction InitMESH1D permettant d'initialiser une variable de type MESH1D à partir des données

obtenues par la fonction GetData.

Q. 7 Ecrire une fonction CALCULF permettant d'initialiser un tableau alloué dynamiquement contenant l'ensemble des valeurs f p x

i

q , i P t 0, . . . , n u où f est une fonction réelle à valeurs réelles supposée donnée (paramètre de la fonction CALCULF) et en utilisant une variable de type MESH1D supposée donnée.

On souhaite maintenant calculer une approximation de l'intégrale ³

b

a

f p x q dx en utilisant la formule composite

des trapèzes : »

b

a

f p x q dx I

n

p f q h

f p x

0

q f p x

n

q 2

n

¸

1 i1

f p x

i

q

.

Q. 8 Ecrire une fonction TRAPEZE permettant de calculer l'approximation de l'intégrale par la méthode précé-

dente.

Q. 9 Ecrire un programme utilisant les fonctions précédentes, sachant que la fonction f de CALCULF sera f p x q sin p 3x q , et que l'on achera l'ensemble des couples p x

i

, f p x

i

qq (un couple par ligne) ainsi que l'approximation

de l'intégrale donnée par la fonction TRAPEZE.

Exercice 3 : (8 points)

Dans cet exercice, nous allons implémenter et utiliser quelques outils d'algèbre linéaire.

Q. 1 Dénir le type vector correspondant à une structure ayant pour champs : dim : dimension du vecteur (type int),

pval : pointeur sur les composantes du vecteur (type double *).

Q. 2 Nous voulons écrire une fonction AllocVector permettant d'allouer un objet de type vector à la dimen- sion N.

1. Donner deux prototypes possibles (non trivialement similaire) pour la fonction AllocVector.

2. Choisir un prototype et écrire la fonction associée.

Q. 3 1. Ecrire une fonction freeVector permettant de désallouer le champ val d'un objet de type vector.

2. Justier le choix de ses arguments!

Q. 4 1. Ecrire une fonction FREEVector permettant de désallouer le champ val d'un objet de type vector, de mettre à zéro le champ dim et à NULL le champ val.

2. Justier le choix de ses arguments!

2

(3)

Q. 5 Nous voulons écrire une fonction RandVector permettant d'initaliser chacune des composantes d'un vecteur par un nombre aléatoire (utiliser la fonction drand48() du langage C qui retourne un double entre 0 et 1 : double drand48 (void);). Le vecteur est supposé déjà alloué.

1. Donner deux prototypes possibles (non trivialement similaire) pour la fonction RandVector.

2. Choisir un prototype et écrire la fonction associée.

Q. 6 Soient u u u

u

1

...

u

n

P R

n

, v v v

v

1

...

v

n

P R

n

et α, β deux réels. Les fonctions ScalarProd, aUpbV et Norm correspondent à :

ScalarProd : x u u u, v v v y

¸

n i1

u

i

v

i

, aUpbV : αu u u βv v v, Norm : } u u u }

n

¸

i1

u

2i

1{2

.

1. Pour chacune des trois fonctions, donner deux prototypes possibles (non trivialement similaire).

2. Pour chacune des trois fonctions, choisir un prototype et écrire la fonction associée.

Q. 7 Ecrire un main simple et fonctionnel utilisant au moins les fonctions RandVector, ScalarProd, aUpbV et

Norm.

3

Références

Documents relatifs

Dans une expression littérale les lettres utilisées peuvent être « remplacées » par des nombres différents, on dit que ce sont des variables. On peut remplacer c par n’importe

5 Nous voulons écrire une fonction RandVector permettant d'initaliser chacune des composantes d'un vecteur par un nombre aléatoire (utiliser la fonction drand48() du langage C

5 Nous voulons écrire une fonction RandVector permettant d'initaliser chacune des composantes d'un vecteur par un nombre aléatoire (utiliser la fonction drand48() du langage C

Parleying with certain people). Tel est l’effroi qui s’empare de l’homme à découvrir la figure de son pouvoir qu’il s’en détourne dans l’action même qui est la sienne

Le carré du produit de deux nombres est égal au produit des carrés de ces deux

Consignes : Je découpe les images et je les place dans les cases à côté des règles correspondantes puis je les colle.. Je ne redis pas &#34;Bonjour&#34; quand je reviens de la

3) N°, titre, coût, prix, nombre de visiteurs dont le prix est compris entre 1 et 3 euros.(avec et sans between) 4) Liste des expositions qui ont débuté le 20/12/2011. 5) Liste

1) Toutes les informations sur les expositions terminées avant le 01/01/2012 qui ont eu plus de 2000 visiteurs par ordre décroissant de visiteurs. 2) Liste des informations sur les