Title: Algorithme et structure de donn
1Algorithme et structure de données
2Objectifs
- Acquérir les notions de base de programmation
impérative - structures de contrôles
- appels à des procédures
- récursivité
- Connaître les bases de la programmation objet
- Savoir réutiliser du code
3Combien ? Quand ?
- Cours/TD
- 3h par semaine pendant 13 semaines le lundi de 9h
à 12h - TP sur machine
- 3h de TP par semaine pendant 13 semaines le lundi
de 13h30 à 16h30
4Objectifs
- Connaître les structures de données élémentaires,
tableaux, piles, files, listes chaînées, arbres - Être sensibilisé aux problèmes algorithmiques et
leur complexité - Connaître quelques algorithmes de base (tris,
techniques "diviser pour régner", ...)
5Le langage !
- JAVA, mais son aspect orienté objet sera réduit
au minimum - Il ne s'agit pas d'un cours de programmation Java
! - Cours/TD
- Alternance cours et exercices d'application
- sur papier
- TP sur machine
- approfondir les structures de données et
algorithmes du cours - faire "tourner" les exercices de TD
6Pointeurs
- Ce cours est largement inspiré par
- Algorithmique et Programmation en tronc commun du
DEUG - cours ASD en IUP1 de Jean-Marc Fédou
- Tutorial en ligne de Sun
- Documentation API
- http//deptinfo.unice.fr/pc
- pc_at_unice.fr
7Premiers pas en Java
- Type de base
- Variable
- Méthode
- Structure de contrôle
- Chaîne de caractères
8Type de base
- Tous les langages de programmation manipulent des
variables auxquelles sont affectées des valeurs - La notion de type permet de
- définir les valeurs possibles
- définir les opérations licites
9Type de base
10Type de base
- byte entier relatif (Z)
- Arithmétique complément à deux sur un octet (8
bits) - -128 , 127
- short entier relatif (Z)
- Arithmétique complément à deux sur deux octets
(16 bits) - -65536 , 65535
11Type de base
- int entier relatif (Z)
- -2147483648, 2147483647
12float nombre réelen virgule Flottante IEEE-754
- Soit à coder le nombre 3,25 (11,01 en base 2)
- Normaliser l'écriture en base 2 sous la forme
- ?(1,).2n
- 11,01 (1,101).21
- La représentation IEEE code séparément sur 32
bits - signe (ici )
- exposant n (ici 1)
- mantisse (suite de bits après la virgule, ici 101)
13float nombre réel (norme IEEE-754)
- Normalisation en base 2 sous la forme
- ?(1,).2n
- signe sur le bit de poids fort (0 pour )
- exposant codé sur 8 bits. En fait, on code sur un
octet la valeur n127 - mantisse codée sur les 23 bits de poids faibles
14float nombre réel (norme IEEE-754)
- exposant coder sur un octet n127
- 00000000 ? n127 ? 11111111
- 0 ? n127 ? 255
- Exposants interdits
- 00000000 signifie que le nombre est dénormalisé
- 11111111 indique que l'on n'a pas affaire à un
nombre - Not a Number (NaN) signale des erreurs de
calculs, par exemple une division par 0 - 1 ? n127 ? 254
- Le plus petit exposant 126
- le plus grand exposant 127
15Norme IEEE-754http//babbage.cs.qc.edu/courses/cs
341/IEEE-754.html
- Programme en langage C qui affiche le code d'un
nombre flottant - / Affichage hexadécimal des 4 octets
- d'un nombre flottant IEEE /
- include ltstdio.hgt
- main()
- float x
- unsigned char p (unsigned char )x
- printf("Entrer un nombre flottant \n")
- scanf("f", x)
- printf("x x x x\n",p,(p1),(p2),(p3))
16Type de base
- double nombre décimaux
- 4.910-324, 1.810308
17char le type caractère
- Pas de méthode pour stocker directement les
caractères - Chaque caractère possède donc son équivalent en
code numérique
18Le code Unicode (1991)
- code des caractères sur 16 bits
- Indépendant du système d'exploitation ou du
langage - Quasi-totalité des alphabets existants (arabe,
arménien, cyrillique, grec, hébreu, latin, ...) - Compatible avec le code ASCII
- http//www.unicode.org
19Le code ASCII (1960)
- code ASCII
- American Standard Code for Information
Interchange - Le code ASCII de base représente les caractères
sur 7 bits (c'est-à-dire 128 caractères
possibles, de 0 à 127)
20Le code ASCII
- Les codes 0 à 31 ne des caractères de contrôle
- retour à la ligne (CR)
- Bip sonore (BEL)
- Les codes 65 à 90 représentent les majuscules
- Les codes 97 à 122 représentent les minuscules
- modifier le 6ème bit pour passer de majuscules à
minuscules - ajouter 32 au code ASCII en base décimale
21Type de base
- boolean deux valeurs possibles
- true (VRAI)
- false (FAUX)
- Sil y a du soleil ALORS je vais a la plage
- SI (soleilVRAI) ALORS aller_a_la_plage
- SI soleil ALORS aller_a_la_plage
22Type de base
23Types de base
Primitive Data Types
Floating
Integer
byte 8bits -128 to 127
float 32bits 1.4E-45 3.4E38
short 16bits -32768 to 32767
double 64bits 4.9E-324 1.8E308
int 32bits -231 to 231-1
long 64 bits -263 to 263-1
Logical
Textual
one bit true or false
char 16bits 0 to 65535
24Concept de Variable
- Définition un élément dinformation identifié
par un nom - On doit explicitement indiquer le nom et le type
dune variable - On utilise le nom pour faire référence à
linformation que la variable contient - Le type détermine les valeurs licites pour la
variable et les opérations autorisées
25Concept de Variable
- Pour donner un nom et un type à une variable il
faut la déclarer - type name
- Une variable a une portée
- la section de code ou le nom de la variable peut
être utilisé
26Variable déclaration
- int compteur
- float prixHt
- char aChar
- boolean fin
27Variable valeur par défaut
28Variable affectation dune valeur
- Une affectation permet de donner une nouvelle
valeur à une variable - La valeur précédente est PERDUE
- int compteur
- compteur 3
29Variable affectation dun valeur
- int r 2
- double pi pi 3.14
- double perimetre 2pir
- //déclarer ET affecter
- char c c
- boolean pair true
- int compteur
- compteur compteur 1
30- int maxInteger Integer.MAX_VALUE
- float maxFloat Float.MAX_VALUE
- char aChar 'S'
- boolean fin true
- S.o.p("Le plus grand integer est "
maxInteger) - S.o.p("Le plus grand float est " maxFloat)
- S.o.p("Le caractère est " aChar)
- S.o.p("fin est " fin)
Le plus grand integer est 2 147 483 647 Le
plus grand float est 3.40282e38 Le
caractère est S fin est
true
31Affectation et Conversion de type
- Attention, contrairement à C, Java n'autorise pas
conversions de types, sauf s'il n'y a aucune
perte de précision - un entier peut être promu en double
- un double ne peut pas être promu en entier
32Affectation et Conversion de type
- Un entier peut être promu en double
- int i 2
- double d 3.1
- d i
- Un double ne peut pas être promu en entier
- int i 2
- double d 3.1
- i d // !!
33Affectation et Cast
- Un double ne peut pas être promu en entier
- int i 2
- double d 3.1
- i d // !!
- Un double peut être forcé en entier
- int i 2
- double d 3.1
- i (int) d
34Variable final
- La valeur dune variable déclarée final ne peut
pas être modifiée après avoir été initialisée - Une telle variable est similaire à une constante
dans les autres langages de programmation - Pour déclarer une variable final
- final int A_FINAL_VAR 10
35Opérateur Arithmétique
36Opérateur Arithmétique
- Le résultat peut dépendre du contexte
- 25 / 3 -----gt 8
- //pour la division entière de 25 par 8
- 25.0 / 3 -----gt 8.3333333333333334
- 25 / 3.0 -----gt 8.3333333333333334
- 25 3 -----gt 1
- //pour le reste de la division de 25 par 8
- 25 3.1 -----gt 0.1999999999999993
- // 253.18 0.2
37Opérateur Relationnel
38Opérateur Conditionnel
Operator Use Returns true if
op1 op2 op1 and op2 are both true conditionally evaluates op2
op1 op2 either op1 or op2 is true conditionally evaluates op2
! ! op op is false
op1 op2 op1 and op2 are both true always evaluates op1 and op2
op1 op2 either op1 or op2 is true always evaluates op1 and op2
op1 op2 if op1 and op2 are different that is if one or the other of the operands is true but not both
39Créer votre première application
40 Le premier programme, Hello, affiche simplement
le texte "Hello !"
- Créer un fichier source Hello.java
- Un fichier source contient du texte, écrit en
Java -
- Compiler le source en fichier bytecode
Hello.class - Le compilateur javac, traduit le texte source en
instructions compréhensibles par la Machine
Virtuelle Java (JVM) -
- Exécuter le programme contenu dans le fichier
bytecode - L'interprète java implémente la JVM
- L'interprète traduit le bytecode en instructions
exécutables par votre machine
41Write once, run anywhere
- La compilation d'un programme, ne génère pas
d'instructions spécifiques à votre plate-forme - Mais du bytecode Java, qui sont des instructions
de la Machine Virtuelle Java (JVM) - Si votre plate-forme (Windows, UNIX, MacOS, un
browser Internet) dispose dune JVM, elle peut
comprendre le bytecode
42Créer le fichier source Java Hello.java
- class Hello
- public static void main(String args)
- System.out.println("Hello !")
-
-
43Compiler le fichier source
- gt javac Hello.java
- Si la compilation réussit
- le fichier Hello.class est créer
- Ce fichier contient le bytecode
44Interpréter et Exécuter l'application
- gt java Hello
- L'argument de l'interprète est
- le nom de la classe à exécuter
- ce nest pas le nom du fichier
- Faire la distinction M/m
45Disséquons l'application "Hello"
- Définir une classe
- Définir la méthode main
- Utiliser des méthodes
46Définir la classe Hello
- public class Hello
- public static void main(String args)
- System.out.println("Hello !")
-
47Définir la méthode main
- public class Hello
- public static void main(String args)
- System.out.println("Hello !")
-
-
- Une application Java doit contenir une méthode
main - Appelée en premier par l'interprète
- main appelle les autres méthodes nécessaires pour
exécuter l'application
48Utiliser dautres méthodes
- public class Hello
- public static void main(String args)
- System.out.println("Hello !")
-