0% ont trouvé ce document utile (0 vote)
34 vues4 pages

Introduction ' A L'informatique: TD3 - Premi' Eres Fonctions

Transféré par

lhdt26
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)
34 vues4 pages

Introduction ' A L'informatique: TD3 - Premi' Eres Fonctions

Transféré par

lhdt26
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
Vous êtes sur la page 1/ 4

Polytech Paris Saclay - Peip1 Année 2023-2024

Introduction à l’informatique
TD3 - Premières fonctions

Exercice 1 (Premières fonctions).


Voici une fonction qui calcule la surface d’un rectangle :
f l o a t s u r f a c e R e c t a n g l e ( f l o a t longueur , f l o a t l a r g e u r ) {
return longueur ∗ largeur ;
}

(1) Implanter une fonction surfaceDisque qui calcule la surface d’un disque de rayon
donné. On prendra π = 3.1415926.
(2) Implanter une fonction surfaceTriangle qui calcule la surface d’un triangle de
base b de hauteur h.

Exercice 2 (Variables locales/globales).


On considère les deux programmes suivants :
int i = 0 ;

int f ( int j ) {
i = i + j;
return i ;
}

i n t main ( ) {
c o u t << i << endl ;
c o u t << f ( 1 ) << e n d l ;
c o u t << f ( 2 ) << e n d l ;
c o u t << f ( 3 ) << e n d l ;
}

int f ( int j ) {
int i = 0 ;
i = i + j;
return i ;
}

i n t main ( ) {
c o u t << i << endl ;
c o u t << f ( 1 ) << e n d l ;
c o u t << f ( 2 ) << e n d l ;
c o u t << f ( 3 ) << e n d l ;
}

(1) Quelle est la différence entre les deux programmes ?


(2) Une ligne du deuxième programme est incorrecte : le compilateur déclencherait une
erreur. Laquelle ? La supprimer.
(3) Exécuter pas à pas les deux programmes en décrivant au fur et à mesure l’état de la
mémoire et ce qui est affiché à l’écran.
1
2 TD3 - PREMIÈRES FONCTIONS

(4) Décrire la différence de comportement et retrouver dans les notes de cours le


commentaire à ce propos.

Exercice 3 (fonction puissance).


On souhaite écrire une fonction puissance qui permet de calculer la valeur d’un nombre
entier a à la puissance b :
(1) Écrire la signature de la fonction.
(2) Écrire la documentation de la fonction.
(3) Écrire les tests de la fonction sans oublier les cas particuliers.
(4) Écrire la fonction.

Exercice 4 (La trilogie code, documentation, tests).


Analyser la fonction volumePiscine suivante :
/∗ ∗ C a l c u l e l e volume d ’ une p i s c i n e p a r a l l é l é p i p é d i q u e
∗ @param p r o f o n d e u r l a p r o f o n d e u r de l a p i s c i n e ( en mè t r e s )
∗ @param l a r g e u r l a l a r g e u r de l a p i s c i n e ( en mè t r e s )
∗ @param l o n g u e u r l a l o n g u e u r de l a p i s c i n e ( en mè t r e s )
∗ @return l e volume de l a p i s c i n e ( en l i t r e s )
∗ ∗/
double v o l u m e P i s c i n e ( double p r o f o n d e u r , double l a r g e u r , double l o n g u e u r ) {
r e t u r n 100 ∗ p r o f o n d e u r ∗ l a r g e u r ∗ l o n g u e u r ;
}

Munie des tests :


ASSERT( v o l u m e P i s c i n e ( 5 , 1 2 , 5 ) == 30000 ) ;
ASSERT( v o l u m e P i s c i n e ( 1 , 1 , 5 ) == 500 );

(1) Est-ce que les tests passent ?


(2) Est-ce que la documentation, le code et les tests sont cohérents ?
(3) Corriger les anomalies éventuelles.

Exercice 5 (Fonction sans valeur de retour : affichage de booléens).


Vous avez peut-être déjà remarqué en TP que l’affichage des booléens n’est pas très bon. Si
on demande à afficher une variable de type bool dont la valeur est :
• false (par exemple : cout << false << endl ;), alors le programme affiche 0.
• true (par exemple : cout << true << endl ;), alors le programme affiche 1.

Écrivez une fonction qui prend en entrée une valeur booléenne et qui affiche :
• ”VRAI” si cette valeur est égale à true.
• ”FAUX” si cette valeur est égale à false.
TD3 - PREMIÈRES FONCTIONS 3

Exercice ♠ 6 (Utilisation de fonctions).


