Informatique TP5 : Manipulations de chaînes et de listes CPP 1A

Documents pareils
Initiation à la programmation en Python

1 Recherche en table par balayage

STAGE IREM 0- Premiers pas en Python

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

TP 1. Prise en main du langage Python

Découverte de Python

Algorithmes récursifs

Cours 3 : Python, les conditions

Licence Sciences et Technologies Examen janvier 2010

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Représentation d un entier en base b

Algorithmique I. Algorithmique I p.1/??

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Projet de programmation (IK3) : TP n 1 Correction

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP


Présentation du langage et premières fonctions

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

MIS 102 Initiation à l Informatique

TD3: tableaux avancées, première classe et chaînes

Cours d algorithmique pour la classe de 2nde

Organigramme / Algorigramme Dossier élève 1 SI

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Utilisation d objets : String et ArrayList

Logiciel Libre Cours 3 Fondements: Génie Logiciel

1 Lecture de fichiers

Programmation C++ (débutant)/instructions for, while et do...while

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

TP Bases de données réparties

Conventions d écriture et outils de mise au point

Les structures de données. Rajae El Ouazzani

Introduction à MATLAB R

Cours Informatique Master STEP

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Initiation à l algorithmique

Cours 1 : La compilation

AWS avancé. Surveiller votre utilisation d EC2

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Algorithmique et Programmation, IMA

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

DM 1 : Montre Autoquartz ETA

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Recherche dans un tableau

Les deux points les plus proches

TP3 : Manipulation et implantation de systèmes de fichiers 1

TP, première séquence d exercices.

Plan du cours. Historique du langage Nouveautés de Java 7

Définitions. Numéro à préciser. (Durée : )

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

TP : Gestion d une image au format PGM

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

Cours 1 : Qu est-ce que la programmation?

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

LES REGLEMENTS AVEC SOCIEL.NET DERNIERE MISE A JOUR : le 14 juin 2010

1. Structure d'un programme FORTRAN 95

Utilisez Toucan portable pour vos sauvegardes

Décompresser, créer une archive au format «ZIP»

Programme Compte bancaire (code)

Les arbres binaires de recherche

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

1 Description générale de VISFIELD

Chapitre 2 Devine mon nombre!

Contexte. Pour cela, elles doivent être très compliquées, c est-à-dire elles doivent être très différentes des fonctions simples,

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

UTILISER UN SITE COLLABORATIF

Introduction à l algorithmique et à la programmation (Info 2)

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Condition inf-sup pour l Elément Fini de Taylor-Hood È ¾ -iso-è ½

Programmation avec Xcas ou Python

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

= constante et cette constante est a.

Conception de circuits numériques et architecture des ordinateurs

Par combien de zéros se termine N!?

Les dossiers compressés (ou zippés)

V- Manipulations de nombres en binaire

Cryptographie RSA. Introduction Opérations Attaques. Cryptographie RSA NGUYEN Tuong Lan - LIU Yi 1

Efficient Object Versioning for Object- Oriented Languages From Model to Language Integration

Python - introduction à la programmation et calcul scientifique

Perl Orienté Objet BioPerl There is more than one way to do it

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Cours 7 : Utilisation de modules sous python

Les outils actuels permettent-ils d automatiser la production de cartes? De quels outils dispose-t-on?

RECUPEREZ DES FICHIERS SUPPRIMES AVEC RECUVA

Algorithmique et structures de données I

L ALGORITHMIQUE. Algorithme

données en connaissance et en actions?

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Outils pour la pratique

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Transcription:

Informatique TP5 : Manipulations de chaînes et de listes CPP 1A Frederic Devernay, Julie Dumas, Maxime Montoya, Matthieu Moy Mars - avril 2017 Pour commencer, veuillez télécharger l archive squelettes_tp5.zip qui contient les squelettes de tous les exercices de ce TP. Attention à ne pas travailler directement dans le fichier zip, vous devez extraire les fichiers avant. 1 Manipulation de chaînes de caractères La bibliothèque standard de Python contient beaucoup de fonctions de manipulations de chaînes évoluées. Le but ici est de retrouver les algorithmes sans utiliser ces fonctions. Le but de cette partie est d écrire une fonction recherche_mot(m, t) qui recherche le mot m dans le texte t. m et t sont deux chaînes de caractères. L algorithme est le suivant : pour chaque position i à l intérieur de la chaîne t, on va vérifier si m correspond à la sous-chaîne de t démarrant à l indice i. Exercice 1 Écrire une fonction coincide(t, i, m) qui renvoie True si la sous-chaîne de t démarrant à l indice i et de la même longueur que m est égale à m, et False sinon. Par exemple, coincide("ceci est un test de texte", 12, "test") et coincide("ceci est un test de texte", 0, "ceci") renvoient True, mais coincide("ceci est un test de texte", 11, "test") renvoie False. Exercice 2 (Recherche de sous-chaîne) En utilisant la fonction coincide(t, i, m), écrire une fonction recherche_mot(m, t) qui renvoie l indice de t où se trouve le mot m s il existe, et la valeur None sinon. Vérifiez sur quelques exemples que la fonction fonctionne comme prévu. Exercice 3 (Complexité) Quelle est la complexité de cet algorithme? En pratique, on sait faire beaucoup mieux que cet algorithme, et arriver à un coût linéaire après un pré-traitement de la chaîne à rechercher (algorithme de Knuth-Morris-Pratt par exemple). Les mêmes algorithmes peuvent être utilisés avec autre chose que des chaînes de caractères (exemple : recherche d un gêne dans une séquence d ADN). 1

