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 :



Documents pareils
# 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>

Les structures de données. Rajae El Ouazzani

Les arbres binaires de recherche

Recherche dans un tableau

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

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

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

Arbres binaires de recherche

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

Classes et Objets en Ocaml.

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

ARBRES BINAIRES DE RECHERCHE

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Représentation d un entier en base b

INF601 : Algorithme et Structure de données

Plan du cours : Zippers. Des fonctions sur les listes avec position. Des fonctions sur les listes avec position

Quelques Algorithmes simples

DUT Techniques de commercialisation Mathématiques et statistiques appliquées

Licence Sciences et Technologies Examen janvier 2010

Correction Code nécessaire à la compilation : let bs ="\\" let nl = "\n" ;; let appliquer = List.map ;; (* affichage d'un noeud *)

Algorithmique et Programmation, IMA

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

chapitre 4 Nombres de Catalan

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

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

Cours 1 : La compilation

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

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

Algorithmique, Structures de données et langage C

TP 1. Prise en main du langage Python

Initiation à la Programmation en Logique avec SISCtus Prolog

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Présentation du langage et premières fonctions

Fondements de l informatique Logique, modèles, et calculs

1 Recherche en table par balayage

Cours de Programmation 2

Initiation à l algorithmique

STAGE IREM 0- Premiers pas en Python

Correction du Baccalauréat S Amérique du Nord mai 2007

Représentation géométrique d un nombre complexe

Utilisation d objets : String et ArrayList

Algorithmes récursifs

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

Reconstruction de bâtiments en 3D à partir de nuages de points LIDAR

Problème : Calcul d'échéanciers de prêt bancaire (15 pt)

Cours d Analyse. Fonctions de plusieurs variables

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Initiation à la programmation en Python

Pour l épreuve d algèbre, les calculatrices sont interdites.

Algorithmique et Programmation

Vérification de programmes et de preuves Première partie. décrire des algorithmes

Feuille TD n 1 Exercices d algorithmique éléments de correction

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

modules & compilation

Chapitre 5 : Flot maximal dans un graphe

Exercices - Fonctions de plusieurs variables : corrigé. Pour commencer

KL5121. Pour activer des sorties en fonction de la position d'un codeur

Introduction à MATLAB R

Continuité et dérivabilité d une fonction

La fonction exponentielle

aux différences est appelé équation aux différences d ordre n en forme normale.

Exercices - Nombres complexes : corrigé. Formes algébriques et trigonométriques, module et argument

Correction du baccalauréat S Liban juin 2007

Fonctions de deux variables. Mai 2011

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.

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

Dérivation : cours. Dérivation dans R

t 100. = 8 ; le pourcentage de réduction est : 8 % 1 t Le pourcentage d'évolution (appelé aussi taux d'évolution) est le nombre :

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

TP1 : Initiation à Java et Eclipse

Cours 7 : Utilisation de modules sous python

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

Rappels Entrées -Sorties

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Maple: premiers calculs et premières applications

1. Structure d'un programme FORTRAN 95

Informatique Théorique : Théorie des Langages, Analyse Lexicale, Analyse Syntaxique Jean-Pierre Jouannaud Professeur

MIS 102 Initiation à l Informatique

Le Langage De Description De Données(LDD)

TP, première séquence d exercices.

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

Découverte de Python

Une introduction rapide à Coq

Fibonacci et les paquerettes

Cours de Systèmes d Exploitation

Image d un intervalle par une fonction continue

Algorithmique et programmation : les bases (VBA) Corrigé

3 Approximation de solutions d équations

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

OCL - Object Constraint Language

Resolution limit in community detection

Quelques algorithmes simples dont l analyse n est pas si simple

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

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

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

Instructions pour mettre à jour un HFFv2 v1.x.yy v2.0.00

Rappels sur les suites - Algorithme

