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.
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.