X O X X O O. Une partie de morpion est donc représentée par une chaîne de caractères. Par exemple, la partie ci-dessus est codée par "c1b3a1b1b2c3a3".

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

Download "X O X X O O. Une partie de morpion est donc représentée par une chaîne de caractères. Par exemple, la partie ci-dessus est codée par "c1b3a1b1b2c3a3"."

Transcription

1 LFG - Ocaml - Exercices ATTENTION: En Ocaml, pour pouvoir utiliser le type stream, il faut charger le module approprié: #load "camlp4o.cma" ;; La fonction de conversion: Stream.of string : string -> char Stream.t Exercice 1 On donne la grammaire E T + E T, T a (E). Débrouillez-vous pour obtenir une grammaire LL(1). Ecrire un analyseur pour cette grammaire qui retourne un élément du type expr suivant type expr = A Plus of expr*expr ;; Exercice 2 Le jeu de morpion est un jeu entre deux joueurs appelés et O. commence le jeu en mettant un dans une des cases d un quadrillage de dimension 3 3 et c est le tour de O de mettre un O dans une des cases restantes. Ensuite c est le tour de et ainsi de suite. Le but de chaque joueur est d être le premier à établir une ligne ou une colonne ou une diagonale de trois cases contenant sa lettre. Celui qui réussit est déclaré gagnant. Voici un exemple d une partie de morpion où gagne. (1) (2) O (3) O (4) O O (5) O O (6) O O O (7) O O O gagne Notation du jeu de MORPION Dans plusieurs jeux de société, les joueurs sérieux se servent d une notation permettant de garder l historique d une partie pour pouvoir analyser le jeu plus tard ou le publier. C est surtout le cas du jeu d échecs. Voici une notation permettant de noter une partie de morpion: On donne un nom à chaque case a1 b1 c1 a2 b2 c2 a3 b3 c3 On écrit le nom de la case remplie à chaque coup. Une partie de morpion est donc représentée par une chaîne de caractères. Par exemple, la partie ci-dessus est codée par "c1b3a1b1b2c3a3". Une meilleure vision d un tel code est comme une suite de positions. Les facteurs gauches d un code sont des codes pour des positions antérieures. La chaîne vide, "" est le code pour la position initiale. Dans l exemple cidessus, la position (1) est codée par "c1", la position (2) par "c1b3",..., la position (7) par "c1b3a1b1b2c3a3". Le but de cet exercice est d écrire un programme Ocaml qui analyse une chaîne de caractères, supposée représenter une partie, ou suite de positions, de morpion, et d en extraire certaines informations, précisées dans la suite. 1

2 1. Définir une grammaire LL(1) qui engendre un langage permettant de coder les suites de positions du jeu de morpion. On se contentera d une grammaire qui permet de distinguer les coups de des coups de O et qui permet de distinguer le premier coup comme un coup de. Les terminaux seront les noms des cases. (Note: certains mots vont représenter des parties impossibles, sont trop longs ou contiennent des doublons. La grammaire ne permettra pas de distinguer le résultat d une partie.) 2. Ecrire un analyseur pour votre grammaire qui retourne un élément du type jeu suivant type jeu = J of coup list and coup = of string O of string ;; Par exemple, votre analyseur appliqué à la chaîne "c1b3a1b1b2c3a3" retournera - : jeu = J [ "c1"; O "b3"; "a1"; O "b1"; "b2"; O "c3"; "a3"]. 3. Ecrire une fonction appartient: a -> a list -> bool telle que l appel appartient e l teste si l élément e appartient à la liste l. 4. En utilisant la fonction appartient, écrire une fonction supprimer doublons: a list -> a list qui supprime les doublons dans une liste. 5. En utilisant la fonction supprimer doublons et la fonction List.length, écrire une fonction est valide: jeu -> bool qui teste si un élément du type jeu représente une partie de morpion valide. (Indice: quel est le résultat de l appel supprimer doublons l si l ne contient pas de doublon?). 6. Il y a trois lignes, trois colonnes et deux diagonales dans un quadrillage de dimension 3 3, donc il y a huit conditions à vérifier pour voir si a gagné une partie. Ecrire une fonction test victoire : jeu -> bool qui teste si a gagné une partie de morpion et une fonction test victoire O: jeu -> bool qui teste si O a gagné une partie de morpion. En déduire une fonction gagnant: jeu -> unit qui affiche le gagnant d une partie de morpion, si la partie n est pas nulle. 7. Dans le pot, /home/etudold/=pot/lcin5u44/, vous trouverez le fichier afficher morpion.ml qui contient la fonction afficher jeu : jeu -> unit qui permet d afficher une partie de morpion. En vous servant de cette fonction et des fonctions précédantes, écrivez une fonction qui prend en entrée une chaîne de caractères représentant une partie de morpion et qui affiche la partie. Exercice 3 La notation préfixée d une expression arithmétique consiste en l écriture de l expression avec l opérateur devant ses arguments. Par exemple, l addition de 3 et 4 s ecrit +34. Dans cet exercice nous considérons l analyse des expressions arithmétiques données en notation préfixée où les opérateurs sont +,,, / et seuls les nombres de 0 à 9 apparaissent. 1. Donner une grammaire pour les expressions arithmétiques en notation préfixée décrites ci-dessus. 2. Ecrire un analyseur pour cette grammaire qui retourne un élément du type arbre suivant type arbre = V B of arbre*string*arbre ;; Par exemple, l expression +34 sera convertie en B (B (V, "3", V), "+", B (V, "4", V)). On vous rappelle la fonction Char.escaped: char -> string qui transforme un caractère en une chaîne de caractères. 3. Ecrire une fonction valeur: arbre -> float qui évalue un élément de type arbre. Tester vos fonctions avec let test_string = "/* */ /42" ;; Exercice 4 Le but de cet exercice est d écrire un analyseur qui reconnaît la table de transitions d un automate où l état initial est noté i; les états finaux sont notés f0, f1,... ; les autres états sont notés s0, s1,... ; les éléments du vocabulaire sont notés v0, v1,... ; le mot vide est noté mv; les transitions sont notés en utilisant. et =. Par exemple, s0.v0=s1 ou i.v6=f2. Ainsi, i.v0=s1 s1.v0=f2 s1.v1=i est un automate correcte. 1. Ecrire une grammaire appropriée pour les automates. 2

