L agenda électronique



Documents pareils
Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

Les chaînes de caractères

Programmation système I Les entrées/sorties

Programme Compte bancaire (code)

I. Introduction aux fonctions : les fonctions standards

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

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

Cours d Algorithmique et de Langage C v 3.0

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Les structures. Chapitre 3

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


Rappels Entrées -Sorties

Introduction à l algorithmique et à la programmation M1102 CM n 3

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

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

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

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

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

1.6- Génération de nombres aléatoires

Les fichiers. Chapitre 4

Structure d un programme

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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

TP : Gestion d une image au format PGM

COMPARAISONDESLANGAGESC, C++, JAVA ET

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Formulaire d abonnement au service e-bdl

Programmation C. Apprendre à développer des programmes simples dans le langage C

PROJET ALGORITHMIQUE ET PROGRAMMATION II

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

Notions fondamentales du langage C# Version 1.0

Initiation. àl algorithmique et à la programmation. en C

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

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

3. DONNEES STATISTIQUES DE LA FREQUENTATION 1 DES BU ANNEE UNIVERSITAIRE

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

Claude Delannoy. 3 e édition C++

Règlement d Ordre Intérieur du service «Accueil Assistance» Remplacement de personnel dans les milieux d accueil

LES TYPES DE DONNÉES DU LANGAGE PASCAL

QUESTIONNAIRE DE RECENSEMENT DES BESOINS EN MODES DE GARDE POUR LA PETITE ENFANCE COMMUNE DE L ILE-ROUSSE

Quelques éléments de compilation en C et makefiles

GOL502 Industries de services

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

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

Le langage C. Séance n 4

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

Présentation du langage et premières fonctions

L informatique en BCPST

Algorithmique et Programmation, IMA

Poker. A rendre pour le 25 avril

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

Introduction au langage C

Introduction à l héritage en C++

Programme et calendrier niveau 1 :

PLANNING DE FORMATION JANVIER 2012

TP 1. Prise en main du langage Python

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Représentation d un entier en base b

Cours 14 Les fichiers

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

Versailles Gare Versailles Rive Gauche é Vélizy-Villacoublay Vélizy 2. Du lundi au vendredi. Versailles. Vélizy-Villacoublay

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

La programmation linéaire : une introduction. Qu est-ce qu un programme linéaire? Terminologie. Écriture mathématique

LE GUIDE. Automne Artisans Commerçants Prestataires de services

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

Programmation système de commandes en C

DECONNEXION : Lorsque vous avez terminé, cliquez sur «Déconnexion», pour vous déconnecter.

alg - Classes, instances, objets [oo] Exercices résolus

BIBLIOTHÈQUE MEMPHRÉMAGOG

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

Organigramme / Algorigramme Dossier élève 1 SI

Système de messagerie vocale Cisco Unity Express 7.0 Guide de l utilisateur Fonctionnalités avancées

Il y a 6 FACTEURS qui peuvent t aider à avoir une meilleure gestion du temps. Facteur 6 :

Ligne 34. Château-Landon / Egreville Melun

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Département Automatisation et Informatisation Année Programmation en C++ Institut des Sciences et Techniques de l Ingénieur d Angers

Cours de Système : Gestion de Fichiers

Initiation à la programmation en Python

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

Langage Java. Classe de première SI

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

STAGE ENTREPRISE. Chers Parents,

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

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

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

Cours de C/C++ par la pratique. Hugues Talbot

Thèmes et situations : Agenda et Emploi du temps. Fiche pédagogique

SEGPA EREA. académie Versailles ENTRE : Nom du stagiaire : Prénom : Éducation Nationale Enseignement Supérieur Recherche

Projet de programmation (IK3) : TP n 1 Correction

SUPPORT DE COURS. Langage C

Annexe 4 CONVENTION RELATIVE À L ORGANISATION DE STAGE D'APPLICATION EN MILIEU PROFESSIONNEL

V- Manipulations de nombres en binaire

Cours 1: Java et les objets

Thèmes et situations : Agenda et Emploi du temps. Fiche pédagogique

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

Transcription:

