Vous êtes sur la page 1sur 22

Universit e de Versailles Saint-Quentin-en-Yvelines Licence 1

2013-2014

IN 100 TD
Version du 09 septembre 2013

Franck Quessette Franck.Quessette@uvsq.fr Sandrine Vial Sandrine.Vial@uvsq.fr

Table des mati` eres


1 TD 01 : Introduction, D eclaration de variable, Aectation, Appel de fonction 2 TD 02 : Aectation, Evaluation, Op erateurs 3 TD 03 : Embranchement (le if), Introduction aux bool eens 4 TD 04 : Boucles (le while, le for) 5 TD 05 : Kh olle #1 6 TD 06 : Proc edures 7 TD 07 : Fonctions 8 TD 08 : M ethodologie de programmation 9 TD 09 : Programmation Jeu Noir et Blanc 10 TD 10 : Les Tableaux 11 TD 11 : Algorithmique sur les Tableaux 12 TD 12 : Kh olle #2 A Programmation Jeu D emineur B Programmation Jeu Tic-Tac-Toe C Priorit e et associativit e des op erateurs en C D Annexe : types, variables constantes et fonctions disponibles D.1 Types, Variables, Constantes . . . . . . . . . . . . . . . . . . . . D.2 Achage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D.3 Gestion d ev enements clavier ou souris . . . . . . . . . . . . . . . D.4 Dessin dobjets . . . . . . . . . . . . . . . . . . . . . . . . . . . . D.5 Ecriture de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . D.6 Lecture dentier . . . . . . . . . . . . . . . . . . . . . . . . . . . . D.7 Gestion du temps . . . . . . . . . . . . . . . . . . . . . . . . . . . D.8 Valeur al eatoires . . . . . . . . . . . . . . . . . . . . . . . . . . . D.9 Divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 4 5 6 6 7 9 11 13 14 15 16 17 18 19 20 20 20 21 21 22 22 22 22 22

TD 01 : Introduction, D eclaration de variable, Aectation, Appel de fonction


Les premi` eres etapes sont les suivantes : 1. lancer la Machine virtuelle 2. double cliquer sur le dossier IN100 qui est sur le bureau 3. double cliquer sur le chier exo1.c 4. vous etes pr ets ` a faire lexercice 1.

Prise en main

Remarques importantes
Dans le dossier IN100 il y a plusieurs chiers quil ne faut pas eacer (graphics.c, graphics.h, Makele, police.h, verdana.ttf). Cest dans ce dossier que vous devrez mettre vos chiers contenant vos programme pour compiler et ex ecuter. Nommer vos cher en fonction du num ero de lexercice, comme exo1.c Les noms de chier ne doivent pas contenir despace et doivent se terminer par .c Pour sauvegarder vos chiers dune s eance de TD sur lautre vous pouvez soit les stocker sur une cl e USB personelle soit les sauvegarder sur lespace disque qui vous est r eserv e en utilisant lezilla. A la n de la s eance 1. Eteigner la machine virtuelle 2. S electionner R einit VM 3. Eteignez lordinateur.

Installation ` a la maison ou sur un portable personnel


Aller sur le site www.cartnum.ens.uvsq.fr pour installer VirtualBox et la machine vituelle sur votre ordinateur. Cette installation ne modie pas votre syst` eme et marche quelque soit lordinateur (PC, MAC) et le syst` eme (MAC OS, Window XP, Vista, Seven, Linux,...) Le plus pratique est de faire les TD avec votre propre portable apr` es avoir install e la machine virtuelle.

Exercices
Le but de cet ensemble dexercices est de se familiariser avec lenvironnement de programmation et dacher des objets simples. Exercice 0 Vocabulaire Rappel sur le vocabulaire : Environnement : Dossier, Fichier, Editeur, Compiler, Ex ecuter. Programmation : Variable, Type, Instruction, Aectation, Appel de Fonction. Exercice 1 Premier Programme Dans l editeur geany, le code contenu dans le chier exo1.c est : #include "graphics.h" int main() { /* D eclarer les variables ci-dessous */ POINT p1; POINT p2; /* Initialisation de la fen^ etre graphique */ 2

init_graphics(900,600); /* Tapez votre code ci-dessous */ p1.x = 100; p1.y = 90; p2.x = 200; p2.y = 300; draw_fill_rectangle(p1, p2, bleu); p1.x = 10; p1.y = 10; p2.x = 400; p2.y = 500; draw_line(p1,p2,rouge); p1.x = 300; p1.y = 350; draw_circle(p1,100, magenta); /* Fin de votre code */

/* Permet dattendre un appui sur Echap avant de fermer la fen^ etre graphique */ wait_escape(); exit(0); } 1. Cliquer sur Compiler. 2. Cliquer sur Executer. 3. Comprendre le lien entre le code et lachage. Exercice 2 Programmes En utilisant les fonctions draw line, draw rectangle, draw fill rectangle, draw circle ou draw fill circle dessiner les dessins suivants : 1. Une ligne horizontale et 3 cercles : un centr e sur lextr emit e gauche de la ligne, le deuxi` eme centr e au milieu de la ligne, le troisi` eme centr e sur le point droit de la ligne. 2. 5 lignes horizontales les unes au dessus des autres espac ees de 100 points (de couleurs di erentes). 3. Un carr e de c ot e 100 points dont le coin en bas ` a gauche est aux coordonn ees (20, 20) ` a laide de la fonction draw rectangle. 4. Un carr e de c ot e 100 points dont le coin en bas ` a gauche est aux coordonn ees (200, 200) dont les quatre c ot es sont de couleurs di erentes. 5. Une croix (style ) form ee de deux segments, ins er ee dans un carr e de c ot e 50 et dont le centre est en (120, 170). Exercice 3 Quadrillage

