TD02a Pointeurs et fonctions

Avant de commencer…

Consultez les corrections du TD1.


Qu’est-ce qu’on apprend

  1. Comment utiliser des pointeurs pour passer des structures des données à une fonction.
  2. Comment décomposer un problème en plusieurs parties en utilisant des fonctions.
  3. Comment utiliser des fonctions qui sont définies dans d’autres fichiers.

Lecture…

Pointeurs:

Fonctions:


C’est l’heure du quizz…

Remplissez le quizz IN102-02 ** avant le mardi 19 septembre 18h.**


Au boulot…

Le but est de tracer des lignes en utilisant les fichiers paint.h, paint.c, paint_demo.c. Merci de télécharger ces fichiers ici et de les placer dans votre répertoire de travail (là où vous editez votre programme et executez gcc).

IMPORTANT: Donnez votre prénom et nom au début du fichier de réponse, sous forme de commentaire. Ajoutez également les réponses aux questions dans votre programme, sous forme de commentaires. Exemple:

/* Jeanne LAGAFFE */
#include <stdio.h>
int main () {
   printf("Hello World !!\n");
}
/* 
Q1: Ceci est la réponse à la question 1.
Q2: Voilà la réponse à la question 2.
*/

Q1:

Regardez le fichier paint_demo.c. Combien de pixels sont coloriés en rouge par le programme?

Q2:

Quelles sont les valeurs de i_min,j_min,i_max,j_max si on dit que les pixels rouges forment une ligne du pixel (i_min,j_min) au pixel (i_max,j_max)?

Q3:

Compilez et exécutez le programme.

Attention: Pour compiler, il faut ajouter “paint.c” pour que le compilateur trouve le code dans ce fichier:

gcc -Wall -Werror -Wfatal-errors paint_demo.c paint.c 

Regardez le fichier paint_demo.bmp qu’il a créé. On y voit quoi? (OK, la réponse est simple mais jouez le jeux.)

Q4:

En vous inspirant de paint_demo.bmp, écrivez un programme qui crée une image ligne.bmp de taille 600x400 et qui trace une ligne horizontale du pixel (100,50) au pixel (500,50).

Q5:

Ajoutez à votre programme une fonction pour tracer une ligne horizontale :

void ligne_horizontale(int j,int i_min,int i_max,
   int r, int g, int b, 
   int largeur,int hauteur, unsigned char* pixels) { 
   // a compléter 
}

Modifiez votre main() afin de tracer la ligne en appelant cette fonction (plus aucun appel à color_pixel dans votre main).

Q6:

Ecrivez un programme qui utilise votre fonction ligne_horizontale pour dessiner un rectangle rempli, rouge, entre les coordonnées (50,100) aux coordonnées (500,250), dans un fichier rectangle.bmp. En dehors de la fonction ligne_horizontale, le programme n’a pas pas droit à color_pixel.

Q7:

Ajoutez à votre programme une fonction

void rectangle(int x_min, int y_min, int x_max, int y_max,
   int r, int g, int b, 
   int largeur,int hauteur, unsigned char* pixels)

qui sera appelé depuis le main() pour dessiner le rectangle. Modifiez le programme pour n’avoir plus d’appel à ligne_horizontale(...), ni à color_pixel(...) dans votre main().

Remarque: Votre ordinateur dessine tous éléments graphiques sur votre écran en utilisant des fonctions comme ceux que vous venez de créer : un pixel à la fois, en traçant des lignes. Il colorie ainsi environ 100 million de pixel par seconde.

Validez:

Nommez le fichier T02a.c et envoyez-le à votre chargé de TD