INF121: Algorithmique et Programmation Fonctionnelle

Save this PDF as:
 WORD  PNG  TXT  JPG

Dimension: px
Commencer à balayer dès la page:

Download "INF121: Algorithmique et Programmation Fonctionnelle"

Transcription

1 INF121: Algorithmique et Programmation Fonctionnelle Cours 4: Fonctions récursives Année

2 Les précédents épisodes de INF 121 Types de base : Type Opérations Constantes bool not, &&, true, false int +,-,*,/,mod,......,-1, 0, 1,... float +.,-.,*.,/. 0.4, 12.3, 16., 64. char lowercase, code,... a, u, A,... if... then... else... expression conditionnelle identificateurs (locaux et globaux) définition, utilisation et composition de fonctions types avancés : synonyme, énuméré, produit, somme filtrage et pattern-matching 1 / 19

3 Plan Retour sur les fonctions Fonctions récursives Terminaison

4 Définition de fonctions en OCaml Rappels let fct_name (p1:t1) (p2:t2)... (pn:tn) : t = expr Example let max2 (x: int) (y: int) : int = if x > y then x else y Une fonction OCaml des paramètres formels (optionnels) : x et y une valeur = l expression correspondant au corps de la fonction (qui permet de calculer le résultat) if x > y then x else y un type, qui dépend : du type des paramètres de la fonction du type du résultat un nom (optionnel) : max2 int int int 2 / 19

5 Appel de fonctions en OCaml Rappels Example (max2 5 9) (les parenthèses peuvent parfois être omises) (max2 (min2 3 8) 9) (max2 (5 4) (8 + 3)) Plus généralement : let fct_name (p1:t1) (p2:t2)... (pn:tn) : t = expr le type de fct_name est t1 t2... tn t appel de la fonction fct_name à n paramètres : (fct_name e1 e2... en) où : e1,...,en sont les paramètres effectifs chaque paramètre effectif ei a pour type ti Le type de (fct_name e1 e2... en) est t 3 / 19

6 Retour sur le type des fonctions en OCaml C est à cause de Curry (Haskell)! Fonction partielle Une fonction à n 1 paramètres let fct_name (p1:t1) (p2:t2)... (pn:tn) : t = expr peut être vue comme une fonction : à 1 seul paramètre dont le résultat est une fonction à n 1 paramètres : (fct_name e1) (e2... en) On parle de fonction partielle ou encore de curryfication Exemple : (max2 3) fonction à un paramètre (int int) (max2 3) x renvoie le maximun entre 3 et x Remarque : une fonction sans paramètre est une constante let f = 3 ;; f ;; (* vaut 3 *) 4 / 19

7 Fonctions: SPECIFICATION et IMPLEMENTATION Il est très important de distinguer 2 concepts/étapes lors de la définition d une fonctions (et d un programme en général) Spécification: Une description de ce qui est attendu à un certain niveau d abstraction doit être suffisamment précis proche d une description mathématique peut utiliser des exemples pertinents Un contrat Entrées Consiste en: Fonction 1 description 1 signature (son type) des exemples Sorties Implémentation: La description de comment le réaliser Entrées Fonction Sorties le code OCaml Définir une fonction : Spécification PUIS Implémentation 5 / 19

8 Plan Retour sur les fonctions Fonctions récursives Terminaison

9 A propos de récursivité Qu est-ce que la récursivité, qu est-ce qu une définition récursive? Example (Quelques objets récursifs) un+1 = F (un ) Images sous licence Creative Common Fonctions récursives I exécuter plusieurs fois une même fonction sur des données différentes pour produire un résultat : f (f (f (...f (x0 )...))) I généralisation des suites récurrentes I un élément de base de la programmation fonctionnelle... I et beaucoup (beaucoup) d autres applications en informatique! 6 / 19

