Eléments de Programmation - Thème 6

Documents pareils
Licence Sciences et Technologies Examen janvier 2010

Initiation à la programmation en Python

Programme Compte bancaire (code)

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

Représentation d un entier en base b

Chapitre 1 : Évolution COURS

TP 1. Prise en main du langage Python

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

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

Cours d algorithmique pour la classe de 2nde

STAGE IREM 0- Premiers pas en Python

Algorithmique et programmation : les bases (VBA) Corrigé

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

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

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

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Introduction à MATLAB R

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Découverte de Python


Taux d évolution moyen.

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

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

1 Recherche en table par balayage

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

PROJET 1 : BASE DE DONNÉES REPARTIES

TP1 Méthodes de Monte Carlo et techniques de réduction de variance, application au pricing d options

Cours de Systèmes d Exploitation

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

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

Utilisation d objets : String et ArrayList

Algorithmique et Programmation, IMA

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)

Chapitre 10. Les interfaces Comparable et Comparator 1

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Les arbres binaires de recherche

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

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

Organigramme / Algorigramme Dossier élève 1 SI

Cours Informatique Master STEP

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>

Résolution de systèmes linéaires par des méthodes directes

Initiation à l algorithmique

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

Les structures de données. Rajae El Ouazzani

DM 1 : Montre Autoquartz ETA

Programmation avec Xcas ou Python

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

ACTIVITÉ DE PROGRAMMATION

Chapitre 6. Fonction réelle d une variable réelle

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

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Les structures. Chapitre 3

Présentation du langage et premières fonctions

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

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

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

Les algorithmes de base du graphisme

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

Programmer en JAVA. par Tama

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

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

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Quatrième partie IV. Test. Test 15 février / 71

Cours d Analyse. Fonctions de plusieurs variables

Projet de programmation (IK3) : TP n 1 Correction

Fonctions homographiques

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Examen Médian - 1 heure 30

Recherche dans un tableau

Bien lire l énoncé 2 fois avant de continuer - Méthodes et/ou Explications Réponses. Antécédents d un nombre par une fonction

Probabilités Loi binomiale Exercices corrigés

Informatique III: Programmation en C++

Problèmes liés à la concurrence

TP, première séquence d exercices.

chapitre 4 Nombres de Catalan

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

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.

INF 321 : mémento de la syntaxe de Java

Les nombres entiers. Durée suggérée: 3 semaines

Programmation avec des objets : Cours 7. Menu du jour

Programmation linéaire

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

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

INF 232: Langages et Automates. Travaux Dirigés. Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies

Corrigés des premiers exercices sur les classes

avec des nombres entiers

Notions fondamentales du langage C# Version 1.0

Corrigé des exercices sur les références

AWS avancé. Surveiller votre utilisation d EC2

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Chapitre 2 Devine mon nombre!

Glossaire des nombres

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Premiers Pas en Programmation Objet : les Classes et les Objets

Transcription:

Eléments de Programmation - Thème 6 Equipe enseignants 1i-001 UPMC Licence 1 2014/2015 Table des matières Exercice 1 : Listes de répétitions 1 Exercice 2 : Maximums d une liste 2 Exercice 3 : Moyenne et variance 3 Exercice 4 : Liste de diviseurs 6 Exercice 5 : Insertions dans une liste 7 Exercice 6 : Listes obtenues par multiplication ou division 8 Exercice 7 : Fonction mystère 9 Exercice 8 : Découpages 10 Exercice 9 : Entrelacement de deux listes 12 Exercice 10 : Conversions de chaînes en listes et vice-versa. 13 Exercice 1 : Listes de répétitions Dans cet exercice introductif, on s intéresse à la construction de listes par répétition d un élément ou d une liste d éléments. 1