3 2. Ecrire l analyseur. L entrée sera de type string et retournera un élément de type automate, qui est défini par type automate = A of transition list and transition = T of etat*vocabulaire*etat and vocabulaire = V of int Mv and etat = I S of int F of int ;; Par exemple, l automate "i.v0=s1 s1.v0=f2 s1.v1=i" retournera - : automate = A [T (I, V 0, S 1); T (S 1, V 0, F 2); T (S 1, V 1, I)] Il sera utile d incorporer la fonction nettoyage suivante qui enlève les espaces, les tabulations et les retours à la ligne d un stream. let rec nettoyage = parser [< \t \n ; l = (nettoyage) >] -> l [< x; l = (nettoyage) >] -> [< x; l >] [< >] -> [< >] ;; 3

4 Exercice 5 En effectuant l analyse LALR pour la grammaire ab, on obtient la table a b # s 0 s 1 s 2 s 1 succès s 2 s 3 s 2 s 3 s 4 s 4 ab ab Le programme Ocaml suivant est un analyseur qui utilise cette table et retourne la dérivation d un mot donné en entrée. (Vous trouverez ce programme dans le pot - dans le fichier ab.lalr.ml ). La fonction principale est la fonction g qui modélise l analyse ascendante décrite en cours. Les arguments de g sont a les actions. Ici, c est une liste de chaînes de caractères. Les réductions y sont ajoutées en forme de chaînes de caractères. A la fin on retourne a. p la pile. En effet, on n a besoin que des états de l automate dans cette pile, sans les caractères, car toute l information nécessaire figure dans les réductions. Ici, la pile est représentée par une liste. Les états sont écrits dans l ordre inverse de celui des notes du cours, c.à.d. les nouvels états sont ajoutés en tête de la liste. m le mot à analyser. La fonction auxiliaire reste permet d enlever le premier caractère du mot. (* Fonction auxiliaire *) let reste s = String.sub s 1 (String.length s - 1) ;; (* Transitions pour les non-terminaux *) let t s x = match (s,x) with "s0","" -> "s1" "s2","" -> "s3" _ -> "Echec";; Analyseur pour la grammaire ab (* Implementation de la table LR *) let analyser s = let rec g a p m = match p with "s0"::p when m.[0] = a -> g a ("s2"::"s0"::p) (reste m) "s0"::p when m.[0] = # -> g ("->^"::a) ("s1"::"s0"::p) m "s1"::_ when m.[0] = # -> a "s2"::p when m.[0] = a -> g a ("s2"::"s2"::p) (reste m) "s2"::p when m.[0] = b -> g ("->^"::a) ("s3"::"s2"::p) m "s3"::p when m.[0] = b -> g a ("s4"::"s3"::p) (reste m) "s4"::_::_::s::p when m.[0] = b or m.[0] = # -> g ("->ab"::a) ((t s "")::s::p) m _ -> "Echec "::m::". Analyse partielle:"::a in g [] ["s0"] (s^"#") ;; analyser "aabb";; - : string list = ["->ab"; "->ab"; "->^"] 1. Trouvez la table d analyse LALR pour la grammaire ab. 2. Etudiez le programme ci-dessus et en vous inspirant, écrivez un analyseur LALR pour la grammaire ab. 4

5 Exercice 6 La notation postfixée d une expression arithmétique consiste en l écriture de l expression avec l opérateur après ses arguments. Par exemple, l addition de 1 et 1 s ecrit 11+. Dans cet exercice nous considérons l analyse des expressions arithmétiques données en notation postfixée où seuls l opérateur + et le nombre 1 apparaissent. 1. Donner une grammaire pour les expressions arithmétiques en notation postfixée décrites ci-dessus. 2. Ecrire un analyseur LALR (programme Ocaml) pour cette grammaire (dans le même style que l exercice précédent). 5

