Correction n o 1. Cours de programmation impérative Licence MPI L1 S2 - Info 121. Prise en main / Conditions / Boucles

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

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

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

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

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

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


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

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

Programme Compte bancaire (code)

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

Claude Delannoy. 3 e édition C++

Cours d Algorithmique et de Langage C v 3.0

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Outils pour la pratique

Java Licence Professionnelle CISII,

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

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

Tutoriel code::blocks

Le langage C. Séance n 4

Introduction au langage C

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmation en Java IUT GEII (MC-II1) 1

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

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

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

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

Installation et compilation de gnurbs sous Windows

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

TP1 : Initiation à Java et Eclipse

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

Bases Java - Eclipse / Netbeans

Algorithmique et Programmation, IMA

Algorithmique I. Algorithmique I p.1/??

TP 1. Prise en main du langage Python

Projet De Stijl Plate-forme pour robots mobiles

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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)

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

ACTIVITÉ DE PROGRAMMATION

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

Approche Contract First

Programmation système I Les entrées/sorties

Programmation en C/C++

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

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

Package Java.util Classe générique

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

WinTask x64 Le Planificateur de tâches sous Windows 7 64 bits, Windows 8/ bits, Windows 2008 R2 et Windows bits

PIC EVAL Dev Board PIC18F97J60

wxwidgets dans un environnement Microsoft Windows

I. Introduction aux fonctions : les fonctions standards

Réglages du module de sauvegarde de Biblionet (Monoposte)

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Construire des plug-ins pour SAS Management Console SAS 9.1

Utilisation de la Plateforme Office365 et d Oultlook Web App

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

Guide d installation de MySQL

sommaire Archives... Archiver votre messagerie... Les notes... Les règles de messagerie... Les calendriers partagés Les listes de diffusions...

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

Apps Sage : les 10 étapes pour publier vos données dans le Cloud.

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

Mise en route de Cobian Backup

Programmation stochastique

TP1 : Initiation à Java et Eclipse

Premiers Pas en Programmation Objet : les Classes et les Objets

COMPTABILITE SAGE LIGNE 30

Procédure d installation d AMESim 4.3.0

Une introduction à Java

Introduction à l héritage en C++

TP, première séquence d exercices.

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Introduction au pricing d option en finance

et Programmation Objet

WinReporter Guide de démarrage rapide. Version 4

Projet de programmation (IK3) : TP n 1 Correction

Documentation module hosting

IUT ANNECY Département Mesures Physiques Cours d informatique Initiation au langage C

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

Eclipse atelier Java

SOMMAIRE. Accéder à votre espace client. Les Fichiers communs. Visualiser les documents. Accéder à votre espace client. Changer de Workspace

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

TP1. Outils Java Eléments de correction

Direction des Systèmes d'information

PROCEDURE ESX & DHCP LINUX

ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

TUTORIEL D INSTALLATION D ORACLE ET DE SQL DEVELOPPER TUTORIEL D INSTALLATION D ORACLE...1 ET DE SQL DEVELOPPER...1

INFO-F-105 Language de programmation I Séance VI

STAGE IREM 0- Premiers pas en Python

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

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

CRÉER UN DVD VIDEO avec DVD FLICK (avec ou sans menu)

as Architecture des Systèmes d Information

Introduction à Eclipse

Programmation système en C/C++

Les structures. Chapitre 3

Présentation du langage et premières fonctions

Transcription:

