Principes des langages de Programmation

Documents pareils
INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Recherche dans un tableau

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

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

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

ACTIVITÉ DE PROGRAMMATION


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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

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

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

Algorithmique I. Algorithmique I p.1/??

Conventions d écriture et outils de mise au point

Introduction au langage C

Programmer en JAVA. par Tama

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

TP, première séquence d exercices.

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Java Licence Professionnelle CISII,

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

Programme Compte bancaire (code)

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

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

Corrigé des TD 1 à 5

Principes des langages de programmation INF 321. Eric Goubault

Cours d Algorithmique et de Langage C v 3.0

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Projet de programmation (IK3) : TP n 1 Correction

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

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

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

Algorithmique et Programmation, IMA

as Architecture des Systèmes d Information

Cours de Programmation 2

Java Licence Professionnelle CISII,

Utilisation d objets : String et ArrayList

Chapitre 10. Les interfaces Comparable et Comparator 1

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

Cours 1 : Qu est-ce que la programmation?

Cours 1: Java et les objets

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)

ALGORITHMIQUE ET PROGRAMMATION En C

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

INF 321 : mémento de la syntaxe de Java

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

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

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

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

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

Notions fondamentales du langage C# Version 1.0

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

Organigramme / Algorigramme Dossier élève 1 SI

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

Bases de programmation. Cours 5. Structurer les données

Programmation en Java IUT GEII (MC-II1) 1

Évaluation et implémentation des langages

Examen Médian - 1 heure 30

Solutions du chapitre 4

Théorie de la Programmation

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

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

Cours 1 : La compilation

Algorithmique et programmation : les bases (VBA) Corrigé

Classes et Objets en Ocaml.

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

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

Une introduction à Java

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

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Introduction à l algorithmique et à la programmation M1102 CM n 3

Probabilité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

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

Introduction à la Programmation Parallèle: MPI

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

TP1 : Initiation à Java et Eclipse

Présentation du langage et premières fonctions

Le prototype de la fonction main()

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

Gestion mémoire et Représentation intermédiaire

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Compilation (INF 564)

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

1. Structure d'un programme FORTRAN 95

Programmation Web. Madalina Croitoru IUT Montpellier

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Remote Method Invocation Les classes implémentant Serializable

Les processus légers : threads. Système L3, /31

Structurer ses données : les tableaux. Introduction à la programmation

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

Généralités sur le Langage Java et éléments syntaxiques.

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

Langage Java. Classe de première SI

Rappels Entrées -Sorties

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

Transcription:

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 à jour sur ENEX (mea culpa) 10 séances : amphi + TD. Légèrement découplés Amphis : pb aujourd hui. Normalement Point K ou Faure Vote électronique : amenez les zappettes Composition écrite : le 29 juin Délégués! 2 ou 3 pour le cours. 2 par groupe de TD

Objectifs Apprendre à programmer en Java - Apprendre les idiotismes de Java - Découvrir la programmation orienté-objet Comprendre les principes (comparaison avec Caml et C) Commencer à découvrir les outils permettant de décrire la signification des programmes Apprendre des algorithmes (utilisant les listes, les arbres )

Les langages de programmation Permettent de programmer (interaction avec le programmeur) Permettent l exécution des programmes (avec la machine) Permettent de raisonner sur les programmes (aspect mathématique)

L ordinateur La mémoire (RAM) n0 n1 n2 n3 nk ni : nombre composé de 32, 64, 16 ou 8 bits (suivant le processeur) Le processeur (CPU)

Compilateurs, interpréteurs Compilateur : traduit le programme (source) en code exécutable (machine) Interpréteur : garde le code source en mémoire, l exécute pas-àpas Compilateur bytecode : traduit le code en code facile à interpréter

Le noyau impératif x := e {T x; p} p; p if e then p else p while e do p affectation déclaration séquence test boucle

Affectation x = 4; y = y + 3 * x; toto = true; variable : nom composé de un ou plusieurs caractères, commençant par une lettre expression : formée à partir des variables et des opérateurs (+, -, *, &&,, ) En Caml : x := 4; y :=!y + 3 *!x; En C : comme en Java

La déclaration { int x = 4; int y; y = x + 5; } { int x = 4; {int y; y = x + 5; } } On réserve une nouvelle case mémoire La variable est visible dans sa portée lexicale fin de la portée A la fin de l instruction, cette case mémoire peut être ré-utilisée : sa valeur est oubliée.

Options de la déclaration int x; float y = 3.14 ; boolean b = true; final float racine2 = 1.4142135 ; racine2 = 1.5; interdit! Le type : obligatoire en Java Une valeur initiale : optionnelle en Java final : on ne peut pas changer la valeur ensuite En C : comme en Java (sauf final! const)

Déclaration en Caml let x = ref 4 in p; let racine2 = 1.414235 in q; Le type n est pas précisé Les variables sont finales par défaut La portée est plus explicite