6 Solutions Exercice 1 : Solution type expr = A Plus of expr * expr ;; let rec axiome = parser [< res_e = (e); # >] -> res_e and e = parser [< res_t = (t); res_eprime = (eprime) >] -> res_eprime res_t and eprime = parser [< + ; res_e = (e) >] -> (function x -> Plus (x, res_e)) [< >] -> (function x -> x) and t = parser [< ( ; res_e = (e); ) >] -> res_e [< a >] -> A ;; val e : char Stream.t -> expr = <fun> val eprime : char Stream.t -> expr -> expr = <fun> val t : char Stream.t -> expr = <fun> let convertir s = axiome (Stream.of_string s) ;; val convertir : string -> expr = <fun> convertir "a#" ;; - : expr = A convertir "a+a#" ;; - : expr = Plus (A, A) convertir "a+(a+a)#" ;; - : expr = Plus (A, Plus (A, A)) convertir "(a+a)+(a+a)#" ;; - : expr = Plus (Plus (A, A), Plus (A, A)) convertir "aa+a#" ;; Exception: Stream.Error "". Exercice 2 : Solution Question 1 J -> -> C O ^ O -> C ^ C -> L N L -> a b c N -> Question 2 type jeu = J of coup list and coup = of string O of string ;; let rec j = parser [< res_x = (x) >] -> J res_x and x = parser [< res_c = (c) ; res_o = (o) >] -> ( res_c) :: res_o [< >] -> [] and o = parser [< res_c = (c) ; res_x = (x) >] -> (O res_c) :: res_x [< >] -> [] 6

7 and c = parser [< a.. c as lettre ; as chiffre >] -> (Char.escaped lettre) ^ (Char.escaped chiffre) ;; Question 3 let rec appartient e = function [] -> false h::t -> h=e or appartient e t ;; Question 4 let rec supprimer_doublons = function l -> match l with [] -> [] t::q -> if appartient t q then supprimer_doublons q else t::(supprimer_doublons q) ;; Question 5 let est_valide (J l) = let rec cases = function [] -> [] ( s)::q -> s::(cases q) (O s)::q -> s::(cases q) in let cl = cases l in (cl = supprimer_doublons cl) or (List.length cl > 9) ;; Question 6 let test_victoire_ = function (J l) -> ((appartient ( "a1") l) & (appartient ( "b1") l) & (appartient ( "c1") l)) or ((appartient ( "a2") l) & (appartient ( "b2") l) & (appartient ( "c2") l)) or ((appartient ( "a3") l) & (appartient ( "b3") l) & (appartient ( "c3") l)) or ((appartient ( "a1") l) & (appartient ( "a2") l) & (appartient ( "a3") l)) or ((appartient ( "b1") l) & (appartient ( "b2") l) & (appartient ( "b3") l)) or ((appartient ( "c1") l) & (appartient ( "c2") l) & (appartient ( "c3") l)) or ((appartient ( "a1") l) & (appartient ( "b2") l) & (appartient ( "c3") l)) or ((appartient ( "a3") l) & (appartient ( "b2") l) & (appartient ( "c1") l)) ;; let test_victoire_o = function (J l) -> ((appartient (O "a1") l) & (appartient (O "b1") l) & (appartient (O "c1") l)) or ((appartient (O "a2") l) & (appartient (O "b2") l) & (appartient (O "c2") l)) or ((appartient (O "a3") l) & (appartient (O "b3") l) & (appartient (O "c3") l)) or ((appartient (O "a1") l) & (appartient (O "a2") l) & (appartient (O "a3") l)) or ((appartient (O "b1") l) & (appartient (O "b2") l) & (appartient (O "b3") l)) or ((appartient (O "c1") l) & (appartient (O "c2") l) & (appartient (O "c3") l)) or ((appartient (O "a1") l) & (appartient (O "b2") l) & (appartient (O "c3") l)) or ((appartient (O "a3") l) & (appartient (O "b2") l) & (appartient (O "c1") l)) ;; let gagnant jj = if test_victoire_ jj then print_string " gagne\n\n\n" else if test_victoire_o jj then print_string " O gagne\n\n\n" else print_string " Match Nul\n\n\n" ;; Question 7 let morpion s = let rs = j (Stream.of_string s) in if est_valide rs then (afficher_jeu rs ; gagnant rs) else failwith "jeu non valide" ;; L appel morpion "c1b3a1b1b2c3a3" ;; retourne 7

8 ================= ================= O - ================= O - ================= O O - ================= O O - ================= O O O ================= O - - O O ================= gagne - : unit = () Le programme: type jeu = J of coup list and coup = of string O of string ;; let rec j = parser [< res_x = (x) >] -> J res_x and x = parser [< res_c = (c) ; res_o = (o) >] -> ( res_c) :: res_o [< >] -> [] and o = parser [< res_c = (c) ; res_x = (x) >] -> (O res_c) :: res_x [< >] -> [] and c = parser [< a.. c as lettre ; as chiffre >] -> (Char.escaped lettre) ^ (Char.escaped chiffre) ;; let rec appartient e = function [] -> false h::t -> h=e or appartient e t ;; let rec supprimer_doublons = function l -> match l with [] -> [] t::q -> if appartient t q then supprimer_doublons q else t::(supprimer_doublons q) ;; let est_valide (J l) = let rec cases = function 8

9 [] -> [] ( s)::q -> s::(cases q) (O s)::q -> s::(cases q) in let cl = cases l in (cl = supprimer_doublons cl) or (List.length cl > 9) ;; let test_victoire_ = function (J l) -> ((appartient ( "a1") l) & (appartient ( "b1") l) & (appartient ( "c1") l)) or ((appartient ( "a2") l) & (appartient ( "b2") l) & (appartient ( "c2") l)) or ((appartient ( "a3") l) & (appartient ( "b3") l) & (appartient ( "c3") l)) or ((appartient ( "a1") l) & (appartient ( "a2") l) & (appartient ( "a3") l)) or ((appartient ( "b1") l) & (appartient ( "b2") l) & (appartient ( "b3") l)) or ((appartient ( "c1") l) & (appartient ( "c2") l) & (appartient ( "c3") l)) or ((appartient ( "a1") l) & (appartient ( "b2") l) & (appartient ( "c3") l)) or ((appartient ( "a3") l) & (appartient ( "b2") l) & (appartient ( "c1") l)) ;; let test_victoire_o = function (J l) -> ((appartient (O "a1") l) & (appartient (O "b1") l) & (appartient (O "c1") l)) or ((appartient (O "a2") l) & (appartient (O "b2") l) & (appartient (O "c2") l)) or ((appartient (O "a3") l) & (appartient (O "b3") l) & (appartient (O "c3") l)) or ((appartient (O "a1") l) & (appartient (O "a2") l) & (appartient (O "a3") l)) or ((appartient (O "b1") l) & (appartient (O "b2") l) & (appartient (O "b3") l)) or ((appartient (O "c1") l) & (appartient (O "c2") l) & (appartient (O "c3") l)) or ((appartient (O "a1") l) & (appartient (O "b2") l) & (appartient (O "c3") l)) or ((appartient (O "a3") l) & (appartient (O "b2") l) & (appartient (O "c1") l)) ;; let gagnant jj = if test_victoire_ jj then print_string " gagne\n\n\n" else if test_victoire_o jj then print_string " O gagne\n\n\n" else print_string " Match Nul\n\n\n" ;; let rec afficher_jeu (J l) = let rec aff_j = let maj jj = let rec chf = let modify f e r = function x -> if x=e then r else f x in function J [] -> (function _ -> "-") J (( s)::t) -> modify (chf (J t)) s "" J ((O s)::t) -> modify (chf (J t)) s "O" and p0 = [ "a1"; "b1"; "c1"; "a2"; "b2"; "c2"; "a3"; "b3"; "c3" ] in List.map (chf jj) p0 and aff_p = function a::b::c::d::e::f::g::h::i::[] -> print_string ("\n"^a^"\t"^b^"\t"^c^ "\n"^d^"\t"^e^"\t"^f^ "\n"^g^"\t"^h^"\t"^i^ "\n=================") _ -> failwith "jeu impossible" in function J [] -> print_string "\n=================" J (h::t) -> (aff_j (J t); aff_p (maj (J (h::t)) )) in aff_j (J (List.rev l)) ;; let test_jeu = "c1b3a1b1b2c3a3" ;; let morpion s = let rs = j (Stream.of_string s) in if est_valide rs then (afficher_jeu rs ; gagnant rs) 9

10 else failwith "jeu non valide" ;; morpion test_jeu ;; Exercice 3 : Solution 1. E -> O E E F O -> + - * / F-> let rec arith = parser [< ro = (o); ra1 = (arith); ra2 = (arith) >] -> ro (ra1,ra2) [< res_f = (f) >] -> res_f and o = parser [< + >] -> (function (x,y) -> B (x, "+", y)) [< - >] -> (function (x,y) -> B (x, "-", y)) [< * >] -> (function (x,y) -> B (x, "*", y)) [< / >] -> (function (x,y) -> B (x, "/", y)) and f = parser [< as chiffre >] -> B (V, Char.escaped chiffre, V) ;; val arith : char Stream.t -> arbre = <fun> val o : char Stream.t -> arbre * arbre -> arbre = <fun> val f : char Stream.t -> arbre = <fun> 3. let rec valeur e = match e with B (x,"+",y) -> (valeur x) +. (valeur y) B (x,"-",y) -> (valeur x) -. (valeur y) B (x,"*",y) -> (valeur x) *. (valeur y) B (x,"/",y) -> (valeur x) /. (valeur y) B (_,r,_) -> float_of_string r ;; val valeur : arbre -> float = <fun> let convert s = arith (Stream.of_string s) ;; val convert : string -> arbre = <fun> let test_string = "/* */ /42" ;; let cts = convert test_string ;; val cts : arbre = B (B (B (B (V, "3", V), "+", B (V, "2", V)), "*", B (B (V, "4", V), "-", B (V, "1", V))), "/", B (B (V, "7", V), "-", B (B (B (B (B (V, "4", V), "+", B (V, "3", V)), "-", B (B (V, "4", V), "-", B (V, "3", V))), "/", B (V, "3", V)), "*", B (B (V, "4", V), "/", B (V, "2", V))))) let v = valeur cts ;; val v : float = 5. 10

11 Exercice 4 : Solution 1. La grammaire: A -> T T A T -> E. V = E E -> i s N f N V -> v N mv N -> 0 1 N N1 N1 -> ^ 0 N1 1 N N1 2. L analyseur: let rec nettoyage = parser [< \t \n ; l = (nettoyage) >] -> l [< x; l = (nettoyage) >] -> [< x; l >] [< >] -> [< >] ;; val nettoyage : char Stream.t -> char Stream.t = <fun> let rec aut = parser [< res_a = (a) >] -> A res_a and a = parser [< res_t = (t); res_a_1 = (a_1) >] -> res_t :: res_a_1 and a_1 = parser [< res_a = (a) >] -> res_a [< >] -> [] and t = parser [< res_e1 = (e);. ; res_v = (v); = ; res_e2 = (e); ; >] -> T (res_e1, res_v, res_e2) and e = parser [< i >] -> I [< s ; res_n = (n) >] -> S res_n [< f ; res_n = (n) >] -> F res_n and v = parser [< m ; v >] -> Mv [< v ; res_n = (n) >] -> V res_n and n = parser [< as digit; res_n_1 = (n_1) >] -> int_of_string ((Char.escaped digit)^res_n_1) [< 0 >] -> 0 and n_1 = parser [< as digit; res_n_1 = (n_1) >] -> ((Char.escaped digit)^res_n_1) [< >] -> "" ;; val aut : char Stream.t -> automate = <fun> val a : char Stream.t -> transition list = <fun> val a_1 : char Stream.t -> transition list = <fun> val t : char Stream.t -> transition = <fun> val e : char Stream.t -> etat = <fun> val v : char Stream.t -> vocabulaire = <fun> val n : char Stream.t -> int = <fun> val n_1 : char Stream.t -> string = <fun> let automaton s = aut (nettoyage (Stream.of_string s)) ;; val automaton : string -> automate = <fun> automaton " i.v0=s1 s1.v0=f2 s1.v1=i 11

12 " ;; - : automate = A [T (I, V 0, S 1); T (S 1, V 0, F 2); T (S 1, V 1, I)] Exercice 5 : Solution (* Fonction auxiliaire *) let reste s = String.sub s 1 (String.length s - 1) ;; (* Transitions - non-terminaux *) let t s x = match (s,x) with "s4","" -> "s5" "s2","" -> "s3" "s0","" -> "s1" _ -> "" ;; (* Implementation de la table LR *) let analyser s = let rec g a p m = match p with "s0"::p when m.[0] = # -> g (" -> mv"::a) ((t "s0" "")::"s0"::p) m "s0"::p when m.[0] = a -> g a ("s2"::"s0"::p) (reste m) "s1"::_ when m.[0] = # -> a "s2"::p when m.[0] = a -> g a ("s2"::"s2"::p) (reste m) "s2"::p when m.[0] = b -> g (" -> mv"::a) ((t "s2" "")::"s2"::p) m "s3"::p when m.[0] = b -> g a ("s4"::"s3"::p) (reste m) "s4"::p when m.[0] = # -> g (" -> mv"::a) ((t "s4" "")::"s4"::p) m "s4"::p when m.[0] = a -> g a ("s2"::"s4"::p) (reste m) "s4"::p when m.[0] = b -> g (" -> mv"::a) ((t "s4" "")::"s4"::p) m "s5"::_::_::_::s::p when m.[0] = # -> g (" -> ab"::a) ((t s "")::s::p) m "s5"::_::_::_::s::p when m.[0] = b -> g (" -> ab"::a) ((t s "")::s::p) m _ -> failwith "probleme du mot" in g [] ["s0"] (s^"#") ;; analyser "aaabbabbab" ;; - : string list = [" -> ab"; " -> ab"; " -> mv"; " -> mv"; " -> ab"; " -> ab"; " -> mv"; " -> mv"; " -> ab"; " -> mv"; " -> mv"] Exercice 6 : Solution 1. E -> E E O F O -> + F->

modules & compilation

modules & compilation Programmation fonctionnelle avec OCaml 3ème séance, 19 mars 2015 modules & compilation samuel.hornus@inria.fr http ://www.loria.fr/ shornus/ocaml/ Modules Un module regroupe un ensemble de définitions

Plus en détail

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Machines virtuelles fonctionnelles (suite) Compilation ML Java Machines virtuelles fonctionnelles (suite) Compilation ML Java Cours de Compilation Avancée (MI190) Benjamin Canou Université Pierre et Maire Curie Année 2011/2012 Semaine 3 Machines virtuelles fonctionnelles

Plus en détail

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

# 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> 94 Programmation en OCaml 5.4.8. Concaténation de deux listes Définissons maintenant la fonction concat qui met bout à bout deux listes. Ainsi, si l1 et l2 sont deux listes quelconques, concat l1 l2 constitue

Plus en détail

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

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2 1 Univ. Lille1 - Licence info 3ème année 2013-2014 Expression Logique et Fonctionnelle... Évidemment Cours n o 1 : Introduction à la programmation fonctionnelle 1 Introduction La programmation fonctionnelle

Plus en détail

Classes et Objets en Ocaml.

Classes et Objets en Ocaml. Classes et Objets en Ocaml. Didier Rémy 2001-2002 http://cristal.inria.fr/ remy/mot/2/ http://www.enseignement.polytechnique.fr/profs/informatique/didier.remy/mot/2/ Cours Exercices Slide 1 1. Objets 2.

Plus en détail

Cours de Programmation 2

Cours de Programmation 2 Cours de Programmation 2 Programmation à moyenne et large échelle 1. Programmation modulaire 2. Programmation orientée objet 3. Programmation concurrente, distribuée 4. Programmation monadique 5. Les programmes

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

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

Correction Code nécessaire à la compilation : let bs =\\ let nl = \n ;; let appliquer = List.map ;; (* affichage d'un noeud *) Correction Code nécessaire à la compilation : let bs ="\\" let nl = "\n" let appliquer = List.map (* affichage d'un noeud *) let (noeud_vers_ch : int -> string) = function n -> "fib(" ^ (string_of_int

Plus en détail

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

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Représentation d un entier en base b

Représentation d un entier en base b Représentation d un entier en base b 13 octobre 2012 1 Prérequis Les bases de la programmation en langage sont supposées avoir été travaillées L écriture en base b d un entier est ainsi défini à partir

Plus en détail

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1 Chap 4: Analyse syntaxique 1 III- L'analyse syntaxique: 1- Le rôle d'un analyseur syntaxique 2- Grammaires non contextuelles 3- Ecriture d'une grammaire 4- Les méthodes d'analyse 5- L'analyse LL(1) 6-

Plus en détail

Les chaînes de caractères

Les chaînes de caractères Les chaînes de caractères Dans un programme informatique, les chaînes de caractères servent à stocker les informations non numériques comme par exemple une liste de nom de personne ou des adresses. Il

Plus en détail

Recherche dans un tableau

Recherche dans un tableau Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6

Plus en détail

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

Cours de C++ François Laroussinie. 2 novembre 2005. Dept. d Informatique, ENS de Cachan Cours de C++ François Laroussinie Dept. d Informatique, ENS de Cachan 2 novembre 2005 Première partie I Introduction Introduction Introduction Algorithme et programmation Algorithme: méthode pour résoudre

Plus en détail

OCL - Object Constraint Language

OCL - Object Constraint Language OCL - Object Constraint Language Laëtitia Matignon laetitia.matignon@univ-lyon1.fr Département Informatique - Polytech Lyon Université Claude Bernard Lyon 1 2012-2013 Laëtitia Matignon SIMA - OCL - Object

Plus en détail

Cours 1 : La compilation

Cours 1 : La compilation /38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà

Plus en détail

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

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme Rappel Ralf Treinen Université Paris Diderot UFR Informatique Laboratoire Preuves, Programmes et Systèmes treinen@pps.univ-paris-diderot.fr 6 mai 2015 Jusqu'à maintenant : un petit langage de programmation

Plus en détail

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

Structure d un programme et Compilation Notions de classe et d objet Syntaxe Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types

Plus en détail

Présentation du langage et premières fonctions

Présentation du langage et premières fonctions 1 Présentation de l interface logicielle Si les langages de haut niveau sont nombreux, nous allons travaillé cette année avec le langage Python, un langage de programmation très en vue sur internet en

Plus en détail

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

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en

Plus en détail

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

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

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

Vérification de programmes et de preuves Première partie. décrire des algorithmes Vérification de programmes et de preuves Première partie. décrire des algorithmes Yves Bertot September 2012 1 Motivating introduction A partir des années 1940, il a été compris que l on pouvait utiliser

Plus en détail

Licence Sciences et Technologies Examen janvier 2010

Licence Sciences et Technologies Examen janvier 2010 Université de Provence Introduction à l Informatique Licence Sciences et Technologies Examen janvier 2010 Année 2009-10 Aucun document n est autorisé Les exercices peuvent être traités dans le désordre.

Plus en détail

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Les structures de données. Rajae El Ouazzani

Les structures de données. Rajae El Ouazzani Les structures de données Rajae El Ouazzani Les arbres 2 1- Définition de l arborescence Une arborescence est une collection de nœuds reliés entre eux par des arcs. La collection peut être vide, cad l

Plus en détail

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations

Plus en détail

1. Structure d'un programme FORTRAN 95

1. Structure d'un programme FORTRAN 95 FORTRAN se caractérise par la nécessité de compiler les scripts, c'est à dire transformer du texte en binaire.(transforme un fichier de texte en.f95 en un executable (non lisible par un éditeur) en.exe.)

Plus en détail

STAGE IREM 0- Premiers pas en Python

STAGE IREM 0- Premiers pas en Python Université de Bordeaux 16-18 Février 2014/2015 STAGE IREM 0- Premiers pas en Python IREM de Bordeaux Affectation et expressions Le langage python permet tout d abord de faire des calculs. On peut évaluer

Plus en détail

Initiation à la programmation en Python

Initiation à la programmation en Python I-Conventions Initiation à la programmation en Python Nom : Prénom : Une commande Python sera écrite en caractère gras. Exemples : print 'Bonjour' max=input("nombre maximum autorisé :") Le résultat de

Plus en détail

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

Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle. Université Montpellier-II UFR des Sciences - Département Informatique - Licence Informatique UE GLIN302 - Programmation Applicative et Récursive Cours No 3 : Identificateurs, Fonctions, Premières Structures

Plus en détail

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

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation

Plus en détail

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)

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) 1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d