Correction n o 1 Cours de programmation impérative Licence MPI L1 S2 - Info 121 Prise en main / Conditions / Boucles La présence aux séances de TPs est obligatoire, et l assiduité sera prise en compte dans l évaluation pour le contrôle continu. Par ailleurs, trois séances (choisies par votre enseignant) feront l objet d une évaluation : nous vous demanderons de remettre à la fin des deux heures un listing contenant votre code, avec des commentaires détaillés. Enfin, les exercices un peu plus difficiles sont signalés par le symbole. Pour bien suivre la progression des travaux pratiques, il faut au moins avoir fait les exercices non marqués comme difficiles. L environnement de développement Code::Blocks L environnement de développement Code::Blocks vous permet de : Écrire votre code Compiler en langage machine Exécuter le programme Corriger les erreurs («débugger») et mettre au point Pour lancer l environement Code::Blocks, cliquez sur «Démarrer», ensuite sur «Programmes», puis sur «Code::Blocks». Noter que Code::Blocks est un logiciel libre et gratuit, que vous pouvez facilement télécharger et utiliser chez vous. Si vous ne l avez pas fait au premier semestre, il faut configurer Code::Blocks comme suit : Réglage du compilateur : Menu Settings Compiler... Rubrique : Global compiler settings Onglet : Compiler settings sous onglet : Compiler Flags Cocher les cases : Have G++ follows the C++11 ISO C++ langage standard [-std=c++11] Enable all common compiler warnings (Overide many other settings) [-Wall] Réglage de l éditeur : Cocher la case : Java Menu Settings Editor Rubrique : Source formatter Onglet : Style Création de projet S il est possible de travailler sur un fichier C/C++ seul sous Code::Blocks, pour pouvoir debugger, nous allons devoir créer un projet. On conseille de créer un nouveau projet pour chaque exercice. Pour ceci, on clique sur «Create a new project». Choisir ensuite «Console application» comme type de projet, puis «C++» comme langage. Et enfin choisir un répertoire pour stocker le projet. Pour démarrer le TP, vous pouvez télécharger l archive tp1.zip sur http://www.lri.fr/~hivert/ cours.html 1

Exercice 1. (Êtes-vous en forme?) Voici une manière de déterminer la condition physique d un individu : Après avoir observé un moment de repos, que ce soit assis ou couché, déterminez votre fréquence cardiaque appelée F 0. Faites ensuite 30 flexions sur les jambes en 5 secondes. Faites attention à ce que vos pieds soient à plat sur le sol. Asseyez-vous ou couchez-vous rapidement puis déterminez votre fréquence cardiaque que nous appellerons F 1. Une minute après l effort, déterminez à nouveau votre fréquence cardiaque que nous appellerons F 2. Effectuez l opération suivante : 0,1 (F 0 + F 1 + F 2 200). Si le résultat est inférieur à 0, la condition est excellente ; situé entre 0 et 5, la condition est très bonne ; situé entre 5 et 10, la condition est bonne ; situé entre 10 et 15, la condition est moyenne ; et elle est faible pour toutes les autres valeurs. 1. Extraire le patron de programme forme.cpp de l archive. 2. Compléter la fonction forme afin qu elle évalue la condition physique d un individu. 3. Écrire un programme qui demande à l utilisateur les fréquences F 0, F 1 et F 2 et qui affiche la condition physique de l utilisateur. Veillez à ce que la salle de TP ne se transforme pas en gymnase! 2 #include <string> 3 using namespace std; 5 /** Infrastructure minimale de test **/ 6 #define ASSERT(test) if (!(test)) cout << "Test failed in file " << FILE \ 7 << " line " << LINE << ": " #test << endl 8 9 10 /** La forme d un individu 11 * @param repos nbr de battement cardiaque à la minute au repos 12 * @param effort nbr de battement cardiaque à la minute après l effort 13 * @param recup nbr de battement cardiaque à la minute après une minute de récupération 1 * @return une chaîne de caractère décrivant la forme 15 **/ 16 string forme(int repos, int effort, int recup) { 17 float cond; 18 cond = 0.1 * (repos + effort + recup - 200); 19 if (cond <= 0) return("excellente"); 20 else if (cond < 5) return("tres bonne"); 21 else if (cond < 10) return("bonne"); 22 else if (cond < 15) return("moyenne"); 23 else return("faible"); 2 } 25 26 27 void formetest(void) { 28 ASSERT( forme(60,80,60) == "excellente" ); 2