L agenda électronique Figure 1 : vision d'un agenda électronique pour une semaine donnée Dans cette application, nous allons programmer en C++ les sous-programmes et le programme nécessaire à la saisie et à l affichage d un agenda électronique pour une semaine en cours. Notre interface homme-machine sera rudimentaire, puisque nous ne disposerons que du clavier pour lire des données et d une console Unix pour afficher l agenda. Nous émettons les hypothèses simplificatrices suivantes : un événement ne peut débuter avant 8 heures le matin. un événement ne peut finir après 20 heures en soirée. l unité de temps est une demi-heure, la durée d un événement est un multiple d une demi-heure de même que pour les heures de début et fin d un évènement. 8 heures 30 minutes se traduit par le réel 8.50, 9 heures se traduit par le réel 9.00. Par exemple : MERCREDI, 9.00, 11.00, "ALG", "Controle Algorithmique 2" est un événement valide. MARDI, 18.45, 18.47, "ALG", "Je revise mon Controle Algorithmique" est un événement non valide. MARDI, 20.50, 22.50, "ALG", "Je bois pour oublier que je n ai pas revise" est un événement non valide. MARDI, 13.50, 15.00, "NOC", "Controle noyau C+" est un événement valide. -1-

Afin de rendre l application modulaire, nous avons choisi de la scinder en plusieurs fichiers. En effet, l application met clairement en évidence deux types de données à manipuler : un événement et un agenda. C est ainsi que nous avons choisi d utiliser 5 fichiers : - evenement.h contenant la structure des données liées à un événement et les entêtes des sous-programmes manipulant un événement, - evenement.c contenant le corps des sous-programmes manipulant un événement, - agenda.h contenant la structure des données liées à un agenda et les entêtes des sous-programmes manipulant un agenda, - agenda.c contenant le corps des sous-programmes manipulant un agenda, - clientagenda.c contenant le programme principal de l application permettant d éditer un agenda. 1) Les événements Représentation interne : Un événement est composé d un numéro de jour dans la semaine (compris entre un et sept), d une heure de début (de type réel terminant par.0 ou.5), d une heure de fin (de type réel terminant par.0 ou.5), d une description abrégée encodée par une chaîne de 3 caractères, et d une description étendue encodée par une chaîne de caractères. Les jours de la semaine seront codés par des constantes symboliques et les chaînes de caractères seront représentées par des string (classe standard de C++). Opérations : Nous souhaitons disposer des opérations suivantes : -- teste la validité d un événement -- nécessite jour dans la semaine compris entre 1 et 7 -- nécessite heuredébut compris entre 8.0 et 19.5 heures -- nécessite heurefin compris entre 8.5 et 20.0 heures -- nécessite partie décimale des heures égales à.0 ou.5 procédure validerevénement(entrée e <Evenement>) déclenche jourinvalide, heuredébutincorrecte, heurefinincorrecte, DuréeIncorrecte; -- retourne vrai si la partie décimale de h est égale à 0.0 ou 0.5 fonction heurevalide(entrée h <Réel>) retourne <Booléen> ; -- saisit un événement e au clavier -- nécessite jour dans la semaine compris entre 1 et 7 -- nécessite heuredébut compris entre 8.0 et 19.5 heures -- nécessite heurefin compris entre 8.5 et 20.0 heures -- nécessite partie décimale des heures égales à.0 ou.5 procédure saisirevénement(sortie e <Evenement>) déclenche jourinvalide, heuredebutincorrecte, heurefinincorrecte, DuréeIncorrecte; -2-

