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