- Algorithme et programmation -
- La programmation structurée - les séquences -
Rappel : la PROGRAMMATION STRUCTURÉE
VOCABULAIRES
Les ELEMENTS ALGORITHMIQUES de BASE
Le LEXIQUE
Les constantes
Les variables
Les opérations spéciales
Les fonctions (ou procédure) intrinsèques
La DESCRIPTION des TRAITEMENTS
La procédure d'acquisition de données
La procédure de restitution des résultats
L'affectation
La DÉMARCHE de CONCEPTION
ILLUSTRATIONS 1
Phase 0 : spécifications (énoncé du problème)
Phase 1 : conception abstraite (étape de réflexion)
Phase 2 : conception concrète (algorithme)
Phase 3 : codification (programmation dans un langage informatique)
Phase 4 : Tests (utilisation de jeux d’essai pour valider l'application)
ILLUSTRATIONS 2
Phase 0 : Énoncé (spécifications).
Phase 1 : Étape de réflexion (conception abstraite).
Phase 2 : L'algorithme (lexique, code) (conception concrète).
Phase 3 : Programmation (codification).
maquette WINDOWS
code Pascal pour DELPHI 5
code VBA pour ACCESS2003
maquette WWW
code VBScript pour Internet Explorer
Phase 4 : jeux d’essai (tests)
RÉGLES à OBSERVER
Un PEU de VOCABULAIRE.
Rappel : la programmation structurée
Le cycle de vie des logiciels repose sur une démarche méthodologique, qui doit
répondre aux besoins des utilisateurs, en partant de l'abstraction du problème vers la
réalisation de l’application informatique qui va y répondre.
De façon à faciliter le développement et la maintenance des logiciels ; la
« programmation structurée » a proposé aux informaticiens une approche
méthodologique reposant sur le concept que tout programme peut être développé
uniquement à partir de trois constructeurs :
La séquence (enchaînement séquentiel de traitements ou instructions),
La sélection (alternative ou instruction conditionnelle : traitement permettant
d'effectuer un choix),
La répétition (itération ou boucle : traitement pouvant être reproduit plusieurs
fois).
VOCABULAIRES
L’informatique est du point de vue de son utilisation (exécution d’un programme sur
un ordinateur par un utilisateur) un système de communication entre l’utilisateur et
l’ordinateur (dialogue homme/machine).
Schéma de communication Utilisateur/Ordinateur
Quel est le vocabulaire associé en fonction des acteurs ?
Algorithme
DONNEES TRAITEMENTS RESULTATS
En français On traite les données d’un problème pour en fournir les résultats.
Utilisateur
ENTREES TRAITEMENTS SORTIES
En français L’utilisateur entre des informations à l’ordinateur pour traitements, et
récupère en sortie les résultats.
Ordinateur
LECTURES TRAITEMENTS ECRITURES
En français L’ordinateur effectue des lectures d’informations en provenance des
périphériques d’entrées, les traite, et fournit l’écriture des résultats aux
périphériques de sorties.
Langages de programmation (en mode console)
READ (PASCAL) WRITE
SCANF (C) PRINTF
CIN (C++) COUT
ACCEPT (COBOL) DISPLAY
INPUT (Quick BASIC) PRINT
… Les ELEMENTS ALGORITHMIQUES de BASE
Remarque : dans notre démarche algorithmique, on choisira de se placer sous
l’angle de vue de l’ordinateur.
Le lexique
Le lexique d’un algorithme, consiste en la description des éléments constitutifs
permettant de répondre aux besoins d’une application informatique (constante, type,
variable, opération spéciale, fonction ou procédure intrinsèque…), qui seront utilisés
dans la description des traitements algorithmiques.
Les constantes
Une constante est une information, qui quelque soit l’exécution du programme n’a
pas vocation à changer de valeur.
Exemple : On calcule le montant toutes taxes d’une facture à partir du montant net
commercial et du taux de TVA de 20%.
Description :
Lexique
Constante
TxTVA = 20% {le taux de TVA}
Les variables
Une variable est une information qui comme son nom l’indique à vocation à prendre
des valeurs différentes en fonction des exécutions d’un programme.
Exemple : On calcule le montant toutes taxes d’une facture à partir du montant
net commercial et du taux de TVA de 20%.
Description :
Lexique
Variable
MONTTC (réel) {le montant toutes taxes}
NETCOM (réel) {le montant net commercial}
Pour travailler l’ordinateur à besoin de manipuler des informations, il doit donc avoir
des endroits pour les stocker (la mémoire vive de l’unité centrale).
Chaque information traitée par l’ordinateur est rangée à une place déterminée (son
adresse) d’une taille déterminée (nombre d’octet).
La traduction logique est que chaque variable ( information susceptible d’être
modifier par un traitement) va avoir un nom (nom de la variable car il serait trop
difficile de manipuler l’adresse physique d’implantation dans la mémoire), et un type
informatique (réservation d’un nombre déterminé d’octets en mémoire).
Exemple
Définition nom de variable type exemple de valeur
Le solde initial d’un compte bancaire SOLDE réel 895.25
Le nombre de personnes d’une enquête NBPERS entier 1022
Une phrase à analyser PHRASE chaîne de caractère C’est une
phrase !
Une lettre à rechercher LETTR caractère e
L’état d’une comparaison (A=B) COMPAR booléen vrai
...
Les opérations spéciales
Une opération spéciale est une opération non implicite. Ce qui n’est pas le cas pour
les opérations arithmétiques (+, -, *, /) que tous informaticiens et utilisateurs vont
comprendre sans explication.
Une opération spéciale nécessite d’être décrite dans le lexique de l’algorithme.
Exemple : Un code est construit à partir des valeurs du prénom et du nom d’une
personne.
Description :
Lexique
Variable
NOM (Chaîne) {le nom de la personne}
PRENOM (Chaîne) {le prénom de la personne}
CODE (Chaîne) {le code de la personne}
Opération
+ Concaténation de 2 chaînes de caractères
Début
CODE PRENOM + NOM
Fin
En programmation
Visual basic CODE = PRENOM & NOM
C CODE = concat(PRENOM,NOM) ;
Pascal CODE = PRENOM + NOM ;
Les fonctions (ou procédure) intrinsèques
Une fonction (ou procédure) intrinsèque est une fonction définie au préalable par les
auteurs des environnements de développement, et inclut d'office ou dans des
bibliothèques, pour être mise automatiquement à la disposition des développeurs.
On parle aussi dans le langage algorithmique de fonction (ou procédure) prédéfinies.
Les fonctions intrinsèques peuvent donc être utilisées directement par le
développeur, sans que celui-ci soit obligé d'en développer les traitements.
Les fonctions intrinsèques sont décrites dans le lexique de l'algorithme.
Exemple : on veut résoudre l'équation Y = 2X5 – X3 + 1.
Description :
Lexique
Variable
X (réel)
Y (réel)
Fonction intrinsèque
Fonction puissance (données N (réel), P (entier)) résultat (réel)
retourne l'élévation de N à la puissance P
Début
Y 2 * puissance (X,5) - puissance (X,3) + 1
Fin
…Les ELEMENTS ALGORITHMIQUES de BASE
La description des traitements
La description des traitements représente la partie active du futur programme ; est
habituellement délimité dans l'algorithme par les mots-clés : « début ...fin ».
Les traitements sont ordonnancés (définition de l'ordre des instructions du futur
programme) et décrites en « pseudo code », de façon à garder la notion
d'indépendance entre la conception algorithmique, et la codification dans un langage
de programmation.
Remarque : les traitements seront assurés par l'unité centrale (association :
processeur/mémoire vive/système d'exportation) de l'ordinateur. Les traitements
algorithmiques se placeront donc sous l'angle de vue de l'ordinateur.
Exemple :
L'ordinateur lit la valeur de X provenant du périphérique d'entrée Lire (X)
clavier
À partir de la valeur de X l'ordinateur calcule la valeur de Y Y2*X-3
L'ordinateur écrit la valeur de Y en direction du périphérique de sortie Ecrire (Y)
écran
La procédure d'acquisition de données
La procédure Lire() est la primitive qui va permettre aux traitements d'acquérir les
informations données qui seront fournies par l'utilisateur (gestion des flux entrant).
Exemple :
Acquisition de la valeur de X à partir du clavier Lire (X)
Acquisition de la valeur NOM et PRENOM à partir du clavier Lire (NOM,
PRENOM)
Attention : on peut trouver dans la littérature parlant de l' « algorithmie » d'autres
primitives permettant l'acquisition de données Entrée(), voir plus particulièrement à
partir du clavier Saisir().
La procédure de restitution des résultats
La procédure Ecrire() est la primitive qui va permettre aux traitements de restituer les
résultats à l'utilisateur (gestion des flux sortants).
Exemple :
Restitution de la valeur de Y à l'écran Écrire (X)
Restitution de la valeur de NOM et PRENOM à l'écran Écrire (NOM,
PRENOM)
Attention : on peut trouver dans la littérature parlant de l' « algorithmie » d'autres
primitives permettant la restitution de résultats Sortie(), voir plus particulièrement en
direction de l'écran Afficher().
L'affectation
L'affectation permet la gestion d'un traitement et l'affectation de son résultat à une
variable
Exemple :
A prend la valeur 12,5 A 12,5
Transfert de la valeur NOM1 vers NOM2 NOM2 NOM1
Y prend la valeur du calcul 2X - 3 Y2*X–3
Z prend la valeur du calcul 3X5 Z 3 * puissance (X,5)
On ajoute 1 à C CC+1
Attention : on n’utilise pas que le signe = (égal) pour représenter l'affectation mais le
signe (flèche) pour éviter certaines ambiguïtés de notation.
exemple
C=C+1 n'a aucun sens mathématique
CC+1 indique bien que l'on prend la valeur précédente de C et que
l'on y ajoute 1
Ou encore dans le cas d'une instruction conditionnelle
Si A = B
Alors A B + 2
sinon AB
Fin si
la notation n'est pas ambiguë
La DÉMARCHE de CONCEPTION
ILLUSTRATIONS 1
Phase 0 : spécifications (énoncé du problème)
On souhaite calculer la surface d’un champ rectangulaire.
Phase 1 : conception abstraite (étape de réflexion)
Noms des variables
Données du problème
La longueur du champ LONG
La largeur du champ LARG
Résultat du problème
La surface du champ SURF
Traitement
SURF = LONG x LARG
Phase 2 : conception concrète (algorithme)
Lexique Algorithme logique
LONG (réel) lire (LONG)
LARG (réel) lire (LARG)
SURF (réel) SURF LONG * LARG
écrire (SURF)
On peut transformer cet Algorithme logique associé à son lexique en un Algorithme
de programmation.
C’est à dire que l’on inclut au précédent Algorithme logique des préoccupations de
programmation et/ou de présentation.
exemple
Lexique Algorithme de programmation
écrire (‘entrer la longueur du champ’)
LONG (réel) lire (LONG)
écrire (‘entrer la largeur du champ’)
LARG (réel) lire (LARG)
SURF (réel) SURF LONG x LARG
écrire (‘la surface est égale à ‘ , SURF)
Règle
On ne choisira pas la solution de l’algorithme de programmation.
On procédera uniquement à l’écriture d’algorithmes logiques.
La DÉMARCHE de CONCEPTION
ILLUSTRATIONS 1
Phase 3 : codification (programmation dans un langage informatique)
en Basic
10 rem PROGRAMME EXERCICE-1 en Basic
20 rem déclaration des variables
30 rem programme principal
40 rem saisie des données
50 print ²entrer la longueur du champ²
60 input LONG
70 print ²entrer la largeur du champ²
80 input LARG
90 rem calcul
100 SURF = LONG * LARG
110 rem affichage du résultat
120 print ²la surface est égale ಠSURF
en Cobol
identification division.
program-id. EXERCICE-1.
environment division.
configuration section.
input-output section.
data division.
file section.
* déclaration des variables
working-storage section.
77 LONG pic 9(5)v999.
77 LARG pic 9(5)v999.
77 SURF pic 9(7)v999.
77 ESURF pic 9(7).999.
* programme principal
procedure division.
debut.
* saisie des données
display ²entrer la longueur du champ²
accept LONG
display ² entrer la largeur du champ ²
accept LARG
* calcul
compute SURF = LONG * LARG
* affichage du résultat
move SURF to ESURF
display ²la surface est égale à ² ESURF.
stop-run.
en DBase
* PROGRAMME EXERCICE-1 en Dbase
* déclaration des variables
store 0.0 to LONG,LARG,SURF
* programme principal
* saisie des données
input ²entrer la longueur du champ² LONG
input ²entrer la largeur du champ² LARG
* calcul
SURF = LONG * LARG
* affichage du résultat
? ²la surface est égale à ² SURF
en Pascal
(*PROGRAMME EXERCICE-1 en Pascal *)
Program EXERCICE_1;
(* déclaration des variables *)
var LONG,LARG,SURF : real;
(* programme principal *)
BEGIN
(* saisie des données *)
write (‘entrer la longueur du champ ‘);
readln(LONG);
write (‘entrer la largeur du champ ‘);
readln(LARG);
(* calcul *)
SURF := LONG * LARG;
(* affichage du résultat *)
writeln (‘la surface est égale à ‘,SURF);
END.
en C
/* PROGRAMME EXERCICE-1 en C */
#include <stdio.h>
/* déclaration des variables */
float LONG,LARG,SURF;
/* programme principal */
/* saisie des données */
printf (²\n entrer la longueur du champ ²);
scanf(²%d²,&LONG);
printf (²\n entrer la largeur du champ ²);
scanf(²%d²,&LARG);
/* calcul */
SURF = LONG * LARG;
/* affichage du résultat */
printf (²\n la surface est égale à %d²,SURF);
en EXCEL
Feuille de calcul EXERCICE-1 en
EXCEL
saisie des données
Entrer la longueur du champ LONG mètres
Entrer la largeur du champ LARG mètres
calcul et
affichage du résultat
La surface est égale à =LONG * LARG mètres carrés
et bien d’autres encore ...
Quelles sont les observations de base, que l’on peut formuler ?
Les syntaxes des langages sont toutes différentes.
Certains langages demandent la déclaration des variables d’autres non.
L’algorithme reste le même pour tous les langages.
Acquisition des données
Calcul des résultats à partir des données
Restitution des résultats
Phase 4 : Tests (utilisation de jeux d’essai pour valider l'application)
Il est indispensable que chaque programme soit validé par une série de jeux d'essai
caractéristique de la réalité dans son utilisation.
La DÉMARCHE de CONCEPTION
ILLUSTRATIONS 2
Phase 0 : Énoncé (spécifications).
On veut calculer le montant toutes taxes d’une facture à partir du montant net
commercial et du taux de TVA de 20%
Phase 1 : Étape de réflexion (conception abstraite).
A partir de l'énoncé on doit définir les flux entrants (les données du problème), les
flux sortants (les résultats du problème), et le moyen de passer des uns aux autres.
On veut calculer le montant toutes taxes d’une facture à partir du montant net
commercial et du taux de TVA de 20%
Résultat
Le montant toutes taxes de la facture MONTTC
Données
Le montant net commercial NETCOM
Constantes
Le taux de TVA TxTVA = 20%
Traitement
MONTTC = NETCOM + TAXE
TAXE le montant de la taxe sur la facture
TAXE = NETCOM * TxTVA
Soit
MONTTC = NETCOM + NETCOM * TxTVA
MONTTC = NETCOM * (1 + TxTVA)
Phase 2 : L'algorithme (lexique, code) (conception concrète).
A partir de l’étape précédente on va devoir définir le lexique.
Lexique
Constante
TxTVA = 20% le taux de TVA
Variable
MONTTC (réel) le montant toutes taxes de la facture
NETCOM (réel) le montant net commercial
Début
Lire(NETCOM)
MONTTC NETCOM * (1 + TxTVA)
Ecrire(MONTTC)
Fin
La DÉMARCHE de CONCEPTION
ILLUSTRATIONS 2
Phase 3 : Programmation (codification).
On peut désormais choisir un langage de programmation cible, et traduire le
précédent algorithme pour en obtenir le programme correspondant …
La maquette
Le Code de la procédure événementielle en Pascal dans un formulaire Delphi.
{déclaration de la constante taux de taxe}
const TxTAXE = 0.2;
procedure TForm1.btCALCULClick(Sender: TObject);
{déclaration des variables (locales)}
var NETCOM, MONTTC : real;
begin
{récupération des données}
NETCOM := strtofloat(textNETCOM.text);
{traitement}
MONTTC := NETCOM * (1 + TxTAXE);
{restitution du résultat}
textMONTTC.text := floattostr(MONTTC);
end;
Le Code de la procédure événementielle en VBA dans un formulaire Access
2003.
'clause de demande de déclaration de variables
Option Explicit
'déclaration de la constante taux de taxe
Const TxTAXE = 0.2
Private Sub BtCalcul_Enter()
'déclaration des variables (locales)
Dim NETCOM As Double
Dim MONTTC As Double
'récupération des données
NETCOM = CDbl(TextNETCOM.Value) 'lire(MONTHT)
'traitement
MONTTC = NETCOM * (1 + TxTAXE)
'restitution du résultat
TextMONTTC.Value = CStr(MONTTC) 'écrire(MONTTC)
End Sub
La DÉMARCHE de CONCEPTION
ILLUSTRATIONS 2
Phase 3 : Programmation (codification).
VBScript dans une page HTML pour le Web.
La maquette
Le Code VBSCRIPT
<!-- DATE DE CREATION: 19/07/2006 -->
<HTML>
<HEAD>
<TITLE>Calculer le montant hors taxe d'un produit avec VBSCRIPT</TITLE>
<META NAME="Description" CONTENT="Calculer le montant hors taxe d'un produit
avec VBSCRIPT de l'algorithme au programme">
<META NAME="Keywords"
CONTENT="programmation,VBScript,visual,basic,application,internet,explorer,HTML
,algorithme,structurée,séquence">
<META NAME="Author" CONTENT="Eric CREPIN">
<META NAME="Generator" CONTENT="WebExpert">
<!-- zone de déclaration des traitements du client Web en VBScript -->
<SCRIPT LANGUAGE="VBScript">
'clause d'obligation de déclaration des variables
option explicit
const TxTAXE = 0.2
' fonction événementielle exécutée à la validation du formulaire
Function FORM_TTC_onSubmit()
' déclaration des variables de travail (non typées)
Dim NETCOM, MONTTC
' récupération des données
' correspondant à lire(NETCOM)
NETCOM = CDbl(FORM_TTC.textNETCOM.Value)
' traitement
MONTTC = NETCOM * (1 + TxTAXE)
' restitution du résultat
' correspondant à écrire(MONTHT)
FORM_TTC.TextMONTTC.Value = cstr(MONTTC)
'une fonction se doit de renvoyer un résultat
'mène s'y en l'occurrence il ne sert pas
FORM_TTC_onSubmit = false
end function
</SCRIPT>
<!-fin de zone des traitements du client Web en VBScript -->
</HEAD>
<BODY>
<!-- en tête du formulaire -->
<FORM NAME="FORM_TTC" METHOD=POST>
<TABLE BORDER=1>
<TR><!-- première ligne -->
<TD><FONT COLOR="#008000">le montant net commercial</FONT></TD>
<TD><!-- seconde colonne de la ligne 1 -->
<!-- zone texte : TextNETCOM -->
<INPUT TYPE="text" NAME="TextNETCOM" SIZE=10 MAXLENGTH=10>
</TD>
</TR>
<TR><!-- seconde ligne -->
<TD> </TD>
<TD><!-- seconde colonne de la ligne 2 -->
<!-- bouton de validation du formulaire -->
<INPUT TYPE="submit" VALUE="Calcul">
</TD>
</TR>
<TR><!-- troisième ligne -->
<TD><FONT COLOR="#FF0000">le montant toutes taxes </FONT></TD>
<TD><!-- seconde colonne de la ligne 3 -->
<!-- zone texte : TextMONTTC en lecture seule-->
<INPUT TYPE="text" NAME="TextMONTTC" SIZE=10 MAXLENGTH=10
READONLY>
</TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
Phase 4 : jeux d’essai (tests)
Rappel : Une application n'est définitivement valide qu'après avoir subi une phase de
tests par l'intermédiaire d'un choix judicieux de jeux d’essai (échantillon de données
correspondants à la réalité du problème à traiter).
RÉGLES à OBSERVER
LOIS Algorithmiques. en Génie logiciel
Tout problème doit résolu par la réflexion spécification.
Tout algorithme doit être élaboré à partir d’une réflexion conception.
Tout programme doit découler d’un algorithme codification.
Tout programme doit subir une phase représentative de jeux d’essai tests.
Un PEU de VOCABULAIRE.
La séquence est une instruction simple d'un programme comme :
o un calcul : Y 2 * X - 3,
o l'acquisition d'une donnée : Lire(X),
o la restitution d'un résultat : Ecrire(Y),
o ou l'utilisation d'une fonction intrinsèque : Y puissance(X,2).
Un type informatique permet de définir une variable dans son domaine de
valeur. Les types informatiques standards sont : réel, entier, chaîne de caractères,
caractère, booléen ; mais aussi structures, tableau, fichier, liste, objet ...
Une variable est une information (donnée, résultat, variable de travail) dont la
valeur change en fonction de l'exécution du programme. Une variable se doit
d'être typée en fonction du type informatique proposé par les langages de
programmation comme : X (réel), CODE(chaîne), ERREUR (booléen).
Une constante est un élément non variable (on connaît toujours sa valeur)
comme : TxTVA = 19.6%
La définition de constantes nommées permet de faciliter la maintenance.
L'ordonnancement des instructions d'un programme consiste en
l'organisation logique de l'ordre d’exécution des différentes instructions comme :
acquérir les données du problème, poser les conditions du calcul des résultats,
calculer les résultats et restituer les résultats.
La maquette constitue l'interface homme machine d'une application ou d'un
logiciel. La maquette d'une application correspond à l'ensemble des formulaires
qui seront nécessaires pour l'application. Chaque formulaire est construit à partir
de composants (ou contrôles) graphiques qui pourront renfermer des procédures
événementielles.
Une procédure événementielle correspond au traitement (ensemble des
instructions d'une partie du programme) qui seront activées par une action
événementielle (habituellement par l'utilisateur grâce à un événement, le plus
souvent un clic de souris).
Le commentaire est un élément indispensable d'un programme (bien que
facultatif) qui permet d'apporter des informations (documentation technique) ayant
vocation à en faciliter la maintenance, en le rendant plus lisible aux développeurs.