1. Faites une fen etre graphique de 600 par 400. 2. Dessinez un quadrillage avec les lignes espac ees de 100 (draw line). Utilisez le copi e-coll e de l editeur. Exercice 4 Gestion de la souris ees du point qui a et e cliqu e par la souris : Utiliser la fonction wait clic qui renvoie les coordonn POINT p; p = wait_clic(); Notez bien que quand le programme ex ecute la fonction wait clic il attend que lutilisateur clique avant de continuer. 1. Attendre un clic et dessiner un cercle de rayon 100 l` a o` u lutilisateur a cliqu e. 2. R ep eter 4 fois. 3. M eme question, mais eacer le cercle pr ec edent.

TD 02 : Aectation, Evaluation, Op erateurs


Le but de cet ensemble dexercices est de ma triser laectation et les di erentes op erateurs arithm etiques

Exercice 5 1. 2. 3. 4.

Achage dun entier ` a l ecran

D eclarer un entier. Donner lui une valeur quelconque. ecrire un entier ` a l ecran. Utiliser write int (int n) pour Quel est le comportement si on ne donne pas de valeur ` a lentier avant de lacher ? Lire et ecrire des entiers

Exercice 6 1. 2. 3. 4.

D eclarer trois entiers a, b et c. Utiliser lire entier clavier() pour lire a et b. Calculer dans c la moyenne a et b. Acher le contenu de c.

Exercice 7 1. Donner une valeur ` a a. 2. Recopier la valeur de a dans b. 3. Ajouter 2 ` a a, que vaut a ? Exercice 8 La division enti` ere Faites un programme qui d eclare deux variables a et b et qui les ache apr` es avoir fait les aectations suivantes. 1. a = (10/3)*3; 2. b = (10*3)/3; Exercice 9 La division enti` ere Faites un programme qui d eclare quatre variables a, b, c et d. Donner des valeurs ` a a et b puis calculer : 1. c = a/b; 2. d = a%b; Que valent c et d. Comment recalculer a a ` partir de b, c et d. Exercice 10 Associativit e de la soustraction Faites un programme qui d eclare en donne des valeurs ` a trois variables a, b et c et qui ache les expressions suivantes : 1. a-b-c 2. (a-b)-c 3. a-(b-c) Exercice 11 Associativit e de la division enti` ere Faites un programme qui d eclare en donne des valeurs ` a trois variables a, b et c et qui ache les expressions suivantes : 1. a/b/c 2. (a/b)/c 3. a/(b/c) Exercice 12 Calcul avec du graphique D eclarer deux variables de type POINT xer leur ordonn ee ` a 100. Demander ` a lutilisateur les valeurs des abscisses. Tracer deux cercles remplis de rayon 5 centr es sur ces points. Tracer une ligne entre ces deux points. Tracer deux cercles remplis qui s eparent la ligne en trois parties egales. Exercice 13 Calcul avec du graphique D eclarer deux variables de type POINT xer leur ordonn ee ` a 100. Demander ` a lutilisateur les valeurs des abscisses. 4

Tracer deux cercles remplis de rayon 5 centr es sur ces points. Calculer un troisi` eme point que les trois points forment un triangle isoc` ele. Exercice 14 Calcul avec du graphique Demander ` a lutilisateur de cliquer pour obtenir un point. Dessiner un cercle de rayon 100 centr e sur le point. Dessiner un hexagone inscrit dans le cercle.

TD 03 : Embranchement (le if), Introduction aux bool eens


