Ecole des Mines de Nancy


Clinique Informatique
Séance 1
Remarque: Le but n'est pas de "faire" une liste d'exercice, mais de comprendre ce qui se passe. Les exercices doivent servir de support à la discussion, n'hésitez pas à poser des questions !

Objectifs de la séance: variables, types, opérations élémentaires sur les variables, méthodes de la classe "Utilitaire", tests "if"...


Pour les deux premiers exercices, feuille et crayon uniquement.



Exercice 1 - variables et types

On dispose des déclarations des variables suivantes:

int h=5, i=0, j=11, k;
double x=5.3, y, z=2.0;
String bonjour="Hello";
boolean test, vrai=true;

Les opérations suivantes sont-elles possibles ? Si oui, donnez le type et la valeur du résultat.

i+j
j/i
k+i
j/h
h/j
j%h
h%j

x*z
x/z
x*h
h/z
h/y
(double)j/h
(int)x
(int)x*z
(int)(x*z)

bonjour+x+z
bonjour+(x+z)
x+z+bonjour
"bonjour"+x+z

h/4.0>1
h/4>1
!vrai
(z>=2.0)&&(!(z<0))
(h%2==0)||(vrai)
(h==4)||(x<6)
(h==5)&&(z>0)


Plus difficile (bonus):

(z>=2.0)||(j/i>0)
(!(x>5))&&(j/i>0)
(x>5)&&(j/i>0)
h*i++
h*++j



Exercice 2 - affectation de variables

On dispose des déclarations de variables suivantes:

final double Y=2.0;
int i=1, j=2, k;
double x=5.2, y=2.0, z;
boolean test;

Les affectations suivantes sont-elles possibles ? Si oui quelle est la valeur affectée à la variable ?
 
k=i+j;
k=1.0+j;
k=y/j;
z=3/2;
z=3/2.0;
z=3.0/2;
z=y/j;
z=i+j;
k=(int)x+1.1;
k=x<0;
test=x/y>2;
y=Y*Y;
Y=Y*Y;



Pour les exercices suivants, on créera un nouveau projet sous Eclipse et on inclura le package Utilitaire.jar comme en TD.



Exercice 3 - étude d'un programme: classe Utilitaire, test "if"

Corrigez le programme suivant et ensuite seulement, vérifiez avec eclipse. Vous devez être capable d'expliquer chacun des "bugs": il y en a beaucoup, passez suffisamment de temps sur cet exercice. Le programme corrigé doit s'exécuter selon le commentaire en dessous du "main".


public class ExerciceClinique {
    /**
     *  Petit programme qui ne sert vraiment à rien
     * 
    public static void main(String[] args) {
        // Ce programme tire au hasard un entiers i et un double x
        // et demande à l'utilisateur un entier j;
        // si x et y sont identiques, un message est affiché
        // si i<j, les deux doubles x et y sont permutés
        // sinon x et y sont multipliés l'un par l'autre et le résultat
        // est stocké dans x
        /  dans les deux cas on affiche i, j, x et y
        string message;
        double x;y==55.5,z;
        int j;
        Utilitaire.lireEntier("Quelle valeur pour j ? ");
        int i = Utilitaire.tirerUnEntier(10);
        x = Utilitaire.tirerUnEntier(100);
        if (x=y) Utilitaire.Ecrire("x et y sont identiques");
        if (i<j)
            z=y;
            x=y;
            y=z;
        else x*=y
        Message="i="+i+"  et j="+j;
        Utilitaire.ecrire("message");
        Utilitaire.ecrire("x="+"x"+"  et y="+"y");
    }
}


Etes-vous d'accord avec la correction ?



Exercice 4 - test "if", variables

a) Ecrire un programme qui demande à l'utilisateur les coefficients a,b,c d'un polynôme de degré 2 sous la forme aX^2+bX+c, et qui détermine des valeurs approchées des racines. Pour faciliter l'affichage dans la question suivante, on se restreindra à des coefficients a,b,c entiers. Pour calculer une racine carrée, on utilisera la méthode Math.sqrt().

b) Afficher le résultat sous la forme: "le polynôme 5.X^2-3.X-1 a deux racines, de valeurs: 0.835164807 et -0.2385164807" ou bien "le polynôme X^2-2.X+1 a une seule racine, de valeur: 1".

Les problèmes à résoudre sont: 1) ne pas oublier de cas lorsque l'on détermine les racines, et  2) construire une chaîne de caractère, à afficher avec Utilitaire.ecrire, en tenant compte des signes des coefficients du polynôme et des différentes valeurs du discriminant.



Exercice 4 - pour la route, éventuellement à finir chez soi

Ecrire un programme qui effectue successivement les opérations suivantes:
a) demande son nom à l'utilisateur
b) demande un entier N supérieur ou égal à 20 à l'utilisateur et teste si N est bien supérieur ou égal à 20.
c) tire un entier au hasard entre 5 et N
d) affiche la réponse aux questions suivantes:
            "cet entier est-il divisible par 3 ?"
            "cet entier est-il divisible par 5 ?"
            "cet entier est-il à la fois divisible par 7 et par 8 ?"
            "cet entier est-il dans l'intervalle [7,15[ ?"
L'affichage devra se faire sous la forme: "Bonjour NomUtilisateur, les réponses sont OUI, NON, OUI et NON".



Contact:
Frédéric Sur, ATER au département d'informatique.