TD sur les structures (ou type produit) n o 5 (Correction)

Documents pareils
Programme Compte bancaire (code)

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

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)

Java Licence Professionnelle CISII,

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

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

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


1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Package Java.util Classe générique

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

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

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

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

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

Les structures de données. Rajae El Ouazzani

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

Utilisation d objets : String et ArrayList

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

Premiers Pas en Programmation Objet : les Classes et les Objets

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

TD/TP PAC - Programmation n 3

Les arbres binaires de recherche

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

Corrigés des premiers exercices sur les classes

Structurer ses données : les tableaux. Introduction à la programmation

TP 1. Prise en main du langage Python

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

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

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

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

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

Cours de Systèmes d Exploitation

Cours d Algorithmique et de Langage C v 3.0

Classes et Objets en Ocaml.

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

Découverte de Python

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

Informatique III: Programmation en C++

Algorithmique et Programmation, IMA

AC AB. A B C x 1. x + 1. d où. Avec un calcul vu au lycée, on démontre que cette solution admet deux solutions dont une seule nous intéresse : x =

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

Cours de Programmation Impérative: Zones de mémoires et pointeurs

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

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

Introduction à la Programmation Parallèle: MPI

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

Les chaînes de caractères

Les droites (d 1 ) et (d 2 ) sont sécantes en A Le point A est le point d intersection des 2 droites

IRL : Simulation distribuée pour les systèmes embarqués

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

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

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Initiation à la programmation en Python

Licence Sciences et Technologies Examen janvier 2010

GOL502 Industries de services

Les structures. Chapitre 3

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

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Si un quadrilatère a. Si un quadrilatère a. Si un quadrilatère a. Si un quadrilatère a. ses côtés opposés. ses côtés opposés de. deux côtés opposés

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

TP : Gestion d une image au format PGM

Programmation Classique en langage C

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

Langage Java. Classe de première SI

as Architecture des Systèmes d Information

Sélection du contrôleur

Programmer en JAVA. par Tama

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

TD/TP PAC - Programmation n 3

Héritage presque multiple en Java (1/2)

Cours Informatique Master STEP

Projet de programmation (IK3) : TP n 1 Correction

Une introduction à Java

Conventions d écriture et outils de mise au point

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

STAGE IREM 0- Premiers pas en Python

et Programmation Objet

Rappel sur les bases de données

Programmation par composants (1/3) Programmation par composants (2/3)

Cours d algorithmique pour la classe de 2nde

Claude Delannoy. 3 e édition C++

I. Introduction aux fonctions : les fonctions standards

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

Programmation Orientée Objet Java

Corrigé des exercices sur les références

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

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

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

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

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Solutions du chapitre 4

Programmation en Java IUT GEII (MC-II1) 1

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

Cours 7 : Utilisation de modules sous python

Remote Method Invocation (RMI)

Transcription:

Univ. Paris-Sud 11 - Licence MPI L1 Informatique, 2ième sem. 2016-17 TD sur les structures (ou type produit) n o 5 (Correction) Le but de ce TD est de manipuler des structures (type struct en C++) qui est un type composé permettant de regrouper plusieurs données en une seule. L accès aux composants (ou champs) d une structure se fait en utilisant la notation pointée". Directive générale : Faut expliquer tout les truc de math au tableaux même les plus bêtes tels que comment calculer les coordonnees d un vecteur a partir de deux points que abcd est un parallélogramme si ab=dc en vecteur,... Exercice 1. Considérons la définition ci-dessous du type produit point, qui utilise deux champs x et y, qui sont les coordonnées d un point dans le plan. s t r u c t Point { f l o a t x, y ; ; On va utiliser la fonction suivante permettant de créer des occurrences de type point, cela sera pratique pour tester toutes nos fonctions. Notez qu au lieu de renvoyer des float, ou des int on renvoie un.... point!!. Point c r e e r P o i n t ( f l o a t x, f l o a t y ){ Point p ; p. x = x ; p. y = y ; return p ; La notation pointée permet d écrire dans les champs d un structure, mais également de lire dedans, comme le montre la fonction suivante : f l o a t a b s c i s s e ( Point p){ return (p. x ) ; 1. Ecrivez une fonction qui renvoie l ordonnée d un point. 2. Ecrivez une procédure qui affiche les coordonnées d un point. 3. Ecrivez une nouvelle version de cette procédure, en faisant appel aux fonctions abcisse et ordonnée. 4. Ecrivez une procédure testaccesstruct, qui teste ce premier jet. void t e s t A c c e s s S t r u c t ( ) { Point p=c r e e r P o i n t ( 0. 0, 1. 0 ) ; ASSERT( ordonnee ( p)==1.0); e c r i r e P o i n t ( p ) ; e c r i r e P o i n t 2 ( p ) ; Exercice 2. À présent, vous allez vous-mêmes définir un autre type produit, et programmer des fonctions qui font des calculs dessus. 1. Écrire un type produit pour représenter un vecteur dans le plan. 2. Écrire une fonction qui permet de créer un vecteur en reliant deux points donnés en paramètres. 3. Écrire une fonction qui teste si deux vecteurs donnés sont égaux. On vous demande d utiliser la fonction presqueegal, qui teste si deux nombres flottants sont égaux à epsilon près. 1

