0% ont trouvé ce document utile (0 vote)
20 vues18 pages

11-12. Tableaux Et Fichiers (Partie 2)

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1/ 18

02/02/2021

Programmation C++ sous Linux


Master TI (2020 - 2021)
Abdelaziz Bouroumi
[email protected]

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
1

11-12. Tableaux & Fichiers (Partie 2)

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
2

1
02/02/2021

Tableaux statiques 2D 3

• 2D  les composantes sont elles-mêmes composées  tableau


2D = tableau de tableaux.
• Déclaration avec initialisation
− int t1[2][3] = {{1,2,3}, {4,5,6}}; 
t1 1 2 3 4 5 6
t1[0] t1[1]

 t1 = tableau de 2 composantes formée chacune de 3 entiers


(ou tableau de 2 pointeurs pointant chacun 3 entiers).
• Déclaration sans initialisation:
− float t2[33][6];  t2 = tableau de 33 composantes
formée chacune de 6 réels (ou tableau de 33 pointeurs
pointant chacun 6 réels).
02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
3

Déclaration de tableaux dynamiques 2D 4

• float *t[]; // t = tableau de pointeurs de réels, qui ne


pointent encore rien; ou
• float **t; // t = pointeur de pointeurs de réels, qui ne
pointent encore rien;
• t = new float*[33]; 
− Réservation d’une zone contiguë de taille 33*sizeof(float*) et
affectation de son adresse de début à la variable t;
− Cette zone permet de stocker 35 pointeurs de réels.
• for(int i=0; i<33; i++) t[i]=new float[6];
 allocation d’une zone mémoire de taille 6*sizeof(float) à
chacune des 33 composantes de t.

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
4

2
02/02/2021

Accès aux composantes d’un tableau 2D 5

• A l’aide de l’opérateur []:


− t[i][j] = 10.5; // Accès en écriture
− cout << t[i][j]; // Accès en lecture
• A l’aide de l’opérateur *:
− *(t[i]+j) = 1.5;  t[i][j] = 1.5;
− *(*(t+i)+j) = 2.6; t[i][j] = 2.6;
• Libération de l’espace réservé dynamiquement:
− for(int i=0; i<33; i++) delete t[i];
− delete[] t;
• Les espaces non libérés conduisent à des fuites mémoire
(https://fr.wikipedia.org/wiki/Fuite_de_m%C3%A9moire).
02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
5

Exemple 5: Carré magique 6

• Un carré magique est une matrice de taille (n,n) formée des


nombres 1, 2, 3, …, n^2, disposés de telle sorte que la somme
de chaque ligne, chaque colonne, et chaque diagonale principale
soit la même.
• Exemples: n = 3 et n = 5

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
6

3
02/02/2021

Création d’un carré magique 7

• Algorithme d’Ibn Al Haytam (année: 0900), valable pour n


impair:
− Placer le nombre 1 au milieu de la première ligne
− Placer les n*n – 1 nombres suivants en se déplaçant
successivement d’une position en haut et à droite;
− Si un déplacement conduit à une case en dehors du carré
considérer le carré comme une table de Karnaugh;
− Si un déplacement conduit à une case déjà remplie
remplacer-la par la case située en dessous de la case avant
déplacement.

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
7

Codage C++ 8

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
8

4
02/02/2021

Affichage du tableau et de sa somme magique 9

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
9

Implémentation sous forme de programme paramétré 10

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
10

5
02/02/2021

Equivalent Python de cm.cpp 11

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
11

Suite du script cm.py 12

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
12

6
02/02/2021

Fichiers de sortie 13

• Déclaration:
− ofstream f;  f est un objet de la classe ofstream qui
peut être associé à un fichier à écrire;
• Ouverture:
− f.open(Nom);  Association de f au fichier nommé Nom
au niveau du SE (avec Nom = tableau de caractères);
• Ecriture d’un flux d’informations dans f à l’aide de l’opérateur
<<:
− f << v;  Ecriture dans le fichier représenté par f de la
valeur de la variable v;
• Fermeture:
− f.close();  Libération de l’espace d’échange avec f.
02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
13

Exemple 6: création d’un fichier de données aléatoires 14

• Programme paramétré qui génère nxp nombres aléatoires réels


compris entre deux limites min et max et les sauvegarde dans un
fichier texte formaté comme suit:
− 1ère ligne: la chaîne M2 (mot magique);
− 2ème ligne: les valeurs de n et p séparées par deux espaces
− 3ème ligne: les valeurs de min et max séparées par deux
espaces
− les n lignes suivantes: p nombres par ligne, séparés par \t.
• Les valeurs des quatre paramètres n, p, min et max, ainsi que le
nom du fichier à créer, sont à passer au programme comme
arguments de la ligne de commande.

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
14

7
02/02/2021

Implémentation C++ de l’exemple 6 15

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
15

Suite de l’exemple 6 16

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
16

8
02/02/2021

Exemple 7: lecture d’un fichier au format "M2" 17

• Programme paramétré qui permet de lire les fichiers au format "


M2", créés par le programme de l’exemple 6.
• Le nom du fichier à lire est passer au programme comme
argument de LC.
• En cas d’erreur de syntaxe ou d’erreur dans la format du fichier
le programme doit s’arrêter après avoir affiché un message
d’erreur adéquat.
• Les nxp données à lire du fichier sont d’abord à sauvegarder
dans un tableau statique 2D .
• Elles doivent ensuite être affichées sous forme d’une matrice de
n lignes et p colonnes.

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
17

Codage C++ de l’exemple 7 18

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
18

9
02/02/2021

Suite de l’exemple 7 19

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
19

Exemple 8: Lecture d’une image au format pgm 20

• pgm (portable greymap) est un format simple et portable de


stockage d’images en niveaux de gris dans des fichiers textes
organisés comme suit:
− Première ligne: la chaîne P2 // mot magique
− Deuxième ligne: L H // Largeur et Hauteur de l’image
− Troisième ligne: NGMAX// Niveau de gris max (255)
− Lignes suivantes: les niveaux de gris des LxH pixels de
l’image, séparés par: un ou plusieurs espaces, \t, ou \n.
− Taille maximale de chaque ligne: 70 caractères.
• La première ligne peut être précédée d’une ou de plusieurs
lignes de commentaire commençant par le caractère #.

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
20

10
02/02/2021

Exemple d’image au format pgm: lena.pgm 21

Ce que voit
l’homme
Cette image est très utilisée
pour tester et comparer les
algorithmes de traitement d’images. Ce que voit la machine

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
21

Autre exemple d’image pgm: chat.pgm 22

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
22

11
02/02/2021

Programme pour lire une image pgm 23

• Programme paramétré qui permet de lire l’en-tête et les données


d’un fichier image au format pgm.
• Le nom du fichier disque contenant l’image à lire est à passer au
programme comme argument de LC.
• Le programme doit afficher:
− le format du fichier,
− les valeurs de L, H et NGMAX
puis demander à l’utilisateur de confirmer ou non l’affichage du
tableau des LxH niveaux de gris.
• En cas d’erreur de syntaxe ou d’ouverture du fichier (s’il
n’existe pas ou s’il est inaccessible en lecture) le programme
doit s’arrêter après affichage d’un message d’erreur adéquat.
02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
23

Codage de l’exemple 8 24

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
24

12
02/02/2021

Suite de l’exemple 8 25

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
25

Exemple 9: seuillage d’une image pgm 26

• Le seuillage ou binarisation d’une image en niveaux de


gris est l’opération qui consiste à mettre à 0 tous les
niveaux de gris de l’image qui sont inférieurs à un certain
seuil s, et à 255 tous ceux qui sont supérieurs ou égaux à
s.
• L’image seuillée peut être sauvegardée dans un nouveau
fichier à créer.
• Application: programme paramétré qui nécessite trois
arguments: le nom du fichier contenant l’image source à
seuiller, le nom du fichier destination à créer pour l’image
seuillée, et la valeur du seuil à utiliser.
02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
26

13
02/02/2021

Exemple de seuillage de l’image chat.pgm 27

Image originale Image seuillée avec


un seuil de 128

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
27

Codage C++ de l’exemple 9 28

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
28

14
02/02/2021

Suite de l’exemple 9 29

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
29

Activité 10: Transformation en NG d’une image ppm 30

• Le format ppm (portable pixmap) est un format standard de


stockage d’images couleurs dans des fichiers textes structurés
comme suit:
− 1ère ligne: la chaîne P3 // mot magique
− 2ème ligne: L H // Largeur et hauteur de l’image
− 3 ligne: NGMAX // Niveau de gris max
ème

− Lignes suivantes: les composantes R,V, B des L*H pixels, séparés


par un ou plusieurs espaces, \t ou \n.
• Taille maximale de chaque ligne: 70 caractères.
• Pour passer d’une image couleur à une image en niveaux de gris, il
suffit de prendre comme niveau de gris de chaque pixel la moyenne
de ses trois composantes R,V, B.
02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
30

15
02/02/2021

Exemple 31

Image source au Image destination au


format ppm format pgm

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
31

Extrait du fichier fleurs.ppm 32

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
32

16
02/02/2021

Codage C++ de l’exemple 10 33

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
33

Suite de l’exemple 10 34

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
34

17
02/02/2021

Activité Pratique 2 (Examen de Rattrapage 2018) 35

L L
y y'

H H

Image source Image réfléchie


x x'

02/02/2021 C++ sous Linux - Master TI, © 2021 A. Bouroumi 11-12. Tableaux & Fichiers (2)
35

18

Vous aimerez peut-être aussi