Le but de cet ensemble dexercices est de ma triser la programmation des embranchements : if. Pour les cercles ` a acher, vous utiliserez toujours un rayon de 50.

Exercice 15

Clic 1

1. Acher une ligne verticale en blanc qui s epare l ecran en deux parties egales. 2. Attendre un clic de lutilisateur. Si le clic est ` a gauche de la ligne acher un cercle bleu et sil est ` a droite acher un cercle rouge. Dans les deux cas, le cercle devra etre centr e l` a o` u lutilisateur a cliqu e. Exercice 16 Clic 2

1. Acher une ligne verticale en blanc qui s epare l ecran en deux parties egales. 2. Attendre un clic de lutilisateur. Si lutilisateur clique ` a droite de la ligne, acher un cercle bleu ` a la m eme ordonn ee mais ` a gauche de l ecran (abscisse au choix) et vice versa (si le clic est ` a gauche, acher le cercle a droite). ` Exercice 17 Double clic

1. Acher une ligne verticale en blanc qui s epare l ecran en deux parties egales. 2. Attendre deux clics. Si les deux clics sont chacun dun c ot e de la ligne verticale acher une ligne rouge reliant les deux points o` u lutilisateur a cliqu e. Si les deux clics sont du m eme c ot e de la ligne verticale acher une ligne bleu reliant ces deux points. Exercice 18 Triple clic 1

1. Acher une ligne verticale en blanc qui s epare l ecran en deux parties egales. 2. Acher une ligne horizontale en blanc qui s epare l ecran en deux parties egales. 3. Attendre un clic. Si le clic est en haut ` a gauche ou en bas ` a droite acher un cercle bleu. Si le clic est dans les deux autres zones, acher un cercle rouge. Exercice 19 Triple clic 2

1. Acher une ligne verticale en blanc qui s epare en l ecran en deux parties egales. 2. Attendre trois clics. Si les trois clics sont du m eme c ot e de la ligne acher un triangle reliant les 3 points, sinon, ne rien acher. Exercice 20 1. 2. 3. 4. Tiens un OU

Acher deux traits verticaux qui s eparent l ecran en trois zones de m eme taille. Attendre un clic. Si le clic est dans la zone de gauche ou de droite, acher un cercle bleu. Si le clic est dans la zone du milieu, acher un cercle blanc.

Ecrivez ce programme avec un seul test. Exercice 21 Trois zones

1. Acher deux traits verticaux qui s eparent l ecran en trois zones de m eme taille. 2. Attendre un clic.

3. Si le 4. Si le 5. Si le Ecrivez ce Ecrivez ce

clic est dans la zone de gauche, acher un cercle bleu. clic est dans la zone du milieu, acher un cercle blanc. clic est dans la zone de droite, acher un cercle rouge. programme avec trois tests non imbriqu es. programme avec deux tests imbriqu es. Parit e

Exercice 22

1. Attendre un clic de lutilisateur. 2. Acher un cercle dont la couleur d epend de la parit e des coordonn ees cliqu ees : abscisse paire abscisse impaire ordonn ee paire rouge bleu ordonn ee impaire jaune vert Utilisez le modulo (%) pour tester la parit e. 3. Ecrivez le programme avec 3 tests.

TD 04 : Boucles (le while, le for)


Le but de cet ensemble dexercices est de ma triser la programmation des boucles : while. Dans tous ces exercices, vous utiliserez des chiers exo3.1.c, exo3.2.c etc. que vous cr eerez vous m eme.

Exercice 23

Quadrillage 1

1. Acher des lignes verticales en blanc tous les 100 avec la plus ` a gauche qui est ` a labscisse 100. Exercice 24 Quadrillage 2 1. Acher des lignes verticales en blanc tous les 100 avec la plus ` a gauche qui est ` a labscisse 100. 2. Acher des lignes horizontales en blanc tous les 100 avec la plus basse qui est ` a lordonn ee 100. Exercice 25 ` gauche toute A

1. Acher une ligne verticale en blanc qui s epare l ecran en deux parties egales. 2. Attendre un clic de lutilisateur. 3. Si le clic est dans la partie gauche achez un cercle centr e sur le point cliqu e et recommencez ` a attendre un clic. 4. Si le clic est dans la partie droite, terminez le programme. Exercice 26 1. 2. 3. Allum e- eteint 1

Dessiner un carr e au centre de l ecran (taille au choix). ` chaque clic, le carr A e se remplit et se vide alternativement. Au bout de 20 clics, le programme se termine.

Exercice 27 Allum e- eteint 2 M eme programme que lexercice pr ec edent mais le programme se termine quand le clic est en dehors du carr e.

5
1. 2. 3. 4. 5. 6.

TD 05 : Kh olle #1
La kh olle se d eroule dans le cr eneau horaire habituel et dans la salle habituelle de la s eance de TD. Chaque etudiant ` a une heure de convocation. Quand l etudiant arrive, il tire au hasard un sujet. Il a 40 minutes devant lordinateur pour programmer ce qui est demand e sur le sujet. Tous les documents : livres, notes de cours, notes de TD, programmes d ej` a faits en TD,... sont autoris es Au bout de 40 minutes, lenseignant examine le code et lex ecution de ce dernier et note l etudiant sur 5. 6

Principe

TD 06 : Proc edures

Le but de ce TD est de se familiariser avec les fonctions qui prennent des arguments et qui ne renvoient pas de valeur. Exercice 28 Triangle Ecrire une fonction : e par les 3 points void dessine triangle(POINT p1, POINT p2, POINT p3); qui dessine le triangle form pass es en arguments, le trait entre p1 et p2 etant bleu, celui entre p2 et p3 etant blanc et celui entre p3 et p1 etant rouge. Tester cette fonction par di erents appels dans la fonction main, en particulier, ecrivez le code suivant dans le main. POINT p1, p2, p3; p1 = wait_clic(); p2 = wait_clic(); p3 = wait_clic(); dessine_triangle(p1, p2, p3); Que constatez-vous ? On consid` ere maintenant le code suivant : POINT p1, p2, p3; p1.x = 0; p1.y = 0; p2.x = 300; p2.y = 600; p3.x = 600; p2.y = 0; dessine_triangle(p1, p2, p3); Que se passe-t-il si on change lappel de la fonction par : dessine_triangle(p2, p3, p1); Exercice 29 Croix Ecrire une fonction : void dessine croix(POINT centre, int largeur, COULEUR c); qui dessine la croix centr ee sur le point centre et dont le carr e englobant ` a un cot e de taille largeur. Tester cette fonction par di erents appels dans la fonction main. Exercice 30 Mickey Ecrire une fonction : void dessine mickey(POINT centre, int rayon, COULEUR c); qui dessine un Mickey (sans les eets de reets).

Le rayon pass e en argument est le rayon du grand cercle. Tester cette fonction par di erents appels dans la fonction main. Exercice 31 Cercle de couleur Ecrire une fonction : void dessine cercle couleur(int rayon); qui : attend un clic ; dessine un cercle plein de couleur rouge centr e au point du clic et de rayon rayon ; qui attend des clics si le clic est ` a lint erieur du cercle change la couleur avec la s equence rouge, bleu, blanc, rouge, ... 7

si le clic est ` a lext erieur du cercle, lma fonction se termine. Tester cette fonction par di erents appels dans la fonction main. Exercice 32 Quadrillage Ecrire une fonction : ecran espac ees de 100. void dessine line H(COULEUR c); qui dessine des lignes horizontales sur tout l Ecrire une fonction : ecran espac ees de 100. void dessine line V(COULEUR c); qui dessine des lignes verticales sur tout l Ecrire une fonction : ees void dessine quadrillage(COULEUR c); qui dessine un quadrillage dont les lignes horizontales sont espac de 100 et les lignes verticales sont espac ees egalement de 100. Tester ces fonctions par di erents appels dans la fonction main. Exercices diciles Exercice 33 Choix couleur Faites les fonctions suivantes : es de couleurs di erentes en bas ` a droite de l ecran. void dessine couleurs(); qui dessine 4 carr COULEUR choix couleur(POINT p); si le point est dans un des quatre carr es, la fonction renvoie la couleur de ce carr e, sinon, la fonction renvoie noir. void dessine cercle(); Cette fonction a une variable COULEUR courante; qui stocke la couleur courante. La fonction attend un clics, si le clic est dans un des 4 carr es, la valeur de courante est modi ee en prenant la valeur du carr e cliqu e. Si le clic est en dehors du carr e, la fonction dessine un cercle de la couleur courante. Au bout de 20 cercles dessin es, terminer le programme. Exercice 34 Ellipse Ecrire une fonction : void dessine ellipse(POINT f1, POINT f2, int dist , COULEUR c); qui dessine une ellipse dont les deux foyers sont f1 et f2 et dont la somme des distances aux foyers est dist. ematiques)#Tracer une ellipse http://fr.wikipedia.org/wiki/Ellipse (math Vous utiliserez la fonction : void draw pixel(COULEUR color); qui ache un pixel. Tester cette fonction par di erents appels dans la fonction main. Exercice 35 Quadrilat` ere Ecrire une fonction : void dessine quadri(POINT p1, POINT p2, POINT p3, POINT p4, COULEUR c); qui dessine un quadrilat` ere dont les 4 sommets sont pass es en arguments et dont les lignes ne se croisent pas. Tester cette fonction par di erents appels dans la fonction main.