Question 1 Donner une définition de la fonction repetition qui, étant donnés un élément x et un entier naturel k renvoie la liste contenant k occurrences de x. >>> repetition("thon", 4) ['thon', 'thon', 'thon', 'thon'] >>> repetition(3, 8) [3, 3, 3, 3, 3, 3, 3, 3] >>> repetition(5, 0) Question 2 Donner une définition de la fonction repetition_bloc qui, étant donnés une liste L et un entier naturel k renvoie la liste obtenue en concaténant k fois la liste L. >>> repetition_bloc(["chat", "thon", "loup"], 3) ['chat', 'thon', 'loup', 'chat', 'thon', 'loup', 'chat', 'thon', 'loup'] >>> repetition_bloc([1, 2, 3], 5) [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3] >>> repetition_bloc([1, 2, 3, 4, 5], 0) Exercice 2 : Maximums d une liste Cet exercice propose quelques problèmes de réduction associés à la notion de maximum. Question 1 Donner une définition de la fonction max_liste qui, étant donnée une liste non vide de nombres, renvoie le plus grand élément de cette liste. 2

>>> max_liste([3, 7, 9, 5.4, 8.9, 9, 8.999, 5]) 9 Question 2 Donner une définition de la fonction nb_occurrences qui, étant donnés une liste L et un élément x, renvoie le nombre d occurrences de x dans L. >>> nb_occurrences([3, 7, 9, 5.4, 8.9, 9, 8.999, 5], 9) 2 >>> nb_occurrences(["chat", "ours", "chat", "chat", "loup"], "chat") 3 >>> nb_occurrences(["chat", "ours", "chat", "chat", "loup"], "ou") 0 Question 3 Donner une définition de la fonction nb_max qui, étant donnée une liste non vide de nombres L, renvoie le nombre d occurrences du maximum de L dans L. >>> nb_max([3, 7, 9, 5.4, 8.9, 9, 8.999, 5]) 2 >>> nb_max([-2, -1, -5, -3, -1, -4, -1]) 3 Exercice 3 : Moyenne et variance Cet exercice propose des problèmes assez simples de réduction et de transformation, sur une thématique statistique. Question 1 Donner une définition de la fonction somme qui, étant donnée une liste de nombres, renvoie la somme des éléments de cette liste. 3

>>> somme([1, 2, 3, 4, 5]) 15 >>> somme([1, 2.5, 3.2, 4, 5]) 15.7 >>> somme([1, 2.5, 3.5, 4, 5]) 16.0 >>> somme() 0 Question 2 Donner une définition de la fonction moyenne qui, étant donnée une liste non vide de nombres, renvoie la moyenne des éléments de cette liste. >>> moyenne([1, 2, 3, 4, 5]) 3.0 >>> moyenne([1, 2.5, 3.5, 4, 5]) 3.2 >>> moyenne([5]) 5.0 Question 3 Donner une définition de la fonction carres qui, étant donnée une liste L de nombres, renvoie la liste des carrés des éléments de L. >>> carres([1, 2, 3, 4, 5]) [1, 4, 9, 16, 25] >>> carres([1, -2, -3, 4, 5]) [1, 4, 9, 16, 25] >>> carres() 4

>>> carres([10, 0.5, 2.0]) [100, 0.25, 4.0] # Jeu de tests assert carres([1, 2, 3, 4, 5]) == [1, 4, 9, 16, 25] assert carres([-5, -1, 2]) == [25, 1, 4] assert carres() == assert carres([10, 0.5]) == [100, 0.25] Question 4 La variance d une liste de nombres est égale à la différence entre la moyenne des carrés des éléments de la liste et le carré de la moyenne des éléments de la liste. Donner une définition de la fonction variance qui, étant donnée une liste non vide de nombres, renvoie la variance de la liste. >>> variance([10, 10, 10, 10]) 0.0 >>> variance([20, 0, 20, 0]) 100.0 Question 5 L écart-type d une liste de nombres est égal à la racine carrée de la variance de la liste. Donner une définition de la fonction ecart_type qui, étant donnée une liste non vide de nombres, renvoie l écart-type de la liste. >>> ecart_type([10, 10, 10, 10]) 0.0 >>> ecart_type([20, 0, 20, 0]) 10.0 >>> ecart_type([15, 15, 5, 5]) 5.0 >>> ecart_type([12, 11, 10, 12, 11]) 0.7483314773547993 5

