Le jeu de la tablette empoisonnée Dans le cadre de l UE HLIN405 - Iaroslav AMPLEEV, Antoine LAURENT, Nicolas POMPIDOR, Sacha WEILL - 25 avril 2015

Dimension: px
Commencer à balayer dès la page:

Download "Le jeu de la tablette empoisonnée Dans le cadre de l UE HLIN405 - Iaroslav AMPLEEV, Antoine LAURENT, Nicolas POMPIDOR, Sacha WEILL - 25 avril 2015"

Transcription

1 Le jeu de la tablette empoisonnée Dans le cadre de l UE HLIN405 - Iaroslav AMPLEEV, Antoine LAURENT, Nicolas POMPIDOR, Sacha WEILL - 25 avril 2015

2 Table des matières Introduction 2 1 Cahier des charges Règles du jeu Règles Exemple de partie Objectifs Réflexion Domaine de programmation Outils nécessaires La structure Les algorithmes Le paradigme de programmation Modélisation Modélisation Coup possible Première version Analyse Modélisation Construction de l arbre Coups possibles Evaluation des noeuds et parcours de l arbre Confrontation des deux structures Liaison avec l interface graphique 17 5 Conclusion 18 Table des figures 1 Tablette entière Découpage intérieur et en "escalier" impossible Premier coup d Albert Premier coup de Bertrand Second coup d Albert, de Bertrand puis troisième coup d Albert Troisième coup de Bertrand Découpage (2,2) Exemple de découpage interdit Schéma algorithmique IA Schéma de l arbre de jeu Le Negmax appliqué à l arbre de jeu Histogramme comparatif du nombre de noeuds Tableau comparatif du nombre de noeuds Histogramme comparatif de la rapidité de construction Tableau comparatif de la rapidité de construction

3 Introduction Dans le cadre de l UE HLIN405 (projet informatique) à l Université de Montpellier, il nous a été demandé de réaliser un projet informatique. Projet qui devait être choisi parmi une liste de sujets aussi variés les uns que les autres. Après avoir lu les différents sujets, nous avons décidé d opter pour la programmation d un jeu vidéo. En effet nous trouvons que le résultat d une telle application est visible et surtout plus amusant (pouvoir y jouer). Ainsi nous avons établi une liste contenant nos préférences, avec en premier, «Lecarréempoisonnédelatablettedechocolat»(sujetenannexe)supervisé par M. Dicky. Ce jeu avait l avantage de proposer à la fois une recherche d algorithme complexe (établir une intelligence artificielle qui gagne à tous les coups) et un objectif attractif (nous aimons tous manger du chocolat). Au final nous avons eu la chance d être affecté sur ce sujet et nous avons pu programmer le jeu. Afin de présenter notre travail, nous allons commencer par expliquer en détail les règles, en s appuyant sur une simulation de partie, ensuite nous allons détailler notre réflexion concernant la conception du jeu et les outils que nous allons utiliser. Enfin nous présenterons le cœur du projet, le fonctionnement de l intelligence artificielle et les deux versions différentes que nous avons développé au cours du semestre. Enfin, nous conclurons en présentant la liaison entre la partie algorithmique et graphique. 1 Cahier des charges 1.1 Règles du jeu Dans cette partie nous allons vous présenter les règles que notre encadrant nous a dit de suivre, en effet, elles diffèrent légèrement de celles dans la feuille du projet Règles Le carré empoisonné est un jeu qui confronte deux joueurs sur un plateau rectangulaire de taille variable. Le plateau représente une tablette de chocolat divisée en carrés dont l un d eux est empoisonné, il se situe dans un des coins de la tablette et sa position est connue des joueurs. Dans notre cas, la position est le coin inférieur gauche (exemple figure 1). Figure 1 Tabletteentière 2

4 Le but est de faire manger à l adversaire le carré de chocolat empoisonné afin que celui-ci perde la partie. Chacun leur tour les joueurs doivent découper un morceau de la tablette selon les règles suivantes : La zone mangée doit être un rectangle car lorsqu on mange un carré, les carrées situés au dessus et à sa droite sont mangés. Les bords supérieur et droit doivent être «libres», il est donc impossible de découper un morceau à l intérieur de la tablette (figure 2, premier exemple). On ne peut découper qu un rectangle plein, les zones en «escalier» ne peuvent être coupées (figure 2, second exemple). Figure 2 Découpageintérieureten"escalier" impossible Exemple de partie Nous allons présenter une partie jouée sur une tablette de taille 5*3 afin de mieux comprendre les règles. Appelons le premier joueur M.Albert et le second M.Bertrand. Le premier joueur, Albert, doit choisir un rectangle à découper selon les règles décrites précédemment, (voir (figure 3)) : Figure 3 Premiercoupd Albert C est au tour de Bertrand de jouer (voir figure 4 ): Figure 4 PremiercoupdeBertrand 3

5 Et ainsi de suite les joueurs jouent : Figure 5 Secondcoupd Albert,deBertrandpuistroisièmecoupd Albert Figure 6 TroisièmecoupdeBertrand Jusqu au dernier coup où la seule option est de manger le carré empoisonné. Albert perd donc cette partie car il ne lui reste plus de choix pour le carré à manger. 1.2 Objectifs Dans le cadre du projet, nous nous sommes fixés en plus l objectif de représenter ce jeu sur une interface vidéoludique afin de pouvoir y jouer à l aide d une souris, ce qui relève d une plus grande difficulté. De plus l implémentation du jeu doit permettre de jouer contre une intelligence artificielle dont la conception est complexe. Le projet présentait deux branches de travail : Écrire un programme qui soit bon mais pas infaillible. Écrire un programme qui gagne à chaque fois. Nous avons décidé de nous concentrer sur l IA imbattable, cette branche projet renfermant différentes difficultés au niveau du codage et tout particulièrement de l intelligence artificielle mais aussi au niveau de l ergonomie. Notre objectif adoncétéderéaliserunprogrammefonctionnel,simpled utilisationetidéalement beau. Pour résumer : Un jeu possédant une intelligence artificielle capable de trouver les coups gagnants. Un écran menu au départ proposant de modifier certaines options comme le son, la taille de la fenêtre, accéder aux crédits ou tout simplement commencer une partie. Des bruitages et des musiques. Un bouton pause. Des objets dessinés et parfois animés (sprites). Tout simplement, un jeu exaltant! 4

6 2 Réflexion Une I.A. dans les jeux de plateau peut théoriquement être imbattable, selon la personne qui commence, si le jeu en question répond à certains critères : Le jeu concerné possède un nombre de positions dénombrable (ce qui est le cas ici, même s il y a une infinité de tailles de plateau, chaque plateau aunnombrefinidepositions). Il n y a pas d égalité possible lors d une confrontation. Aucun facteur aléatoire propre aux règles du jeu existe (comme un dé ou un lancer de pièce). Le carré empoisonné possède donc une stratégie gagnante. Quand l IA commence, cette stratégie consiste à trouver un chemin qui, pour chaque coup joué mettra l adversaire dans une position perdante (c est à dire que tout coup suivant possible sera gagnant). Dans le cas où l IA ne commence pas, notre stratégie gagnante devra suivre le chemin où le joueur a le plus de chance de commettre une erreur et donc permettre à notre IA de reprendre un chemin gagnant. Une fois le sujet attribué il nous a fallu cibler le domaine informatique dans lequel évoluait ce projet. Nous nous sommes ensuite intéressés aux outils nécessaires dont nous avions besoin pour pouvoir réaliser ce projet. Enfin, nous avons choisi le paradigme de programmation qui nous semblait le plus approprié par rapport à ces critères. 2.1 Domaine de programmation Il est assez évident que le projet s inscrit dans le domaine des jeux. C est une catégorie importante dans le domaine de l informatique, elle est souvent caractérisée par l utilisation d intelligence artificielle. Dans notre cas nous nous sommes tournés vers une IA basée sur la théorie des jeux, et spécifiquement les jeux à somme nulle, un jeu où la somme des gains est égale à 0. C est à dire qu il ne peut y avoir qu un seul gagnant sur une partie àdeuxjoueurs. Par conséquent le joueur qui commence la partie (s il a une stratégie gagnante) peut finir victorieux. Il est facile d en faire la preuve par l absurde, si l on suppose que l IA a une stratégie gagnante et joue en premier, et que le joueur a aussi une stratégie gagnante quelque soit le coup joué par l IA. Supposons que l IA joue le coup gagnant A et ensuite le joueur joue le coup gagnant B, alors l IA aurait pu en commençant jouer le coup B, lui permettant de gagner. Ce qui est absurde. On voit bien que le joueur qui commence avec une stratégie gagnante, remporte la partie. 5

