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:









































































































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