A propos des types primitifs int: nombres entiers compris entre -2 31 et 2 31-1 Outre int, trois autres intervalles byte, short, long Autres types : boolean (false, true) Flottants : float, double (6.02E23) Caractères char ( g ) Huit types primitifs Types composites (a` suivre) : String ("Bonjour")

La séquence {p1 p2} Exécuter p1 puis p2 x = 4; y = x * 5; z = x + y; x = 4; { y = x * 5; z = x + y; } { ou x = 4; y = x * 5;? } z = x + y; Ca revient au même

Le test if (b) p1; if (b) p1 else p2; if (y!= x) {y = x + 1; } else y = x - 1; La condition b doit être booléenne si elle vaut true on exécute p1, si elle vaut false, on exécute p2 En Caml : if b then p1 else p2 En C : comme en Java

La boucle while (b) p; while (x < 1000) {x = x + 1;} Si b est false, on ne fait rien Si b est true, on exécute p, puis on recommence Si b est true, on exécute p, puis si b est true on exécute p, puis si b est true on exécute p puis si b est true on exécute p puis si b est true on exécute p if (b) { p; if (b) { p; if (b) { p; if (b) { }}}} On peut remplacer la boucle par un programme sans boucle, mais infini

Terminaison while (x < 1000) {x = x + 1;} Termine x = 3; while (x!= 2) {x = 1;} ne termine pas while (x > 1) { if (x % 2) x = x / 2; // pair else x = 3 * x + 1; } // impair on ne sait pas! (conjecture de Syracuse) Problème indécidable omniprésent en informatique théorique

Avant la boucle En langage archaïque (mélange de Java et Fortran) : : l1 if (b) { p; goto l1; } l1 if b no yes p Programmes «plats de spaghettis» Edgser Dijkstra : «On the GOTO statement considered harmful» (1968) - pour la programmation structurée Permet de : raisonner sur le programme définir sa sémantique

Un jeu Nr et Nb boules Tant que Nb+Nr > 1 tirer deux boules au hasard si elles sont de la même couleur, on met une nouvelle boule rouge dans le vase sinon on remet la boule bleue dans le vase On a 666 boules rouges et 69 bleues. La dernière boule sera : A rouge C je ne sais pas B bleue D On peut prévoir

Un jeu Nr et Nb boules Tant que Nb+Nr > 1 tirer deux boules au hasard si elles sont de la même couleur, on met une nouvelle boule rouge dans le vase sinon on remet la boule bleue dans le vase La parité du nombre de boules bleues reste constante A oui C je ne sais pas B dans certains cas D non

Un jeu Nr et Nb boules Tant que Nb+Nr > 1 tirer deux boules au hasard si elles sont de la même couleur, on met une nouvelle boule rouge dans le vase sinon on remet la boule bleue dans le vase On a 666 boules rouges et 69 bleues. La dernière boule sera : A rouge C je ne sais pas B bleue D On peut prévoir

Invariant de boucle P while C do E à prouver : ( ) ( ) ( ( )) P Quelle propriété est vraie à la fin?

La récurrence ( ). ( ) ( + ). ( ) + + + + < ne «passe pas à la récurrence» Il faut «renforcer» l hypothèse de récurrence : + + + + = +

( ). ( ) ( + ) La récurrence. ( ) En général, deux difficultés : trouver la bonne hypothèse de récurrence faire la preuve ne «passe pas à la récurrence» C est pareil pour les invariants Il faut «renforcer» l hypothèse de récurrence : + + + + = +

L état (première approximation) A priori : une fonction partielle des variables vers les valeurs Var un ensemble infini (x, y, a, x1 ) un ensemble Val = [-2 31 ; 2 31-1] [true; false] Un état : une fonction d une partie finie de Var vers Val [x = 5; y = 4; a = true] un programme transforme l état : x = x + y; [x = 5; y = 4] [x = 9; y = 4]

Sémantique des expressions A une expression e, on associe sa valeur dans l environnement ρ = e o m

C est plus compliqué En Caml let x = ref 4 in let y = x in y :=!y + 1; print(!x); Affiche quoi?

L état Deux composantes : l environnement : associe une adresse à une variable Loc ensemble des adresses (sous-ensemble des mots de 32 ou 64 bits) e : Var Loc la mémoire : associe une valeur à chaque adresse m : Loc Val environnement : ρ = m o e

Sémantique de l affectation Si f est une fonction, on note f+(r=v) la fonction qui est identique partout à f, sauf en r où elle vaut v

Sémantique de la déclaration On travaille dans un environnement étendu

Sémantique de la séquence Très facile : juste la composition On retrouve l associativité de la séquence :

Sémantique du test Facile encore : si si =true =false

Sémantique de la boucle Approximation finies q0 = giveup; q1 = if (b) giveup; q2 = if (b) {p; if (b) giveup}; qi+1 = if (b) {p; qi} jamais défini Si est défini, alors sont aussi définis (et égaux)

Il faut des variables globales Un programme Java minimal public class NomDuProgramme { static int x = 4; static int y = 3 * x; static boolean toto = true; } public static void main (String[] args) { int i = args.length - 1; while (i >= 0) System.out.println(args[i]); i -; }

Il faut des variables globales Un programme Java minimal public class NomDuProgramme { static int x = 4; static int y = 3 * x; static boolean toto = true; } public static void main (String[] args) { for (int i = args.length - 1; i >= 0; i--) System.out.println(args[i]); }

Les tableaux Tableau de taille n a[0] a[1] a[2] a[3] a[n-1] int[] a = new int[10]; a[1] = 4; a.length rend la valeur 10