Programmation fonctionnelle. Fonctions sur les listes. Notes de cours. Cours Septembre Sylvain Conchon
|
|
- Gilles Bouchard
- il y a 5 ans
- Total affichages :
Transcription
1 Programmation fonctionnelle avancée Notes de cours Cours 3 Fonctions sur les listes 19 Septembre 2018 Sylvain Conchon sylvain.conchon@lri.fr 1/43 12/43 2 Définitions de fonctions sur les listes La définition des fonctions sur les listes prennent généralement la forme d une définition à deux cas : le cas où liste est vide le cas où elle ne l est pas Pour cette raison, il est plus agréable de réaliser cette analyse par cas avec du filtrage : let rec f l = [] ->... x::s ->... La fonction zeros La fonction zeros vérifie que tous les éléments d une liste d entiers sont des 0 (renvoie true si la liste est vide) let rec zeros l = [] -> true x::s -> x=0 && zeros s Cette fonction a pour type int list -> bool # zeros [0;0;0];; - : bool = true # zeros [0;1;0];; - : bool = false # zeros [];; - : bool = true 3/43 34/43 4
2 Recherche d un entier dans une liste La fonction recherche détermine si un entier n figure bien dans une liste l let rec recherche n l = [] -> false x::s -> x=n recherche n s Longueur d une liste La fonction longueur retourne la longueur d une liste let rec longueur l = [] -> 0 _::s -> 1 + (longueur s) Une version récursive terminale : Cette fonction a pour type int list -> bool # recherche 4 [3;2;4;1];; - : bool = true # recherche 4 [1;2];; - : bool = false let longueur l = let rec longrec acc l = [] -> acc _::s -> longrec (1+acc) s in longrec 0 l Cette fonction est prédéfinie en OCAML : List.length 5/43 56/43 6 Fonctions polymorphes (1/2) Quel est le type de la fonction longueur? longueur doit pouvoir s appliquer à des listes d entiers, comme par exemple Polymorphisme # longueur [4;3;6;1;10];; - : int = 5... alors elle doit avoir le type suivant val longueur : int list -> int Mais cette fonction doit aussi pouvoir être appliquée sur une liste dont les éléments sont d un autre type, comme par exemple : # longueur [[4.5;0.3;9.8];[];[3.2;1.8]];; - : int = 3... dans ce cas la fonction longueur devrait également avoir 7/43 78/43 8
3 Fonctions polymorphes (2/2) Les deux types précédents sont corrects La fonction longueur a une infinité de types Le type inféré par OCAML est le plus général : val longueur : a list -> int a (qui se lit apostrophe a, ou encore alpha ) est une variable de type Une variable de type veut dire n importe quel type Il faut donc lire le type de la fonction longueur comme suit : La fonction longueur prend en argument une liste dont les éléments sont de n importe quel type et retourne un entier Types sommes polymorphes Les type sommes peuvent aussi être polymorphes type a option = None Some of a # None ;; - : a option = None # let v = Some(3);; val v : int option = Some(3) Un autre type somme polymorphe bien connu. type a liste = Vide Cellule of a * a liste # Vide ;; - : a liste = Vide # let l = Cellule(3,Vide);; val l : int liste = Cellule(3,Vide) 9/43 910/43 10 Types sommes polymorphes Les types peuvent également contenir plusieurs variables de type type ( a, b) t = A of a * b B of int Fonctions génériques sur les listes # A(1.2, "r") ;; - : (float, string) t = A(1.2, "r") # A( a, 1) ;; - : (char, int) t = A( a, 1) 11/ /43 12
4 Concaténation de listes La fonction append construit une nouvelle la liste en réunissant deux listes bout à bout : let rec append l1 l2 = match l1 with [] -> l2 x::s -> x::(append s l2) Cette fonction a pour type a list -> a list -> a list # append [2;5;1] [10;6;8;15];; - : int list = [2;5;1;10;6;8;15] Cette fonction est prédéfinie en OCAML, il s agit de List.append L opérateur est un raccourci syntaxique pour cette fonction, on note l1@l2 la concaténation de l1 et l2 Concaténation rapide La fonction append n est pas récursive terminale Si l ordre des éléments n a pas d importance, on peut définir une concaténation récursive terminale qui inverse les éléments de la première liste let rec rev_append l1 l2 = match l1 with [] -> l2 x :: s -> rev_append s (x :: l2) val rev_append : a list -> a list -> a list = <fun> # rev_append [4;2;6] [1;10;9;5];; - : int list = [6; 2; 4; 1; 10; 9; 5] 13/ /43 14 Renverser une liste La fonction rev pour renverser une liste l s obtient facilement en concaténant la liste l avec la liste vide [], en utilisant rev append let rev l = rev_append l [] Tri de listes val rev : a list -> a list = <fun> # rev [4;2;6;1];; - : int list = [1; 6; 2; 4] 15/ /43 16
5 Tri pas Insertion : principe Cet algorithme de tri suit de manière naturelle la structure récursive des listes Soit l une liste à trier : 1. si l est vide alors elle est déjà triée 2. sinon, l est de la forme x::s et, on trie récursivement la suite s et on obtient une liste triée s on insert x au bon endroit dans s et on obtient une liste triée Insertion La fonction inserer permet d insérer un élément x dans une liste l Si la liste l est triée alors x est inséré au bon endroit On prend pour le moment <= comme relation d ordre let rec inserer x l = [] -> [x] y::s -> if x<=y then x::l else y::(inserer x s) val inserer: a -> a list -> a list # inserer 5 [3;7;10];; - : int list = [3; 5; 7; 10] 17/ /43 18 Trier une liste Tri Rapide : principe On utilise la fonction inserer pour réaliser un tri par insertion d une liste let rec trier l = [] -> [] x::s -> inserer x (trier s) val trier : a list -> a list = <fun> # trier [6; 1; 9; 4; 3];; - : int list = [1; 3; 4; 6; 9] Soit une liste l à trier : 1. si l est vide alors elle est triée 2. sinon, choisir un élément p de la liste (le premier par exemple) nommé le pivot 3. partager l en deux listes g et d contenant les autres éléments de l qui sont plus petits (resp. plus grands) que la valeur du pivot p 4. trier récursivement g et d, on obtient deux listes g et d triées 5. on renvoie la liste (qui est bien triée) 19/ /43 20
6 Partage d une liste La fonction suivante permet de partager une liste l en deux sous-listes g et d contenant les éléments de l plus petits (resp. plus grands) qu une valeur donnée p let rec partage p l = [] -> ([], []) x::s -> let (g, d) = partage p s in if x <= p then (x::g, d) else (g, x::d) val partage : a -> a list -> a list * a list = <fun> # partage 5 [1;9;7;3;2;4];; - : int list * int list = ([1; 3; 2; 4], [9; 7]) Tri rapide let rec tri_rapide l = [] -> [] p::s -> let (g, d) = partage p s in (tri_rapide g)@[p]@(tri_rapide d) val tri_rapide : a list -> a list = <fun> # tri_rapide [5; 1; 9; 7; 3; 2; 4];; - : int list = [1; 2; 3; 4; 5; 7; 9] 21/ /43 22 Schémas de définitions récursives Les fonctions suivantes ont toutes la même structure : Itérateurs sur les listes la fonction zeros la fonction recherche la fonction longueur la fonction append la fonction existe la fonction map etc. Laquelle? 23/ /43 24
7 Schéma récursif en commun Itération d ordre supérieur Ces fonctions ont toutes le schéma récursif suivant (on note l la liste en entrée et f la fonction définie récursivement) : 1. si l est la liste vide, la valeur retournée par f ne dépend pas de l : c est le cas de base de la récursion ; 2. sinon, l est de la forme x::s et la valeur retournée est calculée en effectuant une opération à partir de x et f s On peut capturer ce schéma à l aide d une fonction d ordre supérieur prenant en argument une fonction f (à deux arguments), une liste l et un élément de départ acc L argument acc représente la valeur retournée pour le cas de base de la récursion La fonction f est appliquée à chaque élément de la liste ainsi qu au résultat de l appel récursif 25/ /43 26 Exemple : la fonction somme Étape 1 : extraire l opération récursive On montre comment abstraire le schéma d une définition récursive à partir de la fonction somme suivante : let rec somme l = [] -> 0 x::s -> x + (somme s) let rec somme l = [] -> 0 x::s -> (fun a b -> a + b) x (somme s) 27/ /43 28
8 Étape 2 : abstraire l opération récursive Étape 4 : abstraire l accumulateur let rec somme fold f l = [] -> 0 x::s -> f x (somme fold f s) let somme l = somme fold (fun a b -> a + b) l let rec somme fold f l acc = [] -> acc x::s -> f x (somme fold f s acc) let somme l = somme fold (fun a b -> a + b) l 0 ou plus simplement let somme l = somme fold (+) l 0 29/ /43 30 Déroulons tout ça somme [1;2;3] somme fold (+) [1;2;3] 0 (+) 1 (somme fold (+) [2;3] 0) (+) 1 ((+) 2 (somme fold (+) [3] 0)) (+) 1 ((+) 2 ((+) 3 (somme fold (+) [] 0))) (+) 1 ((+) 2 ((+) 3 0)) (+) 1 ((+) 2 3) (+) L itérateur fold right La fonction somme fold n est pas spécifique au calcul de la somme d une liste d entiers. Son schéma récursif est capturé par la fonction suivante : fold right f [ ] acc = acc fold right f [ e 1 ; e 2 ;... ; e n ] acc = f e 1 (f e 2 ( (f e n acc) )) Cette fonction s appelle List.fold right dans la bibliothèque standard de OCaml : let rec fold_right f l acc = [] -> acc x::l -> f x (fold_right f l acc) Son type est ( a -> b -> b) -> a list -> b -> b Attention : cette fonction n est pas récursive terminale! 31/ /43 32
9 L itérateur récursif terminal fold left Pour les fonctions dont l ordre d application de l opération sur x et g s n est pas important, on peut utiliser le parcours suivant : fold left f acc [ ] = acc fold left f acc [ e 1 ; e 2 ;... ; e n ] = f ( (f (f acc e 1 ) e 2 ) ) e n Exemple 1 : somme d une liste d entiers (suite) On peut écrire la fonction somme avec List.fold left let somme l = fold_left (+) 0 l val somme : int list -> int Cette fonction s appelle List.fold left dans la bibliothèque standard de OCaml : let rec fold_left f acc l = [] -> acc x::s -> fold_left f (f acc x) s Son type est ( a -> b -> a) -> a -> b list -> a Cette fonction est récursive terminale! somme [1;2;3] = fold left (+) 0 [1;2;3] fold left (+) ((+) 0 1) [2;3] = fold left (+) 1 [2;3] fold left (+) ((+) 1 2) [3] = fold left (+) 3 [3] fold left (+) ((+) 3 3) [] = fold left (+) 6 [] 6 33/ /43 34 Exemple 2 : Longueur d une liste Évaluation de la fonction longueur Rappel : version sans itérateur let rec longueur l = [] -> 0 x::s -> 1 + (longueur s) val longueur : a list -> int Version avec itérateur : let longueur l = fold_left (fun acc x -> 1 + acc) 0 l longueur : a list -> int # longueur [3;2;1;4];; - : int = 4 Évaluation de longueur [3;2;1;4] On note plus1 la fonction (fun acc x -> 1 + acc) longueur [3;2;1;4] = fold left plus1 0 [3; 2; 1; 4] fold left plus1 (plus1 0 3) [2; 1; 4] = fold left plus1 1 [2; 1; 4] fold left plus1 (plus1 1 2) [1; 4] = fold left plus1 2 [1; 4] fold left plus1 (plus1 2 1) [1; 4] = fold left plus1 3 [4] fold left plus1 (plus1 3 4) [] = fold left plus1 4 [] = 4 35/ /43 36
10 Exemple 3 : concaténation de deux listes Rappel : version sans itérateur let rec append l1 l2 = match l1 with [] -> l2 x::s -> x::(append s l2) append : a list -> a list -> a list Version avec itérateur let append l1 l2 = fold_right (fun x acc -> x::acc) l1 l2 val append : a list -> a list -> a list = <fun> # append [1;2;3] [4;5;6];; - : int list = [1; 2; 3; 4; 5; 6] Autres fonctions let zeros = fold_left (fun acc x -> x=0 && acc) true val zeros : int list -> bool = <fun> let recherche n = fold_left (fun acc x -> x=n acc) false val recherche : a -> a list -> bool = <fun> let existe p = fold_left (fun acc x -> p x acc) false val existe : ( a -> bool) -> a list -> bool = <fun> 37/ /43 38 Exemple 4 : liste des sous-listes d une liste (1/2) Exemple 4 : liste des sous-listes d une liste (2/2) On souhaite écrire une fonction sous listes pour calculer la liste des sous-listes d une liste l On commence par écrire une fonction cons qui ajoute un élément à toutes les listes d une liste de listes : let rec cons_elt x l = [] -> [] r::s -> (x::r)::(cons_elt x s) cons_elt : a -> a list list -> a list list La fonction sous liste s écrit alors naturellement de la manière suivante : let rec sous_listes l = [] -> [[]] x::s -> let p = sous_listes s in (cons_elt x p)@p sous_listes : a list -> a list list # sous_listes [1;2;3];; - : int list list = [[1; 2; 3]; [1; 2]; [1; 3]; [1]; [2; 3]; [2]; [3]; []] 39/ /43 40
11 Exemple 5 : sous liste avec itérateurs On commence par définir l itérateur map de type ( a -> b) -> a list -> b list tel que map f [e 1 ;...; e n ] = [f e 1 ;...; f e n ] let rec map f l = [] -> [] x::s -> let v = f x in v :: (map f s) Itérateurs vs. fonctions récursives (1/2) Les versions sans itérateurs des fonctions zeros, recherche et existe sont plus efficaces que leurs versions avec itérateurs respectives let rec existe p l = [] -> false x::s -> p x (existe p s) On note p la fonction fun x -> x=0 Le fonction sous liste peut alors s écrire l opérateur de concaténation en OCaml) : let sous_listes = fold_left (fun p x -> (map (fun l->x::l) p)@p) [[]] existe p [3;0;2;1;4] p 3 existe p [0;2;1;4] = existe p [0;2;1;4] p 0 existe p [2;1;4] = true 41/ /43 42 Itérateurs vs. fonctions récursives (2/2) La version avec itérateur va jusqu au bout de la liste let f = fun acc x -> p x acc let existe p = fold_left f false existe p [3;0;2;1;4] = fold left f false [0;2;1;4] fold left f (p 3 false) [0;2;1;4] = fold left f false [0;2;1;4] fold left f (p 0 false) [2;1;4] = fold left f true [0;2;1;4] fold left f (p 2 true) [1;4] = fold left f true [1;4] fold left f (p 1 true) [4] = fold left f true [4] fold left f (p 4 true) [] = fold left f true [] 43/43 43
# 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>
94 Programmation en OCaml 5.4.8. Concaténation de deux listes Définissons maintenant la fonction concat qui met bout à bout deux listes. Ainsi, si l1 et l2 sont deux listes quelconques, concat l1 l2 constitue
Plus en détailClasses et Objets en Ocaml.
Classes et Objets en Ocaml. Didier Rémy 2001-2002 http://cristal.inria.fr/ remy/mot/2/ http://www.enseignement.polytechnique.fr/profs/informatique/didier.remy/mot/2/ Cours Exercices Slide 1 1. Objets 2.
Plus en détailRecherche dans un tableau
Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6
Plus en détailAlgorithmique et Programmation, IMA
Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions
Plus en détailMachines virtuelles fonctionnelles (suite) Compilation ML Java
Machines virtuelles fonctionnelles (suite) Compilation ML Java Cours de Compilation Avancée (MI190) Benjamin Canou Université Pierre et Maire Curie Année 2011/2012 Semaine 3 Machines virtuelles fonctionnelles
Plus en détaillength : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2
1 Univ. Lille1 - Licence info 3ème année 2013-2014 Expression Logique et Fonctionnelle... Évidemment Cours n o 1 : Introduction à la programmation fonctionnelle 1 Introduction La programmation fonctionnelle
Plus en détailIN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C
IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en
Plus en détailCours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples
Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation
Plus en détailTP3 : Manipulation et implantation de systèmes de fichiers 1
École Normale Supérieure Systèmes et réseaux Année 2012-2013 TP3 : Manipulation et implantation de systèmes de fichiers 1 1 Répertoire de travail courant Le but de l exercice est d écrire une commande
Plus en détailintroduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives
introduction Chapitre 5 Images récursives http ://univ-tln.fr/~papini/sources/flocon.htm Récursivité http://www.poulain.org/fractales/index.html Image qui se contient elle-même 1 Exemples mathématiques
Plus en détailmodules & compilation
Programmation fonctionnelle avec OCaml 3ème séance, 19 mars 2015 modules & compilation samuel.hornus@inria.fr http ://www.loria.fr/ shornus/ocaml/ Modules Un module regroupe un ensemble de définitions
Plus en détailCours de Programmation 2
Cours de Programmation 2 Programmation à moyenne et large échelle 1. Programmation modulaire 2. Programmation orientée objet 3. Programmation concurrente, distribuée 4. Programmation monadique 5. Les programmes
Plus en détailTP 1. Prise en main du langage Python
TP. Prise en main du langage Python Cette année nous travaillerons avec le langage Python version 3. ; nous utiliserons l environnement de développement IDLE. Étape 0. Dans votre espace personnel, créer
Plus en détailPrésentation du langage et premières fonctions
1 Présentation de l interface logicielle Si les langages de haut niveau sont nombreux, nous allons travaillé cette année avec le langage Python, un langage de programmation très en vue sur internet en
Plus en détailUtilisation d objets : String et ArrayList
Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons
Plus en détailLogiciel Libre Cours 3 Fondements: Génie Logiciel
Logiciel Libre Cours 3 Fondements: Génie Logiciel Stefano Zacchiroli zack@pps.univ-paris-diderot.fr Laboratoire PPS, Université Paris Diderot 2013 2014 URL http://upsilon.cc/zack/teaching/1314/freesoftware/
Plus en détail1/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)
1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d
Plus en détailCours 1 : La compilation
/38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà
Plus en détailSTAGE IREM 0- Premiers pas en Python
Université de Bordeaux 16-18 Février 2014/2015 STAGE IREM 0- Premiers pas en Python IREM de Bordeaux Affectation et expressions Le langage python permet tout d abord de faire des calculs. On peut évaluer
Plus en détail1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.
1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this
Plus en détailCours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr
. Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le
Plus en détailDécouverte de Python
Découverte de Python Python est un des langages informatiques au programme des concours à partir de la session 2015. Ce tutoriel vous permettra de vous mettre à peu près à niveau de ce qui a été fait en
Plus en détailINITIATION AU LANGAGE C SUR PIC DE MICROSHIP
COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par
Plus en détailINTRODUCTION A JAVA. Fichier en langage machine Exécutable
INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du
Plus en détailLes chaînes de caractères
Les chaînes de caractères Dans un programme informatique, les chaînes de caractères servent à stocker les informations non numériques comme par exemple une liste de nom de personne ou des adresses. Il
Plus en détailJava Licence Professionnelle CISII, 2009-10
Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation
Plus en détailPHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)
PHP et mysql php_mysql PHP et mysql Code: php_mysql Originaux url: http://tecfa.unige.ch/guides/tie/html/php-mysql/php-mysql.html url: http://tecfa.unige.ch/guides/tie/pdf/files/php-mysql.pdf Auteurs et
Plus en détailChapitre 10. Les interfaces Comparable et Comparator 1
Chapitre 10: Les interfaces Comparable et Comparator 1/5 Chapitre 10 Les interfaces Comparable et Comparator 1 1 Ce chapitre a été extrait du document "Objets, Algorithmes, Patterns" de [René Lalement],
Plus en détailLicence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter
Plus en détailPrénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004
Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)
Plus en détailInitiation à la programmation en Python
I-Conventions Initiation à la programmation en Python Nom : Prénom : Une commande Python sera écrite en caractère gras. Exemples : print 'Bonjour' max=input("nombre maximum autorisé :") Le résultat de
Plus en détailLes arbres binaires de recherche
Institut Galilée Année 2010-2011 Algorithmique et arbres L2 TD 6 Les arbres binaires de recherche Type en C des arbres binaires (également utilisé pour les ABR) : typedef struct noeud_s { struct noeud_s
Plus en détailStructure d un programme et Compilation Notions de classe et d objet Syntaxe
Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types
Plus en détailAlgorithmique et programmation : les bases (VBA) Corrigé
PAD INPT ALGORITHMIQUE ET PROGRAMMATION 1 Cours VBA, Semaine 1 mai juin 2006 Corrigé Résumé Ce document décrit l écriture dans le langage VBA des éléments vus en algorithmique. Table des matières 1 Pourquoi
Plus en détailRappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme
Rappel Ralf Treinen Université Paris Diderot UFR Informatique Laboratoire Preuves, Programmes et Systèmes treinen@pps.univ-paris-diderot.fr 6 mai 2015 Jusqu'à maintenant : un petit langage de programmation
Plus en détailLicence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...
Université Paris 7 Programmation Objet Licence Bio Informatique Année 2004-2005 TD n 1 - Correction Premiers pas Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... 1. Enregistrez
Plus en détailExpression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e
P r o b l é m a t i q u e OCL : O b j e c t C o n s t r a i n t L a n g u a g e Le langage de contraintes d UML Les différents diagrammes d UML permettent d exprimer certaines contraintes graphiquement
Plus en détailKL5121. Pour activer des sorties en fonction de la position d'un codeur
KL5121 Pour activer des sorties en fonction de la position d'un codeur VERSION : 1.0 / PH DATE : 07 Février 2006 Sommaire Ce manuel explique de manière pratique les étapes successives pour mettre en œuvre
Plus en détailMISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année
2003-2004 Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES Maude Manouvrier La reproduction de ce document par
Plus en détailInitiation à la Programmation en Logique avec SISCtus Prolog
Initiation à la Programmation en Logique avec SISCtus Prolog Identificateurs Ils sont représentés par une suite de caractères alphanumériques commençant par une lettre minuscule (les lettres accentuées
Plus en détailCours de C++ François Laroussinie. 2 novembre 2005. Dept. d Informatique, ENS de Cachan
Cours de C++ François Laroussinie Dept. d Informatique, ENS de Cachan 2 novembre 2005 Première partie I Introduction Introduction Introduction Algorithme et programmation Algorithme: méthode pour résoudre
Plus en détailConventions d écriture et outils de mise au point
Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette
Plus en détailBases de programmation. Cours 5. Structurer les données
Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et
Plus en détailProgramme Compte bancaire (code)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; Programme Compte bancaire (code) namespace compte_bancaire /// Classe Program public
Plus en détailUne introduction rapide à Coq
Une introduction rapide à Coq Yves Bertot Janvier 2009 1 Démarrer le système Pour utiliser Coq on dispose de trois commandes, une commande qui sert à compiler des fichiers (coqc), une commande qui fournit
Plus en détailTP, première séquence d exercices.
TP, première séquence d exercices. Benoît Valiron benoit.valiron@lipn.univ-paris13.fr 7 novembre 2010 Introduction Vous écrirez les réponses aux questions courtes sur une feuille à rendre à la fin de la
Plus en détailVérification de programmes et de preuves Première partie. décrire des algorithmes
Vérification de programmes et de preuves Première partie. décrire des algorithmes Yves Bertot September 2012 1 Motivating introduction A partir des années 1940, il a été compris que l on pouvait utiliser
Plus en détailEPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE
EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE QCM Remarque : - A une question correspond au moins 1 réponse juste - Cocher la ou les bonnes réponses Barème : - Une bonne réponse = +1 - Pas de réponse = 0
Plus en détail1 Recherche en table par balayage
1 Recherche en table par balayage 1.1 Problème de la recherche en table Une table désigne une liste ou un tableau d éléments. Le problème de la recherche en table est celui de la recherche d un élément
Plus en détailNotions fondamentales du langage C# Version 1.0
Notions fondamentales du langage C# Version 1.0 Z 2 [Notions fondamentales du langage Csharp] [Date : 25/03/09] Sommaire 1 Tout ce qu il faut savoir pour bien commencer... 3 1.1 Qu est ce qu un langage
Plus en détailChap III : Les tableaux
Chap III : Les tableaux Dans cette partie, on va étudier quelques structures de données de base tels que : Les tableaux (vecteur et matrice) Les chaînes de caractères LA STRUCTURE DE TABLEAU Introduction
Plus en détailUne dérivation du paradigme de réécriture de multiensembles pour l'architecture de processeur graphique GPU
Une dérivation du paradigme de réécriture de multiensembles pour l'architecture de processeur graphique GPU Gabriel Antoine Louis Paillard Ce travail a eu le soutien de la CAPES, agence brésilienne pour
Plus en détailLMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour
LMI 2 Programmation Orientée Objet POO - Cours 9 Said Jabbour jabbour@cril.univ-artois.fr www.cril.univ-artois.fr/~jabbour CRIL UMR CNRS 8188 Faculté des Sciences - Univ. Artois Février 2011 Les collections
Plus en détailCours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions
Cours d introduction à l informatique Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Qu est-ce qu un Une recette de cuisine algorithme? Protocole expérimental
Plus en détailProbabilité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
Probabilités. I - Rappel : trois exemples. Exemple 1 : Dans une classe de 25 élèves, il y a 16 filles. Tous les élèves sont blonds ou bruns. Parmi les filles, 6 sont blondes. Parmi les garçons, 3 sont
Plus en détailSuivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)
Modularité Extensions Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs) généricité modules de première classe : peuvent être
Plus en détailPROJET ALGORITHMIQUE ET PROGRAMMATION II
PROJET 1 ALGORITHMIQUE ET PROGRAMMATION II CONTENU DU RAPPORT A RENDRE : o Fiche signalétique du binôme o Listing des différents fichiers sources o CD sources o Il sera tenu compte de la présentation du
Plus en détailRésolution de systèmes linéaires par des méthodes directes
Résolution de systèmes linéaires par des méthodes directes J. Erhel Janvier 2014 1 Inverse d une matrice carrée et systèmes linéaires Ce paragraphe a pour objet les matrices carrées et les systèmes linéaires.
Plus en détailExercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT
Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT Ces exercices portent sur les items 2, 3 et 5 du programme d informatique des classes préparatoires,
Plus en détailProjet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte
Projet d informatique M1BI : Compression et décompression de texte Le but de ce projet est de coder un programme réalisant de la compression et décompression de texte. On se proposera de coder deux algorithmes
Plus en détailTD3: tableaux avancées, première classe et chaînes
TD3: tableaux avancées, première classe et chaînes de caractères 1 Lestableaux 1.1 Élémentsthéoriques Déclaration des tableaux Pour la déclaration des tableaux, deux notations sont possibles. La première
Plus en détailTP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface
Plus en détailI. Introduction aux fonctions : les fonctions standards
Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons
Plus en détailARBRES BINAIRES DE RECHERCHE
ARBRES BINAIRES DE RECHERCHE Table de symboles Recherche : opération fondamentale données : éléments avec clés Type abstrait d une table de symboles (symbol table) ou dictionnaire Objets : ensembles d
Plus en détailTravaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation
Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des
Plus en détailIntroduction à la programmation Travaux pratiques: séance d introduction INFO0201-1
Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1 B. Baert & F. Ludewig Bruno.Baert@ulg.ac.be - F.Ludewig@ulg.ac.be Qu est-ce que la programmation? Programmer Ecrire un
Plus en détailInfo0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java
Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique
Plus en détailExamen Médian - 1 heure 30
NF01 - Automne 2014 Examen Médian - 1 heure 30 Polycopié papier autorisé, autres documents interdits Calculatrices, téléphones, traducteurs et ordinateurs interdits! Utilisez trois copies séparées, une
Plus en détailIntroduction à JDBC. Accès aux bases de données en Java
Introduction à JDBC Accès aux bases de données en Java Eric Cariou Université de Pau et des Pays de l'adour Département Informatique Eric.Cariou@univ-pau.fr 1 Introduction JDBC : Java Data Base Connectivity
Plus en détailArchitecture des Systèmes d Information Architecture des Systèmes d Information
Plan... Tableaux et tris I3 - Algorithmique et programmation 1 Rappels Nicol Delestre 2 Tableaux à n dimensions 3 Initiation aux tris Tableaux - v2.0.1 1 / 27 Tableaux - v2.0.1 2 / 27 Rappels : tableau
Plus en détailCHAPITRE 9. Codes source. 9.1 Insertion brute
CHAPITRE 9 s source Dans ce chapitre, on va voir comment faire pour insérer du texte brut dans un document. On utilise notamment cela pour insérer des codes source, des sorties de programme, ou toute autre
Plus en détailPremiers Pas en Programmation Objet : les Classes et les Objets
Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.
Plus en détailAlgorithmique, Structures de données et langage C
UNIVERSITE PAUL SABATIER TOULOUSE III Algorithmique, Structures de données et langage C L3 IUP AISEM/ICM Janvier 2005 J.M. ENJALBERT Chapitre 1 Rappels et compléments de C 1.1 Structures Une structure
Plus en détailSolutions du chapitre 4
Solutions du chapitre 4 Structures de contrôle: première partie 4.9 Identifiez et corrigez les erreurs (il peut y en avoir plus d une par segment de code) de chacune des proposition suivantes: a) if (
Plus en détailModule Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS
Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS 1. Introduction Nous allons aborder la notion de surcouche procédurale au sein des SGBDS relationnels tels que Oracle (PLSQL)
Plus en détailAnne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2
Anne Tasso Java Le livre de premier langage 10 e édition Avec 109 exercices corrigés Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2 Table des matières Avant-propos Organisation de l ouvrage..............................
Plus en détailAlgorithmes récursifs
Licence 1 MASS - Algorithmique et Calcul Formel S. Verel, M.-E. Voge www.i3s.unice.fr/ verel 23 mars 2007 Objectifs de la séance 3 écrire des algorithmes récursifs avec un seul test rechercher un élément
Plus en détail1 Lecture de fichiers
Programmation 1 Cours n 6 GB3, 2 nd semestre 2014-2015 Cours de Python Gilles Bernot 1 Lecture de fichiers Un fichier est une suite de caractères mémorisés sur le disque dur de la machine dans un endroit
Plus en détailOCL - Object Constraint Language
OCL - Object Constraint Language Laëtitia Matignon laetitia.matignon@univ-lyon1.fr Département Informatique - Polytech Lyon Université Claude Bernard Lyon 1 2012-2013 Laëtitia Matignon SIMA - OCL - Object
Plus en détailLicence Sciences et Technologies Examen janvier 2010
Université de Provence Introduction à l Informatique Licence Sciences et Technologies Examen janvier 2010 Année 2009-10 Aucun document n est autorisé Les exercices peuvent être traités dans le désordre.
Plus en détailProgrammation en Caml pour Débutants
Programmation en Caml pour Débutants Arthur Charguéraud 6 Ju 2005 Ceci est une version léaire imprimable du cours, mais il est fortement conseillé d utiliser la version teractive, sur laquelle la plupart
Plus en détailQuelques algorithmes simples dont l analyse n est pas si simple
Quelques algorithmes simples dont l analyse n est pas si simple Michel Habib habib@liafa.jussieu.fr http://www.liafa.jussieu.fr/~habib Algorithmique Avancée M1 Bioinformatique, Octobre 2008 Plan Histoire
Plus en détailCours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java
Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page
Plus en détailCorrection Code nécessaire à la compilation : let bs ="\\" let nl = "\n" ;; let appliquer = List.map ;; (* affichage d'un noeud *)
Correction Code nécessaire à la compilation : let bs ="\\" let nl = "\n" let appliquer = List.map (* affichage d'un noeud *) let (noeud_vers_ch : int -> string) = function n -> "fib(" ^ (string_of_int
Plus en détailPackage Java.util Classe générique
Package Java.util Classe générique 1 Classe Vector La taille est dynamique: dès qu un tableau vectoriel est plein, sa taille est doublée, triplée, etc. automatiquement Les cases sont de type Object add(object
Plus en détailUtilitaires méconnus de StrataFrame
Utilitaires méconnus de StrataFrame Voici quelques classes d utilitaires, parmi ceux qui se trouvent dans le NameSpace MicroFour.StrataFrame.Tools. Cette liste n est pas exhaustive, et les regroupements
Plus en détailProgrammation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
Programmation VBA Pierre BONNET 21 La programmation VBA Historiquement, la programmation sous Excel avait comme fonction d'automatiser une succession d'actions faites dans la feuille à l'aide de la souris.
Plus en détailTravaux Dirigés n 1 : chaînes de caractères
UE LE315 Travaux Dirigés n 1 : chaînes de caractères Exercice 1 Ecrire une fonction int nombre_caract(char *chaîne) qui retourne la taille d une chaîne de caractères. Exercice 2 Ecrire la fonction void
Plus en détailQuelques Algorithmes simples
Quelques Algorithmes simples Irène Guessarian ig@liafa.jussieu.fr 10 janvier 2012 Je remercie Patrick Cegielski de son aide efficace pour la programmation Java ; la section sur le codage de Huffman a été
Plus en détailFlux de données Lecture/Ecriture Fichiers
Flux de données Lecture/Ecriture Fichiers 1 Un flux de données est un objet qui représente une suite d octets d un programme pour une certaine destination ou issus d une source pour un programme flux d
Plus en détailProgrammation C++ (débutant)/instructions for, while et do...while
Programmation C++ (débutant)/instructions for, while et do...while 1 Programmation C++ (débutant)/instructions for, while et do...while Le cours du chapitre 4 : le for, while et do...while La notion de
Plus en détailProgrammation en Java IUT GEII (MC-II1) 1
Programmation en Java IUT GEII (MC-II1) 1 Christophe BLANC - Paul CHECCHIN IUT Montluçon Université Blaise Pascal Novembre 2009 Christophe BLANC - Paul CHECCHIN Programmation en Java IUT GEII (MC-II1)
Plus en détailIntroduction au langage C
Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les
Plus en détailÉléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if
Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike
Plus en détail1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : http://www.lri.fr/ hivert
1 de 46 Algorithmique Trouver et Trier Florent Hivert Mél : Florent.Hivert@lri.fr Page personnelle : http://www.lri.fr/ hivert 2 de 46 Algorithmes et structures de données La plupart des bons algorithmes
Plus en détailSHERLOCK 7. Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5
SHERLOCK 7 Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5 Cette note montre comment intégrer un script Java dans une investigation Sherlock et les différents aspects de Java script. S T E M M E R I M A G I N
Plus en détailJava Licence Professionnelle 2009-2010. Cours 7 : Classes et méthodes abstraites
Java Licence Professionnelle 2009-2010 Cours 7 : Classes et méthodes abstraites 1 Java Classes et méthodes abstraites - Le mécanisme des classes abstraites permet de définir des comportements (méthodes)
Plus en détail2 Comment fonctionne un ordinateur, dans les grandes lignes
Programmation 1 Cours n 1 GB3, 2 nd semestre 2014-2015 Cours de Python Gilles Bernot Les notes de cours et les feuilles de TD sont disponibles (avec un peu de retard par rapport au déroulement du cours)
Plus en détailInitiation à l algorithmique
Informatique S1 Initiation à l algorithmique procédures et fonctions 2. Appel d une fonction Jacques TISSEAU Ecole Nationale d Ingénieurs de Brest Technopôle Brest-Iroise CS 73862-29238 Brest cedex 3 -
Plus en détail