IFT1015, Hiver 2007

Examen Intra

Lundi 19 février 2007
Durée: 1h45
Professeur: Pascal Vincent

Prénom:
Nom:
Code permanent:

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.

1) Qu'affichent les extraits de programme suivants: (15 pts)

-------------------------------------------------
System.out.println(5/2);



-------------------------------------------------
System.out.println(5/2.0);



-------------------------------------------------
System.out.println((float)5/(int)2.0);



-------------------------------------------------
System.out.println( 2 + 3 * 2 + 3 );



-------------------------------------------------
System.out.println( 1+5 % 2 );



-------------------------------------------------
int a = 3; System.out.println(a+"4");



-------------------------------------------------
int a = 3; System.out.println(Math.pow(a-1,(a+1)/2+1));




-------------------------------------------------
System.out.println( 3 > 2 + 2 );




-------------------------------------------------
System.out.println(!false);



-------------------------------------------------
System.out.println(!(2<3 && 9%3==0));



-------------------------------------------------

boolean bo = !(2<3 && 9%3==0) || !"oiseau".equalsIgnoreCase("OISEAU");
if(!bo)
System.out.println("Loup");
if(bo)
{
System.out.println("Chat");
if((2<3 && 9%3==0) || "oiseau".equals("OISEAU"))
System.out.println("Chien");
}
else if((2<3 && 9%3==0) || "oiseau".equals("OISEAU"))
System.out.println("Cheval");
else if(false || !false)
System.out.println("Ecureuil");
else
System.out.println("Gazelle");




2) Intervertir les valeurs de deux variables  (5 pts)

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);

3) Trouvez l'erreur dans les extraits de programmes suivants. (10 pts) 

Indiquez l'endroit qui pose problème en le cerclant, et expliquez en une courte phrase pourquoi ça constitue une erreur. 

(Je vous garantis que chaque extrait a une erreur qui pose probléme!)



Premier extrait

int toto = 25;
System.out.println(Toto);

Deuxième extrait

for(int i=1; i<10; i++);
System.out.println("i="+i);




Troisième extrait

int i = 1;
while (i<10)
{
int icarre = i*i;
System.out.println("i="+i);
System.out.println("icarre="+icarre);
i++;
}
System.out.println("Boucle terminée.");
System.out.println("i="+i);
System.out.println("icarre="+icarre);



4) Qu'affiche le programme suivant ?  (20 pts)

class Message
{
public static void main(String[] main)
{
String s = "Bienvenue au cours IFT1015 Programmation 1 ";

boolean b = true;
String m = "";
for(int i=0; i<s.length(); i++)
{
char c = s.charAt(i);
if(c==' ')
{
int j=i;
do
{
j--;
c = s.charAt(j);
if(c!=' ')
m = m+c;
}
while(j>0 && c!=' ');
System.out.print(m+'*');
m = "";
}
}
System.out.println();

}
}



5) Jeu de devinette (25 pts)

Ecrivez un programme nommé DevineNombre.java et qui consiste en le petit jeu suivant:

Ex de session de jeu:
% java DevineNombre
J'ai choisi un nombre secret entre 1 et 100, essaye de le deviner...
Quelle est ta proposition ?
32
Mon nombre secret est PLUS GRAND que 32. Essaye autre chose.
Quelle est ta proposition ?
70
Mon nombre secret est PLUS GRAND que 70. Essaye autre chose.
Quelle est ta proposition ?
75
Mon nombre secret est PLUS PETIT que 75. Essaye autre chose.
Quelle est ta proposition ?
73
BRAVO! Mon nombre secret était bien 73. Tu l'as deviné en 4 coups!

(FIN D'EXECUTION DU PROGRAMME.)

Indications:


6) Nombres premiers (25 pts)

Fonction divisible

Définition: Un nombre entier a est divisible par un nombre entier b si et seulement si le reste de la division entière de a par b est nul.

Écrivez une fonction (méthode) nommée divisible avec deux paramètres a et b et retournant un boolean qui indique si a est divisible par b

public static .........








Fonction estPremier

Pour cette question, on suppose qu'on dispose (dans notre classe) d'une méthode divisible qui fonctionne correctement.

Définition: Un nombre entier b strictement positif est un nombre premier si et seulement si il n'est divisible par aucun entier strictement positif autre que par lui-même et par 1.

Écrivez une fonction nommée estPremier avec un paramètre entier b, et retournant un boolean qui indique si b est un nombre premier (c.a.d. que la fonction retourne true si b est premier et false sinon). Cette fonction devra faire appel à la fonction divisible.

Indication: un entier n'est jamais divisible par des entiers plus grands que lui, donc inutile de perdre son temps à vérifier si il l'est! Utilisez une boucle... Aussi vous pouvez supposer que le paramètre b est strictement posiftif (pas besoin de le vérifier).


public static .........














Programme Premier

On veut écrire un programme Java Premier qui peut être utilisé à partir de la ligne de commande pour savoir si un nombre est premier, de la manière suivante: (Ex:)

% java Premier 11
11 est un nombre premier.

% java Premier 25
25 n'est pas un nombre premier.

a) Comment allez-vous appeler le fichier qui va contenir le code source de votre programme?


b) Une fois écrit,  quelle commande exécuter pour le compiler (avant de pouvoir l'utiliser)?


c) Écrivez au verso de cette feuille le code source (texte) du programme complet. Ce code source contiendra et fera appel aux méthodes divisible et estPremier des questions précédentes. Il devra donc contenir leur définition que vous êtes sensé avoir déjà écrit ci-haut. Pour vous éviter d'avoir à les recopier au complet, si vous voulez, vous pouvez vous contenter d'écrire leur en-tête  (aussi parfois appelée signature ou prototype) avec les accolades, mais sans recopier ce qui était entre les accolades (le corps de la fonction).