Académique Documents
Professionnel Documents
Culture Documents
UPL
Si, naturellement, vous êtes organisé ce qui est souhaitable pour le programmeur
que vous serez, vous procédez généralement de façon méthodique pour réaliser vos tâches. En
d’autres termes, chaque fois que vous souhaitez effectuer un travail ou solutionner un
problème, vous suivez une certaine logique, une méthode relativement rigoureuse. Même dans
les cas les plus simples et routiniers comme « mettre vos chaussures » ou « préparer du fufu »,
vous disposez d’une méthode ou logique de travail. Pour preuve, vous traiterez de « déphasé »
celui qui met ses chaussures après ses chaussettes ou celle qui mélange la farine à l’eau avant
d’allumer le feu.
Le domaine de la programmation n’échappe pas à la règle. Au contraire, il
l’amplifie, comme vous avez pu le découvrir dans le cours d’Algorithmique de Premier
Graduat.…
L’Algorithmique constitue une illustration de la nécessité d’une telle convergence
de disciplines et de techniques ; c’est en effet à partir d’algorithmes que les informaticiens
pourront élaborer les logiciels utilisant au mieux les matériels informatiques de plus en plus
évolués mis à leur disposition par les progrès de la technique électronique.
J. GIRERD
PLAN DU COURS
INTRODUCTION
CHAPITRE Ier : CONCEPTION D’UN ALGORITHME
CHAPITRE II : LES VARIABLES ET LES CONSTANTES
CHAPITRE III : LES ENTREES ET LES SORTIES
CHAPITRE IV : LES STRUCTURES DE CONTROLE
CHAPITRE V : LES TABLEAUX
CHAPITRE VI : LES PROCEDURES ET FONCTION
BIBLIOGRAPHIE
1. B. MUYER, Méthodes de programmation, Ed. Eyrolles, Paris, 1978.
INTRODUCTION
1. Généralités
L’algorithme est la description d’un traitement automatisé de données
destiné à être réalisé sur un ordinateur, après avoir traduit cette description dans
un langage de programmation. Il est aussi défini comme une méthode de résolution
des problèmes suivant un enchaînement, déterminé des règles opératoires.
Construire un algorithme revient parfois à construire une suite
possédant une propriété invariante intéressante, grâce à laquelle on pourra
déterminer le(s) résultat(s) de l’algorithme à partir du premier terme de la suite
possédant une propriété supplémentaire particulière : qu’il s’agisse d’un terme
donné de la suite (« terme d’ordre n »), de la limite de la suite, ou du premier
terme tombant dans un domaine fixé à l’avance.
L’algorithmique est la discipline qui consiste, après analyse du
problème à résoudre, à définir cette description du traitement, et ce, de manière
totalement indépendante du langage qui sera choisi pour la programmation.
La résolution d’un problème posé suppose une méthode. Par exemple :
il faudrait tracer des canevas pour les activités que nous aurons à effectuer dans la
journée, les courses que nous ferons en ville, les différentes actions que nous devons
mener pour atteindre un certain but, etc. tout en essayant de maximiser les profits,
et de minimiser les dépenses.
Cet ensemble d’actions qui doivent être réalisées en vue de satisfaire
une spécification donnée est appelé ALGORITHME.
2. Aperçu historique
Les premiers algorithmes dont on a retrouvé des descriptions datent
des Babyloniens, au IIIe millénaire av. J.-C. Ils décrivent des méthodes de calcul
et des résolutions d’équations à l’aide d’exemples. Un algorithme célèbre est celui qui
se trouve dans le livre 7 des Éléments d’Euclide, et appelé algorithme d’Euclide. Il
permet de trouver le plus grand diviseur commun, ou PGCD, de deux nombres. Un
point particulièrement remarquable est qu’il contient explicitement une itération et
que les propositions 1 et 2 démontrent sa convergence.
Ce mot vient d’un célèbre mathématicien arabe Abû Abdallah
Mohammed ibn Musã AL KHWARIZMI Al-Magusi (780-850) qui l’écrivit dans son
œuvre ‘‘Hisab al-jabr w’al-muqabala’’ en 825 qui veut dire « L’action de faire
passer et d’agencer les parties d’un tout » ou « l’action de reconstituer un vase
brisé » en d’autres termes la description d’une suite finie d’actions permettant
d’aboutir à un résultat déterminé.
Les premiers algorithmes dont on a retrouvé des descriptions datent
des Babyloniens, au IIIe millénaire av. J.-C. Ils décrivent des méthodes de calcul
et des résolutions d’équations à l’aide d’exemples. Un algorithme célèbre est celui qui
se trouve dans le livre 7 des Éléments d’Euclide, et appelé algorithme d’Euclide. Il
permet de trouver le plus grand diviseur commun, ou PGCD, de deux nombres. Un
point particulièrement remarquable est qu’il contient explicitement une itération et
que les propositions 1 et 2 démontrent sa convergence.
Le savant arabe Averroès (1126-1198) évoque une méthode de raisonnement
où la thèse s’affine étape par étape, itérativement, jusqu’à une certaine convergence
et ceci conformé- ment au déroulement d’un algorithme. À la même époque, au XIIe
siècle, le moine Adelard de Bath introduit le terme latin de algorismus, par référence
au nom d’Al Khuwarizmi. Ce mot donne algorithme en français en 1554.
L’algorithme est une suite d’instructions, qui, une fois exécutée
correctement, conduit à un résultat donné. Chaque action qui constitue
l’algorithme, doit comporter la désignation des objets sur lesquels elle doit porter.
Il est encore défini comme un énoncé qui décrit une action à réaliser susceptible
d’être comprise par un processeur.
Un algorithme suppose l’existence d’un processeur (Abstrait ou réel)
capable de comprendre et d’exécuter les actions qui le compose.
Généralement, un ingénieur software (ingénieur logiciel), pour un
problème donné, écrit une suite d’algorithmes successifs s’adressant à une suite des
processeurs abstraits de moins en moins compétents. Cette suite d’algorithmes
successifs amène l’ingénieur software à décomposer de façon répétitive chacune des
actions à réaliser en actions plus simples tels que :
Le premier algorithme se limite généralement à définir avec précision la
spécification globale, et s’adresse à un processeur abstrait très compétent,
Le dernier algorithme ne contiendra que des actions suffisamment simples,
atomiques, primitives ou élémentaires pour être exécuté directement par le
processeur réel disponible.
3. Niveau d’abstraction
La difficulté majeure dans la conception d’un algorithme résulte dans
la grande différence qui existe entre le niveau de complexité de l’action que l’on
veut faire réaliser, et le niveau très élémentaire, constitué des actions primitives
que le processeur est en mesure de réaliser. De ce fait, l’écriture de l’algorithme
final s’avère impossible dans un premier temps. Sa conception nécessite de passer
par un certain nombre d’étapes intermédiaires dont chacune permet de cacher une
partie de la complexité.
La finalité à atteindre étant la même, chaque étape intermédiaire la
décrit en utilisant les actions primitives disponibles de ce niveau, qu’un
processeur abstrait de ce même niveau supposé plus intelligent que le processeur
final serait en mesure de réaliser.
Ainsi, chacune des étapes intermédiaires de la réalisation de
l’algorithme final, s’exprime elle-même sous forme d’un algorithme. Les
algorithmes intermédiaires sont constitués d’actions abstraites supposées exécutées
par des processeurs abstraits, tandis que l’algorithme final ne comporte que les
actions primitives du processeur visé pour l’exécution.
langages de programmation,
4. Unifier la conception de la solution pour l’ensemble de langages
de programmation.
Pour obtenir un bon programme il faut partir d’un algorithme qui doit
posséder entre autres, les qualités suivantes :
- La clarté: Un bon algorithme doit être clair, facile à comprendre par tous ceux
qui le lisent.
- La généricité: Un bon algorithme doit être le plus général possible pour
répondre au plus grand nombre de cas possibles.
- L’abstraction: Un bon algorithme doit pouvoir être traduit en n’importe quel
langage de programmation, il ne doit donc pas faire appel à des notions
techniques relatives à un langage particulier ou bien à un système d’exploitation
donné.
- La facilité d’utilisation: Un bon algorithme doit être d’une utilisation
aisée même par ceux qui ne l’ont pas écrit.
- La performance: Un bon algorithme doit être conçu de manière à limiter le
nombre d’opérations à effectuer et la place occupée en mémoire.
6.1. Pseudo-langage
Un pseudocode est une description informelle haut niveau, mais
structurée du fonctionnement d’un algorithme. Dans un pseudocode, on utilise les
conventions structurelles d’un langage de programmation, mais cela est destiné à
faciliter la lecture par un hu- main plutôt que par une machine. La syntaxe d’un
pseudocode est donc moins stricte que celle d’un vrai langage de programmation.
Étymologiquement, pseudocode signifie un faux code. Dans le vocabulaire
de la programmation informatique, on appelle code source ou code tout court la
description littérale d’un programme dans un langage de programmation donné. Un
pseudocode est donc une description semblable à celle d’un vrai code dans un vrai langage
de programmation, sauf que le pseudocode est plus simplifié syntaxiquement.
Le but d’utiliser un pseudocode pour exprimer un algorithme plutôt
qu’un vrai langage de programmation est que le pseudocode est plus facile à comprendre
par un être humain, parce qu’il est plus clair que le code source d’un programme.
On a besoin d’un langage formel minimum pour décrire un algorithme.
Un langage de programmation (Java, C, Pascal, etc.) est trop contraignant. Dans la
littérature, les algorithmes sont décrits dans un pseudo langage qui ressemble à un
langage de programmation (le pseudo langage utilisé dépend donc de l’auteur et
peut être spécifié par celui-ci en début d’ouvrage).
Tous les pseudos langages recouvrent les mêmes concepts :
- Variables, affectation
- Structures de contrôle : séquence, conditionnelle (sélection), itération ou
boucles
- Découpage de l’algorithme en sous-programmes (fonctions, procédures).
- Structures de données simples ou élaborées (tableaux, listes, dictionnaires,
etc.)
Aujourd’hui avec le développement des sciences et des technologies,
ème
nous sommes parvenus au monde de la programmation à la 4 génération. Nous
sommes passés du binaire à l’assembleur puis des langages procéduraux aux
langages événementiels et objets.
Derrière toutes ces innovations, aussi complexes qu’elles soient, nous
répétons toujours le même processus pour résoudre un problème en informatique.
Cette résolution peut être schématisée ainsi qu’il suit :
% PROGRAMME PRINCIPAL %
Début
% Instruction %
FIN ou FinAlgo ou FinAlgorithme ou FinProgramme
Enoncé du problème
Analyse
Algorithme
Codage
Compilation
Programme exécutable
Exécution
Résultat
EXERCICES
1. Ecrire la suite d’instructions qui nous permet de calculer et d’afficher la
somme de deux nombres lus au clavier.
Solution 1
a.
ACTIONS EN ENTREE
- Avoir les deux nombres
TRAITEMENTS A EFFECTUER
- Calculer la somme de deux nombres
RESULTATS A AFFICHER
- Afficher la somme de deux nombres
b.
- Lire le premier nombre
- Lire le deuxième nombre
- Calculer la somme de deux en additionnant le premier nombre au
deuxième nombre
- Afficher la somme obtenue
Solution 2
a.
ACTIONS EN ENTREE
- Avoir le coût d’achat de la marchandise
- Avoir le prix de vente de la marchandise
TRAITEMENTS A EFFECTUER
- Calculer le bénéfice
RESULTATS A AFFICHER
- Afficher le bénéfice
b.
- Lire le coût d’achat de la marchandise
- Lire le prix de vente de la marchandise
- Calculer le bénéfice en soustrayant du prix de vente le coût d’achat
- Afficher le bénéfice obtenu
Solution 3
a.
ACTIONS EN ENTREE
- Avoir les cotes
TRAITEMENTS A EFFECTUER
- Tester les cotes
RESULTATS A AFFICHER
- Admettre le candidat avec dispense des épreuves d’enseignement
général du deuxième groupe
- Admettre le candidat sans dispense
- Eliminer le candidat
b.
- Lire la note obtenue aux épreuves d’enseignement général
- Tester si la cote lue est inférieure ou égale à 20
- Lire la note obtenue aux épreuves d’enseignement professionnel
- Tester si la cote lue est inférieure ou égale à 20
- Tester si la cote obtenue aux épreuves d’enseignement général est égale
ou supérieure à 10 et si la cote obtenue aux épreuves d’enseignement
professionnel est supérieure ou égale à 8
Nous constatons que le candidat qui est admis dans le deuxième peut ou ne
pas avoir de dispense. Par conséquent nous aurons à tester pour le candidat
ayant réussi au premier groupe si il peut avoir une dispense. Ainsi, nous
aurons :
c.
- Lire la note obtenue aux épreuves d’enseignement général
- Tester si la cote lue est inférieure ou égale à 20
- Lire la note obtenue aux épreuves d’enseignement professionnel
- Tester si la cote lue est inférieure ou égale à 20
- Tester si la cote obtenue aux épreuves d’enseignement général est égale
ou supérieure à 10 et si la cote obtenue aux épreuves d’enseignement
professionnel est supérieure ou égale à 8
Si oui :
- Tester si la cote obtenue aux épreuves d’enseignement
général est égale ou supérieure à 12
Solution 4
a.
ACTIONS EN ENTREE
- Avoir l’ancienneté
- Avoir le nombre d’enfants
- Avoir le salaire brut du mois de novembre
TRAITEMENTS A EFFECTUER
- Tester l’ancienneté
- Tester le nombre d’enfants
- Calculer la prime
RESULTATS A AFFICHER
- Afficher la prime de l’agent
b.
- Lire l’ancienneté (nombre d’années de travail)
- Lire le nombre d’enfants que l’agent possède
- Lire le salaire brut de l’agent du mois de novembre
- Tester si l’ancienneté est supérieure à 2
Si oui : Tester si le nombre d’enfants est supérieur ou égal à 2
Solution 5
a.
ACTIONS EN ENTREE
- Avoir la commande
- Avoir le stock
- Avoir l’état du client (Membre ou non membre)
TRAITEMENTS A EFFECTUER
- Traiter la commande
RESULTATS A AFFICHER
- Rédiger le bon de livraison
- Emballer l’article
- Placer la commande en attente et avertir le service des adhésions
- Placer la commande en attente pour un traitement ultérieur
Faites la suite.
10. A partir du rayon d’un cercle lu, écrire une suite d’instructions qui nous
permet de calculer et d’afficher la surface et la circonférence de ce cercle.
11. Même question que le précédent (si le rayon est exprimé en mètre, calculer
cette surface et cette circonférence en décimètre, et en centimètre).
12. Un fermier possède 40 têtes de bétails composés des boucs, des pintades et
des poissons. Ecrire les instructions de manière à lui permettre de déterminer
le nombre de pattes, sachant que les boucs ont chacun 4 pattes, les pintades
ont chacune 2 pattes et les poissons n’ont pas de pattes.
13. Ecrire les instructions qui pourront permettre de déterminer le montant total
d’une facture, sachant que ont doit lire pour chaque article payé sur la
facture, le prix unitaire et la quantité.
II.1. INTRODUCTION
Lors de l’exécution d’un programme, nous constatons qu’une valeur peut
être utilisée plusieurs fois et parfois à des moments différents. Par exemple :
- La longueur d’une maison peut être utilisée pour calculer le périmètre,
pour calculer la superficie.
- Le prix unitaire d’un article peut être utilisé pour calculer le prix total
(en faisant quantité multipliée par le prix unitaire), il peut encore être
utilisé pour calculer le prix total de la facture (en faisant la sommation
des prix totaux des articles achetés)
Il convient de conserver pour le premier exemple la longueur de la maison
parce qu’elle ne doit pas changer pour le calcul du périmètre et de la superficie, et
pour le deuxième exemple il faut conserver momentanément le prix unitaire de
l’article. Il est à noter que la longueur d’une maison A ne sera pas la même que la
longueur d’une maison B, de même le prix unitaire d’un article X, n’est pas toujours
égal au prix unitaire de l’article Y.
Ainsi, il s’avère donc nécessaire d’avoir en permanence besoin de stocker
provisoirement des valeurs qu’un utilisateur peut donner à la machine (Saisies au
clavier) où que la machine peut donner à l’homme (résultat d’une opération).
Le souci permanent de conserver temporairement des valeurs lors de
l’exécution d’un programme informatique conduite à l’usage des variables.
Une variable est considérée comme une boîte que le programme va
repérer par un nom collé dessus. Pour avoir accès au contenu de la boîte, il suffit
de la designer par son nom.
Physiquement, dans la mémoire de la machine, une VARIABLE est un
emplacement repéré par une adresse binaire.
Le langage machine (ASSEMBLEUR) on utilise les adresses binaires
composées de 0 et 1 pour représenter une adresse (variable), tandis que dans un
langage évolué on épargne au programmeur la gestion fastidieuse des emplacements
mémoire et de leurs adresses, en permettant au programmeur de donner des noms
à son gré aux variables.
Une constante sera considérée comme une zone mémoire telle que la
valeur placée à l’intérieur ne peut pas changer. C'est-à-dire le contenu de cette
zone mémoire ne varie pas (ne change pas) tout au long du processus
Exemple on demande ce calculer la surface d’un cercle et sa
circonférence, sachant que la surface est trouvée en multipliant le rayon au carré
par la valeur pi, et la circonférence en multipliant le double du rayon par pi.
Dans tous les cas la valeur de pi sera toujours de 3.1416 et ne change pas
de valeurs peu importe le lieu, la grandeur du cercle,…
a. Nom de la variable
Les identificateurs sont des mots qui servent à désigner, à nommer et
à identifier les entités, les objets, les actions, les procédures et les fonctions
manipulés dans un programme.
Les identificateurs ne se créent pas n’importe comment car ils
doivent respecter l’ordre des diagrammes syntaxiques encore appelés
diagrammes de CONWAY : un identificateur débute toujours par une lettre ou
un caractère de soulignement qui peut être suivi de lettres, de chiffres ou de
caractères de soulignement de façon optionnelle.
Nombre Nombre-entier
Nbre Nbre?
a1C 1Ac
PrixDeVente Prix de vente
Elie Elisée
Quantite NombreD’Elève
Nombre_Eleve Nombre, Enfant
JourPreste Jour#Preste
A 4
pi π
Nbre4 λ
Pourc %
Exemple :
Ecrire la suite d’instructions qui nous permet de calculer et d’afficher la
somme de deux nombres lus au clavier.
Solution.
Dans la première action on a besoin d’un nombre qu’on peut appeler Nbre1
Dans la deuxième action on a besoin d’un nombre qu’on peut appeler Nbre2
Dans la troisième action on a besoin de trois variables le Nbre1, le Nbre2 et la Som
Dans la quatrième action on a besoin de la variable Som
Ainsi, on aura :
- Lire Nbre1
- Lire Nbre2
- Calculer Som égal Nbre1 plus Nbre2
- Afficher la Som
b. Type de la variable
Le type permet de préciser quelle sorte de valeur, la variable peut
contenir. Ceci permet au processeur de réserver dans la mémoire de la machine un
espace suffisant pour contenir cette valeur.
Nous distinguons plusieurs types de variables. Le type de variable choisi
pour une valeur va déterminer :
Les valeurs maximales et minimales des nombres ou des lettres
pouvant être stockées dans la variable,
La précision de ces nombres.
1. Type numérique
Pour ce type, nous avons pour les entiers :
Les entiers sont les éléments de l’ensemble N (entier naturel positif) et de Z (Z est
l'ensemble des nombres entiers relatifs, c'est à dire positifs, négatifs ou nuls : Exemple
: …, -100, …, -12, -11, -10, …, -5, -4, -3, -2,- 1, 0, 1, 2, 3, 4,
5, … 10, 11, 12, …, 100, … ∈Z
OCTET (byte) : ce type prend les entiers qui peuvent être codés sur
un octet soit 8 bits.
28 = 256 de 0 à 255
ENTIER SIMPLE : ce type prend les entiers qui peuvent être codés
sur 2 octets soit 16 bits
216 = 65536 de 0 à 65535.
ENTIER LONG : ce type prend des entiers qui peuvent être codés sur
4 octets soit 32 bits.
232 = 4.294.967.296 de 0 à 4.294.967.295.
L'ensemble N est inclus dans l'ensemble Z (car tous les nombres entiers naturels font
partie des entiers relatifs). Tout nombre dans N est aussi dans Z.
2. Types alphanumériques
Ces types nous permettent de stocker ou désigner les valeurs qui sont des
lettres ou des caractères, des signes de ponctuations, l’espace ou même de chiffres.
Nous avons : CARACTERE : qui ne contient qu’un seul caractère,
CHAINE ( ) : peut contenir plusieurs caractères. Le nombre des caractères est
à préciser dans les parenthèses.
N
1. Toutes les valeurs de type caractère ou chaîne seront représentées
toujours dans les guillemets,
Ex : ’’ GAN, ’’ Je suis Ingénieur ‘’, ‘‘1200’’
Si dans un algorithme un nom est entouré des guillemets, il est considéré comme
une valeur dans le cas contraire, il est considéré comme une variable
Ces notions abstraites de vrai ou faux peuvent être représentées par tout
ce qu’on veut : true et false, 0 et 1, oui et non, masculin et féminin,…
Une variable déclarée de ce type occupe un seul bit en mémoire.
4. Type Date
Ce type est utilisé pour des valeurs du type date telles que la date du
jour, une date d’entrée de la marchandise.
N
1. La valeur à affecter ou à attribuer à une variable doit être
nécessairement du même type que la variable.
Exemple :
ALGO ExempleVariable
Var somme, Som : Réel
Prix : Entier
prixUnit : Octet
Nom, NomPropre : Chaine(25)
DEBUT
Somme 65,56
Prix 150
Nom « Tantale »
Som 89
PrixUnit 12
NomPropre « 2000 »
FINALGO
ALGO Contrexemple
VAR somme, Som : Réel
Prix, prixUnit : Entier
Nom, NomPropre : Chaine(7)
DEBUT
Prix 150,38
Nom « Tantale Joviale »
Som « Au total j’ai 250 »
PrixUnit 540
FINALGO
C A+B
D A-1
A C*B+A
Pour un emplacement mémoire tel que sa valeur ne doit pas changée tout
au long de l’algorithme, on aura à le déclarer de la manière suivante :
Syntaxe
Constante <Nom de la constante>=<Valeur>
Exemple :
Constante Pi=3.14
Dans ce cas la constante Pi ne pourra plus changer de valeurs
Exemple :
A « 12 »
B A
C 89
D 12+3.14*C
1. Opérateurs numériques
Ce sont les opérateurs appliqués sur les valeurs numériques. Nous avons :
+ : Pour l’addition,
- : Pour la soustraction,
* : Pour la multiplication,
/ : Pour la division,
Mod : Pour le modulo ou le reste de la division modulaire
^ ou ** : Pour la puissance
Div ou \ : Pour la division entière.
L’évaluation d’une expression se fait de la gauche vers la droite en suivant
l’ordre de priorité qui est le suivant :
La puissance,
La multiplication, la division, la division entière et le modulo,
L’addition et la soustraction.
L’usage des parenthèses dans une expression permet de forcer l’ordre de
N
priorité.
Exemple : (A + B) + C A + (B + C)
Les opérateurs d’addition et de soustraction peuvent être utilisés avec
N
les valeurs du type date
2. Opérateur alphanumérique
Cet opérateur agit sur les valeurs du type chaîne de caractère ou
caractère. Nous avons :
& ou + (esperluette) : pour faire la concaténation des chaînes.
Exemple :
Nom ’’GAN’’ & ’’ SYNTH’’ Résultat : ’’GANSYNTH’’
Nom ’’GAN’’ &’’ ‘’ &’’SYNTH’’ Résultat : ’’ GAN SYNTH’’
3. Opérateurs de comparaison
Ces opérateurs s’appliquent sur les valeurs du type numérique ou sur les
valeurs du type alphanumérique.
< : Inférieur,
> : Supérieur,
<= : Inférieur ou égal,
>= : Supérieur ou égal,
<> : Différent,
= : Egal.
4. Opérateurs logiques
Ces opérateurs agissent sur des valeurs booléennes (Vrai, Faux), (True,
False), (1, 0). Parmi ces opérateurs nous avons :
1) Opérateur OU
OU est Vrai si au moins l’une des valeurs de l’expression est vraie, et
OU est faux si toutes les valeurs de l’expression sont fausses. La table de vérité
de l’opérateur OU se présente de la manière suivante :
A A OU B B
VRAI VRAI VRAI
FAUX VRAI VRAI
VRAI VRAI FAUX
FAUX FAUX FAUX
2) Opérateur ET
ET est Vrai si toutes les valeurs de l’expression sont vraies, et ET est
faux si au moins l’une des valeurs de l’expression est fausse. La table de vérité de
l’opérateur ET se présente de la manière suivante :
A A ET B B
VRAI VRAI VRAI
FAUX FAUX VRAI
VRAI FAUX FAUX
3) Opérateur NON
NON est Vrai si la valeur booléenne est fausse, et NON est Faux si la
valeur booléenne est vraie. La table de vérité de l’opérateur NON se présente de
la manière suivante :
NON A A
VRAI FAUX
FAUX VRAI
Porte NON ET
A B A ET B NON (A ET B)
FAUX FAUX FAUX VRAI
FAUX VRAI FAUX VRAI
VRAI FAUX FAUX VRAI
VRAI VRAI VRAI FAUX
Portes NON OU
Une négation à la sortie d'une porte OU constitue une fonction NON OU (NOR NOT OR)
A B A OU B NON (A OU B)
FAUX FAUX FAUX VRAI
FAUX VRAI VRAI FAUX
VRAI FAUX VRAI FAUX
VRAI VRAI VRAI FAUX
III.1. INTRODUCTION
Dans un ordinateur, nous trouvons plusieurs sortes d’unités parmi
lesquelles nous pouvons citer :
Les unités de sortie,
Les unités d’entrée, et
L’unité de traitement.
Unité
d’entrée
Unité de
HOMME
traitement
Unité de
sortie
Exemple 1 : Exemple2 :
Variable a, b : Entier Variable a, b : Entier
Nom : Chaine(10) Nom : Chaine(10)
a 30 a 30
LIRE nom LIRE nom, b
LIRE b
Exercice :
Ecrire un programme de scanne l’année de naissance et affiche le nombre de jours passés sur
Terre :
Algorithme jourSurTerre
Var
annee : Entier
jours : réel
DEBUT
ECRIRE ("Tapez l’annee de naissance")
LIRE(annee)
jours (2023 – annee) x 365
ECRIRE (jours)
FIN
Le corps de l’algorithme.
a. Le nom de l’algorithme
Le nom de l’algorithme nous permet de l’identifier. Ce nom sera toujours
écrit en un mot et, il a les mêmes caractéristiques que celui d’une variable. Il sera
toujours précédé du mot « algorithme »
b. La partie déclarative
Cette partie contiendra la déclaration de toutes les variables que nous
avons à utiliser dans l’algorithme (confert point II.3 syntaxe de la déclaration d’une
variable page 23).
c. Le corps de l’algorithme
Le corps de l’algorithme comprend :
L’initialisation : on affecte les valeurs de départ aux différentes variables,
L’exécution : on applique le traitement ou on exécute l’action ou les actions
primitives du problème,
La restitution des résultats : on restitue les résultats obtenus.
Nous pouvons schématiser l’algorithme de la manière suivante
NOM DE L’ALGORITHME
DECLARATION
INITIALISATION
RESTITUTION DES
RESULTATS
Remarques :
Il peut arriver que :
1. la condition soit simple ou composée. Si elle est composée, elle sera liée par
les opérateurs logiques
2. Que nous ayons plusieurs instructions à exécuter lorsque la condition est vraie
(ou fausse). De ce fait nous aurons :
Si (condition) alors
instructionVraie1
instructionVraie2
instructionVraie n
sinon
instructionFausse1
instructionFausse2
I
instructionFausse n
Finsi
3. Que toutes les instructions qui doivent être exécutées lorsque la condition n’est
pas remplie (est remplie) doivent encore être exécutées lorsque la condition est
remplie (n’est pas remplie) en plus d’autres instructions. Dans ce cas, nous
annulons le sinon pour ne pas répéter ces instructions, et nous les enlevons pour
les placer en séquence après la structure alternative.
Si (condition) alors
InstructionVraie1
InstructionVraie2
InstructionVraie3
sinon
InstructionFausse1
InstructionFausse2
Finsi
Si (condition) alors
InstructionVraie1
Finsi
InstructionFausse1
InstructionFausse2
4. Que nous ayons des structures alternatives imbriquées (les unes à l’intérieur
des autres).
Si (condition1) alors
Si (condition2) alors
Instructionvraie
Sinon
Instructionfausse
Finsi
Sinon
Instruction
Finsi
Test composé :
Solution :
Exemple 7 : Ecrire un algorithme qui demande à l’utilisateur son âge, stock et affiche « Bébé »
si l’âge est compris entre 0 et 5 ans, « Gamin » si l’âge est compris entre 6 et 12 ans,
« Adolescent » si l’âge es est compris entre 13 et 17 ans
Test « SELON » : permet de mettre en œuvre des tests d’égalité sur une variable. Il n’est
possible de tester que des valeurs exactes (x = 15) et non des plages de valeurs (x > 15).
AUTREMENT : le mot clef « AUTREMENT » permet de considérer toutes les valeurs qui ne
sont pas prises en compte par les « CAS » du test « SELON ».
LIRE : l’instruction « LIRE » permet de demander la saisie au clavier à l’utilisateur qui
exécute le programme correspondant.
Exemple :
Exemple 1 :
Exercice : Hyperpsaro accorde à ses clients, une réduction de 2% pour les montants d’achat
supérieurs à 1500,00 USD. Ecrire un algorithme permettant de saisir le prix total HT (PTHT)
et de calculer le montant TTC (PTTC) en prenant en compte la remise et la TVA=20%.
Solution
a) La boucle TANTQUE
Cette boucle permet d’exécuter un bloc d’instructions (une séquence
d’instructions) tant que la condition à l’entrée de la boucle est vérifiée ; dès que
celle-ci cesse d’être vérifiée, l’exécution de la répétition s’arrête.
La syntaxe de la boucle TANTQUE
TANTQUE <Condition>Faire
Instruction1
Instruction2
……
InstructionN
Fintantque
Remarques
La condition de la boucle TANTQUE, est toujours à l’entrée de la boucle, on
vérifie la condition avant d’entrer dans la boucle.
Exemple : Ecrire un programme qui demande à l’utilisateur de Taper O/N O=
(OUI) N=(NON) et vérifie la saisie de l’utilisateur
Exemple :
Variable i initialisée
Il peut arriver que nous puissions imbriquer les boucles TANTQUE. Dans ce cas,
la dernière boucle à être ouverte sera la première à être fermée, et la première
à être ouverte sera la dernière à être fermée. Dans ce cas la structure serait :
L’inconvénient de cette boucle tient au fait que l’auteur ne sait pas quand
il doit s’arrêter. Plus précisément, il lui est impossible de savoir combien
de fois il doit écrire l’instruction de comparaison.
Exercices 4 :
Solution
Algorithme Devinette
Var
nbreMystere, nbreSaisie : entier
DEBUT
nbreMystere ALEA(1, 10)
nbreSaisie0
TANTQUE (nbreSaisie <> nbreMystere) FAIRE
ECRIRE ("Devinez le nombre mystère !")
LIRE(nbreSaisie)
SI(nbreMystere > nbreSaisie) ALORS
ECRIRE ("Trop Petit")
SINON
SI(nbreMystere < nbreSaisie) ALORS
ECRIRE("Trop Grand")
SINON
ECRIRE("BRAVO Tu as trouvé")
FINSI
FINSI
FINTANTQUE
FIN
b) La boucle POUR
La boucle POUR est une structure itérative par excellence. Elle est
utilisée lorsque nous connaissons le nombre de fois que nous devons répéter la
séquence d’instructions se trouvant à l’intérieur de la boucle.
Nous pouvons utiliser plusieurs boucles POUR imbriquées. Dans ce cas, les
différentes boucles doivent avoir chacune une variable compteur dont le
nom est différent des autres.
Exemple :
Produit i *j
Ecrire Produit
Finpour j
Finpour i
c) La boucle REPETER
Comme la boucle TANTQUE, ce type de répétitive est utilisé lorsque le
nombre de fois que la séquence d’instructions à répéter est inconnu au moment où
cette séquence est abordée pour la première fois mais le corps de la boucle est
toujours exécuté au moins une fois.
La syntaxe de la boucle REPETER
REPETER
Instruction1
Instruction2
……
InstructionN
JUSQUA <Condition>
DEBUT DEBUT
i 1 i 1
Som 0 Som 0
TANTQUE (i <= 10) FAIRE REPETER
Lire Nbre Lire Nbre
Som Som + Nbre Som Som + Nbre
i i+1 i i+1
FINTANTQUE JUSQUA ( i > 10)
Ecrire Som Ecrire Som
FIN En définitive, le problème est de FIN
bien choisir le type de boucle à
utiliser. Pour y arriver, il faut réfléchir sur le problème suivant :
Si le nombre de répétitions est connu au moment du premier passage
dans la boucle. Si oui la boucle à utiliser c’est la POUR par excellence.
Si non il faut se demander si on est sûr que le corps de la boucle sera
effectué au moins une fois. Si oui on peut utiliser la boucle REPETER
dans le cas contraire, il est préférable d’utiliser la boucle TANTQUE.
EXERCICES
1) Ecrire un algorithme qui lit un nombre entier et détermine s’il est :
a) Premier
b) Parfait
2) Ecrire un algorithme qui lit un nombre entier et détermine tous ses diviseurs
3) Ecrire un algorithme qui lit 50 valeurs entières, et qui détermine le nombre des
valeurs impaires lues
4) Soit la fonction suivante de la suite de FIBONACCI
F(0)=0 , F(1)=1 et F(i)= F(i-1)+ F(i-2) Pour toutes les valeurs de i supérieures à 1
5) Soit à écrire un algorithme qui lit un nombre entier en base 10 inférieur à 1000,
calcule et affiche ce nombre en base 2
6) Ecrire un algorithme qui affiche un nombre à l’inverse (Exemple le nombre lu
est 9834 le nombre affiché est 4389)
7) Soit P(x), un polynôme de degré n défini par ses coefficients a1, a2, a3, …, an+1 ;
P(x)= a1xn +a2 xn-1 a3 xn-2+ …+ an+1
a) Ecrire une fonction calculant la valeur de P(x0) en utilisant le schéma de
Horner
b) Ecrire un algorithme formant la table des valeurs de P(x) pour x variant de
bàc
8) Pour calculer la racine d’un réel A (positif), on peut construire la suite
Xn+1 = ½(Xn + A/Xn) en initialisant Xn à A.
Ecrire un algorithme qui permet d’imprimer à chaque tour de l’itération le
message : « Le calcul progresse, K vaut Xn ». A la fin de l’algorithme le
message « Le calcul est fini : la racine de A vaut :.. »
9) Ecrire un algorithme qui calcule le PGCD de deux entiers lu par la méthode
d’Euclide ; cette méthode opère de la manière suivante : lire deux nombres N1
et N2. Assigner à N1 la valeur de N2 et à N2 la valeur du reste de la division de
N1 par N2. Puis recommencer jusqu’à ce que la division soit nul. A ce moment,
N1 contient le PGCD.
10) On effectue une enquête auprès de 100 congolais, afin de savoir où ils ont passé
leurs vacances de Pâques, et la durée moyenne de leur séjour.
On respecte les conventions suivantes :
On ne considère qu’un seul séjour par personne.
Exemple :
GAN(1 : 10) : Entier la déclaration d’un tableau nommé GAN qui a dix
éléments du type entier.
LETTRE(1 : 23) : Chaine(7) la déclaration d’un tableau nommé Lettre qui
a 23 éléments du type chaîne de longueur 7.
Pour les tableaux à plusieurs dimensions, la déclaration se fait de la
manière suivante :
Nom_du_Tableau(Val_Min1 :Val_Max1,Val_Min2 :Val_Max2,…,Val_MinN :Val_MaxN) :Type
Exemple :
ELEVE (1 : 10, 1 : 5) : Chaine(20) la déclaration d’un tableau à deux
dimensions de 10 lignes et 5 colonnes du type chaîne 20 se
nommant ELEVE.
Variables indicées
Exemple 2 : Ecrire un programme qui lu une phrase et affiche tous les caractères de la
phrase:
2. Opération d’ajout
Cette opération ne peut se faire qu’au cas où il y a de l’espace libre dans le vecteur. Il faut au
moins une cellule non utilisée pour la réaliser. L’insertion (ajout) d’un élément autre que le
dernier nécessite le déplacement de la moitié des éléments du tableau, en moyenne vers la fin
de ce tableau. Il est impossible d’éviter ce déplacement, et cela augmente à coup sûr la
complexité de cette opération.
Exemple :
Opération de Suppression
• Ayant compris l’opération d’ajout, celle de suppression devient facile à réaliser. Cette
dernière est son inverse.
• La suppression d’un élément autre que le dernier nécessite le déplacement de chaque
élément qui suit d’une position vers le début du tableau de manière à ce que le tableau
ne soit pas désarticulé cela risque d’augmenter la complexité de l’opération.
• Pour éviter ce déplacement, il suffit de marquer par une mention spéciale l’élément supprimé
tout en le laissant en place.
• N.B : En principe, on ne peut supprimer que le dernier élément d’un tableau.
• Exemple:
Opération de la Recherche
• Lorsque l’on doit chercher une donnée précise X dans un tableau non trié, la
seule possibilité est la recherche séquentielle.
• Dans cette recherche l’algorithme doit parcourir tous les éléments du tableau se
trouvant devant pour trouver X.
Ce
pseudocode permet de rechercher un élément dans un tableau et de déterminer sa
position s’il est bel et bien présent dans le tableau
Le tri à bulles
• On parcourt le tableau en comparant deux éléments consécutifs; s’ils sont mal placés,
on les permute. Cela revient à faire remonter le plus grand élément à chaque parcours.
Comme une bulle d’air qui remonte à la surface de l’eau, d’où le nom de tri à bulles.
(Il est aussi appelé tri par permutation ou tri par échanges).
• Le principe est de remonter le plus grand élément au fond du tableau
Exemple :
EXERCICES
1) Ecrire l’algorithme du traitement qui permet de saisir 100 nombres entiers dans
un tableau à une dimension ; puis qui affiche la somme et la moyenne de ces 10
nombres.
2) Ecrire un algorithme du traitement qui permet de saisir 100 nombres entiers dans
un tableau à une dimension, puis qui recherche et affiche la valeur minimale
entrée dans ce tableau. L’affichage affichera également l’indice auquel se trouve
ce minimum.
Lorsqu’on appelle la fonction, on doit lui préciser quel message elle doit
afficher avant de lire la réponse,
La fonction doit être « prévenue » qu’elle recevra un message, et être
capable de le récupérer pour l’afficher.
VI.3. SOUS-PROCEDURES
Il peut en effet arriver que dans un programme, on ait à réaliser des
tâches répétitives, mais que ces tâches n'aient pas pour rôle de générer une valeur
particulière, ou qu'elles aient pour rôle d'en générer plus d'une à la fois.
Exemple : Imaginons qu'au cours de mon application, que l’on ai
besoin d'effacer l'écran et de réafficher un message plusieurs fois. On pourrait se
dire qu'il faut créer une fonction pour faire cela, mais qui ne doit renvoyer une
valeur.
Exemple : Au cours d’une application, on doit saisir un tableau
d'entiers plusieurs fois avec des valeurs différentes à chaque saisie. On serait tenté
d'effectuer ces saisies de tableaux dans une fonction.
Lorsqu'une fonction est appelée, la valeur qu’elle retourne doit toujours être
affectée à une variable ou intégrée dans le calcul d'une expression.
L'appel à une procédure, lui, est au contraire toujours une instruction
autonome.
Toute fonction doit comporter l'instruction "Retourner". Pour la même
raison, l'instruction "Retourner" n'est jamais utilisée dans une sous-
procédure. La fonction est une valeur calculée, qui renvoie son résultat vers
la procédure principale. La sous-procédure, elle, est un traitement.
EXERCICES
1. Écrire un algorithme qui calcule le prix toutes taxes comprises (TTC)
pour un prix hors taxe et un taux de TVA donné.
2. On considère les comptes de dépôts hébergés par une banque pour ses
clients. Un retrait n’est autorisé que si le solde du compte reste non négatif.
3. Écrire un algorithme qui calcule le montant des intérêts rapportés par
un capital placé à un taux donné pendant une durée donnée, exprimée en mois.
4. Ecrire une fonction calculant la valeur de P(x0) en utilisant le schéma
de Horner
5. Ecrire un algorithme formant la table des valeurs de P(x) pour x variant
de b à c.
6. Écrire une fonction qui calcule et retourne la factorielle d’un nombre
entier.
7. Écrire une fonction qui calcule et retourne la combinaison de N éléments
pris P à P. Cette fonction doit pouvoir réutiliser la fonction factorielle du problème
précédent. Écrire une fonction nommée «distance» ayant comme paramètres 4réels
(xa,ya)et (xb,yb)qui réprésent et les coordonnées de deux points A et B; la fonction
renvoie la distance AB