Chapitre 7 Documentation, tableaux et chaînes de caractères

Transcription

Chapitre 7 Documentation, tableaux et chaînes de caractères
Chapitre 7
Documentation, tableaux et
chaînes de caractères
Jean Privat
Université du Québec à Montréal
INF2170 — Organisation des ordinateurs et assembleur
Automne 2013
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
1 / 23
Plan
1
Documentation
2
Tableaux
3
Chaînes de caractères
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
2 / 23
Plan
1
Documentation
2
Tableaux
3
Chaînes de caractères
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
3 / 23
Historique
Programmation en langage machine
On se met au niveau de la machine
Programmation en assembleur
On facilite la mise au niveau de la machine
Programmation en langage de plus haut niveau
On s’éloigne du niveau de la machine
On s’approche d’un niveau plus humain
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
4 / 23
Trois niveaux de la programmation
Exactitude
Le programme fait ce qu’il est sensé faire
Même dans les cas limites : robustesse
Clarté
Le programme est lisible et compréhensible par un
informaticien humain
Même à 3 heures du matin
Efficacité
Le programme est exécuté par la machine avec le
moins de ressource possible (processeur, mémoire,
énergie)
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
5 / 23
Exactitude des programmes
Un programme dit ce qu’il fait
Documentation
Piège : documentation implicite et perception de
l’utilisateur
Un programme fait ce qu’il dit
Sinon c’est un bogue
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
6 / 23
Sévérité des bogues
Critique
Rend inexploitable des programmes qui ne lui sont
pourtant pas associés, ou casse globalement le
système, ou cause de sévères pertes de données, ou
encore crée une faille dans la sécurité du système
Grave
Rend le programme en question inutilisable ou
presque, ou cause des pertes de données, ou introduit
une faille de sécurité permettant l’accès aux comptes
des utilisateurs qui se servent du programme
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
7 / 23
Sévérité des bogues (suite)
Important
A un effet majeur sur l’utilité du programme, tout en
ne le rendant pas complètement inutilisable
Normal
La valeur par défaut
Mineur
N’affecte pas l’utilité du programme, et qui est a
priori simple à résoudre
Souhait
Demande d’une fonctionnalité, mais aussi pour une
limitation due à la conception du programme
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
8 / 23
Bogues
"There are two ways of constructing a software
design. One way is to make it so simple that there
are obviously no deficiencies. And the other way is to
make it so complicated that there are no obvious
deficiencies." — C.A.R. Hoare.
"If debugging is the process of removing software
bugs, then programming must be the process of
putting them in." — Anonyme.
"Always code as if the guy who ends up maintaining
your code will be a violent psychopath who knows
where you live." — Anonyme.
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
9 / 23
Bogues
"The only difference between a bug and a feature is
the documentation." — Anonyme.
"Debugging is twice as hard as writing the code in
the first place. Therefore, if you write the code as
cleverly as possible, you are, by definition, not smart
enough to debug it." — Brian W. Kernighan.
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
10 / 23
Signaler un bug à un programmeur
Règles
Dire précisément ce qui ne fonctionne pas
Dire précisément ce qui était attendu
Dire précisément comment arriver à ce résultat
incorrect (utilisation pas-à-pas)
Décrire les symptômes
(et non proposer un diagnostic)
http://www.chiark.greenend.org.uk/
~sgtatham/bugs-fr.html
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
11 / 23
Clarté des programmes
Un programme
Représente un algorithme sous une forme
interprétable par une machine
Est destiné à être modifié, corrigé et revu :
maintenance
Donc
On doit programmer en pensant à la fois à la
machine et à l’humain
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
12 / 23
Relecture de code
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
13 / 23
Rendre un programme clair
Règles
Documenter au fur et a mesure
Utiliser des identifiants sémantiques
Structurer
Factoriser
En Pep/8
Plusieurs niveaux de commentaires : programme,
fonctions, gros blocs, groupe d’instructions
Déclaration de constantes (.EQUATE)
Réservation de mémoire et de variables globales
Utiliser les structures de bases (while, if, etc.)
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
14 / 23
Efficacité des programmes
Principe 1
On n’optimise que les parties les plus exécutées (sur
le chemin critique)
Corollaire
Toute partie non critique d’un programme peut être
désoptimisée
Principe 2
L’optimisation ne doit pas nuire à la correction et à
la clarté
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
15 / 23
Efficacité des programmes (suite)
Moyens
Réduire le nombre d’instructions
Changer les structures de données et les algorithmes
Dilemme
Parfois il faut choisir entre plusieurs ressources
Mémoire et temps
Latence et débit
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
16 / 23
Plan
1
Documentation
2
Tableaux
3
Chaînes de caractères
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
17 / 23
Rappel sur les tableaux
Principe
Un tableau est une séquence continue de valeurs en
mémoire
Exercice
Écrire un programme qui lit 10 entiers et les affiche
dans l’ordre croissant
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
18 / 23
Tableau à deux dimensions
Matrices
n lignes et m colonnes
Idée : un grand tableau à une dimension
Travailler avec un tableau tab de n ∗ m cases
La case (i, j) se trouve à mem[tab + (i∗n+j)∗size]
Pièges
Si i > n, on est encore dans le tableau
Pas de multiplication en Pep/8
Exercice
Lire une matrice 4 par 3 et afficher sa transposée
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
19 / 23
Tableau à deux dimensions (suite)
Colonnes pas homogènes
Chaque ligne n’a pas le même nombre de colonnes
Idée : un tableau de pointeurs vers des tableaux
La case (i, j) se trouve à mem[mem[tab+i∗2]+j∗size]
Piège
Comment stocker les dimensions ?
Exercice
Refaire l’exercice sur l’alphabet phonétique de
l’OTAN
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
20 / 23
Plan
1
Documentation
2
Tableaux
3
Chaînes de caractères
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
21 / 23
Chaîne de caractères
Saisie d’une chaîne
Idée écrire STRI
Pièges
Quand s’arrêter ?
Où stocker ?
Comment ne pas déborder ?
Exercice
Le faire
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
22 / 23
Chaînes de caractères
Saisies de plusieurs chaînes
En général, on ne lit pas une seule chaîne
Piège
Comment ne pas gaspiller la place
Exercice
Écrire un programme qui lit plusieurs lignes puis les
affiche dans l’ordre inverse
Jean Privat (UQAM)
07 — Documentation
INF2170 — Automne 2013
23 / 23