Exemple Analyse 1 : Opérations sur matières et notes

Documents pareils
Utilisation d objets : String et ArrayList

Java Licence Professionnelle CISII,

Programme Compte bancaire (code)

Corrigés des premiers exercices sur les classes

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

Projet de programmation (IK3) : TP n 1 Correction

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

Premiers Pas en Programmation Objet : les Classes et les Objets

Corrigé des exercices sur les références

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmer en JAVA. par Tama

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

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

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

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

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

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


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

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Programmation avec des objets : Cours 7. Menu du jour

ACTIVITÉ DE PROGRAMMATION

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

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Corrigé des exercices avancés sur les structures récursives

Algorithmique et Programmation, IMA

Package Java.util Classe générique

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

Algorithmique I. Algorithmique I p.1/??

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

Chapitre 10. Les interfaces Comparable et Comparator 1

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)

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

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

Conventions d écriture et outils de mise au point

Les structures de données. Rajae El Ouazzani

Cours de Systèmes d Exploitation

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

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

Représentation d un entier en base b

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

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

TP, première séquence d exercices.

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

1. Structure d'un programme FORTRAN 95

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

Introduction au langage C

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Les arbres binaires de recherche

Solutions du chapitre 4

I. Introduction aux fonctions : les fonctions standards

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

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

Programmation en Java IUT GEII (MC-II1) 1

Notions fondamentales du langage C# Version 1.0

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

TD/TP PAC - Programmation n 3

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

Exercices sur les interfaces

Langage Java. Classe de première SI

Cours Informatique Master STEP

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

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

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

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

TP 1. Prise en main du langage Python

Problèmes liés à la concurrence

Serveur d'archivage 2007 Installation et utilisation de la BD exist

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

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

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Généralités sur le Langage Java et éléments syntaxiques.

Informatique III: Programmation en C++

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

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

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

Initiation à la programmation en Python

Remote Method Invocation (RMI)

Découverte de Python

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

Plan du cours Cours théoriques. 29 septembre 2014

AWS avancé. Surveiller votre utilisation d EC2

Java DataBaseConnectivity

Recherche dans un tableau

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

Programmation par les Objets en Java

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Le prototype de la fonction main()

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Cours d Algorithmique et de Langage C v 3.0

Algorithmique et programmation : les bases (VBA) Corrigé

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

PROJET 1 : BASE DE DONNÉES REPARTIES

Apprendre Java en 154 minutes

Transcription:

Exemple Analyse 1 : Opérations sur matières et notes V. Aponte Cnam 7 décembre 2012

Sous-programmes : outil de découpage/structuration Principe de conception/programmation : diviser pour régner Objectif : Concevoir un programme comme un assemblage de solutions à des sous-problèmes : Chaque sous-problème correspond à une partie (non triviale) du problème global ; Concevoir un sous-programme par sous-problème ; Obtenir liste sous-programmes noms + paramètres+ types+ description objectif (sans dire comment) ; Guide : pouvons nous écrire une solution simple et courte par asseblage d appels aux sous-programmes?

Analyse descendante Processus de découpage d un problème en sous-problèmes : en identifiant les sous-programmes à écrire pour obtenir la solution ; chaque sous-programme utilise d autres (éventuellement) chaque sous-programme reste très simple et court Question à poser par sous-problème identifié : Que doit faire le sous-programme correspondant? Son nom, ses paramètres, son résultat? Sa signature Java nom, type paramètres + résultat. Découpable en sous-sous-problèmes? Si oui, continuer analyse descendante sur les sous-sous-problèmes.

Analyse descendante : données Répresentation des données : quelles sont les données d entrée et/ou sortie? comment les organiser? quelles opérations aurons nous à leur appliquer? coment les répresenter pour faciliter les opérations? quelles hypothèses faisons nous sur les données? Lien entre sous-programmes et répresentation des données : chaque opération doit se traduire par une (des) méthode, doivent être utiles à notre problème, doivent maintenir les hypothèses sur les données.