-- initialise un événement e à partir de j : jour de la semaine, -- hd : heure de début, hf : heure de fin, a : description abrégé et -- d : description détaillée -- nécessite 1 <= jour <= 7 -- nécessite 8.0 <= heuredébut <= 19.5 -- nécessite 8.5 <= heurefin <= 20.0 -- nécessite partiedécimale(heuredébut) = 0.0 ou 0.5 -- nécessite partiedécimale(heurefin) = 0.0 ou 0.5 procédure initialiserevenement(entrée j <Entier>, entrée hd <Réel>, entrée hf <Réel> entrée a <ChaîneCaractères>, entrée d <ChaîneCaractères>, sortie e <Evenement>) déclenche jourinvalide, heuredébutincorrecte, heurefinincorrecte, DuréeIncorrecte; -- affiche un événement e sous la forme -- heuredebut(4 positions) - heurefin(4 positions) : description -- par exemple : -- 8.0-9.5 : Controle Acsi MLD -- 9.5-11.0 : Controle Acsi MLD suite et fin procédure afficherevenement(entrée e <Evenement>); -- teste si l'événement e1 est antérieur à l'événement e2 fonction estanterieur(entrée e1 <Evenement>, entrée e2 <Evenement>) retourne <Booléen>; -- affiche le jour j de la semaine en toutes lettres -- nécessite 1 <= j <= 7 procédure afficherjoursemaine(entrée j <Entier>) déclenche jourinvalide; -- affiche les 2 premières lettres du jour de la semaine j -- "Lu", "Ma",... -- nécessite 1 <= j <= 7 procédure afficherdebutjoursemaine(entrée j <Entier>) déclenche jourinvalide; Travail à réaliser : Définir les fichiers evenement.h et evenement.c puis un programme de test contenant le main() qui permet de vérifier le bon fonctionnement de tous les sousprogrammes. Pour la mise au point, on définira un fichier makefile de l application en précisant toutes les dépendances entre fichiers. Remarques : Pour la fonction heurevalide(), on pourra se servir de la fonction standard floor() qui retourne la partie entière d une réel : float floor(float x ); Son utilisation nécessite l inclusion de la bibliothèque standard C math : #include <cmath> Pour la fonction afficherevenement(), on pourra utiliser les manipulateurs sur le flot standard de sortie. Leur utilisation nécessite l inclusion de la bibliothèque standard C++ iomanip : #include <iomanip> -3-

2) L agenda Représentation interne : Un agenda est un ensemble d événements placés dans une semaine. Voilà sa représentation en langage algorithmique : constante NB_EVENEMENTS <Entier> = 7 * 5 ; type Semaine : tableau [1 à NB_EVENEMENTS] de <Evenement> ; type Agenda : enregistrement semaine <Semaine>, -- tableau des événements de la semaine nbevenements <Entier> ; -- nb évènements de la semaine Opérations : Nous souhaitons disposer des opérations suivantes : -- initialise à vide l'agenda a procédure initialiseragenda(sortie a <Agenda>); -- ajoute à la bonne place un événement e dans l'agenda a trié par ordre -- chronologique des événenements -- nécessite agenda non plein procedure placerevenement(màj a <Agenda> a, entrée e <Evenement>) déclenche débordement; -- édite l'agenda a en affichant les événements pour chaque jour -- de la semaine procédure afficheragendadetail(entrée a <Agenda>); // édite l'agenda global a procédure afficheragendaglobal(entrée a <Agenda>); Remarques : * La procédure afficheragendadetail()affiche sur la sortie standard l agenda de la manière suivante : *** AFFICHAGE AGENDA DETAIL *** Lundi : 8.0-9.5 : Controle Acsi MLD 9.5 11.0 : Controle Acsi MLD suite et fin 14.0-15.5 : Permanence Algo et Noyau C+ DD Mardi : 13.5 15.0 : Controle noyau C+ 16.0 18.0 : Controle Mathematiques Discretes Mercredi: 9.0 11.0 : Controle Algorithmique 2 17.0-18.5 : Comptabilite Rattrapage Vendredi: 11.0-12.5 : Architecture Rattrapage -4-

On peut remarquer que : tous les événements sont affichés dans l ordre d apparition dans la semaine en cours. Jeudi, Samedi et Dimanche n apparaissent pas car ces journées ne contiennent pas d événement à afficher. On pourra bien entendu définir d autres sous-programmes s il y a lieu pour décrire le fonctionnement global. * La procédure afficheragendaglobal()affiche sur la sortie standard l agenda de la manière suivante : *** AFFICHAGE AGENDA GLOBAL *** 08-09 - 10-11 - 12-13 - 14-15 - 16-17 - 18-19 Lu MLD...MLD... ALG... Ma NOC... MTD... Me ALG... CPT... Je Ve ARC... Sa Di On peut remarquer que : le nom abrégé d un événement se compose de 3 caractères et que la durée minimale d un événement est de ½ heure, le nombre de points lorsqu il existe est un multiple de 3 et il correspond au nombre de demi-heures -1 de la durée de l événement. Pour réaliser cet affichage, on se servira d un tableau de 7 chaînes de caractères (type string) initialisé comme suit : "08-09 - 10-11 - 12-13 - 14-15 - 16-17 - 18-19" Puis on rajoutera les événements de l agenda dans les lignes correspondantes en se servant de la méthode replace() définie dans la classe standard string. Travail à réaliser : Définir les fichiers agenda.h et agenda.c puis un programme de test agendaclient.c contenant le main() qui permet de remplir un agenda avec les événements de la semaine, d éditer l agenda détaillé puis éditer l agenda global associés. Pour la mise au point, on définira un fichier makefile de l application en précisant toutes les dépendances entre fichiers. -5-

