La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

CINI – Li115 1 Semaine 2 Bibliothèque graphique, opérateurs et instructions de base ● Bibliothèque graphique ● Instruction composée ● Instructions conditionnelles.

Présentations similaires


Présentation au sujet: "CINI – Li115 1 Semaine 2 Bibliothèque graphique, opérateurs et instructions de base ● Bibliothèque graphique ● Instruction composée ● Instructions conditionnelles."— Transcription de la présentation:

1 CINI – Li115 1 Semaine 2 Bibliothèque graphique, opérateurs et instructions de base ● Bibliothèque graphique ● Instruction composée ● Instructions conditionnelles ● Boucle for ● Directive #define

2 CINI – Li115 2 Les fonctions graphiques ● Fenêtre graphique ● Coordonnées d'un point ● Problème de la mise en attente ● Primitives de dessin ● Point ● Ligne ● Texte

3 CINI – Li115 3 Fenêtre et coordonnées ● Une fenêtre graphique est composée d'un ensemble de points dont les coordonnées sont des entiers positifs ou nuls ; ● Une fenêtre de largeur L et de hauteur H représente l'ensemble des points de coordonnées entières x et y telles que : – 0 ≤ x ≤ (L - 1) – 0 ≤ y ≤ (H - 1) ● Le point de coordonnées (0, 0) est situé en haut à gauche de la fenêtre.

4 CINI – Li115 4 Notion de pixel ● Un pixel est un élément de la fenêtre défini par : – - sa coordonnée x – - sa coordonnée y – - sa couleur : dans les fonctions de la bibliothèque graphique, c'est une chaîne de caractères en anglais : ''red'', ''white'', ''green'', ''black'',... (0, 0) x=15 y=10 ''red' '

5 CINI – Li115 5 Création d'une fenêtre ● void CINI_open_window(int width, int height, string title); ● → Crée une fenêtre de largeur width, de hauteur height et de nom title ● void CINI_open_fullscreen(); ● → Crée un espace graphique à la taille de l'écran Attention : ● Votre programme doit appeler l'une de ces deux fonctions avant toute opération d'affichage graphique ● Vous ne pouvez avoir qu'une fenêtre d'ouverte à la fois ● → En ouvrir une deuxième détruit la première...

6 CINI – Li115 6 La mise en attente ● Lorsque la dernière instruction (graphique ou non) a été exécutée, le programme se termine et ferme la fenêtre graphique. ● La durée totale d'exécution est inférieure à 1s : l'utilisateur n'a pas le temps de voir son dessin s'afficher ! ● Il faut ajouter une instruction qui bloque l'exécution jusqu'à ce qu'un événement se produise : ● - clic souris ● - enfoncement d'une touche ●

7 CINI – Li115 7 Les fonctions de mise en attente ● void CINI_loop(void) ; ● Met le programme en pause jusqu'à la fermeture de la fenêtre : – - par un clic dans le coin en haut à gauche (si on n'est pas – en plein écran) – - par la touche d'échappement (esc) ● int CINI_loop_until_keyup(void) ; ● Met le programme en pause jusqu'au relâchement d'une touche ● int CINI_loop_until_keydown(void) ; ● Met le programme en pause jusqu'à l'enfoncement d'une touche

8 CINI – Li115 8 Un programme graphique minimal #include int main() { /* Creation de la fenetre */ ● CINI_open_window(300, 400, "fenetre"); ● /* Pause jusqu'à fermeture par l'utilisateur */ ● CINI_loop(); return 0; }

9 CINI – Li115 9 Manipuler des pixels ● void CINI_draw_pixel(int x, int y, string color); ● Affecte la couleur color au point de coordonnées (x, y) dans la fenêtre ● void CINI_fill_window(string color); ● Affecte la couleur color à tous les points de la fenêtre ● bool CINI_check_pixel_color(int x, int y, string color); ● Retourne true si le pixel de coordonnées (x, y) dans la fenêtre est de couleur color, retourne false sinon

10 CINI – Li115 10 Tracer des lignes ● void CINI_draw_line(int ax, int ay, int bx, int by, string color); ● Trace une ligne de couleur color entre le point A de coordonnées (ax, ay) et le point B de coordonnées (bx, by) (0, 0) ax ayay A B byby bx

11 CINI – Li115 11 Insérer du texte dans l'image ● void CINI_draw_string(int x, int y, string color, string str); ● Affiche la chaîne de caractères str à la position (x, y) dans la fenêtre graphique. ● Le texte est affiché en blanc. (0, 0) x y Hello world ! 15 25 H Note : le caractère peut occuper moins de 15x25 pixels. 'M' est plus large et plus haut que 'e'.

