Les fonctions. a = 3; b = 4; c = 5; d = 12; u = Math.sqrt(a * a + b * b); v = Math.sqrt(c * c + d * d); Slide 1. Slide 2



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

Java Licence Professionnelle CISII,

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

Exercices sur les interfaces

Solutions du chapitre 4

Programmation par les Objets en Java

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

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

Programme Compte bancaire (code)

TP, première séquence d exercices.

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

Principes des langages de programmation INF 321. Eric Goubault

ACTIVITÉ DE PROGRAMMATION

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmer en JAVA. par Tama

Utilisation d objets : String et ArrayList

Tp 1 correction. Structures de données (IF2)

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

Auto-évaluation Programmation en Java

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Un ordonnanceur stupide

Corrigé des exercices sur les références

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

Programmation Objet Java Correction

Projet de programmation (IK3) : TP n 1 Correction

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

Objets et Programmation. origine des langages orientés-objet

STAGE IREM 0- Premiers pas en Python

Java DataBaseConnectivity

Chapitre 7 : Intégration sur un intervalle quelconque

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

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

Package Java.util Classe générique

Cours 1: Java et les objets

Une introduction à Java

Derrière toi Une machine virtuelle!

Premiers Pas en Programmation Objet : les Classes et les Objets


Programmation avec des objets : Cours 7. Menu du jour

Gestion distribuée (par sockets) de banque en Java

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

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

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

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

ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C

Programmation en Java IUT GEII (MC-II1) 1

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

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

Conception des systèmes répartis

Java 1.5 : principales nouveautés

TD/TP PAC - Programmation n 3

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Programmation Bas Niveau

INF 321 : mémento de la syntaxe de Java

Chapitre 10. Les interfaces Comparable et Comparator 1

Flux de données Lecture/Ecriture Fichiers

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

Environnements de développement (intégrés)

Cours d Algorithmique et de Langage C v 3.0

1. Langage de programmation Java

Introduction au langage C

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Corrigés des premiers exercices sur les classes

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Programmation Orientée Objet

Programmation. fonctionnelle, impérative, logique et orientée objet

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

LOG4430 : Architecture logicielle et conception avancée

Programmation Par Objets

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Cours de Systèmes d Exploitation

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Java Licence professionnelle CISII,

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Threads. Threads. USTL routier 1

TD/TP PAC - Programmation n 3

Synchro et Threads Java TM

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

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Chapitre VI- La validation de la composition.

Les bases de l informatique et de la programmation. École polytechnique

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

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

Java Licence Professionnelle CISII,

COMPARAISONDESLANGAGESC, C++, JAVA ET

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

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Initiation à l algorithmique

Problèmes liés à la concurrence

Cours 14 Les fichiers

La base de données XML exist. A. Belaïd

Programmation Objet I

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Cours 1 : La compilation

Transcription:

Slide 1 Les fonctions Slide 2 a = 3; b = 4; c = 5; d = 12; u = Math.sqrt(a * a + b * b); v = Math.sqrt(c * c + d * d);