Un exemple Problème : gérer les notes d un ensemble de matières, avec opérations de calcul de moyenne, recherche d une note, modification d une note, affichage du bulletin. Initialisation : 1. lire une liste de noms de matières, 2. lire une note par matière, Boucle avec menu d opérations : 1. afficher le bulletin des notes 2. chercher la note d une matière 3. modifier une note 4. finir

Interface texte : gestion de notes Nombre de matieres? 4 Une matiere? Maths Une matiere? SVT Une matiere? Info Une matiere? Anglais Note de Maths? 10 Note de SVT? 11 Note de Info? 12 Note de Anglais? 13 Bonjour. Voici les operations disponibles: 1. Afficher le bulletin 2. Chercher une note 3. Mofidier une note 4. Finir Votre choix --->

Gestion des notes : les données Répresentation des données : 2 tableaux tableau de chaînes avec noms des matières, tableau de notes (doubles) Hypothèses : tableaux de même taille, au moins 1 composante, matière et sa note aux mêmes indices. Opérations sur les données : afficher le contenu (matière + note) des 2 tableaux moyenne tableau notes ; chercher une note étant donné un nom de matière ; modifier une note étant donné un nom de matière ; intialiser les 2 tableaux ;

Sous-tâches du main main Initialisation Opérations matières notes finir menu+ choix afficher bulletin chercher note modifier note

Sous-tâches d initialisation des données Initialisation matières notes String [] liretab(int) double [] liretabnotes(string[]) lecture validée note double liredoub(inf, sup)

Sous-tâches pour les opérations Opérations fin menu+ choix afficher bulletin void opaffichebulletin(mat,not) modifier note int affichemenuchoix() double moyenne(not) chercher note lecture validée entier int lireent(inf, sup) void opcherchenote(mat,not) void opchangenote(mat,not) indice d'une matière int indicemat(m, mat)

Liste détaillée de méthodes Nous détaillons : entêtes des méthodes par sous-tâche identifiée, commentaires précis de ce qu elle doit faire + ses hypothèses. Intialiser les 2 tableaux /* Lit un tableau de taille n */ static String [] liretabstring (int n) /* Lit une note pour chaque matiere dans m */ static double [] liretabnotes (String [] m) Attention à lire un tableau avec au moins une matière appel avec paramètre n 1.

Liste de méthodes (2) afficher le contenu (matière + note) des 2 tableaux /* Affiche matieres de m avec notes de t * et leur moyenne */ static void opaffichebulletin(double [] t, String [] m) a besoin de : calcul moyenne tableau notes : static double moyennetab (double [] t)

Préciser les hypothèses des méthodes Important : préciser conditions indispensables au bon fonctionnement des méthodes dans commentaires ex : le calcul de la moyenne se fait sur un tableau non vide ; cela nous aide à penser par la suite à les garantir lors des appels appel avec tableau non vide /*Retourne la moyenne d un tableau t de double * Hypothese: t est non vide */ static double moyennetab (double [] t)

Liste de méthodes (3) chercher une note étant donné un nom de matière ; /* Lit un nom de matiere et cherche son indice * dans m. Si trouve, affiche sa note dans t, * sinon signale une erreur */ static void opcherchenote(string [] m, double [] t) a besoin de : chercher l indice d une chaîne dans un tableau de chaînes /* Retourne l indice d une matiere si existe * et -1 sinon. **/ static int indicemat(string a, String [] m)

Liste de méthodes (4) modifier une note étant donné un nom de matière ; static void opchangenote(string [] m, double [] t) a (comme avant) besoin de : chercher l indice d une chaîne dans un tableau de chaînes static int indicemat(string a, String [] m)

Liste méthodes (5) Autres : afficher le menu d opérations et lire un choix, /* Affiche les operations du menu * lit un choix (valide) de l utilisateur * renvoi ce choix en resultat */ static int affichemenuetchoix() lecture validée d une option du menu, d une note, etc. static int lireent(string me, int inf, int sup) static double liredou(string me, double inf, double sup)