Exercice 4 : Liste de diviseurs On construit dans cet exercice des listes d entiers vérifiant certains prédicats (divisibilité, parité, imparité). Question 1 Donner une définition de la fonction liste_diviseurs qui, étant donné un entier naturel non nul a, retourne la liste des entiers naturels qui sont diviseurs de a. >>> liste_diviseurs(18) [1, 2, 3, 6, 9, 18] Question 2 Donner une définition de la fonction liste_diviseurs_impairs qui, étant donné un entier naturel non nul a, retourne la liste des entiers naturels impairs qui sont diviseurs de a. >>> liste_diviseurs_impairs(24) [1, 3] >>> liste_diviseurs_impairs(8) [1] >>> liste_diviseurs_impairs(15) [1, 3, 5, 15] Question 3 Donner une définition de la fonction liste_diviseurs_pairs qui, étant donné un entier naturel non nul a, retourne la liste des entiers naturels pairs qui sont diviseurs de a. >>> liste_diviseurs_pairs(24) [2, 4, 6, 8, 12, 24] >>> liste_diviseurs_pairs(7) 6

>>> liste_diviseurs_pairs(8) [2, 4, 8] Exercice 5 : Insertions dans une liste Cet exercice permet de s entraîner aux découpages simples de listes. Question 1 Donner une définition de la fonction insertion qui, étant donnés une liste L, un entier naturel i et un élément x, renvoie la liste obtenue en insérant x dans la liste L juste avant la position i. Si i est supérieur ou égal à la longueur de L, cette fonction renvoie la liste obtenue en ajoutant x à la fin de la liste L. >>> insertion([1, 2, 3], 1, 4) [1, 4, 2, 3] >>> insertion([1, 2, 3], 0, 4) [4, 1, 2, 3] >>> insertion([1, 2, 3], 3, 4) [1, 2, 3, 4] >>> insertion([1, 2, 3], 7, 4) [1, 2, 3, 4] >>> insertion(, 0, 4) [4] Remarque : la définition ne doit pas utiliser de découpage de liste. Question 2 Proposer une nouvelle définition de la fonction insertion, cette fois-ci sans boucle mais en utilisant des découpages de listes ainsi que l opérateur de concaténation. 7

Question 3 Donner une définition de la fonction insertion_liste qui, étant donnés une liste L, un entier naturel i et une liste M de même type que L, renvoie la liste obtenue en insérant les éléments de M dans la liste L juste avant la position i. Si i est supérieur ou égal à la longueur de L, cette fonction renvoie la liste obtenue en concaténant L et M. >>> insertion_liste([1, 2, 3], 1, [4, 5]) [1, 4, 5, 2, 3] >>> insertion_liste([1, 2, 3], 5, [4, 5]) [1, 2, 3, 4, 5] >>> insertion_liste(, 0, [4, 5]) [4, 5] Remarque : on s interdira à nouveau l utilisation des découpages de listes. Question 4 Proposer une nouvelle définition de la fonction insertion_liste, cette fois-ci sans boucle mais en utilisant des découpages de listes ainsi que l opérateur de concaténation. Exercice 6 : Listes obtenues par multiplication ou division Dans cet exercice, on résout des problèmes de transformation et de filtrage, ainsi que de leur combinaison. Question 1 Donner une définition de la fonction liste_mult qui, étant donnés une liste L d entiers et un entier k, retourne la liste obtenue en multipliant par k tous les éléments de L. >>> list_mult([3, 5, 9, 4], 2) [6, 10, 18, 8] >>> list_mult(, 2) 8

Question 2 Donner une définition de la fonction liste_div qui, étant donnés une liste L d entiers et un entier k non nul, retourne la liste obtenue en divisant par k les éléments de L qui sont multiples de k et en supprimant les autres. >>> list_div([2, 7, 9, 24, 6], 2) [1, 12, 3] >>> list_div([2, 7, 9, 24, 6], 3) [3, 8, 2] >>> list_div([2, 7, 9, 24, 6], 5) >>> list_div([2, 7, 9, -24, 6], -3) [-3, 8, -2] >>> list_div(, 3) Exercice 7 : Fonction mystère Déterminer ce que fait une fonction, sans en connaître ni le nom, ni la spécification mais simplement en étudiant son implémentation. Parcours de listes par indices, avec sortie anticipée ou pas. Question 1 Soit la fonction «mystère» f ci-dessous : def f(l): """??? mystère!""" if (len(l) == 0) or (len(l) == 1): return True else: # i :? for i in range(len(l) - 1): if L[i] >= L[i + 1]: return False return True 9

