Vous êtes sur la page 1sur 20

Algorithmique Notions de base

Qu'est-ce qu'un programme ?


Un programme, c'est quoi ?
Ensemble d ordres crits dans un langage convertissable d'ordres afin d'tre excut par la machine

Comment a marche ?
programme crit l it en langage volu compilation p programme crit l it en langage machine excution rsultat de d l'excution

Un programme permet d'exploiter les capacits d'un ordinateur pour automatiser des ordres. Il existe des programmes de gestion, ducatifs, scientifiques, de jeux

Exemple en c++
Programme du jeu du nombre cach :
void main() { int valeur, essai, nbre = 1 ; valeur essai cout<<"Entrer le nombre chercher = " ; cin>>valeur ; clrscr() ; cout<<"Entrer un essai = " ; cin>>essai ; while (essai != valeur) { if (essai > valeur) cout<<"trop grand !" ; else cout<<"trop petit !" ; cout<<"Entrer un nouvel essai = " ; cin>>essai ; nbre++ ; } cout<<"Vous avez trouv en "<<nbre<<" fois"; }

Mmoire
valeur essai

nbre

3 2 1

Ecran
_ Entrer unnombre _ chercher = 38 le essai = 45 trop grand ! Entrer un nouvel essai = _3 23 2 trop petit ! 38 3 Entrer un nouvel essai = _8 Vous avez trouv en 3 fois

Version algo
Programme Jeu void main() { int valeur, essai,nbre = 1 ; Variables valeur, essai, nbre : entier debut nbre 1 cout<< Entrer cout<<"Entrer le nombre " ; nombre afficher "Entrer le nombre chercher =" cin>>valeur ; saisir valeur clrscr() ; cout<<"Entrer un essai = " ; afficher "Entrer un essai = " cin>>essai ; saisir essai while (essai != valeur) { tantque essai <> valeur if (essai > valeur) si essai > valeur alors cout<<"trop grand !" ; afficher "trop grand !" else sinon cout<<"trop petit !" afficher "trop petit !" ; finsi cout<<"Entrer = " ; afficher "Entrer un nouvel essai = " cin>>essai ; saisir essai nbre++ ; nbre nbre + 1 } fintantque cout<<"Vous avez trouv en " afficher "Vous avez trouv en ", nbre, <<nbre<<" fois"; " fois" } fin

Quest-ce quun algo ?


Cest quoi ?
Ensemble de traitements informatisables

Pourquoi ?
Structurer et de clarifier un problme dinformatisation en vue dun futur codage

Comment ? C t
En utilisant une normalisation indpendante des langages
Ce cours prsente une des normalisations. (Prenez lhabitude de toujours garder la mme normalisation)

Structure
Un algorithme comprend deux parties :
Lentte : qui contient la dclaration des constantes et des variables : pour chaque variable utilise, on dfinit le type de donnes quelle contient: entier, rel, logique ou alphanumrique (pour viter tout problme, les variables doivent tre dclares pralablement leur utilisation) utilisation). Le corps : contient lensemble des actions.

Rgles de mise en forme dun algorithme


Nom de lalgorithme
Constantes ----Variables ----Dbut

/*commentaires*/ ou // ou '
Instructions1 Instructions 2

Fin Fi

Attention aux indentations dans un algorithme, afin de faciliter sa lecture. UTILISEZ TOUJOURS LE MEME FORMALISME

Traitements
Voici les traitements possibles dans un algo :
Saisie Calcul

Affichage

Condition

Affectation (variables)

Itration

Variable et constante

Les variables et les constantes correspondent des zones de stockage de la mmoire vive. Elles permettent de conserver des valeurs en vue d un traitement.

Une constante, en revanche, est dfinie une fois pour toute lintrieur du programme (avant les dclarations de variables) et ne peut pas tre modifie par lutilisateur. Une constante correspond un paramtre.

10

Caractristiques dune variable


