Planche: 1
Planche: 2
Plan
- Programme de l'enseignement de l'informatique
- Equipement informatique de l'X
- Mon activité à l'INRIA
- Les ctp des groupes 1 et 11
- La date de Pâques
Planche: 3
1-Programme de l'enseignement de l'informatique
Mécanismes fondamentaux de la programmation
- 10 PC d'enseignement
- 10 TD de programmation
- 1 HC (16 décembre), 2h
- 1 CC (15 février), 4h, coeff 10
- 1 projet info (500--1000 lignes), coeff 8
- 2 délégués info par promo
- 1 délégué par PC
Planche: 4
2-Un bel équipement informatique
Mac/PC: 20 Mac en salle 34, les machines Windows sont à la
responsabilité des élèves.
- Traitement de texte (Word, Claris, Excel, Powerpoint, ...)
- Développement de programmes
- Jeux
Unix: 90 machines (HP, DEC, PC)
- Communication
- Développement de programmes
- Traitement de texte (TeX, Latex, Applix, ...)
La règle est l'interconnexion
Planche: 5
3-Mon activité à l'INRIA
- Operating systems
- Sémantique et l-calcul
- Vlsi (CAO)
- Graphique Interactif
- Sémantique et compilation sur machine parallèle
- lambda-calcul et join-calcul
- projet Para (concurrence, distribution, mobilité)
- coordinateur de Confer 1 et 2
- projet RNRT Marvel (avec France Telecom et ENST)
- vpdt Commission d'Evaluation de l'INRIA
Planche: 6
4-Les autres enseignants des groupes 1 et 11
- Pierre Weis, ctp, DR, INRIA,
implémenteur de Caml, livre sur Caml
- François Pessaux, vac, thésard, INRIA,
analyse statique d'échappements d'exceptions en Objective-Caml,
- François Sillion, (remplacement), ENS-Ulm, mdc,
DR INRIA; ENS, Cornell, Imag; synthèse d'images.
Aussi en majeure M1 (images).
- Olivier Devillers (remplacement), ENS-Ulm, ctp,
CR INRIA; ENS, Sophia; algorithmes géométriques.
Aussi en majeure M2 (algo géométriques).
- Eric Goubault (remplacement), X-Mines, ctp, CEA
ENS; interprétation abstraite, concurrence vraie.
En majeure M2 (parallélisme).
Planche: 7
Pascal ou C ou C++ ou Java ou ML ??
- C typé faiblement, conversions de type possibles
- Pascal typé, types simples, pointeurs
- C ® Unix
- Java et ML fortement typés
- Java et ML ont un garbage collector (GC)
- Java et Ocaml orientés-objet
- ML a des types polymorphes
- ML est plutôt fonctionnel
- Ocaml est très efficace une fois compilé
Caml (INRIA) vient de ML (Milner, Edimbourg)
Planche: 8
Date de Pâques
Lilius et Clavius en 16xx. (Knuth vol1, p.155)
Soit Y l'année, dont on cherche la date de Paques. Assume Y < 100000
-1 [Golden number]. G = (Y mod 19) + 1
-2 [Century] C = ë Y/100 û + 1
-3 [Corrections] X = ë 3 C / 4 û - 12,
Z = ë (8 C + 5) /25 û -5
-4 [Find Sunday] D = ë 5 Y / 4 û - X -10
-5 [Epact.] E = (11 G + 20 + Z - X) mod 30.
Si E = 25 and G > 11, ou si E = 24, alors
E ¬ E + 1
-6 [Find full moon] N = 44 - E.
Si N < 21, alors N ¬ N + 30
-7 [Advance to Sunday] N ¬ N + 7 - ((D + N) mod 7)
-8 [Get month] If N > 31, date is (N - 31) APRIL
Otherwise, date is N MARCH.
Vérifier si ca marche pour 14250. Si pb lequel?
Planche: 9
Pâques en Java
public class Paques {
static String paques (int y) {
int g = (y % 19) + 1;
int c = y / 100 + 1;
int x = 3 * c / 4 - 12;
int z = (8 * c + 5) / 25 - 5;
int d = 5 * y / 4 - x - 10;
int e = (11 * g + 20 + z - x) % 30;
if ( e == 25 && g > 11 || e == 24 )
++e;
int n = 44 - e;
if (n < 21)
n = n + 30;
int j = n + 7 - ((d + n) % 7);
if (j > 31)
return (j - 31) + " avril";
else
return j + " mars";
}
Planche: 10
Pâques en Java -- bis
public static void main (String args[]) {
if (args.length == 0) {
System.err.println ("Il faut un argument");
System.exit(1);
}
int annee = Integer.parseInt(args[0]);
System.out.println (paques (annee));
}
}
Sous Unix, on tape les commandes
% javac Paques.java
% java Paques 2000
23 avril 2000
Planche: 11
Pâques en Ocaml
let paques y =
let g = (y mod 19) + 1 in
let c = y / 100 + 1 in
let x = 3 * c / 4 - 12
and z = (8 * c + 5) / 25 - 5 in
let d = 5 * y / 4 - x - 10 in
let e =
let tmp = (11 * g + 20 + z - x) mod 30 in
if tmp = 25 && g > 11 || tmp = 24 then tmp + 1 else tmp in
let n =
let tmp = 44 - e in
if tmp < 21 then tmp + 30 else tmp in
let j = n + 7 - ((d + n) mod 7) in
if j > 31 then (j - 31, "avril") else (j, "mars");;
Planche: 12
Pâques en Ocaml -- bis
Sous le top-level interactif, on tape simplement
paques 2000;;
- : int * string = 23, "avril"
(la réponse inclut une indication sur le type). Si on rajoute un
programme principal,
open Printf;;
let main () =
let a = int_of_string Sys.argv.(1) in
let (j, m) = paques a in
printf "%d %s %d\n" j m a;;
main();;
on peut aussi compiler le fichier Ocaml et exécuter le résultat
% ocamlc -o paques paques.ml
% paques 2000
23 avril 2000
Planche: 13
Remarques sur Java
Un programme est une suite de définition de classes. Il
démarre par la fonction publique main.
Chaque classe contient des déclarations de variables et
de fonctions. Ici la fonction paques prend un
entier en argument et retourne une chaîne. La fonction main
prend un tableau de chaînes en argument et ne retourne aucune valeur
(void).
Le corps d'une fonction est une suite de déclarations de variables et d'instructions.
Attention = est le symbole d'affectation; == est
le test d'égalité, comme en C.
Planche: 14
Remarques sur Ocaml
Un programme est une suite de phrases terminées par le
symbole ;;
Une phrase est une déclaration ou une expression.
On ne déclare pas les types des symboles déclarés. Le système les
calcule automatiquement.
Toutes les variables sont des constantes (mais peut-être
pas le contenu des structures non scalaires). Donc le symbole =
est utilisé à la fois pour la définition des objets et pour le test
d'égalité.
Planche: 15
Calcul du jour
let bissextile a =
(a mod 4 = 0) &&
not ( (a mod 400 = 0) && not (a mod 1000 = 0)) ;;
let jmax m a =
match m with
1 | 3 | 5 | 7 | 8 | 10 | 12 -> 31
| 2 -> if bissextile a then 29 else 28
| 4 | 6 | 9 | 11 -> 30
| _ -> failwith "mauvais numéro de mois" ;;
Planche: 16
Calcul du jour -- bis
let aujourd'hui = (5, 11, 1998) ;;
let jour_daujourdhui = 4 ;;
let demain (j,m,a) =
if j = jmax m a then
if m = 12
then (1,1,a+1)
else (1,m+1,a)
else (j+1,m,a) ;;
Planche: 17
Calcul du jour -- ter
let string_of_jour d =
match d with
0 -> "dimanche" | 1 -> "lundi" | 2 -> "mardi"
| 3 -> "mercredi" | 4 -> "jeudi" | 5 -> "vendredi"
| 6 -> "samedi" | _ -> failwith "mauvais numéro de jour" ;;
let jour cible =
let date = ref aujourd'hui in
let jour = ref jour_daujourdhui in
while !date <> cible do
jour := (!jour+1) mod 7;
date := demain !date
done;
string_of_jour !jour ;;
jour (25,12,2020);;
- : string = "vendredi"
Planche: 18
Calcul du jour -- Java
class Jour {
static boolean bissextile (int a) {
return (a % 4 == 0) &&
!( (a % 400 == 0) && !(a % 1000 == 0));
}
static int nbDeJours[] = {
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
static int jmax (Date d) {
if (d.m == 2 && bissextile (d.a))
return 29;
else
return nbDeJours[d.m - 1];
}
Planche: 19
Calcul du jour -- Java bis
static Date aujourdhui = new Date (5, 11, 1998);
static int jourDaujourdhui = 4;
static Date demain (Date d) {
if (d.j == jmax (d))
if (d.m == 12)
return new Date (1, 1, d.a + 1);
else
return new Date (1, d.m + 1, d.a);
else
return new Date (d.j + 1, d.m, d.a);
}
Planche: 20
Calcul du jour -- Java ter
static String nomDuJour[] = {
"dimanche", "lundi", "mardi", "mercredi",
"jeudi", "vendredi", "samedi"
};
static String jour (Date cible) {
Date d = aujourdhui;
int j = jourDaujourdhui;
while (!d.equals (cible)) {
j = (j + 1) % 7;
d = demain (d);
}
return nomDuJour[j];
}
Planche: 21
Calcul du jour -- Java 4
public static void main (String args[]) {
if (args.length < 3) {
System.err.println ("Il faut 3 arguments");
System.exit(1);
}
int j = Integer.parseInt(args[0]);
int m = Integer.parseInt(args[1]);
int a = Integer.parseInt(args[2]);
System.out.println (jour (new Date (j, m, a)));
}
}
Planche: 22
Calcul du jour -- Java 5
class Date {
int j; // jour
int m; // mois
int a; // annee
Date (int jour, int mois, int annee) {
j = jour;
m = mois;
a = annee;
}
public boolean equals (Date d) {
return j == d.j && m == d.m && a == d.a;
}
public String toString () {
return j + "/" + m + "/" + a;
}
Planche: 23
Exercices en TD
- le programme de calcul de la date de Pâques est incorrect. Le
32 avril 11571 est un résultat possible. Pourquoi? Comment corriger le
programme pour que la date soit correcte? Le faire en Java et en Ocaml.
- retrouver ces programmes sans regarder le cours.
- commencer à regarder le tri et la manipulation des tableaux. On
fera du tri et de l'animation graphique à la PC2.
- regarder l'annexe Java ou Caml-light du cours. Trouver des
livres sur ces deux langages: par exemple
Exploring Java, 2nd edition, Pat Niemeyer et Joshua Peck, 628
pages, O'Reilly, ISBN: 1-56592-271-9. 1997.
Le langage Caml, Pierre Weis et Xavier Leroy, InterEditions, 1993,
ISBN 2-7296-0493-6.
Ce document a été traduit de LATEX par HEVEA.