Algorithmique - Programmation 1. Cours 10



Documents pareils
modules & compilation

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Recherche dans un tableau

ACTIVITÉ DE PROGRAMMATION

ALGORITHMIQUE ET PROGRAMMATION En C

Compilation (INF 564)

Cours de Programmation 2

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


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

UE Programmation Impérative Licence 2ème Année

Classes et Objets en Ocaml.

Programmation système I Les entrées/sorties

Cours d algorithmique pour la classe de 2nde

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

Examen Médian - 1 heure 30

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

Structure d un programme

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Projet de programmation (IK3) : TP n 1 Correction

Analyse de sécurité de logiciels système par typage statique

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

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

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Algorithmique et Programmation, IMA

Introduction au langage C

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

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

Flux de données Lecture/Ecriture Fichiers

Algorithmique et programmation : les bases (VBA) Corrigé

Programmation en Caml pour Débutants

IV- Comment fonctionne un ordinateur?

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Programmer en JAVA. par Tama

Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.

Chap III : Les tableaux

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

Rappels Entrées -Sorties

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

Cours 1 : La compilation

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

Cours 1 : Qu est-ce que la programmation?

Machines virtuelles Cours 1 : Introduction

1. Structure d'un programme FORTRAN 95

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours 14 Les fichiers

Architecture des ordinateurs

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Génie Logiciel avec Ada. 4 février 2013

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

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

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

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Présentation du langage et premières fonctions

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Java Licence Professionnelle CISII,

Initiation à la programmation en Python

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

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

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Table des matières. Introduction

Cours 6 : Tubes anonymes et nommés

Cours d Algorithmique et de Langage C v 3.0

Corrigé des TD 1 à 5

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

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

Rappels d architecture

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

Problèmes liés à la concurrence

CHAPITRE 9. Codes source. 9.1 Insertion brute

Cours Informatique Master STEP

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

UE C avancé cours 1: introduction et révisions

Organigramme / Algorigramme Dossier élève 1 SI

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

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

TP, première séquence d exercices.

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Cours 6 : Programmation répartie

Algorithmes et programmation en Pascal. Cours

Évaluation et implémentation des langages

Cours de Systèmes d Exploitation

Logiciel Libre Cours 2 Fondements: Programmation

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Notions fondamentales du langage C# Version 1.0

GESTION DES FICHIERS C/UNIX

Les structures de données. Rajae El Ouazzani

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

Classe Interne, Anonyme & Enumération

Programmation impérative

Programmation C. Apprendre à développer des programmes simples dans le langage C

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Découverte de Python

Java Licence Professionnelle CISII,

Les processus 2/54. Qu est-ce qu un processus? 3(6)/54. Se souvenir 1(1)/54. Le système de fichiers (exemple du disque dur)

Le prototype de la fonction main()

Transcription:

Algorithmique - Programmation 1 Cours 10 Université Henri Poincaré CESS Epinal Automne 2008 1/ 25

Plan Caml fonctionnel vs impératif Caml fonctionnel vs impératif Le type unit Données mutables Les structures de contrôle (boucles) Les entrées/sorties Interprétation vs compilation 2/ 25

Caml fonctionnel vs impératif Caml fonctionnel vs impératif Caml fonctionnel: Liens entre noms et valeurs # let a = 5;; Fonctions produisant de nouvelles valeurs à partir de valeurs d entrée (paramètres) # let b = (min a 4);; 3/ 25

Caml fonctionnel vs impératif Caml fonctionnel vs impératif Caml fonctionnel: Liens entre noms et valeurs # let a = 5;; Fonctions produisant de nouvelles valeurs à partir de valeurs d entrée (paramètres) # let b = (min a 4);; Remarques: On ne peut que définir de nouveaux liens via let, on ne peut pas modifier un lien existant Toute expression a une valeur typée # let c = min a (if (b<5) then 0 else 1);; 3/ 25

Caml fonctionnel vs impératif Caml fonctionnel vs impératif Caml impératif: Comment intéragir avec l environnement? (valeur de retour d un appel système?) Comment modifier des variables? (exemple: modification d une liste passée en paramètre d une fonction) 4/ 25

Plan Le type unit Caml fonctionnel vs impératif Le type unit Données mutables Les structures de contrôle (boucles) Les entrées/sorties Interprétation vs compilation Références bibliographiques Exercices 5/ 25

Le type unit Le type unit Type de donnée ayant une seule valeur: () # ();; - : unit = () Symbolise le type vide Type utilisé comme type de retour des opérations à effet de bord (tels que les appels systèmes): # print int 5;; 5- : unit = () # print string "hello world!\n";; hello world! - : unit = () 6/ 25