Plus en détail

TP 1. Prise en main du langage Python

TP 1. Prise en main du langage Python TP. Prise en main du langage Python Cette année nous travaillerons avec le langage Python version 3. ; nous utiliserons l environnement de développement IDLE. Étape 0. Dans votre espace personnel, créer

Plus en détail

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

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */. Page 1 de 9 MATLAB : COMMANDES DE BASE Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */. Aide help, help nom_de_commande Fenêtre de travail (Command Window) Ligne

Plus en détail

Conventions d écriture et outils de mise au point

Conventions d écriture et outils de mise au point Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette

Plus en détail

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.

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. 1 Définitions, notations 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. On utilise aussi la notation m n pour le

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 page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

TP1 : Initiation à Java et Eclipse

TP1 : Initiation à Java et Eclipse TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les

Plus en détail

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

TD3: tableaux avancées, première classe et chaînes TD3: tableaux avancées, première classe et chaînes de caractères 1 Lestableaux 1.1 Élémentsthéoriques Déclaration des tableaux Pour la déclaration des tableaux, deux notations sont possibles. La première

Plus en détail

Langage SQL (1) 4 septembre 2007. IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Langage SQL (1) 4 septembre 2007. IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes Langage SQL (1) Sébastien Limet Denys Duchier IUT Orléans 4 septembre 2007 Notions de base qu est-ce qu une base de données? SGBD différents type de bases de données quelques systèmes existants Définition

