Académique Documents
Professionnel Documents
Culture Documents
structurée
Ce module est comporte deux matière, La 1ere concerne la Technique de programmation
structurée (ou Algorithmique) ou on va voir comment convertir un problème en un
ensemble d’instruction dites algorithme écrite en langage très proche au langage humain
(Pseudo-langage). La 2eme est relative au Langage de programmation structuré, ou on va traduire
algorithme en un langage compréhensible par la machine dit Langage de programmation.
Il bien évidement plusieurs langages de programmation. Notre établissement est bien
intéressé au langage C, pour plusieurs raison, car il est très proche de langage humain
académique et très répandu. Et il est la base de plusieurs produit dans la marché. Et la
compréhension et la manipulation de langage C offre une souplesse au stagiaire de
s’adapter facilement avec d’autres langages de programmation.
Première Partie :
Analyse de besoins en ce qui a trait au développement
de l'application
Dans cette partie nous allons mètre l’action la notion de résolution de problèmes par ordinateur.
En développant le principe [Entrée de données – Traitement - Sortie des résultats]. Nous
allons aussi être capable de :
1. Définition:
Un algorithme est une suite d’actions précises et finies qui doivent être exécutées sur
un ensemble de données dans un ordre bien déterminé en vue de la résolution d’un
problème.
2. Objectifs:
L'utilisateur d'un algorithme n'aura qu'à suivre toutes les instructions, dans l'ordre
pour arriver au résultat que doit donner l'algorithme.
Chapitre 1 : Les différents types de
représentation existants : pseudo-code,
organigramme
1. Introduction
Une approche intéressante en matière de représentation est l’ordinogramme qui permet,
dans un format graphique, de proposer une vue des opérations exécutées par l’ordinateur.
Il est possible de ne faire apparaître qu’une vue partielle des opérations en fonction de
l’intérêt que cette présentation de la logique d’exécution présente.
Cette présentation ne dispense pas de l’écriture du programme sous forme d’un pseudo
code qui elle se voudra plus exhaustive.
2. La prise de décision
La prise décision est l'élément clé de l'algorithme. Elle permet en effet de choisir quelle
opération on doit effectuer en fonction de la valeur d'un paramètre. En général, ce choix
s'effectue selon l'évaluation d'une expression logique à laquelle on peut répondre par OUI ou
NON ou par VRAI ou FAUX.
Par exemple on peut vouloir effectuer un certain type d'opérations si un paramètre est positif
et une autre série d'opération si un paramètre est négatif.
Prise de décision
À partir du moment où il faut répéter, il faut choisir un point de départ pour démarrer le
processus de répétition. Cette étape s'appelle l'initialisation et comme nous le verrons dans
ce qui suit, c'est une étape essentielle. Le cas le plus simple de répétition peut être
représenté comme suit :
Cette répétition est évidemment sans fin car rien n'est spécifié pour arrêter le retour vers le
haut dans l'algorithme.
Pour corriger la situation, nous devons introduire la notion de prise de décision dans la
répétition, à savoir doit-on continuer oui ou non. L'algorithme précédent devient donc :
Définition du nombre
de répétition N et du
compteur d'itérations i
Instructions à répéter
Incrémentation du
compteur
Décision de continuer
ou non
Dans ce cas, nous prenons la décision d'arrêter ou de continuer en comparant la valeur de i
à une valeur maximum N. La valeur de i est initialisée à 1 et la valeur N à 10.
A chaque répétition la valeur de i est augmentée de 1 (i = i+1), si bien que plus on répète
plus i augmente. La valeur de i nous sert donc à compter les répétitions et nous appelons i
un compteur.
Cet algorithme constitue la base de tout système itératif pour lequel nous connaissons le
nombre de répétitions à effectuer. Cependant, au niveau des opérations à répéter, rien ne
prouve qu'elles sont modifiées à chaque tour et finalement l'algorithme précédent répète
toujours la même chose ce qui est rarement utile.
Pour résoudre ce problème, il faut donc que les opérations à effectuer soient influencées soit
par le compteur d'itérations soit par toute autre valeur provenant d'une itération précédente.
L'exemple qui suit démontre le calcul de la fonction factorielle de 1 à N.
Incrémentation du compteur
Dans cet exemple, portons un intérêt particulier à la valeur FAC. À chaque répétition, Cette
valeur est modifiée à partir d'elle-même. Cela signifie qu'a la fin des répétitions, FAC a
accumulé l'influence de chaque répétition. FAC est donc un accumulateur qui est utilisé ici pour
accumuler le produit de plusieurs valeurs. Cette notion est aussi utilisée pour accumuler des
sommes.
En terminant, dans certains processus répétitifs, nous ne connaissons pas à l'avance le
nombre de répétitions à faire. La décision d'arrêter ou de continuer sera prise en fonction du
résultat des opérations effectuées de la boucle de répétition.
Dans l’exemple qui suit, le problème consiste à diviser plusieurs fois une valeur par 2 jusqu'à
ce que cette valeur soit plus petite qu'un millième
Initialisation
4. Un exemple complet
Dans l’exemple qui suit, l’ordinogramme a été complété et présente l’acquisition des
données en entrée au travers l’opération de lire et les résultats en sortie qui figurent dans
l’opération présenter
.
Il est important de réfléchir aux données attendues par le programme pour qu’il puisse
s’exécuter correctement. Dans les premiers exemples que nous donnons, ces données
seront acquises soit par l’intermédiaire d’un dialogue utilisateur et de l’opération lire, soit par
affectation directe dans le cadre d’une initialisation d’une variable.
Ces données acquises par le programme sont les données en Entrée (Input).
Les données acquises en entrée par le programme font l’objet d’un traitement qui en modifie
la valeur ou participent au traitement comme facteur de celui-ci. Celles qui seront restituées
à l’utilisateur, correspondant au résultat du programme, sont des données en Sortie (Output).
Certaines données en entrée peuvent être aussi restituées en sortie : on parle alors de
données en Entrée-Sortie (Input-Output ou Both).
Chapitre 2 Rappels sur les fonctions
logiques
1.Introduction
Ce document propose de revenir sur quelques notions fondamentales relatives aux opérations et
fonctions sur des variables logiques.
Nous aborderons donc dans ce document des principes fondamentaux relatifs au sous ensemble des
mathématiques traitant des fonctions logiques dont George Boole, un mathématicien britannique,
durant le milieu du XIXe siècle, proposa un système formel.
L'algèbre booléenne permet d'utiliser des techniques algébriques pour traiter les expressions à deux
valeurs de la logique des propositions. L’algèbre de Boole est aujourd’hui appliqué en informatique
et en électronique.
Ce document présentera des outils utiles à la résolution de problèmes logiques que sont les tables de
vérité. Il est fondamental de maîtriser les bases de la logique pour être en mesure d’exprimer
correctement les conditions nécessaires à l’exécution des instructions dans vos futurs programmes.
2.L’algèbre de Boole
Aujourd'hui, l'algèbre de Boole trouve de nombreuses applications en informatique et dans la
conception des circuits électroniques. Elle fut utilisée la première fois pour les circuits de
commutation téléphoniques par Claude Shannon.
L'algèbre de Boole des fonctions logiques permet de modéliser des raisonnements logiques, en
exprimant un « état » en fonction de conditions. Par exemple :
Communication est « VRAI » Si Émetteur actif ET Récepteur actif (c'est une fonction logique
dépendant des variables Émetteur et Récepteur)
Sur cet ensemble on peut définir deux lois (ou opérations ou foncteurs, abstractions de fonctions),
les lois ET et OU et une transformation appelée le complémentaire, l'inversion ou le contraire.
2.2. La loi ET, dite conjonction
Elle est définie de la manière suivante : a ET b est VRAI si et seulement si a est VRAI et b est VRAI.
Cette loi est aussi notée « . »
2.5. Propriétés
2.5.1. Associativité
Comme avec les opérations habituelles, certaines parenthèses sont inutiles:
(a + b) + c = a + (b + c) = a + b + c
2.5.2. Commutativité
L'ordre est sans importance.
a+b=b+a
a.b = b.a
2.5.3. Distributivité
Comme avec les opérations habituelles, il est possible de distribuer :
a + (b.c) = (a + b).(a + c)
a.1 = a
2.5.5. Absorption
a + a.b = a
a.(a + b) = a
structurées
2.5.6. Simplification
a+ .b = a + b
a.( + b) = a.b
Exemple :
a = 0;b = 1;c = 1
On cherche a.b + c = ??
a.b = 0.1
0.1 = 0
Puis, on calcule 0 + c :
0+c=c
c=1
a.b + c = 1
Une table de vérité permet de préciser l'état de la sortie en fonction des états des entrées. Elles vous
aideront dans la résolution des problèmes logiques.
On démontre que toute fonction logique peut se décrire à l'aide des trois opérations de base ET, OU
et Négation soit ., + et -
0 1
1 0
Table de vérité de la
somme
a b a b
0 0 0
0 1 1
1 0 1
1 1 1
Table de vérité du
produit
a b a b
0 0 0
0 1 0
1 0 0
1 1 1
Document Page
Page 12 / 62
OFPPT @ Technique de programmations
janvier 2013 11
structurées
3.2.1. Le ou exclusif ou fonction exclusive
Le OU étudié jusqu'à présent doit se comprendre de la manière suivante : « l'un ou l'autre ou les
deux ». Il est également appelé « OU inclusif ». Le OU exclusif (ou XOR pour eXclusive OR) s'entend
comme « l'un ou l'autre mais pas les deux ».
a b a XOR b
0 0 0
0 1 1
1 0 1
1 1 0
3.2.2. L’équivalence
L'équivalence (notée EQV) est vraie si les deux entrées ont la même valeur et fausse sinon. Elle est
appelée aussi «non-ou exclusif ».
a b a EQV b
0 0 1
0 1 0
1 0 0
1 1 1
Décrocher le téléphone est « VRAI » si on entend la sonnerie ET que l'on décide de répondre OU si
l'on décide d'appeler. On se trouve en présence de 3 variables :
la variable d = "on décroche" est donc fonction logique des 3 précédentes. On écrira que
d = a.b + c
La table de vérité de cette fonction d est alors la suivante :
Table de vérité de on
décroche d
a b c d
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 1
Deuxième Partie : L’algorithmiques
Suite d’actions que devra effectuer un automate pour arriver, en un temps fini, à
un résultat déterminé à partir d’une situation donnée.
Cette suite d’actions sera composée d’actions élémentaires que nous allons voir
ici.
Par la suite nous utiliserons un pseudo-langage, comportant toutes les structures de base
d'un langage de programmation.
Ces instructions peuvent soit s'enchaîner les unes après les autres, on parle alors de
SEQUENCE D'INSTRUCTIONS; ou bien s'exécuter dans certains cas et pas dans d'autres, on
parle alors de STRUCTURE ALTERNATIVE; ou se répéter plusieurs fois, on parle alors de STRUCTURE
REPETITIVE.
2.La déclaration des variables
Un programme exécutable est composé de deux parties :
données
instructions
La partie instructions contient les instructions à exécuter. Nous verrons dans le chapitre suivant
quelles sont les principales instructions distinguées.
Un programme exécutable est chargé dans la mémoire centrale de l'ordinateur, les valeurs que l'on a
affectées aux variables doivent être conservées tout le temps du déroulement du programme.
Par conséquent, il faut que le programme soit capable de réserver la place nécessaire aux variables.
Pour ce faire, les variables doivent être déclarées afin que le compilateur sache quelle place elles
vont occuper.
Les valeurs des variables sont par définition amenées à être modifiées ou tout du moins susceptibles
d’être modifiées. Elles s’opposent en ce sens à des données constantes qui peuvent être utilisées par
le programme et qui conservent donc leur valeur tout au long de l’exécution du programme. Celles-ci
seront désignées sous le terme de Constantes par opposition à Variables.
Il est nécessaire de donner un type aux variables. Cela permet d'une part de contrôler leur utilisation
(ex: on ne peut pas diviser un caractère par un entier). D'autre part, le programme connait ainsi la
place qu’il lui faut réserver pour cette variable.
ENTIER : il s'agit des variables destinées à contenir un nombre entier positif ou négatif.
REEL : il s'agit des variables numériques qui ne sont pas des entiers, c'est à dire qui comportent des
décimales et qui sont des valeurs approximatives.
Dans notre langage, la déclaration des variables de type réel est la suivante :
BOOLEEN : Il est souvent nécessaire lorsque l'on écrit un programme d'introduire des variables qui
prennent les valeurs VRAI ou FAUX ou les valeurs OUI ou NON.
Pour cela, il existe un type particulier dont les variables ne peuvent prendre que 2 valeurs : VRAI ou
FAUX.
Chaque langage de programmation fournit une liste des instructions qui sont implémentées et que
l'on peut donc utiliser sans les réécrire
Dans notre pseudo-langage, nous aurons une liste minimum d'instructions, nécessaire et suffisante
pour les programmes que nous aurons à écrire. Cette liste est bien entendu moins fournie que celle
que proposerait un langage informatique opérationnel.
3.1. L'affectation
Variable <-- Valeur
Ce qui se lit "variable reçoit valeur" et qui signifie que l'on mémorise la valeur à un endroit nommé
variable.
Document Page
Page 17 / 62
OFPPT @ Technique de programmations
janvier 2013 16
structurées
Par exemple : i <-- 1 Termine <-- VRAI
LIRE Variable
ECRIRE Texte Variable Variable Texte ...
La première lit tous les caractères qui sont saisis au clavier, jusqu'à ce que l'utilisateur appuie sur la
touche entrée, et stocke le résultat dans la variable.
2. Quelles seront les valeurs des variables A, B et C après exécution des instructions suivantes ?
Variables A, B, C : Entier
Début
A←5
B←3
C←A+B
A←2
C←B–A
Fin
3. Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?
Variables A, B : Entier
Début
A←5
B←A+4
A←A+1
B←A–4
Fin
4. Quelles seront les valeurs des variables A, B et C après exécution des instructions suivantes ?
Variables A, B, C : Entier
Début
A←3
B ← 10
C←A+B
B←A+B
A←C
Fin
5. Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?
Variables A, B : Entier
Début
A←5
B←2
A←B
B←A
Fin
Questions : les deux dernières instructions permettent-elles d’échanger les deux valeurs de B et A ? Si
l’on inverse les deux dernières instructions, cela change-t-il quelque chose ?
6. Ecrire un algorithme permettant d’échanger les valeurs de deux variables A et B, et ce quel que soit
leur contenu préalable.
Variables A, B, C : Caractères
Début
A ← “423“
B ← “12”
C←A+B
Fin
Variables A, B : Caractères
Début
A ← “423“
B ← “12”
C←A&B
Fin
Solutions
1.
Après exécution de l’instruction La valeur des variables est :
A←1 A=1 B=?
B←A+3 A=1 B=4
A←3 A=3 B=4
2.
Après exécution de l’instruction La valeur des variables est :
A←5 A=5 B=? C=?
B←3 A=5 B=3 C=?
C←A+B A=5 B=3 C=8
A←2 A=2 B=3 C=8
C←B–A A=2 B=3 C=1
3.
Après exécution de l’instruction La valeur des variables est :
A←5 A=5 B=?
B←A+4 A=5 B=9
A←A+1 A=6 B=9
B←A–4 A=6 B=2
4.
Après exécution de l’instruction La valeur des variables est :
A←3 A=3 B=? C=?
B ← 10 A = 3 B = 10 C = ?
C←A+B A = 3 B = 10 C = 13
B←A+B A = 3 B = 13 C = 13
A←C A = 13 B = 13 C = 13
5.
Après exécution de l’instruction La valeur des variables est :
A←5 A=5 B=?
B←2 A=5 B=2
A←B A=2 B=2
B←A A=2 B=2
Les deux dernières instructions ne permettent donc pas d’échanger les deux valeurs de B et A, puisque
l’une des deux valeurs (celle de A) est ici écrasée.
Si l’on inverse les deux dernières instructions, cela ne changera rien du tout, hormis le fait que cette
fois c’est la valeur de B qui sera écrasée.
6. L’algorithme est :
Début
C←A
A←B
B←C
Fin
On est obligé de passer par une variable dite temporaire (la variable C).
7. L’algorithme est :
Début
D←C
C←B
B←A
A←D
Fin
En fait, quel que soit le nombre de variables, une seule variable temporaire suffit.
8. Il ne peut produire qu’une erreur d’exécution, puisqu’on ne peut pas additionner des caractères.
Remarque : Avant de lire une variable, il est fortement conseillé d’écrire des libellés à l’écran, afin de
prévenir l’utilisateur de ce qu’il doit frapper. La même chose pour l’instruction d’écriture.
Exemple :
Variables A, CARRE : Réels
DEBUT
Ecrire ‘Entrez un nombre’
Lire A
CARRE ← A * A
Ecrire ‘Le carré de ce nombre est : ’
Ecrire CARRE
FIN
Exercices
1. Quel résultat produit le programme suivant ?
VARIABLES Val, Double : ENTIERS
Début
Val ← 231
Double ← Val * 2
ECRIRE Val
ECRIRE Double
Fin
2. Ecrire un programme qui demande deux nombres entiers à l’utilisateur, puis qui calcule et affiche
le somme de ces nombres.
3. 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 TTC correspondant. Faire en sorte que des libellés apparaissent clairement.
4. Ecrire un programme qui lit une valeur et qui nous calcule l’inverse de cette valeur.
5. Le surveillant général d’un établissement scolaire souhaite qu’on lui écrit un programme qui
calcule, pour chaque élève, la moyenne des notes des cinq matières. Ces matières sont avec leur
coefficient :
MATIERE COEFFICIENT
Math 5
Physique 5
Français 4
Anglais 2
Histoire - Géographie 2
Corrections
1. On verra apparaître à l’écran :
231
462
2. Le programme est :
VARIABLES A, B, SOMME : ENTIERS
Début
ECRIRE ‘Entrez le premier nombre’
Lire A
ECRIRE ‘Entrez le deuxième nombre’
Lire B
SOMME ← A + B
ECRIRE ‘La somme de ces deux nombres est : ’
ECRIRE SOMME
Fin
3. Le programme est :
VARIABLES pht, ttva, pttc : REELS
VARIABLE nb : ENTIER
Début
ECRIRE “Entrez le prix hors taxes :”
LIRE pht
ECRIRE “Entrez le nombre d’articles :”
LIRE nb
ECRIRE “Entrez le taux de TVA :”
LIRE ttva
Pttc ← nb * pht * (1 + ttva)
ECRIRE “Le prix toutes taxes est : ”, ttva
Fin
4. Le programme est :
VARIABLES x, inverse : REELS
Début
ECRIRE “Entrez une valeur :”
LIRE x
inverse ← 1 / x
ECRIRE “L’inverse est : ”, inverse
Fin
5. Le programme est :
VARIABLES mat, phy, ang, fra, hg, moyenne : REELS
Début
LIRE mat
ECRIRE “Entrez la note de physique :”
LIRE phy
ECRIRE “Entrez la note de français :”
LIRE fra
ECRIRE “Entrez la note d’anglais :”
LIRE ang
ECRIRE “Entrez la note d’histoire-Géo :”
LIRE hg
moyenne ← ((mat + phy) * 5 + fra * 4 + (ang
+ hg) * 2) / 18
ECRIRE “La moyenne est : ”, moyenne
Fin
4. LA STRUCTURE ALTERNATIVE
4.1. Les conditions simples
Une condition simple consiste en une comparaison entre deux expressions du même type.
Cette comparaison s'effectue avec des opérateurs de comparaison. Voici la liste de ces opérateurs
accompagnés de leur signification dans le cas des types numérique ou chaîne :
Pour la comparaison du type chaîne c'est l'ordre alphabétique qu'est utilisé dans le cas où l'on compare
deux lettres majuscules ou minuscules. Mais si l'on compare majuscules et minuscules, il faut savoir
que les majuscules apparaissent avant les minuscules. Ainsi, par exemple : "M" < "m".
Page 24 / 62
D'une manière générale, les opérateurs logiques peuvent porter, non seulement sur des conditions
simples, mais aussi sur des conditions complexes. L'usage de parenthèses permet dans de tels cas de
régler d'éventuels problèmes de priorité. Par exemple, la condition :
(a < 0 ET b > 1) OU (a > 0 ET b > 3)
est VRAI si l'une au moins des conditions entre parenthèses est VRAI.
Exemple :
SI a > 0 ALORS
ECRIRE ''valeur positive''
SINON
ECRIRE ''valeur négative''
FIN SI
Dans ce programme, on vérifie si la valeur de a est supérieure à 0, on affichera le message ''valeur
positive''. Dans le cas contraire, il sera affiche le message ''valeur négative''.
La structure alternative peut prendre une autre forme possible où l'une des parties du choix est absente.
Elle s'écrit dans ce cas :
SI condition ALORS
bloc d'instructions
FIN SI
Exemple : Dans un programme de calcul du montant d'une facture, on applique une remise de 1% si le
montant dépasse 5000 Dhs. Nous écrirons :
SI montant > 5000 ALORS
montant ← montant * 0.99
FIN SI
Page 25 / 62