TD 07 : Fonctions

Exercice 36 En quatre morceaux D eclarer trois variables globales : int haut ou bas; int gauche ou droite; int OU CA; Ecrire une fonction : void qui dit ou c est(POINT p); qui met dans la variable haut ou bas la valeur 0 si le point p est dans la moiti e inf erieure de l ecran et 1 sinon. qui met dans la variable gauche ou droite la valeur 0 si le point p est dans la moiti e gauche de l ecran et 1 sinon. Ecrire une fonction : void calcul OU CA (); qui met dans la variable OU qui met dans la variable OU qui met dans la variable OU qui met dans la variable OU

CA CA CA CA

la la la la

valeur valeur valeur valeur

0 1 2 3

si si si si

en en en en

bas ` a gauche bas ` a droite haut ` a gauche haut ` a droite

Ecrire une fonction : void dessine cercle couleur(POINT centre); qui dessine un cercle bleu, rouge, vert ou jaune centr e sur le point centre si OU CA vaut 0, 1, 2 ou 3. Tester ces fonctions en utilisant le main ci-dessous : int main() { int i; init_graphics(400,400); for (i=0 ; i<20 ; i++) { // tapez votre code ici

} } Exercice 37 Morpion Le morpion se joue sur un tableau de 3 3cases. Vous devez donc d enier une fen etre graphique de 300 300 D eclarer la variable globale : int a qui de jouer; Ecrire une fonction : void quadrillage() qui dessine les lignes n ecessaires pour s eparer la fen etre en neuf cases. Ecrire une fonction : void dessine action(POINT p) 1. qui calcule dans une variable locale centre le centre correspondant ` a la case ` a laquelle le point p appartient. 2. qui ensuite dessine une croix centr ee sur le point centre si a qui de jouer vaut 0 ou qui dessine une cercle centr ee sur le point centre si a qui de jouer vaut 1 Tester ces fonctions en utilisant le main ci-dessous.

int main() { int i; init_graphics(400,400); a_qui_de_jouer = 0; for (i=0 ; i<10 ; i++) { // tapez votre code ici

a_qui_de_jouer = } }

1 - a_qui_de_jouer;

Exercice 38 cercle qui bouge D eclarer deux variables globales : POINT centre, centre precedent; Ecrire une fonction : void efface affiche(); qui ache un cercle rempli noir de rayon 30 centr e sur le point centre precedent et qui ache un cercle rempli bleu de rayon 30 centr e sur le point centre. Ecrire une fonction : void plus ou moins(POINT p); qui recopie la variable centre dans la variable centre precedent et qui ajoute 2 dans le champ y de centre si le point p est au dessus de centre et qui retire 2 dans le champ y de centre si le point p est en dessous de centre. Tester ces fonctions en utilisant le main ci-dessous. int main() { int i; init_graphics(400,400); centre_precedent.x = 0; centre_precedent.y = 0; centre.x = 200; centre.y = 200; for (i=0 ; i<20 ; i++) { // tapez votre code ici

} }

10

TD 08 : M ethodologie de programmation

Le but de cet ensemble dexercices est d etre capable ` a partir dun enonc e en fran cais de trouver la structure du code qui permet de r epondre ` a la question pos ee. Exercice 39 Droite, gauche, ... Ce programme se termine au bout de 20 clic 1. Acher une ligne verticale en blanc qui s epare l ecran en deux parties egales. 2. Attendre un clic de lutilisateur. 3. Si le clic est dans la partie gauche, acher un cercle rouge centr e sur le point cliqu e et recommencer ` a attendre un clic. 4. Si le clic est dans la partie droite, acher un cercle bleu centr e sur le point cliqu e et recommencer a ` attendre un clic. Exercice 40 Droite, gauche, droite, gauche, ... Ce programme se termine au bout de 20 clic 1. Acher une ligne verticale en blanc qui s epare l ecran en deux parties egales. 2. Attendre un clic de lutilisateur. 3. Si le clic est dans la partie gauche, acher un cercle rouge centr e sur le point cliqu e et recommencer ` a attendre un clic 4. Si le clic est dans la partie droite et sil y a au moins un cercle rouge ach e, alors acher un cercle bleu centr e sur le point cliqu e et recommencer ` a attendre un clic. 5. Si le clic est dans la partie droite et sil ny a aucun cercle rouge ach e, alors ne rien acher et recommencer a attendre un clic. ` Exercice 41 Droite, gauche, droite, gauche, droite, gauche, ... Ce programme se termine au bout de 20 clic 1. Acher une ligne verticale en blanc qui s epare l ecran en deux parties egales. 2. Attendre un clic de lutilisateur. 3. Si le clic est dans la partie gauche, acher un cercle rouge centr e sur le point cliqu e et recommencer ` a attendre un clic. 4. Si le clic est dans la partie droite et si le clic pr ec edent etait egalement dans la partie droite, alors acher un cercle bleu centr e sur le point cliqu e et recommencer ` a attendre un clic. 5. Si le clic est dans la partie droite et si le clic pr ec edent etait dans la partie gauche, alors ne rien acher et recommencer ` a attendre un clic.

11

Exercice 42

Bleu blanc rouge