Le type unit (suite) Le type unit Pour enchaîner les expressions de type unit, on utilise le ; Exemple: # print_string "saisissez un nombre:" ; let i = read_int() in print_int i; print_newline() ;; saisissez un nombre:12 12 - : unit = () Il est possible de grouper une séquence d expressions entre les mots-clés begin et end Remarque: une séquence d expressions peut se terminer par une expression de type unit, cette dernière expression sera le type de la séquence 7/ 25

Plan Données mutables Caml fonctionnel vs impératif Le type unit Données mutables Les structures de contrôle (boucles) Les entrées/sorties Interprétation vs compilation Références bibliographiques Exercices 8/ 25

Données mutables Données mutables Lien nom-valeur modifiable (inutile de recréer un lien avec let) Notion de pointeur sur un emplacement mémoire On parle également de référence (adresse mémoire) Utilisation des références en Caml: création # let x = ref 5;; val x : int ref = {contents = 5} écriture # x := 6;; - : unit = () lecture #!x ;; - : int = 6 9/ 25

Données mutables Données mutables (suite) Remarque: les références sont typées Référence sur un entier référence sur une liste: # let x = ref [2.3 ; 3.6];; val x : float list ref = {contents = [2.3; 3.6]} # List.hd (!x);; - : float = 2.3 10/ 25

Plan Les structures de contrôle (boucles) Caml fonctionnel vs impératif Le type unit Données mutables Les structures de contrôle (boucles) Les entrées/sorties Interprétation vs compilation Références bibliographiques Exercices 11/ 25

Les structures de contrôle (boucles) Les structures de contrôle (boucles) Boucle pour (for): for compteur entier = debut to fin do sequence d actions (type unit) done for compteur entier = debut downto fin do sequence d actions (type unit) done Boucle tant que (while): while test vrai do sequence d actions (type unit) done 12/ 25

Les structures de contrôle (boucles) Les structures de contrôle (suite) Exemples d utilisation: # for i = 1 to 5 do print int i ; print string " "; done;; 1 2 3 4 5 - : unit = () 13/ 25

Les structures de contrôle (boucles) Les structures de contrôle (suite) Exemples d utilisation: # for i = 1 to 5 do print int i ; print string " "; done;; 1 2 3 4 5 - : unit = () # for i = 5 downto 1 do print int i ; print string " "; done;; 5 4 3 2 1 - : unit = () 13/ 25

Les structures de contrôle (boucles) Les structures de contrôle (suite) Exemples d utilisation: # for i = 1 to 5 do print int i ; print string " "; done;; 1 2 3 4 5 - : unit = () # for i = 5 downto 1 do print int i ; print string " "; done;; 5 4 3 2 1 - : unit = () # let r = ref 1 in while (!r < 6) do print int!r ; print string " "; r :=!r + 1; done;; 13/ 25

Plan Caml fonctionnel vs impératif Le type unit Données mutables Les structures de contrôle (boucles) Les entrées/sorties Interprétation vs compilation Références bibliographiques Exercices 14/ 25

Structure de données où les éléments sont indexés par un nombre entier (position dans le tableaux) 15/ 25

Structure de données où les éléments sont indexés par un nombre entier (position dans le tableaux) Création d un tableau: # Array.make 5 a ;; val t : char array = [ a ; a ; a ; a ; a ] # let u = [ t ; o ; t ; o ];; val u : char array = [ t ; o ; t ; o ] 15/ 25

Structure de données où les éléments sont indexés par un nombre entier (position dans le tableaux) Création d un tableau: # Array.make 5 a ;; val t : char array = [ a ; a ; a ; a ; a ] # let u = [ t ; o ; t ; o ];; val u : char array = [ t ; o ; t ; o ] Accès en lecture à un élément d un tableau: # u.(1);; - : char = o 15/ 25

Structure de données où les éléments sont indexés par un nombre entier (position dans le tableaux) Création d un tableau: # Array.make 5 a ;; val t : char array = [ a ; a ; a ; a ; a ] # let u = [ t ; o ; t ; o ];; val u : char array = [ t ; o ; t ; o ] Accès en lecture à un élément d un tableau: # u.(1);; - : char = o Accès en écriture à un élément d un tableau: # u.(1) <- a ;; - : unit = () # u;; - : char array = [ t ; a ; t ; o ] 15/ 25

(suite) Taille d un tableau: Array.length Concaténation de tableaux : Array.append Copie d un tableau: Array.copy Dans un tableau sont stockées des valeurs (types de base) ou des références (types complexes), exemple: 16/ 25

(suite) Taille d un tableau: Array.length Concaténation de tableaux : Array.append Copie d un tableau: Array.copy Dans un tableau sont stockées des valeurs (types de base) ou des références (types complexes), exemple: # let v = [ 0; 0 ];; val v : int array = [ 0; 0 ] 16/ 25

