Examen de Programmation I



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

Poker. A rendre pour le 25 avril

Les règles de base du poker :

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

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

Programme Compte bancaire (code)

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

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

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

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

Principes de mathématiques 12 SÉRIE DE PROBLÈMES. Septembre Student Assessment and Program Evaluation Branch

Les structures. Chapitre 3

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

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

Corrigés des premiers exercices sur les classes

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

S initier aux probabilités simples «Un jeu de cartes inédit»

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)

Feuille d exercices 2 : Espaces probabilisés

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

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Utilisation d objets : String et ArrayList

3IS - Système d'exploitation linux - Programmation système

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

Cours d Algorithmique et de Langage C v 3.0

S initier aux probabilités simples «Question de chance!»

I. Introduction aux fonctions : les fonctions standards

Probabilités. I Petits rappels sur le vocabulaire des ensembles 2 I.1 Définitions... 2 I.2 Propriétés... 2

Introduction au langage C

Analyse Combinatoire

Coefficients binomiaux

Introduction à C++ et à wxwidgets

POKER ET PROBABILITÉ

Conventions d écriture et outils de mise au point

Algorithmique et Programmation, IMA

Programmation Classique en langage C

Introduction à l héritage en C++

Le prototype de la fonction main()

Claude Delannoy. 3 e édition C++

Informatique I. Sciences et Technologies du Vivant (Semestre 1)

2. Comprendre les définitions de classes

TP : Gestion d une image au format PGM

Les structures de données. Rajae El Ouazzani

Arguments d un programme

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

Programmation en C/C++

Programmation système I Les entrées/sorties

S initier aux probabilités simples «Question de chance!»

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

Introduction au pricing d option en finance

Canevas théoriques du projet sur le poker Partie A

Solutions du chapitre 4

Recherche dans un tableau

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

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Cours de Systèmes d Exploitation

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

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

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Informatique III: Programmation en C++

Notions fondamentales du langage C# Version 1.0

Université Paris-Dauphine DUMI2E 1ère année, Applications

Programmation système en C/C++

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

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


Simulation d un système de paiement par carte bancaire

Architecture des ordinateurs

AGASC / BUREAU INFORMATION JEUNESSE Saint Laurent du Var - E mail : bij@agasc.fr / Tel : CONSIGNE N 1 :

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

Cours 6 : Tubes anonymes et nommés

Travaux Dirigés n 1 : chaînes de caractères

Programmation stochastique

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

Exercices sur le chapitre «Probabilités»

CALCUL DES PROBABILITES

Présentation du langage et premières fonctions

KL5121. Pour activer des sorties en fonction de la position d'un codeur

Rallye Mathématiques de liaison 3 ème /2 nde et 3 ème /2 nde pro Epreuve finale Jeudi 21 mai 2015 Durée : 1h45

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Programmer en JAVA. par Tama

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

COMPARAISONDESLANGAGESC, C++, JAVA ET

Compression de Données - Algorithme de Huffman Document de Conception

Une introduction à Java

et Programmation Objet

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

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

1 Recherche en table par balayage

Introduction à MATLAB R

Introduction à la programmation concurrente

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

TP 1. Prise en main du langage Python

Classes et Objets en Ocaml.

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

Introduction au C++ et à la programmation objet

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

Transcription:

Examen de Programmation I Sciences et Technologies du Vivant, Semestre 1 Mercredi 22 décembre 2010 1. N oubliez pas de mettre vos NOM et PRÉNOM sur toutes vos copies. 2. Merci de garder la donnée. 3. Vous pouvez rédiger vos réponses au crayon. Cependant, prenez soin d écrire proprement. 4. Tout document autorisé, machines interdites. Question 1 Compréhension de code... 50 points + 7 points de bonus Qu affiche le programme suivant? Les différentes parties sont la plupart indépendantes les unes des autres. #include <iostream> using namespace std; struct E char v; ; struct L E es[3]; ; struct I L * s; I * i; ; void F(E * e) cout << e->v; void G(L * l) for(int i = 0; i < 3; i++) F(l->es + i); cout << endl; 1