10 Fonctions récursives en OCaml Un 1er exemple Example (Factorielle) { U0 = 1 U n = n U n 1, n 1 { 0! = 1 n! = n (n 1)!, n 1 Cette définition fournit un résultat pour tout entier 0 : elle est bien fondée contre-exemple : U 0 = 1 et U n = n U n+1, n 1 Il est important de vérifier qu une définition est bien fondée Example (Définir la fonction factorielle en OCaml) let rec fact (n:int):int = if n=0 then 1 else n fact(n 1) let rec fact (n:int):int = match n with 0 1 n n fact(n 1) 7 / 19

11 Définir une fonction récursive Spécification: description, signature, exemples, et équations de récurrence Implémentation: code de la fonction en OCaml let rec fct_name (p1:t1) (p2:t2)... (pn:tn):t = expr où expr peut contenir zéro, un ou plusieurs appels à fct_name. On distinguera différentes sous-expressions de expr : les cas de base : aucun appel à fct_name les cas récursifs : un ou plusieurs appel(s) à fct_name Les règles de typage sont les mêmes que pour le fonctions non récursives. Remarque t1,.., tn peuvent être des types quelconques Une fonction récursive ne peut pas être anonyme 8 / 19

12 Exemples de définitions de fonctions récursives Example (Somme des entiers de 0 à n) description + profil + exemples 0 i = 0 i=0 n i i=0 = n + n 1 i=0 i si n > 0 let rec sum (n : int) : int = match n with 0 0 n n + sum (n 1) Example (Division entière) description + profil + exemples a/b = { 0 si a < b 1 + (a b)/b si b a let rec div (a : int) (b: int) : int = if a < b then 0 else 1 + div (a b) (b) 9 / 19

13 Essayons... Exercice : reste de la division entière Définir une fonction qui calcule le reste de la division entière Exercice : suite de Fibonacci Implémenter une fonction qui renvoie le n ieme terme de Fibonacci où n est donné comme paramètre. La suite de Fibonnaci est défini comme : { 1 si n = 0 ou n = 1 fib n = fib n 1 + fib n 2 si n > 1 10 / 19

14 Appel et exécution d une fonction récursive Déplier le corps de la fonction ré-écriture Exemple : arbre des appels des fonctions factorielle et fibonacci fact(3) =3 2= = 2 fib(4)=3+2=5 fact(2) fib(3)=2+1=3 fib(2)=1+1=1 2 fact(1) 1 1 = 1 fib(2)=1+1=2 fib(1)=1 fib(1)=1 fib(0)=1 1 1 fib(1)=1 fib(0)=1 fact(0) = 1 : ré-écriture des appels générés et suspension des opérations en cours : évaluation (en ordre inverse) des opérations suspendues En OCaml: directive #trace DEMO: Tracer une fonction 11 / 19

15 Entrainement (suite) Exercice: la fonction puissance (2 versions) { x 0 = 1 x n = x x n 1 si 0 < n x 0 = 1 x n = (x x) n/2 si n est pair x n = x (x x) n 1 2 si n est impair Donnez 2 implémentations de la fonction power: int int int en vous basant sur ces 2 définitions équivalentes. Quelle est la différence entre ces deux versions? 12 / 19

16 Fonctions mutuellement récursives Sur un exemple Récursivité directe : appels récursifs à une seule fonction Qu en est-il d une fonction f qui appelle g qui appelle f qui appelle... fonctions mutuellement récursives (récursivité croisée) Example (Est-ce qu un nombre est pair ou impair?) Comment déterminer si un entier est pair ou impair sans utiliser /,, mod (donc en utilisant uniquement et =)? n N est impair si n 1 est pair n N est pair si n 1 est impair 0 est pair 0 n est pas impair let rec even (n:int):bool = if n=0 then true else odd (n 1) and odd (m:int):bool = if m=0 then false else even (m 1) DEMO: pair et impair, récursivité croisée 13 / 19

17 Fonctions mutuellement récursives Généralisation let rec fct1 [parametres+type resultat] = expr_1 and fct2 [parametres+ type resultat] = expr_2... and fctn [parametres+type resultat] = expr_n où expr_1, expr_2,..., expr_n peuvent appeler fct1, fct2,..., fctn 14 / 19

18 Plan Retour sur les fonctions Fonctions récursives Terminaison

19 Terminaison Pensez vous que l exécution de cette fonction termine (la fonction de McCarthy)? { n 10 si n > 100 mac(n) = mac(mac(n + 11)) si n 100 Et celles-ci? La fonction puissance { x 0 = 1 x n = x x n 1 si 0 < n La fonction factorielle fact(0) 1 fact(1) = 1 fact(n) = fact(n+1) n+1 Il est fondamental de savoir décider si une fonction termine ou non Peut-on caractériser la terminaison sur l arbre des appels? 15 / 19

20 Comment prouver qu une fonction récursive termine? En utilisant une mesure... Theorem Toute suite positive strictement décroissante converge Méthode générale pour prouver qu une fonction termine Dériver une mesure M(n) t.q. : M(n) est positive n dépend des paramètres de la fonction M(n) décroit strictement entre deux appels récursifs la suite M(n) converge vers une valeur m 0 associée à un cas de base Example (Terminaison de la fonction somme) let rec somme (x : int) : int = match x with 0 0 x x + sum (x 1) Mesure : Définissons M(n) = x, M(n) N M(n) > M(n 1) puisque x > x 1 M(n) converge et atteint la valeur / 19

21 Terminaison de quelques fonctions Exercice: trouver les mesures Prouvez que les fonctions factorielle, puissance, quotient, reste terminent / 19

22 Terminaison de quelques fonctions factorielle et puissance Terminaison de fact: let rec fact (n:int):int = match n with 0 1 n n fact(n 1) Terminaison de power: let rec power (a:float) (n:int):float = if (n=0) then 1. else (if n>0 then a. power a (n 1) else 1. /. (power a (n 1)) ) Définissons M(fact n) = n N M(fact n) > M(fact (n 1)) puisque n > n 1 M(fact n) converge vers 0. Définissons M(power a n) = n M(power a n) N (d après la spec) M(power a n) > M(power a (n 1)) M(power a n) converge vers / 19

23 Terminaison de quelques fonctions let rec quotient (a:int) (b:int):int = if (a<b) then 0 else 1 + quotient (a b) b let rec reste (a:int) (b:int):int = if (a<b) then a else reste (a b) b Terminaison de quotient et reste: Définissons M(X a b) = a M(X a b) N (d après la spec) M(X a b) > M(X (a b) b) puisque b > 0 M(X a b) converge vers une valeur a 0 telle que a 0 < b. où X {quotient, reste} 19 / 19

Identificateurs La notion d identificateur

Identificateurs La notion d identificateur Identificateurs La notion d identificateur Concept fondamental dans les langages de programmation = INF201/INF231: Algorithmique et Programmation Fonctionnelle Cours 1: Identificateurs, types de base et

Plus en détail

INF121: Algorithmique et Programmation Fonctionnelle

INF121: Algorithmique et Programmation Fonctionnelle INF121: Algorithmique et Programmation Fonctionnelle Cours 1: Identificateurs, types de base et fonctions Année 2013-2014 Identificateurs La notion d identificateur Un concept fondamental dans les langages

Plus en détail

Brefs rappels sur les listes. INF121: Algorithmique et Programmation Fonctionnelle

Brefs rappels sur les listes. INF121: Algorithmique et Programmation Fonctionnelle Brefs rappels sur les listes INF121: Algorithmique et Programmation Fonctionnelle Cours 8 : Listes (suite et fin) Une liste c est : une suite finie, ordonnée, de valeurs de même type pouvant contenir un

Plus en détail

CORRECTION INF121 : Contrôle continu (2h00) Mars Exercice 1 : Typage et valeur d une expression (15 points)

CORRECTION INF121 : Contrôle continu (2h00) Mars Exercice 1 : Typage et valeur d une expression (15 points) CORRECTION INF121 : Contrôle continu (2h00) Mars 2012 Documents autorisés : Uniquement une feuille A4 recto-verso de notes personnelles manuscrites. Notes : Vous répondrez aux exercices et au problème

Plus en détail

INF121: Algorithmique et Programmation Fonctionnelle

INF121: Algorithmique et Programmation Fonctionnelle INF121: Algorithmique et Programmation Fonctionnelle Cours 7 : Listes (suite et fin) Année 2013-2014 Brefs rappels sur les listes Une liste c est : une suite finie de valeurs de même type contenant un

Plus en détail

INF121: Algorithmique et Programmation Fonctionnelle

INF121: Algorithmique et Programmation Fonctionnelle INF121: Algorithmique et Programmation Fonctionnelle Cours 3: Compléments sur les Types Année 2013-2014 Rappel des épisodes précédents Types de base : Type Opérations Constantes bool not, &&, true, false

Plus en détail

Algorithmes et Programmation Impérative 2. Récursivité. 1.1 Généralités sur les algorithmes récursifs

Algorithmes et Programmation Impérative 2. Récursivité. 1.1 Généralités sur les algorithmes récursifs Univ. Lille - Licence Informatique 2ème année 203-204 Algorithmes et Programmation Impérative 2 Récursivité Exercices. Généralités sur les algorithmes récursifs Exercice 2- Que calcule fact? Voici quelques

Plus en détail

NFP119 : corrigé feuille d exercices 2

NFP119 : corrigé feuille d exercices 2 NFP119 : corrigé feuille d exercices 2 María-Virginia Aponte 10 octobre 2013 Exercice 1 1. Testez cette fonction en Ocaml pour les appels suivants : sommen(0), sommen(-1), sommen(1), sommen(3). L appel

Plus en détail

Algorithmique - Programmation 1. Cours 1

Algorithmique - Programmation 1. Cours 1 Algorithmique - Programmation 1 Cours 1 Université Henri Poincaré CESS Epinal Automne 2008 1/ 24 Plan Introduction Introduction A propos d AP1 Quelques concepts de base Premiers pas avec Caml Le branchement

Plus en détail

Algorithmique - Programmation 1. Cours 2

Algorithmique - Programmation 1. Cours 2 Algorithmique - Programmation 1 Cours 2 Université Henri Poincaré CESS Epinal Automne 2008 1/ 21 Plan Rappel: Caml en mode interactif Rappel: Caml en mode interactif Rappel: les types de base 2/ 21 Rappel:

Plus en détail

Chapitre 1. Introduction

Chapitre 1. Introduction Chapitre 1 Introduction En programmation : on definit des programmes En programmation fonctionnelle : programmes = fonctions Question 1 : qu est ce qu un programme fonctionnel? Calcule un résultat en fonction

Plus en détail

INF121: Algorithmique et Programmation Fonctionnelle

INF121: Algorithmique et Programmation Fonctionnelle INF121: Algorithmique et Programmation Fonctionnelle Cours 3: Compléments sur les Types Année 2015-2016 Rappel des épisodes précédents Types de base : Type Opérations Constantes bool not, &&, true, false

Plus en détail

Algorithmique - Programmation 1. Cours 3

Algorithmique - Programmation 1. Cours 3 Algorithmique - Programmation 1 Cours 3 Université Henri Poincaré CESS Epinal Automne 2008 1/ 25 Plan Typage de fonctions Typage de fonctions Le type caractère Le type chaîne de caractères Fonctions récursives

Plus en détail

EXAMEN. Durée : 2h, le seul document autorisé est une feuille A4 recto-verso manuscrite de notes personnelles

EXAMEN. Durée : 2h, le seul document autorisé est une feuille A4 recto-verso manuscrite de notes personnelles Nom : RICM3-2014/2015 Prénom : Algorithmique et Programmation Fonctionnelle EXAMEN Durée : 2h, le seul document autorisé est une feuille A4 recto-verso manuscrite de notes personnelles Cet énoncé comporte

Plus en détail

B) Outils d'analyse et composants du langage. deux points de vues complémentaires : outils d'analyse ; composants du langage

B) Outils d'analyse et composants du langage. deux points de vues complémentaires : outils d'analyse ; composants du langage 1 deux points de vues complémentaires : outils d'analyse ; composants du langage B.I) Briques de base ; les expressions bien typées B.II) Simplification de l'analyse ; nommer une expression B.III) Analyse

Plus en détail

INF121 : Rappel des épisodes précédents... INF121: Algorithmique et Programmation Fonctionnelle. Rappels sur récursivité et types récursifs

INF121 : Rappel des épisodes précédents... INF121: Algorithmique et Programmation Fonctionnelle. Rappels sur récursivité et types récursifs INF121 : Rappel des épisodes précédents... Programmation fonctionnelle en OCaml : INF121: Algorithmique et Programmation Fonctionnelle Cours 6 : Listes types de base : booléens, entiers, réels, caractères,

Plus en détail

Programmation fonctionnelle : correction feuille d exercices 1

Programmation fonctionnelle : correction feuille d exercices 1 Programmation fonctionnelle : correction feuille d exercices 1 María-Virginia Aponte 28 février 2011 Exercice 1 Expressions Chacune des phrases Ocaml dans cet exercice est une expression. Rappel : Cela

Plus en détail

Programmation fonctionnelle

Programmation fonctionnelle 1/21 Programmation fonctionnelle Notes de cours Cours 5 31 Octobre 2012 Sylvain Conchon sylvain.conchon@lri.fr 2/21 Le programme de cette semaine Le mode T9 des téléphones portables 3/21 Les notions abordées

Plus en détail

Préparation à l Agregegation épreuve de modelisation TP 1 programmation: introduction à OCaml

Préparation à l Agregegation épreuve de modelisation TP 1 programmation: introduction à OCaml Préparation à l Agregegation épreuve de modelisation TP 1 programmation: introduction à OCaml César Rodríguez 25 Septembre 2012 L objectif général de cet exercice est de familiariser l étudiant avec le

Plus en détail

Langage de Programmation 2 (LP2)

Langage de Programmation 2 (LP2) Langage de Programmation 2 (LP2) RICM3 Cours 2 : Preuve et récurrence structurelle Pascal Lafourcade Polytech 2010-2011 1 / 51 La dernière fois Programmation fonctionnelle Types et opérateurs de base (int,

Plus en détail

TP n o 4 : Réalisation d'un interpréteur du langage minicaml. 1 Déclaration de types. Expression Logique et Fonctionnelle...

TP n o 4 : Réalisation d'un interpréteur du langage minicaml. 1 Déclaration de types. Expression Logique et Fonctionnelle... Univ. Lille1 - Licence info 3ème année 2012-2013 Expression Logique et Fonctionnelle... Évidemment TP n o 4 : Réalisation d'un interpréteur du langage minicaml Objectifs du TP Déclarations de types. Types

Plus en détail

TD n 4. Rappel. Filtrage. 1/ Remplace une alternative : if expression = valeur then expression1 else expression2;;

TD n 4. Rappel. Filtrage. 1/ Remplace une alternative : if expression = valeur then expression1 else expression2;; TD n 4 Rappel Filtrage 1/ Remplace une alternative : if expression = valeur then expression1 else expression2;; match expression = valeur with true -> expression1 false -> expression2;; ici le filtre est

Plus en détail

Enregistrements IAP1. Catherine Dubois. Catherine Dubois () Enregistrements 1 / 15

Enregistrements IAP1. Catherine Dubois. Catherine Dubois () Enregistrements 1 / 15 Enregistrements IAP1 Catherine Dubois Catherine Dubois () Enregistrements 1 / 15 Un type enregistrement = un type produit plus souple que le type des n-uplets Rappel : un type produit permet de décrire

Plus en détail

Fonctions récursives

Fonctions récursives Fonctions récursives IAP1 Catherine Dubois Catherine Dubois () Fonctions récursives 1 / 42 1. Notion de récursivité et de récurrence Une définition récursive est une définition dans laquelle intervient

Plus en détail

Programmation en OCaml

Programmation en OCaml École Polytechnique INF549 Programmation en OCaml Jean-Christophe Filliâtre 8 septembre 2015 Jean-Christophe Filliâtre Programmation en OCaml INF549 1 / 89 Présentation du cours cours TD Jean-Christophe

Plus en détail

Comment calculer les puissances d un nombre? Christophe.Troestler@umh.ac.be http://www.umh.ac.be/math/an/

Comment calculer les puissances d un nombre? Christophe.Troestler@umh.ac.be http://www.umh.ac.be/math/an/ Comment calculer les puissances d un nombre? Christophe.Troestler@umh.ac.be http://www.umh.ac.be/math/an/ 1. Première idée x 0 = 1 x 1 = x x 2 = x x x 3 = x 2 x = x x x x 4 = x 3 x = x x x x Donc, pour

Plus en détail

LICENCE SCIENCES & TECHNOLOGIES 1 re année INF121 ALGORITHMIQUE ET PROGRAMMATION FONCTIONNELLE

LICENCE SCIENCES & TECHNOLOGIES 1 re année INF121 ALGORITHMIQUE ET PROGRAMMATION FONCTIONNELLE Université Joseph Fourier UFR IMA Département Licence Sciences et Technologie LICENCE SCIENCES & TECHNOLOGIES 1 re année INF121 ALGORITHMIQUE ET PROGRAMMATION FONCTIONNELLE Devoir maison 1 & 2 (à faire

Plus en détail

Algorithmique-Programmation : IAP1 - feuille d exercices numéro 1 : corrigé

Algorithmique-Programmation : IAP1 - feuille d exercices numéro 1 : corrigé Algorithmique-Programmation : IAP1 - feuille d exercices numéro 1 : corrigé Les exercices proposés sont volontairement nombreux, de manière à ce que chacun puisse y trouver son compte. Les prendre dans

Plus en détail

Initiation Caml 13 septembre 2006

Initiation Caml 13 septembre 2006 Initiation Caml 1 PREMIERS PAS Initiation Caml aurelien.pardon@ens-lyon.fr 13 septembre 2006 0 Top-level OCaml 0.1 Dans un terminal Dans un terminal (xterm ou quoi que ce soit), il suffit de lancer la

Plus en détail

NFP119 : corrigé de la feuille d exercices 3

NFP119 : corrigé de la feuille d exercices 3 NFP119 : corrigé de la feuille d exercices 3 María-Virginia Aponte 20 mars 2010 Exercice 1 Tapez ces phrases en TP et expliquez les réponses données par Ocaml. # [1;2;3];; - : int list = [1; 2; 3] # [];;

Plus en détail

Université de Strasbourg Algorithmique et Programmation 1. La récursivité

Université de Strasbourg Algorithmique et Programmation 1. La récursivité Université de Strasbourg Algorithmique et Programmation 1 La récursivité Feuille de TD Exercice 1 La fonction trace La commande #trace prend en argument une fonction est ajoute celle-ci à liste des fonctions

Plus en détail

Programmation en C++ C++ de base. Programme C++ Variables, objets, types Fonctions Namespace Tests Boucles Pointeurs, références

Programmation en C++ C++ de base. Programme C++ Variables, objets, types Fonctions Namespace Tests Boucles Pointeurs, références Programmation en C++ C++ de base Programme C++ Variables, objets, types Fonctions Namespace Tests Boucles Pointeurs, références 1 Programme C++ Le programme C++ le plus simple int main() { return 0;...

Plus en détail

Chapitre I. Définitions et notations. 1 Notations et rappels en OCaml. 1.1 Types et opérations de base

Chapitre I. Définitions et notations. 1 Notations et rappels en OCaml. 1.1 Types et opérations de base Chapitre I Définitions et notations Les solutions des exercices proposés dans ce livre sont écrites en OCaml. Sans rentrer dans une présentation exhaustive de ce langage qui n est pas le propos de cet

Plus en détail

CHAPITRE 6 : LES ALGORITHMES ARITHMETIQUES

CHAPITRE 6 : LES ALGORITHMES ARITHMETIQUES CHAPITRE 6 : LES ALGORITHMES ARITHMETIQUES L élève sera capable de manipuler des algorithmes permettant de résoudre des traitements de calcul : A. Le calcul du PGCD B. Le calcul du PPCM C. Les nombres

Plus en détail

Cours numéro 6 : Les types somme

Cours numéro 6 : Les types somme LI213 Types et Structures de données Licence d Informatique Université Paris 6 Introduction aux types somme On sait représenter toute sorte d agrégations de données. Mais toutes ces agrégations n utilisent,

Plus en détail

Récursivité et Récurrence

Récursivité et Récurrence Université Joseph Fourier UFR IMAG Département Licence Sciences et Technologie LICENCE SCIENCES & TECHNOLOGIES 1 re année INF121 ALGORITHMIQUE ET PROGRAMMATION FONCTIONNELLE Récursivité et Récurrence Fonctions

Plus en détail

Algorithmique et programmation - Séance 3 Récursivité Solutions

Algorithmique et programmation - Séance 3 Récursivité Solutions Ecole polytechnique de Bruxelles Année Académique 2011-2012 Algorithmique et programmation INFO-H-200 Algorithmique et programmation - Séance 3 Récursivité Solutions Exercice 2. Ecrire une fonction récursive

Plus en détail

Introduction au langage OCaml

Introduction au langage OCaml Introduction au langage OCaml IAP1 Catherine Dubois Catherine Dubois () Introduction au langage OCaml 1 / 58 OCaml : un langage de la famille ML un langage fonctionnel concepts essentiels : la définition

Plus en détail

e3a 2017 : option informatique

e3a 2017 : option informatique e3a 2017 : option informatique Exercice 1 On suppose défini le type arbre de la manière suivante : type arbre = Feuille of int Noeud of arbre * arbre ;; On dit qu un arbre est un peigne si tous les noeuds

Plus en détail

Nom: Prénom: Groupe: Université de Bordeaux, Département Licence Devoir surveillé du 07/03/2017. Algorithmique des tableaux

Nom: Prénom: Groupe: Université de Bordeaux, Département Licence Devoir surveillé du 07/03/2017. Algorithmique des tableaux Nom: Prénom: Groupe: Université de Bordeaux, Département Licence Devoir surveillé du 07/03/2017 4TPM205CC 9h00-10h30 Algorithmique des tableaux Le sujet comporte 6 pages. Aucun document n est autorisé.

Plus en détail

Preuve de terminaison et de correction d un algorithme.

Preuve de terminaison et de correction d un algorithme. Preuve de terminaison et de correction d un algorithme. I. Invariant de boucle. Nous prouvons tout d abord que l algorithme s arrête en montrant qu une condition d exécution de boucle init par ne plus

Plus en détail

Lambda-calcul. e ::= c x λx e e 1 e 2. (λx e 1 ) e 2 e 1 [e 2 /x] β-réduction. Inventé en 1941 par Alonzo Church

Lambda-calcul. e ::= c x λx e e 1 e 2. (λx e 1 ) e 2 e 1 [e 2 /x] β-réduction. Inventé en 1941 par Alonzo Church Lambda-calcul Inventé en 1941 par Alonzo Church La base de la théorie des langages de programmation Inspiration de Lisp, Scheme, ML, Haskell,... e ::= c x λx e e 1 e 2 Sémantique: (λx e 1 ) e 2 e 1 [e

Plus en détail

NFP119 : feuille d exercices 4

NFP119 : feuille d exercices 4 NFP119 : feuille d exercices 4 María-Virginia Aponte 26 mars 2010 Exercice 1 Fonctionnelles Expliquez les réponses données par Ocaml. # let double_du_succ(f,y) = 2*f(y+1);; val double_du_succ : (int ->

Plus en détail

Les sous-programmes. Chapitre 6. 6.1 Définition d un sous-programme. Déclaration algorithmique d un sous-programme

Les sous-programmes. Chapitre 6. 6.1 Définition d un sous-programme. Déclaration algorithmique d un sous-programme Chapitre 6 Les sous-programmes 6.1 Définition d un sous-programme Un sous-programme est un élément de programme nommé et éventuellement paramétré, que l on définit afin de pouvoir ensuite l appeler par

Plus en détail

x n = x x n 1 Exercice 3 Le but de cet exercice est de modéliser les suites définies par récurrence de la façon suivante :

x n = x x n 1 Exercice 3 Le but de cet exercice est de modéliser les suites définies par récurrence de la façon suivante : Ocaml - Exercices Exercice Définir en Ocaml les fonctions suivantes:. f : x sin x + cos x. g : x x 3x+ x x 5 3. Fonction h calculant la moyenne géométrique de deux float positifs ( xy) Exercice Ecrire

Plus en détail

Programmation Fonctionnelle Définitions (et construction) des fonctions

Programmation Fonctionnelle Définitions (et construction) des fonctions Programmation Fonctionnelle Définitions (et construction) des fonctions Luigi Santocanale LIF, Aix-Marseille Université Marseille, FRANCE 27 septembre 2016 Plan Conditionnels, conditions de garde, filtrage

Plus en détail

B) Outils d'analyse et composants du langage. deux points de vues complémentaires : outils d'analyse ; composants du langage

B) Outils d'analyse et composants du langage. deux points de vues complémentaires : outils d'analyse ; composants du langage 1 deux points de vues complémentaires : outils d'analyse ; composants du langage B.I) Briques de base ; les expressions bien typées B.II) Simplification de l'analyse ; nommer une expression B.III) Analyse

Plus en détail

Plan. Langage C Conversions de type Structure de contrôles :? :, switch, while et for printf

Plan. Langage C Conversions de type Structure de contrôles :? :, switch, while et for printf Plan X, Petite classe 25 Langage C Conversions de type Structure de contrôles :? :, switch, while et for printf Algorithmique Elements de complexité Complexité des tris élémentaires Récursivité QuickSort

Plus en détail

Pourquoi faire de l informatique?

Pourquoi faire de l informatique? Pourquoi faire de l informatique? Science : discipline scientifique à part entière champ d étude, méthode, principes, objets étudiés Technique : outil scientifique dans toutes les disciplines simulation,

Plus en détail

Les fonctions en Coq Yves Bertot

Les fonctions en Coq Yves Bertot Les fonctions en Coq Yves Bertot Les fonctions: outil principal en Coq I Les fonctions sont les unités de base de la programmation en Coq I Les fonctions décrivent les opérations à effectuer dans un langage

Plus en détail

L1-S2 MPI : Programmation Impérative

L1-S2 MPI : Programmation Impérative L1-S2 MPI : Programmation Impérative Correspondances Langage de Réalisation C++ Ce résumé constitue un aide-mémoire rédigé sous forme d exemples qui illustrent partiellement l utilisation des différentes

Plus en détail

Suites numériques. Christophe ROSSIGNOL. Année scolaire 2007/2008

Suites numériques. Christophe ROSSIGNOL. Année scolaire 2007/2008 Suites numériques Christophe ROSSIGNOL Année scolaire 007/008 Table des matières 1 Notion de suite numérique 1.1 Définition................................................. 1. Modes de génération d une

Plus en détail

Programmation fonctionnelle : feuille d exercices 3

Programmation fonctionnelle : feuille d exercices 3 Programmation fonctionnelle : feuille d exercices 3 María-Virginia Aponte 19 mars 2011 Exercice 1 Filtrage et premières listes Complétez le tableau suivant : Motif Valeur comparée Réussite Liaisons 3 1

Plus en détail

Eléments de Programmation - Thème 3

Eléments de Programmation - Thème 3 Eléments de Programmation - Thème 3 Equipe enseignants 1i-001 UPMC Licence 1 2014/2015 Table des matières Exercice 1 : Somme des impairs 1 Exercice 2 : Calcul du PPCM 2 Exercice 3 : Fonction mystère 4

Plus en détail

exercices divers Exercice 2.2.1 erreurs à la compilation Question 1 classifier les erreurs

exercices divers Exercice 2.2.1 erreurs à la compilation Question 1 classifier les erreurs exercices divers Exercice 2.2.1 erreurs à la compilation Question 1 classifier les erreurs Le programme suivant ne compile pas. Signalez les erreurs, et expliquez leur nature : de syntaxe, de typage, variable

Plus en détail

Agrégation de Mathématiques option Informatique TP1

Agrégation de Mathématiques option Informatique TP1 Agrégation de Mathématiques option Informatique TP1 Loïg Jezequel loig.jezequel@irisa.fr Mardi 13 Septembre 2011 Ce TP largement inspiré des premiers chapitres du livre Le Langage Caml de Pierre Weis et

Plus en détail

Algorithmique - Programmation 1. Cours 4

Algorithmique - Programmation 1. Cours 4 Algorithmique - Programmation 1 Cours 4 Université Henri Poincaré CESS Epinal Automne 2008 1/ 23 Plan Rappels : Types en Caml Rappels: Types en Caml Polymorphisme Le filtrage Le type produit cartésien

Plus en détail

LISTE D EXERCICES N 3 - CORRECTION. Ecrire une fonction récursive calcule la somme des termes d un vecteur d entiers.

LISTE D EXERCICES N 3 - CORRECTION. Ecrire une fonction récursive calcule la somme des termes d un vecteur d entiers. Lycée Thiers mpsi 123 LISTE D EXERCICES N 3 - CORRECTION EX. 1 Ecrire une fonction récursive qui calcule la somme des carrés des entiers de 1 à n. Si l on note S n = n k 2, en convenant que S 0 = 0, il

Plus en détail

RSA - bases mathématiques

RSA - bases mathématiques RSA - bases mathématiques Jang Schiltz Centre Universitaire de Luxembourg Séminaire de Mathématiques 162A, avenue de la Faïencerie L-1511 Luxembourg Luxembourg E-mail:schiltzj@cu.lu 1 Divisibilité Définition

Plus en détail

FSAB 1402: Informatique 2. Récursion sur les Entiers

FSAB 1402: Informatique 2. Récursion sur les Entiers FSAB 1402: Informatique 2 Récursion sur les Entiers Peter Van Roy Département d Ingénierie Informatique, UCL pvr@info.ucl.ac.be 2007 P. Van Roy. All rights reserved. 1 Ce qu on va voir aujourd hui Résumé

Plus en détail

Langages de programmation Sémantiques opérationnelles Interprètes Le langage pseudo-pascal.

Langages de programmation Sémantiques opérationnelles Interprètes Le langage pseudo-pascal. 2 2 2 t 2 2 t Langages de programmation Sémantiques opérationnelles Interprètes Le langage pseudo-pascal. Didier Rémy Octobre 2000 http://cristal.inria.fr/ remy/poly/compil/2/ http://w3.edu.polytechnique.fr/profs/informatique//didier.remy/compil/2/

Plus en détail

Preuves d algorithmes. Informatique pour tous

Preuves d algorithmes. Informatique pour tous Rappel de complexité Rappel : on s intéresse à l ordre de grandeur asymptotique de la complexité, en négligeant les constantes. Notations f (n) = O(g(n)) A > 0, f (n) Ag(n), pour n assez grand f (n) =

Plus en détail

1/21. Compléments de Caml: filtrage, types somme et produit, exceptions

1/21. Compléments de Caml: filtrage, types somme et produit, exceptions 1/21 Compléments de Caml: filtrage, types somme et produit, exceptions 2/21 Filtrage Filtrage Alternative aux if/then/else... En réalité beaucoup plus que ça! 2/21 Filtrage Filtrage Alternative aux if/then/else...

Plus en détail

Les tableaux (ou vecteurs) (1/3) Cours numéro 3: Programmation impérative LI213 Types et Structures de données. Les tableaux (3/3) Les tableaux (2/3)

Les tableaux (ou vecteurs) (1/3) Cours numéro 3: Programmation impérative LI213 Types et Structures de données. Les tableaux (3/3) Les tableaux (2/3) Les tableaux (ou vecteurs) (1/3) Le type tableau est une des réponses à la question : LI213 Types et Structures de données Licence d Informatique Université Paris 6 comment agréger un très grand nombre

Plus en détail

AP1. Catherine Dubois. Catherine Dubois () Types Sommes avec constructeurs 1/42

AP1. Catherine Dubois. Catherine Dubois () Types Sommes avec constructeurs 1/42 Types Sommes avec constructeurs AP1 Catherine Dubois Catherine Dubois () Types Sommes avec constructeurs 1/42 Les types de base et les constructeurs de types (list,, *) ne sont pas suffisants ou mal commodes

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION) durée 3 heures environ page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance

Plus en détail

Algorithmique et Programmation Fonctionnelle (APF)

Algorithmique et Programmation Fonctionnelle (APF) Algorithmique et Programmation Fonctionnelle (APF) RICM3 Cours 3 : filtrage avancé, preuves par récurrence structurelle Jean-François Monin, Benjamin Wack 2015-2016 1 / 38 Plan Un peu de théorie Sommes

Plus en détail

Chapitre 1. Programmation en Python 2ème année. 23 septembre 2014. E-mail mlahby@gmail.com

Chapitre 1. Programmation en Python 2ème année. 23 septembre 2014. E-mail mlahby@gmail.com Chapitre 1 La récursivité Programmation en Python 2ème année E-mail mlahby@gmailcom 23 septembre 2014 Programmation en Python 2ème année CPGE GSR 2014-2015 1/ 24 Plan 1 Rappel 2 Récurrence en mathématique

Plus en détail

Exercice I : fonctions sur les listes

Exercice I : fonctions sur les listes Université Pierre et Marie Curie DEUG MIAS première année Informatique-1 Année 2002-2003 Examen septembre 1 septembre 2003 2 heures Remarques : Aucun document ni machine électronique n est permis à l exception

Plus en détail

Exercice 1 : Typage et valeur d une expression (35 points = )

Exercice 1 : Typage et valeur d une expression (35 points = ) CORRIGÉ INF121 : CONTRÔLE FINAL (3h00) Mai 2012 DOCUMENTS AUTORISÉS : Uniquement une feuille A4 recto-verso de notes personnelles manuscrites. Notes : Vous répondrez aux exercices et au problème dans l

Plus en détail

Haskell (IR3) Listes

Haskell (IR3) Listes Haskell (IR) Listes Stéphane Vialette 14 décembre 2015 Question 1: Expressions de liste (a) Une liste s écrit entre crochets, avec les éléments de la liste séparés par des virgules. Rappelez ce que font

Plus en détail

Introduction à la programmation Module M02 : Exercices

Introduction à la programmation Module M02 : Exercices Introduction à la programmation Module M02 : Exercices IUT de Villetaneuse Licence Pro ASSUR Camille Coti camille.coti@iutv.univ-paris13.fr 1 Variables, tests, structures de contrôle Exercice 1.1 : Echange

Plus en détail

Programmation fonctionnelle

Programmation fonctionnelle Programmation fonctionnelle avancée Notes de cours Mise à niveau 1 9 septembre 2015 Sylvain Conchon sylvain.conchon@lri.fr /59 1 Structure du cours Le cours est à la fois : Une introduction à la programmation

Plus en détail

Approches Fonctionnelles de la Programmation

Approches Fonctionnelles de la Programmation 1/44 Approches s de la Évaluation et didier@lrde.epita.fr http://www.lrde.epita.fr/ didier 2/44 Table des matières 1 Lisp : Évaluation stricte Haskell : Évaluation lazy Mérites comparés 2 Structure de

Plus en détail

Cours Info - 9. Preuve d algorithme (initiation) D.Malka MPSI 2015-2016. D.Malka Cours Info - 9 MPSI 2015-2016 1 / 16

Cours Info - 9. Preuve d algorithme (initiation) D.Malka MPSI 2015-2016. D.Malka Cours Info - 9 MPSI 2015-2016 1 / 16 Cours Info - 9 Preuve d algorithme (initiation) D.Malka MPSI 2015-2016 D.Malka Cours Info - 9 MPSI 2015-2016 1 / 16 Sommaire Sommaire 1 Comment montrer qu un algorithme est correct? 2 Terminaison d un

Plus en détail

Chapitre 4. Quelques types de raisonnement

Chapitre 4. Quelques types de raisonnement Chapitre 4 Quelques types de raisonnement 1. Aide à la rédaction d un raisonnement 1.1. Analyse du problème La première chose est de distinguer les hypothèses (= propositions vraies) de la question (=proposition

Plus en détail

Sommes et exceptions

Sommes et exceptions Sommes et exceptions Types sommes exemples Types sommes, exemples définition type bst = Noeud of int * bst * bst Feuille let singleton = fun k -> Noeud(k,Feuille,Feuille) let arbre = Noeud(34, singleton

Plus en détail

Introduction à la Programmation 1

Introduction à la Programmation 1 Introduction à la Programmation 1 Séance 5 de cours/td Université Paris-Diderot Objectifs: Boucles while. Variables booléennes. 1 La boucle while Boucle non bornée [Cours] La boucle non bornée permet de

Plus en détail

Programmation Fonctionnelle Compréhension sur les listes

Programmation Fonctionnelle Compréhension sur les listes Programmation Fonctionnelle Compréhension sur les listes Luigi Santocanale LIF, Aix-Marseille Université Marseille, FRANCE 19 septembre 2016 Plan La compréhension La fonction zip Plan 3/23 La compréhension

Plus en détail

Mise à niveau en Java

Mise à niveau en Java Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Cours 1 (Stéphane Airiau) Java 1 Aujourd hui Eléments de base ou bien : (presque) tout ce dont vous avez besoin pour ré-écrire les

Plus en détail

Diviser pour Régner : Complexité et Tri Fusion

Diviser pour Régner : Complexité et Tri Fusion Diviser pour Régner : Complexité et Tri Fusion 1 Notion de Complexité Nous allons étudier la complexité des algorithmes étudiés. Il s agit, en général, d estimer le nombre d opérations «élémentaires» (dont

Plus en détail

Algorithmique et Analyse d Algorithmes

Algorithmique et Analyse d Algorithmes Algorithmique et Analyse d Algorithmes L3 Info Cours 3 : preuve d algorithmes Benjamin Wack 2017-2018 1 / 38 La dernière fois Écriture d algorithmes récursifs Coût d un algorithme récursif Complexité en

Plus en détail

Premiers exemples de traitements

Premiers exemples de traitements #include #include Premiers exemples de traitements void main() float b(0.0); float c(0.0); float delta(0.0); cin >> b >> c; delta = b*b - 4*c; if (delta < 0.0) cout

Plus en détail

Informatique Chapitre 4: Types et typages

Informatique Chapitre 4: Types et typages Informatique Chapitre 4: Types et typages Booléens et listes Jérôme DIDIER 8/10/2014 Objectifs du cours Compétences visées Savoir que les variables peuvent avoir plusieurs types et les connaitre ; Type

Plus en détail

2 PGCD, PPCM, petit théorème de Fermat

2 PGCD, PPCM, petit théorème de Fermat Université de Paris-Sud, année 2012/2013 Filière Math/Info-L2 Maths 209 Feuille d exercices de soutien 1 Congruences et arithmétique sur Z Exercice 1. a) Soit n un nombre entier. Combien de valeurs peut

Plus en détail

Trace call SommeRéc(T, 3)

Trace call SommeRéc(T, 3) ITI150 Section 8 Solutionnaire aux exercices Mémoire de programme Exercice 8-1 Algorithme pour Mémoire de travail Mémoire globale somme récursive Trace call SommeRéc(T, 3) DONNÉES: T (référence à un tableau

Plus en détail

Éléments de programmation C++

Éléments de programmation C++ Université du Québec École de technologie supérieure Département de génie de la production automatisée GPA789 Analyse et Conception orientées objet Éléments de programmation C++ Professeur: Tony Wong,

Plus en détail

Devoir d'informatique n o 3 (2

Devoir d'informatique n o 3 (2 Devoir d'informatique n o 3 (2 heures) Ce devoir est constitué de plusieurs petits exercices. L'ordre des exercices ne correspond à aucun critère de diculté ou de longueur : vous pouvez les traiter dans

Plus en détail

Introduction au langage

Introduction au langage Introduction au langage Un langage de programmation : de haut niveau interprété orienté objet si on le souhaite rapide à écrire et proche du pseudo-code simple tant qu on fait des choses simples Un programme

Plus en détail

Correction de l examen d Algèbre de base, SYM0400, du 11 Mai 2005

Correction de l examen d Algèbre de base, SYM0400, du 11 Mai 2005 Correction de l examen d Algèbre de base, SYM0400, du 11 Mai 2005 Table des matières 1 Exercice 1 2 1.1 Solution de la question 1, i)................... 2 1.2 Solution de la question 1, ii)...................

Plus en détail

Compilation et Langages

Compilation et Langages Rappels Université Paris-Sud Compilation et Langages On a terminé la phase d analyse (syntaxique) source syntaxe abstraite Sylvain Conchon Cours 3 / 4 février 2016 On considère maintenant la phase de synthèse

Plus en détail

1I001 Éléments de programmation 1

1I001 Éléments de programmation 1 1I001 Éléments de programmation 1 TME Solo Gr. 11.1 B Jeudi 13 novembre 2014 17h Numéro d étudiant : Durée : 45 minutes soumission comprise Aucun document autorisé hormis la carte de référence. Dans tout

Plus en détail

Algorithmique et Programmation Fonctionnelle (APF)

Algorithmique et Programmation Fonctionnelle (APF) Algorithmique et Programmation Fonctionnelle (APF) RICM3 Cours 1 : Introduction à OCaml Jean-François Monin, Benjamin Wack 2016-2017 1 / 31 Présentation du cours Qui? Où? Quand? Enseignants Cours : Jean-François

Plus en détail

Feuille d'exercices 1. Prise en main. Ecrire un programme qui ache la phrase Bonjour le monde! à l'écran.

Feuille d'exercices 1. Prise en main. Ecrire un programme qui ache la phrase Bonjour le monde! à l'écran. Master MIMSE - Spécialité 3-1ère Année J0MS7301 : Algorithmique et Programmation Objet Feuille d'exercices 1 Prise en main Exercice 0 : Ecrire un programme qui ache la phrase Bonjour le monde! à l'écran.

Plus en détail

Codage des nombres entiers relatifs

Codage des nombres entiers relatifs TP 2 : Vendredi 13 Septembre 2013 Codage des nombres entiers relatifs Continuons à coder notre monde Partie du programme : Représentation de l information Représentation binaire : Un ordinateur est une

Plus en détail

Cours 2 : La récursivité. Principe Utilisation Exemples

Cours 2 : La récursivité. Principe Utilisation Exemples Cours 2 : La récursivité Principe Utilisation Exemples Le principe de récursivité Tout objet est dit récursif s il se définit à partir de lui-même Ainsi, une fonction est dite récursive si elle comporte,

Plus en détail

Principes des langages de Programmation

Principes des langages de Programmation Principes des langages de Programmation Amphi 1-7 avril 2015 Benjamin Werner Bienvenue Poly : celui d Eric Goubault + compléments à venir Groupes de TDs : attention, les noms des responsables ne sont pas

Plus en détail

Programmation fonctionnelle

Programmation fonctionnelle Programmation fonctionnelle Notes de cours Le programme de cette semaine Construction d un mur de briques Cours 6 13 novembre 2013 Sylvain Conchon sylvain.conchon@lri.fr 1/28 2/28 1 2 Construction d un

Plus en détail

Mise à niveau en Java

Mise à niveau en Java Mise à niveau en Java Cours 0 Stéphane Airiau Université Paris-Dauphine Cours 0 (Stéphane Airiau) Java 1 Ces transparents Eléments de base ou bien : (presque) tout ce dont vous avez besoin pour ré-écrire

Plus en détail

LIFAP1 : ALGORITHMIQUE ET PROGRAMMATION RECURSIVE. Présentation de l UE Modalités de Contrôle des Connaissances

LIFAP1 : ALGORITHMIQUE ET PROGRAMMATION RECURSIVE. Présentation de l UE Modalités de Contrôle des Connaissances LIFAP1 : ALGORITHMIQUE ET PROGRAMMATION RECURSIVE Présentation de l UE Modalités de Contrôle des Connaissances PRÉSENTATION DE L UE LIFAP2 Responsable de l UE Marie Lefevre marie.lefevre@liris.cnrs.fr

Plus en détail