Académique Documents
Professionnel Documents
Culture Documents
Ensembles
Ensemble : un ensemble est un regroupement d'objets de même type, chaque objet n'étant présent
qu'une seule fois. En informatique on n'utilise que des ensembles finis (ensembles dont le
nombre d'éléments est fini).
: ensemble vide ne contenant aucun élément.
: symbole d'appartenance d'un élément à un ensemble donné; on dit qu'un objet x appartient à
l'ensemble A le fait que x se trouve dans la liste des éléments de A et l'on écrit x A.
: ensemble vide ne contenant aucun élément.
P(E) : Notation pour l'ensemble des parties d'un ensemble, c'est l'ensemble de tous les sous-
ensembles que l'on peut construire à partir de E y compris E et l'ensemble vide. On montre que
si E possède n éléments, P(E) possède alors 2n éléments. Exemple : si E = {0,1} on a alors
P(E) = { {0}, {1}, {0,1}, }
Cardinal : le cardinal d'un ensemble E est le nombre d'éléments de cet ensemble, noté card(E).
(union) : A B est le sous-ensemble de P(E) contenant tous les éléments de A ou bien tous les
éléments de B, on écrit A B = { x E / (x A) ou (x B) }
En gris l'ensemble A B
(intersection) : A B est le sous-ensemble de P(E) contenant tous les éléments de A et aussi tous
les éléments de B, on écrit A B = { x E / (x A) et (x B) }
CE (complémentaire) : CE(A ) est le sous-ensemble de P(E) contenant tous les éléments de E qui ne
sont pas dans A, on écrit CE(A ) = { x E / (x A) }
- (différence) : A - B est le sous-ensemble de P(E) contenant tous les éléments de A privé de ceux
de A B, on écrit A - B = { x E / (x A) et (x B) }
En gris l'ensemble A - B
Produit cartésien d'ensemble : Soient E et F deux ensembles non vides, on note E x F leur produit
cartésien E x F = { (x , y) / (x E) et (y F) }
: quantificateur universel signifiant "pour tout", exemple x ( x E ) /…. se lit <quelque soit x
appartenant à l'ensemble E tel que….>
: quantificateur existenciel signifiant "il existe au moins un", exemple x ( x E ) /…. se lit <
il existe au moins un x appartenant à l'ensemble E tel que ….>
: quantificateur existenciel unique signifiant "il existe uniquement un", exemple x ( x E )
/…. se lit < il existe un seul x appartenant à l'ensemble E tel que ….>
Symboles
: implication logique.
: équivalence logique.
Fonctions
Fonction : Soient E et F deux ensembles non vides, tout procédé permettant d'associer un élément
de E à un élément unique au plus, dans l'ensemble F est appelé une correspondance notée par
exemple f, ou aussi une fonction f de E vers F.
On note ainsi f : E F , E est appelé ensemble de départ de la fonction f, F est appelé
ensemble d'arrivée de la fonction f.
Image d'un élément par une fonction : si f est une fonction de E vers F, x un élément de E, et y
l'unique élément de F associé à x par la fonction f, on écrit y = f(x) et l'on dit que f(x) est l'image
dans F de l'élément x de E, on dit aussi que x est l'antécédent de y.
On note ainsi : f : x f(x)
soit x E , y ( y F ) / y = f(x) } et
{il existe au plus un y de F répondant à cette
définition.}
Domaine de définition d'une fonction : si f est une fonction de E vers F, le sous-ensemble des
éléments x de l'ensemble de départ E ayant une image dans F par la fonction f, est appelé le
domaine de définition de la fonction f, noté Dom(f).
Application : Une application est une fonction dans laquelle tous les éléments de l'ensemble de
départ ont une image dans F par la fonction f. Ci-après deux schémas figurant la différence
entre application et fonction.
Remarque : toute fonction devient une application lorsque l'on prend comme ensemble de départ
son domaine de définition, nous appelons restriction de f à Dom notée fDom cette application
En informatique, par abus de langage nous utiliserons indifféremment les dénomination application
et fonction, car nous ne considérons que des fonctions qui portent sur leur domaine de définition.
Application injective (injection) : Lorsque deux éléments distincts de l'ensemble de départ E ont
toujours deux images distinctes dans l'ensemble d'arrivée, on dit que l'application est injective.
On écrit :
x1 ( x1 E ), x2 ( x2 E )
x1 x2 f(x1) f(x2)
ou la contrapposée :
f(x1) f(x2) x1 x2
card(E) card(F)
y ( y F ) , x ( x E ) / y = f(x)
card(E) card(F)
On écrit :
y ( y F ) , x ( x E ) / y = f(x)
card(E) card(F)
Remarques : une application bijective est une application qui est à la fois surjective et injective.
Comme nous travaillons en informatique avec des ensembles finis dire qu'il existe une bijection
d'un ensemble E vers un ensemble F revient à dire qu'ils le même cardinal (le même nombre
d'éléments).
Suite récurrente : une suite d'éléments u0 , u1 , … , un est dite récurrente lorqu'il existe une relation
fonctionnelle entre un terme quelconque un et les termes qui le précèdent u0 , u1 , … , un-1, notée
ainsi : un = f(u0 , u1 , … , un-1).
Démonstration par récurrence : soit une proposition P(n) dépendant d'une variable entière n.
On suppose que P(1) est vérifiée
Si l'on montre que pour un entier n quelconque supérieur à 1, P(n) est vraie implique que
P(n+1) est vraie on en conclu que : n, n 1, P(n) est vraie. En effet P(1) vraie P(2)
vraie, mais P(2) vraie P(3) vraie etc…
Structures algébriques
Loi de composition interne : toute application f, telle que f : E x E E, est appelée "loi de
composition interne" dans E. Par exemple la loi + dans N, + : N x N N, la notation
fonctionnelle s'écrit + (a,b) y = +(a,b) on la dénomme notation préfixée pour une loi. Dans
certains cas on préfère une autre notation dite notation infixée pour représenter l'image du
couple (a,b) par une loi. Par exemple, la notation infixée de la loi + est la suivante : + (a,b)
y = a + b. D'une manière générale, pour une loi ¤ sur une ensemble E nous noterons a ¤ b
l'image ¤(a,b) du couple (a,b) par la loi ¤.
Symétrique : On dit qu'un élément x d'un ensemble E est symétrisable (ou qu'il possède un
symétrique unique) pour la loi ¤ sur E (nous notons x' le symétrique de x) lorsque cette loi possède
un élément neutre e et que : x ( x E ), x' ( x' E ) / x' ¤ x = x ¤ x' = e. Par exemple dans
l'addition dans Z l'entier -x est le symétrique de l'entier x, car nous avons x + (-x) = (-x) + x =0
(l'entier 0 est l'élément neutre de la loi +)
Absorbant : On dit qu'un élément a d'un ensemble E est absorbant pour la loi ¤ lorsque : x ( x
E ), x ¤ a = a ¤ x = a. Par exemple dans Z l'entier 0 est absorbant pour la multiplication.
Idempotent : Un élément a d'une loi ¤ est dit idempotent lorsque a ¤ a = a. Par exemple dans la loi
sur P(E) (union de deux sous-ensembles de l'ensemble E non vide), tous les éléments de P(E)
sont idempotents, en effet : A ( A P(E) ),
if ( P ) E1; else E2 ;
if P then E1 else E2
( attention défaut, pas de
Si P alors E1 sinon E2 Fsi ( attention défaut, pas de
fermeture !)
fermeture !)
while ( P ) E ;
while P do E
Tantque P faire E Ftant ( attention, pas de fermeture)
( attention, pas de fermeture)
do E; while ( !P )
répeter E jusquà P repeat E until P
en C# :
System.Console.Read( )
System.Console.ReadLine( )
read(fichier,x1,x2,x3......,xn )
lire (x1,x2,x3......,xn ) readln(x1,x2,x3......,xn )
en Java :
Get(fichier)
System.in.read( )
System.in.readln( )
en C# :
System.Console.Write( )
System.Console.WriteLine( )
write(fichier,x1,x2,x3......,xn )
ecrire (x1,x2,x3......,xn ) writeln(x1,x2,x3......,xn )
en Java :
Put(fichier)
System.out.print( )
System.out.println( )
int en C#
Z (entiers relatifs) integer int en Java
double en C# et Java
Q (rationnels) real
double en C# et Java
R (réels) real
Boolean en C#
{ Vrai , Faux } (logique) boolean bool en Java
char en C# et Java
caractère char
+,-,/,*
+,-,/,* +,-,/,*
> , < , = , !=
>,<,=, > , < , = ,<>
>= , <=
, >= , <=
! , && , ||
, , not , and , or
Est Un
Lorsque vous spécifiez un problème en termes d'objets et que vous analysez les relations entre
un Objet1 et un Objet2, si vous énoncez une phrase du genre : << Objet2 est un Objet1 qui
possède les particularités supplémentaires.....>> , vous devez implémenter la notion d'héritage
entre la classe d'Objet1 notée Classe1 et celle d'Objet2 notée Classe2.
Lorsque vous construisez une classe dérivée (héritant de) d'une autre classe, vous implémentez
le concept "EST UN".
A Un
Lorsque vous spécifiez un problème en termes d'objets et que vous analysez les relations entre
un Objet1 et un Objet2, si vous énoncez une phrase du genre : << Objet2 a un (ou possède un)
Objet1 .....>> , vous devez implémenter la notion d'agrégation entre la classe d'Objet1 notée
Classe1 et celle d'Objet2 notée Classe2.
Lorsque vous construisez dans une classe un attribut d'une autre classe, vous implémentez le
concept "A UN".
Prenons en exemple trois classes Moteur , Vehicule et Voiture représentant chacune les
concepts physiques des entités réelles de moteur, de véhicule et de voiture dans le vocabulaire
courant :
Décrivons les relations entre les entités physiques par une phrase :
Une voiture est un véhicule qui a un seul moteur, qui a quatre roues, qui a
un nombre quelconque de soudures et un nombre quelconque de rivets.
Nous avons donc des objets fortement liés à la voiture (rivets, soudures) et des objets faiblement
liés à cette même voiture. En terme informatique nous parlerons d'agrégation forte pour les
objets fortement liés et d'agrégation faible pour ceux qui sont liés faiblement.
UML n'étant qu'une notation voici ci-dessous comment en Delphi par exemple les notions
d'association, d'agrégation et de composition sont implantables :
Un exemple d'implantation des diagrammes précédents sous forme d'une Unit en Delphi :
unit Unit1 ;
interface
type
vehicule = class
end;
moteur = class
end;
roue = class
end;
rivet = class
end;
soudure = class
end;
numSerie = class
end;
implementation
{ voiture }
constructor voiture.Create ;
begin
EnsRivets := rivet.Create ; // composition (agrégation forte)
EnsSoudure := soudure.Create ; //composition (agrégation forte)
end;
destructor voiture.Destroy ;
begin
EnsRivets.Free ;
EnsSoudure.Free :
inherited;
end;
end.
Ces composants sont les outils minimum que l'on trouve dans une interface interactive. Ils sont
présentés avec le code qui les engendre sans avoir à passer par le l'environnement RAD; le
lecteur est incité à comparer les similitudes et les différences selon le langage d'implantation, il
pourra aussi réutiliser les lignes fournies lorsqu'il voudra générer dynamiquement de tels
composants dans son programme pendant l'exécution.
Le bouton poussoir
Langage Delphi : bouton poussoir - classe TButton
Une unit pour afficher un TButton dans une fiche Form1 :
unit Ubutton ;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls ;
type
TForm1 = class (TForm)
procedure FormCreate( Sender: TObject) ;
private
{ Déclarations privées }
Button1 : TButton ;
public
{ Déclarations publiques }
end;
var
Form1 : TForm1 ;
implementation
{$R *.dfm}
end.
Deux classes minimales en Java-swing pour afficher un JButton dans une fiche nommée Fen de
type Fiche héritant des JFrame :
import java.awt.* ;
import javax.swing.* ;
public Fiche ( ) {
contentPane = ( Container ) this .getContentPane ( );
contentPane.setBackground ( SystemColor.info );
jButton.setBackground ( Color.cyan );
jButton.setText ("Bonjour");
namespace ProgTest
{
public class WinForm : System .Windows.Forms.Form
{
private System .Windows.Forms.Panel panel1 ;
private System .Windows.Forms.TextBox textBox1 ;
private System .Windows.Forms.Button button1 ;
public WinForm ( ) {
this .button1 = new System .Windows.Forms.Button ( );
this .button1.SetBounds ( 15, 70,60, 25 );
this .button1.Text = "Ok";
this .button1.BackColor = System .Drawing.Color.Aquamarine ;
// WinForm
this .BackColor = System .Drawing.Color.Moccasin ;
this .Controls.Add (this .button1 );
this .Text = "WinForm";
this .SetBounds ( 100,80,270,165 );
}
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls ;
type
TForm1 = class (TForm)
procedure FormCreate( Sender: TObject) ;
private
Memo1 : TMemo ;
public
{ Déclarations publiques }
end;
var
Form1 : TForm1 ;
implementation
{$R *.dfm}
end.
Rappelons que la classe swing JTextArea délègue la gestion des barres de défilement à un objet conteneur dont
c'est la fonction le JScrollpane, ceci a lieu lorsque le JTextArea est ajouté au JScrollpane.
// les déclarations :
JScrollPane jScrollPane1 = new JScrollPane( );
JTextArea jTextArea1 = new JTextArea( );
// les déclarations :
JTextArea jTextArea1 = new JTextArea( );
JScrollPane jScrollPane1 = new JScrollPane( jTextArea1 );
Deux classes minimales en Java-swing pour afficher le JTextArea dans une fiche :
import java.awt. * ;
import javax.swing. * ;
public Cadre1 ( )
{
this .setSize (new Dimension ( 271, 165 ));
this .setTitle ("Titre du cadre");
this .setDefaultCloseOperation ( EXIT_ON_CLOSE );
contentPane = ( JPanel ) this .getContentPane ( );
contentPane.setBackground ( SystemColor.info );
jScrollPane1.setBounds ( 30, 32, 177, 85 );
jTextArea1.setBackground ( Color.cyan );
jTextArea1.append ("Bonjour\n");
jTextArea1.append ("texte multi-ligne\n");
jTextArea1.append ("....\n");
jTextArea1.append ("....\n");
jTextArea1.append ("....\n");
jTextArea1.append ("Fin.\n");
contentPane.setLayout (null);
this .getContentPane ( ) .add ( jScrollPane1, null);
jScrollPane1.getViewport ( ) .add ( jTextArea1, null);
}
}
Deux classes minimales en C# pour afficher le TextBox en mode multi-ligne dans une fiche :
using System ;
using System .Drawing ;
using System .Windows.Forms ;
namespace ProgTest
{
class WinForm : System .Windows.Forms.Form
{
private System .Windows.Forms.TextBox textBox1 ;
public WinForm ( ) {
// WinForm:
this .Text = "WinForm";
this .Controls.Add (this .textBox1 );
this .ResumeLayout ( false );
}
class Application1
{
static void Main ( string[ ] args ) {
WinForm F = new WinForm ( );
F.BackColor = System .Drawing.Color.Bisque ;
Application.Run ( F );
}
}
}
La liste de chaînes
Une unit pour visualiser un TListBox déposé sur une fiche Form1, le TListBox contient des
chaînes et il est construit dynamiquement sur la fiche :
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls ;
type
TForm1 = class (TForm)
procedure FormCreate( Sender: TObject) ;
private
{ Déclarations privées }
ListBox1 : TListBox ;
public
{ Déclarations publiques }
end;
var
Form1 : TForm1 ;
implementation
{$R *.dfm}
end.
Rappelons que la classe swing JList est une classe d'affichage d'élément de type object, le stockage effectif est
délégué à un objet modele de type DefaultListModel :
// les déclarations :
DefaultListModel modele = new DefaultListModel ( );
JList jList1 = new JList ( );
Rappelons que la classe swing JList délègue la gestion de la barre de défilement verticale à un objet conteneur
dont c'est la fonction le JScrollpane, ceci a lieu lorsque le JList est ajouté au JScrollpane. Le mécanisme est le
même que celui qui est décrit dans le fonctionnement du JTextArea avec ses barres de défilement, par exemple
en ajoutant le JList au JScrollpane:
// les déclarations :
JScrollPane scrollPane = new JScrollPane( );
JList jList1 = new JList ( );
public Fiche ( )
{
contentPane = ( Container ) this.getContentPane ( );
contentPane.setBackground ( SystemColor.info );
modele.addElement ("avion");
modele.addElement ("voiture");
modele.addElement ("bateau");
modele.addElement ("fusée");
modele.addElement ("tricycle");
modele.addElement ("sous-marin");
jList1.setModel ( modele );
jList1.setBackground ( Color.pink );
JScrollPane scrollPane = new JScrollPane ( );
scrollPane.setBounds ( 64,32,112,70 );
scrollPane.getViewport ( ).add ( jList1 );
namespace ProgTest
{
public class WinForm : System.Windows.Forms.Form
{
private System.Windows.Forms.ListBox listBox1 ;
public WinForm ( ) {
// listBox1
this .listBox1 = new ListBox ( );
this .listBox1.Items.AddRange (new object [ ] {
"avion" ,
"voiture" ,
"bateau" ,
"fusée" ,
"tricycle" ,
"sous-marin"
}
);
this .listBox1.SetBounds ( 64,32,112,82 );
// WinForm
this .BackColor = System .Drawing.Color.Moccasin ;
this .Controls.Add (this .listBox1 );
this .Text = "WinForm";
this .SetBounds ( 100,80,270,165 );
}
class Application1
{
static void Main ( string [ ] args ) {
WinForm F = new WinForm ( );
F.BackColor = System .Drawing.Color.Bisque ;
Application.Run ( F );
}
}
}
Une unit pour visualiser un TTreeView déposé sur une fiche Form1 construit
dynamiquement sur la fiche :
unit Utreeview ;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls ;
type
TForm1 = class (TForm)
procedure FormCreate( Sender: TObject) ;
private
{ Déclarations privées }
TreeView1 : TTreeView ;
public
{ Déclarations publiques }
end;
var
Form1 : TForm1 ;
implementation
{$R *.dfm}
end.
La classe swing JTree est un affichage arborescent donc chaque noeud est lui-même un objet
de type DefaultMutableTreeNode qui se construisent comme des arbres classiques.
La classe swing JTree délègue la gestion de la barre de défilement verticale à un objet conteneur dont c'est la
fonction le JScrollpane, comme pour le JList et le JTextArea par ajout au JScrollpane.
Deux classes minimales en Java-swing pour visualiser un JTree rattaché à un objet de gestion
de barres JScrollPane nommé treeView :
import java.awt.* ;
import javax.swing.* ;
import javax.swing.tree.* ;
public Fiche ( ) {
contentPane = ( Container ) this .getContentPane ( );
contentPane.setBackground ( SystemColor.info );
contentPane.setLayout (null);
using System ;
using System .Windows.Forms ;
namespace ProgTest
{
public class WinForm : System .Windows.Forms.Form
{
private System .Windows.Forms.TreeView treeView1 ;
public WinForm ( ) {
// treeView1
this .treeView1 = new System .Windows.Forms.TreeView ();
this .treeView1.SetBounds ( 50,10,150,120 );
this .treeView1.Nodes.Add ("un");
this .treeView1.Nodes.Add ("deux");
this .treeView1.Nodes.Add ("trois");
this .treeView1.Nodes.Add ("quatre");
this .treeView1.Nodes[0].Nodes.Add ("un1");
this .treeView1.Nodes[1].Nodes.Add ("deux1");
this .treeView1.Nodes[1].Nodes[0].Nodes.Add ("deux11");
this .treeView1.Nodes[1].Nodes.Add ("deux2");
this .treeView1.Nodes[2].Nodes.Add ("trois1");
// WinForm
this .BackColor = System .Drawing.Color.Moccasin ;
this .Controls.Add (this .treeView1 );
this .Text = "WinForm";
this .SetBounds ( 100,80,270,165 );
}
class Application1
{
static void Main ( string [ ] args ) {
WinForm F = new WinForm ( );
F.BackColor = System .Drawing.Color.Bisque ;
Une unit pour visualiser un TPanel déposé sur une fiche Form1, le TPanel contient un
TButton et un TEdit, ces trois contrôles sont construits dynamiquement sur la fiche :
unit Upanel ;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls ;
type
TForm1 = class (TForm)
procedure FormCreate( Sender: TObject) ;
private
Panel1 : TPanel ;
Button1 : TButton ;
Edit1 : TEdit ;
public
{ Déclarations publiques }
end;
var
Form1 : TForm1 ;
implementation
{$R *.dfm}
end.
La classe swing JPanel est une classe conteneur d'autres composants swing ou bien Awt.
Deux classes minimales en Java-swing pour visualiser un JPanel déposé sur une fiche
nommée Panel héritant des JFrame, le JPanel contient un JButton et un JTextField, ces trois
contrôles sont construits dynamiquement sur la fiche Panel :
import java.awt. * ;
import java.awt.event. * ;
import javax.swing. * ;
public Fiche ( ) {
this .setBounds ( 100,80,270,165 );
this .setDefaultCloseOperation ( EXIT_ON_CLOSE );
this .setTitle ("Fiche JFrame swing");
contentPane = ( Container ) this .getContentPane ( );
contentPane.setBackground ( SystemColor.info );
contentPane.setLayout (null);
//le jPanel
jPanel.setBackground ( Color.lightGray );
jPanel.setBounds ( 20, 10,200, 100 );
jPanel.setLayout (null);
//le jButton
jButton.setBounds ( 15, 70,60, 25 );
//le jTextField
jTextField.setBounds ( 15, 13,100, 20 );
jTextField.setText ("Salut");
namespace ProgTest
{
public class WinForm : System .Windows.Forms.Form
{
private System .Windows.Forms.Panel panel1 ;
private System .Windows.Forms.TextBox textBox1 ;
private System .Windows.Forms.Button button1 ;
public WinForm ( )
{
this .panel1 = new System .Windows.Forms.Panel ( );
this .textBox1 = new System .Windows.Forms.TextBox ( );
this .button1 = new System .Windows.Forms.Button ( );
// panel1
this .panel1.BackColor = System .Drawing.Color.Silver ;
this .panel1.Controls.Add (this .button1 );
// textBox1
this .textBox1.SetBounds ( 15, 13,100, 20 ) ;
this .textBox1.TabIndex = 0 ;
this .textBox1.Text = "Salut";
// button1
this .button1.SetBounds ( 15, 70,60, 25 );
this .button1.TabIndex = 1 ;
this .button1.Text = "Ok";
// WinForm
this .BackColor = System .Drawing.Color.Moccasin ;
this .Controls.Add (this .panel1 );
this .Text = "WinForm";
this .SetBounds ( 100,80,270,165 );
}
class Application1
{
static void Main ( string[ ] args ) {
WinForm F = new WinForm ( );
F.BackColor = System .Drawing.Color.Bisque ;
Application.Run ( F );
}
}
}