static double hypothenuse return Math.sqrt(x * x + y * y);} (double x, double y){ Slide 3 a = 3; b = 4; c = 5; d = 12; u = hypothenuse(a,b); v = hypothenuse(c,d); Un autre exemple Slide 4 int x; x = 3; x = 0;

Un autre exemple static void reset () {x = 0;} Slide 5 int x; x = 3; reset(); Un autre exemple static int x; Slide 6 static void reset () {x = 0;} x = 3; reset();

Tout à l heure La valeur d une expression Slide 7 Θ(t,e,m) = v Ce qui se passe quand on exécute une instruction Σ(p,e,m) = m Trois nouveautés Slide 8 1. Outre une instruction, un environnement et une mémoire, on a besoin d un environnement global pour les définitions de fonctions et les variables globales Σ(p,e,m,G) = m Idem pour les expressions

2. Calculer la valeur d une expression peut désormais modifier la mémoire : f(4) Slide 9 static int f (int x) { n = n + 1; return 2 * x;} Θ(t,e,m,G) = (v,m ) Slide 10 3. Exécuter une instruction peut désormais produire une valeur : return 5 ; Σ(p,e,m,G) = (v,m )

L évaluation d une expression Slide 11 Θ(n,e,m,G) = (n,m), Θ(x,e,m,G) = (m(e(x)),m) Θ(t + u,e,m,g) = (v + w,m ) où (v,m ) = Θ(t,e,m,G) et (w,m ) = Θ(u,e,m,G), idem pour les autres opérations On vient de spécifier l ordre d évaluation Θ(f(t 1,...,t n),e,m,g)? Slide 12

Θ(f(t 1,...,t n),e,m,g)? x 1,..., x n arguments formels et p le corps de f (dans G) e environnement de variables globales de G Slide 13 Slide 14 Θ(f(t 1,...,t n),e,m,g)? x 1,..., x n arguments formels et p le corps de f (dans G) e environnement de variables globales de G (v 1,m 1) = Θ(t 1,e,m,G) (v 2,m 2) = Θ(t 2,e,m 1,G)... (v n,m n) = Θ(t n,e,m n 1,G)

Slide 15 Θ(f(t 1,...,t n),e,m,g)? x 1,..., x n arguments formels et p le corps de f (dans G) e environnement de variables globales de G (v 1,m 1) = Θ(t 1,e,m,G) (v 2,m 2) = Θ(t 2,e,m 1,G)... (v n,m n) = Θ(t n,e,m n 1,G) e = e + (x 1 = r 1) +... + (x n = r n) m = m n + (r 1 = v 1) +... + (r n = v n) Σ(p,e,m,G) Ordre, e L exécution des instructions déclaration, affectation, séquence, test, boucle : ras Slide 16 appel de fonction idem expressions si Θ(t,e,m,G) = (v,m ), alors Σ(return t ;,e,m,g) = (v,m )

Un exemple static double hypothenuse (double x, double y){ return Math.sqrt(x * x + y * y);} Slide 17 public static void main (String [] args) { a = 3; b = 4; u = hypothenuse(a,b); System.out.println(u);} Et si a, b, u locales à main? Les messages La notion d état «passe à l échelle» Une fonction n est pas juste un couper-coller d un bout de code Slide 18 La portée statique des variables est éclairée par la sémantique : c est un choix (d autres sont possible) La sémantique spécifie tout (e.g. l ordre d évaluation des arguments) et montre les autres choix possibles

Slide 19 Le passage par valeur et le passage par référence class Troisverres { static int a; static int b; Slide 20 public static void main (String [] args) { a = 4; b = 7; int c = a; a = b; b = c; System.out.println(a); System.out.println(b);}}

static int a; static int b; static void swap (int x, int y) { int z = x; x = y; y = z;} Slide 21 public static void main (String [] args) { a = 4; b = 7; swap(a,b); System.out.println(a); System.out.println(b);} Ce que l on fait Slide 22 ce que l on veut faire

Le problème Slide 23 Θ(x) = m(e(x)) Mais on veut avoir accès à la référence e(x) En C Trois nouvelles constructions : une expression &x Θ(&x) = e(x) Slide 24 une expression *t Θ(*t,e,m) = m(θ(t,e,m)) Une instruction *t = u Σ(*t = u, e, m) = m + (r = v) où r = Θ(t,e,m) et v = Θ(u,e,m)

Ainsi L appel swap(&a,&b) produit l environnement Slide 25 [a = r, b = r, x = r, y = r ] et la mémoire [r = 3, r = 7, r = r, r = r ] void swap(int* x, int* y) { int z; z = *x; *x = *y; *y = z;} Slide 26 int main () { a = 4; b = 7; swap(&a,&b); printf("%d\n",a); printf("%d\n",b); return 0;}

Exactement la même solution : *t s écrit!t En Caml Slide 27 *t = u s écrit t := u pas de & car Θ(x,e,m) est toujours égal à e(x) et non m(e(x)) (si bien qu on doit écrire!x et non x sauf quand on veut le référence) Et en Java? Les types enveloppés Slide 28 (à suivre)

Les messages Quand un programme a un comportement inattendu, la sémantique explique pourquoi Slide 29 C et Caml c est pareil (mais pas Java)... sur ce point On peut parler des langages de manière transversale On peut parler de références sans parler d adresse (d ailleurs sont-ce des adresses?) Slide 30 Les fonctions Θ et Σ sont-elle bien définies?

Θ(t + u,e,m,g) = (v + w,m ) où (v,m ) = Θ(t,e,m,G) Slide 31 et (w,m ) = Θ(u,e,m,G), t et u sont des expressions plus petites que t + u Définition par récurrence Avec les fonctions Σ(f(t 1,...,t n),e,m,g) Slide 32 utilise Σ(p,e,m,G) où p est le corps de f Bien formée?

Slide 33 Si appel des fonctions f, g,... dans le programme principal, pas d appel de fonctions dans le corps de f, g,... alors définition de Θ et Σ bien formée Si fonctions f 1, f 2, f 3,..., f n, Slide 34 uniquement appel de f 1,..., f i 1 dans le corps de f i alors définition de Θ et Σ bien formée Fortran Isolations successives de morceaux de programme

Le cas général L environnement global G est global Slide 35 Toutes les fonctions peuvent être appelées dans le corps de chaque fonction static int f (int x) {return f(x);} Θ(f(x),e,m,G) utilise Θ(f(x),e,m,G) Définition circulaire de Θ Slide 36 Appeler une fonction dans le corps de cette même fonction

Très utile Slide 37 static int fact(int x) { if (x == 0) return 1; return x * fact(x - 1);} Les déf. récursives ne sont pas des déf. par récurrence Slide 38 static int f (int n) { if (n <= 1) return 1; if (n % 2 == 0) return (1 + f(n / 2)); return 2 * f(n + 1);} Le calcul la valeur de f en 11 demande celui de sa valeur en 12 qui demande celui de sa valeur en 6 qui demande celui de sa valeur en 3 qui demande celui de sa valeur en 4 qui demande celui de sa valeur en 2 qui demande celui de sa valeur en 1

Les définitions récursives ne sont pas des définitions circulaires Sinon Slide 39 static int fact(int x) { return fact(x);} serait correcte Définitions récursives et programmes infinis Slide 40 static int fact(int x) { if (x == 0) return 1; return x * fact(x - 1);}

Définitions récursives et programmes infinis Slide 41 static int fact(int x) { if (x == 0) return 1; return x * fact1(x - 1);} Définitions récursives et programmes infinis Slide 42 static int fact1(int x) { if (x == 0) return 1; return x * fact1(x - 1);} static int fact(int x) { if (x == 0) return 1; return x * fact1(x - 1);}

Définitions récursives et programmes infinis static int fact2(int x) { if (x == 0) return 1; return x * fact2(x - 1);} Slide 43 static int fact1(int x) { if (x == 0) return 1; return x * fact2(x - 1);} static int fact(int x) { if (x == 0) return 1; return x * fact1(x - 1);} Un programme non récursif... mais infini Slide 44 Récursivité : notation finie pour une instruction infinie Comme la boucle while Potentialité de non terminaison

Approximations On remplace fact10 par giveup Slide 45 Tente de calculer la fact(n) avec 10 appels récursifs imbriqués au maximum Abandonne sinon Les approximations de la factorielle 0 1 2 3 4 5 1 Slide 46 1 1 1 1 2 1 1 2 6 1 1 2 6 24

static int f (int n) { if (n <= 1) return 1; if (n % 2 == 0) return (1 + f(n / 2)); return 2 * f(n + 1);} Slide 47 0 1 2 3 4 5 1 1 1 1 2 1 1 2 3 1 1 2 6 3 Les fonctions Θ k et Σ k Éviter de répliquer les fonctions un nombre infini de fois Θ k(t,e,m,g) : idem Θ si moins de k appels de fonctions imbriqués (et pas définie sinon) Slide 48 Même définition que Θ sauf cas appel de fonction Θ k(f(t 1,...,t n),e,m,g) utilise Σ k 1(p,e,m,G) si k > 0 et Θ 0/Σ 0(f(t 1,...,t n),e,m,g) n est pas définie récurrence sur k

Les fonctions Θ et Σ Slide 49 Θ(t,e,m,G) = lim k Θ k(t,e,m,g) Σ(t,e,m,G) = lim k Σ k(t,e,m,g) Fonctions récursives et définitions au point fixe Une alternative pour définir les fonctions Θ et Σ Slide 50 Voir la définition de la factorielle comme une équation f = x si (x == 0) alors 1 sinon x * f(x-1) f = Φ(f) Équation au point fixe

Toutes les fonctions ont un point fixe Dans l espace des fonctions partielles Exemples : f = x si (x == 0) alors 1 sinon x * f(x-1) Slide 51 f = x 1 + f(x) f = x f(x) La fonction la moins définie Même Θ / Σ (car point fixe = limite) Les messages La récursivité n est pas une licence Slide 52 C est la deuxième fois qu on utilise la notion de limite (et ce n est pas la dernière)