Plus en détail

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

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs) Modularité Extensions Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs) généricité modules de première classe : peuvent être

Plus en détail

Introduction à MATLAB R

Introduction à MATLAB R Introduction à MATLAB R Romain Tavenard 10 septembre 2009 MATLAB R est un environnement de calcul numérique propriétaire orienté vers le calcul matriciel. Il se compose d un langage de programmation, d

Plus en détail

Conversion d un entier. Méthode par soustraction

Conversion d un entier. Méthode par soustraction Conversion entre bases Pour passer d un nombre en base b à un nombre en base 10, on utilise l écriture polynomiale décrite précédemment. Pour passer d un nombre en base 10 à un nombre en base b, on peut

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

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

Plan du cours : Zippers. Des fonctions sur les listes avec position. Des fonctions sur les listes avec position Plan du cours : Le problème : naviguer efficacement une structure de données Ce qui ne marche pas Ce qui marche : les de Huet Exemples Comment dériver des pour tout type de données Pour en savoir plus

Plus en détail

Programmation en Java IUT GEII (MC-II1) 1

Programmation en Java IUT GEII (MC-II1) 1 Programmation en Java IUT GEII (MC-II1) 1 Christophe BLANC - Paul CHECCHIN IUT Montluçon Université Blaise Pascal Novembre 2009 Christophe BLANC - Paul CHECCHIN Programmation en Java IUT GEII (MC-II1)

