Structures de données IFT-2000 Abder Alikacem Laboratoire #1 Département d’informatique et de génie logiciel Édition Septembre 2009
Laboratoire de la semaine Soit a1, a2,..., an, une séquence d’entiers possiblement négatifs. On veut trouver le couple (i,j) tel que la somme des a k, k=i,..., j est maximale, avec 1≤ i ≤ j ≤ n a1a2a3a4...an-3an-2an-1an ij « Maximum Subsequence Sum Problem »
Laboratoire de la semaine Il s’agit d’évaluer en termes de notation asymptotique quelques solutions proposées à cette problématique. Il s’agit également de comparer le temps d’exécution de ces solutions pour, d’abord, confirmer la complexité de chacune d’elles et, ensuite, de constater l’énorme différence en temps de calcul qui peut exister entre une solution naïve et une solution plus élaborée. « Maximum Subsequence Sum Problem » Fichiers fournis ModeleTranchesMax.h (définitions de types + inclusions de librairies C++ TrancheMax.h (prototypes des fonctions à implanter) Algorithmes.cpp (à compléter par l’implémentation des fonctions demandées) Main.cpp (le programme principal: appel des fonctions implémentant les algorithmes proposés pour déterminer la tranche max dans un tableau d’entiers, mesure du temps d’exécution de chaque algorithme pour des fins de comparaison).
Laboratoire de la semaine Tous les fichiers fournis dans ce laboratoire ont été documentés avec les balises de Doxygen. Afin de vous familiariser avec, nous vous demandons de compiler tous les fichiers avec cet outil afin de générer la documentation attendue. Nous vous fournissions le fichier de configuration sdd.doxyfile pour cette fin. Vous trouverez un tutoriel pour utiliser Doxygen (avec le Doxywizard ou bien dans Eclipse si vous utilisez cet IDE) dans la section Travaux Examen/Travaux Pratiques/Doxygen sur le site Web du cours). Utilisation de Doxygen (génération de documentations automatisée)
Laboratoire de la semaine Éléments du C++ à découvrir lors de ce laboratoire Les entrées/sorties #include // Librairie pour les entrées/sorties using namespace std; ne jamais mettre cette instruction dans les fichiers.h cin (stdin), cout (stdout), > (scanf du C), endl (saut de ligne) Les structs: différence entre le C et le C++ struct SousSequence { int debut; /*!< Indice de début de la sous-séquence dans Sequence*/ int fin; /*!< Indice de fin*/ int somme; /*!< La somme (max) de la sous-séquence*/ }; En C++, le typedef est inutile…
Laboratoire de la semaine Éléments du C++ à découvrir lors de ce laboratoire Gestion des exceptions #include Le mécanisme try…catch..throw…(voir fichier Main.cpp) int main() {... try {... affiche(trancheMax3(seq, tailleSeq));... } catch (invalid_argument& ia) { cerr << "Invalid argument: " << ia.what() << endl; }... return 0; }
Laboratoire de la semaine Éléments du C++ à découvrir lors de ce laboratoire Gestion des exceptions Gestion des exceptions dans une fonction…(fichier Algorithmes.cpp) SousSequence trancheMax1(Sequence a, int taille) { … if (taille<=0) throw invalid_argument("TrancheMax1: argument invalide\n"); … } La classe invalid_argument fait partie de
Éléments du C++ à voir courant la semaine Du C au C++ Les entrées/sorties (important pour cette semaine) L'espace de nommage Les types vector et string Voir Section « C++ primer » dans le semainier sur le site Web