Planche 1

Les petits devant, les grands derrière
Jean-Jacques.Levy@inria.fr
http://para.inria.fr/~levy
tel: 01 39 63 56 89

Catherine Bensoussan
cb@lix.polytechnique.fr
Aile 00, LIX
tel: 34 67

http://w3.edu.polytechnique.fr/informatique/


Planche 2

Plan

  1. Classes
  2. Objets
  3. Tris élémentaires
  4. Recherche en table élémentaire
  5. Graphique

Planche 3

Classes


Planche 4

Visibilité des noms dans les classes


Planche 5

Objets


  class Date {
  
    int    j; // jour    
    int    m; // mois       
    int    a; // annee      
  }
  
  class BogueVirtuel {
    public static void main (String[ ] args) {
  
      Date an0 = new Date();
      an0.j = 1; an0.m = 1; an0.a= 1970;
  
      Date a2k = new Date();
      a2k.j = 1; a2k.m = 1; a2k.a= 2000;
      
      System.out.println (an0.j + "/" + an0.m + "/" + an0.a);
      System.out.println (a2k.j + "/" + a2k.m + "/" + a2k.a);
    }
  }

Planche 6

Objets -- 2


Planche 7

Objets -- 3

Exemple

class Date {
  int    j,  m,  a; 
  static int instances = 0;

  Date (int jour, int mois, int annee) {
    j = jour; m = mois; a = annee; ++instances;
  }

  static Date an0 = new Date (1, 1, 1970);
}

Planche 8

Objets -- 4


class Test {
  Date premierObjet = new Date (25, 05, 2000);
  Date berlin = new Date (10, 11, 1989);
}


Planche 9

Objets -- 5

Deux méthodes utiles à définir dans une classe


class Date {
  ...  
  public boolean equals (Date d) {
    return j == d.j && m == d.m && a == d.a;
  }

  public String toString () {
    return j + "/" + m + "/" + a;
  }
Par convention, toString est appelé par + quand il a le sens de la concaténation des chaînes de caractères, et


System.out.print (x);
équivaut à


System.out.print (x.toString());
On peut donc écrire System.out.println (d) dans le cas des dates.


Planche 10

Recherche d'un minimum dans un tableau


static int minimum (int[ ] a) {
    r = Integer.MAX_VALUE;
    for (i=0; i < a.length; ++i)
        if ( a[i] < r )
            r = a[i];
    return r;
}
Ca marche pour le cas vide. (Il faut toujours y penser!).


Planche 11

Tri sélection

Donné: un tableau
a de n éléments.

Résultat: le même tableau trié en ordre croissant, c'est à dire
ai £ aj pour 0 £ i < j < n.

Algorithme:




Planche 12

Echange de deux éléments


  int x = 1, y = 2;