Plus en détail

Utilisation d objets : String et ArrayList

Utilisation d objets : String et ArrayList Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons

Plus en détail

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE QCM Remarque : - A une question correspond au moins 1 réponse juste - Cocher la ou les bonnes réponses Barème : - Une bonne réponse = +1 - Pas de réponse = 0

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

INF 321 : mémento de la syntaxe de Java

INF 321 : mémento de la syntaxe de Java INF 321 : mémento de la syntaxe de Java Table des matières 1 La structure générale d un programme 3 2 Les composants élémentaires de Java 3 2.1 Les identificateurs.................................. 3 2.2

Plus en détail

Une dérivation du paradigme de réécriture de multiensembles pour l'architecture de processeur graphique GPU

Une dérivation du paradigme de réécriture de multiensembles pour l'architecture de processeur graphique GPU Une dérivation du paradigme de réécriture de multiensembles pour l'architecture de processeur graphique GPU Gabriel Antoine Louis Paillard Ce travail a eu le soutien de la CAPES, agence brésilienne pour

Plus en détail

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

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL Cours PL/SQL Langage propre à Oracle basé sur ADA Offre une extension procédurale à SQL PL/SQL permet d utiliser un sous-ensemble du langage SQL des variables, des boucles, des alternatives, des gestions

Plus en détail

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS = 7 10 1 + 5 10 2 + 2 10 3

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS = 7 10 1 + 5 10 2 + 2 10 3 8 Systèmes de numération INTRODUCTION SYSTÈMES DE NUMÉRATION POSITIONNELS Dans un système positionnel, le nombre de symboles est fixe On représente par un symbole chaque chiffre inférieur à la base, incluant

