IFT1015, Hiver 2009
Professeur: Pascal Vincent
Examen Intra
Lundi 16 février 2009
Durée: 1h45
Documentation papier permise
Prénom:
Nom:
Code permanent:
Veuillez répondre aux questions dans les zones de blanc laissées à cet effet.
Lorsque l'énoncé vous
demande d'écrire un programme, vous devez écrire un
programme complet compilable (qui comporte une déclaration de
classe et une méthode main).
Lorsque l'énoncé vous demande d'écrire une
fonction ou une méthode, contentez-vous d'écrire
cette fonction ou méthode seulement.
Si vous voulez, vous pouvez abréger System.out.println en s.o.p
1) Qu'affichent les extraits de programme simples suivants: (18 pts)
System.out.println("3"+3+2);
-------------------------------------------------
System.out.println("3"+3/2);
-------------------------------------------------
double x = 3;
System.out.println(x/2+"3");
-------------------------------------------------
double d = 3/2;
System.out.println(d);
-------------------------------------------------
int a = 5;
System.out.println( a*2>=10 );
-------------------------------------------------
System.out.println(5%2+" "+(5%2==0));
-------------------------------------------------
int a = 5;
System.out.println( !(a*2>=10) || !(5%2==0) );
-------------------------------------------------
double x = 3;
double y = 2;
y = x+y;
y *= 2;
x *= x;
y -= x;
System.out.println("x:"+x+" y:"+y);
-------------------------------------------------
int x = 2*5;
String s = "Allo"+x+"!!!";
System.out.println(s);
System.out.println(s.substring(3,7)+s.length());
2) Conditions (5 pts)
Qu'affiche l'extrait de programme suivant (écrivez le dans la partie blanche d ela page à droite du code)
int a=5;
char c='a';
char b=c;
boolean t = false;
if(b=='c')
System.out.println("Mars");
else if(c!='a' || !(a>5))
{
System.out.println("Venus");
if(a=="Venus".length())
System.out.println("Terre");
}
else
System.out.println("Pluton");
if(false)
System.out.println("Mercure");
else
System.out.println("Uranus");
switch(b)
{
case 'c':
System.out.println("Jupiter");
break;
case 'a':
System.out.println("Neptune");
case 'b':
t = !t || a<10;
if(t)
System.out.println("Soleil");
else
System.out.println("Saturne");
break;
default:
System.out.println("Lune");
}
3) Boucles for et while (9 pts)
a) Réécrivez à sa droite un code équivalent à l'extrait ci-dessous, mais en utilisant une boucle while au lieu d'une boucle for
double x;
int k;
for(k=1, x=2; x<30; k++, x*=2)
System.out.println(k+": "+x);
System.out.println("k = "+k);
b) Écrivez ci-dessous ce qu'affiche ce programme:
c) Écrivez à sa droite ce qu'affiche cet autre programme
String s;
for(int i=1; i<=5; i++)
{
s = "";
for(int j=5; j>=1; j -= 1)
{
if(j>=i)
s += j+" ";
}
System.out.println(s);
}
4) Maximum et minimum de nombres entrés au clavier (20 pts)
On
vous demande d'écrire un programme MinMax qui demande à
l'utilisateur d'entrer des nombres entiers au clavier, et qui après
chaque nombre entré affiche la vaeur du plus petit nombre entré
(le min) et la valeur du plus grand nombre entré jusqu'à lors (le max).
Le programme continue à demander des nombres tant que l'utilisateur n'a pas entré 0. Il s'arrète en affichant Fini! quand l'utilisateur a entré 0.
Ex d'une session d'utilisation du programme:
java MinMax
Entrez un nombre entier:
5
min: 5 max: 5
Entrez un nombre entier:
10
min: 5 max: 10
Entrez un nombre entier:
8
min: 5 max: 10
Entrez un nombre entier:
3
min: 3 max: 10
Entrez un nombre entier:
0
Fini!
a) Comment allez vous nommer le fichier contenant le code source du programme?
b) Comment allez-vous compiler ce programme? (écrivez la ligne que vous taperiez)
c) Écrivez ce programme au complet (on suppose que
l'utilisateur entre toujours des nombres entiers au clavier, vous
n'avez pas à gérer les autres cas).
5) Composition de fonction (30 pts)
Soit la fonction mathématique f(x) = x sin(x) + cos(2x)
On veut écrire un programme CompositionFonction qui permet de calculer f(f(f(...f(x)...))) où on a n compositions de la fonction.
Le programme prends les deux paramètres x et n sur la ligne de commande, calcule et affiche le résultat.
Ainsi si on lance le programme comme ceci:
java CompositionFonction 1.5 2
Le programme devra afficher un seul nombre: le résultat du calcul de f(f(1.5)) où on a appliqué (composé) f 2 fois.
Il ne doit rien afficher d'autre que ce résultat.
De même si on voulait le résultat du calcul de f(f(f(f(0.75)))) on lancerait le programme comme ceci:
java CompositionFonction 0.75 4
Le
programme devrait pouvoir fonctionner pour n'importe quelle valeur
de n entier positif >=1, y compris pour des grandes
valeurs de n.
Écrivez le programme correspondant, qui devra comporter:
- une fonction f qui
prend en paramètre un double et effectue le calcul correspondant à
la définition mathématique de la fonction f ci-dessus.
- une fonciton compose_f qui prend deux paramètres: x et n, et qui fait appel à f pour calculer la composition de n fonctions f au point x et retourne le résultat sans rien afficher.
- une fonciton main
qui traite les arguments passés sur la ligne de commande,
appelle la fonction compose_f et affiche le résultat.
6) Appel de fonctions et passage de paramètres (8 pts)
Écrivez ce qu'affiche le programme suivant (écrivez-le à côté de chaque System.out.println).
public class Essai
{
public static int g(int x, int y)
{
y = 10*x+2*y;
x = y;
return x;
}
public static void main(String[] args)
{
int x = 2;
int y = 3;
System.out.println(g(y,x));
System.out.println(y);
System.out.println(x);
x = 2;
y = 3;
System.out.println(g(g(x,x), 1+y));
}
}
7) insertion_multiple (10 pts)
On demande d'écrire une fonction appelée insertion_multiple qui prend trois arguments: une chaîne de caractère s un entier n et une autre chaîne de caractères ins.
La fonction doit construire et retourner une version transformée de la chaîne s: à tous les n caractères de s on insère la chaîne ins.
La fonction insertion_multiple ne doit rien afficher.
Ainsi l'appel:
System.out.println( insertion_multiple("J'apprends la programmation Java!", 5, "OK") );
Devrait afficher:
J'appOKrendsOK la pOKrograOKmmatiOKon JaOKva!
On
voit qu'on a ajouté la chaîne "OK" après le 5ème caractère de la chaîne
d'origine, après le 10ème, le 15ème, et ainsi de suite à tous les
5 caractères.
Écrivez ci-dessous la fonction insertion_multiple