29 ASSERT( forme(70,90,80) == "tres bonne" ); 30 ASSERT( forme(80,120,80) == "bonne" ); 31 ASSERT( forme(80,150,100) == "moyenne" ); 32 ASSERT( forme(90,150,130) == "faible" ); 33 } 3 35 int main() { 36 formetest(); 37 int f1,f2,f3; 38 39 cout << "Donnez votre fréquence cardiaque au repos : "; 0 cin >> f1; 1 cout << "Donnez votre fréquence cardiaque après 30 flexions sur les jambes en 5 secondes : "; 2 cin >> f2; 3 cout << "Donnez votre fréquence cardiaque après une minute de récupération : "; cin >> f3; 5 cout << "Votre forme est " << forme(f1,f2,f3) << "! " << endl; 6 } Exercice 2. (Conversion Heures/Minutes/Secondes d une durée) On représente une durée heure, minute, seconde sous la forme d un vecteur C++ d entiers de taille 3. Par exemple : 5h 20min et 10s sera représenté par le vecteur {5, 20, 10}. Dans cet exercice, on respectera la contrainte suivante : on ne doit utiliser que des calculs sur les entiers. 1. Extraire le patron de programme converthms.cpp de l archive. 2. Écrire une fonction int converthms2s(vector<int> hms) qui pour une durée exprimée sous la forme «heures, minutes, secondes» retourne la durée correspondante exprimée en secondes. Ajouter 3 autres tests pour cette fonction. 3. Écrire une fonction vector<int> converts2hms(int d) qui pour une durée exprimée en secondes retourne la durée correspondante exprimée sous la forme «heures, minutes, secondes». Ajouter 3 autres tests pour cette fonction. On utilisera des boucles (pas de division).. Écrire une fonction void testhms(vector<int> hms) qui vérifie qu une durée exprimée par un vecteur d entiers est bien une durée sous la forme «heures, minutes, secondes» correcte. Un vecteur d entiers hms contient une heure correcte si 0 hms[0] < 2, 0 hms[1] < 60 et 0 hms[2] < 60. On écrira les vérifications en utilisant la commande ASSERT fournie. 5. Écrire un programme qui pour toutes les durées de 0 à 80000 secondes convertit la durée sous la forme «heures, minutes, secondes» ; vérifie grâce à la fonction testhms que le résultat obtenu est bien correct ; re-convertit la durée en seconde et vérifie que l on retrouve bien la durée initiale. 3

2 #include <vector> 3 using namespace std; 5 /** Infrastructure minimale de test **/ 6 #define ASSERT(test) if (!(test)) cout << "Test failed in file " << FILE \ 7 << " line " << LINE << ": " #test << endl 8 9 10 /** Converti une durée en Heure, Minute, Seconde en seconde 11 * @param hms un tableau d entiers [h,m,s] encodant la durée h:m:s 12 * @return la conversion de h:m:s en secondes 13 **/ 1 int converthms2s(vector<int> hms) { 15 return hms[2] + 60*hms[1] + 3600*hms[0]; 16 } 17 18 void testconverthms2s() { 19 ASSERT( converthms2s({0,1,15}) == 75 ); 20 ASSERT( converthms2s({10,10,2}) == 36602 ); 21 } 22 23 /** Converti une durée en seconde en Heure, Minute, Seconde 2 * @param d un nombre de secondes 25 * @return la conversion de d en Heure, Minute, Seconde dans un tableau de trois entiers [h, m, s] 26 **/ 27 vector<int> converts2hms(int d) { 28 vector<int> hms; 29 hms = vector<int>(3); 30 hms[2] = d; 31 for (int i = 2; i>0; i--) { 32 hms[i-1] = 0; 33 while (hms[i] >= 60) { 3 hms[i] -= 60; 35 hms[i-1] ++; 36 } 37 } 38 return hms; 39 } 0 1 void testconverts2hms() { 2 ASSERT( converts2hms(75) == vector<int>({0,1,15}) ); 3 ASSERT( converts2hms(36602) == vector<int>({10,10,2}) ); } 5 6 7 void testhms(vector<int> hms) { 8 ASSERT( hms.size() == 3 ); 9 ASSERT( hms[2] >= 0 ); 50 ASSERT( hms[2] < 60 ); 51 ASSERT( hms[1] >= 0 ); 52 ASSERT( hms[1] < 60 ); 53 ASSERT( hms[0] >= 0 ); 5 ASSERT( hms[0] < 2 );

