IFT1015, Automne 2008
Professeur: Pascal Vincent
Examen Intra
Mardi 14 octobre 2008
Durée: 1h45
Documentation papier (livres et notes de cours) permise
Calculatrice et autres appareils électorniques non aurtorisés.
Prénom:
Nom:
Groupe (A ou B):
Code permanent:
Veuillez répondre aux questions, directement sur ces feuilles, 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 suivants:
Remarque: il n'y a aucune erreur de syntaxe dans les extraits de cette question.
System.out.println(354/100.0);
-------------------------------------------------
System.out.println(2*(5%4));
-------------------------------------------------
System.out.println(2 + 2 * 3);
-------------------------------------------------
System.out.println( "2" + 2 * 3 );
-------------------------------------------------
System.out.println( "2" + 2 + 3 );
-------------------------------------------------
System.out.println(15/10>1);
-------------------------------------------------
int i = 8%2;
System.out.println("i");
-------------------------------------------------
int a = 4;
System.out.println( (Math.max(a+2,2*a)-3)*(a/2) );
-------------------------------------------------
int b = 5;
int c = 10;
boolean a = b+7>c;
if (a && b<c)
System.out.println("Chat");
if(a == (b<c))
System.out.println("Chien");
if(a)
{
String s = "Bonjour";
if(!a)
System.out.println("Cheval");
else
System.out.println("Tortue");
if(s.length()>b && !s.equals("Allo"))
System.out.println("Orignal");
else
System.out.println("Lapin");
}
else if( c==2*b )
System.out.println("Souris");
2) for et while
Réécrivez le morceau de code suivant en utilisant un while au lieu d'un for.
int i;
double x;
double s = 0;
for(i=100, x=2; i>0 && x<300; i--, x=x*3)
{
System.out.println("s="+s);
s = s+x;
}
3) Trouvez l'erreur dans les extraits de programmes suivants
Indiquez l'endroit qui pose problème en le cerclant, et
expliquez précisément en une courte phrase pourquoi ça constitue une
erreur.
(Je vous garantis que chaque extrait pose probléme!)
Premier extrait
for(int i=100; i>0; i++)
System.out.println(i);
Deuxième extrait
double x = Math.random();
if(x > 0.1)
{
boolean ok = true;
x *= 10;
}
else
{
boolean ok = false;
x /= 10;
}
System.out.println("x = "+x);
System.out.println("ok = "+ok);
Troisième extrait
double x = 3;
int a = 2*x+1;
String s = a+"*";
System.out.println(s);
4) Programme FizzBuzz
Connaissez-vous le jeu FizzBuzz, qui se joue habituellement à plusieurs?
Il
s'agit de compter à voix haute, en commençant à 1, chacun disant le
chiffre suivant, mais en disant "Fizz" à la place du nombre si c'est un
multiple de 3, et "Buzz" si c'est un multiple de 5, et "FIZZ-BUZZ" si
il est à la fois multiple de 3 et de 5. Si la personne se trompe, elle
a un gage ou est éliminée.
On veut écrire un programme FizzBuzz qui va afficher la bonne séquence à prononcer.
En
plus le programme devra calculer et afficher la moyenne des nombres de
la séquence (donc en excluat les Fizz, Buzz, et FIZZ-BUZZ).
Le programme prend un unique paramètre sur la ligne de commande qui indique jusqu'à combien "compter".
Ex. d'exécutions du programme:
java FizzBuzz 20
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FIZZ-BUZZ 16 17 Fizz 19 Buzz
La moyenne des nombres affichés est 10.181818181818182
java FizzBuzz 3
1 2 Fizz
La moyenne des nombres affichés est 1.5
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 sur la page suivante un programme FizzBuzz.java comprenant une fonction (méthode statique) fizzbuzz et une fonction main.
- La fonction fizzbuzz prend trois paramètres entiers nommés max,fizz et buzz.
Elle affiche, séparés par un espace, les nombres de 1 à max inclus, sauf si le nombre est multiple du nombre fizz ou du nombre buzz.
Si le nombre est multiple de fizz seulement il affiche le mot Fizz à la place du nombre.
Si il est multiple de buzz seulement il affiche le mot Buzz à la place du nombre.
Mais si il est multiple de fizz ET de buzz il affiche le mot FIZZ-BUZZ à la place du nombre.
La
fonction doit aussi calculer et retourner la moyenne de tous les
nombres affichés comme nombres (donc en excluat les Fizz, Buzz, et
FIZZ-BUZZ).
Elle ne doit pas afficher cette moyenne. - Écrivez la fonction main
qui permettra d'utiliser le programme pour faire afficher la séquence
fizzbuzz de la longueur passée en paramètre sur la ligne de commande.
La fonction main doit aussi afficher la moyenne des nombres affichés, comme dans les exemples ci-dessus.
Note: vous ne devez pas utiliser de tableaux pour cet exercice.
5) Appel de fonctions et passage de paramètres
Écrivez ce qu'affiche le programme suivant (écrivez-le à côté de chaque System.out.println).
public class Essai
{
public static int f(int x, int y)
{
x = x+y;
return x;
}
public static void g(int[] ta, int a)
{
ta[0] = a;
a = ta[1];
}
public static void main(String[] args)
{
int x = 1;
int y = 2;
f(x,y);
System.out.println(x);
x = 3;
y = 4;
System.out.println(f(y,x));
x = f(y,x);
System.out.println(y);
System.out.println(x);
int tab[] = new int[3];
tab[0] = 10;
tab[1] = 20;
int a = 30;
g(tab, a);
System.out.println(tab[0]);
System.out.println(tab[1]);
System.out.println(a);
}
}
6) Intervertir les valeurs de deux variables
Complétez l'extrait de code suivant pour intervertir les valeurs des deux variables x et y:
double x = Math.random(); // choisit un nombre au hasard pour x
double y = Math.random(); // choisit un nombre au hasard pour y
System.out.println("Valeurs initiales: x="+x+" y="+y);
// ici, x et y ont chacun une valeur possiblement différente
// on demande d'écrire les instructions qui vont intervertir (échanger) les valeurs de x et y
// .... A VOUS DE COMPLETER ....
System.out.println("Valeurs interverties: x="+x+" y="+y);
7) Chaîne de caractères vers tableau
Écrivez ci-dessous une fonction nommée chartab
qui prend en paramètre une String et qui crée, remplit et retourne
un tableau de caractères (tableau de char) contenant les mêmes
caractères que cette String.