Exercice 1 Exercice 2 Exercice 3 Exercice 4 Exercice 5 Total Note / 20

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

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

Programme Compte bancaire (code)

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


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

Java Licence Professionnelle CISII,

Cours d Algorithmique et de Langage C v 3.0

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

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

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

Algorithmique et Programmation, IMA

Claude Delannoy. 3 e édition C++

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)

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

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Notions fondamentales du langage C# Version 1.0

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.

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

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

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

TP 1. Prise en main du langage Python

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

I. Introduction aux fonctions : les fonctions standards

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

Recherche dans un tableau

TD/TP PAC - Programmation n 3

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

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

Conventions d écriture et outils de mise au point

Introduction au pricing d option en finance

Programmation stochastique

Programmation en Java IUT GEII (MC-II1) 1

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

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

Programmation en C/C++

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Initiation à la programmation en Python

2. Comprendre les définitions de classes

Corrigé des exercices sur les références

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

CHAPITRE V. Recherche et tri

TD/TP PAC - Programmation n 3

Programmer en JAVA. par Tama

ACTIVITÉ DE PROGRAMMATION

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

Introduction à l héritage en C++

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

Utilisation d objets : String et ArrayList

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

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

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

et Programmation Objet

Introduction au langage C

STAGE IREM 0- Premiers pas en Python

Démonstration d utilisation De NesmaCom

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

Cours d algorithmique pour la classe de 2nde

Les arbres binaires de recherche

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

Définitions. Numéro à préciser. (Durée : )

Premiers Pas en Programmation Objet : les Classes et les Objets

Algorithmique, Structures de données et langage C

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

as Architecture des Systèmes d Information

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

Informatique III: Programmation en C++

Solutions du chapitre 4

Cours de Systèmes d Exploitation

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

Les structures de données. Rajae El Ouazzani

Chapitre 2 Devine mon nombre!

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

4. Groupement d objets

Organigramme / Algorigramme Dossier élève 1 SI

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

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

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

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

Langage Java. Classe de première SI

Programmation Classique en langage C

INF 321 : mémento de la syntaxe de Java

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

PROGRAMMER EN MQL4. Apprenez à automatiser vos stratégies sur MetaTrader 4

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

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

Les structures. Chapitre 3

Examen Médian - 1 heure 30

Analyse de sécurité de logiciels système par typage statique

Principes des langages de programmation INF 321. Eric Goubault

Convers3 Documentation version Par Eric DAVID : vtopo@free.fr

1 Recherche en table par balayage

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Transcription:

