Unité IN3S02 - TD1
Corrigé
2.1- Types primitifs et expressions
2.1.1- Types et expressions numériques
1 + 2 / 3
a pour valeur 1
47 % 2 a pour valeur 1
5.0 + 2 / 3 a pour valeur 5.0
10 + 2.0 / 3 a pour valeur 10.6666
2.1.2- Type booléen et expressions logiques
A- Faux. Si les variables ne sont pas toutes booléennes, le
compilateur Java génère une erreur ; si les variables sont toutes booléennes,
le résultat ne correspond pas à l'assertion de l'énoncé.
B - Faux. Idem A.
C - Faux, car la division réalisée est une division entière.
D - Faux. Erreur de compilation (=
n'est pas ==)
E - Faux. Problème pour d < 0
2.1.3- Type char
A - Faux, car ’a’, ’b’ et ’c’ sont des constantes littérales du type char
B - Faux, car a, b, c sont des identificateurs de variable
C - Faux, car ’b’ est une constante littérale de type char
D - Vrai
E - Faux, car ”c” est une chaîne de caractères et on un élément de type char
A - Faux, car il existe des caractères entre '9' et 'A'
et (int)'0'
ne vaut pas 0
B - Faux. Erreur de compilation sur les conditions
C - Faux. Erreur de compilation sur les conditions
D - Faux. Erreur de conversion dans le cas ['A'
... 'F']
E - Vrai
2.2- Instructions if
2.2.1- if-else imbriqués (1)
A - Faux, car le else se rattache au 2ème if
B - Vrai
C - Faux, car l'instruction a=a+1; est susceptible de modifier le résultat du test du 2ème if
D - Faux.
E - Vrai
2.2.2 - if-else imbriqués (2)
A - Vrai
B - Vrai
C - Faux, car le else se rattache au 3ème if
D - Vrai
E - Faux, car le else se rattache au 3ème if
2.3- Instructions de boucle
2.3.1- Boucle for
si x0 <= 1
alors x = x0
sinon si x est entier
alors x = x0 puissance x0
sinon x = x0 puissance (PartieEntière(x0)+1)
2.3.2- Boucle while
A - Vrai
B - Faux.
C - Vrai
D - Faux
E - Faux
2.3.3- Boucles while vs do-while (1)
A- Faux
B- Vrai
C- Vrai
D- Faux
E- Vrai
2.3.4- Boucles while vs do-while (2)
A - Vrai
B - Faux
C - Faux
D - Faux
E - Faux
2.4- Exercices de synthèse
2.4.1-
Conjecture Hongroise
/**
* Test the hungarian conjecture in a given
range
* @param the range [nmin,
nmax], 0 < nmin <= nmax
* @return true ssi the Hungarian conjecture is
true in [nmin, nmax]
*/
public static boolean testHungarianConjecture(int nmin, int
nmax) {
for(int n = nmin;
n <= nmax; n++ ) {
int h = n ;
while ( h != 4 ) {
if ( h % 2 == 0 ) h = h / 2 ;
else
h = 3*h + 1 ;
}
}
return true ;
}
2.4.2- Suite "somme des cubes des chiffres du terme précédent"
/**
* Calculate the convergent value of the series
* "sum of cubes of digits of a natural integer multiple of 3"
* @param n is suppose positif and multiple of 3
* @return the convergent value of the n initial term series
*/
public static int cubeSumSerie(int n) {
int nprevious;
int digit;
int sum;
do {
nprevious = n ;
sum = 0 ;
while ( n != 0 ) {
digit = n % 10 ;
sum += digit * digit * digit ;
n = n / 10 ;
}
n = sum ;
} while (n != nprevious );
return n ;
}
2.4.3- Dernier dimanche
du mois
/*
* Calculate the last sunday of the month
* @param dayOfWeek
in {'l', 'm', 'M', 'j', 'v', 's', 'd'}
* @param day in [0, 31]
* @param month in [0, 12]
* @param year in format AAAA
* @return day of the last sunday of this
month
*/
public static int lastSunday(char
dayOfWeek, int day, int month, int year) {
int nextSunday
;
int lastDayOfMonth
;
// Calculate the last day of the month
if ( month == 2 ) {
if ( (year % 400 == 0) || (year % 100 != 0
&& year % 4 == 0 ) )
lastDayOfMonth
= 29 ;
else
lastDayOfMonth
= 28 ;
} else if ( ( month <= 7 && month % 2
== 1 ) || ( month >= 8 && month % 2 == 0 ) {
lastDayOfMonth
= 31 ;
} else {
lastDayOfMonth
= 30 ;
}
// calculate the next sunday
switch ( dayOfWeek ) {
case 'l' : nextSunday = day + 6 ; break ;
case 'm' : nextsunday = day + 5 ; break ;
case 'M' : nextSunday = day + 4 ; break ;
case 'j' : nextSunday = day + 3 ; break ;
case 'v' : nextSunday = day + 2 ; break ;
case 's' : nextSunday = day + 1 ; break ;
case 'd' : nextSunday = day + 0 ; break ;
}
if (nextSunday > lastDayOfMonth) nextSunday -= 7 ;
// return the last sunday of the
month
return nextSunday + 7 * ((lastDayOfMonth - nextSunday) / 7)
;
}