void G(I * i) if (i!= 0) G( i->s ); G( i->i ); void K(char c1, char c2) char c = c1; c1 = c2; c2 = c; int main(int argc, char ** argv) E a, b, c; a.v = : ; b.v = - ; c.v = ) ; cout << "A) "; // 3 points F(&a); F(&b); F(&c); cout << endl; L d; d.es[0] = a; d.es[1] = b; d.es[2] = c; c.v = ( ; cout << "B) "; // 3 points E * e = d.es; e++; e[1].v = X ; cout << "C) "; // 3 points E * f = e - 1; f->v = v ; e[0].v = d ; cout << "D) "; // 4 points Page 2

d.es[0].v = : ; K(d.es[0].v, d.es[2].v); cout << "E) "; // 5 points d.es[0].v = : ; for(int i = 0; i < 2; i++) d.es[i] = d.es[i+1]; cout << "F) "; // 5 points d.es[0].v = : ; for(int i = 0; i < 2; i++) d.es[i+1] = d.es[i]; cout << "G) "; // 5 points d.es[0].v = : ; I g; g.s = &d; g.i = 0; L h; h.es[0].v = X ; h.es[1].v = D ; h.es[2].v = ; I i; i.s = &h; i.i = &g; cout << "H) "; // 5 points G(&g); Page 3

cout << "I) "; // 5 points G(&i); char * as[3]; for(int i = 0; i < 3; i++) as[i] = &(h.es[i].v); *(as[0]) = 8 ; as[1] = as[0]; *(as[2]) = *(as[1]); cout << "J) "; // 6 points G(&h); h = d; *(as[2]) = ( ; E * m = d.es; m = &(h.es[2]); cout << "K)"; // 6 points G(&i); I * j = &i, * k = j->i; k->i = j; cout << "L)"; // 7 points (bonus) G(j->i->i); cout << "lol" << endl; return 0; Question 2 Poker..................... 50 points + 8 points de bonus Le but de cet exercice est d écrire plusieurs fonctions d un programme permettant de jouer au poker. Les questions sont indépendantes entre elles. Vous pouvez répondre à une question même si vous n avez pas su faire les précédentes. Le nombre de lignes est donné à titre indicatif. Il tient compte de la ligne d en-tête de la fonction, mais pas des lignes vides ou qui ne contiennent que des accolades ou. (a) [5 lignes] Le poker se joue avec un jeu de 52 cartes. Pour représenter une carte, nous allons utiliser la structure suivante : struct Carte int couleur; int niveau; ; Le champs couleur contiendra une valeur entre 0 et 3, correspondant à l une des couleurs (cœur, carreau, trèfle, pique). Le champs niveau contiendra une valeur entre 2 et 14 (11 pour le valet, 12 pour la dame, 13 pour le roi, et 14 pour l as). Nous allons représenter le jeu de cartes par un tableau de 52 cartes : Carte jeu[52]; Ecrivez la fonction initialiser_jeu qu on pourra appeler ainsi : initialiser_jeu(jeu); Page 4