2 Manipulation de listes Rappels : 1 Une liste en python est un conteneur permettant de regrouper plusieurs données de natures différentes. Ces données peuvent ensuite être accédées grâce à leurs numéros d emplacement, appelé indice. # Cr é ation d' une liste vide >>> maliste = [] # liste vide >>> maliste = [-5, " bonjour ", 1. 2] # liste avec des valeurs initiales # Lire / modifier un é l é ment >>> maliste [0] # Lire la valeur à l' indice 0-5 >>> maliste [0] = 10 # remplacer la valeur à l' indice 0 par 10 [10, " bonjour ", 1.2, 42] # Ajouter un é l é ments dans une liste >>> maliste. append ( 42) # Ajoute 42 en fin de liste >>> maliste. insert (0, " slt ") # Ajoute " slt " à l' indice 0 (dé but de liste ) [" slt ", 10, " bonjour ", 1.2, 42] # Supprimer un élé ment d' une liste >>> del maliste [3] # Supprime l' é l é ment à l' indice 3 [" slt ", 10, " bonjour ", 42] >>> maliste. remove (" bonjour ") # Supprime l' élé ment " Bonjour " [" slt ", 10, 42] Exercice 4 (Première occurrence) Écrivez une fonction occurrence(liste, valeur) qui renvoie l indice de la première occurence de l élément valeur dans liste liste. La fonction devra renvoyer None s il n y a aucun élément valeur dans la liste. Exemple : si liste = [-4, 3, 7, 3], alors occurrence(liste, 3) renverra : 1 et occurrence(liste, 5) renverra : None Exercice 5 (Nombre d occurrences) Écrivez une fonction nb_occurrences(liste, valeur) qui renvoie le nombre d occurences de l élément valeur contenu dans la liste liste. Exercice 6 (Intercalage) Soient les listes suivantes : L1 = ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"] L2 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] Écrivez un programme qui crée une nouvelle liste L3. Celle-ci devra contenir tous les éléments de L1 et L2 en les alternant, de telle manière que chaque nom de mois soit suivi du nombre de jours correspondant : ["janvier", 31, "février", 29,..., "décembre", 31] Exercice 7 (Fusion de listes triées) Soient L1 et L2 deux listes triées dans l ordre croissant. Écrivez un fonction fusion(l1, L2) qui fusionne L1 et L2 dans une troisième liste L3, de telle 1. cf : TP N o 4 2

sorte que L3 soit aussi triée dans l ordre croissant. Par exemple si L1=[5, 7, 25] et L2=[3, 15, 16, 17, 20], fusion(l1, L2) retournera L3=[3, 5, 7, 15, 16, 17, 20, 25]. Quelle est la complexité de cette opération? Exercice 8 (découpage) Soit la liste L = [35, 72, -5, 50, 24, 19]. Ecrivez un programme qui crée deux nouvelles listes Lpaire et Limpaire, de telle sorte que Lpaire contienne tous les éléments pairs L et Limpaire tous les éléments impairs de L. Faites varier les éléments de L et vérifiez que votre programme fonctionne correctement. 3 Listes de Listes En python une liste peut en contenir une ou plusieurs autres, on parle alors d une liste de listes, ou encore d une à deux dimensions. Le fonctionnement reste analogiquement identique. # Cr é ation d' une liste de listes >>> maliste = [[3, 1], [5, -1], [2, 9]] # Ajouter une liste dans une liste >>> maliste. append ([20, 87]) [[3, 1], [5, -1], [7, 9], [20, 87]] # Acc ès >>> maliste [2] [7,9] >>> maliste [2][0] 7 >>> maliste [2][1] 9 >>> maliste [ 3][ 1] = -100 [[3, 1], [5, -1], [7, 9], [20, -100]] # Taille de la liste >>> len ( maliste ) 4 # Taille de liste à l' indice 0 >>> len ( maliste [0]) 2 Exercice 9 Soit la liste suivante : liste = [[0, "zéro"], [1, "un"], [2, "deux"], [3, "trois"], [4, "quatre"], [5, "cinq"], [6, "six"], [7, "sept"], [8, "huit"], [9, "neuf"] ]. Écrivez un programme permettant d afficher cette liste sous la forme : 0 s écrit : zéro 1 s écrit : un etc. Bonus : Tri À présent, notre objectif d écrire une fonction permettant de trier une liste d entiers dans l ordre croissant avec la méthode du tri par sélection, que vous verrez prochainement en cours. Pour cela, nous allons procéder comme suit : On veut trier la liste L 3