7 Après avoir défini le domaine informatique dans lequel évoluait le projet, il nous a fallu nous intéresser aux différents outils pour créer ce jeu. 2.2 Outils nécessaires La structure Une des premières réflexions a été de choisir la structure à adopter pour stocker la tablette et ses différents états. Le premier choix s est porté sur une matrice de booléens n*m où n serait la hauteur et m la largeur, ainsi on aurait connu l état de la tablette à chaque coup (1 s il-y-a du chocolat, 0 sinon). Mais on s est vite rendu compte qu utiliser un vecteur de taille l (largeur de la tablette) ayant, dans chacune de ses cases mémoires, la valeur de la hauteur, était plus simple algorithmiquement parlant et moins gourmand en terme de mémoire. De plus l utilisation de cette structure est plus pratique tant dans la manipulation au niveau du code que dans l implémentation de fonction telle que de savoir si un coup est possible. Ensuite pour stocker les coups possibles nous avons pensé, grâce à l aide de notre encadrant, à faire un arbre où tous les coups possibles seraient stockés àl avanceetensuiteyappliquerdesalgorithmesd explorationpourmettreen place notre stratégie gagnante. Notre premier jet fut l arbre contenant tous les coups possibles en distinguant les noeuds joueur et les noeuds IA pour chaque état de la tablette, ce qui dupliquait des sous arbres un nombre important de fois, prenant donc beaucoup de place et de temps de calcul. Pour y remédier nous avons penché pour une structure d arbre qui ne contenait qu une et une seule fois les différents états de la tablette, qu il nous faudra juste relier pour obtenir notre arbre de jeu et appliquer la stratégie gagnante dessus Les algorithmes Pour pouvoir appliquer notre solution gagnante à l arbre de jeu il nous a fallu réfléchir à plusieurs algorithmes : 1. Le Minimax : C est un algorithme récursif d exploration d arbre, qui prend en paramètre le joueur pour faire la distinction entre l IA et le joueur. L algorithme remonte à la racine une valeur située dans les feuilles ou donnée par une fonction d évaluation du noeud n eval1(n) qui dans notre cas retournera un booléeb (0 si le noeud est perdant et 1 sinon). 2. Le NegMax :LeNegmaxestunesimplificationduMinimax,quine fait pas la distinction entre les joueurs. Il fonctionne par symétrie par rapport à 0 où nous pouvons définir une nouvelle fonction d évaluation eval2(n) : eval2(n) =eval1(n) si nous sommes sur un noeud IA. eval2(n) = eval1(n) si nous sommes sur un noeud joueur. 6

8 3. Le Alpha Pruning :L AlphaPruningestunetechniquepermettant de réduire le nombre de noeuds évalués dans l arbre par l algorithme du Minimax ou Negmax. Il permet d élaguer (ou de ne pas explorer) des sous arbres dont la valeur ne contribuera pas au calcul du gain de la racine. 4. Savoir si un coup est possible : C est la fonction essentielle du programme, c est elle qui permet de savoir si le coup proposé par le joueur respecte les règles de découpage de la tablette. 2.3 Le paradigme de programmation Pour ce projet nous avions besoin d un langage permettant de modéliser les différents éléments du jeu (arbre, tablette, noeuds) et leurs relations. Nous avions également besoin de pouvoir créer plusieurs objets différents d un même type. De plus, dû à notre objectif de faire une interface graphique, par respect du domaine du jeu et par challenge de gestion de notre mémoire, nous nous sommes orientés vers le langage C++. Quant à l interface graphique, notre choix s est porté sur la SFML (Simple and Fast Multimedia Library), car c est un langage simple et rapide au niveau des initialisations et comprend moins de modules que la SDL. Maintenant que nous connaissons nos objectifs de réalisation et leurs outils, intéressons nous à la modélisation du jeu. 3 Modélisation 3.1 Modélisation 1 Une fois les règles du jeu comprises et le choix de représentation de la tablette effectué (un tableau/vecteur d entiers contenant pour chaque case la hauteur), nous avons réfléchi aux problèmes majeurs que nous allions rencontrer. Le premier est de définir la succession des coups, autrement dit comment savoir si à partir d un état X de la tablette on peut arriver à un état Y après un coup? De manière générale, comment savoir si un coup est possible? Le second concerne l intelligence artificielle, soit la fabrication de l arbre de jeu qui détermine les coups que jouera l ordinateur. Nous avons abordé ces problèmes dans cet ordre puisque lors de la conception du jeu nous avons décidé de le réaliser jouable par deux personnes humaines (d où la nécessité de définir les coups jouables) puis d y rajouter l IA. Nous allons donc détailler ces deux parties Coup possible Pour déterminer le coup à jouer, l ordinateur ou le joueur doit indiquer les coordonnées du carré inférieur gauche de la zone qu il veut découper. Par exemple dans la figure 7 les coordonnées de découpe sont (2,2). 7

9 Figure 7 Découpage(2,2) Chaque état de la tablette est représenté par une classe qui a entre autre un vecteur contenant les hauteurs de la tablette ainsi que la hauteur et la largeur de la tablette originale. C est avec ces informations et les coordonnées du coup que nous allons vérifier s il est possible. La première est de s assurer que l on ne découpe pas dans le «vide», c est à dire que l abscisse ne se situe pas à un endroit où la hauteur est égale à zéro ou alors que l ordonnée est supérieur à la hauteur de la tablette ce qui serait le cas en découpant en (3,3) sur la figure 8. Finalement, il faut être sûr de ne pas découper une zone en «escalier» puisque l on peut découper uniquement des rectangles pleins. Par exemple dans la figure 8 découper en (2,2) est impossible. Ainsi pour savoir si le coup est possible il faut vérifier pour chaque hauteur suivante si elle n est pas à la fois : plus petite que le nombre de carré à l endroit de la découpe la hauteur soit supérieure à (l ordonnée 1) Grâce à ces deux conditions on s assure qu il n y a pas une hauteur intermédiaire. Il est possible de découper en position (2,2) une tablette composée des hauteurs [3, 3, 3] ou encore [3, 3, 1] mais comme le montre la figure 8, surune[3, 3, 2] c est impossible. Figure 8 Exemplededécoupageinterdit Ainsi en cumulant tous ces tests, il est possible de savoir si un coup (défini par les coordonnées de son carré inférieur gauche) est possible. Une fois cela défini, il est maintenant question de créer l arbre de jeu qui déterminera les coups de l intelligence artificielle Première version Lors de notre réflexion concernant l arbre de jeu nous sommes arrivés à la conclusion que l IA est gagnante si elle trouve un coup pour qu ensuite le joueur ne puisse jamais arriver à la victoire. 8

10 Ainsi lorsque c est au tour de l ordinateur de jouer il suffit de trouver un seul coup gagnant pour que l on arrête de chercher (il suffit de sauvegarder le coup àjouer)etlorsquec estaujoueurdejouerilfautvérifierquetoutsespossibles coups mènent à la victoire de l IA. Il faut donc faire remonter l information dans l arbre afin que l ordinateur ne joue pas le coup qui y mène. Afin de mieux comprendre, nous allons montrer le raisonnement de l ordinateur lorsque celui-ci commence à jouer sur une tablette de largeur et de hauteur 2dans(figure 9). Figure 9 Schéma algorithmique IA Les carrés en bleu clairs signifient que c est à l IA de jouer, en rouge au joueur et les carrés noirs représentent la défaite (celui qui doit jouer au moment du carré noir a perdu). Afin de trouver un coup gagnant, l ordinateur analyse chaque coup possible à partir de la tablette d origine jusqu à trouver un coup gagnant. Pour cela il teste chaque couple de coordonnées possible (grâce à l algorithme du coup possible). S il n en trouve pas alors, il jouera le coup le plus petit possible afin d allonger le temps de jeu et espérer que le joueur parte dans une branche qui le menera àladéfaite. Dans la figure 9 l ordinateur commence par couper les deux carrés du haut, cela donne ce qui se trouve dans l éclipse rouge. C est alors au joueur de jouer et on s aperçoit qu en découpant une seule case cela va mener à la défaite de l ordinateur. Dans ce cas, la situation dans l éclipse rouge est perdante. L ordinateur va faire remonter l information "perdant" jusqu à l origine du coup qui y mène, ou à la tablette de départ et analyser un autre coup (ici découper les deux carrés de droite, l éclipse orange). Malheureusement on va observer le même résultat. La noeud de départ contiendra un vecteur de noeuds possibles et chacun de ses noeuds contiendra sa valeur (perdant ou gagnant pour l IA). 9