Une Etiquette (un nom ). Un Emplacement mmoire. Ladresse en mmoire est associe au non de la variable. Manipuler le nom de la variable, cest faire rfrence son adresse mmoire. Rassurez-vous, cest le compilateur qui ralise cette association, pas le programmeur ; Une Taille mmoire dtermine par le type de la variable. Elle ne possde aucune valeur initiale a priori. Attention, il ne faut jamais partir du principe quune variable est initialise automatiquement zro. Certains langages de programmation le font, dautres pas. P f t d t Prenons d donc l principe gnral quelle nest le i i l ll t jamais initialise zro, cela peut viter bien des surprises. Un Type de donnes. Les donnes manipules par un programme peuvent tre de natures diffrentes (entiers, rels, chanes de caractres, boolen ).

Une variable se caractrise par :

11

Caractristiques dune variable


Rel : nombre virgule Entier : nombre entier Chane : texte de longueur fixe (Chane de 15 caractres) ou de longueur variable (mot cl Chane utilise sans rien) Caractre : Un seul caractre 0, 1,, a, A par exemple Boolen : valeur logique pouvant tre .VRAI. ou .FAUX.

Les types de donnes utilisables sont les suivants :

Le type des donnes est dfini dans la section Dclaration de variables . Lorsque plusieurs variables sont de mme type, on peut les regrouper sur une mme ligne.

12

Dclaration d'une variable


Variables

Programme TestDclaration
LaValeur : Entier Vnom, Vprenom, VAdresse : Ch V V VAd Chane
Dbut

Instructions
Fin Remarques : Le nom des variables doit tre significatif (parlant). Evitez dappeler une variable s pour Somme ou t pour TotalAchat ; Le nom des variables ne doit pas contenir de signes de ponctuation ponctuation, despaces et ne doit pas commencer par un chiffre ; Il faut toujours dclarer une variable, mme si certains langages de programmation peuvent les dclarer pour vous. Le type pris par dfaut ne sera pas forcment le plus adapt ; Les variables se dclarent toujours en dbut de programme, mme si, encore une fois, certains langages de programmation sont permissifs.

13

Affectation
variable
C est C'est quoi ?
Transfert d'une information dans une variable

valeur

(ou)

variable

Comment a marche ?
La valeur ou le contenu de la variable de droite est transfr en mmoire centrale dans la variable de gauche

Q p Que peut-on transfrer ?


Tout condition que les donnes soient compatibles en type (numrique, entier, rel, caractre, chane, date, boolen)

Attention, si la variable de gauche contenait une valeur avant l'affectation, cette valeur sera crase par la nouvelle.

14

affectation
Exemple : Quel est l'tat de la mmoire aprs les instructions suivantes ? nom "Roswell" age 3 age 1 Quelles instructions peuvent initialiser la mmoire ainsi ? Mmoire
article prix nom age

Mmoire Roswell 3 1

Mars glac 4,45

article "Mars glac" prix 4,45

15

Calcul
variable
C'est quoi ?
Transfert du rsultat d'un calcul dans une variable

calcul

Que peut contenir la partie calcul ?


Une ou plusieurs valeurs et/ou variables Un ou plusieurs oprateurs arithmtiques et/ou logiques Des parenthses

Que peut-on transfrer ?


Tout condition que le rsultat du calcul soit compatible en type Si la variable de gauche contenait dj une valeur, celle ci est crase

16

Calcul
Oprateurs possibles :
+ * / ** div mod () addition soustraction multiplication division puissance division entire reste de division parenthses th somme 4 + 8 nbannee 18 - age prix 10 * 0,2 moy 30 / 3 surface_carre 4 **2 result 3 div 2 result 3 mod 2 total t t l ( (somme + t ) * remise tva) i

une expression logique (voir "condition") peut aussi tre affecte le rsultat est de type boolen ex : val <-- (A < B) ou non (B >= C)

17

Saisie
saisir nom_variable
C'est quoi ?
Saisie au clavier et transfert en mmoire

Comment a marche ?
Arrt momentan de l'excution (attente de la saisie) Transfert de l'information saisie dans la variable en mmoire Reprise de la suite de l'excution du programme

Les noms de variables sont libres mais rglements : caractres accepts : alphabtiques, numriques et _ Pensez aussi choisir des noms PARLANTS.

18

Affichage
afficher information
C'est quoi ?
Affichage d'une information l'cran

Comment a marche ?
Construction de l'information puis transfert vers l'cran

Que peut-on afficher ?


Une variable (qui doit contenir une valeur) Du texte (entre " ") Une valeur numrique Un calcul (le rsultat sera alors affich) Une combinaison des points prcdents