3) Pour aller plus loin a) modifier la procédure saisirevenement() pour qu elle intercepte toute anomalie et propose à l utilisateur de saisir à nouveau l événement (try catch). b) Pourquoi ne pas stocker les événements dans un fichier? En C++, les entrées-sorties sont gérées au travers des flots. Un flot peut être assimilé à un canal par lequel transitent des séquences d octets. Dans le cas où le canal fournit de l information, on parle de flot d entrée, alors que dans le cas où le canal reçoit de l information, on parle de flot de sortie. Un flot peut être connecté à un périphérique ou un fichier. Si le flot est connecté à un périphérique, on parle de flot standard. Les flots standards sont manipulés au travers des classes istream (flot standard d entrée) et ostream (flot standard de sortie). Il existe 3 flots standards d entrée/sortie définis par le langage (inutile de les déclarer) : - cin (float standard d entrée associé au clavier), - cout (float standard de sortie associé à l écran), - cerr (float standard de sortie associé à l écran) Les flots connectés à des fichiers sont manipulés au travers des classes ifstream (flot d entrée pour lire des fichiers), ofstream (flot de sortie pour écrire dans des fichiers). Voici quelques opérations associées à un flot connecté à un fichier. int open(char []); void close(); bool is_open(); bool eof(); Ouvre un fichier externe et l'associe à un flot. Cette fonction retourne 0 si l'opération ne s'est pas effectuée correctement Ferme un fichier et le dissocie du flot Examine si le flot est déjà connecté à un fichier Examine si la fin de fichier est atteinte Exemple : création d un fichier de noms #include <iostream> #include <fstream> #include <string> using namespace std; int main () ofstream f; f.open("noms.dat"); string n ; cout <<"entrer un nom ou # pour terminer" ; cin >>n ; while (n!= "#") f <<n <<endl; cout <<"entrer un nom ou # pour terminer"; -6-

cin >>n; f.close(); Exemple : lecture d un fichier de noms #include <iostream> #include <fstream> #include <string> using namespace std; int main() ifstream f; f.open("noms.dat"); string n; f >>n; while (!f.eof()) cout <<n<<"\t"; f >>n; f.close(); Créer sous l éditeur de texte un fichier nommé «ficevenements», puis saisir dans le fichier les événements comme ci-dessous : 5 11 12 ARC Architecture_Rattrapage 3 17 18.5 CPT Comptabilite_Rattrapage 1 14 15.5 ALG Permanence_Algo_et_Noyau_C+_DD 1 8 9.5 MLD Controle_Acsi_MLD 1 9.5 11 MLD Controle_Acsi_MLD_suite_et_fin 2 13.5 15 NOC Controle_noyau_C+ 2 16 18 MTD Controle_Mathematiques_Discretes 3 9 11 ALG Controle_Algorithmique_2 Ajouter au type Agenda l opération lirefichierevenements() spécifiée en langage algorithmique par : -- lit le fichier texte "ficevenements" contenant des événements -- en construisant au fur et à mesure l'agenda a -- pour chaque événement du fichier : -- nécessite jour dans la semaine compris entre 1 et 7 -- nécessite heuredébut compris entre 8.0 et 19.5 heures -- nécessite heurefin compris entre 8.5 et 20.0 heures -- nécessite partie décimale des heures égales à.0 ou.5 procédure lirefichierevenements(sortie a <Agenda>) déclenche jourinvalide, heuredébutincorrecte, heurefinincorrecte, DuréeIncorrecte; Tester l opération dans l application agendaclient.c. -7-