NFA031
Question 1: Cette partie examine plusieurs solutions à ce problème:
if (a>b) && (a>c) max = a; if (b>a) && (b>c) max = b; if (c>a) && (c>b) max = c; Terminal.ecrireStringln("Le plus grand est "+ max);
if (a>b) max = a; else max = b; if (c > max) max = c; Terminal.ecrireStringln("Le plus grand est "+ max);
if (a>=b){ if (a>=c){ max = a; Terminal.ecrireStringln("a>=b et a>=c"); }else{ max = ?; Terminal.ecrireStringln("a>=b et c>a") } } else if (b>=c){ max = ?; Terminal.ecrireStringln(??) } else{ max = ?; Terminal.ecrireStringln(??) } Terminal.ecrireStringln("Le plus grand est "+ max);
Question 3: Modifiez le 2ème programme de la question 1 pour afficher les conditions validées par chaque branche (exactement comme pour la question précédente).
On souhaite écrire un programme qui saisit 3 valeurs entières (x,y,z) et qui affiche ces valeurs dans l'ordre croissant (pas forcément strict). On veut mettre en oeuvre deux types d'algorithme:
if (x < y && x < z) { // x en premier afficher x, suivi de y et z dans le bon ordre } else if (x > y && x > z) { // x en dernier afficher y et z dans le bon ordre, suivis par x } else { // x au milieu afficher x au milieur de y et z dans le bon ordre }
Complétez cet algorithme et produisez un programme complet.
Dans cet exercice vous devez utiliser le programme écrit lors du tp1
(exercice 4) afin de calculer le nombre de jours d'un
mois pour une année donnée. Complétez ce programme afin de lire une
date (jour, moi, année) et tester si celle ci correspond à une date
correcte. Par exemple, le 20/03/2008 est une date
correcte, alors que 30/02/2005 et 50/45/2000 ne le sont pas.
Afin de valider une date vous devrez vérifier si le nombre du jour est valide pour le mois donné. Par exemple, le 31/04 n'existe pas car il n'y a que 30 jours au mois de mars. De même, le 29/02/2001 n'existe pas, alors que le 29/02/2000 est une date valide. Vous devrez donc être en mesure d'appliquer l'algorithme de calcul du nombre de jours dans un mois pour une année donnée.
Les programmes suivants
contiennent des boucles. Pour chacun de ces programmes,
donnez un tableau qui
retrace l'évolution des variables lors de chaque itération.
Vous donnerez également la suite des messages affichés.
Inspirez-vous des tableaux donnés au chapitre 3 pour suivre
la trace d'un boucle.
Exemple: Voici un exemple extrait des notes de cours pour la boucle de calcul de la somme d'entier saisis au clavier:
public class Somme { public static void main (String[] args) { int n, total; // Initialisation de n,total Terminal.ecrireString("Un entier? "); Terminal.ecrireString("(fin avec 0): "); n = Terminal.lireInt(); total = 0; while ( n !=0 ) { total = total + n; Terminal.ecrireString("Un entier? "); Terminal.ecrireString("(fin avec 0): "); n = Terminal.lireInt(); } Terminal.ecrireString("La somme totale est: "); Terminal.ecrireIntln(total); }}
Supposons une saisie de 5, 4, 7 et 0. Messages affichés par cette exécution:
% java Somme Un entier? (fin avec 0) 5 Un entier? (fin avec 0) 4 Un entier? (fin avec 0) 7 Un entier? (fin avec 0) 0 La somme totale est: 16
Évolution des variables:
init | itération 1 | itération 2 | itération 3 | itération 4 | |
(n !=0) | (5 != 0) | (4 != 0) | (7 != 0) | (0 != 0) | |
total | 0 | 0+5 | 0+5+4 | 0+5+4+7 | arrêt |
n | 5 | 4 | 7 | 0 | arrêt |
Les programmes à étudier:
public class Puiss { public static void main (String[] args) { int a,b, p; Terminal.ecrireString("a? "); a = Terminal.lireInt(); Terminal.ecrireString("b? "); b = Terminal.lireInt(); p = 1; for (int i=b; i >= 1; i--) { p = p * a; } Terminal.ecrireStringln(a + " a la puissance " + b + " => " + p); } }
class FactorielleSimple{ public static void main(String[] argv){ int n; Terminal.ecrireString("Entrez un nombre (petit): "); n = Terminal.lireInt(); int res = 1; for (int i = 1; i<=n; i++){ res = res * i; } Terminal.ecrireString("La factorielle de "+n + " est "); Terminal.ecrireIntln(res); } }
Considérez les boucles suivantes:
// Boucle 1 int i = 5; while (i>0) { Terminal.ecrireStringln("Test"); i--; } // Boucle 2 int i = 0; while (i>0) { Terminal.ecrireStringln(``Test''); i--; } // Boucle 3 for (int i = 1; i != 5; i = i + 2) { Terminal.ecrireStringln("Test"); } // Boucle 4 for (int i = 1; i>0; i++) { Terminal.ecrireStringln("Test"); } // Boucle 5 int i = 1; while (i < 100) { Terminal.ecrireStringln(i*i); }
Modifiez le programme écrit dans l'exercice 3 afin de re-demander la date jusqu'à ce que celle-ci soit correcte.
Le programme finit en affichant la date correcte saisie.