Plus en détail

Initiation à l algorithmique

Initiation à l algorithmique Informatique S1 Initiation à l algorithmique procédures et fonctions 2. Appel d une fonction Jacques TISSEAU Ecole Nationale d Ingénieurs de Brest Technopôle Brest-Iroise CS 73862-29238 Brest cedex 3 -

Plus en détail

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

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux. UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases

Plus en détail

Informatique Générale

Informatique Générale Informatique Générale Guillaume Hutzler Laboratoire IBISC (Informatique Biologie Intégrative et Systèmes Complexes) guillaume.hutzler@ibisc.univ-evry.fr Cours Dokeos 625 http://www.ens.univ-evry.fr/modx/dokeos.html

Plus en détail

Cours d algorithmique pour la classe de 2nde

Cours d algorithmique pour la classe de 2nde Cours d algorithmique pour la classe de 2nde F.Gaudon 10 août 2009 Table des matières 1 Avant la programmation 2 1.1 Qu est ce qu un algorithme?................................. 2 1.2 Qu est ce qu un langage

Plus en détail

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

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

Programme Compte bancaire (code)

Programme Compte bancaire (code) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; Programme Compte bancaire (code) namespace compte_bancaire /// Classe Program public

Plus en détail

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

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris : Développement d un client REST, l application Vélib 1. Présentation L application présentée permet de visualiser les disponibilités des vélos et des emplacements de parking à la disposition des parisiens

Plus en détail

Projet de programmation (IK3) : TP n 1 Correction

Projet de programmation (IK3) : TP n 1 Correction Projet de programmation (IK3) : TP n 1 Correction Semaine du 20 septembre 2010 1 Entrées/sorties, types de bases et structures de contrôle Tests et types de bases Tests et types de bases (entiers) public

Plus en détail

PROJET ALGORITHMIQUE ET PROGRAMMATION II

PROJET ALGORITHMIQUE ET PROGRAMMATION II PROJET 1 ALGORITHMIQUE ET PROGRAMMATION II CONTENU DU RAPPORT A RENDRE : o Fiche signalétique du binôme o Listing des différents fichiers sources o CD sources o Il sera tenu compte de la présentation du

Plus en détail

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7 Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin

Plus en détail

Rappels Entrées -Sorties

Rappels Entrées -Sorties Fonctions printf et scanf Syntaxe: écriture, organisation Comportement Données hétérogènes? Gestion des erreurs des utilisateurs 17/11/2013 Cours du Langage C ibr_guelzim@yahoo.fr ibrahimguelzim.atspace.co.uk

Plus en détail

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

Génie Logiciel avec Ada. 4 février 2013 Génie Logiciel 4 février 2013 Plan I. Généralités II. Structures linéaires III. Exceptions IV. Structures arborescentes V. Dictionnaires I. Principes II. Notions propres à la POO I. Principes Chapitre

Plus en détail

Package Java.util Classe générique

Package Java.util Classe générique Package Java.util Classe générique 1 Classe Vector La taille est dynamique: dès qu un tableau vectoriel est plein, sa taille est doublée, triplée, etc. automatiquement Les cases sont de type Object add(object

Plus en détail

Exercice 6 Associer chaque expression de gauche à sa forme réduite (à droite) :

Exercice 6 Associer chaque expression de gauche à sa forme réduite (à droite) : Eercice a Développer les epressions suivantes : A-(-) - + B-0(3 ²+3-0) -0 3²+-0 3+00 B -30²-30+00 C-3(-) -3 + 3-3²+6 D-(-) + ² Eerciceb Parmi les epressions suivantes, lesquelles sont sous forme réduite?

Plus en détail

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

TP3 : Manipulation et implantation de systèmes de fichiers 1 École Normale Supérieure Systèmes et réseaux Année 2012-2013 TP3 : Manipulation et implantation de systèmes de fichiers 1 1 Répertoire de travail courant Le but de l exercice est d écrire une commande

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

Corrigé des TD 1 à 5

Corrigé des TD 1 à 5 Corrigé des TD 1 à 5 1 Premier Contact 1.1 Somme des n premiers entiers 1 (* Somme des n premiers entiers *) 2 program somme_entiers; n, i, somme: integer; 8 (* saisie du nombre n *) write( Saisissez un

Plus en détail

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

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives introduction Chapitre 5 Images récursives http ://univ-tln.fr/~papini/sources/flocon.htm Récursivité http://www.poulain.org/fractales/index.html Image qui se contient elle-même 1 Exemples mathématiques

Plus en détail

Module 16 : Les fonctions de recherche et de référence

Module 16 : Les fonctions de recherche et de référence Module 16 : Les fonctions de recherche et de référence 16.0 Introduction L une des fonctions les plus importantes d Excel, c est la possibilité de chercher une valeur spécifique dans un grand nombre de

Plus en détail

Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot

Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot Chapitre 5 Arithmétique binaire L es codes sont manipulés au quotidien sans qu on s en rende compte, et leur compréhension est quasi instinctive. Le seul fait de lire fait appel au codage alphabétique,

Plus en détail

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e P r o b l é m a t i q u e OCL : O b j e c t C o n s t r a i n t L a n g u a g e Le langage de contraintes d UML Les différents diagrammes d UML permettent d exprimer certaines contraintes graphiquement

Plus en détail

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)

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) Se souvenir 1(1)/54 Le système de fichiers (exemple du disque dur) Qu est-ce qu un processus? 3(3)/54 Les caches (inodes et blocks) Accès à un fichier : double indirection Compteurs de références : Les

