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
Plan
1 Documentation
2 Tableaux
3 Chaînes de caractères
Plan
1 Documentation
2 Tableaux
3 Chaînes de caractères
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
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)
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
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
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
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.
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.
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
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
Relecture de code
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.)
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é
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
Plan
1 Documentation
2 Tableaux
3 Chaînes de caractères
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
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
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
Plan
1 Documentation
2 Tableaux
3 Chaînes de caractères
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
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