exercices divers Exercice 2.2.1 erreurs à la compilation Question 1 classifier les erreurs



Documents pareils
Corrigé des exercices sur les références

Java Licence Professionnelle CISII,

Corrigés des premiers exercices sur les classes

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Utilisation d objets : String et ArrayList

Chapitre 10. Les interfaces Comparable et Comparator 1

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Programme Compte bancaire (code)

Premiers Pas en Programmation Objet : les Classes et les Objets

Introduction au langage C

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Cours d initiation à la programmation en C++ Johann Cuenin

Objets et Programmation. origine des langages orientés-objet

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Plan du cours. Historique du langage Nouveautés de Java 7

TD3: tableaux avancées, première classe et chaînes

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

ACTIVITÉ DE PROGRAMMATION

Machines virtuelles fonctionnelles (suite) Compilation ML Java

STAGE IREM 0- Premiers pas en Python

INF 321 : mémento de la syntaxe de Java


Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Programmer en JAVA. par Tama

Algorithmique et Programmation, IMA

Langage Java. Classe de première SI

Conventions d écriture et outils de mise au point

TP1 : Initiation à Java et Eclipse

TP, première séquence d exercices.

Bases de programmation. Cours 5. Structurer les données

Tp 1 correction. Structures de données (IF2)

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Présentation du langage et premières fonctions

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Les arbres binaires de recherche

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

UE Programmation Impérative Licence 2ème Année

Programmation en Java IUT GEII (MC-II1) 1

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

OS Réseaux et Programmation Système - C5

Le prototype de la fonction main()

as Architecture des Systèmes d Information

Corrigé des TD 1 à 5

Le langage C. Séance n 4

TP3 : Manipulation et implantation de systèmes de fichiers 1

Cours Programmation Système

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Solutions du chapitre 4

Java Licence Professionnelle CISII,

I. Introduction aux fonctions : les fonctions standards

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Notions fondamentales du langage C# Version 1.0

Rappels Entrées -Sorties

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Les chaînes de caractères

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Recherche dans un tableau

Java DataBaseConnectivity

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Flux de données Lecture/Ecriture Fichiers

Algorithmique et programmation : les bases (VBA) Corrigé

Projet de programmation (IK3) : TP n 1 Correction

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Feuille TD n 1 Exercices d algorithmique éléments de correction

Cours d Algorithmique et de Langage C v 3.0

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Examen Médian - 1 heure 30

Exercices sur les interfaces

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Programmation Objet Java Correction

Java 1.5 : principales nouveautés

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

1. Structure d'un programme FORTRAN 95

Algorithmique I. Algorithmique I p.1/??

Les structures. Chapitre 3

Programmation C++ (débutant)/instructions for, while et do...while

TP 1. Prise en main du langage Python

Programmation système de commandes en C

Découverte de Python

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Initiation à la programmation en Python

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Transcription:

exercices divers Exercice 2.2.1 erreurs à la compilation Question 1 classifier les erreurs Le programme suivant ne compile pas. Signalez les erreurs, et expliquez leur nature : de syntaxe, de typage, variable non déclarée, variable déclarée mais non initialisée, ou appel de méthode invalide. 1 public class Td3_1 { 2 public static void main (String [] arguments) { 3 d double; 4 int x=7; 5 int z; 6 char c = k ; 7 x = x + z; 8 Terminal.ecrireString("c= " + c); 9 boolean tt; 10 tt=x+4; 11 bb = 3 < tt; 12 x+1 = 3; 13 Terminal.lireInt(); 14 Terminal.lireInt(7); 15 Terminal.ecrireInt(Terminal.lireInt() + 4); 16 Math.min(Terminal.lireInt(), x); 17 Terminal.ecrireInt(Math.min(Terminal.lireInt(), x)); 18 x = Terminal.ecrireInt(5); 19 Terminal.ecrireInt(5); 20 Terminal.ecrireInt(); 21 22 Réponse : ligne 3 : erreur de syntaxe. La syntaxe correcte est : double d; ligne 7 : la variable z est déclarée mais n a pas de valeur initiale alors qu elle est nécessaire pour réaliser le calcul de l expression x + z à droite de l affectation. ligne 10 : erreur de typage. Le type de l expression x + 4 à droite de l affectation est int. Il est incompatible avec le type de la variable tt à gauche, qui est boolean ; ligne 11 : deux erreurs la variable bb n est pas déclarée ; (erreur de typage) on ne peut pas utiliser l opérateur de comparaison > sur un int et un boolean ; ligne 12 : l opérateur d affectation = doit avoir à gauche une variable et non pas une expression ; 1

ligne 14 : erreur de typage. L appel de méthode Terminal.lireInt(7) ne doit pas prendre d argument ; ligne 18 : erreur de typage. L appel de méthode Terminal.ecrireInt(5) ne retourne pas un résultat de type int, qui est le type attendu pour affecter la variable x ; ligne 20 : erreur de typage. L appel de méthode Terminal.ecrireInt() doit prendre un argument. Question 2 résultats d appels non utilisé Dans le programme précédent, certains appels de méthodes retournent un résultat, mais ces résultats ne sont récupérés nul part : ils ne sont stockés dans aucune variable, ni utilisés au cours d un calcul, ni sont donnés en argument d un autre appel de méthode. Ce ne sont pas des erreurs de compilation mais probablement de la logique du programme. Signalez ces appels. Réponse : Il s agit des appels dans les lignes 13, 14 et 16. Dans la ligne 16, c est le résultat de Math.min qui est non utilisé. Exercice 2.2.2 codage d algorithmes Codez en Java les algorithmes suivants (donnés en exercice dans la feuille 1 d exercices). 1. Calculer la note finale d une matière selon les règles suivantes. La note finale dépend des notes obtenues lors de l examen final (obligatoire), et de l examen partiel (qui est optionnel). La règle de calcul est : une note inférieure à 7 à l examen final est éliminatoire, on prend la moyenne des deux notes (final et partiel) si cette moyenne avantage l étudiant. Réponse : Dans ce programme nous supposons que les notes saisies sont correctes : on se dispense donc de tests de validation des notes saisies. L énonce du problème ne nous dit pas quelle doit être la note finale de l élève au cas où il est éliminé, autrement dit, s il a une note inférieure à 7 à l examen final. Dans ce cas, il est clair qu on ne peut pas lui attribuer la moyenne des deux notes, car il pourrait ne pas être éliminé. Nous avons choisi de lui attribuer la note de l examen. Notez que ce programme ne calcule la moyenne des deux notes que si elle avantage l élève. 1 public class NoteMatiere { 3 /* Calcule la note finale a partir des notes d examens 4 partiel et final. 5 On suppose: 6 -les notes saisies sont correctes. 7 -si une epreuve n est pas passee, sa note saisie est 0 8 */ 9 double npart, nexam, nfinale; 10 Terminal.ecrireString("Entrez la note du partiel (0 si absent): "); 11 npart = Terminal.lireDouble(); 12 Terminal.ecrireString("Entrez la note a l examen (0 si absent): "); 13 nexam = Terminal.lireDouble(); 14 if (nexam < 7 nexam >= npart) { 15 nfinale = nexam; 2 NFA031 c CNAM 2012

16 else { 17 nfinale = (nexam + npart)/2; 18 19 Terminal.ecrireStringln("La note finale est: "+ nfinale); 20 21 2. Tester si trois nombres entiers saisis au clavier sont triés dans l ordre croissant. Réponse : Cette réponse utilise une variable booléenne qui est affectée (ligne 14) avec la valeur de la condition qui teste si les trois entiers sont triés. Notez également que le test sur la valeur de cr ligne 15 est if (cr)... et non pas if (cr==true)... qui aurait été redondant. 1 public class TestTroisInts { 3 /* Teste si trois entiers saisis au clavier sont tries 4 dans l ordre croissant (non strict). 5 */ 6 int a,b,c; 7 boolean cr; 8 Terminal.ecrireString("Entrez un nombre entier: "); 9 a = Terminal.lireInt(); 10 Terminal.ecrireString("Entrez un nombre entier: "); 11 b = Terminal.lireInt(); 12 Terminal.ecrireString("Entrez un nombre entier: "); 13 c = Terminal.lireInt(); 14 cr = (a <= b && b <= c); 15 if (cr) { 16 Terminal.ecrireStringln("Les entiers sont tries. "); 17 else { 18 Terminal.ecrireStringln("Les entiers ne sont pas tries. "); 19 20 21 Une autre solution con site à calculer la valeur de cr à l aide d une conditionnelle de la forme 1 if (a <= b && b <= c) { 2 cr = true; 3 else { 4 cr = false; 5 3. Calculer puis afficher le plus grand parmi trois nombres entiers saisis au clavier. Réponse : Une solution qui demande peu de tests et qui est facile à lire, est de garder dans une variable max le plus grand parmi a et b, puis de comparer cette valeur avec celle de c. 1 public class Max3Int { 2 public static void main (String [] arguments) { 3 /* Calcule et affiche la valeur la plus grande 4 parmi celles de 3 entiers saisis au clavier 5 */ 6 7 int a, b, c, max; NFA031 c CNAM 2012 3

8 Terminal.ecrireString("valeur de a : "); 9 a=terminal.lireint(); 10 Terminal.ecrireString("valeur de b : "); 11 b=terminal.lireint(); 12 Terminal.ecrireString("valeur de c : "); 13 c=terminal.lireint(); 14 if (a>b){ 15 max = a; 16 else { 17 max = b; 18 19 if (c>max){ 20 max = c; 21 22 Terminal.ecrireString("La valeur la plus grande est "); 23 Terminal.ecrireIntln(max); 24 25 Exercice 2.2.3 blocs et variables locales Question 1 affichages, mémoire Donnez les messages affichés par le programme suivant et dessinez les valeurs des variables en mémoire. 1 public class Exo3_3 { 3 int a = 2; 4 int x = 4; 5 Terminal.ecrireStringln("* Bloc main *"); 6 Terminal.ecrireStringln("a =" + a ); 7 Terminal.ecrireStringln("x =" + x ); 8 if (a<12) { 9 /* Bloc 1 */ 10 int k = 12; 11 x = a+x; 12 k = k+1; 13 Terminal.ecrireStringln("* Bloc 1 *"); 14 Terminal.ecrireStringln("a =" + a ); 15 Terminal.ecrireStringln("k (locale) =" + k ); 16 Terminal.ecrireStringln("x =" + x ); 17 Terminal.ecrireStringln("* Fin Bloc 1 *"); 18 19 // Terminal.ecrireStringln("k =" + k ); 20 int k = 3; 21 Terminal.ecrireStringln("k =" + k ); 22 Terminal.ecrireStringln("a =" + a ); 23 Terminal.ecrireStringln("x =" + x ); 24 25 4 NFA031 c CNAM 2012

Ce programme affiche > java Exo3_3 * Bloc main * a =2 x =4 * Bloc 1 * a =2 k (locale) =13 x =6 * Fin Bloc 1 * k =3 a =2 x =6 Dans ce programme la mémoire du bloc le plus externe ( bloc main ) possède les variables a et x, qui sont visibles également dans le bloc plus interne ( bloc 1 ). Ces variables sont modifiées dans ce dernier bloc. Le bloc 1 déclare une variable locale k, qui disparaît une fois ce bloc terminé. Dans la ligne 19, une nouvelle variable k, est déclarée dans le bloc du main. Question 2 Que se passe-t-il dans ce programme si on enlève les commentaires dans la ligne 19? Ce programme est-il correct? Ce programme ne compile pas, car la variable k est inconnue à ce point. Exercice 2.2.4 petits programmes Question 1 positif ou négatif Écrire un programme qui détermine si un nombre est positif ou négatif. Il considérera 0 comme positif. class Exo3_4_1{ public static void main (String[] arguments){ int le_nombre; Terminal.ecrireStringln("Entrez un nombre:"); le_nombre = Terminal.lireInt(); if (le_nombre<0){ Terminal.ecrireStringln("Ce nombre est negatif"); else{ Terminal.ecrireStringln("Ce nombre est positif"); NFA031 c CNAM 2012 5

Question 2 rectangle Modifiez le programme Rectangle2 pour qu il affiche un rectangle vide au lieu d un rectangle plein. class Exo3_4_2{ public static void main (String[] args) { int l; Terminal.ecrireString("combien de lignes d étoiles?:"); l=terminal.lireint(); Terminal.ecrireStringln("****"); for (int i=0;i<l-2;i=i+1){ Terminal.ecrireStringln("* *"); Terminal.ecrireStringln("****"); Question 3 sommes des premiers entiers 1. Écrivez un programme qui calcule la somme des 10 premiers entiers. class Exo3_4_3{ public static void main (String[] args) { int somme = 0; for (int i=10;i>0;i=i-1){ somme = somme + i; Terminal.ecrireStringln("la somme des 10 premiers entiers vaut " + somme); 2. Modifiez le programme pour qu il calcule la somme des n premiers entiers où n est un nombre saisi au clavier et entré par l utilisateur. class Exo3_4_3_2{ public static void main (String[] args) { int somme = 0; int n; Terminal.ecrireString("combien d entiers?:"); n=terminal.lireint(); for (int i=n;i>0;i=i-1){ somme = somme + i; Terminal.ecrireStringln("la somme des " + n + " premiers entiers vaut " + somme); 6 NFA031 c CNAM 2012

3. Modifier le programme pour calculer non plus la somme mais la moyenne des n entiers. Attention : en Java, l opération de division appliquée sur deux entiers est la division entière, qui donne en résultat un entier. Ainsi, 5/2 donne en résultat 2 et non pas 2.5. Si vous souhaitez que l opération appliquée sur les deux nombres soit la division décimale, au moins l une des deux opérandes doit être un nombre à virgule (par exemple un double). Par exemple, l opération 5/2.0 donne en résultat 2.5. Solution : La somme de nombres calculée dans le programme précédent doit être divisée par n, et stockée dans une variable moyenne de type double. Mais, afin de nous assurer que la division employée lors de l opération somme/n ligne 11, est bien une divisions décimale, nous déclarons la variable somme de type double. 1 class Exo3_4_3_3{ 3 double somme = 0; 4 int n; 5 double moyenne; 6 Terminal.ecrireString("combien d entiers?:"); 7 n=terminal.lireint(); 8 for (int i=n;i>0;i=i-1){ 9 somme = somme + i; 10 11 moyenne = somme / n; 12 Terminal.ecrireStringln("la moyenne des " + n + 13 " premiers entiers vaut " + moyenne); 14 15 NFA031 c CNAM 2012 7