1. Acher deux lignes verticales en blanc s eparent l ecran en 3 parties egales. 2. La premi` ere fois que lutilisateur clique dans la partie gauche, coloriez celle-ci en bleu, la deuxi` eme fois leacer et ainsi de suite. 3. La premi` ere fois que lutilisateur clique dans la partie du milieu, coloriez celle-ci en blanc, la deuxi` eme fois leacer et ainsi de suite. 4. La premi` ere fois que lutilisateur clique dans la partie droite, coloriez celle-ci en rouge, la deuxi` eme fois leacer et ainsi de suite. 5. Lutilisateur devra pouvoir cliquer dans nimporte quelle partie qui devra alors se colorier ou seacer suivant l etat dans lequel elle est. 6. arr eter le programme au bout de 20 clics. Exercice 43 Echiquier

1. Repr esenter un echiquier (cases noires et blanches) de 8 cases par 8 cases. a la fonction draw fill rectangle(). Le code ne doit comporter aucun appel ` a la fonction draw line() et quun seul appel ` ` faire avec une seule boucle. 2. A ` faire avec deux boucles imbriqu 3. A ees (une pour les lignes et une pour les cases de chaque ligne). Exercice 44 D eplacement de pi` eces d echec

1. Repr esenter un disque plein en rouge dans la case en bas ` a gauche : ce disque repr esente une tour dans le jeu des echecs. Tant que lutilisateur clique dans une case o` u la tour peut se rendre, eacer le pion de sa case initiale et acher le dans las case cliqu ee (le jeu sarr ete lorsque lutilisateur clique dans une case non atteignable par la tour). Vous trouverez les r` egles de d eplacements dans cet article : echecs http://fr.wikipedia.org/wiki/Regles du jeu d 2. Rempla cer la tour par une reine. 3. Remplacer la tour par un cavalier. Exercice 45 D egrad e1 La fonction : COULEUR couleur RGB(int r, int g, int b); g en` ere une couleur, lui donnant en argument les valeurs des trois composante red, green et blue qui doivent etre dans lintervalle [0..255]. 1. Initialiser la fen etre graphique avec comme taille (512 512). 2. Acher un d egrad e de rouge (faites varier la composante red et xez les composante green et blue ` a 0. 3. Lachage du d egrad e se fera en utilisant la fonction draw fill rectangle().

Exercice 46

D egrad e2

