Isup 1 - Programmation TD no3 Matthieu Journault 19 juin 2020
Exercice 1 : Rappel
Q. 1 Afficher un triangle rectangle avec des ´etoiles ; vous demanderez `a l’utilisateur la hauteur. Par exemple avec une hauteur de 4 :
*
**
***
****
Q. 2 Mˆeme question avec un ´echiquier de taille 8×8. Pour afficher des cases blanches et noires, vous pouvez utiliser le caract`ere Unicode correspondant, dans notre cas \u25A1 pour une case blanche et
\u25A0 pour une noire.
Exercice 2 : Fonctions
Q. 3Repr´esenter l’´etat de la m´emoire `a chacun des points de programme suivant (1, 2, . . .)
void f(int x) { /* 5 */
int y; /* 6 */
y = 5; /* 7 */
x = x - 1; /* 8 */
return ; }
int g(int u) { /* 3 */
int v = 3; /* 4 */
f(v); /* 9 */
return v;
}
int main() { /* 1 */
int a = 1; /* 2 */
a = g(a); /* 10 */
}
Q. 4Ecrire une fonction´ plus 1qui prend en param`etre un entiernet retourne son successeur (toujours un entier).
1
Q. 5 Ecrire une fonction´ plus f qui prend en param`etre deux flottants uet v et retourne le r´esultat de u+v.
Q. 6On peut repr´esenter un polynˆome du second degr´eax2+bx+csous la forme d’un triplet de valeurs (a, b, c). ´Ecrire une fonction discriminant qui prend en param`etre trois valeurs enti`eres (a,b, et c) et retourne ∆, le discriminant de l’´equation ax2+bx+c= 0 tel que ∆ =b2−4×a×c
Q. 7 Ecrire une fonction´ nb solutions qui prend en param`etre trois valeurs enti`eres (a,b, et c) et retourne le nombre de solutions de l’´equation ax2+bx+c= 0. Cette fonction devra utiliser la fonction d´efinie pr´ec´edemment.
Q. 8 Ecrire une fonction´ est solution qui prend en param`etre trois valeurs enti`eres (a,b, et c), ainsi qu’une valeur x et retourne 1 si x est une solution deax2+bx+c= 0, et 0 sinon.
Exercice 3 : Fonctions r´ ecursives
Q. 9Ecrire une fonction´ somme telle que somme(n)retourne la somme des entiers de 1 `a n.
Q. 10Ecrire une fonction´ factorielletelle que factorielle(n)retourne la valeur n!. On rappelle la d´efinition de la fonction factorielle :
n! =
1 si n = 0 n×(n−1)! sinon
Q. 11Que se passe-t-il si on appelle factorielle(-1)? Comment pourrions-nous y rem´edier ?
Q. 12Ecrire deux fonctions mutuellement r´´ ecursivespair et impair qui s’appellent l’une l’autre pour d´eterminer si un entier n est pair ou impair.
Q. 13 Ecrire la fonction´ pgcd telle que pgcd(a,b) retourne le PGCD de a et b. On rappelle que P GCD(a,0) =a et que P GCD(a, b) =P GCD(b, a mod b)1 .
Q. 14Ecrire une fonction´ fibonaccitelle quefibonacci(n)retourne le n-i`eme de la suite de Fibonacci.
Contrairement `a un exercice semblable du TD pr´ec´edent, votre solution ne devra pas faire intervenir de boucle.
On rappelle la d´efinition de la suite de Fibonacci (not´eeF) :
Fn=
0 si n= 0
1 si n= 1
Fn−1+Fn−2 sinon
1. mod´etant le modulo, c’est `a dire le reste de la division euclidienne :a mod b=a−(babc ×b)
2
Q. 15Observer empiriquement le temps de calcul asymptotique de votre fonction Fibonacci. En utilisant une fonction r´ecursive auxiliairefibonacci auxutilisant 3 arguments entiers, proposer une implantation de Fibonacci ayant un coˆut lin´eaire en la valeur de son entr´ee plutˆot qu’exponentiel.
Q. 16Proposer une implantation de la fonction d’Ackermann. Cette fonction a deux arguments entiers et satisfait la relation de r´ecurrence :
A(m, n) =
n+ 1 sim = 0
A(m−1,1) si m >0∧n = 0 A(m−1,A(m, n−1)) si m >0∧n >0
3