b:réel
c:chaîne
DEBUT
b←3,1415927
a←3,1415927
c←12345
FIN
L’exécution de ce pseudocode provoque quelques surprises, et des erreurs. Tout d’abord b reçoit la valeur de PI, et
comme b est déclaré en réel (pour l’exemple, le type classique Numérique n’aurait pas été pertinent), c’est correct.
Puis a reçoit la même chose. Or a est un entier ! Suivant les langages de programmation, vous obtiendrez soit une
erreur, soit ça fonctionnera, mais pas parfaitement. La variable a étant un entier, il se peut que a ne contienne que la
valeur entière de b, soit 3. Notez que certains langages autorisent une conversion explicite d’un type vers un autre.
On parle de transtypage. Quant à la variable c, elle doit contenir une chaîne de caractères, délimitée par des
guillemets, absents ici, ce qui provoquerait probablement une erreur.
Le code Java suivant ne fonctionne pas. Sauriezvous deviner maintenant pourquoi ?
class chap2_equal1 {
public static void main(String[] args) {
int i_a;
double f_a;
f_a=3.1415927;
i_a=3.1415927;
System.out.println(f_a);
System.out.println(i_a);
}
}
Voici la réponse donnée par le compilateur javac :
chap2_equal1.java:7: possible loss of precision
found
: double
required: int
i_a=3.1415927;
^
1 error
Le transtypage en Java consiste à indiquer entre parenthèses avant la valeur à affecter le type final de celleci. La
valeur sera convertie, si possible, dans ce type avant d’être affectée. Java ne permet pas de faire n’importe quoi et le
transtypage doit suivre une certaine logique (du genre, on ne peut pas convertir directement une chaîne de caractères
en entier). De même le transtypage, notamment vers le bas (d’un type de grande taille vers une taille réduite) risque
de provoquer une perte de précision, voire même d’un grand nombre d’informations. Dans cet exemple, f_a est
explicitement convertie en entier. Java ne va donc conserver que la partie entière de f_a et i_a contiendra 3.
class chap2_equal2 {
public static void main(String[] args) {
int i_a;
double f_a;
f_a=3.1415927;
i_a=(int)3.1415927;
System.out.println(f_a);
System.out.println(i_a);
}
}
Ce qui retourne :
3.1415927
3
Afin de ne pas vous faire taper sur les doigts par votre professeur d’algorithmique, précisez le bon type dès le début,
et évitez les affectations douteuses.
Vous avez le droit de donner une valeur initiale ou par défaut à une variable lors de sa déclaration. Dans ce cas vous
devez utiliser l’opérateur d’affectation lors de la déclaration.
Dans la déclaration
- 7 -
© ENI Editions - All rigths reserved - Jonifar lina
28
c:chaîne
DEBUT
b←3,1415927
a←3,1415927
c←12345
FIN
L’exécution de ce pseudocode provoque quelques surprises, et des erreurs. Tout d’abord b reçoit la valeur de PI, et
comme b est déclaré en réel (pour l’exemple, le type classique Numérique n’aurait pas été pertinent), c’est correct.
Puis a reçoit la même chose. Or a est un entier ! Suivant les langages de programmation, vous obtiendrez soit une
erreur, soit ça fonctionnera, mais pas parfaitement. La variable a étant un entier, il se peut que a ne contienne que la
valeur entière de b, soit 3. Notez que certains langages autorisent une conversion explicite d’un type vers un autre.
On parle de transtypage. Quant à la variable c, elle doit contenir une chaîne de caractères, délimitée par des
guillemets, absents ici, ce qui provoquerait probablement une erreur.
Le code Java suivant ne fonctionne pas. Sauriezvous deviner maintenant pourquoi ?
class chap2_equal1 {
public static void main(String[] args) {
int i_a;
double f_a;
f_a=3.1415927;
i_a=3.1415927;
System.out.println(f_a);
System.out.println(i_a);
}
}
Voici la réponse donnée par le compilateur javac :
chap2_equal1.java:7: possible loss of precision
found
: double
required: int
i_a=3.1415927;
^
1 error
Le transtypage en Java consiste à indiquer entre parenthèses avant la valeur à affecter le type final de celleci. La
valeur sera convertie, si possible, dans ce type avant d’être affectée. Java ne permet pas de faire n’importe quoi et le
transtypage doit suivre une certaine logique (du genre, on ne peut pas convertir directement une chaîne de caractères
en entier). De même le transtypage, notamment vers le bas (d’un type de grande taille vers une taille réduite) risque
de provoquer une perte de précision, voire même d’un grand nombre d’informations. Dans cet exemple, f_a est
explicitement convertie en entier. Java ne va donc conserver que la partie entière de f_a et i_a contiendra 3.
class chap2_equal2 {
public static void main(String[] args) {
int i_a;
double f_a;
f_a=3.1415927;
i_a=(int)3.1415927;
System.out.println(f_a);
System.out.println(i_a);
}
}
Ce qui retourne :
3.1415927
3
Afin de ne pas vous faire taper sur les doigts par votre professeur d’algorithmique, précisez le bon type dès le début,
et évitez les affectations douteuses.
Vous avez le droit de donner une valeur initiale ou par défaut à une variable lors de sa déclaration. Dans ce cas vous
devez utiliser l’opérateur d’affectation lors de la déclaration.
Dans la déclaration
- 7 -
© ENI Editions - All rigths reserved - Jonifar lina
28