12 CINI – Li115 12 Un programme plus complet #include int main() { CINI_open_window(500, 200, "fenetre"); CINI_draw_string(200, 50, "white", "Hello world !"); CINI_draw_line(180, 40, 360, 40, "lime green"); CINI_draw_line(180, 85, 360, 85, "fuchsia"); CINI_draw_line(180, 40, 180, 85, "yellow"); CINI_draw_line(360, 40, 360, 85, "aqua"); CINI_loop(); return 0; }

13 CINI – Li115 13

14 CINI – Li115 14 Instructions ● Une instruction peut être : ● Une expression, elle se termine alors par un point virgule. – Par exemple : une déclaration de variable, une affectation, un appel de fonction. ● Une structure de contrôle : boucle ou alternative. – Par exemple : ● if(...){ ●... ● } ● else{ ●... ● } ● Un bloc d'instructions. ● for(...){ ●... ● } ● while(...){ ●... ● }

15 CINI – Li115 15 Instruction composée (ou bloc d'instructions) ● Regroupe plusieurs instructions entre accolades ● { ● instruction_1; ● instruction_2; ● … ● instruction_n; ● } ● Doit contenir au moins une instruction (pour Li115)

16 CINI – Li115 16 Instruction conditionnelle ● Exécution séquentielle des instructions ● → soumettre l'exécution d'un bloc d'instructions à une condition ● Exemple: – Demander à l'utilisateur son numéro d'étudiant – Si ce numéro est plus grand que 2000000 – → calculer son année d'inscription – → afficher l'année d'inscription – Demander à l'utilisateur son age –... –

17 CINI – Li115 17 Instruction conditionnelle simple : syntaxe Permet de conditionner l'exécution d'une suite d'instructions if (expression_booléenne) instruction; ----------------------------------------------------------------------------------- if (expression_booléenne) { instruction_1; … instruction_n; } Les instructions du bloc ne sont exécutées que si l'expression booléenne est vraie

18 CINI – Li115 18 Test de division par 0 CINI_print_string("apres if"); CINI_newline(); return 0; } #include int main(){ CINI_print_string("saisie du denominateur : "); CINI_print_string("saisie du numerateur : "); num = CINI_read_int(); /* Saisie d'un entier num et d'un entier den. Si den est non nul */ /* affiche le quotient et le reste de la division entiere de den */ /* par num */ if (den != 0) { quotient = num / den; } int num,den,quotient; CINI_print_string("quotient de la division entiere : "); CINI_print_int(quotient); CINI_newline(); CINI_print_string("reste de la division entiere : "); CINI_print_int(num % den); CINI_newline(); den = CINI_read_int();

19 CINI – Li115 19 saisie du numerateur : 8 saisie du denominateur : 4 quotient de la division entiere : 2 reste de la division entiere : 0 apres if ------------------------------------ saisie du numerateur : 5 saisie du denominateur : 4 resultat de la division : 1 reste de la division entiere : 1 apres if ------------------------------------ saisie du numerateur : 8 saisie du denominateur : 0 apres if

20 CINI – Li115 20 Instruction conditionnelle avec alternative : syntaxe Permet de définir des instructions à exécuter si l'expression booléenne est fausse if (expression_booléenne) { instruction_1; … instruction_n; } else { instruction_alt_1; … instruction_alt_m; } Chaque bloc peut contenir une ou plusieurs instructions

21 CINI – Li115 21 Traitement de la division par 0 #include int main(){ /* déclarations des variables num, den et quotient*/... /* initialisation de num et den */... if (den != 0) { quotient = num / den; /* affichage des résultats */... } else { CINI_print_string("erreur : division par 0"); CINI_newline(); } CINI_print_string("apres if"); CINI_newline(); return 0; }

22 CINI – Li115 22 Pas de changement lors d'une division par un entier ≠ 0 saisie du numerateur : 0 saisie du denominateur : 3 resultat de la division : 0 reste de la division entiere : 3 apres if ------------------------------------ saisie du numerateur : 8 saisie du denominateur : 0 erreur : division par 0 apres if

23 CINI – Li115 23 Instruction conditionnelle : règles de bonne conduite Toujours utiliser des instructions composées (même pour une seule instruction) pas de ralentissement du programme permet facilement l'ajout d'instructions

24 CINI – Li115 24 Boucle ● Exécution séquentielle des instructions ● Avec des conditions ● → pouvoir répéter un bloc d'instructions ● Exemple: – Afficher tous les nombres entre 1 et 10 – CINI_print_int(1); CINI_print_int(2); … – VS – i=0; – Répéter jusqu'à 10: – → i=i+1; – → CINI_print_int(i);

25 CINI – Li115 25 Boucle for : syntaxe Permet de répéter plusieurs fois un bloc d'instructions associé à une variable de boucle for (init ; condition_cont ; modification) { instruction_for_1; … instruction_for_n; } init initialise la variable de boucle (qui a été déclarée avant) condition_cont (test de la valeur de la variable de boucle) condition d'entrée (de continuation) de la boucle détermine si la valeur de fin de boucle est atteinte ou non modification modifie la valeur de la variable de boucle attribue une valeur pour le prochain tour de boucle intervient dans le bloc après : instruction_for_n;