Après cet appel : - le champ couleur de l élément 0 de jeu devra contenir 0 ; - le champ niveau de l élément 0 de jeu devra contenir 2 ; - le champ couleur de l élément 1 de jeu devra contenir 0 ; - le champ niveau de l élément 1 de jeu devra contenir 3 ; -... - le champ couleur de l élément 12 de jeu devra contenir 0 ; - le champ niveau de l élément 12 de jeu devra contenir 14 ; - le champ couleur de l élément 13 de jeu devra contenir 1 ; - le champ niveau de l élément 13 de jeu devra contenir 2 ; -... - le champ couleur de l élément 51 de jeu devra contenir 3 ; - le champ niveau de l élément 51 de jeu devra contenir 14. (b) (c) [8 lignes] Ecrivez la fonction melanger_jeu qui permet de mélanger le jeu de cartes en appelant : melanger_jeu(jeu); Une façon de mélanger les éléments d un tableau est de tirer deux indices au hasard, échanger les éléments stockés à ces deux indices, et de répéter plusieurs fois cette opération. [4 lignes] Pour simplifier, nous allons supposer que chaque joueur reçoit 5 cartes, qui constituent une main. Pour pouvoir représenter une main, nous allons utiliser la structure suivante : struct Main Carte cartes[5]; ; Nous allons également supposer qu il n y a que deux joueurs, dont les mains seront déclarées de la façon suivante : Main main_joueur1, main_joueur2; Ecrivez la fonction distribuer qu on pourra appeler de la façon suivante : distribuer(jeu, &main_joueur1, &main_joueur2); Après cet appel : - l élément d indice 0 du champ cartes de main_joueur1 devra contenir la même carte que l élément d indice 0 du tableau jeu ; - l élément d indice 0 du champ cartes de main_joueur2 devra contenir la même carte que l élément d indice 1 du tableau jeu ; - l élément d indice 1 du champ cartes de main_joueur1 devra contenir la même carte que l élément d indice 2 du tableau jeu ; -... - l élément d indice 4 du champ cartes de main_joueur2 devra contenir la même carte que l élément d indice 9 du tableau jeu. (d) [3 lignes] On suppose qu on a déjà écrit la fonction d en-tête void affiche_carte(carte * c) qui affiche la carte (dans la fenêtre Terminal, par exemple Dame de coeur) dont l adresse est passée en paramètre. Ecrivez la fonction d en-tête : void affiche_main(main * m) qui affiche les cartes de la main dont l adresse est passée en paramètre, en appelant la fonction affiche_carte. Page 5

(e) (f) (g) (h) [5 lignes] Nous allons maintenant passer aux fonctions qui permettent d évaluer une main. Une main est appelée une flush si les 5 cartes qu elle contient sont de la même couleur. Ecrivez la fonction d en-tête bool est_ce_une_flush(main * m) qui renverra true si la main dont l adresse est passée en paramètre est une flush, false sinon. [5 lignes] Pour simplifier l écriture des fonctions permettant de trouver les autres types de mains, nous allons ajouter un champ à la structure Main, qui devient : struct Main Carte cartes[5]; int compteurs[15]; ; Le tableau compteurs permettra de savoir combien la main contient de cartes de même niveau. Par exemple, si une main contient deux valets, l élément 11 de son champ compteurs devra contenir 2. Ecrivez donc la fonction d en-tête : void calcule_compteurs(main * m) qui calcule la valeur des éléments du tableau compteurs de la main dont l adresse est passée en paramètre. On supposera que les éléments du tableau cartes sont déjà correctement initialisés. [5 lignes] Une main est un carré si elle contient 4 cartes de même niveau. Ecrivez la fonction d en-tête bool est_ce_un_carre(main * m) qui renverra true si la main dont l adresse est passée en paramètre est un carré, false sinon. On supposera qu on a déjà appelé la fonction calcule_compteurs, c est-à-dire que les éléments du tableau compteurs sont déjà correctement initialisés. [9 lignes] Une main est une suite si elle contient 5 cartes dont les niveaux se suivent, quelque soient leurs couleurs. Par exemple, la main : 4 de coeur 2 de pique 6 de coeur 5 de pique 3 de trefle est une suite. Ecrivez la fonction d en-tête bool est_ce_une_suite(main * m) qui renverra true si la main dont l adresse est passée en paramètre est une suite, false sinon. Comme pour la question précédente, on supposera qu on a déjà appelé la fonction calcule_compteurs, c est-à-dire que les éléments du tableau compteurs sont déjà correctement initialisés. La main : As de coeur 2 de pique 3 de coeur 4 de pique 5 de trefle est également une suite, mais nous ne tiendrons pas compte de ce cas. (8 points) (8-bonus) Page 6