11 Puis l algorithme va analyser un autre coup, celui de découper le carré en haut à droite en (2,2). Le joueur se trouvera alors dans la position de l éclipse bleu claire. â ce moment là, il peut jouer deux coups. Il faut s assurer que les deux sont gagnants pour l IA puisqu un seul suffirait pour que le joueur le fasse perdre. On trouve alors que dans tous les cas le joueur perdra s il se trouve dans la position de l éclipse bleu claire. Ainsi l IA va faire monter l information «victoire»aunoeuddedépart.celui-civadoncenregistrerleprochaincoupà jouer (pointeur sur le noeud de l éclipse bleue clair). Ce processus va s appliquer pour chaque noeud, ainsi chaque noeud qui dervra être joué par l ordinateur aura en mémoire le prochain coup à jouer. Le nombre de noeuds (état de tablette) calculé dépend de l ordre d analyse des coups fils (ici en commençant par l éclipse bleu claire il n y aurait pas besoin d analyser les éclipses rouge et orange). Par ailleurs si l ordinateur se trouve en position perdante (impossibilité de gagner), il va devoir vérifier tous les cas possibles pour s assurer qu il ne peut pas gagner Analyse Nous avons implanté cette technique et elle fonctionne. Cependant nous nous sommes rendus compte d un problème majeur, le même noeud est présent un grand nombre de fois. Par exemple dans la figure 3 on s aperçoit que l éclipse rouge est la même que celle verte et de même pour l orange et la bleue. Ainsi pour des tablettes plus grandes le nombre de noeuds augmente très rapidement au point que nous n avons jamais réussi à créer une tablette 5 5. Le temps de calcul était beaucoup trop long (nous détaillerons le nombre de noeuds calculés ainsi que le temps mis par l ordinateur pour trouver la solution dans le 3.3) nous avons donc décidé d exploiter une autre méthode de calcul pour l intelligence artificielle. 3.2 Modélisation 2 Afin d optimiser la taille maximum de la tablette, nous avons pensé à une deuxième structure qui permettrait de ne pas dupliquer les noeuds (positions de la tablette) de l arbre. Avec cette contrainte les noeuds ne devaient plus porter d étiquette " Joueur " ou " IA " qui serait alors déterminée par l ordre de jeu. 10

12 Figure 10 Schéma de l arbre de jeu Pour ce faire nous avons décidé d ajouter une classe Arbre qui contiendrait tous les noeuds possibles dans un tableau où chaque noeud pointerait sur ceux qui sont accessibles depuis ce dernier. Une difficulté a été de trouver un algorithme qui prendrait deux noeuds en paramètre et retournerait vrai si le deuxième est accessible depuis le premier (deuxième est fils du premier) Construction de l arbre Un arbre contenant l intégralité des positions de la tablette dans un tableau doit en premier lieu instancier toutes ces positions. Pour une tablette de hauteur hetdelargeurl(enincluantlatablettevide)lenombredenoeudsestégalà: nbn = hx hx hx... 1 x 1=0 x 2=x 1 x l =x l 1 N ayant pu trouver d algorithme récursif qui crée tous ces noeuds avec une taille de tablette donnée, nous avons, après plusieurs essais, déterminé qu avec notre technique la taille maximum raisonnable d une tablette serait limitée à 9*9 (une tablette 9*9 prenant environ 1 minute à être construite). Le constructeur de l arbre contient par conséquent 9 boucles imbriquées pour construire la totalité des noeuds (voir constructeur de la classe Arbre en annexe). Dans le cas où l on souhaite augmenter la taille maximum de la tablette, il faudra se replonger dans le code. 11

13 Par exemple pour une tablette 3*3 les noeuds crées dans l ordre sont : NULL Une fois la totalité des noeuds crée, on doit les relier. Pour ce faire, pour chaque noeud crée on teste si les noeuds présents avant dans le tableau (par construction les noeuds suivants ne peuvent être obtenus car ils sont "supérieurs" dans la hiérarchie des coups) sont des coups jouables grâce à une méthode de la classe Noeud qui prend un Noeud en paramètre. La complexité amortie de push_back étant constante (au pire des cas (n) avec nnombred élémentsduvecteur)lacréationd unnoeudsefaitenconstant. Celle de couppossible est en (l) dans le pire des cas (voir paragraphe suivant). L algorithme de création de l arbre a donc une complexité de : nbn X 1 (nbn + i l) = (nbn + i= Coups possibles l nbn(nbn 1) )= (l nbn 2 ) 2 Une grande difficulté a été de savoir si un coup était possible depuis un autre en comparant les vecteurs des deux tablettes. Nous avons opté pour un algorithme qui procéderait par élimination en distinguant les différents cas : si on a à faire au même noeud alors faux si la tablette passée en paramètre est plus haute (test sur la 1e colonne) ou plus large alors faux si la tablette passée en paramètre est de largeur inférieure alors : si on a découpé une ou plusieurs lignes et colonnes entières en même temps (3.3.3! 2.2) alors faux. si la tablette est en escalier et on découpe plus que la marche inférieure (3.2.1! 3) alors faux. si on a découpé une ou plusieurs colonnes entières et qu on essaye de découper sur une ligne (3.3.3! 3.2) alors faux. 12

14 si les tablettes sont de même largeur alors : s il y a un escalier sur la tablette et qu on essaie de l égaliser (3.2.1! 1.1.1) alors faux. si on essaye de découper en escalier (3.3.3! 3.2.1) alors faux. si la tablette passée en paramètre est nulle et il y a un escalier sur la tablette initiale (2.1! NULL) alors faux. Si aucune des ces conditions n est respectée c est que le coup peut être joué par conséquent vrai. Voir la méthode Noeud : :couppossible(noeud* n) en annexe. Une fois l arbre créé et les noeuds reliés, pour que le joueur puisse jouer nous avons mis en place une méthode Noeud : :getprochainnoeud(int x, int y) (voir annexe) qui prend en paramètre les coordonnées entrées par le joueur et retourne l adresse du noeud correspondant au noeud obtenu après découpe. Si ce noeud n existe pas elle renvoie NULL. Pour cela la fonction crée une copie de la tablette actuelle (l),faitundécoupage sans se soucier des escaliers et règles de découpage et vérifie si le vecteur ainsi obtenu est présent dans la liste des coups possibles. D ou pour cette méthode la complexité est de : (nbcoups l + l) = (l nbcoups) Evaluation des noeuds et parcours de l arbre A chaque noeud on a également ajouté deux booléens (visited et win) qui permettraient d évaluer si un noeud a été visité lors de l exploration de l arbre et s il a été déclaré gagnant. Un noeud est perdant s il n a que des noeuds gagnants en successeur. Par défaut le seul noeud visité et déclaré gagnant est le noeud NULL qui est la seule feuille de l arbre (s il n y a plus de coups à jouer c est que le joueur précédent a mangé le carré empoisonné). Mise en place du NegMax : En premier lieu nous avons mis en place le Minimax qui prenait le joueur en paramètre et explorait chaque sous arbre à chaque fois jusqu à la feuille. Celui-ci mettait beaucoup trop de temps pour explorer l arbre à partir d une tablette 5*5 (Voir Noeud : :minimax(bool j) en annexe). Nous l avons ensuite simplifié en negmax, introduit les booléens visited et win et mis en place le pruning (un noeud est gagnant s il a au moins un perdant en successeur) au niveau de celui-ci ce qui a donné l algorithme suivant : 13