Plus en détail

Le prototype de la fonction main()

Le prototype de la fonction main() Le prototype de la fonction main() 1. Introduction...1 2. Paramètres et type de retour de la fonction main()...1 3. Exemple 1...2 4. La fonction exit() du C...2 5. Détecter le code de retour d un programme

Plus en détail

INF 232: Langages et Automates. Travaux Dirigés. Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies

INF 232: Langages et Automates. Travaux Dirigés. Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies INF 232: Langages et Automates Travaux Dirigés Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies Année Académique 2013-2014 Année Académique 2013-2014 UNIVERSITÉ JOSEPH

Plus en détail

Découverte de Python

Découverte de Python Découverte de Python Python est un des langages informatiques au programme des concours à partir de la session 2015. Ce tutoriel vous permettra de vous mettre à peu près à niveau de ce qui a été fait en

Plus en détail

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

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi 802.11 module François SCHNEIDER Lycée Victor-Hugo BESANÇON. STS SE FreeRTOS Programmation réseau WIFI Programmation réseau Socket Tcp FlyPort smart Wi-Fi 802.11 module Prérequis : langage C, connaissance réseau : Ip,

Plus en détail

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

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr . Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

Plus en détail

Claude Delannoy. 3 e édition C++

Claude Delannoy. 3 e édition C++ Claude Delannoy 3 e édition Exercices Exercices C++ en en langage langage delc++ titre 4/07/07 15:19 Page 2 Exercices en langage C++ AUX EDITIONS EYROLLES Du même auteur C. Delannoy. Apprendre le C++.

Plus en détail

Principes des langages de programmation INF 321. Eric Goubault

Principes des langages de programmation INF 321. Eric Goubault Principes des langages de programmation INF 321 Eric Goubault 24 mars 2014 2 Table des matières 1 Introduction 7 2 Programmation impérative 11 2.1 Variables et types........................... 11 2.2 Codage

Plus en détail

Cours Informatique Master STEP

Cours Informatique Master STEP Cours Informatique Master STEP Bases de la programmation: Compilateurs/logiciels Algorithmique et structure d'un programme Programmation en langage structuré (Fortran 90) Variables, expressions, instructions

Plus en détail

Chapitre 1 I:\ Soyez courageux!

Chapitre 1 I:\ Soyez courageux! Chapitre 1 I:\ Soyez courageux! Pour ne rien vous cacher, le langage d'assembleur (souvent désigné sous le terme "Assembleur", bien que ce soit un abus de langage, puisque "Assembleur" désigne le logiciel

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Compléments de documentation Scilab : affichage de texte et formatage de nombres Université des Sciences et Technologies de Lille U.F.R. de Mathématiques Pures et Appliquées Agrégation externe Année 2002-2003 Compléments de documentation Scilab : affichage de texte et formatage de

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

Chapitre 10. Les interfaces Comparable et Comparator 1

Chapitre 10. Les interfaces Comparable et Comparator 1 Chapitre 10: Les interfaces Comparable et Comparator 1/5 Chapitre 10 Les interfaces Comparable et Comparator 1 1 Ce chapitre a été extrait du document "Objets, Algorithmes, Patterns" de [René Lalement],

Plus en détail

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

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004 Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)

Plus en détail

Rappels d architecture

Rappels d architecture Assembleur Rappels d architecture Un ordinateur se compose principalement d un processeur, de mémoire. On y attache ensuite des périphériques, mais ils sont optionnels. données : disque dur, etc entrée

Plus en détail

Le langage SQL Rappels

Le langage SQL Rappels Le langage SQL Rappels Description du thème : Présentation des principales notions nécessaires pour réaliser des requêtes SQL Mots-clés : Niveau : Bases de données relationnelles, Open Office, champs,

Plus en détail

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB Ce document, écrit par des animateurs de l IREM de Besançon, a pour objectif de présenter quelques unes des fonctions du logiciel Scilab, celles qui sont spécifiques

Plus en détail

Résolution d équations non linéaires

Résolution d équations non linéaires Analyse Numérique Résolution d équations non linéaires Said EL HAJJI et Touria GHEMIRES Université Mohammed V - Agdal. Faculté des Sciences Département de Mathématiques. Laboratoire de Mathématiques, Informatique

Plus en détail

Algorithmique et programmation : les bases (VBA) Corrigé

Algorithmique et programmation : les bases (VBA) Corrigé PAD INPT ALGORITHMIQUE ET PROGRAMMATION 1 Cours VBA, Semaine 1 mai juin 2006 Corrigé Résumé Ce document décrit l écriture dans le langage VBA des éléments vus en algorithmique. Table des matières 1 Pourquoi

Plus en détail

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string Génie Logiciel I Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string Nicolas Kielbasiewicz C.D.C.S.P./I.S.T.I.L./I.C.J. Filière M.A.M.

Plus en détail

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

Tp 1 correction. Structures de données (IF2) Tp 1 correction Structures de données (IF2) Remarque générale : compilez et exécutez le code au-fur-et-à mesure de son écriture. Il est plus facile de corriger une petite portion de code délimitée que

Plus en détail

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

Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... Université Paris 7 Programmation Objet Licence Bio Informatique Année 2004-2005 TD n 1 - Correction Premiers pas Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... 1. Enregistrez

Plus en détail

Enseignement secondaire technique

Enseignement secondaire technique Enseignement secondaire technique Régime technique Division technique générale Cycle moyen Informatique 11TG Nombre de leçons: 2.0 Nombre minimal de devoirs: - Langue véhiculaire: / Remarque générale:

Plus en détail

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

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40 Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne gauthier.picard@emse.fr

Plus en détail