55 } 56 57 int main() { 58 vector<int> hms; 59 60 testconverthms2s(); 61 testconverts2hms(); 62 63 for (int d=0; d<8600; d++) { 6 hms = converts2hms(d); 65 testhms(hms); 66 ASSERT( d == converthms2s(hms) ); 67 } 68 } Exercice 3. Nombre Médian Écrire une fonction qui prend en entrée trois nombres entiers et qui retourne le nombre médian, c est-à-dire le nombre qui reste si l on enlève le plus grand et le plus petit. Par exemple, si l utilisateur tape 5 3 12 on doit afficher 5. S il tape 5 12 5, on doit afficher 5. Écrire des tests automatisés tels que ceux des exercices précédents pour votre fonction ainsi qu un programme de test manuel demandant les trois nombres à l utilisateur. 2 #include <vector> 3 using namespace std; 5 /** Infrastructure minimale de test **/ 6 #define ASSERT(test) if (!(test)) cout << "Test failed in file " << FILE \ 7 << " line " << LINE << ": " #test << endl 8 9 /** Extrait le nombre médian 10 * @param a, b, c trois entiers (non ordonnés) 11 * @return le nombre médian de l ensemble {a,b,c} 12 **/ 13 int mediane(int a, int b, int c) { 1 if (a <= b) { 15 if (b <= c) return b; 16 else { 17 if (a <= c) return c; 18 else return a; 19 } 20 } 21 else { // b < a 22 if (a <= c) return a; 23 else { // b c < a 2 if (b <= c) return c; 25 else return b; 5

26 } 27 } 28 } 29 30 void test_mediane() { 31 ASSERT(mediane(23, 12, 1) == 1); 32 ASSERT(mediane(23, 12, 12) == 12); 33 ASSERT(mediane(12, 23, 12) == 12); 3 } 35 36 int main(void) { 37 int x, y, z; 38 39 test_mediane(); 0 cout << "Entrer trois entiers a b c: "; 1 cin >> x >> y >> z; 2 cout << "La mediane est " << mediane(x, y, z) << endl; 3 } Exercice. Calendrier Le but de cet exercice est d afficher un calendrier en affichant mois par mois les jours de la semaine. Voici par exemple l affichage du mois de février 2013 qui commence un vendredi : Fevrier lu ma me je ve sa di.... 1 2 3 5 6 7 8 9 10 11 12 13 1 15 16 17 18 19 20 21 22 23 2 25 26 27 28 Pour ceci, on déclare le nom des mois et leur longueur (dans une année usuelle) en C++ de la manière suivante : vector<string> nom_mois = { "Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre" }; vector<int> long_mois = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; Attention : le mois de janvier porte le numéro 0. 1. Dans un premier temps, on suppose que le premier janvier est un lundi. On affichera les jours du mois en revenant à la ligne chaque dimanche sans se soucier des alignements. On sautera une ligne à la fin de chaque mois. On pourra utiliser trois compteurs : mois pour stocker le numéro du mois en cours d affichage ; j_ann pour stocker le numéro du jour en cours d affichage dans l année ; j_mois pour stocker le numéro du jour dans le mois. 6

2. Écrire un programme qui demande à l utilisateur le jour du premier janvier sous la forme (0 = lundi, 1 = mardi, 2 = mercredi, etc.) et qui affiche le calendrier de l année. Important : Si le compilateur affiche un message d erreur sur l initialisation des deux variables nom_mois et long_mois, le problème viens très probablement du fait que l étudiant n a pas configuré le mode C++11 comme indiqué dans l introduction du TP. 2 #include <iomanip> 3 #include <vector> using namespace std; 5 6 vector<string> nom_mois = 7 { 8 "Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", 9 "Aout", "Septembre", "Octobre", "Novembre", "Decembre" 10 }; 11 vector<int> long_mois = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 12 13 int main(void) 1 { 15 int i, j_ann, j_mois, mois; 16 cout << "Quel est le jour du 1er janvier (0=lundi, 1=mardi,...)?" << endl; 17 cin >> j_ann; 18 for (mois=0; mois<12; mois++) 19 { 20 cout << " " << nom_mois[mois] << endl; 21 cout << " lu ma me je ve sa di" << endl; 22 for (i=0; i<j_ann % 7; i++) cout << "."; 23 for (j_mois=1; j_mois<=long_mois[mois]; j_mois++) 2 { 25 cout << setw(3) << j_mois; 26 j_ann++; 27 if (j_ann % 7 == 0) cout << endl; 28 } 29 cout << endl << endl; 30 } 31 } 7