26 CINI – Li115 26 Affichage des 4 premiers entiers naturels non nuls int i; CINI_print_string("Valeur de i : "); CINI_print_int(i); CINI_newline(); ------------------------------------ Valeur de i : 1 Valeur de i : 2 Valeur de i : 3 Valeur de i : 4 Boucle finie for ( ; ; ) { } CINI_print_string("Boucle finie"); CINI_newline(); i=1i < 5i=i+1

27 CINI – Li115 27 Boucle for : méthodologie ● Déclaration de la variable de boucle ● i = la valeur à afficher ● Écriture du traitement à répéter en utilisant la variable de boucle (instructions qui vont être dans la boucle) ● Affichage de la valeur de i ● Identification de la valeur initiale de la variable de boucle (init) ● i commence à 1 ● Identification de la valeur finale de la variable de boucle (condition_cont) ● i s'arrête à 4 ● Calcul de la valeur suivante de la variable de boucle (modification) ● i augmente de 1

28 CINI – Li115 28 Affichage des lettres entre 'a' et 'd' for ( ; ; ) { } ------------------------------------ Valeur de c : a Valeur de c : b Valeur de c : c Valeur de c : d Boucle finie CINI_print_string("Boucle finie"); CINI_newline(); char c; CINI_print_string("Valeur de c : "); CINI_print_char(c); CINI_newline(); c='a'c <= 'd'c=c+1

29 CINI – Li115 29 Notation Incrémentation et décrémentation d'une variable ● var = var+1 peut s'écrire var++ ● var = var-1 peut s'écrire var-- ---------------------------------------- int i; for (i=1; i < 5; i++) { CINI_print_string("Valeur de i : "); CINI_print_int(i); CINI_newline(); } CINI_print_string("Boucle finie"); CINI_newline();

30 CINI – Li115 30 Affichage des multiples de 3 inférieurs à 10 int i; ------------------------------------ Multiples de 3 3 6 9 Boucle finie CINI_print_string("Boucle finie"); CINI_newline(); CINI_print_int(i); CINI_newline(); for ( ; ; ) { } i=3i < 10i=i+3 CINI_print_string("Multiples de 3"); CINI_newline();

31 CINI – Li115 31 Boucle for : règles de bonne conduite for (init ; condition_cont ; modification) { instruction_for_1; … instruction_for_n; } Toujours utiliser une instruction composée init : initialise une variable déjà déclarée condition_cont : teste la valeur de la variable de init modification : modifie la valeur de la variable de init instruction_for_i : ne doit pas modifier la valeur de la variable de init pas d'instruction d'interruption de la boucle

32 CINI – Li115 32 Directive #define Nommer des valeurs (sans déclarer de variables) Abstraction : utiliser le nom plutôt que la valeur AVANTAGES ● Facilite la modification et la mise au point du programme ● réutilisation simple de la valeur ● modification de la valeur à un seul endroit ● Meilleur style de programmation #define NOM valeur Le préprocesseur (avant compilation) remplace toutes les apparitions de NOM par valeur Par tradition les noms seront en majuscules

33 CINI – Li115 33 Affichage des N premiers entiers naturels non nuls Même algorithme que l'on affiche les entiers de 1 à 4, de 1 à 10 ou … Ecriture d'un algorithme général, indépendant du nombre d'entiers à afficher

34 CINI – Li115 34 Directive #define : fichier source #include #define N 7 int main() { int i; for (i=1 ; i < N ; i++) { CINI_print_string("Valeur de i : "); CINI_print_int(i); CINI_newline(); } return 0; } Le fichier source

35 CINI – Li115 35 Préprocesseur (avant compilation) int main() { int i; for (i=1 ; i < 7 ; i++) { CINI_print_string("Valeur de i : "); CINI_print_int(i); CINI_newline(); } return 0; } Le fichier qui sera compilé

36 CINI – Li115 36 Exécution (après compilation) Valeur de i : 1 Valeur de i : 2 Valeur de i : 3 Valeur de i : 4 Valeur de i : 5 Valeur de i : 6 Pour afficher plus (ou moins) d'entiers il suffit de - changer la valeur associée à N - recompiler - exécuter le programme obtenu

37 CINI – Li115 37 Attention : valeur ≠ variable #include #define N 3 int main() { N = N-1; return 0; } ------------------------------------------------------- int main() { 3 = 3-1; return 0; } Fichier qui sera compilé Fichier source error : invalid lvalue in assignment #define NOM val NOM n'est pas une variable, c'est une valeur (val ici)


Télécharger ppt "CINI – Li115 1 Semaine 2 Bibliothèque graphique, opérateurs et instructions de base ● Bibliothèque graphique ● Instruction composée ● Instructions conditionnelles."

Présentations similaires


Annonces Google