19

affichage
Exemple : Dans la mmoire, la variable nom contient "Nicolas" et age contient 12 afficher afficher afficher afficher nom "bonjour ", nom, " !" "12 * 2 = ", age*2 "12 * 2 = ", 24 Nicolas bonjour Nicolas ! 12 * 2 = 24 12 * 2 = 24

12 12 ans Nicolas a 12 ans Il sera majeur dans 6 ans

afficher afficher afficher afficher

age age, " ans" nom, " a ", age, " ans" "Il sera majeur dans ", 18 - age, " ans"

20

Exemple : Affichage
instructions qui permettent au programme de communiquer des valeurs lutilisateur en les l utilisateur affichant lcran.
AFFICHER " Bonjour les IG " AFFICHER " Bonjour ", VNom , AFFICHER "La note obtenue par : ", VNom, "est de : ", VNote

10

21

Exemple : Saisir
Ds que le programme rencontre une instruction Saisir, q p g lexcution sinterrompt, attendant la frappe dune valeur au clavier .
Variables Vnom : Chaine Debut AFFICHER " Saisir votre nom : " SAISIR VNom AFFICHER " Bonjour " , Vnom Fin

22

Exemple dalgo niveau 1


Algo : FactBout Constantes TXTVA : 0.196 Variables , : Entier Ref, Nb Pu, BrutHT : Rel Dbut

/* Entre des donnes lmentaires */


Afficher "Rfrence de la bouteille ? " Saisir Ref Afficher "Prix HT dune bouteille ? " Saisir Pu Afficher "Combien de bouteilles achetes ? Saisir Nb

/* Calcul du montant d par le client */


BrutHT Pu * Nb

/* Sortie des rsultats */


Afficher "Montant HT d par le client:", BrutHT Afficher "Montant TVA d par le client:", BrutHT * TXTVA Fin

11

23

Condition
si condition alors traitement(s) finsi
Comment a marche ?
Excution des traitements uniquement si la condition est vraie

Qu est-ce qu une Qu'est ce qu'une condition ?


Expression logique contenant une ou plusieurs variables et/ou valeurs spares et utilisant ventuellement des oprateurs logiques

Qu'est-ce qu'un oprateur logique ?


et, ou, non, ( ), =, <>, <, >, <=, >=

24

Condition
Forme conditionnelle complte :

si condition alors traitement(s)1 sinon traitement(s)2 finsi


Comment a marche ?
Excution des traitements1 uniquement si la condition est vraie Excution des traitements2 uniquement si la condition est fausse

12

25

Condition
Autre forme conditionnelle :

Selon Cas variable valeur1 : traitement(s) ... valeurN : traitement(s) sinon traitement(s) FinSelon
Comment a marche ?
Comparaison du contenu de variable avec les diffrentes valeurs Excution des traitements dans le cas d'galit

26

Itration
C'est quoi ?
Une itration U i i est une rptition de traitements sous condition ii d i di i Il existe plusieurs catgories d'itrations, voici les 3 principales : Tantque Rpter Pour

Attention ne pas boucler l'infini ! (cependant il est parfois ncessaire de boucler l'infini dans le cas par exemple d'un serveur l'coute des clients)

13

27

Tantque
tantque condition traitement(s) fintantque
Comment a marche ?
Les traitements s'excutent tant que la condition est vraie q , p g p p q Lorsque la condition devient fausse, le programme reprend aprs le fintantque

Quand utiliser cette boucle ?


C'est la boucle la plus gnrale (elle marche dans toutes les situations) Elle boucle de 0 N fois

28

Repeter
rpter traitement(s) jusqu' condition
Comment a marche ?
Les traitements s'excutent jusqu' ce que la condition soit vraie Lorsque la condition devient vraie le programme reprend aprs le jusqu' vraie, jusqu

Quand utiliser cette boucle ?


C'est la boucle idale pour les tests de saisie Elle boucle de 1 N fois

14

29

Pour
pour cpt de depart arrivee [pas de pas] pas] traitement(s) finpour
Comment a marche ?
cpt est initialis depart, puis les traitements s'excutent A chaque passage de boucle, cpt est incrment de pas (ou 1 par dfaut) La sortie s'effectue quand cpt a dpass arrivee