Nom, prénom, numéro d étudiant : Université Paris Sud, Licence MPI, Info 111 Partiel du 7 novembre 2016 (deux heures) Exercice 1 Exercice 2 Exercice 3 Exercice 4 Exercice 5 Total Note / 20 Calculatrices et autres gadgets électroniques interdits. Seul document autorisé : une feuille au format A4 avec, au recto, le résumé de la syntaxe C++ de la fiche de TD 2 et, au verso, des notes manuscrites. Pour les étudiants inscrits en Français Langue Étrangère, un dictionnaire est autorisé. Les exercices sont indépendants les uns des autres; il n est pas nécessaire de les faire dans l ordre; ceux marqués d un sont plus difficiles; le barème est indicatif. Les réponses sont à donner, autant que possible, sur le sujet; sinon, mettre un renvoi. Exercice 1 (Cours : 1 point). Rappeler la syntaxe et la sémantique de la boucle while en C++. Correction : Syntaxe : while ( condition ) { bloc d instructions; Sémantique : tant que la condition est vraie, on répète le bloc d instructions : La condition est évaluée Si sa valeur est true, le bloc d instructions est exécuté On recommence 1

2 Exercice 2 (Entrée - sorties / fonctions : 3 points). (1) Compléter le programme suivant pour qu il demande à l utilisateur d entrer deux entiers et affiche leur minimum. #include <iostream> using namespace std; int main() { int a, b, m; cout << "Entrez deux entiers :" << endl; cin >> a; cin >> b; if ( a > b ) m = b; else m = a; cout << "le minimum est " << m << endl; return 0; (2) On veut maintenant écrire un programme qui demande à l utilisateur quatre entiers a, b, c, d et affiche la somme des minimums de a et b d une part et de c et d d autre part. Par exemple, si on a a = 1, b = 3, c = 4, d = 2, le programme doit afficher 3. Écrire une fonction qui calcule le minimum de deux nombres et une fonction principale (fonction main) : int min(int a, int b) { if ( a < b ) return a; else return b; int main(){ int a, b, c, d; cout << "Entrez quatre entiers:" << endl; cin >> a >> b >> c >> d; cout << "Le résultat est: " << min(a,b) + min(c,d) << endl; return 0;

Exercice 3 (Boucles : 4 points). (1) Compléter le programme suivant pour qu il demande à l utilisateur un entier positif n puis affiche tous ses diviseurs. Par exemple, si l utilisateur entre le nombre 10, le programme affiche 1 2 5 10. Rappel : d divise n si et seulement si n%d == 0. #include <iostream> using namespace std; int main(){ int a; cout << "Entrez un entier :" << endl; cin >> a; cout << "Ses diviseurs sont : " << endl; for ( int i = 1; i <= a; i++ ) if( a % i == 0 ) cout << i << endl; return 0; (2) Écrire une fonction qui prend en paramètre un entier n et renvoie son plus grand diviseur qui n est pas n lui-même. Par exemple, pour n = 10, la fonction renvoie 5, pour n = 7, la fonction renvoie 1. Par convention, pour n = 1, la fonction renvoie 1. int plusgranddiviseur(int n) { int resultat = 1; for ( int i = 1; i < n; i++ ) if ( n % i == 0 ) resultat = i; return resultat; 3

4 Exercice 4 (Tableaux simples : 9 points). (1) Observer le fragment de programme suivant : 1 vector<int> liretableau(int n) { 2 vector<int> t; 3 t = vector<int>(n); 4 for ( int i=0; i < n; i++ ) { 5 cin >> t[i]; 6 7 return t; 8 9 10 int main() { 11 vector<int> t = liretableau(10); 12 for ( int i = 0; i < t.size(); i++ ) { 13 cout << t[i] << endl; 14 15 (a) Quel est le type de retour de la fonction liretableau? Correction : C est un tableau d entiers (vector<int>). (b) Indiquer le numéro de la ou les lignes de la fonction liretableau qui (i) Déclarent le tableau t : Correction : Ligne 2. (ii) Allouent le tableau t : Correction : Ligne 3. (iii) Initialisent le tableau t : Correction : Ligne 4-6. (c) En une phrase, décrire ce que fait ce programme. Correction : Il demande à l utilisateur le contenu d un tableau de dix cases, puis l affiche.

5 (2) Compléter la fonction suivante dont on vous donne la documentation et les tests. /** Renvoie le nombre de valeurs négatives dans le tableau * @param t un tableau d entiers * @return le nombre d entiers négatifs **/ int comptenegatifs(vector<int> t) { int v = 0; for ( int i = 0; i < t.size(); i++ ) { if ( t[i] < 0 ) { v += 1; return v; void comptenegatifstest() { ASSERT( comptenegatifs({1,-5,2,8,-3,7,-4) == 3 ); ASSERT( comptenegatifs({-2,-7,-8,-4) == 4 ); (3) Écrire une fonction nommée contient qui prend en paramètre un vector<int> t ainsi qu un entier v et renvoie vrai si v appartient à t sous forme de booléen. La fonction devra passer les tests suivants : void contienttest() { ASSERT( contient({1,4,3, 1) ); ASSERT( contient({1,4,3, 4) ); ASSERT( contient({1,4,3, 3) ); ASSERT( not contient({1,4,3, 2) ); bool contient(vector<int> t, int v) { for ( int i = 0; i < t.size(); i++ ) if ( t[i] == v ) return true; return false;

6 (4) Compléter la fonction suivante dont on vous donne la documentation et les tests : /** Renvoie le tableau des valeurs absolues * @param t1 un tableau d entier * @return un nouveau tableau contenant les valeurs absolues des éléments de t1 **/ vector<int> abstableau(vector<int> t1) { vector<int> t2 = t1; for ( int i = 0; i < t1.size(); i++ ) { if(t2[i] < 0) t2[i] = -t2[i]; return t2; void abstableautest() { vector<int> t = {1,4,3; ASSERT( abstableau({1,4,3) == t ); ASSERT( abstableau({-1,4,3) == t ); ASSERT( abstableau({-1,-4,-3) == t ); (5) Écrire une fonction qui prend en paramètre un tableau d entiers et renvoie un nouveau tableau d entiers contenant les mêmes valeurs, mais où les valeurs négatives sont toutes à gauche des valeurs positives. Par exemple, si le tableau donné en paramètre est {1, -6, 7, 2, -7, -3, alors la fonction renvoie {-6, -7, -3, 1, 7, 2. vector<int> deplacenegatifs(vector<int>t) { vector<int> tab; tab = vector<int>(t.size()); int compteurpositifs=comptenegatifs(t); int compteurnegatifs=0; for ( int i = 0; i < t.size(); i++ ) { if ( t[i] >= 0 ) { tab[compteurpositifs] = t[i]; compteurpositifs++; else { tab[compteurnegatifs] = t[i]; compteurnegatifs++; return tab;

Exercice 5 (Tableaux doubles : 5 points). Une salle de réunion peut être utilisée par différents employés d une entreprise. La réservation se fait par plage d une heure, de 8H00 du matin à 19H00. Chaque plage d une heure commence à l heure pile (par exemple, il y a une plage 9H00-10H00 mais il n y a pas de plage 9H15-10H15). Un tableau de booléens à deux dimensions est utilisé pour représenter si la salle est occupée (valeur true) ou disponible (valeur false) pendant une semaine. Une dimension est utilisée pour coder les jours ouvrables de 0 (lundi) à 4 (vendredi). L autre dimension est utilisée pour les plages horaires de 0 (8H00-9H00) à 10 (18H00-19H00). Chaque case correspond à la réservation de la salle pour une plage d un jour donné. Par exemple, si s est la variable contenant le tableau, la valeur s[0][2] est égale à true si la salle est occupée le lundi (indice 0) de 10h à 11h (indice 2). (1) (a) Si s[1][4] == false, quelle information a-t-on sur la disponibilité de la salle? Correction : La salle est libre le mardi de 12h à 13h. (b) Si la salle est occupée le jeudi de 10h à 11h, quelle case du tableau est égale à true? Correction : La case s[3][2]. (2) Compléter les quatre trous du programme suivant : (a) La déclaration et le début de l allocation du tableau salle dans la fonction main. (b) L initialisation des valeurs en fonction des indices donnés par l utilisateur dans la boucle while de la fonction main. (c) La fonction nbplagesoccupees qui compte le nombre de plages horaires occupées dans le tableau de la salle. (d) La fonction occupation qui calcule le taux d occupation, c est-à-dire le pourcentage de plages occupées parmi toutes les plages. #include <iostream> #include <vector> using namespace std; /** Compte le nombre de plages horaires occupées * @param s un double tableau de booléens * @return le nombres de plages horaires où la salle est occupée **/ int nbplagesoccupees(vector<vector<bool>> s) { // (c) 7 int nbplages = 0; for ( int i = 0; i < s.size(); i++ ) { for ( int j = 0; j < s[0].size(); j++ ) { if (s[i][j]) nbplages++; return nbplages; Suite au dos!

8 /** Renvoie le taux d occupation de la salle * @param s un double tableau de booléens * @return le taux d occupation, en pourcentage **/ double occupation (vector<vector<bool>> s) { // (d) double v = nbplagesoccupees(s); return (v / (s.size() * s[0].size())) * 100; int main() { // (a) Déclaration et allocation du tableau vector<vector<bool>> salle; salle = vector<vector<bool>>(5); for ( int i = 0; i < salle.size(); i++ ) { salle[i] = vector<bool> (11); for ( int j = 0; j < 11; j++ ) { salle[i][j] = false; int i = 0; int j = 0; while( i!= -1 ) { cout << "Entrez les indices du jour et de l heure d utilisation " << "de la salle" << endl; cin >> i >> j; if (i >= 0 and i < 5 and j >= 0 and j < 11) { // (b) Initialisation des valeurs du tableau salle[i][j] = true; cout << "taux d occupation: " << occupation(salle) << "%" << endl; return 0;