Compléter cette définition en donnant la signature de la fonction ainsi que le type à déclarer pour la variable i. Question 2 Selon les principes vus en cours, effectuer une simulation de boucle correspondant à l évaluation de l application : f([3, 5, 7, 10]) Dans cette simulation on montrera aussi les valeurs prises par L[i] et L[i + 1]. Quelle est la valeur retournée par cette application? Mêmes questions pour : f([3, 15, 7, 10]) Question 3 En déduire une définition complète et plus lisible de cette fonction, en particulier : proposer un nom plus pertinent pour la fonction compléter la description de la fonction proposer un jeu de tests pour valider la fonction. Question 4 Écrire une autre définition de cette fonction, en utilisant une instruction while avec une sortie anticipée de boucle et non une sortie anticipée de fonction, sans sans utiliser return dans le corps de la boucle. Exercice 8 : Découpages Pour comprendre un mécanisme, il est utile de savoir le reconstruire. Nous appliquons ce principe dans cet exercice en reconstruisant les découpages de listes. Question 1 : découpages simples Donner une définition de la fonction decoupage_simple qui, étant donnés une liste L et deux entiers i et j retourne le découpage L[i:j] en faisant l hypothèse que les indices i et j sont positifs. 10

Remarque : on ne pourra bien sûr pas utiliser de découpages dans la définition puisque notre objectif consiste à les redéfinir. Le jeu de tests pour cette fonction correspond aux exemples du cours sur les découpages : # Jeu de tests # Comptine : list[str] Comptine = ['am', 'stram', 'gram', 'pic', 'pic', 'col', 'gram'] assert decoupage_simple(comptine, 1, 3) == Comptine[1:3] assert decoupage_simple(comptine, 3, 4) == Comptine[3:4] assert decoupage_simple(comptine, 3, 3) == Comptine[3:3] assert decoupage_simple(comptine, 5, 3) == Comptine[5:3] assert decoupage_simple(comptine, 0, 7) == Comptine[0:7] Question 2 : découpage avec pas Donner une définition de la fonction decoupage_pas telle que decoupage_pas(l, i, j, p) retourne le même résultat que L[i:j:p] en supposant i, j positifs et p strictement positif. Voici le jeu de tests associé : # Jeu de tests # Comptine : list[str] Comptine = ['am', 'stram', 'gram', 'pic', 'pic', 'col', 'gram'] assert decoupage_pas(comptine,1, 5, 2) == Comptine[1:5:2] assert decoupage_pas(comptine,2, 6, 1) == Comptine[2:6:1] Question 3 : pas inverse Donner une définition de la fonction decoupage_pas_inv telle que decoupage_pas_inv(l, i, j, p) retourne le même résultat que L[i:j:p] en supposant i, j positifs et p strictement négatif. Voici le jeu de tests associé : # Jeu de tests # Comptine : list[str] Comptine = ['am', 'stram', 'gram', 'pic', 'pic', 'col', 'gram'] assert decoupage_pas_inv(comptine, 5, 2, -2) == Comptine[5:2:-2] assert decoupage_pas_inv(comptine, 6, 0, -1) == Comptine[6:0:-1] assert decoupage_pas_inv(comptine, 6, 0, -3) == Comptine[6:0:-3] 11