1. On crée une liste vide : maliste 2. Tant que L n est pas vide 3. On calcule min = plus petit élément de L 4. On supprime min de L 5. On ajoute min à maliste 6. On recommence à l étape N o 2 Pour vous guider dans l implémentation, un squelette de programme vous est fourni dans le fichier trie.py Exercice 10 Compléter la fonction minimum(liste) qui calcule et renvoie le plus petit élément de liste passée en argument. Exercice 11 Compléter la fonction trie(liste) pour réliser l opération de trie avec la méthode décrite ci-dessus. Quelle est la compléxité de cette opération? 4

4 Solutions def def def Exercice 1 : En n utilisant que les opérations de base : coincide (t, i, m): for j in range ( len (m )): if t[i + j]!= m[j]: return False # On a trouv é une diff é rence, pas # la peine de continuer la boucle. # Si on arrive ici, c' est que la boucle a termin é et qu' on # a compar é tous les caract è res. Les chaines coincident. return True Une autre solution en utilisant les tranches de tableaux Python : coincide (t, i, m): return t[i:i + len (m)] == m Exercice 2 : recherche_mot (m, t): for i in range (1 + len (t) - len (m )): if coincide (t, i, m): return i return None Exercice 3 : La fonction coincide fait len(m) itérations dans le pire cas. Elle est appelée 1 + len(t) - len(m) fois. La complexité est donc len(m) (1 + len(t) - len(m)) (pire cas). Exercice 4 : def occurrence ( liste, valeur ): if liste [i] == valeur : return i return None Exercice 5 def nb_ occurrences ( liste, valeur ): nb = 0 if liste [i] == valeur : nb = nb + 1 return nb Exercice 6 L3 = [] for i in range ( len (L1 )): L3. append (L1[i]) L3. append (L2[i]) Exercice 7 def fusion (L1, L2 ): L3 = [] i1 = 0 i2 = 0 while (i1 < len (L1 )) and (i2 < len (L2 )): if L1[i1] <= L2[i2 ]: L3. append (L1[i1 ]) i1 = i1 + 1 5

L3. append (L2[i2 ]) i2 = i2 + 1 # Arriv é ici, L1 ou L2 n' a plus d' élé ment disponible if i1 < len (L1 ): for i in range (i1, len (L1 )): L3. append (L1[i]) #i2 < len (L2) for i in range (i2, len (L2 )): L3. append (L2[i]) return L3 Dans cette version, on fait une boucle tant qu il reste des éléments dans les deux listes, puis on traite le cas particulier où l une est vide. Une autre solution est de boucler tant qu il reste des éléments dans l une des listes : def fusion (L1, L2 ): L3 = [] i1 = 0 i2 = 0 while i1 < len (L1) or i2 < len (L2 ): if i1 == len (L1 ): # Plus d' é l é ment dans L1, on pioche dans L2 pioche = L2 elif i2 == len ( L2 ): # Plus d' é l é ment dans L2, on pioche dans L1 pioche = L1 elif L1[i1] < L2[i2 ]: pioche = L1 pioche = L2 # On sait o ù piocher, on peut avancer : if pioche == L1: L3. append (L1[i1 ]) i1 = i1 + 1 L3. append (L2[i2 ]) i2 = i2 + 1 return L3 Exercice 8 Lpaire = [] Limpaire = [] for i in range ( len (L )): if L[i] % 2 == 0: Lpaire. append (L[i]) Limpaire. append (L[i]) Exercice 9 # methode 1 print ( liste [i ][0], "s' é crit : ", liste [i ][1]) # methode 2 for elm in liste : print ( elm [0], "s' é crit : ", elm [1]) Exercice 10 6

def minimum ( liste ): min = liste [0] if liste [i] < min : min = liste [i] return min Exercice 11 def trie (L): maliste = [] while len (L) > 0: min = minimum (L) L. remove ( min ) maliste. append ( min ) return maliste La complexité du calcul du minimum d une liste non triée de taille N est linéaire par rapport à N : O(N). La fonction trie réalise N calculs de minimums, et à chaque fois, la liste est diminuée d un élément : O(N) + O(N 1) + O(N 2) +... + O(N (N 1)) = O( N(N 1) 2 ) O(N 2 ) 7