  int aux = x;
  x = y;
  y = aux;
Peut-on faire mieux?


Planche 13

Tri sélection -- le programme


static void triSelection (int[ ] a) {
    int   i_min, t;

    for (int i = 0; i < a.length - 1; ++i) {
        i_min = i;
        for (int j = i+1; j < a.length; ++j)
           if (a[j] < a[i_min])
               i_min = j; 
        t = a[i_min]; a[i_min] = a[i]; a[i] = t;
    }
}

Planche 14

Tri par insertions

Comme pour trier un paquet de cartes


static void triInsertion (int[ ] a) {
  int   j, v;

  for (int i = 1; i < a.length; ++i) {
      v = a[i]; j = i;
      while (j > 0  &&  a[j-1] > v) {
          a[j] = a[j-1]; 
          --j;
      }
      a[j] = v;
  }
}

Planche 15

Le tri Shell [D. L. Shell 1959]


static void triShell (int[ ] a) {

  int h = 1; do h = 3*h + 1; while ( h <= a.length );
  do {
      h = h / 3;
      for (int i = h; i < a.length; ++i)
          if (a[i] < a[i-h]) {
              int   v = a[i], j = i;
              do {
                  a[j] = a[j-h];
                  j = j - h;
              } while (j >= h  &&  a[j-h] > v);
              a[j] = v;
          }
  } while ( h > 1);
}
Pas plus que O(n3/2) comparaisons !!
Bon pour de gros fichiers (celui du noyau Maple)



Planche 16

Recherche en table

Une table est une ensemble de paires
(k, d)k est une clé et d une donnée. Par exemple, k est un nom de personne, d est son numéro de téléphone (ou son adresse e-mail).

On cherche une clé dans une table pour obtenir la donnée correspondante.

Recherche séquentielle


static int recherche (String x, String[ ] nom, int[ ] tel) {

  for (int i = 0; i < nom.length; ++i)
      if (x.equals(nom[i]))
          return tel[i];
  return -1;
}

Planche 17

Recherche en table -- bis



Planche 18

Recherche dichotomique en table

On suppose la table ordonnée en ordre croissant.

=0ex

static int rechercheDichotomique (String x, String[ ] nom, int[ ] tel) {
  int   i, cmp, g = 0, d = nom.length-1;
  do {
      i = (g + d) / 2;
      cmp = x.compareTo(nom[i]);
      if (cmp == 0)
          return tel[i];
      if (cmp < 0)
          d = i - 1;
      else 
          g = i + 1;
  } while (g <= d);
  return -1;
}
Complexité? Peut-on aller plus vite?
interpolation, hachage


Planche 19

Quelques primitives graphiques


// variables globales 
static Grafport gc;
static int background, foreground, hilite, hilite2;
static int epsilonX, epsilonY, pasX, pasY, x0, y0;

static void ouvrirGraphique (int n, int valeurMax) {

  g = new Grafport();

  int sizeX = Math.min(500, (n+5) * 10),
      sizeY = Math.min(400, (valeurMax+5) * 5);

  Rect r = new Rect();
  r.left = 10; r.right = (short)(r.left + sizeX);
  r.top = 10; r.bottom = (short)(r.bottom + sizeY);
  g.setDrawingRect(r);

Planche 20

Graphique en Java -- suite


  foreground = g.redColor;   background = g.Whitecolor;
  hilite = g.blueColor;   hilite2 = g.yellowColor;

  epsilonX = Math.max(7, sizeX / (n + 3));
  epsilonY = Math.max(20, sizeY / valeurMax);
  pasX = Math.max (1, (sizeX - 2 * epsilonX) / n);
  pasY = Math.max (1, (sizeY - epsilonY) / valeurMax);
  x0 = epsilonX; y0 = sizeY - epsilonY;
}

static void tracerElement (int[ ] a, int i, int color) {
  int xi = x0 + i * pasX;
  int yi = y0 - v[i] * pasY;
  g.foreColor (color);

  Rect r = new Rect();
  g.setRect(r, xi, yi, xi+pasX, y0);
  g.paintRect (r);
}

Planche 21

Graphique en Java -- suite

La documentation sur Maclib se trouve en
Informations diverses sur la page Web du cours http://w3.edu.polytechnique.fr/informatique/

Cette bibliothèque est une version simplifiée de AWT. En outre, elle est compatible avec la même bibliothèque en C, Pascal ou ML; elle existe sur stations Unix et sur MacIntosh.


Planche 22

Modules graphiques

MacLib est un sous-ensemble de AWT suffisant pour notre cours (écrit par Ph. Chassignet)


  blackColor                       blueColor 
  redColor                         cyanColor 
  greenColor                       magentaColor 
  whiteColor                       yellowColor 
  patCopy                          patXor 
  addPt(Point, Point)              backColor(Color) 
  backColor(int)                   button() 
  buttonState()                    charWidth(char) 
  drawChar(char)                   drawLine(int, int, int, int) 
  drawString(String)               drawText(char[], int, int) 
  emptyRect(Rect)                  equalPt(Point, Point) 
  equalRect(Rect, Rect)            eraseArc(Rect, int, int) 
  eraseOval(Rect)                  erasePolygon(Point[], int) 
  eraseRect(Rect)                  eraseRoundRect(Rect, int, int) 
  foreColor(Color)                 foreColor(int) 
  frameArc(Rect, int, int)         frameOval(Rect) 
  framePolygon(Point[], int)       frameRect(Rect) 
  frameRoundRect(Rect, int, int)   getClick(Point) 
  getDrawingRect(Rect)             getKey() 
  getMouse(Point)                  getPen(Point) 
  getPort()                        getTextRect(Rect) 
  hideAll()                        initMacLib() 
  initQuickDraw()                  insetRect(Rect, int, int) 

Planche 23

Modules graphiques


  invertArc(Rect, int, int)        invertCircle(int, int, int) 
  invertOval(Rect)                 invertPolygon(Point[], int) 
  invertRect(Rect)                 invertRoundRect(Rect, int, int) 
  keyPressed()                     line(int, int) 
  lineTo(int, int)                 move(int, int) 
  moveTo(int, int)                 newPointArray(int) 
  offsetRect(Rect, int, int)       paintArc(Rect, int, int) 
  paintCircle(int, int, int)       paintOval(Rect) 
  PaintOval(Rect)                  paintPolygon(Point[], int) 
  paintRect(Rect)                  paintRoundRect(Rect, int, int) 
  penMode(int)                     penNormal() 
  penSize(int, int)                pt2Rect(Point, Point, Rect) 
  ptInRect(Point, Rect)            RGBBackColor(RGBColor) 
  RGBForeColor(RGBColor)           sectRect(Rect, Rect, Rect) 
  setDrawingRect(Rect)             setPort(GrafPort) 
  setPt(Point, int, int)           setRect(Rect, int, int, int, int) 
  setText(Frame)                   setTextRect(Rect) 
  showDrawing()                    showText() 
  stringWidth(String)              subPt(Point, Point) 
  sysBeep(int)                     textWidth(char[], int, int) 
  tickCount()                      trackMouse(Point) 
  unionRect(Rect, Rect, Rect)      waitClickDown() 
  waitClickUp() 

This document was translated from LATEX by HEVEA.