Question 4 : découpage généralisé On souhaite maintenant redéfinir le découpage général decoupage tel quel découpage(l,i,j,p) retourne le même résultat que l expression L[i:j:p]. La seule contrainte imposée est que p est différent de 0. Il nous reste à traiter les indices négatifs, et pour cela nous utilisons la fonctionde normalisation suivante. def normalisation(k, l): """ int * int -> int Hypothèse : l >= 0 retourne la normalisation de l'indice k pour une liste de longueur l.""" if k < 0: # indice négatif if -k <= l: # dans l'intervalle [O;l] return l + k else: # en dehors de l'intervalle [0;l] return 0 else: # indice positif if k > l: # en dehors de l'intervalle [0;l] return l else: return k # déjà normalisé # jeu de tests assert normalisation(0, 6) == 0 # positif dans [0;6] assert normalisation(4, 6) == 4 # positif dans [0;6] assert normalisation(6, 6) == 6 # positif dans [0;6] assert normalisation(7, 6) == 6 # positif hors [0;6] assert normalisation(-0, 6) == 0 # négatif (cas limite) assert normalisation(-1, 6) == 5 # négatif dans [0;6] assert normalisation(-3, 6) == 3 # négatif dans [0;6] assert normalisation(-5, 6) == 1 # négatif dans [0;6] assert normalisation(-6, 6) == 0 # négatif dans [0;6] assert normalisation(-7, 6) == 0 # négatif hors [0;6] En utilisant cette fonction ainsi que les fonction decoupage_pas et decoupage_pas_inv, proposer une définition de la fonction decoupage pour le découpage généralisé. Remarque : on reprendra tous les exemples du cours pour valider la fonction. Exercice 9 : Entrelacement de deux listes Cet exercice propose de résoudre des problèmes d entrelacement, qui sortent donc du cadre des problèmes de réduction, transformation ou filtrage. 12

Question 1 Donner une définition de la fonction entrelacement qui, étant données deux listes L1 et L2 de même type et de même longueur, renvoie la liste obtenue en intercalant les éléments de L1 et ceux de L2 : le premier élément de L1 puis le premier élément de L2 puis le deuxième élément de L1 puis le deuxième élément de L2, etc. >>> entrelacement([1, 2, 3], [4, 5, 6]) [1, 4, 2, 5, 3, 6] Question 2 Donner une définition de la fonction entrelacement_general qui, étant données deux listes L1 et L2 de même type, renvoie la liste obtenue en intercalant les éléments de L1 et ceux de L2. Si l une des listes est plus longue que l autre, on ajoute les éléments restants en fin de la liste résultat. >>> entrelacement_general([1,2,3],[4,5,6]) [1, 4, 2, 5, 3, 6] >>> entrelacement_general([1,2,3],[4,5,6,7,8]) [1, 4, 2, 5, 3, 6, 7, 8] >>> entrelacement_general([1,2,3,4,5],[6,7,8]) [1, 6, 2, 7, 3, 8, 4, 5] Exercice 10 : Conversions de chaînes en listes et vice-versa. Dans cet exercice, nous nous intéressons aux conversions de chaînes de caractères vers des liste et vice-versa. Question 1 : Jonction Dans cette question nous proposons de convertir une liste de chaînes de caractères vers une chaînes de caractère. Le principe est simplement d effectuer une jonction (ou concaténation) des chaînes de la liste en les séparant avec un caractère séparateur. La spécification de la fonction est la suivante : 13

def jonction(l, c): """ list[str] * str -> str Hypothèse : len(c) = 1 retourne la chaîne composée de la jonction des chaîne de L séparées deux-à-deux par le caractère séparateur c.""" >>> jonction(['un', 'deux', 'trois', 'quatre'], '.') 'un.deux.trois.quatre' >>> jonction(['les', 'mots', 'de', 'cette', 'phrase'], ' ') 'les mots de cette phrase' >>> jonction(['un'], '+') 'un' >>> jonction(, '+') '' Donner une définition de la fonction jonction spécifiée ci-dessus. Question 2 : séparation Dans cette question, nous souhaitons convertir une chaîne de caractères en une liste de chaînes de caractères selon la spécification suivante : def separation(s, c): """ str * str -> list[str] Hypothèse : len(c) = 1 retourne la liste de chaînes composées des sous-chaînes de s séparées par le caractère séparateur c. Le séparateur c n'est pas présent dans la chaîne résultat.""" >>> separation('un.deux.trois.quatre', '.') ['un', 'deux', 'trois', 'quatre'] >>> separation('les mots de cette phrase', ' ') ['les', 'mots', 'de', 'cette', 'phrase'] 14

>>> separation('les mots de cette phrase', '.') ['les mots de cette phrase'] >>> separation('', '+') Donner une définition de la fonction separation spécifiée ci-dessus. 15