Quand utiliser cette boucle ?


C'est la boucle idale lorsque le nombre d'itration est connu Elle boucle ((arrivee - depart + 1) / pas) fois

30

Complments
Voici quelques complments :

Gestion des caractres

Optimisation

Fonctions classiques

Tests

15

31

Caractres
Oprations sur les chanes de caractres :
Mmoire

concatnation de chanes

nom prenom

Exemple : saisir nom saisir prenom complet1 <-- prenom + nom complet2 <-- prenom + " " + nom afficher complet1 afficher complet2

complet1 complet2

Ecran

32

Fonctions
Ordres de conversions et fonctions classiques : abs(valeur) : valeur absolue d'un nombre
abs(-2) = 2 abs(4) = 4

ent(valeur) : partie entire d'un nombre


ent(2,45) = 2

val(chane) : conversion d'une chane en numrique


val("32") = 32

str(valeur) : conversion d'un nombre en chane


str(32) = "32"

16

33

Optimisation
Un programme ne doit pas se contenter de "marcher". Il doit tre "optimis". p

Optimisation en lisibilit Optimisation en temps Optimisation en espace


Vous n'tes pas un vrai dveloppeur si vous n'crivez pas des programmes optimiss.

Exercice

34

Lisibilit
C'est quoi ?
Optimisation de la prsentation du code source

Pourquoi ?
Pour arriver relire facilement le code en cas d'amlioration ou maintenance

Comment ?
En amliorant la lisibilit qui intervient 3 niveaux :

dcalages (indentations) noms des variables commentaires

17

35

Lisibilit
Rcrire le programme suivant en corrigeant les dcalages : debut rep "O" tantque rep = "O" saisir valeur si valeur > 1 alors pour i de 1 10 afficher valeur*i finpour sinon afficher "impossible" p finsi afficher "continuer ? (O/N) " repeter saisir rep jusqu' rep = "N" ou rep = "O" fintantque fin

36

Temps
C'est quoi ?
Optimisation du temps d'excution du programme

Pourquoi ?
Pour viter des temps d'attente trop longs Pour viter d'utiliser des ressources machine inutilement

Comment ?
En supprimant toutes les redondances et lourdeurs au niveau du code

Un gain de temps presque insignifiant peut s'avrer norme en exploitation grande chelle

18

37

Espace
C'est quoi ?
Optimisation de l'espace utilis par les donnes du programme

Pourquoi ?
Pour viter des temps d'attente trop longs lors de certains accs Pour viter d'encombrer inutilement la mmoire et/ou les supports de stockage

Comment ?
En supprimant toutes les redondances et lourdeurs au niveau des donnes

Il faut parfois trouver un compromis entre l'optimisation de l'espace, du temps et la lisibilit. Suivant le cas, certains doivent tre favoriss.

38

Tests
Un programme doit subir des tests avant d'tre exploit : C'est quoi ?
Ensemble de contrles des diffrentes fonctionnalits du programme

Pourquoi ?
Pour vrifier que tout marche bien !

Comment ?
Jeu d'essais prenant en compte le maximum de cas particuliers p p p * Tests de saisie * Tests de scurit * Tests des donnes et calculs * Tests des accs etc

19

39

Tests
Reprenons l'algo de la moyenne des ages (vu avec le "tantque") : dbut saisir age nb 0 total 0 tantque age <> 0 total total + age nb nb + 1 saisir age fintantque afficher "moyenne affiche "mo enne = " total / nb ", fin Faire les 2 traces suivantes : a)12 8 7 0 b)0 Que faut-il modifier ?

age

nb

total

40

Tests
Corriger les 4 erreurs qui se trouvent dans l'algo suivant :
programme multiples Var nombre : num borne-sup : num i : num Debut afficher "Saisir le nombre de dpart " saisir nombre afficher "Saisir la borne suprieure " saisir "borne-sup" afficher "liste des multiples de ", nombres " :" liste nombres, : pour i de nombre borne-sup pas de borne-sup afficher j finpour Fin Remarque : un multiple d'un nombre est une valeur qui est divisible par ce nombre Exemple : Les multiples de 3 sont 3,6,9,12,15etc (jusqu une borne suprieure)

20