1. Initialiser la fen etre graphique avec comme taille (512 512). 2. Acher un d egrad e de rouge et de bleu (faites varier les composantes red et blue et xez la composante green a ` 0. 3. Lachage du d egrad e se fera en utilisant la fonction draw fill rectangle(). 12

TD 09 : Programmation Jeu Noir et Blanc

Le but de ce TD est d etre capable de concevoir un ensemble de fonctions permettant de faire un jeu el ementaire. Ce jeu se joue seul sur un plateau. Le plateau est d ecoup e en cases (10 10). Sur chaque case est pos e un jeton qui a une face blanche et une face noire. Au d epart, les jetons sont pos es au hasard (1 par case, mais blanc ou noir au dessus). ` chaque tour de jeu, le joueur choisit un jeton. Le jeton choisi et ses voisins (4 ou 8, comme vous voulez) A sont alors retourn es Deux cases sont voisines si elles se touchent par une ar ete. Le but est de mettre tous les jetons avec la m eme face au dessus.

Etape 1
Exercice 47 Le plateau de jeu Donner une variable globale permettant de stocker le plateau de jeu. Exercice 48 Initialisation du plateau Ecrire une fonction : void initialise plateau(); qui met les jetons au hasard sur le plateau. La fonction alea int(N) renvoie des valeurs al eatoires dans lintervalle [0..N [. Exercice 49 Achage du plateau Ecrire une fonction : void affiche plateau(); qui ache le plateau de jeu. Exercice 50 Premier test Ecrire dans la fonction main un code qui vous permet de tester les fonctions pr ec edentes.

Etape 2
Exercice 51 Modication du plateau Ecrire une fonction : void modifie plateau(POINT p); qui prend en argument un point qui est dans la case cliqu ee qui modie le plateau de jeu suivant les r egles. Exercice 52 Deuxi` eme test Ecrire dans la fonction main un code qui vous permet de tester la fonction pr ec edente.

Etape 3
Exercice 53 Test de n Ecrire une fonction : int encore(); qui renvoie z ero si tous les jetons sont de la m eme couleur et di erent de z ero sinon. Exercice 54 Troisi` eme test 13

Ecrire dans la fonction main un code qui vous permet de tester la fonction pr ec edente.

Etape 4
Exercice 55 Le jeu Ecrire une fonction : void jeu(); qui initialise le tableau et fait jouer le joueur jusqu` a ce quil ait gagn e ou bien jou e 100 coups. Exercice 56 Quatri` eme test Ecrire dans la fonction main un code qui vous permet de tester la fonction pr ec edente.

Am eliorations
Exercice 57 Questions th eoriques

1. Peut-on gagner depuis nimporte quelle situation de d epart ? 2. Sil y a des situations de d epart do` u lon peut gagner et dautres non, peut-on d ecider rapidement si cest le cas ? 3. Comment g en erer un situation de d epart qui est gagnante ` a coups s urs. 4. Peut-on calculer le nombre minimal de coup ` a jouer pour gagner. Exercice 58 Achages

1. Acher des jetons qui ont du relief. 2. Plut ot que dacher des jetons noirs ou blanc, acher une bosse ou un creux.

10

TD 10 : Les Tableaux

Le but de ce TD est de se familiariser avec la premi` ere structure de donn ees un peu complexe que sont les tableaux. Exercice 59 Tableau 1 Attendre 10 clics et apr` es chaque clic acher un cercle rouge centr e sur le point cliqu e, rayon de 10. Une fois les 10 cercles ach es, les r eacher en bleu. Exercice 60 Tableau 2 Attendre 10 clics et apr` es chaque clic acher un cercle rouge centr e sur le point cliqu e, rayon de 10. Une fois les 10 cercles ach es, attendre de nouveau 10 clics et ` a chaque clic eacer les cercles dans lodre inverse dachage. Exercice 61 Tableau 3 Attendre 10 clics et apr` es chaque clic acher un cercle rouge centr e sur le point cliqu e, rayon de 10. Une fois les 10 cercles ach es, attendre de nouveau des clics et ` a chaque clic eacer le ou les cercles qui contiennent le point cliqu e. Arr eter quand tous les cercles sont eac es. Exercice 62 Achage dun tableau Le code ci-dessous permet de remplir un tableau de 20 cases avec des valeurs al eatoires dans lintervalle [0..100[ : int T[20]; int i; for ( i=0 ; i<20 ; i=i+1 ) { T[i] = 100*alea_int(100); } Remplir un tableau de taille 20 avec des nombres al eatoires puis acher le tableau en achant pour chaque case un rectangle rempli bleu.

14

Le point en bas ` a gauche de la case i sera aux coordon ees (100 + 19 i, 50) et le point en haut ` a droite sera aux coordon ees (100 + 19 i + 20, 50 + Y ) avec Y qui est proportionnel ` a la valeur stock ee dans le tableau. Exercice 63 Recherche de la plus petite valeur

1. Acher le tableau comme dans lexercice pr ec edent. 2. Ensuite acher le rectangle qui correspond ` a la plus petite valeur en rouge.

11

TD 11 : Algorithmique sur les Tableaux


Tri 1

Exercice 64 1. 2. 3. 4. 5.

Acher le tableau comme dans lexercice 6.4. Rechercher une case contenant la plus petite valeur stock ee dans le tableau. Echanger les contenu de cette case avec la premi` ere case. Eacer tous l ecran : utilisez un rectangle ou la fonction fill screen (noir). Acher de nouveau le tableau en achant la premi` ere valeur en rouge et les autres en bleu.

Exercice 65 Tri En vous inspirant de lexercice pr ec edent, ecrire un programme qui trie le tableau en ordre croissant en lachant apr` es chaque echange de valeur. Exercice 66 Tableau ` a une dimension

1. Remplir un tableau de points au hasard. Le tableau sera de taille 20. Utilisez la fonction : int alea int(int N) qui renvoie un entier dans lintervalle [0..N [. 2. Remplir un tableau de int au hasard. Le tableau sera de taille 20. 3. Acher des cercles centr es sur les points du premier tableau et dont les rayons sont dans le deuxi` eme tableau. Exercice 67 Convergence Dans cet exercice les rayons seront tous de 20. 1. D eclarer un tableau permettant de stocker des centres. Ce tableau est de taille 20. ` chaque clic remplir le tableau des centres avec les coordonn 2. Attendre 20 clics. A ees cliqu ees, acher ce cercle. 3. Au bout de ces 20 clics, attendre de nouveau 20 clics. 4. Chaque nouveau clic supprimer le cercle le plus eloign e du centre de l ecran et le remplacer par celui centr e sur le nouveau clic. Si le nouveau clic est le centre du cercle le plus eloign e ne rien faire. Exercice 68 1. D eclarer deux tableaux permettant de stocker des centres et des rayons. Ces tableaux sont de taille 20. ` chaque clic remplir le tableau des centres avec les coordonn 2. Attendre 20 clics. A ees cliqu ees, au d epart le rayon est de 20. Si le clic est ` a lint erieur dautres cercles, augmenter les rayons de ces cercles de 5. 3. Au bout de ces 20 clics, attendre de nouveau 20 clics. Pour tous les cercle qui contiennent le point cliquer augmenter le rayon de 5 pour les autres, diminuer de 5.

15

12

TD 12 : Kh olle #2

Principe
1. La kh olle se d eroule dans le cr eneau horaire habituel et dans la salle habituelle de la s eance de TD. 2. Chaque etudiant ` a une heure de convocation. 3. Quand l etudiant arrive, il tire au hasard un sujet. 4. Il a 40 minutes devant lordinateur pour programmer ce qui est demand e sur le sujet. 5. Tous les documents : livres, notes de cours, notes de TD, programmes d ej` a faits en TD,... sont autoris es 6. Au bout de 40 minutes, lenseignant regarde le code et lex ecution de ce dernier et note l etudiant sur 5.

16

Programmation Jeu D emineur


Le but de ce TD est de programmer un jeu de d emineur Les r` egles du d emineur ne sont pas rapell ees ici. Certains param` etres sont x es (variables globales) Taille du plateau de jeu : 20 20. Nombre de mines : 20. Le joueur ` a deux modes de clic sur le plateau de jeu : Mode d ecouverte : quand lutilisateur clique sur une case, celle-ci est d ecouverte et si cest une bombre, il a perdu. Mode d eduction : quand lutilisateur clique sur une case non d ecouverte la case reste non d ecouverte mais sache en avec une croix rouge. Si lutilisateur reclique dessus elle redevient une case non d ecouverte normale. En mode d ecouverte, un clic sur une case rouge, ne la d ecouvre pas En bas de la fen etre sache deux informations : Combien de cases non d ecouvertes sont ach ees avec une croix rouge. Un carr e indiquant si on est en mode d ecouverte ou en mode d eduction. Un clic sur ce carr e fait passer dun mode ` a lautre. Ci-dessous des suggestions dachage : Case non d ecouverte grise (avec ou sans croix rouge) Case d ecouverte qui nest pas une bombe : fond blanc avec chire en noir dessus Case d ecouverte qui est une bombe : compl etement rouge Carr e indiquant le mode : carr e gris pour le mode d ecouverte carr e gris avec croix rouge pour le mode d eduction Le nombre de cases avec une croix rouge sache en rouge ` a cot e du carr e indiquant le mode.

Exercice 69 Donner le programme principal qui permet de cr eer un plateau de jeu et ` a un joueur de jouer jusqu` a ce quil ait gagn e ou perdu. Ne pas se soucier de comment est stock e le jeu. Compiler ce programme avec les fonctions non faites, (juste les ent etes et un corps vide). Exercice 70 Stockage le jeu R epondez ` a ces questions : 1. 2. 3. 4. 5. Pour chaque case du plateau de jeu, quelles informations ont besoin d etre stock ees. Comment coder chacune de ces informations. Proposer un stockage utilisant quun seul tableau en variable globale. Proposer un stockage avec 3 tableaux en variable globale. Comment stocker le mode ?

Ecrire une fonction achage pour le cas des 3 tableaux. Compiler et tester. Exercice 71 Au d ebut Ecrire la fonction qui initialise au hasard le plateau de jeu. Compiler et tester. Exercice 72 O` u suis-je 1 ? Ecrire une fonction qui prend en argument un point et qui renvoie 1 si le point est dans le carr e de mode et 0 sinon.

17

Compiler et tester. Exercice 73 O` u suis-je 2 ? Ecrire une fonction qui renvoie le num ero de la ligne du plateau qui correspond au point cliqu e. Cette fonction renvoie -1 si le point cliqu e correspond ` a une ligne hors du tableau. Idem avec les colonnes. Compiler et tester. Exercice 74 Continuer ` a jouer Ecrire une fonction qui renvoie -1 si lme joueur a perdu, 1 sil a gagn e et 0 sil a ni gagn e ni perdu. Compiler et tester. Exercice 75 Cest perdu Si le joueur a perdu, acher toutes les cases o` u il y a des mines. Compiler et tester. Exercice 76 Tout mettre ensemble Mettez tout ensemble et c a marche !

Programmation Jeu Tic-Tac-Toe

Le but de ce TD est de se familiariser avec la notion dalgorithme et la mise en uvre dun alghorithme par de la programmation. Dans tout ce TD, onconsid` ere que lordinateur joue les croix et que lhumain joue les cercle. De plus, on consid` ere que lordinateur commence. Exercice 77 1. 2. 3. 4. 5. Combien Combien Combien Combien Combien Le Tic Tac Toe de premiers coups di erents y a-t-il ? de deuxi` eme coups di erents y a-t-il pour chaque premier coup ? dalignements possible y a-t-il ? y a-t-il de parties possibles di erentes au Tic Tac Toe ? dalignements possible y a-t-il ?

Exercice 78 Jouer b etement au Tic Tac Toe Le but est de faire jouer lordinateur ` a la place dun des deux joueurs. 1. Proposer une mani` ere de jouer de lordinateur bas ee sur la tableau du TD pr ec edent qui grantie que lordinateur joue dans une case vide. ero de la case 2. Ecrire une fonction ordinateur joue qui prend en argument le tableau et renvoie le num du tableau dans lequel il joue. 3. Connaissant cette m ethode de jeu de lordinateur, donner une m ethode pour le battre syst ematiquement. Exercice 79 Mieux jouer au Tic Tac Toe

1. Ecrire une fonction qui cherche sil y a deux symboles de lordinateur d ej` a align es et qui renvoie le num ero de la troisi` eme case si elle est jouable et -1 sinon. 2. Ecrire une fonction qui cherche sil y a deux symboles du joueur humain d ej` a align es et qui renvoie le num ero de la troisi` eme case si elle est jouable et -1 sinon. 3. Ecrire une fonction ordinateur joue qui prend en argument le tableau et renvoie le num ero de la case du tableau dans lequel il joue en utilisant les deux fonctions pr ec edentes. Exercice 80 Bien jouer au Tic Tac Toe

18

1. Quelle est la meilleure case ` a jouer quand on commence ? 2. Combien y a-til de congurations de jeu di erentes pour le deuxi` eme coup du joueur qui commence ? ero de la case 3. Ecrire une fonction ordinateur joue qui prend en argument le tableau et renvoie le num du tableau dans lequel il joue le meilleur premier coup et le meilleur deuxi` eme coup. 4. Prouver que lordinateur ne perd jamais quand il commence. Exercice 81 En plus

1. D evelopper la strat egie de lordinateur quand il joue en deuxi` eme. 2. Ecrire le programme complet qui demande au joueur humain qui commence et qui fait jouer lordinateur optimalement.

Priorit e et associativit e des op erateurs en C


Du plus prioritaire au moins prioritaire : Cat egorie dop erateurs fonction, tableau, membre de structure, pointeur sur un membre de structure op erateurs unaires multiplication, division, modulo addition, soustraction op erateurs binaires de d ecalage op erateurs relationnels op erateurs de comparaison et binaire ou exclusif binaire ou binaire et logique ou logique op erateur conditionnel op erateurs daectation op erateur virgule Symbole () [] . -> Arit e 2 Associativit e GD

+ - ++ -- ! ~ * & sizeof (type) * / % + << >> < <= > >= == != & ^ | && || ?: = += -= *= /= %= &= ^= |= <<= >>= ,

1 2 2 2 2 2 2 2 2 2 2 3 2 2

DG GD GD GD GD GD GD GD GD GD GD DG DG GD

19

D
D.1

Annexe : types, variables constantes et fonctions disponibles


Types, Variables, Constantes
typedef struct point int x,y; POINT; typedef Uint32 COULEUR; typedef int BOOL;

Types

Variables La largeur et la hauteur de la fen etre graphique : int WIDTH; int HEIGHT; Ces deux variables sont initialis ees lors de lappel ` a init graphics(). Constantes D eplacement minimal lorsque lon utilise les ` eches : #define MINDEP 1 Les constantes de couleur : #define noir 0x000000 #define gris 0x777777 #define blanc 0xffffff #define rouge 0xff0000 #define vert 0x00ff00 #define bleu 0x0000ff #define jaune 0x00ffff #define cyan 0xffff00 #define magenta 0xff00ff Les constantes bool eennes : #define TRUE 1 #define True 1 #define true 1 #define FALSE 0 #define False 0 #define false 0

D.2

Achage
void init graphics(int W, int H);

Initialisation de la fen etre graphique

Achage automatique ou manuel Sur les ordinateurs lent, il vaut mieux ne pas acher les objets un par un, mais les acher quand cest n ecessaire. cest aussi utilme pour avoir un achage plus uide quand on fait des animations. On a donc deux modes dachage, automatique ou non. Quand lachage automatique est activ e, chaque dessin dobjet lache automatiquement. Quand il nest pas automatique cest lappel ` a la fonction affiche all(); qui ache les objets. Pour basculer de lachage automatique au non automatique, il y a deux fonctions : void affiche auto on(); void affiche auto off(); Quand on est en mode non automatique lachage se fait lorsque lon appelle la fonction : void affiche all(); Par d efaut on est en mode automatique. 20

Cr eation de couleur COULEUR couleur RGB(int r, int g, int b); prend en argument les 3 composantes rouge (r), vert (g) et bleue (b) qui doivent etre comprises dans lintervalle : [0..255].

D.3

Gestion d ev enements clavier ou souris

Gestion des eches POINT get arrow(); Si depuis le dernier appel ` a get arrow(), il y a eu G appuis sur la ` eche gauche, D appuis sur la ` eche droite H appuis sur la ` eche haut et B appuis sur la ` eche bas. Le point renvoy e vaudra en x D B et en y H B . Cette instruction est non bloquante, cest ` a dire que si aucune ` eche na et e appuy ee les champs x et y vaudront 0. Gestion des d eplacements la souris POINT get mouse(); renvoie le d eplacement de souris avec la m eme s emantique que get arrow(). Cette instruction est non bloquante : si la souris na pas boug e les champs x et y vaudront 0. Gestion des clics de la souris POINT wait clic(); attend que lutilisateur clique avec le bouton gauche de la souris et renvoie les coordonn ees du point cliqu e. Cette instruction est bloquante. POINT wait clic GMD(char *button); attend que lutilisateur clique et renvoie dans button le bouton cliqu e: *button vaut G (pour Gauche) apr` es un clic sur le boutton gauche, *button vaut M (pour milieu) apr` es un clic sur le boutton du milieu, *button vaut D (pour Droit) apr` es un clic sur le boutton droit. Cette instruction est bloquante. Fin de programme POINT wait escape(); attend que lon tape Echap et termine le programme.

D.4
void void void void points void points void void void void void void void void pli. void pli.

Dessin dobjets
fill screen(COULEUR color); remplit tout l ecran. pixel(POINT p, COULEUR color); dessine un pixel. draw line(POINT p1, POINT p2, COULEUR color); dessine un segment. draw rectangle(POINT p1, POINT p2, COULEUR color); dessine un rectangle non rempli. Les deux sont deux sommets quelconques non adjacents du rectangle draw fill rectangle(POINT p1, POINT p2, COULEUR color); dessine un rectangle rempli Les deux sont deux sommets quelconques non adjacents du rectangle draw circle(POINT centre, int rayon, COULEUR color); dessine un cercle non rempli. draw fill circle(POINT centre, int rayon, COULEUR color); dessine un cercle rempli. draw circle HD(POINT centre, int rayon, COULEUR color); draw circle BD(POINT centre, int rayon, COULEUR color); dessinent des quarts de cercle. draw circle HG(POINT centre, int rayon, COULEUR color); draw circle BG(POINT centre, int rayon, COULEUR color); draw fill ellipse(POINT F1, POINT F2, int r, COULEUR color); dessine une ellipse remplie. draw triangle(POINT p1, POINT p2, POINT p3, COULEUR color); dessine un triangle non remdraw fill triangle(POINT p1, POINT p2, POINT p3, COULEUR color); dessine un triangle rem-

21

D.5

Ecriture de texte

Lachage de texte nest pas en standard dans SDL. Il faut donc que la librairie SDL ttf soit install ee. La conguration fournie teste (gr ace au Makefile) si SDL ttf est install ee ou pas. Si elle est install ee, lachage se fait dans la fen etre graphique sinon il se fait dans la fen etre shell. void aff pol(char *a ecrire, int taille, POINT p, COULEUR C); ache du texte avec le texte est pass e dans largument a ecrire la police est celle d enie par la constante POLICE NAME dans graphics.c la taille est pass ee en argument largument p de type POINT est le point en haut ` a gauche ` a partir duquel le texte sache la COULEUR C pass ee en argument est la couleur dachage void aff int(int n, int taille, POINT p, COULEUR C); ache un entier. M eme s emantique que aff pol().

Les fonctions suivantes achent dans la fen etre graphique comme dans une fen etre shell. Commence en haut et se termine en bas : void write text(char *a ecrire); ecrit la cha ne de caract` ere pass ee en argument. void write int(int n); ecrit lentier pass e en argument. void write bool(BOOL b); ecrit le bool een pass e en argument. void writeln(); renvoie ` a la ligne.

D.6

Lecture dentier
renvoie lentier tap e au clavier. Cette fonction est bloquante

int lire entier clavier();

D.7

Gestion du temps

Chronom` etre el ementaire Ce chronom` etre est pr ecis a ` la microseconde. void chrono start(); d eclenche le chrono. Le remet ` a z ero sil etait d ej` a lanc e. float chrono val(); renvoie la valeur du chrono et ne larr ete pas. Attendre void attendre(int millisecondes); Lheure int heure(); envoie lheure de lheure courante. int minute(); renvoie le nombre de minutes de lheure courante int seconde(); renvoie le nombre de secondes de lheure courante. attend le nombre de millisecondes pass e en argument.

D.8

Valeur al eatoires

float alea float(); renvoie un float dans lintervalle [0; 1[. int alea int(int N); renvoie un int dans lintervalle [0..N [ soit N valeurs di erentes de 0 ` a N 1.

D.9

Divers
renvoie la distance entre deux points.

int distance(POINT P1, POINT P2);

22

Vous aimerez peut-être aussi