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:
- Au début du programme, l'ordinateur choisit un nombre
secret entier au hasard entre 1 et 100 (inclus), et demande à
l'utilisateur de le deviner.
- Pour chaque nombre proposé par l'utilisateur, l'ordinateur
écrit si le nombre secret est plus grand ou plus petit que le
nombre proposé par l'utilisateur.
- Le jeu se poursuit ainsi jusqu'à ce que l'utilisateur ait
deviné le nombre secret. Alors l'ordinateur affiche en combien
de coups l'utilisateur a deviné.
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:
- Utilisez le verso de la feuille pour écrire le programme.
- On ne demande pas pour cet exercice, d'écrire des méthodes (mis à part la méthode main évidemment).
- Rappel: Math.random() retourne un nombre de type double, au hasard entre 0 et 0.9999999....
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).