Le but de cet exercice est de coder une fonction point_de_chute qui calcule l’abscisse
xc à laquelle tombe un projectile lancé en x = 0 avec une vitesse v suivant un angle α
(exprimé en degrés par rapport à l’horizontale). Implantez la fonction point_de_chute. On
commencera par écrire sa documentation ainsi que des tests.
Rappels :
• l’abscisse est donnée par la formule : xc = 2vxgvy où vx = v cos(α), vy = v sin(α) et
g est l’accélération gravitationnelle (environ 9.8 m.s−2 sur la planète Terre).
• en C++, les fonctions mathématiques sinus et cosinus sont implantées par les fonctions
prédéfinies sin(arg) et cos(arg) dans <cmath>, où l’angle arg est exprimé en
radians. La constante π se nomme M_PI dans cette bibliothèque.

Exercice ♠ 7 (Fonction mystère).


Analyser la fonction mystere suivante :
s t r i n g mystere ( i n t b l o p ) {
s t r i n g schtroumpf = ” ” ;
f o r ( i n t h i p = 1 ; h i p <= b l o p ; h i p++ ) {
f o r ( i n t hop = 1 ; hop <= h i p ; hop++ ) {
schtroumpf += ”∗ ” ;
}
schtroumpf += ”\n ” ;
}
r e t u r n schtroumpf ;
}
Munie des tests suivants :
ASSERT( mystere ( 0 ) == ””) ;
ASSERT( mystere ( 1 ) == ”∗\n ” ) ;
ASSERT( mystere ( 2 ) == ”∗\n∗∗\n ” ) ;
ASSERT( mystere ( 3 ) == ”∗\n∗∗\n ∗∗∗\ n ” ) ;

(1) Comment appelle-t-on cette fonction (quelle est sa syntaxe) ? Quelle est sa signa-
ture ?
(2) Que fait cette fonction (quelle est sa sémantique) ?
Indications : pour les chaı̂nes de caractères, l’opérateur + représente la concaténation (e.g.
"Cou" + "cou" s’évalue en "Coucou") ; x += expression est un raccourci pour x = x
+ expression ; dans une chaı̂ne de caractères, ’ \n’ représente un saut de ligne.
(3) Choisir un bon nom pour cette fonction et ses variables et en écrire la documentation.

Exercice ♠ 8 (Nombres premiers).


(1) Écrire une fonction qui prend en argument (entrée) un entier n et teste si n est
un nombre premier (c’est-à-dire renvoie true si n est premier et false sinon. On
rappelle qu’un nombre est premier s’il a exactement deux diviseurs distincts : 1 et
lui-même.)
(2) Écrire une fonction qui prend en argument un entier n et affiche tous les nombres
premiers entre 1 et n.
(3) Écrire une fonction qui affiche les n premiers nombres premiers.
4 TD3 - PREMIÈRES FONCTIONS

Exercice ♠ 9.
Le but de cet exercice est de calculer la hauteur en fonction du temps z(t) à laquelle se
trouve un pot de fleur (m = 3kg) lâché à t = 0 depuis le 10ème étage (h0 = 27m), en chute
libre avec résistance de l’air ; puis de calculer le temps de chute.
(1) Implantez une fonction chute_libre(t) calculant z(t) pour un V0 donné, de valeur
V0 = 80ms−1 .
Indications :
• La hauteur s’exprime en fonction du temps par
V02
  
1 −2tg/V0
z(t) = h0 − V0 t + ln (1 + e ) ,
g 2
où V0 est la vitesse limite de chute de l’objet et g = 9.81ms−2 .
• La fonction logarithme népérien est prédéfinie sous la forme log(arg) dans
<cmath>.
(2) Que se passe-t-il si on varie h0 et V0 ? Généralisez votre fonction pour prendre
en paramètres additionnels la hauteur initiale h0 et la vitesse limite de chute V0 .
Pour la gravité, définir une variable globale g. Bonus : définir cette variable globale
comme une constante (nous irons sur Mars une autre fois).
Écrivez les appels à la fonction précédente pour calculer z(t) pour différentes valeurs
de V0 (10, 40, 60, 120, 180).
(3) Écrivez une fonction temps_de_chute qui prend les mêmes paramètres que précé-
demment et utilise chute_libre de façon répétée et renvoie une approximation de
la durée tc de la chute du pot de fleur jusqu’au sol.
(4) La vitesse limite peut être obtenue en fonction de la masse volumique de l’air ρ,
du coefficient de résistance
q aérodynamique Cx et de la section de l’objet S à l’aide
2mg
de la formule V0 = Cx ρS . Implantez une fonction vitesse_limite pour calculer
cette formule. Puis implantez de nouvelles fonctions utilisant les précédentes pour
calculer z(t) et le temps de chute tc en fonction des paramètres h0 , S, et m. (On
donne que la racine est codée par la fonction sqrt dans <cmath> )

Vous aimerez peut-être aussi