Algorithme et structure de donn es l.jpg
This presentation is the property of its rightful owner.
Sponsored Links
1 / 48

Algorithme et structure de données PowerPoint PPT Presentation


  • 295 Views
  • Uploaded on
  • Presentation posted in: General

Algorithme et structure de données. IUP1 Miage. Objectifs . 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. Combien ? Quand ?. Cours/TD

Download Presentation

Algorithme et structure de données

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Algorithme et structure de données

IUP1 Miage


Objectifs

  • 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


Combien ? 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


Objectifs

  • 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", ...)


Le 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


Pointeurs …

  • 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

  • [email protected]


Premiers pas en Java

  • Type de base

  • Variable

  • Méthode

  • Structure de contrôle

  • Chaîne de caractères


Type 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


Type de base


Type 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]


Type de base

  • int : entier relatif (Z)

    [-2147483648, 2147483647]


float : 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)


float : 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 n+127

    • mantisse codée sur les 23 bits de poids faibles


float : nombre réel (norme IEEE-754)

exposant : coder sur un octet n+127

00000000  n+127  11111111

0  n+127  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  n+127  254

    • Le plus petit exposant ­126

    • le plus grand exposant +127


Norme IEEE-754http://babbage.cs.qc.edu/courses/cs341/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 <stdio.h>

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,*(p+1),*(p+2),*(p+3));

}


Type de base

  • double : nombre décimaux

    [4.9*10-324, 1.8*10308]


char : 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


Le 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


Le 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)


Le 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


Type de base

  • boolean : deux valeurs possibles

    • true (VRAI)

    • false (FAUX)

  • S’il y a du soleil ALORS je vais a la plage

  • SI (soleil==VRAI) ALORS aller_a_la_plage

  • SI soleil ALORS aller_a_la_plage


Keyword

Description

Size/Format

(integers)

byte

Byte-length integer

8-bit two's complement

short

Short integer

16-bit two's complement

int

Integer

32-bit two's complement

long

Long integer

64-bit two's complement

(real numbers)

float

Single-precision floating point

32-bit IEEE 754

double

Double-precision floating point

64-bit IEEE 754

(other types)

char

A single character

16-bit Unicode character

boolean

A boolean value

true or false

Type de base


Types 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 -2^31 to 2^31-1

long 64 bits -2^63 to 2^63-1

Logical

Textual

one bit : true or false

char 16bits 0 to 65535


Concept de Variable

Définition : un élément d’information identifié par un nom

  • On doit explicitement indiquer le nom et le type d’une variable

  • On utilise le nom pour faire référence à l’information que la variable contient

  • Le type détermine les valeurs licites pour la variable et les opérations autorisées


Concept de Variable

  • Pour donner un nom et un type à une variable il faut la déclarer

    typename

  • Une variable a une portée

    • la section de code ou le nom de la variable peut être utilisé


Variable : déclaration

int compteur ;

float prixHt ;

char aChar ;

boolean fin ;


Variable : valeur par défaut


Variable : affectation d’une valeur

  • Une affectation permet de donner une nouvelle valeur à une variable

  • La valeur précédente est PERDUE

    int compteur ;

    compteur = 3 ;


Variable : affectation d’un valeur

int r = 2 ;

double pi ; pi = 3.14 ;

double perimetre = 2*pi*r ;

//déclarer ET affecter

char c = ’c’ ;

boolean pair = true;

int compteur ;

compteur = compteur +1 ;


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.40282e+38

Le caractère est : S

fin est : true


Affectation 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


Affectation 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 ; // !!


Affectation 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 ;


Variable final

  • La valeur d’une 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;


Operator

Use

Description

+

op1 + op2

Adds op1 and op2

-

op1 - op2

Subtracts op2 from op1

*

op1 * op2

Multiplies op1 by op2

/

op1 / op2

Divides op1 by op2

%

op1%op2

Computes the remainder of dividing op1 by op2

Opérateur Arithmétique


Opérateur Arithmétique

  • Le résultat peut dépendre du contexte

    25 / 3 -----> 8

    //pour la division entière de 25 par 8

    25.0 / 3 -----> 8.3333333333333334

    25 / 3.0 -----> 8.3333333333333334

    25 % 3 -----> 1

    //pour le reste de la division de 25 par 8

    25 % 3.1 -----> 0.1999999999999993

    // 25=3.1*8 + 0.2


Operateur

Use

Returns true if

>

op1 > op2

op1 is greater than op2

>=

op1 >= op2

op1 is greater than or equal to op2

<

op1 < op2

op1 is less than op2

<=

op1 <= op2

op1 is less than or equal to op2

==

op1 == op2

op1 and op2 are equal

!=

op1 != op2

op1 and op2 are not equal

Opérateur Relationnel


Opérateur Conditionnel


Créer votre première application


Le premier programme, Hello, affiche simplement le texte "Hello !" 

  • Créer un fichier sourceHello.java

    Un fichier source contient du texte, écrit en Java

  • Compiler le source en fichier bytecodeHello.class

    Le compilateurjavac, traduit le texte source en instructions compréhensibles par la MachineVirtuelle 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


Write 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 d’une JVM, elle peut comprendre le bytecode


Créer le fichier source Java Hello.java

class Hello {

public static void main(String[] args) {

System.out.println("Hello !");

}

}


Compiler le fichier source

> javac Hello.java

Si la compilation réussit

  • le fichier Hello.class est créer

  • Ce fichier contient le bytecode


Interpréter et Exécuter l'application

> java Hello

L'argument de l'interprète est

  • le nom de la classe à exécuter

  • ce n’est pas le nom du fichier

    Faire la distinction M/m


Disséquons l'application "Hello"

  • Définir une classe

  • Définir la méthode main

  • Utiliser des méthodes


Définir la classe Hello

public class Hello {

public static void main(String[] args) {

System.out.println("Hello !");

}

}


Définir la méthodemain

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


Utiliser d’autres méthodes …

public class Hello {

public static void main(String[] args) {

System.out.println("Hello !");

}

}


  • Login