(suite) Taille d un tableau: Array.length Concaténation de tableaux : Array.append Copie d un tableau: Array.copy Dans un tableau sont stockées des valeurs (types de base) ou des références (types complexes), exemple: # let v = [ 0; 0 ];; val v : int array = [ 0; 0 ] # let w = [ v ; v ];; val w : int array array = [ [ 0; 0 ]; [ 0; 0 ] ] 16/ 25

(suite) Taille d un tableau: Array.length Concaténation de tableaux : Array.append Copie d un tableau: Array.copy Dans un tableau sont stockées des valeurs (types de base) ou des références (types complexes), exemple: # let v = [ 0; 0 ];; val v : int array = [ 0; 0 ] # let w = [ v ; v ];; val w : int array array = [ [ 0; 0 ]; [ 0; 0 ] ] # v.(0) <- 1;; - : unit = () 16/ 25

(suite) Taille d un tableau: Array.length Concaténation de tableaux : Array.append Copie d un tableau: Array.copy Dans un tableau sont stockées des valeurs (types de base) ou des références (types complexes), exemple: # let v = [ 0; 0 ];; val v : int array = [ 0; 0 ] # let w = [ v ; v ];; val w : int array array = [ [ 0; 0 ]; [ 0; 0 ] ] # v.(0) <- 1;; - : unit = () # w;; - : int array array = [ [ 1; 0 ]; [ 1; 0 ] ] 16/ 25

Plan Les entrées/sorties Caml fonctionnel vs impératif Le type unit Données mutables Les structures de contrôle (boucles) Les entrées/sorties Interprétation vs compilation Références bibliographiques Exercices 17/ 25

Les entrées/sorties Les entrées/sorties Interactions entre un programme et le système d exploitation de l ordinateur: affichages, saisies au clavier, écriture / lecture de fichiers, etc Procédures (fonctions de type unit) principales : # read int;; - : unit -> int = <fun> # print int ;; - : int -> unit = <fun> print newline ;; - : unit -> unit = <fun> 18/ 25

Les entrées/sorties Les entrées/sorties (suite) Ouverture / fermeture d un canal: # open in;; - : string -> in channel = <fun> # open out ;; - : string -> out channel = <fun> # close in ;; - : in channel -> unit = <fun> Lecture / écriture dans un canal: # input ;; - : in channel -> string -> int -> int -> int # output ;; - : out channel -> string -> int -> int -> unit # input line ;; - : in channel -> string = <fun> 19/ 25

Les entrées/sorties Les entrées/sorties: exemple # let monfichier = open_out "toto";; val monfichier : out_channel = <abstr> # output monfichier "let a = [ 1 ] ;;";; - : int -> int -> unit = <fun> # output monfichier "let a = [ 1 ] ;;" 0 17;; - : unit = () # close_out monfichier ;; - : unit = () # exit 1;; $ less toto.ml let a = [ 1 ] ; 20/ 25

Plan Interprétation vs compilation Caml fonctionnel vs impératif Le type unit Données mutables Les structures de contrôle (boucles) Les entrées/sorties Interprétation vs compilation Références bibliographiques Exercices 21/ 25

Interprétation vs compilation Interprétation vs compilation Interprétation d un programme Caml: exécution du code Caml par un programme spécifique (top-level) Compilation d un programme Caml: traduction du code Caml en code pour une machine virtuelle (bytecode) ou pour le processeur (assembleur) La compilation d un programme Caml écrit dans un fichier texte, produit un fichier exécutable par la machine Utilisation du compilateur Caml: $ ocamlc -o out.exe code.ml $./out.exe NB : cette compilation crée des fichiers.cmo et.cmi 22/ 25

Interprétation vs compilation Interprétation vs compilation (suite) Structure d un programme Caml: (* Definition de constantes globales *) let x =... ;; (* Definition de fonctions *) let f x =... ;; (* Definition de la fonction principale *) let main() =... ;; (* Point de depart du programme *) let _ =... ; main() ;... ; exit 0;; 23/ 25

Références bibliographiques Référence bibliographique Développement d applications avec Objective Caml Emmanuel CHAILLOUX - Pascal MANOURY - Bruno PAGANO Disponible en ligne: http://www.pps.jussieu.fr/livres/ora/da-ocaml/ 24/ 25

Exercices Exercices 1. Ecrire un programme Caml choisissant un nombre aléatoire entre 1 et 12, et demandant à l utilisateur un nombre. Si ce nombre est plus grand que le nombre choisi, le programme affiche trop, sinon pas assez jusqu à ce que l utilisateur trouve. 2. Ecrire un programme Caml qui recherche l élément minimum d un tableau. 25/ 25