Transcription:

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 une fonction récursive puissance : float -> int -> float calculant x n en utilisant la relation de récurrence suivante : { } x 0 = x n = x x n Exercice 3 Le but de cet exercice est de modéliser les suites définies par récurrence de la façon suivante : { u0 = a u n = f(u n ) si n Ces suites dépendent donc d un terme initial a et d une fonction f permettant de calculer le terme u n connaissant le terme u n.. Ecrire une fonction u permettant de calculer u n. Quel est le type de la fonction u?. En utilisant la fonction u, définir la suite b n = n (on veut une suite à valeurs réelles). Pour répondre à cette question, on mettra bien en évidence quel est le premier terme et quelle est la fonction permettant de calculer le terme de rang n à partir du terme de rang n. Exercice Ecrire une fonction qui calcule la troisième projection d un triplet. Exercice 5 [Fonctions caractéristiques] Soit L une liste quelconque. La fonction caractéristique de L, notée f L, est définie par { true si x L f L (x) = false si x L Soit L une liste finie. Ecrire une fonction qui genère la fonction caractéristique de L. Exercice Ecrire les fonctions qui calculent. le n ième élément d une liste;. le nombre d occurrences d un élément dans une liste; 3. le nombre d éléments dans une liste qui vérifient un prédicat p;. la liste des nombres de à n dans cet ordre. Exercice 7 Ecrire une fonction partition qui partitionne une liste en deux selon que les éléments vérifient ou non un prédicat p. p sera donc un argument de la fonction, le résultat de cette fonction sera un couple de listes. Exercice 8 Ecrire une fonction récursive terminale, inverser, qui inverse une liste, c.à.d inverser [;;3;] retourne [; 3; ; ]

Exercice 9 Le but de cet exercice est de modéliser les suites u à valeur dans un ensemble E et définies par récurrence de la façon suivante: { u0 = a u n = f(u n ) si n > 0 où a E et f est une application de E vers E. On désire résoudre ce problème en effectuant une analyse menant à l écriture d une fonction récursive terminale. a f n {}}{ { }} { {}}{ Ecrire une fonction u : a ( a a) int a prenant les trois paramètres a, f, n et calculant le terme général u n, dans cette fonction on définira une fonction récursive terminale. Exercice 0. Ecrire une fonction supprime de type a -> a list -> a list qui supprime toutes les occurrences d un élément dans une liste. Par exemple (supprime [ ; ; 3 ; ; ; 0 ; ]) doit fournir la liste [ ; 3 ; ; 0].. Ecrire une fonction supprime rec ter, de même type que supprime, calculant les mêmes résultats et utilisant une fonction récursive terminale g. Exercice Le but de cet exercice est d introduire quelques notions de base concernant les arbres binaires qui sont une structure parmi les plus importantes et les plus spécifiques de l informatique. Ici on utilisera la structure d arbre pour effectuer un tri. Arbre binaire Un arbre binaire non vide est composé d une racine et de deux arbres binaires appelés sous-arbre droit et sous-arbre gauche. Par exemple un arbre binaire peut être représenté graphiquement comme suit : 3 5 0 9 Soit t cet arbre. La racine de t est, les sous-arbres gauche et droit de t sont respectivement les arbres t et t3 suivants: t, sous-arbre gauche : 3 5 On définit en Ocaml le type a arbin de la façon suivante : t3, sous-arbre droit : type a arbin = Bin of ( a arbin * a * a arbin) Vide ;; Ainsi, en Ocaml, les arbres t et t3 sont représentés respectivement par Bin(Bin(Vide, 5, Vide), 3, Vide) et par Bin(Bin(Vide, 0, Vide),, Bin(Vide, 9, Vide)). On peut obtenir t en laissant Ocaml évaluer let t = Bin (t,, t3) ;; val t : int arbin = Bin (Bin (Bin (Vide, 5, Vide), 3, Vide),, ~ Bin (Bin (Vide, 0, Vide),, Bin (Vide, 9, Vide))) Parcours infixé d un arbre binaire Le parcours infixé d un arbre binaire consiste à effectuer dans l ordre : le parcours infixé du sous-arbre gauche le parcours de la racine le parcours infixé du sous-arbre droit 0 9 Par exemple le parcours infixé de l arbre t donné en introduction produit la liste [5; 3; ; 0; ; 9] Question Ecrire une fonction infixe : int arbin -> int list qui produit la liste des éléments d un arbre binaire selon un parcours infixé. On pourra utiliser l opérateur @ qui effectue la concaténation des listes. (x @ y est la liste obtenue en concaténant (en mettant bout à bout) les listes x et y).

Arbres binaires ordonnés On dit qu un arbre binaire est ordonné si et seulement si, soit c est l arbre vide, soit les conditions suivantes sont vérifiées : les sous-arbres droit et gauche sont ordonnés la racine est supérieure ou égale à tous les éléments du sous-arbre gauche et strictement inférieure à tous les éléments du sous-arbre droit. Remarquons que le parcours infixé d un arbre binaire ordonné fournit une liste ordonné. Par exemple le parcours infixé de l arbre ordonné t suivant : produit la liste ordonnée [; ; ; ; ; 0; ]. L insertion d un élément dans un arbre binaire ordonné consiste à ajouter cet élément de façon à obtenir un arbre binaire ordonné. L élément ajouté devient une feuille de l arbre. Par exemple si l on veut insérer l élément à l arbre binaire ordonné précédent on obtient l arbre ordonné suivant : Question Ecrire une fonction insere : a -> a arbin -> a arbin. Cette fonction prend comme données un entier et un arbre binaire ordonné, et insère l entier dans l arbre binaire de telle façon que le résultat soit un arbre binaire ordonné. La méthode de tri proposée consiste à partir d une liste d entiers à construire un arbre binaire ordonné par des insertions successives des éléments de la liste, puis à parcourir l arbre suivant un parcours infixé. Question 3 Ecrire une fonction insere liste: a list -> a arbre. Cette fonction prend en argument une liste et produit un arbre binaire ordonné par des insertions successives de tous les éléments de la liste. Par exemple pour la liste [; 7; ; 9; ] on obtient l arbre suivant : 7 Question Ecrire une fonction tri : a list -> a list qui trie une liste donnée. Pour cela on utilisera les fonctions insere liste et infixe. 0 0 9 3

Solutions Exercice : Solution. let f = function x -> sin x +. cos x ;;. let g = function x -> (x *. x -. 3. *. x +..) /. (. *. x *. x -.. *. x -. 5. ) ;; 3. let h = function x -> function y -> sqrt (x *. y) ;; Exercice : Solution let rec puissance = function x -> function n -> match n with 0 ->. n -> x *. puissance x (n-) ;; Exercice 3 : Solution. let rec u = function a -> function f -> function n -> if n = 0 then a else f (u a f (n-)) ;;. Pour la suite b, on a a =. et f = (function x ->. *. x). let b = u. (function x ->. *. x) ;; b 0 ;; - : float = 0. Exercice : Solution let p3 (,,z) = z ;; Exercice 5 : Solution let rec f_car_de l = [] -> (function x -> false) t::q -> (function x -> x=t (f_car_de q) x) ;; val f_car_de : a list -> a -> bool = <fun> let l = [;3;5;] ;; let cf_l = f_car_de l ;; val cf_l : int -> bool = <fun> cf_l 3 ;; - : bool = true cf_l ;; - : bool = false Exercice : Solution. let rec nieme = function n -> function l -> match (n,l) with (_, []) -> failwith "liste trop courte (ou vide)" (, t :: _) -> t (n, _ :: l) -> nieme (n-) l ;;. let rec nb_occurrence = function e -> function l -> [] -> 0 x :: l -> if e = x then + nb_occurrence e l else nb_occurrence e l ;; 3. let rec nombre_element = function p -> function l -> [] -> 0 x :: l -> if p x then + nombre_element p l else nombre_element p l ;;

let rec gen_list = function n -> match n with 0 -> [] n -> gen_list (n-) @ [n] ;; Exercice 7 : Solution let rec partition = function p -> function l -> [] -> ([],[]) h::t -> let (u,v) = partition p t in if p h then (h::u,v) else (u,h::v) ;; val partition : ( a -> bool) -> a list -> a list * a list = <fun> partition (function x -> x mod = 0) [;;3;;5;;7;8;9;0] ;; - : int list * int list = ([; ; ; 8; 0], [; 3; 5; 7; 9]) Exercice 8 : Solution let inverser l = let rec g li lo = match li with t::q -> g q (t::lo) [] -> lo in g l [] ;; val inverser : a list -> a list = <fun> inverser [;;3;] ;; - : int list = [; 3; ; ] Exercice 9 : Solution let u = function a -> function f -> function n -> let rec g = function (i, r) -> if i=n then r else g(i+, f r) in g(0, a) ;; Exercice 0 : Solution. let rec supprime = function e -> function l -> [] -> [] x :: l -> if x = e then supprime e l else x :: (supprime e l) ;; supprime [ ; ; 3 ; ; ; 0 ; ] ;;. let supprime_rec_ter = function e -> function l -> let rec g = function (ld,lr) -> match (ld,lr) with ([], lr) -> lr (x :: ld, lr) -> if x=e then g (ld, lr) else g (ld, lr @ [x]) in g (l, []) ;; supprime_rec_ter [ ; ; 3 ; ; ; 0 ; ] ;; Exercice : Solution Question let rec infixe = function a -> match a with Vide -> [] Bin (sag,r,sad) -> (infixe sag) @ (r :: infixe sad) ;; val infixe : a arbin -> a list = <fun> Question 5

let rec insere = function e -> function a -> match a with Vide -> Bin (Vide,e,Vide) Bin (sag,r,sad) when e <= r -> Bin ((insere e sag),r,sad) Bin (sag,r,sad) -> Bin (sag,r,insere e sad) ;; val insere : a -> a arbin -> a arbin = <fun> Question 3 let rec insere_liste = function l -> [] -> Vide (x :: l) -> insere x (insere_liste l) ;; val insere_liste : a list -> a arbin = <fun> Question let tri = function l -> infixe (insere_liste l) ;; val tri : a list -> a list = <fun>