Académique Documents
Professionnel Documents
Culture Documents
PROFES
MATION
Les Objectifs
1. Global
Etre en mesure de Modéliser différents problèmes de la vie courante et y apporter les
solutions informatiques.
2. Spécifique
- Être capable de concevoir des algorithmes selon problème à résoudre.
- Être capable d’implémenter des algorithmes de différentes sources dans n’importe quel
langage de programmation de son choix selon le besoin exprimé.
Les langages de programmation et moteur de Base des données que nous allons utiliser
en pratique pour une meilleure compréhension de ce cours sont:
• Le VB.NET ;
• le Langage C
BIBLIOGRAPHIE :
Livres :
3. Barbara Doyle, Visual C#.net programming: from problem Analysis to Program Design,
THOMSON, Boston, 2004.
Cours :
1.0 NOTION
QUELQUES APPROCHES
1.2 La programmation
Un Programme alors c'est une suite des instructions enregistrées dans la mémoire d'un
ordinateur lui permettant d'exécuter des tâches données
Une première démarche consiste à étudier la syntaxe précise d’un langage donné puis à utiliser
ce langage pour écrire le programme voulu. Cela laisse supposer alors qu’il existe autant de
façon de résoudre le problème qu’il existe de langages différents. Une autre démarche consiste
à exploiter le fait que la plupart des langages se fondent sur des principes communs tels que
ceux que nous venons d’évoquer et que l’on peut alors utiliser pour résoudre le problème
donné. Encore faut-il disposer d’un moyen d’exprimer ces concepts.
un pseudo-langage (certains parlent de langage algorithmique), lequel nous permettra
d’utiliser les concepts fondamentaux pour rédiger (sur papier) de véritables programmes qu’il
vous sera ensuite facile de transposer dans la plupart des langages actuels.
Remarque
● Bien spécifié,
● Facile à tester
● Correct
● Efficace
Problème Algorithme
(Pseudo-code)
Si l’algorithme est bien écrit sans faute logique, l’étape suivante ne doit poser aucun problème
conceptuel. Il n’y a qu’à effectuer une simple traduction dans un langage de
programmation donné.
(Pseudo-code) (Langage)
Cette phase est La compilation qui va transformer le programme lisible par un humain vers un
langage compréhensible par une machine.
Désigne les modifications apportées au programme, après sa mise en œuvre, pour en corriger
les fautes, en améliorer son efficacité ou d’autres caractéristiques.
Si un ordinateur peut effectuer des tâches aussi variées, c’est essentiellement parce qu’il est
possible de le programmer. Effectivement, l’ordinateur est capable de mettre en mémoire un
programme qu’on lui fournit ou, plus souvent qu’on lui désigne (en général, on fournira le
moyen de trouver le programme, plutôt que le programme lui-même) puis de l’exécuter.
Plus précisément, un ordinateur possède un répertoire limité d’opérations élémentaires qu’il
sait exécuter très rapidement. Un programme est alors constitué d’un ensemble de directives,
Supposez qu’un enseignant dispose d’un ordinateur et d’un programme de calcul de moyennes
de notes. Pour fonctionner, un tel programme nécessite qu’on lui fournisse les notes dont on
cherche la moyenne. Nous les appellerons informations données ou plus simplement
données. En retour, le programme va fournir la moyenne cherchée. Nous l’appellerons
information résultat ou plus simplement résultat. Si le programme a été prévu pour cela, il
peut fournir d’autres résultats tels que le nombre de notes supérieures à 10.
D’où proviennent les données ? Que deviennent les résultats ? Les réponses les plus naturelles
sont : les données sont communiquées au programme par l’utilisateur ; les résultats sont
communiqués à l’utilisateur par le programme.
Cela correspond effectivement à une situation fort classique dans laquelle l’ordinateur doit
être en mesure de communiquer avec l’homme. Cependant, les données ne sont pas toujours
fournies manuellement. Par exemple, dans le cas d’un programme de paye, il est probable
que certaines informations relativement permanentes (noms, numéros de sécurité sociale...)
auront été préalablement archivées dans un fichier ou dans une base de données. Le
programme y accédera alors directement.
Dans le cas de la réservation d’un billet d’avion, vous n’aurez pas à fournir explicitement les
caractéristiques du vol souhaité (aéroport de départ, aéroport d’arrivée, heure de départ,
numéro de vol...). Vous effectuerez un choix parmi une liste de possibilités que le programme
aura trouvées, là encore, dans une base de données, en fonction de certains critères que vous
aurez exprimés.
On notera, à propos des bases de données, que les informations qu’elles renferment auront dû
être préalablement archivées par d’autres programmes dont elles constituaient alors les
résultats. Ceci montre la relativité de la notion de donnée ou de résultat. Une même
information
peut être tantôt donnée, tantôt résultat, suivant l’usage que l’on en fait.
En général, cet échange d’informations entre programme et milieu extérieur paraît assez
Lorsque nous échangeons de l’information avec d’autres personnes, nous utilisons des
chiffres, des lettres, des graphiques, des paroles, etc.
Or, pour des raisons purement technologiques, l’ordinateur ne peut traiter ou manipuler
qu’une information exprimée sous forme binaire. On imagine souvent une telle information
comme une suite de 0 et de 1, mais on pourrait en fait utiliser n’importe quel couple de
symboles (comme rond blanc et rond noir, ampoule allumée et ampoule éteinte).
Quand vous transmettez une information à l’ordinateur, par exemple en tapant sur les touches
d’un clavier, il est nécessaire qu’il la transforme en binaire. Nous dirons qu’il réalise un
codage en binaire de cette information. De la même manière, avant de vous fournir un
résultat, il devra opérer une transformation symétrique.
En définitive, on peut se dire que l’ordinateur et l’homme diffèrent dans leur façon de
représenter l’information puisque l’ordinateur ne connaît que le binaire tandis que l’homme est
capable d’utiliser une très grande variété de codes. Mais est-ce bien la seule différence ?
En fait, lorsque, dans un texte, vous rencontrez « 13 » ou « bonjour », il n’est pas besoin
qu’on vous précise quel code a été effectivement employé. Au vu des symboles utilisés, vous
arrivez à leur attribuer une signification. Qui plus est, lorsque vous rencontrez « XIII», vous
reconnaissez immédiatement le code « chiffres romains » et non plus le code « lettres de
l’alphabet ». Dans ce cas, vous avez utilisé votre expérience, votre intelligence et le contexte
de la phrase pour attribuer une signification à « XIII ».
Le binaire, en revanche, est beaucoup moins naturel, non seulement pour l’homme mais
également pour l’ordinateur. Pour vous en convaincre, imaginez que vous ayez besoin de
savoir ce que représentent les huit bits 00101001. Certes, vous pouvez toujours dire que cela
peut représenter l’écriture en binaire du nombre entier 41. Mais pourquoi cela représenterait-il
un nombre ? En effet, toutes les informations (nombres, textes, instructions de programme,
dessins, photos, vidéos,...) devront, au bout du compte, être codées en binaire. Dans ces
conditions, les huit bits ci-dessus peuvent très bien représenter une lettre, un nombre, une
instruction de programme ou tout autre chose. En définitive, nous voyons que l’ordinateur
code l’information ; l’homme agit de même. Cependant, on pourrait dire que l’ordinateur «
code plus » que l’homme ; en effet, il n’est pas possible d’attribuer un sens à la seule vue
d’une information binaire. Il est, en outre, nécessaire de savoir comment elle a été codée. Nous
verrons qu’une conséquence immédiate de ce phénomène réside dans l’importante notion de
type, lequel indique précisément le codage utilisé pour représenter une information.
NB:
Il existe un nombre important des langages de programmation, la plupart d'entre eux étant
réservés à des domaines spécialisés dont
a) Langage machine
Comme nous l’avons vu, l’ordinateur ne sait exécuter qu’un nombre limité d’opérations
élémentaires, dictées par des instructions de programme et codées en binaire. On traduit cela
en disant que l’ordinateur ne « comprend » que le langage machine.
Mais, fort heureusement, cela ne signifie nullement que tout programme doive être réalisé
dans ce langage machine. En effet, et c’est là qu’intervient la seconde idée fondamentale de
Par Ir Irenge Balolage Jean de Dieu
-7-
b) En langage assembleur
Supposons, de façon un peu simplifiée, que l’on soit en présence d’un ordinateur pour lequel
l’instruction machine : 0101010011011010 signifie : additionner (code opération 0101) les
valeurs situées aux adresses 010011 et 011010. Nous pouvons choisir d’exprimer cela sous
une forme un peu plus parlante, par exemple :
ADD A, B Pour que la chose soit réalisable, il suffit de disposer d’un programme capable de
convertir le symbole ADD en 0101 et de remplacer les symboles A et B par des adresses
binaires (ici 010011 et 011010).
Sans entrer dans le détail des tâches précises que doit réaliser un tel programme, on voit
bien :
• qu’il doit faire correspondre un code opération à un symbole mnémonique ;
• qu’il doit être capable de décider des adresses à attribuer à chacun des symboles tels que A
et B ; notamment, à la première rencontre d’un nouveau symbole, il doit lui attribuer une
adresse parmi les emplacements disponibles (qu’il lui faut gérer) ; à une rencontre ultérieure
de ce même symbole, il doit retrouver l’adresse qu’il lui a attribuée.
Tous les constructeurs sont en mesure de fournir avec leur ordinateur un programme capable
de traduire un langage du type de celui que nous venons d’évoquer. Un tel langage se nomme
langage d’assemblage ou encore assembleur. Le programme de traduction correspondant se
nomme, lui aussi, assembleur.
Bien qu’ils se ressemblent, tous les ordinateurs n’ont pas exactement le même répertoire
d’instructions machine. Dans ces conditions, chaque modèle d’ordinateur possède son propre
assembleur. D’autre part, même si un tel langage est plus facile à manipuler que le langage
machine, il ne s’en distingue que par son caractère symbolique, pour ne pas dire
mnémonique. Les deux langages (assembleur et langage machine) possèdent pratiquement
les mêmes instructions ; seule diffère la façon de les exprimer. Dans tous les cas, l’emploi de
l’assembleur nécessite une bonne connaissance du fonctionnement de l’ordinateur utilisé. On
exprime souvent cela en disant que ce langage est orienté machine. Réaliser un programme
dans ce langage nécessite de penser davantage à la machine qu’au problème à résoudre.
Très vite est apparu l’intérêt de définir des langages généraux utilisables sur n’importe quel
ordinateur et orientés problème, autrement dit permettant aux utilisateurs de penser davantage
à leur problème qu’à la machine. C’est ainsi que sont apparus de très nombreux langages que
l’on a qualifiés d’évolués.
La plupart sont tombés dans l’oubli mais quelques-uns sont passés à la postérité : Fortran,
Basic,Cobol, Pascal, ADA, C, Visual Basic, Delphi, C++, Java, C#, PHP...
Dès maintenant, vous pouvez percevoir l’intérêt d’un langage évolué en examinant
l’instruction suivante (elle se présentera textuellement sous cette forme dans la plupart des
langages) :
Y=A*X+2*B+C
Sa signification est quasi évidente : à partir des valeurs contenues dans les emplacements
nommés A, X, B et C, calculer la valeur de l’expression arithmétique A*X + 2*B + C (le
symbole * représente une multiplication), puis ranger le résultat dans l’emplacement
nommé Y.
Comme vous pouvez vous en douter, le même travail demanderait bon nombre d’opérations
en langage machine (ou en assembleur), par exemple : prélever la valeur de A, la multiplier
par celle de X, ranger le résultat dans un emplacement provisoire, prélever la valeur de B, la
multiplier par 2, ajouter la valeur provisoire précédente, ajouter la valeur de C et, enfin, ranger
le résultat final en Y.
Bien entendu, quel que soit le langage évolué utilisé, il est nécessaire, là encore, d’en réaliser,
par programme, la traduction en langage machine. Pour cela, il existe deux techniques
principales : la compilation et l’interprétation.
La compilation consiste à traduire globalement l’ensemble du programme en langage évolué
(qu’on nomme souvent programme source) en un programme en langage machine (qu’on
nomme souvent programme objet), en utilisant un programme nommé compilateur. Si cette
traduction s’est déroulée sans erreur, le programme objet peut être exécuté, en le plaçant en
mémoire, autant de fois qu’on le désire, sans avoir besoin de recourir à nouveau au
compilateur.
De nombreux programmes sont fournis sous cette forme objet (dite aussi compilée) avec
la plupart des micro-ordinateurs du commerce.
L’interprétation consiste à traduire chaque instruction du programme source, avant de
l’exécuter, à l’aide d’un programme nommé interpréteur. Dans ce cas, il n’existe plus de
programme objet complet et, à un instant donné, on trouve en mémoire, à la fois le
programme source et le programme interpréteur.
On notera bien que le compilateur, comme l’interpréteur dépendent, non seulement du langage
concerné, mais également du type d’ordinateur pour lequel on effectue la traduction.
Par ailleurs, il existe une technique intermédiaire entre compilation et interprétation qui
consiste à traduire globalement un programme source (compilation) en un langage
intermédiaire défini comme étant commun à un ensemble de machines, et à interpréter le
résultat à l’aide d’un programme approprié. Cette technique avait été employée avec Pascal
et elle l’est actuellement avec Java et C#. En toute rigueur, cette technique est très proche de
la compilation, dans la mesure où tout se passe comme si le langage intermédiaire en
question était en fait une sorte de langage machine universel. L’interprétation finale ne sert
qu’à l’adapter à la machine concernée au moment de l’exécution.
Malgré leur multitude, la plupart des langages de programmation se basent sur un bon nombre
de principes fondamentaux communs. Certains découlent immédiatement de la nature même
de l’ordinateur et de l’existence d’un programme de traduction. C’est, par exemple, le cas de
la notion de variable que nous avons rencontrée sans la nommer : elle consiste à donner un
nom à un emplacement de la mémoire destiné à contenir une information ; elle est donc liée à
la fois à la notion technologique d’adresse et à l’existence d’un compilateur. Nous verrons que
le besoin de traduire un programme en langage évolué nécessitera de définir la notion de type
d’une variable, type qui sert à définir la manière dont doit s’opérer le codage des valeurs
correspondantes. De même, tout langage possède :
• des instructions dites d’affectation, elles permettent de calculer la valeur d’une expression et
de la ranger dans une variable ;
• des instructions permettant d’échanger des informations entre la mémoire et des
périphériques
(qu’ils soient de communication ou d’archivage) ; on parle d’instructions :
– de lecture, lorsque l’échange a lieu du périphérique vers la mémoire,
– d’écriture, lorsque l’échange a lieu de la mémoire vers le périphérique.
D’autres concepts, plus théoriques, ont été inventés par l’homme pour faciliter l’activité de
programmation. C’est notamment le cas de ce que l’on nomme les structures de contrôle, les
structures de données, les fonctions (ou procédures) et, plus récemment, les objets.
Les structures de contrôle servent à préciser comment doivent s’enchaîner les instructions
d’un programme. En particulier, elles permettent d’exprimer les répétitions et les choix que
nous avons déjà mentionnés : on parle alors de structure de choix ou de structure de
répétition. Bien entendu, au bout du compte, après traduction du programme, ces structures
se ramènent à des instructions machine et elles font finalement intervenir des instructions de
branchement. Les structures de données (attention, ici, le mot donnée est employé au sens
général d’information) servent à mieux représenter les informations qui doivent être
manipulées par un programme. C’est le cas de la notion de tableau dans laquelle un seul nom
permet de désigner une liste ordonnée de valeurs, chaque valeur étant repérée par un numéro
nommé indice. Bien entendu, là encore, au bout du compte, à chaque valeur correspondra un
emplacement défini par son adresse.
La fonction (ou procédure) permet de donner un nom à un ensemble d’instructions qu’il
devient possible d’utiliser à volonté, sans avoir à les écrire plusieurs fois. Comme dans le cas
d’une fonction mathématique, ces instructions peuvent être paramétrées, de façon à pouvoir
être utilisées à différentes reprises avec des variables différentes, nommées paramètres. Le
bon usage des fonctions permet de structurer un programme en le décomposant en différentes
unités relativement indépendantes.
1.7. Un algorithme
Le seul « langage » que l’ordinateur puisse véritablement « comprendre » est donc très
éloigné de ce que nous utilisons nous-mêmes. C’est une longue suite de 0 et de 1 (les « bits»,
binary digit) traités par groupes de 8 (les « octets », byte), 16, 32, ou même 64 .
De haut niveau: l'algorithme doit pouvoir être traduit en n'importe quel langage de
Programmation, il ne doit donc pas faire appel à des notions techniques relatives à
Précis: chaque élément de l'algorithme ne doit pas porter à confusion, il est donc
Concis (Bref): un algorithme ne doit pas très long. Si c'est le cas, il faut décomposer le
problème en plusieurs sous problèmes.
Identifiables.
2. Une autre partie située entre les mots clés "Début" et "fin", contenant le bloc d’instructions
(une partie de traitement d’un algorithme constitué d’opérations élémentaires).
Algorithme Nom_de_l’algorithme
Début
Bloc d’instructions
Fin
1.10 .L'algorithmique
L’efficacité d’un algorithme est son aptitude à utiliser de manière optimale les ressources du
matériel qui l’exécute.
Votre ordinateur est une machine bizarre, c’est le moins que l’on puisse dire. On ne peut
s’adresser à lui qu’en lui envoyant des 0 et des 1. Ainsi, si je traduis "Fais le calcul 3 + 5" en
Le code source : est tout simplement le code de votre programme écrit dans un langage
évolué.
Que l'on a choisi, car il en existe énormément. De plus, le compilateur devra Correspondre au
langage choisi : à chaque langage de programmation son compilateur.
Le compilateur fait ensuite appel à un éditeur de liens (en anglais linker ou binder)
Qui permet d'intégrer dans le fichier final tous les éléments annexes (fonctions ou
Librairies) auquel le programme fait référence mais qui ne sont pas stockés dans le
Fichier source.
Puis il crée un fichier exécutable qui contient tout ce dont il a besoin pour fonctionner de
façon autonome, (sous les systèmes d'exploitation Microsoft Windows ou MS-Dos le fichier
ainsi créé possède l'extension .exe)
Editeur de Liens
Compilateur
Une variable désigne un emplacement mémoire qui permet de stocker une valeur.
la plupart des langages sont basés sur la même technique fondamentale, à savoir la
Manipulation des Valeurs contenues dans les variables.
En programmation, une variable est donc un nom qui sert à repérer un emplacement
donné de la mémoire centrale. Elle vous permet, en effet de manipuler de valeur sans avoir a
vous préoccuper de l’emplacement qu’elles occuperont effectivement en mémoire.
A
01010
Montant
01011
La première chose à faire avant de pouvoir utiliser une variable est de créer la boîte et de lui
coller une étiquette .Ceci se fait tout au début de l’algorithme avant même les instructions
proprement dite. C’est ce qu’on appelle la déclaration des variables.
Le nom de variable (étiquette de la boîte) obéit à des impératifs changeant selon les langages.
Ex : Variable g en numérique
Une règle absolue est qu’un nom de variable peut comporter des lettres(a,....A, z,...Z) et des
chiffres(0,.....9) mais qu’il exclut la plupart des signes de ponctuation ($, #, @, etc.), en
particulier les espaces.
NB:
Par défaut, une variable est déclarée au sein d’une procédure, d’une fonction, ou d’une classe.
Si elle est créée avec cette procédure ou fonction ou classe et elle disparaît avec elle, elle ne
sera visible que dans la procédure ou fonction ou classe qui l’a fait naître et alors une telle
variable est dite par défaut Privées ou locales.
Mais à côté de cela, il est possible de créer des variables qui certes seront déclarées dans une
procédure ou fonction ou classe mais qui du moment où elles existent, seront communes à
toutes les procédures et fonctions de l’application. Alors de telles variables sont dites
globales ou publiques. Avec des telles variables, le problème de la transmission des valeurs
d’une procédure ou fonction à l’autre ne pose plus problème.
Exemples:
Variable x en numérique
Si une variable n’a pas encore de valeur elle est dite non définie. D’ailleurs au début de
l’exécution d’un programme, toutes les variables sont non definies.
Algorithme VariableNonDefini
Lorsque l’on cherche à exécuter l’instruction Z
Variables X, Y, Z en numériques
X+Y, la variable Y est encore non définie.
Début Le calcul de Z est donc Impossible.
X 3
Z X+Y
Y 4
Fin
Le type de donnée conditionne le nombre d'octets sur lequel la donnée est codée,
C'est la raison pour laquelle certains langages (C, Java) sont des langages typés,
Cela signifie qu'à une variable est associée non seulement un nom mais aussi un
Certains langages acceptent que l'on associe à un nom de variable n'importe quel
Type de donnée (c'est-à-dire aussi bien un nombre entier qu'un caractère). Ces
Langages sont dits peu ou pas typés, on n’a pas besoin de déclarer le type des variables.
La déclaration consiste à réserver un espace mémoire dans une adresse (avec taille variable
selon le type), l'assignation Consiste à mettre des données dans cet espace réservé.
Dans tous les langages, toutes les variables occupent en mémoire un nombre déterminé de bits.
Les variables de type numérique utilisées dans l’algorithme ont comme domaines usuels ceux
fournies par les mathématiques (Réel et entier). Celui d’une variable destinée à recevoir des
nombres. Tous les langages, quels qu’ils soient offrent un bouquet de types numériques, dont
le détail est susceptible de varier légèrement d’un langage à l’autre.
Ex : Algorithme Multipli_Type_Reel
Début
Nombre1 1.2
Nombre2 10
Fin
Le type monétaire.
c) Type alphanumérique
Dans une variable de ce type, on stocke des caractères ; qu’il s’agisse des lettres, signe de
ponctuation, d’espaces ou même des chiffres. Le nombre maximal des caractères pouvant
être stocké dans une variable du dépend du langage utilisé. Il s’agit du domaine constitué des
caractères alphabétiques, numérique et de ponctuation.
En pseudo code une chaîne de caractère est toujours mise entre guillemets.
Ex Algorithme AfficherJean
Variables R en Caractères
Début
R "Jean"
Fin
d) Type booléen
Dans la variable de type booléenne on y stocke uniquement les valeurs logiques VRAI ou
FAUX. On peut représenter ces notions de Vrai ou faux par (True ou False), par (1 ou 0),
etc.
Ex : Algorithme de typeBoolean
Début
Fin
L’affectation est le fait d’attribuer à une variable une valeur (L’affectation consiste
simplement à placer une valeur dans une variable). L’instruction d’affectation se note avec
le signe
Exemple : Y 12
Affecter à A la valeur 5
A 5
NB :
Plus généralement, on pourra demander de ranger dans une variable le résultat d’un calcul
(Cela n’à de sens que pour des variables numérique).
A B+4
Lorsque l’on détermine la valeur d’une expression, cela ne modifie pas la valeur des variables
qui apparaissent dans cette expression.
NB:
Une instruction d’affectation ne modifie que ce que est situé à gauche de la flèche.
La valeur à placer dans une variable pourra également provenir d’une autre
Affecter à A la valeur B.
A B
La syntaxe définit les règles d’écriture d’un langage de programmation informatique. Pour
spécifier quels sont les programmes syntaxiquement corrects, on utilise des grammaires qui
définissent les règles de formation de programmes. La vérification du fait qu’un programme
est syntaxiquement correct par Rapport à la grammaire partielle donnée plus haut peut être
réalisée par un programme appelé analyseur syntaxique.
Dans la plupart des langages, il existe quelques mots que l'on ne peut pas attribuer
Aux noms de variables, aux fonctions, Etc. on les appelle mots réservés.
Les constantes sont des données dont la valeur ne peut être modifiée tout au long du
déroulement du programme. On les définit généralement en début de programme. La valeur
que la constante contient peut
Syntaxe :
Exemples
Constante Pi =3,14
Constante B = 6
Constante Mois =” Mars”
Il est généralement bon de pouvoir ajouter dans un programme des lignes de texte
Qui ne seront pas prises en compte par le compilateur ou l'interpréteur. Ces lignes
Ex : (* Votre commentaire *)
la programmation
L'instruction est l'élément clé du programme car c'est elle qui permet de spécifier au
Processeur l'action à effectuer. Une instruction est un ordre qui permet de spécifier à
l'ordinateur l’action à effectuer.
2 .6 1 instructions Simples
1
-a) L ’instruction d’affectation : S
2 .6 2 instructions Composés
Les instructions composées sont la séquence, l'alternative et l'itération.
a)La séquence
Ex : x a et y b
xx+y
Bol a + b et y = b
b) L'alternative
Syntaxe de l'alternative :
Si expression logique alors
instruction1
Sinon
instruction2
Fin si
c) Itération
Syntaxe de l'itération :
Tant que condition faire
instructions
Fin tant que
Signes Signification
+ L’addition
- La soustraction
* La multiplication
/ La division
^ Puissance
% Modulo
Signes Signification
= L’égalité
≠ Différent
Signes Signification
Et Et logique
Ou Ou logique
XOR Ou exclusif
Ex : Algorithme concaténation
Variables A, B, C, K en caractères
Début
A "Jean"
B "-"
C "Luc"
Fin
Remarques : Lorsque plusieurs opérateurs apparaissent dans une même expression, il est
nécessaire de savoir dans quel ordre ils sont mis en jeu. Les règles sont naturelles et rejoignent
celles de l’algèbre traditionnelle.
Voici les opérateurs par ordre décroissant de priorité, les opérateurs de même priorité étant
regroupés sur une même ligne :
NB :
EXEMPLES :
A+B*C A+ (B*C)
Dès que le programme rencontre une instruction de lecture, l’exécution s’interrompt attendant
la frappe d’une valeur au clavier.
La lecture et l’écriture doivent être comprises du point de vue de la machine qui sera
chargé de les exécuter.
En Pseudo-code:
Exemples :
1. Pour la lecture
Lire A
Lire x, y
Signifie prendre deux valeurs et les ranger dans x et y. dans cet ordre
2. Pour l’écriture
a) Ecrire A
b). Ecrire x, y
c). Ecrire x
NB :
Exemple :
ECRIRE " Deux en chiffre est : ", 2, " et trois en chiffre vaut :" ,3
début
Lire nombre
Carré nombre*nombre
Fin
Soit le programme 1
Algorithme le Double
Début
Val 5
Double val*2
Fin
Soit le programme 2
Algorithme dudouble
Début
Lire Val
Double val*2
Fin
Dans le programme 2 on peut avoir chaque fois entre le nombre et obtenir le double sans
modifier le programme. Comme s’était le cas dans le programme 1.
Exercices d’applications
a) Algorithme AfficherJeanFabrice
Début
R "Jean"
X "Fabrice"
Ecrire R
Ecrire X
Fin
b) Algorithme AfficherJean
Début
R "Jean"
X R
Ecrire R
Ecrire X
Fin
Algorithme CalculBooleen
Début
a10
B4
Par Ir Irenge Balolage Jean de Dieu
- 29 -
b1 (10>10) ET (5=5)
Début
Val 23
Double Val * 2
Ecrire val
Ecrire Double
Fin
5. Ecrire un algorithme d’un programme qui fait la conversion de dollar en franc et un autre
qui fait la conversion des francs en dollar.
∫ab x dx
Proposer un algorithme pour sa résolution sachant que a>b et que a et b seront introduits par
l’utilisateur.
Variables A, B en Numérique
Début
A 5
B A+4
A A+1
B A- 4
8. Ecrire l’algorithme d’un programme qui calcule le factoriel d’un nombre quelconque taper
par l’utilisateur.
Bien attendu, ces choix et répétitions sont réalisables dans tous les langages de
programmations.
a) Si…. Alors
Syntaxe
Si <Condition> alors
<Insrtuctions>
Finsi
Sous cette Forme conditionnelle, les instructions ne sont exécutées que si <Condition> est
Vérifiée.
Algorithme
Exemple ; Affichage nulle
Variable A en entier
Début
Si A=0 alors
Finsi
Fin
<Instructions>
Sinon
<Autres instructions>
Finsi
Si<Condition > est vérifié, les instructions sont exécutées. Dans le cas contraire, donc si
<condition> n’est pas vérifiée, alors ce sont les <autresinstructions> qui sont exécutées. Par
exemple,
Variables a, b en numériques
DEBUT
LIRE a, b
Si a = b alors
ECRIRE ”Vous avez saisi deux fois la même valeur, à savoir ”, a, ” et ”, b, ”.”
Sinon
FinSI
ECRIRE "Vous avez saisi deux fois la même valeur, àsavoir ", a, "." sera
exécuté.
C) les Si imbriqués
syntaxe:
Vous constaterez que c’est un peu laborieux. Les conditions se ressemblent plus ou moins, et
surtout on oblige la machine à examiner trois tests successifs alors que tous portent sur une
même chose, la température (la valeur de la variable Temp). Il serait ainsi bien plus rationnel
d’imbriquer les tests de cette manière :
Nous avons fait des économies au niveau de la frappe du programme : au lieu de devoir taper
trois conditions, dont une composée, nous n’avons plus que deux conditions simples. Mais
aussi, et surtout, nous avons fait des économies sur le temps d’exécution de l’ordinateur. Si la
température est inférieure à zéro, celui-ci écrit dorénavant " C’est de la glace " et passe
directement à la fin, sans être ralenti par l’examen d’autres possibilités (qui sont forcément
fausses).
Cette deuxième version n’est donc pas seulement plus simple à écrire et plus lisible, elle est
également plus performante à l’exécution.
d) Suivant cas
...
finSelon
Selon la valeur que prend la variable <variable>, le bloc d’instructions à exécuter est
sélectionné Par exemple, si la valeur de <variable> est <valeur 1>, alors le bloc
<instructions 1> est exécuté. Le bloc <autres cas> est exécutési la valeur de <variable>
ne correspond à aucune des valeurs énumérées.
Exemple
Algorithme Lendemain
DEBUT
LIRE jour
erreur ← 0
autres cas
erreur ← 1
finSelon
Si erreur = 1 alors
Sinon
FINSI
FIN
2.9.2 Boucles
Une boucle permet d’exécuter plusieurs fois de suite une même séquence d’instructions. Cet
ensemble d’instructions s’appelle le corps de la boucle. Chaque exécution du corps d’une
boucle s’appelle une itération, ou encore un passage dans la boucle.
– Tant que
– Pour
Chacune de ces boucles a ses avantages et ses inconvénients. Nous les passerons en revue l’une après
l’autre
a) Tant que
Fintantque
La condition est évaluée avant chaque passage dans la boucle, à chaque fois qu’elle est
vérifié, on exécute les instructions de la boucle. Une fois que la condition n’est plus Vérifiée,
l’exécution se poursuit après le ‘fintantque ‘ . Affichons par exemple tous les
nombres de 1 à 5 dans l’ordre croissant,
Variable i en numérique
DEBUT
i ←1
tant que i ≤ 5
ECRIRE i
i ←i + 1
Par Ir Irenge Balolage Jean de Dieu
38
fintantque
FIN
NB :
Pour la boucle “Tant que”, avant d’entrer dans le corps de la boucle, il faut que la condition soit
vrai. Si dans l’exemple ci-dessus i était initialisé à 6 on n’allait pas entrer dans la boucle.
b) Répéter... jusqu’à
Syntaxe
répéter
– On exécute le corps de la boucle jusqu’à ce que la condition soit vérifié, donc tant que la
condition est fausse.
Reprenons l’exemple
i ←1
répéter
ECRIRE i
i ←i + 1
Jusqu’à i> 5
FIN
De la même façon que pour la boucle « Tant que », le compteur est initialisé avant le
premier passage dans la boucle. Par contre, la condition de sortie de la boucle n’est pas la
même, on ne sort de la boucle qu’un fois que la valeur 5 a été affichée Or, i est
incrémenté après l’affichage, par conséquent i aura la valeur 6 à la fin de l’itération
pendant laquelle la valeur 5 aura étéaffichée. C’est pour cela qu’on ne sort de la boucle
qu’une fois que i a dépasséstrictement la valeur 5. Un des usages les plus courant de la
boucle « Repeter ... jusqu’ à» est le contrôle de saisie
Répéter
Lire i
si i<=0 Alors
Fin Si
jusqu’à i > 0
c) Pour
Pour < variable > allant de < premierevaleur > à< dernierevaleur > [par pas de
La boucle Pour fait varier la valeur du compteur <variable> entre <première valeur > et
<dernière Valeur>. Le <pas> est optionnel et permet de préciser la variation du
compteur entre chaque itération, le pas par défaut est 1 et correspond donc à une
incrémentation. Toute boucle « pour » peut être réécrite avec une boucle tant que. On
réécrit de la façon suivante :
Tant que < variable > <> < dernierevaleur > + < pas >
Fintantque
variables i en numérique
pour i allant de 1 à 5
ECRIRE i
i Suivant
FIN
Observez les similitudes entre cet algorithme et la version utilisant la boucle tant que. Notez
bien que l’on utilise une boucle pour quand on sait en rentrant dans la boucle combien
d'itérations devront être faites. Par exemple, n’utilisez pas une boucle pour contrôler une
saisie !
Remarques
Exemple d’expression
1. A > B
3. D>0
Les conditions formées de plusieurs conditions simples reliées entre elles par les opérateurs
logiques. «ET» et/ou « OU »
1. a<0 et b<0
2. a<0 ou b<0
(a<0 et b>1) ou (a>0 et b>3) est vrai si au mois l’une de condition est vrai.
Il n’y a qu’un bloc d’instructions à répéter lors d’une boucle. Mais le bloc peut être lui-
même composé d’une ou plusieurs boucles. On parle alors des boucles imbriques
<Instructions1>
<Instructions2>
j suivant
i suivant
Variables I, J en entier
Début
Pour I allant de 1 à 3
Pour J allant de 1 à 10
Ecrire I*J
J suivant
I suivant
Fin
NB :
1 x 5=5
2 x 5=10
3 x 5=15
…….
10 X 5=50
Résolution
Variables i, j en Entier
Pour i allant de 1 à 9
Pour j allant de 1 à 10
j suivant
i suivant
Fin
NB : C’est le problème posé qui doit guider le programmeur à l’utilisation des boucles
imbriquées.
NB :
Pour que le code soit facilement réutilisable, les valeurs qui sont manipulées par les
procédures et fonctions peuvent être passées en paramètres au moment de l’appel de
la procédure ou de la fonction.
Une procédure est une suite ordonnée d’instructions qui ne retourne pas de valeur (bloc
d’instructions nommé et paramétré).
Une procédure est un bloc d’instructions nommé et paramétré, réalisant une certaine tâche.
Chaque procédure a un nom, On se sert de ce nom pour exécuter les instructions contenues
dans la procédure. Les parenthèses après le nom sont utilisées pour spécifier les
caractéristiques des paramètres qui seront passées lors de l’appel. Les parenthèses sont
obligatoires dans la déclaration de variable même si aucun paramètre n’est requis pour la
procédure.
Procédure Nom_procedure()
Procédure AfficherBonjour ()
Ecrire "Bonjour"
Fin Procédure
Procédure Nom_procedure(<Parametres>)
Fin procédure
Ecrire msg
Fin Procédure
Ex2 : Algorithme d’affichage des valeurs passées en paramètres en utilisant une Procédure
Fin Procédure
b) L’appel de la procédure
Début
AfficherBonjour (“Jean”)
Fin
Résultat : Jean
c) Passages de paramètres
Les variables du programme appelant ne sont pas lisibles depuis un sous-programme. Mais si
une procédure, pour s'exécuter, à besoin de la valeur d'une variable définie dans le programme
appelant, on utilise pour la lui communiquer un mécanisme dit "passage de paramètres"
Ecrire "Les valeurs des entiers passés en paramètre sont :", monEntier1, monEntier2
Fin procédure
Ex : écrire l’algorithme d’une Procédure qui va calculer le produit deux nombres et l’affiché
en messages, lors de son appel. Les deux nombres seront passés en paramètres de la
Procédure.
Fin Procédure
A l’appel de la fonction
Début
AfficherProduit (2,3)
Fin
Le Produit est ; 6
NB :
• Une Procédure ou une fonction peut Prendre en paramètre un Type donné et retourné
un autre type différent de celui entré en paramètre.
• Il existe des fonctions prédéfinies par langages de programmation qui font des taches
bien spécifiques
Une fonction est une suite ordonnée d’instructions qui retourne une
valeur (bloc d’instructions nommé et paramétré). Une fonction est un sous-programme
quelque peu particulier, dans le sens mathématique du terme, il sert à calculer une valeur (i e.
image).
Une fonction se déclare suivant le même principe qu’une procédure. Cependant, la fonction
devant renvoyer au code appelant un résultat. Vous devez indiquer le type de retour que doit
renvoyer la fonction.
b) Exemples :
Une fois la fonction appelée, on remplace successeur(x) par le résultat retourné par la
fonction.
c) Appel de la fonction
Début
LIRE nombre
Fin
NB : Certains traitements ne peuvent être effectué par un algorithme, aussi savant soit-il.
D’autres ne peuvent l’être qu’au prix de souffrance. Dans ce cas il faut utiliser les fonctions
prédéfinies Fournies par le langage de programmation.
Ex ;
• Etc
Un ensemble des valeurs portant le même nom de variable, ayant le même type et repérer par
un nombre (indice) est appelé Tableau. Un tableau est un ensemble fini d’éléments de même
type, stockés en mémoire à des adresses contiguës.
Attention :
Les Indices des tableaux commencent généralement par 0 et non par 1 dans la plupart
de langage de programmation.
Supposons que nous avons besoin dans un programme pour conserver les notes de 20 élèves ;
Nous pouvions Toujours utiliser une variable qui prend successivement la valeur de notes.
Si donc, Il est nécessaire de disposer simultanément de ces valeurs, nous pouvons toujours
utiliser 20 variables différentes nommées par exemple :
Il faut trouver un nom de variable par note .Passe encore 20 valeurs. mais cela risque
de devenir fastidieux avec 100 ,1000 valeurs ou plus
Il n’existe aucun lien entre ces différentes valeurs. Or, dans certains cas on est amené à
appliquer un traitement à l’ensemble ou à une partie de ces valeurs. Imaginez
seulement comment calculer la somme de Notes.
Tous les langages présentent en fait une solution à ce problème, elle réside dans la notion
de « Tableau »qui consiste.
le tableau à une dimension (on dit aussi « à un indice »). il s’agit alors d’une liste ordonnée
de valeurs de même type, désignée par un nom unique, chaque valeur de la liste étant
repérée par un numéro d’ordre qu’on nomme indice ; le tableau à une dimension s’apparente,
en fait, à la notion mathématique de vecteur ;
Dans tous les langages, le traducteur (Compilateur ou interpréteur) doit nécessairement
connaître le nombre d’éléments d’un tableau (on dit encore sa taille).Cette information lui
permet de réserver l’espace mémoire correspondant. D’autres part, il faut préciser quel est
le type du tableau, Autrement dit le type de tous ses éléments.
Syntaxe
Note (1) Note (2) …….. Note (10) désignent les éléments du tableau s’appellent
souvent des variables indicés.
Début
Tab(1) 1
Tab(2) 2
Tab(3) 3
Tab(4) 4
Tab(5) 5
Fin
Son exécution place les éléments dans les 5 éléments du tableau tab les valeurs
1 2 3 4 5
Début
Pour i allant de 1 à 5
Tab(i)i
I suivant
fin
Début
Lire Tab(compteur)
compteur suivant
Fin
Ex : Affectation des variables dans notre tableau (Vecteur) tab et les affichées
Début
Lire Tab(compteur)
compteur suivant
Ecrire Tab(compteur)
compteur suivant
Fin
Exercices
1.
Variable i entier
Début
Tab(1)1
Tab(2)2
Pour i allant de 3 à 8
Tab(i) Tab(i-1)+Tab(i-2)
i suivant
Pour i allant de 1 à 8
Ecrire Tab(i)
i suivant
Fin
2.
Variable i entier
Début
Nombre (1)1
Pour i allant de 2 à 6
i suivant
Pour i allant de 1 à 6
i suivant
Fin
le tableau à deux dimensions (à « deux indices ») : il est plus proche que le précédent de
l’idée usuelle que l’on se fait du mot « tableau », à savoir un ensemble de lignes et de
colonnes ; cette fois, chaque valeur du tableau est repérée par deux indices.
Etudiant
Jean 12 13 12 Note(0,2)
René 13 23 5
Patient 9 3 12 Note(0,0)
René 13 14 12
Dans la plus part des langages, il est possible de placer ces différentes valeurs dans un
tableau à deux dimensions.
Chaque note est alors repéré par deux indices qui représente sa position.
Un Tableau Doit être déclaré en précisant le nombre et le type de valeurs qu’il contiendra (La
déclaration des tableaux varie d’un langage à un autre).
Syntaxe
Ex1
Début
Note(0,0) 1
Note(0,1) 18
Note(0,2) 8
Note(1,0) 19
Note(1,1) 10
Note(1,2) 10
Note(2,0) 19
Note(2,1) 10
Note(2,2) 10
Fin
Début
Note(1,1) 10
Note(1,2) 10
Note(1,3) 10
Note(2 ,1) 10
Note(2,2) 10
Note(2,3) 10
Fin
Variable i ,j en entier
Début
Pour i allant 1 à 2
Pour j allant 1 à 3
10
Note(i,j)
j suivant
i suivant
Fin
Algorithme
Début
Lire Note(1,1)
Lire Note(1,2)
Lire Note(1,3)
Lire Note(2,2)
Lire Note(2,3)
Fin
Variable i ,j en entier
Début
Pour i allant 1 à 2
Pour i allant 1 à 3
lire Note(i,j)
j suivant
i suivant
Fin
Variable i, j en entier
Début
Pour i allant 1 à 2
Pour j allant 1 à 3
j suivant
i suivant
Fin
NB :
Un pointeur est une variable qui contient l'adresse d'une autre variable.
Jusqu’à présent une variable simple ou indicée était de type entier, réel, Booléen, caractère ou
chaîne de caractères. Il faut maintenant utiliser les variables qui prennent pour valeur des
adresses. On dira qu’il s’agit des variables de type pointeur ou simplement Pointeur.
b) Notion
La mémoire centrale utilisée par les programmes, est découpée en octets. Chacun
de ces octets est identifié par un numéro séquentiel appelé adresse. Par convention,
Une adresse est notée en hexadécimal et précédée par 0x.
0x3fffd10
0x3fffd11
0x3fffd12
0x3fffd13
0x3fffd14
0x3fffd15
0x3fffd16
0x3fffd17
…
Déclarer une variable, c'est attribuer un nom (l'identificateur) à une zone de la
Mémoire centrale. Cette zone est définie par :
- sa position c'est-à-dire l’adresse de son premier octet
- sa taille c'est-à-dire le nombre d’octets
Int toto=18;
0x3fffd12
0x3fffd13
0x3fffd14 18
Pour accéder à la valeur contenue dans une variable, on utilise tout simplement son
Nom. Mais il peut arriver qu'on veuille accéder à l'adresse d'une variable. Dans ce cas, on
Utilise l'opérateur d'adresse & (notation C) suivi du nom de la variable.
L'adresse contenue dans un pointeur est celle d'une variable qu'on appelle variable
pointée. On dit que le pointeur pointe sur la variable dont il contient l'adresse.
Un pointeur est associé à un type de variable sur lequel il peut pointer. Par exemple,
un pointeur sur entier ne peut pointer que sur des variables entières.
NB.:
• Un pointeur est lui-même une variable et à ce titre il possède une adresse.
• Il convient de ne pas confondre l'adresse de la variable pointeur et l'adresse
Contenue dans le pointeur (adresse de la variable pointée).
Toute variable manipulée dans un programme est stockée quelque part en mémoire
Centrale. Cette mémoire est constituée d’octets qui sont identifiés de
Manière univoque par un numéro qu’on appelle adresse.
P
P^
A
b) Notations
P^.Suivant
• Permet d’accéder à l’élément suivant dans une Liste.
Si P1 pointe sur une Variable v de type T et on veut que p2 pointe sur la même variable v
de type T. on peut utiliser cette Notation.
P2 P1
Pnil
Si P ne contient pas de valeur nil on écrit
P ≠ nil
NB :
Une liste chaînée est une structure de données dans laquelle les objets sont arrangés
Linéairement, l’ordre linéaire étant déterminé par des pointeurs sur les éléments.
Contenu de la cellule
Chaque élément pointe, à l'aide de l'attribut suivant vers l'élément suivant dans la liste ; le
dernier élément, par définition, n'a pas de suivant, donc son attribut suivant vaut nil. Pour
manipuler une liste chaînée, on manipulera un simple pointeur sur le premier élément; comme
chaque élément « connaît » l'élément suivant, on peut ainsi accéder à tous les éléments de la
liste. Notons enfin que si le pointeur premier vaut nil, on considérera naturellement que la
liste est vide (elle ne contient aucun élément).
Par convention on notera Liste+ la suite des éléments contenus dans la liste dont l’adresse de
la première variable se trouve la variable liste.
a b c d
Liste P
a b c d e
Pour pouvoir manipuler la liste nous supposons qu’on dispose des procédures suivantes :
• nouveau (L) crée une cellule et stocke une référence de type Pointeur de T dans L.
Cette cellule va contenir un élément de type T. T correspond au mot clé qui définit le
type. Quand on crée une cellule, les champs suivants est affecté à nil par default.
• laisser (L) détruit une cellule dont la référence est donnée dans L.
Nous remarquons qu’il est suffisant d’avoir la référence de la première cellule de la liste pour
pouvoir manipuler la liste entière et ceci en accédant au champ suivant.
a) Créer Liste
Nous proposons un algorithme qui crée une liste chaînée de longueur donnée à partir des
valeurs lues par l’utilisateur.
Variable P en pointeur sur Entier (*Création d’une variable de type pointeur qui va
nous aider à insérer les éléments dans la liste*)
Liste Nil
Compteur1
P
Liste
Compteurcompteur+1
Fintantque
Fin procédure
b) parcours de la liste
Nous supposons que nous disposons d’une procédure traiter qui traite une cellule en
connaissant sa référence. Nous présentons deux versions pour le parcours d’une liste de
gauche à droite.
Fintantque
Fin procédure
Finsi
Fin procédure
d) la longueur de la Liste
Nouveau (L)
L^.info elem
L^.suivantnil
Der^.suivantL
LDer
finsi
Fin procédure
g) Suppression
Soit refk est une fonction qui renvoie la référence de la cellule numéro k si elle existe
PROCEDURE suppPosition (liste en Pointeur, Position en ENTIER)
preced ^.suivantL^.suivant
laisser(L)
FIN SI
Fin Procedure
Une Liste chaînée est dit bidirectionnelle s’il est parcouru dans les deux directions du
premier élément au dernier et réciproquement. La chaîne bidirectionnelle est peu utilisé car
elle est coûteuse en temps d’exécution.
2.11.4 Piles
a)Notion
Les Piles ne servent généralement pas à garder de façon plus ou mois définitives les
informations. On s’intéresse plutôt à la suite des états de la pile et on utilise le dernier élément
à ajouter se trouvant au sommet de la pile. Une pile est une structure de données mettant en
oeuvre le principe « dernier entré, premier
La structure des piles est utilisée pour sauvegarder temporairement les informations.
En respectant leurs ordres d’entrée et la réutilisation en ordre inverse.
Sommet
Base
B
b) Primitive d’accès et Fonctionnement des piles
Le dernier élément de la pile est appelé Base de la Pile et son Premier élément est appelé
sommet de Pile. Dans la pratique la Pile est constitué d’un nombre fini d’éléments qui
correspond à la taille maximale de la Pile.
En général, la variable qui permet l’accès au sommet d’une pile ainsi que la pile elle-même
sont des variables globales.
• On peut définir d’autres primitives qui facilitent l’utilisation d’une Pile elle-même
Sommetsommet+1 Sinon
Fin procédure
Exemple Applicatif ;
Adr 1 2 3 4 5 6 7 8 9 10
X Z G T A PILE
a) sommet=5 et Maxpile=10
b) sommet=6 et Maxpile=10
Adr 1 2 3 4 5 6 7 8 9 10
X Z G T A B PILE
c) sommet=7 et Maxpile=10
Adr 1 2 3 4 5 6 7 8 9 10
X Z G T A B S PILE
d) sommet=6 et Maxpile=10
Une file est une structure de données mettant en oeuvre le principe « premier entré, premier
sorti» (FIFO : First-In, First-Out en anglais).
Une file d’attente est une liste d’éléments telle que les suppressions ne peuvent être effectué
Qu’à une de ses extrémités appelé TETE, les insertions à l’autre extrémité appelé Queue.
Par exemple, elle modélise la file d’attente des clients devant un guichet, les travaux en
attente d’exécution dans un système de traitement par
lots, ou encore les messages en attente dans un commutateur de réseau téléphonique. On
retrouve également les files d’attente dans les programmes de traitement de transactions telle
que les réservations de sièges d’avion ou de billets de théâtre.
NB:
• Comportement d'une pile: Last In First Out (LIFO)
• Comportement d'une file: First In First Out (FIFO)
• Les opérations primitives sur une file sont DÉFILER pour le retrait d’un élément et
ENFILER pour l’ajout d’un élément.
• L'opération DÉFILER ne peut s’effectuer sur une file vide. Il faudra donc utiliser une
opération FILEVIDE qui permet de tester si une file est vide ou pas.
La structure d'arbre est très utilisée en informatique. Sur le fond on peut considérer un arbre
Comme une généralisation d'une liste car les listes peuvent être représentées par des arbres.
La Complexité des algorithmes d'insertion de suppression ou de recherche est généralement
plus faible que dans le cas des listes (cas particulier des arbres équilibrés).
Lorsqu'un sommet est distingué par rapport aux autres, on le dénomme racine et la même
Structure d'arbre s'appelle une arborescence, par abus de langage nous utiliserons le vocable
arbre pour une arborescence.
Quelques Définitions
• Un noeud
Un nœud appelé aussi sommet, contient un élément et indique les nœuds suivants.
• La Racine
La racine d'un arbre est le noeud initial, tous les autres noeuds de l'arbre suivent
directement ou indirectement la racine
• Une feuille
• Une Branche
Nous conviendrons de définir la hauteur (ou profondeur ) d'un noeud X comme égale au
nombre de noeuds à partir de la racine pour aller jusqu'au noeud X.
En reprenant l'arbre précédant et en notant h la fonction hauteur d'un noeud :
Pour atteindre le noeud étiqueté 9 , il faut parcourir le lien 1--5, puis 5--8, puis enfin 8--9
soient 4 noeuds donc 9 est de profondeur ou de hauteur égale à 4, soit h(9) = 4. Pour atteindre
le noeud étiqueté 7, il faut parcourir le lien 1--4, et enfin 4--7, donc 7 est de profondeur ou de
Hauteur égale à 3, soit h(7) = 3.
On parle aussi d'ascendant, de descendant ou de fils pour évoquer des relations entres les
Noeuds d'un même arbre reliés entre eux.
Remarque
lorsqu'un arbre a tous ses noeuds de degré 1, on le nomme arbre dégénéré et que c'est
en fait une liste.
• Hauteur d'un arbre
Par définition c'est le nombre de noeuds du chemin le plus long dans l'arbre. On dit aussi
profondeur de l'arbre.
h (Arbre) = max { h ( X ) / ∀ X, X noeud de Arbre } si Arbre = ∅ alors h( Arbre ) = 0
Un arbre binaire est un arbre de degré 2 (dont les noeuds sont de degré 2 au plus).
L'arbre abstrait de l'expression a*b + c-(d+e) est un arbre binaire :
Les descendants (enfants) d'un noeud sont lus de gauche à droite et sont appelés
Respectivement fils gauche (descendant gauche) et fils droit (descendant droit) de ce noeud.
Les arbres binaires sont utilisés dans de très nombreuses activités informatiques.
Exemple 1 « 327-8 ».
Exemple 2
Examen de la situation pour le mot 2+5*4 :
• Arbre-5 s’interprète :(2+5)*4
+ 4
2 5
2 *
5 2
Les opérateurs + et * n’ont pas la même priorité. Nous obtenons deux expressions différentes
Selon le choix de l’arbre.
d) Parcours d'Arbre
Il existe 4 techniques pour parcourir l'ensemble des valeurs d'un arbre.
Le parcours en Profondeur avec 3 techniques et le parcours en largeur l'autre
technique.
d.1 le parcours en Profondeur
Tous les Noeuds de l'arbre sont atteints branche par branche dans toute leur profondeur. le
trois type de parcours en profondeur sont le parcours préfixé, Infixé et Postfixe.
Dans le 3 méthodes, les branches gauches puis droites sont scannées récursivement. La
Différence apparait au moment de faire le traitement des noeuds visités: le traitement se fait
avant la visite des deux sous-arbres pour le parcours préfixé, après pour le parcours postfixé
et entre les deux pour le parcours infixé.
Un fichier est une collection d’information, structurée en unités d’accès appelés Articles (Ou
enregistrements).
Les objets que nous avons déjà décrits jusqu’ici n’ont qu’une durée brève : Leur existence se
limite à la période d’exécution du programme. Pourtant il y a de très nombreuse application
pour lesquelles les informations traitées doivent être conservés bien au delà de la durée
d’exécution du programme de traitement.
Un fichier est toujours enregistré sur un support externe à la mémoire centrale et tout
programme de traitement échangera des informations avec le fichier, l’unité d’accès étant
l’article : on lira le fichier article par article. On l’écrira article par article.
NB :
Sur les quels les informations sont écrites les unes des autres et qui sont tels que l’accès à
une information i nécessite le passage sur toutes les informations qui précèdent i sur le
support.
Un fichier F est identifié de manière externe par un nom externe qui lui est attaché .Il peut
exister plusieurs programmes de traitement de F et dans l’environnement de chacun d’eux F
est décrit avec un nom interne qui n’a général aucun rapport avec le nom externe. En effet le
programmeur ne connaît pas le nom externe du fichier qui sera traité.
c) Accès au Fichier
On appelle mode d'accès à un fichier la façon de retrouver une donnée dans ce fichier.
Selon les impératifs du traitement, on utilise deux techniques d’accès aux articles d’un
fichier :
On accède au fichier dans l’ordre d’enregistrement des articles. Possible sur tous les
types de support et avec tous les types de fichiers . pour accéder à un article particulier,
on doit avoir parcouru tous les articles précédents sur le support.
On accède directement aux articles particuliers sans passer par des articles
intermédiaires ; cet accès n’est possible qu’avec des supports adresses.
Un fichier peut être vide : Dans ce cas il se réduit à sa marque de fin de fichier.
L’organisation d’un fichier définit la manière dont les articles sont disposés sur le support.
Si F est le nom interne du fichier, nous noterons Ouvrir (F) la primitive qui permet de débuter
le traitement. Au moment de traitement du fichier, un programme doit s’assurer du control
de ce fichier à l’aide d’une primitive d’ouverture du fichier.
Enfin de traitement, le programme qu’il n’a plus besoin du fichier F en effectuant la fermeture
de F, au moyen de la primitive Fermer (F).
• Complète le fichier par une marque de fin de fichier dans le cas où le traitement était
une création de fichier
Un fichier séquentiel est un fichier dont les données ne sont accessibles que de manière
consécutive sur le support. Leur accès est donc séquentiel. Contrairement aux éléments d'un
tableau les données d'un fichier séquentiel ne sont pas accessible directement, ni par un
indice, ni par un nom. Pour accéder à un enregistrement particulier, il faut parcourir le fichier
séquentiel depuis le début jusqu'à trouver l'enregistrement recherché.
On peut se représenter un fichier séquentiel comme une bande de papier contenant des articles
cotes à cotes. Cette bande défile sous une tête de lecture qui ne peut lire qu’un seul article à la
fois. Pour accéder à un article, on est obligé de positionner la tête de lecture sur cet article, en
faisant défiler la bande en dessous.
1. Déclaration
Dans un programme, un fichier est désigné par une variable, qu'on déclare dans la section des
variable (C'est une variable particulière qui ne représente pas un espace de la mémoire mais
qui représente un espace dans un périphérique de stockage).
Pour déclarer un fichier séquentiel structuré, il faut indiquer le type des articles (enregistrements)
qui composent ce fichier. Le plus souvent les articles sont de type enregistrement, déclaré au
préalable.
En algorithmique
Type
Nom_type = Enregistrement
champ 1 : Type 1
----
champ n : Type n
Fin Enregistrement
Exemple
Type
temployé = enregistrement
nom en caractère
prénom en caractère
fonction en caractère
salaire en Numérique
finenreg
2. Ouverture et Fermeture
Comme un fichier ne se trouve pas en mémoire centrale (mais en périphérique), il n'est pas
accessible directement par le programme (seule la mémoire centrale est accessible directement). Il
est nécessaire de l'ouvrir avant de pouvoir l'utiliser. L'ouverture permet la réservation d'une
mémoire tampon en mémoire centrale pour les échanges entre le disque et la mémoire centrale.
Il existe 3 modes principaux d'ouverture d'un fichier:
- en lecture pour récupérer des données du fichier dans des variables de la mémoire centrale
- en écriture pour créer un fichier dans lequel enregistrer des résultats. Si fichier existe déjà,
son ancien contenu est détruit
- en mode ajout pour pouvoir ajouter des articles à la fin d'un fichier déjà existant (dans un
fichier séquentiel, il est impossible d'ajouter un article ailleurs qu'à la fin)
Ouvrir nom_fichier en mode_ouverture
Après utilisation, un fichier doit être fermé, de façon à libérer la mémoire tampon allouée lors de
L’ouverture et ainsi enregistrer les dernières données du tampon non encore transférées.
Fermer nom_fichier
Remarque : Dans les fichiers à accès direct, il existe un autre mode d’ouverture : le mode mise à
jour. Il Permet de modifier un article existant, ou même d’ajouter un nouvel article au milieu du
fichier. Ces opérations sont impossibles directement avec les fichiers à organisation séquentielle.
Rappelons que L'ouverture permet d'effectuer la liaison entre le fichier logique (la variable du programme) et
le fichier physique manipulé par le système d'exploitation.
3. Lecture et écriture
La communication entre la mémoire centrale et le fichier peut se faire dans les deux sens:
de la mémoire au fichier : c'est l'écriture
ou du fichier vers la mémoire : c'est la lecture
a) Lire
L'instruction Lire permet de transférer des articles d'un fichier existant dans une (ou plusieurs)
variable du programme. La variable lue doit obligatoirement être de même structure (c'est-à-
dire du même type) que les articles du fichier. Le fichier lu doit obligatoirement exister.
Si un seul fichier est ouvert, on peut omettre d'indiquer le nom du fichier sur lequel on lit. En
revanche, si plusieurs fichiers sont ouverts simultanément, il faut obligatoirement préciser sur
quel fichier on lit.
ex:
Recopier dans la variable ouvrier les informations contenues dans l'article suivant
/* ouvrier est un enregistrement de type temployé*/
ex:
Si non eof( ) Alors
Lire (Personnel, ouvrier)
Sinon
ECRIRE "Fin de fichier atteinte"
FinSi
b) Ecrire
ex:
Variable empl en temploye
Début
empl.nom "Dupont"
empl.prenom "Jean"
……….
Ecrire (Personnel, empl)
………..
Fin
NB :
Dans un fichier séquentiel, il est impossible de modifier directement un article, encore moins
d’ajouter un nouvel article ailleurs qu’à la fin, et non plus de supprimer physiquement un article.
Ces opérations de mise à jour ne peuvent se faire qu’en réécrivant complètement le fichier. La
mise à jour directe n’est possible qu’avec les fichiers à accès direct.
Type
tcompte = enregistrement
num en entier
état en caractère (*N pour normal, I pour impayé, C pour contentieux*)
Solde en réel
Finenreg
Début
(* création et remplissage du fichier *)
Ouvrir cpteclt en écriture
(*on saisit les informations sur les clients et on les écrit dans le fichier*)
Répéter
(* on saisit les champs de l'enregistrement*)
ECRIRE"Entrer Numéro?"
Saisir compte.num
ECRIRE" Entrer etat?"
LIRE compte.etat
ECRIRE" Entrer solde?"
LIRE compte.solde
ECRIRE"Autre compte? (O/N)"
LIRE rep
(*on recopie l'enregistrement dans le premier article vide du fichier*)
Ecrire (cpteclt, compte)
Jusqu'à rep ≠ "N"
Fermer cpteclt
Notion
La programmation classique telle que étudiée au travers des langages C, Pascal… définie un
programme Comme étant un ensemble de données sur lesquelles agissent des procédures et
des fonctions. Les données constituent la partie passive du programme. Les procédures et les
fonctions constituent la partie active.
Programmer dans ce cas revenait à :
- définir un certain nombre de variables (structures, tableaux…)
- écrire des procédures pour les manipuler sans associer explicitement les unes aux autres.
Exécuter un programme se réduit alors à appeler ces procédures dans un ordre décrit par le
séquençage des instructions et en leur fournissant les données nécessaires à
l’accomplissement de leurs tâches.
Dans cette approche données et procédures sont traitées indépendamment les unes des autres
sans tenir Compte des relations étroites qui les unissent. Les fonctions, procédures et autres
suites d’instructions accèdent à une zone où sont stockées les données. Il y a donc une
dissociation entre les données et les fonctions se qui pose des difficultés lorsque l’on désire
changer les structures de données. Dans les langages procéduraux, les procédures s’appellent
entre elles et peuvent donc agir sur les mêmes données provoquant ainsi des effets de bord.
De ces problèmes sont issus une autre manière de programmer : la programmation par objet.
En approche objet, l’évolution des besoins aura le plus souvent tendance à se présenter
comme un changement de l’interaction des objets. S’il faut apporter une modification aux
données, seul l’objet Incriminé (encapsulant cette donnée) sera modifié. Toutes les fonctions à
modifier sont bien identifiées : elles se trouvent dans ce même objet : ce sont ses méthodes.
Dans une approche structurée, l’évolution des besoins entraîne souvent une dégénérescence,
ou une profonde remise en question, car la décomposition des unités de traitements (du
programme principal aux sous fonctions) est directement dictée par ces besoins. D’autre part,
une modification des données entraîne généralement une modification d’un nombre important
de fonctions éparpillées et difficiles à identifier dans la hiérarchie de cette décomposition.
3. 1. les Classes
a) Notion
une classe définit la structure des données particulières ainsi que les données permettant de la
manipuler.
Une classe peut être considérée comme un moule à partir duquel on peut créer des objets.
Une classe décrit la structure interne d'un objet : les données qu'il regroupe, les actions qu'il
est capable d'assurer sur ses données. A partir d’une classe, sont Engendrés les objets réels
qui s’appellent des instances de la classe considérée.
Une classe est un ensemble d’objets qui ont en commun :
- les mêmes méthodes
- les mêmes types d’attributs
b) Contenue de la Classe
b.1 Une classe contient :
• Des attributs (ou champs, ou variables d’instances).
L'attribut est definit comme etant la variable interne à la classe.
En POO, programmer revient donc à décrire des classes d’objets, à caractériser leur
structure et leur comportement, puis à instancier ces classes pour créer des objets réels. Un
objet réel est matérialisé dans l’ordinateur par une zone de mémoire que les données et son
code occupent.
d) Visibilité de la Classe
• public : la classe pourra être utilisée dans tout votre projet.
• private : La classe ne peut être utilisée que dans le module dans lequel elle est
définie
• protected La classe ne peut être utilisé dans la sous-classe de celle de laquelle elle
est définie.
• Etc
NB : Les termes Classe et Objet sont souvent confondus mais il s’agit, en fait d’éléments
distincts. Une classe représente la structure d’un élément alors que l’objet est un exemplaire
créé sur le modèle de cette structure.
Un objet représente une entité du monde réel, ou de monde virtuel dans le cas d’objets
immatériels, qui se caractérisent par une identité, des états significatifs et par un
comportement.
Un objet est caractérisé par plusieurs notions :
L’identité – L’objet possède une identité, qui permet de le distinguer des autres objets. On
construit généralement cette identité grâce à un identifiant découlant naturellement du
problème (par exemple un produit pourra être repéré par un code, une voiture par un numéro
de série, etc.)
Les attributs – Il s’agit des données caractérisant l’objet. Ce sont des variables stockant
des informations, sur l’état de l’objet. Une propriété est soit un attribut (une donnée
caractérisant l’état de l’objet, entité élémentaire comportementale de l’objet).
Les méthodes – Les méthodes d’un objet caractérisent son comportement, c’est-à-dire
l’ensemble des actions (appelées opérations) que l’objet est à même de réaliser. Ces
opérations permettent de faire réagir l’objet aux sollicitations extérieures (ou d’agir sur les
autres objets). De plus, les opérations sont étroitement liées aux attributs, car leurs actions
peuvent dépendre des valeurs des attributs, ou bien les modifier.
Algorithme Deux-Variables-Pour-Une-date
Variables : d1,d2: Date
début
d1 new date(23,4,2003)
d2 d1
Fin
Le constructeur est appelé pour construire une instance de la classe. L'objectif d'un
constructeur est d'initialiser tous les attributs. Une Classe peut posséder plusieurs
constructeurs(Portant le même nom) mais ayant des paramètres différents. Un
constructeur ne retourne jamais de valeur, même Vide.
Les constructeurs sont des méthodes particulières d’une classe par différents aspects. Le
constructeur est une méthode portant toujours le même nom que la classe elle-même.
Il n’est jamais appelé explicitement dans le code mais de manière implicite à la création
de l’instance de la classe.
Le Rôle du constructeur est principalement d’initialiser des champs d’une instance
des classe.
NB :
Comme toute méthode classique, un constructeur peut attendre des paramètres.
Le constructeur qui n’attend pas de paramètre est désigné comme le
constructeur par défaut.
3.4 l’héritage
La notion d’héritage est une relation entre différentes classes permettant de définir une
nouvelle classe en se basant sur les classes existantes. On parle d’héritage simple lorsqu’une
classe fille ne possède qu’une classe mère. On parle d’héritage multiple lorsqu’une classe
fille possède plusieurs classes filles.
L’héritage est un mécanisme de transmission des propriétés d’une classe (ses attributs et
méthodes) vers une sous-classe.
NB:
L'Héritage, ou la Notion de Généralisation, précise pour deux classes que l'une est
spécialisé de l'autre: elle possède l'ensemble des attributs et des méthodes de la
première plus les siens propres.
Classe mère ou super Classe ou Classe parent ou classe de Base
Une Classe mère appelé aussi super classe est la classe qui léguera l'ensemble de ses
propretés par héritage
Classe Fille Ou sous classe ou Classe dérivée
Les méthodes et les attributs privés des classes de base sont aussi hérités par les
classes dérivées mais inaccessibles.
Une classe fille appelé aussi sous-classe est une nouvelle classe ayant acquis par
définition de l'héritage tous les attributs et toutes les méthodes de la classe mère. les
classes filles "Spécialisent" la classe mère.
L'Opérateur super
L'operateur super permet d'accéder depuis la classe fille aux attributs et aux
méthodes(non Privés) de la classe mère.
Le Protégé
Une nouvelle visibilité apparait avec l'héritage. L’Attribut et la méthode protégés sont
publics pour les classes filles (qui pourra donc les utiliser directement), et privés pour
les autres classes et algorithmes. Les méthodes et les attributs protégés seront
précédés par le symbole #
Une Classe abstraite
Une classe abstraite ne peut pas être instancié. Elle est conçu dans le but de construire
un ou des héritages.
Structure de Création de la classe Abstraite:
Classe Personne
Début
Personne ()
Début
Nom « BAHATI »
Prénom « JEAN »
Age 10
Fin
Début
Nom nomPers
Prénom prenomPers
Age agePers
Fin
Début
Me.Nom Pers.Nom
Me.Prénom Pers.Prenom
Pers.AgeJean de Dieu
Par Ir Irenge Balolage
Me.Age
Fin
93variables privées nom, Age et Prénom des valeurs et
(*Ecriture des méthodes permettant d’attribuer aux
des méthodes permettant de les afficher*)
setAge (A:Entier)
Début
Si(A>0) alors
Age A
Sinon
Age 0
Fin si
Fin
getAge () : Entier
Début
Renvoyer Age
Fin
(*méthodes pour Attribuer aux attributs Privées nom et prénom des valeurs)
Début
Nom nomP
Prénom prenomP
Fin
getNom () : Chaine
Début
Renvoyer Nom
Fin
getPrenom () : Chaine
Début
Renvoyer Prenom
Fin
Par Ir Irenge Balolage Jean de Dieu
94
Fin
Début
Ecirire Nom
Ecirire Prénom
Ecirire Age
Fin
Etudiant()
Début
Super()
CoteMath 0
Fin
setCoteMath (CoteM:Reel)
Début
CoteMath CoteM
Sinon
CoteMath 0
Fin si
Fin
getCoteMath () : Réel
Début
Renvoyer CoteMath
Fin
Par Ir Irenge Balolage Jean de Dieu
95
Debut
Super.AfficherIdentite()
Fin
Algorithme AppelPersonne
Variable E1 :ETudiant
Début
P1 new Personne ()
P1.AfficherIdentite()
(*Comme le nom, le prénom et l’ âge n’ont pas été initialise on appelle implicitement le constructeur
par défaut Personne )
P2 new Personne ()
(* On Attribue des valeurs aux variables privées et On renvoie leurs valeurs au travers des méthodes
qui sont publiques)
P2.setNom(“IMANI”)
P2.setPrenom(“PRINCE”)
P2.setAge(28)
Ecrire P1.getNom()
E1 new Personne()
E1. setCoteMath(10)
E1.setNom(“ZAWADI”)
E1.setPrenom(“GRACE”)
E1.setAge(22)
E1. afficherCote()
Fin
NB :
• Il est recommandé au programmeur d'une classe de cacher le nom et la nature
des attributs de celle-ci. Néanmoins, il est fréquent de devoir fournir aux
utilisateurs des méthodes simples pour accéder à ces attributs(Enlecture ou
en modification) . Les accesseurs sont les méthodes les plus simples
permettant d'accéder aux attributs de l'extérieur de la classe. Les accesseurs,
S'ils sont disponibles pour une classe constituent un moyen de récupérer la
valeur d'un attribut ou de la changer.
• Un Accesseur En lecture est une méthode permettant de connaitre la valeur
d'un attribut
• Un Accesseur En Ecriture est une méthode permettant de modifier la valeur
d'un attribut en lui passant la nouvelle valeur en paramètre.
En programmation Orientée Objet ,Les méthodes getNom,getPrenom et getAge
sont dites des « Accesseurs en lecture» et les méthodes setNom, setPrenom et
setAge sont dites des « Accesseurs en Ecriture».
3.5 Le Polymorphisme
Le polymorphisme Permet, Grace a l’héritage d’utiliser une instance de classe sous deux
aspects : celui de sa classe associée et celui de sa classe mère.
Exemple :
Un étudiant est une personne, avec des spécificités mais avant tout c’est une personne. Une
instance de la classe Etudiant peut être utilisée comme simple personne(c’est le
polymorphisme).
Algorithme Utilisation_polymorphisme
Début
P1 new personne()
E1 new Etudiant ()
P1 E1
Fin
Variables: A ,B : Reel
Debut
Début
A v
Fin
Début
A k
Fin
Addition ()
Début
Ecrire A+B
Fin
Addition ( i, j: reel)
Debut
A i
B j
Ecrire A+B+10
Fin
Exemple:
Fin
Fin
3.6 L’encapsulation
L'encapsulation est la capacité permettant de créer et de contrôler l'accès à un groupe
d'éléments. Les classes fournissent les moyens les plus fiable d'assurer l'encapsulation.
L'encapsulation permet de regrouper des informations et les codes les manipulant dans une
classe.
L’encapsulation consiste à masquer les détails d’implémentation d’un objet, en définissant
une interface. L’interface est la vue externe d’un objet, elle définit les services accessibles
(offerts) aux utilisateurs de l’objet. L’encapsulation facilite l’évolution d’une application car
elle stabilise l’utilisation des objets : on peut modifier l’implémentation des attributs d’un
objet sans modifier son interface, et donc la façon dont l’objet est utilisé. L’encapsulation
garantit l’intégrité des données, car elle permet d’interdire, ou de restreindre, l’accès direct
aux attributs des objets.
Les avantages de l’encapsulation sont :
- Simplification de l’utilisation des objets,
- Meilleure robustesse du programme,
- Simplification de la maintenance globale de l’application.
NB: Une règle fondamentale de l'encapsulation stipule que les données d'une classe ne
doivent être manipulées que par des méthodes ou les procédures de propriétés. cette technique
est souvent appelée dissimulation des données. Elle assure la sécurité de fonctionnement de
votre code en masquant les détails internes de la classe et évitant ainsi qu'ils ne soient utilisés
de manière inappropriée.
• Signature
La signature d’une méthode représente la précision de son nom, du type de ses arguments et
du type de donnée retournée.
• Message
• Le destructeur
Les destructeurs sont d’autres méthodes particulières d’une classe. Comme les
constructeurs, ils sont appelés implicitement mais uniquement lors de la destruction d’une
instance de classe. La signature du destructeur est imposée.
a) Le concept d’entité
b) Les Attributs
Un attribut est une propriété d’une entité ou d’une association.
Le prénom, adresse client ,nom client sont des attributs de l’entité clients.
Désignation, prix unitaire de vente sont des attributs de l’entité articles.
Quantité commandé , date de commande sont des attributs de l’association
commander .
c) L’identifiant
Propriété ou groupe de propriétés qui sert à identifier une entité.
Chaque individu d’une entité doit être identifié d’une manière unique .
d) L’association
L’association est une liaison qui a une signification précise entre plusieurs entités.
Par exemple L’association commander est une liaison évidente entre les entités clients et
articles. Tandis que livrer établit un lien entre l’entité fournisseur et article.
d) Les cardinalités
La cardinalité d’un lien d’une entité et une association précise le minimum ou le maximum
de fois qu’un élément d’une entité peut être concerné par l’association.
La Seul difficulté pour établir correctement les cardinalités et de se poser les questions dans
le bon sens. Autour de l’association commander. Par exemple :
Côté clients, La question est “un client peut commander combien d’articles ?”
Et la réponse est entre « 1 et plusieurs ».
Côté Articles, La question est « un article peut être commandé par combien des
clients? » et la réponse est « entre 0 et plusieurs».
Cardinalité minimum : nombre minimum d’occurrences d’une entité X dans l’association
considérée.
Cardinalité maximum : nombre maximum d’occurrences d’une entité X dans l’association
considérée.
Pour parfaire une base de données relationnelle, il est nécessaire de connaître les trois
premières formes normales et la forme normale dite BoyceCodd ; les suivantes ne sont que
des extensions peu usitées.
Ex2 :
ELEVE (noélv, nom, prenom, liste_notes)
Un attribut ne peut pas être un ensemble de valeurs
Décomposition
ELEVE (noélv, nom, prenom)
NOTE (noélv, no_matiere, note)
Autrement dit, tous les attributs n’appartenant pas à la clé ne dépendent pas d’un attribut
non clé.
Exemple : La relation Commande(NuméroCommande, #CodeClient, Nom client,
#RefArticle) est elle
en troisième forme normale ?
Est-elle
en première forme normale ? Oui
Est-elle
en deuxième forme normale ? Oui
Est-elle
en troisième forme normale ? Non !
En effet Nom client dépend d’une propriété non clé : CodeClient
clients
a) Notion
Un SGBD peut être défini comme un ensemble de logiciels systèmes permettant de stocker et
d’interroger un ensemble des fichiers indépendants. Mais aussi comme un outil permettant de
modéliser et de gérer les données d’une entreprise. Un Système de Gestion de Bases de
Données (SGBD) est un logiciel de haut niveau qui permet de manipuler les informations
stockées dans une base de données.
Table est un composant de la base des données qui stocke les informations dans des
enregistrements (Lignes) et des Champs (colonnes).Les informations sont, en général
regroupés par catégorie au niveau d’une table.
Enregistrement
L’enregistrement est l’ensemble des informations relatives à l’élément d’une table.
Les enregistrements sont les équivalents au niveau logique, des lignes d’une table. Par
exemple, nous aurons la table clients contient les caractéristiques d’un client particulier
Champ
Le champs est une zone de l'enregistrement d'un fichier consacré à un type particulier de
données
Un enregistrement est composé de plusieurs champs .Chaque champ d’enregistrement
contient une seul information sur l’enregistrement.
Par exemple, L’enregistrement Client peut contenir des champs comme codeClient, Nom,
Prenom,….
Clé primaire
Une clé primaire est utilisée pour identifier d’une manière unique chaque ligne d’une
table. La clé primaire est un champ ou une combinaison de champs dont la valeur est
unique dans une table. Par exemple, le champ codeclient est la clé primaire de la table
client .Il ne peut y avoir deux clients ayant le même codeclient.
Clé étrangère
Une clé étrangère représente un ou plusieurs champs d’une table, qui font références aux
champs de la clé primaire d’une autre table. Les clés étrangères indiquent la manières dont les
tables sont liées.
Relation
Une relation est une association établie entre les champs communs dans deux tables. Une
relation peut être de 1 à 1, de 1 à plusieurs ou de plusieurs à plusieurs .une relation de 1 à
plusieurs entre la table client et la table commande permet à une requête de renvoyer toutes
les commandes correspondant à un client.
EXERCICES
1. En procédant comme ci-dessus, dites quelles seront les valeurs des variables a,
b et c, après l’exécution de chacune des instructions :
a5
b3
ca+b
a2
c b - a
3.
a) Qu’obtiendra-t-on dans les variables n1 et n2 après exécution des instructions ?
n1← 5
n2 ← 7
n1 ← n2
n2 ← n1
b) Même question avec les instructions :
n1 ← 5
n2 ← 7
n2 ← n1
n1 ← n2
4.
Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?
Algorithme Affectation1
Variables A, B en Entier
Début
A ← 1
B ← A + 3
A ← 3
Fin
5.
Quelles seront les valeurs des variables A, B et C après exécution des instructions suivantes ?
Algorithme Affectation1
Variables A, B, C en Entier
Début
A ← 5
B ← 3
C ← A + B
A ← 2
C ← B – A
Fin
6.
Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?
Algorithme Affectation3
Variables A, B en Entier
Début
A ← 5
B ← A + 4
A ← A + 1
B ← A – 4
Fin
7.
Quelles seront les valeurs des variables A, B et C après exécution des instructions suivantes ?
Algorithme Affectation4
Variables A, B, C en Entier
Début
A ← 3
B ← 10
C ← A + B
B ← A + B
A ← C
Fin
8.
Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?
Algorithme Affectation4
Variables A, B en Entier
Début
A ← 5
B ← 2
A ← B
B ← A
Fin
13.Ecrire un programme qui lit le prix HT d’un article, le nombre d’articles et le taux de TVA, et
qui fournit le prix total ,le Tva sera inclus dans le total à payer. Faire en sorte que des libellés
apparaissent clairement.
15. Ecrire un algorithme qui demande deux nombres à l’utilisateur et l’informe ensuite si leur
produit est négatif ou positif (on laisse de côté le cas où le produit est nul). Attention toutefois : on
ne doit pas calculer le produit des deux nombres.
17.Ecrire un algorithme qui demande l’âge d’un enfant à l’utilisateur. Ensuite, il l’informe de sa
catégorie :
• "Poussin" de 6 à 7 ans
• "Pupille" de 8 à 9 ans
• "Minime" de 10 à 11 ans
• "Cadet" supérieur à 12 ans
Peut-on concevoir plusieurs algorithmes équivalents menant à ce résultat ?
18.Ecrire un algorithme qui demande un nombre compris entre 10 et 20, jusqu’à ce que la réponse
convienne. En cas de réponse supérieure à 20, on fera apparaître un message : « Plus petit ! », et
inversement, « Plus grand ! » si le nombre est inférieur à 10.
19.Ecrire un algorithme qui demande un nombre de départ, et qui ensuite écrit la table de
multiplication de ce nombre, présentée comme suit (cas où l'utilisateur entre le nombre 7) :
Table de 7 :
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
…
7 x 10 = 70
20.Ecrire un algorithme qui demande un nombre de départ, et qui calcule la somme des entiers
jusqu’à ce nombre. Par exemple, si l’on entre 5, le programme doit calculer :
1 + 2 + 3 + 4 + 5 = 15
NB : on souhaite afficher uniquement le résultat, pas la décomposition du calcul.
21.Ecrire un algorithme qui demande successivement 20 nombres à l’utilisateur, et qui lui dise
ensuite quel était le plus grand parmi ces 20 nombres :
Entrez le nombre numéro 1 : 12
Entrez le nombre numéro 2 : 14
etc.
22.Ecrire un algorithme qui déclare et remplisse un tableau de 7 valeurs numériques en les mettant
toutes à zéro.
23.Ecrire un algorithme qui déclare un tableau de 9 notes, dont on fait ensuite saisir les valeurs par
l’utilisateur.
29. Toujours à partir de deux tableaux précédemment saisis, écrivez un algorithme qui calcule le
schtroumpf des deux tableaux. Pour calculer le schtroumpf, il faut multiplier chaque élément du
tableau 1 par chaque élément du tableau 2, et additionner le tout. Par exemple si l'on a :
30.Ecrivez un algorithme qui permette la saisie d’un nombre quelconque de valeurs, qui
devront être stockées dans un tableau. L’utilisateur doit donc commencer par entrer le nombre de
valeurs qu’il compte saisir. Toutes les valeurs doivent être ensuite augmentées de 1, et le nouveau
tableau sera affiché à l’écran.
j Suivant
i Suivant
Fin
33.Quel résultat produira cet algorithme ?
Algorithme Tableau7
Tableau X(2, 3) en Entier
Variables i, j, val en Entier
Début
Val ← 1
Pour i ← 1 à 2
Pour j ← 1 à 3
X(i, j) ← Val
Val ← Val + 1
j Suivant
i Suivant
Pour j ← 1 à 3
Pour i ← 1à 2
Ecrire X(i, j)
i Suivant
j Suivant
Fin
Pour m ← 1 à 2
Ecrire T(k, m)
m Suivant
k Suivant
Fin
a) Algorithme pour
Variable X, Y en entiers
Début
Pour X allant de 1 à 3
Pour Y allant de 1 à 3
Ecrire X+1*Y
Y suivant
X suivant
Fin
……………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………
b) Algorithme répéter
Variable X en entier
Début
X90
Répéter
Ecrire X
XX+1
Jusqu’à(X>10)
Fin
………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………
c) Algorithme tant que
Variable X en entier
Début
X2
Tant que (X<=10)
Si (X %2=1) alors
Ecrire X
Fin SI
XX+1
Fin tant que
Fin
……………………………………………………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………………………………………………
d) Algorithme multiplication
Variable X, Y en entiers
Début
Pour X allant de 1 à 3
Pour Y allant de 1 à 4
Ecrire X-Y
Y suivant
X suivant
Fin
Sachant que A et B sont des matrices à 3 Lignes et à 3 colonnes , et les éléments des matrices A et B
sont préalablement saisis par l’utilisateur .
Exemple : A +B =S
NB : l’algorithme ne va qu’afficher
38. Écrire l’algorithme d’une fonction qui calcule et retourne le volume d’une sphère.
Sachant que le rayon R sera entré en paramètre.
Étant donné que le volume d’une sphère est donné par V=4 R3
39. Créer L’algorithme d’un programme affichant la somme de nombres entiers pairs se trouvent dans
l’intervalle
40. Créer L’algorithme d’un programme affichant la somme de nombres entiers impairs se trouvent
dans l’intervalle
41. Pour un Capital C, placé au taux périodique T, Pendant n périodes, l’intérêt I s’écrit :
I= C * T * N
Si la durée N est exprimée en trimestre : T= (taux annuel)/4
Si la durée N est exprimée en mois : T= (taux annuel)/12
Si la durée N est exprimée en jours : T = (taux annuel)/ 360
Créer l’algorithme qui permet de calculer et afficher l’intérêt selon que la durée N est exprimée en
trimestre, en moins ou en jours
Sachant que l’utilisateur va taper au clavier le Capital(C ), le taux d’intérêt(I) et la durée(N)
NB :
Pour cette question, vous pouvez utiliser les SUIVANT CAS ou les si imbriqués
43) Quelle différence Pouvez-vous établir entre l’accès séquentiel aux articles d’un fichier de
l’accès sélectif aux articles d’un fichier ? (3pts)
......................................................................................................................................................
......................................................................................................................................................
......................................................................................................................................................
......................................................................................................................................................
......................................................................................................................................................
a) 10*2+12-14%2=
-----------------------
-----------------------
-----------------------
b) 16%2*1+12-25=
-------------------------
----------------------------------
-----------------------------------
Fin
47.
48.
49. Un compte en banque concerne une personne spécifiée par son nom, un numéro de
compte (un entier), et un montant (un réel).
Question : Déclarez un enregistrement pour cette structure.
50.Soit la structure Info constituée par le nom, le numéro de téléphone, le numéro de carte
bancaire . Ecrivez un programme qui saisit puis affiche les enregistrements pour 3 personnes.
46. Le chef de département informatique veut automatiser la cotation de 6 cours dans son institution
supérieur, sachant que les points maximum de ces cours sont:
la Mention:
- "satisfaction" si le pourcentage est >=55 et <69 :
- "Distinction" si le pourcentage est >=70 et <80 :
- "Grande Distinction" si le pourcentage est >=80 et <90 :
- "Très Grande Distinction" si le pourcentage est >=90 et <=100 :
NB: On ne s'intéresse pas au nombre d'échec profond ou léger.
Question
Orientations:
1. Chaque cours aura sa variable.
2. la variable qui va contenir la cote d'un cours doit être >=0 et <=20(chaque cours sera coté sur 20).
Exemple:
Pour le cours d'algorithme, sa variable sera nommée Algo et de type "double"
3. Si l'utilisateur clique sur le bouton:
a) calculer Pourcentage
c)Fermer
1. Global........................................................................................................................................... II
2. Spécifique .................................................................................................................................... II
BIBLIOGRAPHIE : ..................................................................................................................................... IV
1.0 NOTION.................................................................................................................................. - 1 -
2.11.4 Piles.................................................................................................................................... 64
3.4 l’héritage................................................................................................................................. 89
EXERCICES............................................................................................................................................ 111