Cours Algorithme
Cours Algorithme
1ère année
2015/2016, Semestre 1
1
Objectif et plan du cours
Objectif:
• Apprendre les concepts de base de l'algorithmique et de la
programmation
Plan:
• Généralités (matériel d’un ordinateur, systèmes d’exploitation, langages
de programmation, …)
Applications
).Word, Excel, Jeux, Maple, etc(
Langages
).Java,C/C++, Fortran,etc(
Système d’exploitation
).DOS,Windows, Unix, etc(
Matériel
).PC, Macintosh, station SUN, etc(
3
Matériel: Principaux éléments d’un PC
Unité centrale (le boîtier)
• Processeur ou CPU (Central Processing Unit)
• Mémoire centrale
• Disque dur, lecteur disquettes, lecteur CD-ROM
• Cartes spécialisées (cartes vidéo, réseau, ...)
• Interfaces d'entrée-sortie (Ports série/parallèle, …)
Périphériques
• Moniteur (l'écran), clavier, souris
• Modem, imprimante, scanner, …
4
Qu’est ce qu’un système d’exploitation?
Ensemble de programmes qui gèrent le matériel et
contrôlent les applications
• Le code ASCII (American Standard Code for Information Interchange) donne les
correspondances entre les caractères alphanumériques et leurs
représentation binaire, Ex. A= 01000001, ?=00111111
7
L'assembleur
Problème: le langage machine est difficile à comprendre par l'humain
ADD A, 4
LOAD B
traducteur langage machine
MOV A, OUT
…
9
Compilateur/interpréteur
Compilateur: traduire le programme entier une fois pour toutes
Compilateur exécution
exemple.c exemple
fichier source fichier exécutable
Interprétation+exécution
Interpréteur: traduire au fur et à mesure les instructions du
exemple.bas
programme
fichier source à chaque exécution
10
Langages de programmation:
Deux types de langages:
• Langages procéduraux
• Langages orientés objets
Exemples de langages:
• Fortran, Cobol, Pascal, C, …
• C++, Java, …
11
Etapes de réalisation d’un programme
Enoncé du problème
Spécification
Cahier des charges
Analyse
Algorithme
Traduction en langage
Programme source
Compilation
Programme exécutable
Tests et modifications
Version finale et résultats
12
Algorithmique
Le terme algorithme vient du nom du mathématicien arabe
Al-Khawarizmi (820 après J.C.)
14
Algorithmique
15
Notion de variable
Dans les langages de programmation une variable sert à stocker
la valeur d’une donnée
• un nom (Identificateur)
• un type (entier, réel, caractère, chaîne de caractères, …)
16
Choix des identificateurs (1)
Le choix des noms de variables est soumis à quelques règles qui
varient selon le langage, mais en général:
Un nom doit commencer par une lettre alphabétique
exemple valide: A1 exemple invalide: 1A
doit être constitué uniquement de lettres, de chiffres et du soulignement
_ (Eviter les caractères de ponctuation et les espaces)
valides: MIPC2015, GEGM_2015
invalides: BCG 2015,LSI-2015,SIAD;2015
doit être différent des mots réservés du langage (par exemple en Java:
int, float, else, switch, case, default, for, main, return , …)
18
Types des variables
Le type d’une variable détermine l’ensemble des valeurs qu’elle peut
prendre, les types offerts par la plus part des langages sont:
Type numérique (entier ou réel)
• Byte (codé sur 1octet): de 0 à 255
• Entier court (codé sur 2 octets) : -32 768 à 32 767
• Entier long (codé sur 4 ou 8 octets)
• Réel simple précision (codé sur 4 octets)
• Réel double précision (codé sur 8 octets)
Type logique ou booléen: deux valeurs VRAI ou FAUX
Ex valides: i ←1 j ←i k ←i+j
x ←10.3 OK ←FAUX ch1 ←"SMI"
ch2 ←ch1 x ←4 x ←j
(voir la déclaration des variables dans le transparent précédent)
non valides: i ←10.3 OK ←"SMI" j ←x
21
Quelques remarques
Beaucoup de langages de programmation (C/C++, Java, …) utilisent
le signe égal = pour l’affectation ←. Attention aux confusions:
• l'affectation n'est pas commutative : A=B est différente de B=A
• l'affectation est différente d'une équation mathématique :
22
Exercices simples sur l'affectation (1)
23
Exercices simples sur l'affectation (2)
24
Exercices simples sur l'affectation (2)
Variables A, B, C: Entier
Début
A←3
B←7
A←B
B ← A+5
C←A+B
C←B–A
Fin
26
Exercices simples sur l'affectation ()
Variables A, B : Entier
Début
A←1
B←2
A←B
B←A
Fin
• ^ : (élévation à la puissance)
• * , / (multiplication, division)
• % (modulo)
• + , - (addition, soustraction)
exemple: 2 + 3 * 7 vaut 23
29
EXEMPLE 1
Que produit l’algorithme suivant ?
Variables A, B, C en Caractères
Début
A ← "423"
B ← "12"
C←A+B
Fin
30
EXEMPLE 2:
Que produit l’algorithme suivant ?
Variables A, B, C en Caractères
Début
A ← "423"
B ← "12"
C←A&B
Fin
31
Les instructions d'entrées-sorties:
lecture et écriture (1)
Les instructions de lecture et d'écriture permettent à la machine de
communiquer avec l'utilisateur
La lecture permet d'entrer des donnés à partir du clavier
• En pseudo-code, on note: lire (var)
la machine met la valeur entrée au clavier
dans la zone mémoire nommée var
32
Les instructions d'entrées-sorties:
lecture et écriture (2)
L'écriture permet d'afficher des résultats à l'écran (ou de les écrire
dans un fichier)
33
Exemple (lecture et écriture)
Ecrire un algorithme qui demande un nombre entier à l'utilisateur, puis
qui calcule et affiche le double de ce nombre
Algorithme Calcul_double
variables A, B : entier
Début
écrire("entrer le nombre ")
lire(A)
B ← 2*A
écrire("le double de ", A, "est :", B)
Fin
34
Exercice (lecture et écriture)
Ecrire un algorithme qui vous demande de saisir votre nom puis
votre prénom et qui affiche ensuite votre nom complet
Algorithme AffichageNomComplet
variables Nom, Prenom, Nom_Complet : chaîne de caractères
Début
écrire("entrez votre nom")
lire(Nom)
écrire("entrez votre prénom")
lire(Prenom)
Nom_Complet ← Nom & Prenom
écrire("Votre nom complet est : ", Nom_Complet)
Fin
35
EXERCICE
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.
36
Variables nb, pht, ttva, pttc en Numérique
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 : ", pttc
Fin
37
Tests: instructions conditionnelles (1)
Les instructions conditionnelles servent à n'exécuter une instruction
ou une séquence d'instructions que si une condition est vérifiée
On utilisera la forme suivante: Si condition alors
instruction ou suite d'instructions1
Sinon
instruction ou suite d'instructions2
Finsi
• la condition ne peut être que vraie ou fausse
• si la condition est vraie, se sont les instructions1 qui seront exécutées
38
Tests: instructions conditionnelles (2)
La partie Sinon n'est pas obligatoire, quand elle n'existe pas et que
la condition est fausse, aucun traitement n'est réalisé
Si condition alors
instruction ou suite d'instructions1
Finsi
39
Exemple (Si…Alors…Sinon)
Algorithme AffichageValeurAbsolue (version1)
Variable x : réel
Début
Ecrire (" Entrez un réel : “)
Lire (x)
Si (x < 0) alors
Ecrire ("la valeur absolue de ", x, "est:",-x)
Sinon
Ecrire ("la valeur absolue de ", x, "est:",x)
Finsi
Fin
40
Exemple (Si…Alors)
Algorithme AffichageValeurAbsolue (version2)
Variable x,y : réel
Début
Ecrire (" Entrez un réel : “)
Lire (x)
y← x
Si (x < 0) alors
y ← -x
Finsi
Ecrire ("la valeur absolue de ", x, "est:",y)
Fin
41
Exercice (tests)
Ecrire un algorithme qui demande un nombre entier à l'utilisateur,
puis qui teste et affiche s'il est divisible par 3
Algorithme Divsible_par3
Variable n : entier
Début
Ecrire " Entrez un entier : "
Lire (n)
Si (n%3=0) alors
Ecrire (n," est divisible par 3")
Sinon
Ecrire (n," n'est pas divisible par 3")
Finsi
Fin
42
Conditions composées
Une condition composée est une condition formée de plusieurs
conditions simples reliées par des opérateurs logiques:
ET, OU, OU exclusif (XOR) et NON
Exemples :
• x compris entre 2 et 6 : (x > 2) ET (x < 6)
• n divisible par 3 ou par 2 : (n%3=0) OU (n%2=0)
• deux valeurs et deux seulement sont identiques parmi a, b et c :
(a=b) XOR (a=c) XOR (b=c)
43
Tables de vérité
C1 C2 C1 ET C2 C1 C2 C1 OU C2
VRAI VRAI VRAI VRAI VRAI VRAI
VRAI FAUX FAUX VRAI FAUX VRAI
FAUX VRAI FAUX FAUX VRAI VRAI
FAUX FAUX FAUX FAUX FAUX FAUX
C1 C2 C1 XOR C2 C1 NON C1
VRAI VRAI FAUX VRAI FAUX
VRAI FAUX VRAI FAUX VRAI
FAUX VRAI VRAI
FAUX FAUX FAUX
44
Tests imbriqués
Les tests peuvent avoir un degré quelconque d'imbrications
Si condition1 alors
Si condition2 alors
instructionsA
Sinon
instructionsB
Finsi
Sinon
Si condition3 alors
instructionsC
Finsi
Finsi
45
Tests imbriqués: exemple (version 1)
Variable n : entier
Début
Ecrire ("entrez un nombre : ")
Lire (n)
Si (n < 0) alors
Ecrire ("Ce nombre est négatif")
Sinon
Si (n = 0) alors
Ecrire ("Ce nombre est nul")
Sinon
Ecrire ("Ce nombre est positif")
Finsi
Finsi
Fin
46
Tests imbriqués: exemple (version 2)
Variable n : entier
Début
Ecrire ("entrez un nombre : ")
Lire (n)
Si (n < 0) alors Ecrire ("Ce nombre est négatif")
Finsi
Si (n = 0) alors Ecrire ("Ce nombre est nul")
Finsi
Si (n > 0) alors Ecrire ("Ce nombre est positif")
Finsi
Fin
Remarque : dans la version 2 on fait trois tests systématiquement alors que
dans la version 1, si le nombre est négatif on ne fait qu'un seul test
Conseil : utiliser les tests imbriqués pour limiter le nombre de tests et placer
d'abord les conditions les plus probables
47
Tests imbriqués: exercice
Finsi
Fin 49
Les habitants paient l’impôt selon les règles
suivantes : les hommes de plus de 20 ans
paient l’impôt
les femmes paient l’impôt si elles ont entre 18
et 35 ans
les autres ne paient pas d’impôt
Le programme demandera donc l’âge et le
sexe, et se prononcera donc ensuite sur le fait
que l’habitant est imposable.
50
Variable genre en Caractère
Variable age en Numérique
Début
Ecrire "Entrez le genre (M/F) : "
Lire genre
Ecrire "Entrez l’âge: "
Lire age
Si genre = "M" ET age > 20 ou genre = "F" ET (age > 18 ET age < 35)
Alors
Ecrire "Imposable"
Sinon
Ecrire "Non Imposable"
FinSi
Fin
51
exercice
52
Solution
ALGORITHME seconddegré
VAR a, b, c, delta : REEL
DÉBUT
ECRIRE " saisissez les valeurs a, b et c de l'équation ax2+bx+c=0 : "
LIRE a, b, c
SI a=0 ALORS
ECRIRE " equation du premier degre:",b,"*x+",c,"=0"
SI b != 0 ALORS ECRIRE "solution est ", -c/b
SINON
ECRIRE "Pas de solution"
FINSI
SINON
delta = b*b-4*a*c
SI delta>0 ALORS
x1 = (-b-RACINE(delta))/2*a , x2 = (-b+RACINE(delta))/2*a
ECRIRE "les solutions de ",a,"x²+",b,"x+",c,"=0","sont", "x1=",x1,"et x2=",x2
SINON
SI delta =0 ALORS ECRIRE "Solution est", -b/(2*a)
SINON
ECRIRE "pas de solutions reelles !!"
FINSI
FINSI
FINSI
FIN
53
exercice
Ecrire un algorithme qui demande à
l’user la température de l’eau et l’état
(solide, liquide, vapeur).
54
solution
Algo températuredeH2O
Variables T : réel
Etat : chaine de caractère.
Début
Ecrire (‘’entrer la température de H2O : ‘’ )
Lire (T)
Si T>100 alors
Etat = ‘’ vapeur ‘’
Sinon
Si T<0 alors
Etat = ‘’ solide ‘’
Sinon
Etat = ‘’ liquide ‘’
Finsi
Finsi
Fin 55
Instructions itératives: les boucles
Les boucles servent à répéter l'exécution d'un groupe d'instructions
un certain nombre de fois
On distingue trois sortes de boucles en langages de programmation :
• Les boucles tant que : on y répète des instructions tant qu'une certaine
condition est réalisée
FinTantQue
Faux
57
Les boucles Tant que : remarques
Le nombre d'itérations dans une boucle TantQue n'est pas connu
au moment d'entrée dans la boucle. Il dépend de l'évolution de la
valeur de condition
Une des instructions du corps de la boucle doit absolument
changer la valeur de condition de vrai à faux (après un certain
nombre d'itérations), sinon le programme tourne indéfiniment
58
Boucle Tant que : exemple1
Contrôle de saisie d'une lettre majuscule jusqu’à ce que le caractère
entré soit valable
Variable C : caractère
Debut
Ecrire (" Entrez une lettre majuscule ")
Lire (C)
TantQue (C < 'A' ou C > 'Z')
Ecrire ("Saisie erronée. Recommencez")
Lire (C)
FinTantQue
Ecrire ("Saisie valable")
Fin
59
Boucle Tant que : exemple2
Un algorithme qui détermine le premier nombre entier N tel que la
somme de 1 à N dépasse strictement 100
version 1
Variables som, i : entier
Debut
i←0
som← 0
TantQue (som <=100)
i ← i+1
som ← som+i
FinTantQue
Ecrire (" La valeur cherchée est N= ", i)
Fin
60
Boucle Tant que : exemple2 (version2)
Un algorithme qui détermine le premier nombre entier N tel que la
somme de 1 à N dépasse strictement 100
i ←initiale
Vrai
i n'a pas atteint finale instructions i ← i + pas
Faux
62
Les boucles Pour
Remarque : le nombre d'itérations dans une boucle Pour est connu
avant le début de la boucle
Compteur est une variable de type entier (ou caractère). Elle doit
être déclarée
Pas est un entier qui peut être positif ou négatif. Pas peut ne pas
être mentionné, car par défaut sa valeur est égal à 1. Dans ce cas,
le nombre d'itérations est égal à finale - initiale+ 1
63
Déroulement des boucles Pour
1) La valeur initiale est affectée à la variable compteur
a) Si la valeur du compteur est > à la valeur finale dans le cas d'un pas
positif (ou si compteur est < à finale pour un pas négatif), on sort de la
boucle et on continue avec l'instruction qui suit FinPour
b) Si compteur est <= à finale dans le cas d'un pas positif (ou si compteur
est >= à finale pour un pas négatif), instructions seront exécutées
puiss ← 1
Pour i allant de 1 à n
puiss← puiss*x
FinPour
Ecrire (x, " à la puissance ", n, " est égal à ", puiss)
Fin
65
Boucle Pour : exemple1 (version 2)
Calcul de x à la puissance n où x est un réel non nul et n un entier
positif ou nul (version 2 avec un pas négatif)
Variables x, puiss : réel
n, i : entier
Debut
Ecrire (" Entrez respectivement les valeurs de x et n ")
Lire (x, n)
puiss ← 1
Pour i allant de n à 1 par pas -1
puiss← puiss*x
FinPour
Ecrire (x, " à la puissance ", n, " est égal à ", puiss)
Fin
66
Lien entre Pour et TantQue
La boucle Pour est un cas particulier de Tant Que (cas où le nombre d'itérations
est connu et fixé) . Tout ce qu'on peut écrire avec Pour peut être remplacé
avec TantQue (la réciproque est fausse)
67
Lien entre Pour et TantQue: exemple
Calcul de x à la puissance n où x est un réel non nul et n un entier positif ou
nul (version avec TantQue)
Variables x, puiss : réel
n, i : entier
Debut
Ecrire (" Entrez la valeur de x ")
Lire (x)
Ecrire (" Entrez la valeur de n ")
Lire (n)
puiss ← 1
i←1
TantQue (i<=n)
puiss← puiss*x
i ← i+1
FinTantQue
Ecrire (x, " à la puissance ", n, " est égal à ", puiss)
Fin
68
Boucles imbriquées
Les instructions d'une boucle peuvent être des instructions
itératives. Dans ce cas, on aboutit à des boucles imbriquées
Exemple: Exécution
Pour i allant de 1 à 5 OX
Pour j allant de 1 à i OOX
écrire("O") OOOX
FinPour OOOOX
écrire("X") OOOOOX
FinPour
69
Les boucles Répéter … jusqu’à …
Répéter
instructions instructions
Jusqu'à condition
Faux
condition
Vrai
Condition est évaluée après chaque itération
les instructions entre Répéter et jusqu’à sont exécutées au moins une fois et
leur exécution est répétée jusqu’à ce que condition soit vrai (tant qu'elle est
fausse)
70
Boucle Répéter jusqu’à : exemple
Un algorithme qui détermine le premier nombre entier N tel que la somme de 1
à N dépasse strictement 100 (version avec répéter jusqu'à)
71
Choix d'un type de boucle
Si on peut déterminer le nombre d'itérations avant l'exécution de la
boucle, il est plus naturel d'utiliser la boucle Pour
72
http://pise.info/algo/index.htm
73