f l o a t absolue ( f l o a t x ) { i f ( x < 0) return x ; e l s e return x ; const f l o a t e p s i l o n = 1e 6; bool presqueegal ( f l o a t x, f l o a t y ) { return absolue ( x y ) <= e p s i l o n absolue ( x ) and absolue ( x y ) <= e p s i l o n absolue ( y ) ; 4. Écrire une fonction qui teste si 4 points donnés forment un parallélogramme (on rappelle que ABCD est un parallélogramme si les vecteurs AB et DC sont égaux. 5. Écrire une procédure testdefineuse, qui teste ce deuxième jet. Pour faire simple, on définira quatre points formant un parallélogramme, et on vérifiera que cela n est plus considéré comme un parallélogramme si on change leur ordre dans l appel de la fonction précédemment définie. Ce prog contient un bout de code pour chacune des questions précédentes. s t r u c t Vecteur { f l o a t x, y ; ; Vecteur c r e e r V e c t e u r ( Point p1, Point p2 ){ Vecteur v ; v. x = p2. x p1. x ; v. y = p2. y p1. y ; r eturn v ; bool presqueegalvecteur ( Vecteur v1, Vecteur v2 ){ r eturn presqueegal ( v1. x, v2. x ) and presqueegal ( v1. y, v2. y ) ; bool parallelogramme ( Point p1, Point p2, Point p3, Point p4 ){ r eturn presqueegalvecteur ( c r e e r V e c t e u r ( p1, p2 ), c r e e r V e c t e u r ( p4, p3 ) ) ; void t e s t D e f i n e U s e ( ) { Point p1=c r e e r P o i n t ( 0. 0, 0. 0 ), p2=c r e e r P o i n t ( 1. 0, 1. 0 ) ; Point p3=c r e e r P o i n t ( 3. 0, 1. 0 ), p4=c r e e r P o i n t ( 2. 0, 0. 0 ) ; ASSERT( parallelogramme ( p1, p2, p3, p4 ) ) ; ASSERT(! parallelogramme ( p1, p2, p4, p3 ) ) ; Exercice 3. Le créateur d un jeu souhaite pouvoir modéliser des personnages participants à des combats. Un personnage aura un nom, des points de vie, et un bouclier lui permettant d arrêter les coups. La force des coups qu il portera à son adversaire sera égale à son nombre de points de vie - 1 et il sera blessé s il reçoit un coup d une force supérieure à la force du bouclier qu il porte. Un personnage blessé se verra retirer un nombre de point de vie égal à la différence entre la force du coup reçu et la force de son bouclier. La structure de données choisie pour modéliser un personnage est donc la suivante : struct guerrier { string nom ; int ptvie ; int bouclier ; ; 1. Écrire la procédure créerguerrier qui permet d initialiser un personnage, sachant qu un personnage doit disposer au départ d exactement 10 points à répartir entre les points de vie du personnage (au moins deux points) et la force de son bouclier. Par exemple, on 2

devra pouvoir saisir le nom du personnage, par exemple, "Elisa", et lui donner 7 points de vie. Dans ce cas, la procédure créerguerrier lui affectera automatiquement un bouclier d une force égale à 3 (10-7). Vous pouvez réutiliser, sans la redéfinir ni la réaliser, la fonction vue en cours et en TD, int lirevaleurbornee(string texteaecrire, int min, int max); qui permet de saisir une valeur comprise entre un Min et un Max, après avoir affiché le texteaecrire explicitant la valeur attendue. 2. Spécifier et réaliser la procédure afficheguerrier permettant d afficher l état d un guerrier, i.e. son nom, et ses différentes propriétés. 3. Spécifier et réaliser la fonction forcecoup qui permet de retourner la force du coup porté par un guerrier vivant, calculée comme égale à son nombre de points de vie - 1. 4. Spécifier et réaliser la procédure reçoitcoup qui met à jour l état d un guerrier qui reçoit un coup d une force donnée. 5. En supposant déjà réalisée la procédure void initialiserguerrierautomatique(guerrier G1; guerrier &G2); qui permet au concepteur de créer le guerrier G 2 qui combattra le guerrier G 1 créé par l utilisateur du jeu, réaliser le programme principal qui crée les deux guerriers, les affiche, enchaîne les coups qu ils se portent jusqu à ce que l un des deux ne soit plus en état de se battre puis affiche le nom du gagnant et ses points de vie. void creeguerrier(guerrier &g) { cout << "donner le nom de votre personnage"; cin >> lire; g.ptvie = lirevaleurbornee("nbre de point de vie", 2, 10); g.bouclier = 10 - g.ptvie; void afficheguerrier(guerrier g) { cout << "personnage : " << g.nom << endl; cout << "ptdevie : " << g. ptvie << endl; cout << "bouclier : " << g. bouclier << endl; int forcecoup(guerrier g) { return G.ptVie - 1; void recoitcoup(guerrier &g, int f) { int temp; if (f > g.bouclier) { temp = g.ptvie + g.bouclier - f; if (temp >= 0) G.ptVie = temp; else g.ptvie = 0; int main() { guerrrier g1, g2; creerguerrier(g1); initialiserguerrierautomatique(g1, g2); while (g1.ptvie > 1 and g2.ptvie > 1) { 3

afficheguerrier(g1); afficheguerrier(g2); recoitcoup(g2, ForceCoup(g1)); if (g2.ptvie >= 1) alors recoitcoup(g1, ForceCoup(g2)); cout << "Gagnant : "; if (g1.ptvie > g2.ptvie) afficheguerrier(g1); else afficheguerrier(g2); Exercice 4. Suite sur les points, pour compléter, différentes fonctions qui ressemblent à celles déjà faites, et qui sont toutes très courtes. Ecrivez donc les fonctions qui calculent : 1. la norme d un vecteur. 2. la distance entre deux points. 3. si un quadrilatère est un losange. 4. le produit scalaire entre deux vecteurs. 5. si deux vecteurs sont perpendiculaires. 6. si un quadrilatère est un rectangle. 7. si un quadrilatère est un carré. 8. Faire un test simple de toutes ces fonctions en vérifiant que la dernière fonctionne. En effet, elle utilise toutes les autres. f l o a t norme ( Vecteur v ){ r eturn s q r t ( v. x v. x +v. y v. y ) ; f l o a t mydistance ( Point p1, Point p2 ) { r eturn norme ( c r e e r V e c t e u r ( p1, p2 ) ) ; bool l o s a n g e ( Point p1, Point p2, Point p3, Point p4 ){ r eturn ( parallelogramme ( p1, p2, p3, p4 ) and presqueegal ( mydistance ( p1, p2 ), mydistance ( p1, p4 ) ) ) ; f l o a t p r o d u i t S c a l a i r e ( Vecteur v1, Vecteur v2 ){ r eturn ( v1. x v2. y v1. y v2. x ) ; f l o a t p e r p e n d i c u l a i r e ( Vecteur v1, Vecteur v2 ){ r eturn ( presqueegal ( p r o d u i t S c a l a i r e ( v1, v2 ), 0 ) ) ; bool r e c t a n g l e ( Point p1, Point p2, Point p3, Point p4 ){ r eturn parallelogramme ( p1, p2, p3, p4 ) and p e r p e n d i c u l a i r e ( c r e e r V e c t e u r ( p1, p2 ), c r e e r V e c t e u r ( p1, p4 ) ) bool c a r r e ( Point p1, Point p2, Point p3, Point p4 ){ r eturn parallelogramme ( p1, p2, p3, p4 ) and l o s a n g e ( p1, p2, p3, p4 ) ; 4

void t e s t C r u i s e C o n t r o l ( ) { Point p1=c r e e r P o i n t ( 0. 0, 0. 0 ), p2=c r e e r P o i n t ( 0. 0, 1. 0 ) ; Point p3=c r e e r P o i n t ( 1. 0, 1. 0 ), p4=c r e e r P o i n t ( 1. 0, 0. 0 ) ; ASSERT( c a r r e ( p1, p2, p3, p4 ) ) ; 5