Pouvons nous écrire un main avec ces méthodes? int nb = lireent("nombre de matieres? ",1,20); String [] matieres = liretabstring(nb); double [] notes = liretabnotes(matieres); boolean fin = false; while (!fin) { int choix = affichemenuetchoix(); if (choix == 1) { opaffichebulletin(notes, matieres); else if (choix == 2) { opcherchenote(matieres, notes); else if (choix == 3) { opchangenote(matieres, notes); else if (choix == 4) { Terminal.ecrireStringln(" *** Au revoir... *** fin=true;

Bilan analyse, début du codage Principe : l analyse finit quand... commence le codage + tests. En pratique, on se contente de : savoir bien expliquer comment représenter les données, comment s en servir pour traiter le problème, et quelles sont les méthodes à écrire, L écriture du main permet de mettre à l épreuve la pertinence de notre analyse.

Codage et test Par où commencer à coder? : Principe : coder en premier les méthodes «feuilles», n ayant besoin d autres méthodes ; méthodes d affichage qui permettront de faire des tests ; laisser l implantation de lecture validée pour plus tard, etc... chaque opération codée testée minucieusement : permettra de passer à autre chose sans avoir à y revenir.

Compilation et test Principe : déclarer toutes les méthodes, avec corps minimale permettant de compiler : /* Operation affichage du bulletin de notes */ static void opaffichebulletin(double [] t, String [] m) { Terminal.ecrireStringln("non implante"); /* Retourne l indice d une matiere si elle existe * et -1 sinon. **/ static int indicemat(string a, String [] m) { return -1; But : compiler tout le programme ; implantation incrémentale.

Codage méthodes initialisation /* Lecture d un tableau de String de taille n */ static String [] liretabstring (int n) { String [] t = new String[n]; for (int i=0; i< t.length; i++) { Terminal.ecrireString("Une matiere? "); t[i] = Terminal.lireString(); return t;

Méthodes initialisation (2) /* Lecture d un tableau de notes par matiere */ static double [] liretabnotes (String [] m) { double [] t = new double[m.length]; for (int i=0; i< t.length; i++) { t[i] = liredou("note de " + m[i]+"? ",0,20); return t; a besoin de liredou.

Méthode lecture double entre inf et sup /* Lecture d un double compris entre inf et sup * avec message */ static double liredou(string message, double inf, double sup) { while (true) { Terminal.ecrireString(message); double n = Terminal.lireDouble(); if (n<inf n> sup) { Terminal.ecrireStringln("Doit etre entre "+ inf+ else return n;

Opérations sur le menu /* Affichage menu et lecture choix operation. * Retourne un choix valide d operation */ static int affichemenuetchoix(){ Terminal.sautDeLigne(); Terminal.ecrireStringln("Bonjour. Operations disponib Terminal.ecrireStringln(" 1. Afficher le bulletin"); Terminal.ecrireStringln(" 2. Chercher une note"); Terminal.ecrireStringln(" 3. Mofidier une note"); Terminal.ecrireStringln(" 4. Finir. "); return(lireent("votre choix ---> ", 1, 4));

Opération de recherche d une note /* Operation recherche d une note */ static void opcherchenote(string [] m, double [] t) { Terminal.ecrireStringln("Nom de la matiere a chercher? String nm = Terminal.lireString(); int ind = indicemat(nm, m); if (ind <0) { Terminal.ecrireString("Matiere non trouvee."); else { Terminal.ecrireString("Note de "+nm+" = "+t[ind]); a besoin de indicemat.

Indice d une matière /* Retourne l indice d une matiere si elle existe * et -1 sinon. **/ static int indicemat(string a, String [] m) { for (int i=0; i<m.length; i++){ if (a.equals(m[i])) return i; return -1;

Fin du codage Le reste du codage est laissé en exercice!