15 Algorithm 1 NegMax Ensure: booléen égal à true si un noeud est gagnant if le noeud est visité then return gain else evalue true for chaque fils p du noeud do if non(p! negmax() then gain true return true end if end for gain false return gain end if Exemple avec une tablette 2*2 : Le premier coup joué sera donc le coup (2.1) car il met le joueur en position perdante. Figure 11 Le Negmax appliqué à l arbre de jeu La complexité maximale du NegMax ainsi obtenu lors de sa première exécution est en (nbn) car il passera au plus une fois par chaque noeud de l arbre. Pour les appels suivants, le gain de la majorité (ou totalité) des noeuds étant fixé par la première exécution il ne visitera que les noeuds non évalués ou sera constant. Comme nous pouvons le constater nous avons grandement augmenté la taille de la tablette grâce cette nouvelle modélisation. Voyons maintenant nos gains au niveau des performances en confrontant les deux techniques. 14

16 3.3 Confrontation des deux structures Suite à l élaboration de deux modélisations différentes nous avons souhaité mettre en évidence les différences de performances lors de l exécution des deux programmes. Pour cela nous avons effectué une série de tests sur le nombre de nœuds crées et le temps de création de l arbre incluant la recherche du chemin gagnant en fonction de la taille de la tablette. Les tests ont été effectués sur un MacBookAir 2011 avec un processeur Intel Core i5 cadencé à 1.7GHz, possédant 4Go de RAM sous OSX (Mavericks). Pour le calcul du temps nous avons effectué une moyenne sur 10 exécutions. Voici les résultats obtenus : Sur le nombre de noeuds : Figure 12 Histogramme comparatif du nombre de noeuds Figure 13 Tableau comparatif du nombre de noeuds 15

17 Sur le temps de création incluant le calcul du chemin gagnant : Figure 14 Histogramme comparatif de la rapidité de construction Figure 15 Tableau comparatif de la rapidité de construction On peut clairement observer que le nombre de nœuds de la modélisation 1 augmente d une façon exponentielle très rapidement tandis que la modélisation 2metplusdetempsàtendreversl infini.etantdonnéqueletempsdecréation de l arbre est lié au nombre de nœuds, il suit le même schéma. Grâce à ces comparaisons il est clair que la deuxième méthode est techniquement plus efficace. Avantages Inconvénients Modélisation 1 +Constructeur récursif -Petite taille de tablette -Noeuds dupliqués un grand nombre de fois Modélisation 2 +Taille de tablette supérieure -Constructeur non récursif +Noeuds non dupliqués +Navigation facile dans l arbre 16

18 4 Liaison avec l interface graphique S étant fixé l objectif de réaliser le jeu de la tablette de chocolat en utilisant une interface graphique nous avons opté pour une interface utilisant la SFML qui serait générique (qui pourrait être réutilisée pour l implémentation d un autre jeu). Nous vous avons fourni un diagramme UML (orienté C++) en annexe, voici son explication : Le diagramme se décompose en trois parties importantes : La première est la classe Game qui est le gestionnaire de jeu. C est elle qui contient la fenêtre de rendu ainsi que la variable des événements. Elle contient également un pointeur sur chaque phase de jeu (intro, menu, partie, etc..) afin de pouvoir communiquer avec ces dernières. La deuxième est la classe Phase qui est une classe abstraite. Chaque phase est composée d images, de textes, de musiques, de sons, de boutons et de slide-bars qui lui sont propres classés dans des tables de hachage. Elle contient également un pointeur sur la fenêtre de rendu du jeu ainsi que ses événements et un pointeur sur le gestionnaire de jeu Game afin de pouvoir communiquer avec lui et les autres phases. La troisième est la classe Arbre qui contient tous les algorithmes du jeu et qui est instanciée dans une partie. Au lancement du jeu, la classe Game est instanciée, cette dernière instancie les phases Intro et Menu, puis Menu instancie les phases MenuOptions et MenuBonus. Ensuite l intro se lance. Lorsque le joueur clique sur «Jouer» la classe Partie est instanciée et cette dernière instancie le PartMenu (le menu de pause). La partie se déroule en plusieurs étapes. D abord on propose au joueur de rentrer son nom, les dimensions de la tablette ainsi que le joueur qui commence. Une fois les dimensions choisies et non nulles le joueur valide. On instancie alors l Arbre de jeu et la partie se lance. Afin de ne pas modifier le code déjà écrit pour l Arbre et les Noeuds, nous avons repris le système de coordonnées pour la gestion de la tablette et avons décidé de faire tourner l affichage et l arbre en parallèle. Le carré empoisonné est affiché en premier puis les autres carrés de la tablette sont placés relativement par rapport à celui-ci. Lorsque c est à l IA de jouer on trouve le coup suivant au moyen du NegMax et la position actuelle dans l arbre est modifiée, l affichage est ainsi mis à jour. Lorsque c est au joueur de jouer, les coordonnées de la souris dans la tablette, par référence au carré empoisonné, nous donnent les coordonnées du carré de chocolat à manger et sont transmises à l arbre. Alors la tablette initiale est découpée selon ce carré et un nouveau vecteur contenant la pseudo-nouvelle tablette est crée. Ensuite on compare avec la liste des coups successeurs de la tablette initiale, si ce coup existe alors son adresse est renvoyée et la position actuelle change sinon on renvoie NULL et le joueur ne peut jouer le carré sur lequel se situe la souris, et ainsi de suite.. Lorsque la position 17

19 actuelle devient le vecteur NULL la partie s arrête et on passe à l étape de fin de partie qui annonce le gagnant et propose de quitter ou recommencer. Si le joueur quitte, l arbre est détruit et on revient au menu principal. La liaison avec l interface graphique n a donc pas nécessité de nouveau algorithmes et reprend le même fonctionnement qu une exécution sous terminal sauf qu au lieu du main c est la phase Part qui gère l arbre de jeu et qui contient les variables nécessaires au déroulement d une partie. 5 Conclusion Grâce à la réalisation de ce projet, nous avons appris de nombreuses choses. En premier lieu, le travail en groupe que nous avons dû déployer nous a appris à organiser un projet d une telle envergure. Grâce à ce travail, on a pu constater à quoi pourrait ressembler un travail professionnel. Par conséquent cela a amélioré notre communication et organisation au sein du groupe. D un point de vue technique, ce projet nous a permi d améliorer grandement notre connaissance du C++, en particulier de la construction des arbres et de maîtrise des classes. Un point important est que nous avons appris à ne pas rester devant un échec (tablette en 5*5 impossible à compiler) et savoir rebondir afin d améliorer grandement notre programme (élaboration d une seconde intelligence artificielle). Néanmoins de nombreux points pourraient être améliorés comme des bonus graphiques (ajout d options tel que le passage en chocolat blanc, avec ou sans noisettes, etc..), le changement de plate-forme pour le jeu (tablette, mobile) ou l ajout des bibliothèques statiques SFML afin d y jouer avec un simple exécutable. Nous pourrions également ajouter des niveaux de difficulté, avec pour idée que l ordinateur joue des coups qui augmentent les possibilités de gain du joueur. Par exemple, pour un niveau facile, l ordinateur empruntera une branche où le nombre de chemins gagnants pour le joueur est bien supérieur aux siens. Pour le niveau difficile, l ordinateur pourrait trouver le chemin qui comporte le moins de possibilités de gain pour le joueur (mais en laissant au moins un) et enfin le niveau imbattable tel que celui que nous avons créé. Finalement, il pourrait être intéressant de changer les règles afin d augmenter le nombre de coups jouables (comme l exemple dans la feuille du projet) même si après y avoir réfléchi, cela nous semble très compliqué à mettre en œuvre afin de diversifier les stratégies gagnantes. Nous voudrions remercier chaleureusement Hervé Dicky pour son soutien et son aide dans la réalisation de ce projet et espérons que vous prendrez autant plaisir à jouer à ce jeu que nous avons pris à le développer. 18

20 Annexe au projet du carré empoisonné Iaroslav AMPLEEV, Nicolas POMPIDOR, Antoine LAURENT, Sacha WEILL. Table des matières 1. Règles initiales Coup possible 1 (Modélisation 1) Constructeur de l'arbre (Modélisation 2) Constructeur des nœud (Modélisation 2) Méthode getprochainnoeud (Modélisation 2) Coup possible (Modélisation 2) MiniMax NegMax Diagramme UML /8

21 1. Règles initiales 2/8

22 2. Coup possible 1 (Modélisation 1) bool Noeud::CoupPossible(int absc, int ordo) { absc+=1; ordo+=1; int compteur=0; if(absc>0 && ordo>0) { if(absc<=largeur && ordo<=hauteur && tablette[absc-1]!=0) { //je vérifie que les coordonnées existent et que l'on ne découpe pas dans le vide for(int i=absc-1;i<largeur;i++) { if(tablette[i]<tablette[absc-1] and tablette[i]!=0 and tablette[i]>ordo-1) return 0; return 1; 3/8

23 3. Constructeur de l'arbre (Modélisation 2) Arbre::Arbre(int largeur, int hauteur, bool j):largeur(largeur), hauteur(hauteur), joueur(j){ // on crée tous les états possibles pour une tablette fixée en les ajoutant à noeuds for (int i = 0; i <= hauteur; i++) { if (largeur == 1) { noeuds.push_back(new Noeud(this, i)) ; else if (largeur < 1) break; for (int j = i; j <= hauteur; j++) { if (largeur == 2) { noeuds.push_back(new Noeud(this, j, i)); else if (largeur < 2) break; for (int k = j; k <= hauteur; k++) { if (largeur == 3) { noeuds.push_back(new Noeud(this, k, j, i)); else if (largeur < 3) break; for (int l = k; l <= hauteur; l++) { if (largeur == 4) { noeuds.push_back(new Noeud(this, l, k, j, i)); else if (largeur < 4) break; for (int m = l; m <= hauteur; m++) { if (largeur == 5) { noeuds.push_back(new Noeud(this, m, l, k, j, i)); else if (largeur < 5) break; for (int n = m; n <= hauteur; n++) { if (largeur == 6) { noeuds.push_back(new Noeud(this, n, m, l, k, j, i)); else if (largeur < 6) break; for (int o = n; o <= hauteur; o++) { if (largeur == 7) { noeuds.push_back(new Noeud(this, o, n, m, l, k, j, i)); else if (largeur < 7) break; for (int p = o; p <= hauteur; p++) { if (largeur == 8) { noeuds.push_back(new Noeud(this, p, o, n, m, l, k, j, i)); else if (largeur < 8) break; for (int q = p; q <= hauteur; q++) { if (largeur == 9) { noeuds.push_back(new Noeud(this, q, p, o, n, m, l, k, j, i)); else if (largeur < 9) break; racine = noeuds[noeuds.size()-1]; // la racine (tablette initiale est le dernier noeud crée posactuelle = racine; // on commencera à jouer à partir de la racine if (noeuds.size()) { noeuds[0]->setevaluated(1); noeuds[0]->setwin(1); noeuds[1]->setevaluated(1); noeuds[1]->setwin(0); // on fait la liaison entre les noeuds for (int i = 1; i < noeuds.size(); i++) { // on commence à 1 car le 1e est le nul et n'aura pas de successeur for (int ii = 0; ii <= i; ii++) { if (noeuds[i]->couppossible(noeuds[ii])) { // si le coup est possible on l'ajoute noeuds[i]->getcoups()->push_back(noeuds[ii]); 4/8

24 4. Constructeur des nœud (Modélisation 2) Noeud::Noeud(Arbre* a, int q, int p, int o, int n, int m, int l, int k, int j, int i) : ARBRE_DE_JEU(a), tablette(0), coups(0), evaluated(0), win(0) { if (q) { tablette.push_back(q); if (p) { tablette.push_back(p); if (o) { tablette.push_back(o); if (n) { tablette.push_back(n); if (m) { tablette.push_back(m); if (l) { tablette.push_back(l); if (k) { tablette.push_back(k); if (j) { tablette.push_back(j); if (i) { tablette.push_back(i); 5. Méthode getprochainnoeud (Modélisation 2) Noeud* Noeud::getProchainNoeud(int x, int y) const{ // méthode pour le joueur if (x == 0 y == 0) { return NULL; vector<unsigned char> tmp(tablette); // on copie un vector de la tablette initiale for (int i = x - 1; i < tmp.size(); i++) { if (tmp[i] >= y){ // on découpe selon un découpage simple tmp[i] = y - 1; for (int i = tmp.size() - 1; i >= 0; i--) { if (tmp[i] == 0) { tmp.pop_back(); // on enleve les 0 inutiles for (int i = 0; i < coups.size(); i++) { // on compare avec les coups possibles if (tmp.size()!= coups[i]->tablette.size()) { continue; bool ok = true; for (int j = 0; j < tmp.size(); j++) { ok = (tmp[j] == coups[i]->tablette[j]); if (!ok) break; if (ok) { return coups[i]; // si le coup existe on renvoie son adresse return NULL; // sinon renvoie NULL 5/8

25 6. Coup possible (Modélisation 2) bool Noeud::coupPossible(Noeud* n) const{ if (this == n) { //si meme noeud alors faux return false; if (n->tablette.size()) { if (n->tablette.size() > tablette.size()) { // si tab +large alors faux return false; for (int i = 0; i < n->tablette.size(); i++) { // si tab +haute alors faux if (n->tablette[i] > tablette[i]) { return false; if (n->tablette.size() < tablette.size()) { // si largeur inférieure if (n->tablette[0] < tablette[0]) { // si on a decoupé une ou ++ colonne entiere et qu'on essaye en meme temps de decouper une ou ++ ligne entiere alors faux return false; for (int i = tablette.size() - 1; i > 0; i--) { if (tablette[i] < tablette[i-1]) { if (n->tablette.size() < i) { // si la tablette est en escalier et on découpe plus que la marche inférieure alors faux return false; break; for (int i = 0; i < n->tablette.size(); i++) { // si on a decoupé une ou ++ colonne entiere et qu'on essaye en meme temps de decouper une ligne alors faux if (n->tablette[i] < tablette[i]) { return false; else { // si meme largeur de tablette int positiondecoupe = 0; int diff = 0; for (int i = 0; i < tablette.size(); i++) { if (!diff && n->tablette[i] < tablette[i]) { // si on trouve une difference diff = tablette[i] - n->tablette[i]; positiondecoupe = i; // on retient l'indice de la difference else { if (diff) { if (diff!= tablette[i] - n->tablette[i] && tablette[i] - n- >tablette[i]) { return false; // si il y a un escalier et qu'on essaye de l'égaliser alors faux if (n->tablette[i] == n->tablette[positiondecoupe]) { continue; // si on a la meme hauteur on continue le for else { if (n->tablette[i] < tablette[i]) { return false; // sinon on ne peut découper en escalier else { // si n vide if (tablette.size() > 1) { if (vectorescalier(tablette)) { // si escalier sur la tablette alors faux return false; return true; 6/8

26 7. MiniMax bool Noeud::minimax(bool j){ // appeler avec 1 sur les succ pour l'ia infodebug if (!coups.size()) { return!j; else { bool mini = true, maxi = false; for (int i = 0; i < coups.size(); i++) { if (j) { mini = coups[i]->minimax(!j); if (!mini) break; else { maxi = coups[i]->minimax(!j); if (maxi) break; if (j) return mini; else return maxi; 8. NegMax bool Noeud::negmax(){ // appeler!negmax() sur les succ pour l'ia if (evaluated) { return win; else { evaluated = 1; for (int i = 0; i < coups.size(); i++) { if (!coups[i]->negmax()) { win = 1; // Gagnant->au moins 1 perdant en succ return 1; win = 0; // Perdant->tout succ est gagnant return 0; 9. Diagramme UML 7/8

27 8/8

Poker. A rendre pour le 25 avril

Poker. A rendre pour le 25 avril Poker A rendre pour le 25 avril 0 Avant propos 0.1 Notation Les parties sans * sont obligatoires (ne rendez pas un projet qui ne contient pas toutes les fonctions sans *). Celles avec (*) sont moins faciles

Plus en détail

les Formulaires / Sous-Formulaires Présentation...2 1. Créer un formulaire à partir d une table...3

les Formulaires / Sous-Formulaires Présentation...2 1. Créer un formulaire à partir d une table...3 Présentation...2 1. Créer un formulaire à partir d une table...3 2. Les contrôles :...10 2.1 Le contrôle "Intitulé"...11 2.2 Le contrôle "Zone de Texte"...12 2.3 Le contrôle «Groupe d options»...14 2.4

Plus en détail

Les structures de données. Rajae El Ouazzani

Les structures de données. Rajae El Ouazzani Les structures de données Rajae El Ouazzani Les arbres 2 1- Définition de l arborescence Une arborescence est une collection de nœuds reliés entre eux par des arcs. La collection peut être vide, cad l

Plus en détail

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

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004 Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)

Plus en détail

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des

Plus en détail

DETERMINER LA LARGEUR DE PAGE D'UN SITE et LES RESOLUTIONS d'ecran

DETERMINER LA LARGEUR DE PAGE D'UN SITE et LES RESOLUTIONS d'ecran DETERMINER LA LARGEUR DE PAGE D'UN SITE et LES RESOLUTIONS d'ecran dossier par Clochar SOMMAIRE 1. LES RESOLUTIONS d'ecran... 1 2. RESOLUTION de l écran et choix de la TAILLE DE LA PAGE... 2 3. AGRANDISSEMENT

Plus en détail

COURS WINDEV NUMERO 3

COURS WINDEV NUMERO 3 COURS WINDEV NUMERO 3 01/02/2015 Travailler avec un fichier de données Etude du gestionnaire d analyse, Manipulation des tables mémoires, Manipulation de données, Création d états, Pré requis : Cours WinDev

Plus en détail

CREG : http://www.creg.ac- versailles.fr/spip.php?article803

CREG : http://www.creg.ac- versailles.fr/spip.php?article803 OUTILS NUMERIQUES Édu-Sondage : concevoir une enquête en ligne Rédacteur : Olivier Mondet Bla. 1 Présentation Parmi les pépites que contient l Édu-Portail, l application Édu-Sondage est l une des plus

Plus en détail

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

Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2 éducalgo Manuel d utilisation 26 juin 2011 Table des matières 1 Tâche à effectuer : écrire un algorithme 2 2 Comment écrire un algorithme? 3 2.1 Avec quoi écrit-on? Avec les boutons d écriture........

Plus en détail

Recherche dans un tableau

Recherche dans un tableau Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6

Plus en détail

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

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Modes Opératoires WinTrans Mai 13 ~ 1 ~

Modes Opératoires WinTrans Mai 13 ~ 1 ~ Modes Opératoires WinTrans Mai 13 ~ 1 ~ Table des matières Facturation... 2 Tri Filtre... 2 Procédures facturation... 3 Transfert Compta... 8 Création d un profil utilisateur... Erreur! Signet non défini.

Plus en détail

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

Jade. Projet Intelligence Artificielle «Devine à quoi je pense» Jade Projet Intelligence Artificielle «Devine à quoi je pense» Réalisé par Djénéba Djikiné, Alexandre Bernard et Julien Lafont EPSI CSII2-2011 TABLE DES MATIÈRES 1. Analyse du besoin a. Cahier des charges

Plus en détail

Sélection du contrôleur

Sélection du contrôleur Démo CoDeSys - 1 - 1. Configuration de l environnement de travail : Lancer le logiciel CoDeSys Fichier Nouveau Lors de la première utilisation, une boîte de dialogue apparaît permettant la sélection du

Plus en détail

Date M.P Libellé Catégorie S.Catégorie Crédit Débit Solde S.B

Date M.P Libellé Catégorie S.Catégorie Crédit Débit Solde S.B Excel : Réalisation d un classeur Compta Saisir les étiquettes Renommer la première feuille Compta Laisser la première ligne vide et sur la deuxième ligne saisir les étiquettes Se placer sur A2 et saisir

Plus en détail

Le langage C. Séance n 4

Le langage C. Séance n 4 Université Paris-Sud 11 Institut de Formation des Ingénieurs Remise à niveau INFORMATIQUE Année 2007-2008 Travaux pratiques d informatique Le langage C Séance n 4 But : Vous devez maîtriser à la fin de

Plus en détail

Initiation à Excel. Frédéric Gava (MCF) gava@univ-paris12.fr

Initiation à Excel. Frédéric Gava (MCF) gava@univ-paris12.fr Initiation à Excel Frédéric Gava (MCF) gava@univ-paris12.fr LACL, bâtiment P2 du CMC, bureau 221 Université de Paris XII Val-de-Marne 61 avenue du Général de Gaulle 94010 Créteil cedex Plan de cette année

Plus en détail

Assistant d e tablissement de Tableaux

Assistant d e tablissement de Tableaux Assistant d e tablissement de Tableaux Cet outil est autonome et doit être installé sur votre ordinateur sous Windows. Cet outil n est pas parfait, il peut proposer des solutions non correctes, le tableau

Plus en détail

Canevas théoriques du projet sur le poker Partie A

Canevas théoriques du projet sur le poker Partie A Partie A Dans une partie de poker, particulièrement au Texas Hold em Limit, il est possible d effectuer certains calculs permettant de prendre la meilleure décision. Quelques-uns de ces calculs sont basés

Plus en détail

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

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Troisième projet Scribus

Troisième projet Scribus Sommaire 1. Réponse à la question du deuxième projet... 2 2. Présentation du projet... 2 2.1. Organiser son travail... 2 3. Réalisation... 2 3.1. Préparation du texte... 2 3.1.1. Les styles «Dys»... 3

Plus en détail

TP1 : Initiation à Java et Eclipse

TP1 : Initiation à Java et Eclipse TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les

Plus en détail

Initiation à LabView : Les exemples d applications :

Initiation à LabView : Les exemples d applications : Initiation à LabView : Les exemples d applications : c) Type de variables : Créer un programme : Exemple 1 : Calcul de c= 2(a+b)(a-3b) ou a, b et c seront des réels. «Exemple1» nom du programme : «Exemple

Plus en détail

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB Ce document, écrit par des animateurs de l IREM de Besançon, a pour objectif de présenter quelques unes des fonctions du logiciel Scilab, celles qui sont spécifiques

Plus en détail

Guide de démarrage rapide. (pour la version 5.0.)

Guide de démarrage rapide. (pour la version 5.0.) Guide de démarrage rapide (pour la version 5.0.) 2 Table des matières Introduction Réglages de l application MyTalk Mobile 1. MODIFICATION 2. DEMARRER 3. AFFICHER 4. SYNTHETISEUR VOCAL 5. NOMBRE DE MOTS

Plus en détail

La programmation orientée objet et le langage C++

La programmation orientée objet et le langage C++ Cours précédents La programmation orientée objet et le langage C++ Pablo Rauzy rauzy @ enst fr pablo.rauzy.name/teaching.html#epu-cpp EISE4 @ Polytech UPMC 22 octobre 2014 Cours 5 Nouveautés du C++ par

Plus en détail

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

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview. ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview. Sciences et Technologies de l Industrie et du Développement Durable Formation des enseignants parcours : ET24 Modèle de

Plus en détail

Création d un site Internet

Création d un site Internet Création d un site Internet Weebly.com Johanne Raymond Collège Lionel Groulx, mai 2010 Service du soutien à l enseignement et Plan de réussite Ouvrir un compte sur Weebly... 1 Modifier le modèle... 2 Ajouter

Plus en détail

données en connaissance et en actions?

données en connaissance et en actions? 1 Partie 2 : Présentation de la plateforme SPSS Modeler : Comment transformer vos données en connaissance et en actions? SPSS Modeler : l atelier de data mining Large gamme de techniques d analyse (algorithmes)

Plus en détail

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

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris : Développement d un client REST, l application Vélib 1. Présentation L application présentée permet de visualiser les disponibilités des vélos et des emplacements de parking à la disposition des parisiens

Plus en détail

Access 2007 FF Access FR FR Base

Access 2007 FF Access FR FR Base ACCESS Basic Albertlaan 88 Avenue Albert Brussel B-1190 Bruxelles T +32 2 340 05 70 F +32 2 340 05 75 E-mail info@keyjob-training.com Website www.keyjob-training.com BTW TVA BE 0425 439 228 Access 2007

Plus en détail

Arbres binaires de recherche

Arbres binaires de recherche 1 arbre des comparaisons 2 recherche dichotomique l'arbre est recalculé à chaque recherche 2 5 3 4 7 9 1 6 1 2 3 4 5 6 7 9 10 conserver la structure d'arbre au lieu de la reconstruire arbre binaire de

Plus en détail

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX TABLE DES MATIERES Livret Utilisateur Excel 2007 Niveau 2 INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX... 4 Les tableaux croisés dynamiques... 4 Création d un tableau croisé... 5 Comparer des

Plus en détail

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE QCM Remarque : - A une question correspond au moins 1 réponse juste - Cocher la ou les bonnes réponses Barème : - Une bonne réponse = +1 - Pas de réponse = 0

Plus en détail

Traduction des Langages : Le Compilateur Micro Java

Traduction des Langages : Le Compilateur Micro Java BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant

Plus en détail

Le modèle de données

Le modèle de données Le modèle de données Introduction : Une fois que l étude des besoins est complétée, deux points importants sont à retenir : Les données du système étudié Les traitements effectués par le système documentaire.

Plus en détail

Premiers Pas avec OneNote 2013

Premiers Pas avec OneNote 2013 Premiers Pas avec OneNote 2 Présentation de OneNote 3 Ouverture du logiciel OneNote 4 Sous Windows 8 4 Sous Windows 7 4 Création de l espace de travail OneNote 5 Introduction 5 Présentation des différentes

Plus en détail

4D Server et les licences : fonctionnement et environnement

4D Server et les licences : fonctionnement et environnement 4D Server et les licences : fonctionnement et environnement Introduction ---------------------------------------------------------------------------------------------------------- Cette note technique

Plus en détail

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS Mémento Ouvrir TI-Nspire CAS. Voici la barre d outils : L insertion d une page, d une activité, d une page où l application est choisie, pourra

Plus en détail

Navigation dans Windows

Navigation dans Windows Cours 03 Navigation dans Windows Comme je le disais en introduction, notre souris se révèle plus maligne qu'elle n'en a l'air. À tel point qu'il faut apprendre à la dompter (mais c'est très simple, ce

Plus en détail

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test Grandes lignes Analyseur Statique de logiciels Temps RÉel Embarqués École Polytechnique École Normale Supérieure Mercredi 18 juillet 2005 1 Présentation d 2 Cadre théorique de l interprétation abstraite

Plus en détail

Création et Gestion des tables

Création et Gestion des tables Création et Gestion des tables Version 1.0 Z Grégory CASANOVA 2 Sommaire 1 Introduction... 3 2 Pré-requis... 4 3 Les tables... 5 3.1 Les types de données... 5 3.1.1 Les types de données Sql Server... 5

Plus en détail

1. Ouvrir Internet Explorer 2. 2. Faire défiler une page 2. 3. Naviguer dans un site Internet 2. 4. Changer d adresse Internet (URL) 2

1. Ouvrir Internet Explorer 2. 2. Faire défiler une page 2. 3. Naviguer dans un site Internet 2. 4. Changer d adresse Internet (URL) 2 1. Ouvrir Internet Explorer 2 2. Faire défiler une page 2 3. Naviguer dans un site Internet 2 4. Changer d adresse Internet (URL) 2 5. Gérer l affichage des pages Internet 3 6. Pages précédentes et suivantes

Plus en détail

Guide d utilisation de la clé mémoire USB

Guide d utilisation de la clé mémoire USB Service des bibliothèques Guide d utilisation de la clé mémoire USB I- Préambule Politique de prêt : Le Service des bibliothèques vous permet de faire l emprunt d une clé mémoire pour une période de 48

Plus en détail

LE GUIDE COMPLET PRETS A PARIER

LE GUIDE COMPLET PRETS A PARIER LE GUIDE COMPLET PRETS A PARIER Ce guide va vous proposer deux manières de profiter des jeux «Prêts à Parier» disponibles sur le site Promoturf. Ces pronostics sont le résultat d une amélioration majeure

Plus en détail

STAGE IREM 0- Premiers pas en Python

STAGE IREM 0- Premiers pas en Python Université de Bordeaux 16-18 Février 2014/2015 STAGE IREM 0- Premiers pas en Python IREM de Bordeaux Affectation et expressions Le langage python permet tout d abord de faire des calculs. On peut évaluer

Plus en détail

Utilisation du client de messagerie Thunderbird

Utilisation du client de messagerie Thunderbird Outlook express n existant plus sur les systèmes d exploitation sortis après Windows XP, nous préconisons désormais l utilisation du client de messagerie libre distribué gratuitement par la Fondation Mozilla.

Plus en détail

Utilisez Toucan portable pour vos sauvegardes

Utilisez Toucan portable pour vos sauvegardes Utilisez Toucan portable pour vos sauvegardes Préambule Toucan est un logiciel libre et gratuit, permettant de réaliser des sauvegardes ou synchronisation de vos données. Il est possible d automatiser

Plus en détail

Infolettre #18 : Les graphiques avec Excel 2010

Infolettre #18 : Les graphiques avec Excel 2010 Infolettre #18 : Les graphiques avec Excel 2010 Table des matières Introduction... 1 Hourra! Le retour du double-clic... 1 Modifier le graphique... 4 Onglet Création... 4 L onglet Disposition... 7 Onglet

Plus en détail

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

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

EXCEL TUTORIEL 2012/2013

EXCEL TUTORIEL 2012/2013 EXCEL TUTORIEL 2012/2013 Excel est un tableur, c est-à-dire un logiciel de gestion de tableaux. Il permet de réaliser des calculs avec des valeurs numériques, mais aussi avec des dates et des textes. Ainsi

Plus en détail

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

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

FAIRE SES COMPTES AVEC GRISBI

FAIRE SES COMPTES AVEC GRISBI FAIRE SES COMPTES AVEC GRISBI Grisbi est un logiciel de comptabilité personnelle sous licence GPL. (logiciel libre) C est un programme écrit par des français et il respecte parfaitement l'esprit de la

Plus en détail

Activités pour la maternelle PS MS GS

Activités pour la maternelle PS MS GS Gcompris V.8.4.4 linux 1 Activités pour la maternelle SOMMAIRE : Gcompris : Qu est-ce que c est? 2 Remarques et problèmes rencontrés dans la mise en œuvre en classe 3 Liste des activités pour la maternelle

Plus en détail

Windows Internet Name Service (WINS)

Windows Internet Name Service (WINS) Windows Internet Name Service (WINS) WINDOWS INTERNET NAME SERVICE (WINS)...2 1.) Introduction au Service de nom Internet Windows (WINS)...2 1.1) Les Noms NetBIOS...2 1.2) Le processus de résolution WINS...2

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

Générer du code à partir d une description de haut niveau

Générer du code à partir d une description de haut niveau Cedric Dumoulin Générer du code à partir d une description de haut niveau Ce projet vise à fournir un environnement de développement permettant de modéliser des UI Android à un haut niveau d abstraction,

Plus en détail

1. Introduction... 2. 2. Création d'une macro autonome... 2. 3. Exécuter la macro pas à pas... 5. 4. Modifier une macro... 5

1. Introduction... 2. 2. Création d'une macro autonome... 2. 3. Exécuter la macro pas à pas... 5. 4. Modifier une macro... 5 1. Introduction... 2 2. Création d'une macro autonome... 2 3. Exécuter la macro pas à pas... 5 4. Modifier une macro... 5 5. Création d'une macro associée à un formulaire... 6 6. Exécuter des actions en

Plus en détail

PRISE EN MAIN D UN TABLEUR. Version OPEN OFFICE

PRISE EN MAIN D UN TABLEUR. Version OPEN OFFICE PRISE EN MAIN D UN TABLEUR Version OPEN OFFICE Prise en main d un tableur page 2 1. L utilisation de la souris Pour faire fonctionner un tableur, on utilise le clavier mais aussi la souris. Rappelons,

Plus en détail

Créer le schéma relationnel d une base de données ACCESS

Créer le schéma relationnel d une base de données ACCESS Utilisation du SGBD ACCESS Polycopié réalisé par Chihab Hanachi et Jean-Marc Thévenin Créer le schéma relationnel d une base de données ACCESS GENERALITES SUR ACCESS... 1 A PROPOS DE L UTILISATION D ACCESS...

Plus en détail

TP : Gestion d une image au format PGM

TP : Gestion d une image au format PGM TP : Gestion d une image au format PGM Objectif : L objectif du sujet est de créer une classe de manipulation d images au format PGM (Portable GreyMap), et de programmer des opérations relativement simples

Plus en détail

Application 1- VBA : Test de comportements d'investissements

Application 1- VBA : Test de comportements d'investissements Application 1- VBA : Test de comportements d'investissements Notions mobilisées Chapitres 1 à 5 du cours - Exemple de récupération de cours en ligne 1ère approche des objets (feuilles et classeurs). Corps

Plus en détail

GOL502 Industries de services

GOL502 Industries de services GOL502 Industries de services Conception d un service Partie IIb Version 2013 Introduction Conception d un service partie IIb Nous verrons dans ce chapitre Modélisation d un service; Langage de modélisation

Plus en détail

TD : Codage des images

TD : Codage des images TD : Codage des images Les navigateurs Web (Netscape, IE, Mozilla ) prennent en charge les contenus textuels (au format HTML) ainsi que les images fixes (GIF, JPG, PNG) ou animée (GIF animée). Comment

Plus en détail

Dossier projet isn 2015 par Victor Gregoire

Dossier projet isn 2015 par Victor Gregoire Dossier projet isn 2015 par Victor Gregoire Plan: I) But du projet: créer un jeu de blackjack fonctionnel et le poster sur une page web mise en ligne. Le jeu sera developpé en C++ a l'aide de code blocks.

Plus en détail

TUTORIEL IMPRESS. Ouvrir Impress cocher «présentation vierge», «suivant» cocher «écran», «suivant» cocher «standard», «créer»

TUTORIEL IMPRESS. Ouvrir Impress cocher «présentation vierge», «suivant» cocher «écran», «suivant» cocher «standard», «créer» TUTORIEL IMPRESS Ouvrir Impress cocher «présentation vierge», «suivant» cocher «écran», «suivant» cocher «standard», «créer» Une page impress s'ouvre : Le volet gauche contiendra toutes les diapositives

Plus en détail

La Gestion de fichiers Supports réalisés avec OpenOffice.org 2.3 Writer. La Gestion de fichiers. Niveau : Débutant Auteur : Antonio da Silva

La Gestion de fichiers Supports réalisés avec OpenOffice.org 2.3 Writer. La Gestion de fichiers. Niveau : Débutant Auteur : Antonio da Silva La Gestion de fichiers Niveau : Débutant Auteur : Antonio da Silva Table des matières I.Introduction....3 II.La création d'un fichier......4 III.L'arborescence......7 IV.La gestion des dossiers......11

Plus en détail

MANUEL TBI - INTERWRITE

MANUEL TBI - INTERWRITE MANUEL TBI - INTERWRITE TBIIW TITRE Manuel InterWrite WorkSpace INTITULE Manuel d'utilisation du logiciel InterWrite accompagnant le tableau blanc interactif CALCOMP OBJECTIF Aide mémoire sur les fonctionnalités

Plus en détail

Introduction à MATLAB R

Introduction à MATLAB R Introduction à MATLAB R Romain Tavenard 10 septembre 2009 MATLAB R est un environnement de calcul numérique propriétaire orienté vers le calcul matriciel. Il se compose d un langage de programmation, d

Plus en détail

(Mis à jour : 7 déc. 12)

(Mis à jour : 7 déc. 12) (Mis à jour : 7 déc. ) TABLE DES MATIÈRES. Étapes d une inscription en ligne (IEL)... 3. Page d accueil / Choisir le réseau... 4 3. Choix du tournoi... 5 4. Détails et tarifs d un tournoi... 6 5. Informations

Plus en détail

COMMENCER AVEC VUE. Chapitre 1

COMMENCER AVEC VUE. Chapitre 1 Chapitre 1 COMMENCER AVEC VUE Traduction en français du premier chapitre du manuel d'utilisation du logiciel VUE. Traduit de l'américain par Bernard Aubanel. CRÉER UNE NOUVELLE CARTE Pour ouvrir VUE: 1.

Plus en détail

FICHE 17 : CREER UN SITE WEB

FICHE 17 : CREER UN SITE WEB Publisher permet de créer des sites web. FICHE 17 : CREER UN SITE WEB Créez une nouvelle composition et choisissez Site web. Vous avez le choix entre utiliser le générateur rapide de site web, créer un

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Procédure de sauvegarde pour AB Magique

Procédure de sauvegarde pour AB Magique Procédure de sauvegarde pour AB Magique Importance de la copie de sauvegarde : Il est très important de saisir l utilité d une copie de sauvegarde de votre logiciel AB Magique. Si un problème informatique

Plus en détail

LES TYPES DE DONNÉES DU LANGAGE PASCAL

LES TYPES DE DONNÉES DU LANGAGE PASCAL LES TYPES DE DONNÉES DU LANGAGE PASCAL 75 LES TYPES DE DONNÉES DU LANGAGE PASCAL CHAPITRE 4 OBJECTIFS PRÉSENTER LES NOTIONS D ÉTIQUETTE, DE CONS- TANTE ET DE IABLE DANS LE CONTEXTE DU LAN- GAGE PASCAL.

Plus en détail

[WINDOWS 7 - LES FICHIERS] 28 avril 2010. Logiciel / Windows

[WINDOWS 7 - LES FICHIERS] 28 avril 2010. Logiciel / Windows Ce dossier a une forme un peu différente des précédentes : c est un ensemble de «fiches» décrivant chacune une des opérations que l on peut effectuer avec un fichier (enregistrer, renommer, etc.). Chaque

Plus en détail

Chess Arbiter Pro (version Dames) Notice d utilisation

Chess Arbiter Pro (version Dames) Notice d utilisation Chess Arbiter Pro (version Dames) Notice d utilisation Notice traduite et adaptée avec le concours de la Fédération Française de Jeu de Dames (FFJD) Aug2013 version 2.0 1 Tables des matières 1. CARACTERISTIQUES

Plus en détail

Utilisation d objets : String et ArrayList

Utilisation d objets : String et ArrayList Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN fbertin@neotilus.com

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN fbertin@neotilus.com Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184 Frédéric BERTIN fbertin@neotilus.com Présentaion : Mobile 3D Graphics API JSR 184 M3G :présentation Package optionnel de l api J2ME. Prend

Plus en détail

TP 1. Prise en main du langage Python

TP 1. Prise en main du langage Python TP. Prise en main du langage Python Cette année nous travaillerons avec le langage Python version 3. ; nous utiliserons l environnement de développement IDLE. Étape 0. Dans votre espace personnel, créer

Plus en détail

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes

Plus en détail

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

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ; CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe

Plus en détail

Table des matières. F. Saint-Germain / S. Carasco Document réalisé avec OpenOffice.org Page 1/13

Table des matières. F. Saint-Germain / S. Carasco Document réalisé avec OpenOffice.org Page 1/13 Voici un petit tutoriel d'utilisation du tableau numérique de la marque promethean. Ce tutoriel est loin d'être complet, il permet juste une première approche simple des outils de base du logiciel ACTIVstudio.

Plus en détail

Silhouette Studio Leçon N 2

Silhouette Studio Leçon N 2 Silhouette Studio Leçon N 2 Apprendre comment utiliser Ma Bibliothèque et la Boutique en Ligne Silhouette pour importer des nouveaux modèles. Matériels nécessaires Silhouette SD Feuille de transport colle

Plus en détail

Installation Client (licence réseau) de IBM SPSS Modeler 14.2

Installation Client (licence réseau) de IBM SPSS Modeler 14.2 Installation Client (licence réseau) de IBM SPSS Modeler 14.2 Les instructions suivantes permettent d installer IBM SPSS Modeler Client version 14.2 en utilisant un licence réseau. Ce présent document

Plus en détail

Manuel utilisateur Portail SAP

Manuel utilisateur Portail SAP Manuel utilisateur Portail SAP Procédures demande d achats Manuel Utilisateur SmileySup - Portail SAP v1.0 1/31 1. Table des matières 1. Table des matières... 2 2. Introduction... 3 3. Vue processus...

Plus en détail

Comment mettre en page votre livre

Comment mettre en page votre livre GUIDE - ImprimermonLivre.com Comment mettre en page votre livre www.imprimermonlivre.com 1 V. 20131125 Conseils pour la mise en page de votre ouvrage L objectif de ce guide est de vous aider à réaliser

Plus en détail

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

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

Manuel du gestionnaire

Manuel du gestionnaire Manuel du gestionnaire ENT MESTEK v.2010 Ce manuel s adresse à l équipe administrative d un établissement scolaire : principal, principal adjoint, secrétaires dans un collège, proviseur, proviseur adjoint,

Plus en détail

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée.

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée. ANALYSE 5 points Exercice 1 : Léonie souhaite acheter un lecteur MP3. Le prix affiché (49 ) dépasse largement la somme dont elle dispose. Elle décide donc d économiser régulièrement. Elle a relevé qu elle

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

ARBRES BINAIRES DE RECHERCHE

ARBRES BINAIRES DE RECHERCHE ARBRES BINAIRES DE RECHERCHE Table de symboles Recherche : opération fondamentale données : éléments avec clés Type abstrait d une table de symboles (symbol table) ou dictionnaire Objets : ensembles d

Plus en détail

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

TD3: tableaux avancées, première classe et chaînes TD3: tableaux avancées, première classe et chaînes de caractères 1 Lestableaux 1.1 Élémentsthéoriques Déclaration des tableaux Pour la déclaration des tableaux, deux notations sont possibles. La première

Plus en détail

1 Recherche en table par balayage

1 Recherche en table par balayage 1 Recherche en table par balayage 1.1 Problème de la recherche en table Une table désigne une liste ou un tableau d éléments. Le problème de la recherche en table est celui de la recherche d un élément

Plus en détail

Chapitre 4 Pierre, papier, ciseaux

Chapitre 4 Pierre, papier, ciseaux Python 3 : objectif jeux Chapitre 4 Chapitre 4 Pierre, papier, ciseaux (version graphique) 4.1. Thèmes abordés dans ce chapitre Le module tkinter : Label, Button Fenêtre Événements Réceptionnaire d'événements

Plus en détail

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

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en

Plus en détail

Optimiser pour les appareils mobiles

Optimiser pour les appareils mobiles chapitre 6 Optimiser pour les appareils mobiles 6.1 Créer un site adapté aux terminaux mobiles avec jquery Mobile... 217 6.2 Transformer son site mobile en application native grâce à PhoneGap:Build...

Plus en détail