Title: Cours d
1Cours dalgorithmique
1ère année SMI 2006/2007, Semestre 2 Ce que
lon conçoit bien sénonce clairement et les mots
pour le dire arrivent aisément N.
Boileau
2Objectif et plan du cours
- Objectif
- Apprendre les concepts de base de l'algorithmique
et de la programmation - Etre capable de mettre en oeuvre ces concepts
pour analyser des problèmes simples et écrire les
programmes correspondants - Plan
- Généralités (matériel dun ordinateur, systèmes
dexploitation, langages de programmation, ) - Algorithmique (affectation, instructions
conditionnelles, instructions itératives,
fonctions, procédures, ) - MAPLE (un outil de programmation)
3Système Informatique?
- Techniques du traitement automatique de
linformation au moyen des ordinateurs - Système informatique ordinateur périphériques
- Éléments dun système informatique
4Matériel Principaux éléments dun PC
- Unité centrale (le boîtier) Processeur ou CPU
(Central Processing Unit) - Mémoire centrale
- Unité de calcul
- Unité de commande
- Périphériques
- Moniteur (l'écran), clavier, souris
- Modem, imprimante, scanner,
5Quest-ce quun programme dordinateur?
- Allumez un ordinateur, vous nen tirerez rien!!
- Pour le faire marcher il faut lui fournir un
programme - Ordinateur matériel programme(s)
- Un programme est une suite dinstructions
dordinateur - Une instruction est un ordre compris par
lordinateur et qui lui fait exécuté une action,
c-a-d une modification de son environnement
6Les catégories dordres
- les ordinateurs, quels quils soient, ne sont
fondamentalement capables de comprendre que
quatre catégories d'ordres (en programmation, on
n'emploiera pas le terme d'ordre, mais plutôt
celui d'instructions). Ces quatre familles
d'instructions sont - laffectation de variables
- la lecture / écriture
- les tests
- les boucles
7Actions dun ordinateur Exemple
- Attendre quun nombre soit tapé au clavier
- Sortir à lécran le nombre entré
- Attendre quun nombre soit tapé au clavier
- Sortir à lécran le nombre entré
- Additionner les deux nombres entrés
- Sortir à lécran le résultat de laddition
- Ces lignes forment un programme dordinateur
8Quest ce quun système dexploitation?
- Ensemble de programmes qui gèrent le matériel et
contrôlent les applications - Gestion des périphériques (affichage à l'écran,
lecture du clavier, pilotage dune imprimante, ) - Gestion des utilisateurs et de leurs données
(comptes, partage des ressources, gestion des
fichiers et répertoires, ) - Interface avec lutilisateur (textuelle ou
graphique) Interprétation des commandes - Contrôle des programmes (découpage en taches,
partage du temps processeur, )
9Langages informatiques
- Un langage informatique est un outil permettant
de donner des ordres (instructions) à la machine - A chaque instruction correspond une action du
processeur - Intérêt écrire des programmes (suite
consécutive dinstructions) déstinés à effectuer
une tache donnée - Exemple un programme de gestion de comptes
bancaires - Contrainte être compréhensible par la machine
10Langage machine
- Langage binaire linformation est exprimée et
manipulée sous forme dune suite de bits - Un bit (binary digit) 0 ou 1 (2 états
électriques) - Une combinaison de 8 bits 1 Octet ?
possibilités qui permettent de coder tous les
caractères alphabétiques, numériques, et symboles
tels que ?,,, - 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 - Les opérations logiques et arithmétiques de base
(addition, multiplication, ) sont effectuées en
binaire
11L'assembleur
- Problème le langage machine est difficile à
comprendre par l'humain - Idée trouver un langage compréhensible par
l'homme qui sera ensuite converti en langage
machine - Assembleur (1er langage) exprimer les
instructions élémentaires de façon symbolique - déjà plus accessible que le langage machine
- - dépend du type de la machine (nest pas
portable) - - pas assez efficace pour développer des
applications complexes - Apparition des langages évolués
12Langages haut niveau
- Intérêts multiples pour le haut niveau
- proche du langage humain anglais
(compréhensible) - permet une plus grande portabilité (indépendant
du matériel) - Manipulation de données et dexpressions
complexes (réels, objets, ab/c, ) - Nécessité dun traducteur (compilateur/interpréteu
r), - exécution plus ou moins lente selon le
traducteur
13Compilateur/interpréteur
- Compilateur traduire le programme entier une
fois pour toutes - plus rapide à lexécution
- sécurité du code source
- - il faut recompiler à chaque modification
- Interpréteur traduire au fur et à mesure les
instructions du programme à chaque exécution - exécution instantanée appréciable pour les
débutants - - exécution lente par rapport à la compilation
14Langages de programmation
- Deux types de langages
- Langages procéduraux sont à base de procédures.
Une procédure est une portion de programme écrit
en langage de haut niveau qui accomplit une tâche
spécifique nécessaire au programme. - Langages orientés objets sont des langages non
procéduraux dans lesquels les éléments du
programme sont considérés comme des objets qui
peuvent s'échanger des messages. - Choix dun langage?
15Principaux Langages de programmation
Pascal Blaise PASCAL, mathématicien et inventeur de la première machine à calculer 1971 Langage compilé et structuré, dérivé d'ALGOL. c'est un langage de développement standard pour les micro-ordinateurs.
C C'est une version améliorée du langage de programmation B du Bell Laboratory, créé en 1972 Langage de programmation structuré et compilé, très largement employé car ses programmes peuvent facilement se transférer d'un type d'ordinateur à un autre.
Maple Nasa 1980 de SUN couvrir tous les domaines Dapplication formel
Java Microsystems 1990 Ce langage connaît un succès qu'aucun autre langage n'avait encore connu.
16Etapes de réalisation dun programme
La réalisation de programmes passe par lécriture
dalgorithmes Doù
lintérêt de lAlgorithmique
17Pourquoi apprendre lalgorithmique pour apprendre
à programmer ?
- Un algorithme est une description complète et
détaillée des actions à effectuer et de leur
séquencement pour arriver à un résultat donné - Intérêt séparation analyse/codage (pas de
préoccupation de syntaxe) lalgorithmique exprime
les instructions résolvant un problème donné
indépendamment des particularités de tel ou tel
langage. - Qualités exact (fournit le résultat souhaité),
efficace (temps dexécution, mémoire occupée),
clair (compréhensible), général (traite le plus
grand nombre de cas possibles), - Pour prendre une image, si un programme était une
dissertation, lalgorithmique serait le plan, une
fois mis de côté la rédaction et lorthographe.
Mieux faire dabord le plan et rédiger ensuite
que linverse
18Représentation dun algorithme
- Historiquement, deux façons pour représenter un
algorithme -
- LOrganigramme représentation graphique avec des
symboles (carrés, losanges, etc.) - offre une vue densemble de lalgorithme
- représentation quasiment abandonnée aujourdhui
- Le pseudo-code représentation textuelle avec une
série de conventions ressemblant à un langage de
programmation (sans les problèmes de syntaxe) - plus pratique pour écrire un algorithme
- représentation largement utilisée
19Exemple de pseudo code
- problème du tri
- Entrée une séquence de n nombres (a1,
,an) - Sortie une permutation (a1 an) de la
séquence dentrée a1lta2lt.ltan -
- Exemple (314159264158) ?
(263141415859)
20Algorithmique
- Notions et instructions de base
21Les catégories dordres
- les ordinateurs, quels quils soient, ne sont
fondamentalement capables de comprendre que
quatre catégories d'ordres (en programmation, on
n'emploiera pas le terme d'ordre, mais plutôt
celui d'instructions). Ces quatre familles
d'instructions sont - Les variables et leurs affectation
- la lecture / écriture
- les tests
- les boucles
22Notions Fondamentales (1/2)
- Karim possède 3 seaux un seau en plastique
dune contenance de 10 litres, un seau en bois
dune contenance de 7 litres et un seau en fer
dune contenance de 9 litres. - 10h00 karim vide ses 3 seaux
- 10h05 karim va rendre visite a Nabil, celui-ci
met 6 litres dans le seau en bois de Karim - 10h10 karim transverse le contenu de son seau
en bois dans le seau en fer - 10h15 karim revient vers nabil remplir à ras
bord son seau en plastique - 10h20 karim déverse la moitié de son seau en
plastique à légout - 10h25 karim transvase le contenu de son seau en
plastique dans celui en bois - 10h30 karim transvase 2 litres de son seau en
bois dans celui en fer - 10h35 karim informe Asmae du nombre de litres
contenu dans ses seaux en plastique, en bois, en
fer. - Quelles sont les quantités des trois seaux que
Asmae a reçues?
23Notions Fondamentales (2/2)
- Notion dalgorithme si les huis phrases sont
bien exécutée par Karim, alors lhistoire est un
algorithme - Notion dinstruction chacune de huis phrases
est une instruction (un ordre) - Notion de valeur 0, 3, 5, 6, 8, 10
- Notion de mémoire elle est matérialisée par les
seaux qui mémorisent les quantités de liquide - Notion de variable une variable est un
emplacement mémoire, ici on a trois variables (le
seau en plastique, le seau en bois et le seau en
fer) - Notion denvironnement cest lensemble des
objet, informations, personnes qui on une
existence hors de lhistoire mais qui
interviennent dans son déroulement. - Notion des valeurs dentrée et de sortie cest
les valeurs que le processeur reçoit de
lenvironnement et celles quil donne à
lenvironnement durant lexucution. Valeurs en
entrée 6, 10 Valeurs en sortie 0, 3,
8
24Notion de variable
- Dans les langages de programmation une variable
sert à stocker la valeur dune donnée - Une variable désigne en fait un emplacement
mémoire dont - le contenu peut changer au cours dun programme
(doù le nom variable) - Règle Les variables doivent être déclarées
avant dêtre utilisées, elle doivent être
caractérisées par - un nom (Identificateur)
- un type (entier, réel, caractère, chaîne de
caractères, )
25Choix 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 SMI2007, SMI_2007 invalides SMI
2007, SMI-2007, SMI2007 - doit être différent des mots réservés du langage
(par exemple en Java int, float, else, switch,
case, default, for, main, return, ) -
- La longueur du nom doit être inférieure à la
taille maximale spécifiée par le langage utilisé
26Choix des identificateurs (2)
- Conseil pour la lisibilité du code choisir des
noms significatifs qui décrivent les données
manipulées - exemples TotalVentes2006, Prix_TTC, Prix_HT
- Remarque en pseudo-code algorithmique, on va
respecter les règles citées, même si on
est libre dans la syntaxe
27Types des variables
- Le type dune variable détermine lensemble des
valeurs quelle 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 - Type caractère lettres majuscules, minuscules,
chiffres, symboles, - exemples A, a, 1, ?,
- Type chaîne de caractère toute suite de
caractères, exemples " Nom,
Prénom", "code postale 1000",
28Déclaration des variables
- Rappel toute variable utilisée dans un programme
doit avoir fait lobjet dune déclaration
préalable - En pseudo-code, on va adopter la forme suivante
pour la déclaration de variables - Variables liste d'identificateurs type
- Exemple
- Variables i, j,k entier
- x, y réel
- OK booléen
- ch1, ch2 chaîne de caractères
- Remarque pour le type numérique on va se limiter
aux entiers et réels sans considérer les sous
types
29Linstruction daffectation
- laffectation consiste à attribuer une valeur à
une variable (ça consiste en fait à
remplir où à modifier le contenu d'une zone
mémoire) - En pseudo-code, l'affectation se note avec le
signe ? - Var? e attribue la valeur de e à la variable
Var -
- e peut être une valeur, une autre variable ou une
expression - Var et e doivent être de même type ou de types
compatibles - laffectation ne modifie que ce qui est à gauche
de la flèche -
- Ex valides i ?1 j ?i k
?ij - 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
-
30Quelques remarques
- Beaucoup de langages de programmation (C/C,
Java, ) utilisent le signe égal pour
laffectation ?. Attention aux confusions - l'affectation n'est pas commutative AB est
différente de BA - l'affectation est différente d'une équation
mathématique - AA1 a un sens en langages de programmation
- A12 n'est pas possible en langages de
programmation et n'est pas équivalente à A1 - Certains langages donnent des valeurs par défaut
aux variables déclarées. Pour éviter tout
problème il est préférable d'initialiser les
variables déclarées
31Exercices simples sur l'affectation (1)
- Donnez les valeurs des variables A, B et C après
exécution des instructions suivantes ? - Variables A, B, C EntierDébutA ? 3B ? 7A ?
B - B ? A5
- C ? A BC ? B AFin
32Exercices simples sur l'affectation (2)
- Donnez les valeurs des variables A et B après
exécution des instructions suivantes ? - Variables A, B EntierDébutA ? 1B ? 2A ?
BB ? AFinLes deux dernières instructions
permettent-elles déchanger les valeurs de A et
B ?
33Exercices simples sur l'affectation (3)
- Ecrire un algorithme permettant déchanger les
valeurs de deux variables A et B
34Expressions et opérateurs
- Une expression peut être une valeur, une variable
ou une opération constituée de variables reliées
par des opérateurs exemples 1, b, a2, a
3b-c, - L'évaluation de l'expression fournit une valeur
unique qui est le résultat de l'opération - Les opérateurs dépendent du type de l'opération,
ils peuvent être - des opérateurs arithmétiques , -, , /,
(modulo), (puissance) - des opérateurs logiques NON, OU, ET
- des opérateurs relationnels , , lt, gt, lt,
gt - des opérateurs sur les chaînes (concaténation)
- Une expression est évaluée de gauche à droite
mais en tenant compte de priorités -
35Priorité des opérateurs
- Pour les opérateurs arithmétiques donnés
ci-dessus, l'ordre de priorité est le suivant (du
plus prioritaire au moins prioritaire) - (élévation à la puissance)
- , / (multiplication, division)
- (modulo)
- , - (addition, soustraction)
- exemple 2 3 7 vaut 23
- En cas de besoin (ou de doute), on utilise les
parenthèses pour indiquer les opérations à
effectuer en priorité exemple (2 3) 7
vaut 35
36Les 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 - Remarque Le programme s'arrête lorsqu'il
rencontre une instruction Lire et ne se poursuit
qu'après la frappe dune valeur au clavier et de
la touche Entrée
37Les 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) - En pseudo-code, on note écrire (var)
- la machine affiche le contenu de la zone
mémoire var - Conseil Avant de lire une variable, il est
fortement conseillé décrire des messages à
lécran, afin de prévenir lutilisateur de ce
quil doit frapper
38Exemple (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 la valeur de A ")
- lire(A)
- B ? 2A
- écrire("le double de ", A, "est ", B)
- Fin
39Exercice (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
40Exercice (respect des règles)
- Chacun de ces quatre algorithmes contient une
erreur. Laquelle?
Algorithme1 Variables Quantité entier Prix_unit réel Début Lire (Quantité, Prix_unit) Prix_total Quantité Prix_unit Écrire (Prix_total) Fin Algorithme2 Variables X, Y, Z réel Début Lire (X, Y, Z) Z X-Y Écrire (Z) Fin
Algorithme3 Variables A1, A2 entier A3 réel Début Lire (A1, A2) A2 A1 A3 Écrire (A2) Fin Algorithme4 Variables X réel Début Lire (X) X X-1 X Pi X Écrire (X) Fin
41Méthode de construction dun algorithme simple
(1/4)
- Exemple
- Écrire un algorithme qui consiste a calculer
lair S dun cercle selon la formule S Pi R2 - Rappel Pi 3.14159 et R le rayon du cercle
42Méthode de construction dun algorithme simple
(2/4)
- Méthodologie a suivre
- constantes Pi 3.14159
- Variables Rayon, Surface
- Types Rayon, Surface réel
- Expressions et affectation Surface Pi
(Rayon)2 - Structures conditionnelles et les boucles
------ - Opérations dentrée-sortie Lire (Rayon),
- Écrire (Surface)
43Méthode de construction dun algorithme simple
(3/4)
Algorithme
Calcul_Aire Constantes Pi 3,14159 Variables Rayon, Surface réels Début lire (Rayon) Surface Pi (Rayon)2 écrire (Surface) Fin
44Méthode de construction dun algorithme simple
(3/4)
Programme Pascal Programme C
Program Calcul_Aire CONST Pi 3.14159 VAR Rayon, Surface REAL BEGIN READLN (Rayon) Surface Pi SQR (Rayon) WRITELN (Surface) END. include ltstdio.hgt include ltmath.hgt Main ( ) Float Pi 3.14159 Float rayon, surface Scanf ( /f , rayon) surface pipow (rayon,2) Printif ( /f\n surface, ) Return 0
45Algorithmique
- Les structures Conditionnelles et les boucles
46Besoin a des concepts de ruptures de séquence
- Rare les algorithme qui peuvent se décrire
uniquement par un enchaînement séquentiel
dopération élémentaire - On a besoin a des concept de rupture de séquence
comme les test et les boucles - Ex
- un algorithme qui résout une équation de deuxième
degré - un algorithme qui calcule une série numérique
Algorithme
Calcul_Aire Constantes Pi 3,14159 Variables Rayon, Surface réels Début lire (Rayon) Surface Pi (Rayon)2 écrire (Surface) Fin
47Les structures conditionnelles et les boucles
- Les tests simples permet de réaliser un choix
parmi deux possibilités (Ex Booléenne vrais ou
faux) - Les instructions conditionnelles cest un
concept de tests multiples, permet de comparer un
objet à une série de valeurs, et exécuter si la
condition est vérifier (Ex recherche des
nombres premier dans une ensemble) - Les itérations consiste a exécuté un bloc
dinstructions un certain nombre de fois (Ex
calcul dune suite numérique) - Les boucles conditionnelles consiste a exécuté
un bloc dinstructions un certain nombre de fois
si la condition est vérifier (Ex On veut
afficher le 100 premiers nombres . Tant que i
est plus petit que 100, afficher la valeur de i).
-
48Tests 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 - si la condition est fausse, se sont les
instructions2 qui seront exécutées - la condition peut être une condition simple ou
une condition composée de plusieurs conditions
49Tests 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é - On utilisera dans ce cas la forme simplifiée
suivante -
- Si condition alors
- instruction ou suite d'instructions1
- Finsi
50Exemple (SiAlorsSinon)
- Algorithme AffichageValeurAbsolue (version1)
- Variable x réel
- Début Ecrire " Entrez un réel "
- Lire (x)
- Si x lt 0 alors Ecrire ("la valeur absolue
de ", x, "est",-x) - Sinon Ecrire ("la valeur absolue de ",
x, "est",x) - FinsiFin
51Exemple (SiAlors)
- Algorithme AffichageValeurAbsolue (version2)
- Variable x,y réel
- Début Ecrire " Entrez un réel "
- Lire (x)
- y? x
- Si x lt 0 alors y ? -x
- Finsi Ecrire ("la valeur absolue de ", x,
"est",y) - Fin
52Exercice (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 (n30) alors Ecrire (n," est
divisible par 3") - Sinon Ecrire (n," n'est pas divisible
par 3") - FinsiFin
53Conditions 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 gt 2) ET (x lt 6)
- n divisible par 3 ou par 2 (n30) OU (n20)
- deux valeurs et deux seulement sont identiques
parmi a, b et c - (ab) XOR (ac) XOR (bc)
- L'évaluation d'une condition composée se fait
selon des règles présentées généralement dans ce
qu'on appelle tables de vérité
54Tables de vérité
C1 C2 C1 OU C2
VRAI VRAI VRAI
VRAI FAUX VRAI
FAUX VRAI VRAI
FAUX FAUX FAUX
C1 C2 C1 ET C2
VRAI VRAI VRAI
VRAI FAUX FAUX
FAUX VRAI FAUX
FAUX FAUX FAUX
C1 C2 C1 XOR C2
VRAI VRAI FAUX
VRAI FAUX VRAI
FAUX VRAI VRAI
FAUX FAUX FAUX
C1 NON C1
VRAI FAUX
FAUX VRAI
55Tests 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
56Tests imbriqués exemple (version 1)
- Variable n entierDébut Ecrire ("entrez un
nombre ") Lire (n) Si n lt 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
57Tests imbriqués exemple (version 2)
- Variable n entier Début Ecrire ("entrez un
nombre ") Lire (n) - Si n lt 0 alors Ecrire ("Ce nombre est
négatif") Finsi - Si n 0 alors Ecrire ("Ce nombre est nul")
- Finsi Si n gt 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 (minimiser la
complexité)
58Tests imbriqués exercice
- Le prix de photocopies dans une reprographie
varie selon le nombre demandé 0,5 DH la copie
pour un nombre de copies inférieur à 10, 0,4DH
pour un nombre compris entre 10 et 20 et 0,3DH
au-delà. - Ecrivez un algorithme qui demande à
lutilisateur le nombre de photocopies
effectuées, qui calcule et affiche le prix à payer
59Tests imbriqués corrigé de l'exercice
- Variables copies entier prix
réelDébut Ecrire ("Nombre de photocopies ") - Lire (copies) Si copies lt 10 Alors
prix ? copies0.5 - Sinon Si copies lt 20 prix ?
copies0.4 Sinon prix ?
copies0.3 Finsi - Finsi Ecrire (Le prix à payer est , prix)
- Fin
60Tests imbriqués Exercice 2
- Écrire lalgorithme du traitement qui calcule le
discriminant DELTA dtrinome du second degré AX2
BX C et qui, en fonction de son signe,
calcule la ou les racines réelles du trinome ou
afiche, si besoin est quil nya pas de racine
réelle. - Les trois coefficients A, B et C seront
saisis au clavier avant traitement.
61Tests imbriqués corrigé de l'exercice 2
- Variables
- A, B, C, Delta, X1, X2
réelsDébut Lire (A, B, C) - Delta ? B2 4 AC
- Si (Delta lt 0) Alors Ecrire ( le
trinome na pas de racine réelle ) - Sinon
- Si (Delta gt 0 Alors
- X1 ? (-B racine(delta)) / 2A
- X2 ? (-B - racine(delta)) / 2A
- Ecrire ( le trinome possède deux racines
réelles , X1, X2) - Sinon
- X1 ? (-B ) / 2A
- Ecrire ( le trinome possède une racine
réelle , X1) - Finsi Finsi
- Fin
62Algorithmique
63Les types de boucle
- On distingue 2 types de boucles
- Les boucles à compteur ou définie
- On sait à lavance combien de fois la boucle
devra tourner et une variable (le compteur )
compte les répétitions - Choisir 10 nombres au hasard. On fera dix fois
lopération choisir un nombre au hasard. - Ex la boucle Pour
- Les boucles à événement ou indéfinie
- On ne sait pas à lavance le nombre de fois que
la boucle sera exécutée. - Ça peut dépendre du nombre de données à traiter.
- Ça peut dépendre du nombre dessais que lusager
a effectués. - Ex la boucle Tanque et la boucle jusqua
64Les boucles Tant que
- TantQue (condition)
- instructions
-
- FinTantQue
-
65Boucle Tant que exemple simple
- Un algorithme qui détermine le premier nombre
entier N tel que la somme de 1 à N dépasse
strictement 100 -
- Variables som, i entierDebut
- i ? 0
- som? 0
- TantQue (som lt100)
- i ? i1
- som ? somi
- FinTantQue Ecrire (" La valeur cherchée est N
", i) - Fin
66Boucle Tant que exemple
Algorithme Plus-Grand-Element Retourne la plus
grande valeur dune liste Entrée n entiers
S1,, Sn Sortie grand contenant le plus
grand élément Algo plus-grand (S,n) grand
S1 i2 Tant que i n Faire Début Si
Si gt grand alors // une plus grande valeur a été
trouvée grand Si i i1
Fin ecrire (grand) Fin plus-grand
Trace de lalgorithme n4 S1 -2 S26
S35 S46
grand -2
i 2
grand 6
i 3
i 4
i 5
67Algorithme dEuclide
- Trouver le plus grand diviseur commun (pgcd) de
deux entiers - Définition q est un diviseur commun de m et n
si q divise à la fois m et n (le reste de la
division entière est 0) - Le pgdc de m et n est le plus grand entier q
divisant à la fois m et n. - Exemple pgcd(4, 6) 2 pgcd(3,8) 1
- pgcd(9, 12) 3
- Utile pour la simplification de fractions
- 9/12 3.3/4.3 3/4
68Trouver le PGCD de a et b
- Exemple pgcd(30, 105)
- 1ère méthode Trouver tous les diviseurs de a et
b, et trouver le diviseur commun le plus grand - Diviseurs de 30 1, 2, 3, 5, 6, 10, 15, 30
- Diviseurs de 105 1, 3, 5, 7, 15, 21, 35, 105
- pgcd(30, 105) 15
- 2ème méthode la méthode dEuclide
- 105 30.3 15. Donc pgcd(105, 30) pgcd(30,15)
- 30 15.2 0. Donc pgcd(30, 15) pgcd(15,0)
- pgcd(15,0)15
- pgcd(105,30)pgcd(30,15)pgcd(15,0)15
69Méthode dEuclide Algorithme
- Soient r0, r1 deux entiers strictement
positifs, tels que r0r1.qr2 avec 0r2ltr1 - Si r2 0, pgcd (r0, r1) r1
- Sinon, rediviser ri par ri1 tant que ri1 est
différent de 0 - Si rn est le premier reste nul, alors
- pgcd(r0,r1) pgcd(r1,r2) pgcd(rn-1,rn)
pgcd(rn-1,0) rn-1
70Algorithme dEuclide
Entrée a, b deux entiers positifs Sortie
pgcd(a,b) Procédure pgcd(a,b) Tant que b ltgt 0
Faire Début diviser a par b a
b.qr, 0 r lt b ab br
Fin Retourner (a) Fin pgcd
Trace de lalgorithme pour a504 et b396
a
504
396
1
108
b
396
108
a
72
3
b
a
108
72
1
36
72
36
a
b
2
0
b
71Les boucles Pour
- Pour compteur allant de initiale
à finale par pas valeur du pas - instructions
-
- FinPour
-
72Les boucles Pour
- Remarques
- 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 - Initiale et finale peuvent être des valeurs, des
variables définies avant le début de la boucle ou
des expressions de même type que compteur
73Déroulement des boucles Pour
- La valeur initiale est affectée à la variable
compteur - On compare la valeur du compteur et la valeur de
finale - Si la valeur du compteur est gt à la valeur finale
dans le cas d'un pas positif (ou si compteur est
lt à finale pour un pas négatif), on sort de la
boucle et on continue avec l'instruction qui suit
FinPour - Si compteur est lt à finale dans le cas d'un pas
positif (ou si compteur est gt à finale pour un
pas négatif), instructions seront exécutées - Ensuite, la valeur de compteur est incrémentée de
la valeur du pas si pas est positif (ou
décrémenté si pas est négatif) - On recommence l'étape 2 La comparaison entre
compteur et finale est de nouveau effectuée, et
ainsi de suite
74Boucle Pour exemple
Algorithme Plus-Grand-Element Réécriture de
lalgorithme précédent mais avec une boucle
Pour Entrée n entiers S1,, Sn
Sortie grand contenant le plus grand
élément Algo plus-grand (S,n) grand S1
Pour i 1 à n Faire Si Si gt grand
alors // une plus grande valeur a été trouvée
grand Si ecrire (grand) Fin
plus-grand
75Boucle Pour remarque
- Il faut éviter de modifier la valeur du compteur
(et de finale) à l'intérieur de la boucle. En
effet, une telle action - perturbe le nombre d'itérations prévu par la
boucle Pour - rend difficile la lecture de l'algorithme
- présente le risque d'aboutir à une boucle infinie
- Exepmle Pour i allant de 1 à 5
- i ? i -1 écrire(" i ", i)
- Finpour
76Lien 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) - Pour compteur allant de initiale à finale par
pas valeur du pas - instructions
-
- FinPour
- peut être remplacé par compteur ? initiale
- (cas d'un pas positif) TantQue compteur lt
finale - instructions
- compteur ? compteurpas
- FinTantQue
77Lien entre Pour et TantQue exemple
Calcul de x à la puissance n avec la boucle
Pour et la boucle TantQue x un réel non nul
n entier positif ou nul
78Solution avec la boucle Pour
- 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 1 à n
- puiss? puissx FinPour
- Ecrire (x, " à la puissance ", n, " est égal
à ", puiss) - Fin
79Solution avec la boucle Tant Que
- Variables x, puiss réel
- n, i entier
- Debut Ecrire (" Entrez respectivement les
valeurs de x et n ") - Lire (x, n)
- puiss ? 1, i ? 1
- TantQue (iltn)
- puiss? puissx i ? i1
- FinTantQue
- Ecrire (x, " à la puissance ", n, " est égal
à ", puiss) - Fin
80Algorithme de la fonction factorielle Exemple
- Écrire deux algorithmes qui calculent pour un
entier positif donné n la valeur n!, un de ces
algorithmes doit utilisé la boucle Pour et
lautre la boucle Tanque -
- Entrée n de type naturel
- Sortie factoriel (n) 123..(n-1)n
81Algorithme de la fonction factorielle
Algorithme / tantque
Calcul factorielle 1 Variables i, f, n Naturel Début i ? 1 f ? 1 tant que (i lt n) i ? i1 f ? f i Fin de tant que écrire (f) Fin
Algorithme / Pour
Calcul factorielle 2 Variables i, f, n Naturel Début f ? 1 pour i variant de 2 à n f ? f i Fin pour écrire (f) Fin
82Algorithme de la recherche des nombres premiers
Exemple
- Problème Écrire lalgorithme estPremier, qui a
partir dun entier strictement positif donné,
retourne le résultat booléen VRAI ou FAUX selon
le nombre est premier ou non. - Procédure pour déterminer si un entier m est un
nombre premier. Il suffit de tester si m est
divisible par un entier entre 2 et m/2 - Ex 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31,
37, 41, 43, 47. (listes des nombres premier lt50)
83La boucle tantque en langage de programmation
Langage Pascal
While condition Do Begin Bloc dinstructions End
test
corps_boucle
Langage C et Java
while (condition) Bloc dinstructions
84La boucle Pour en langage de programmation
Langage Pascal
For variable valeur initiale To valeur finale Do Begin Bloc dinstructions End
Langage C et Java
for (ivaleur initiale ilt valeur finale i) Bloc dinstructions
85Détecter lerreur dans les deux essaie tant que
et pour
Algorithme
Essai de tant que Variables n entier Début n ? 15 tant que (nltgt0) écrire (n) n ? n - 2 Fin de tant que Fin
Algorithme
Essai pour Variables K, N entier Début n ? 200 pour K variant de 1 à n écrire (K) K ? n 100 Fin pour Fin
86Boucles 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
87La boucle FaireTant Que
- Faire
- Instruction(s)
- Tant que (condition)
- do
- Instruction
- while (condition)
- do
-
- f n
- n--
- while (ngt1)
La boucle sexécute tant que la condition est
vraie. La boucle cesse lorque la condition est
fausse. À utiliser si lon veut que la boucle
soit exécutée au moins une fois
88Les boucles Répéter jusquà
- Répéter
- instructions
-
- Jusqu'à condition
-
- 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)
89Boucle 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'à) - Variables som, i entierDebut som ? 0
- i ? 0 Répéter
- i ? i1
- som ? somi
- Jusqu'à ( som gt 100)
- Ecrire (" La valeur cherchée est N ", i)
- Fin
90Choix 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 - S'il n'est pas possible de connaître le nombre
d'itérations avant l'exécution de la boucle, on
fera appel à l'une des boucles TantQue ou répéter
jusqu'à - Pour le choix entre TantQue et jusqu'à
- Si on doit tester la condition de contrôle avant
de commencer les instructions de la boucle, on
utilisera TantQue - Si la valeur de la condition de contrôle dépend
d'une première exécution des instructions de la
boucle, on utilisera répéter jusqu'à ou faire
tanque
91Algorithme de la racine carrée Exercice
- Problème Écrire lalgorithme qui calcul la
racine carrée dun nombre sans avoir recours a la
fonction mathématique Racine Carrée prédéfinie. - Procédure si n est le nombre dont on souhaite
extraire la racine carrée. On construit une suite
de nombres Xi dont le premier vaut 1 et dont le
terme générale a pour expression - Xi (n/xi-1 xi-1) / 2
- Rq Cette suite converge systématiquement vers
racarrée (n)
92Algorithme de la racine carrée
Algorithme Racine Carrée (RC)
Variables n, x réels i, max entier Début Lire (n) Lire (max) x ? 1 pour i variant de 1 à max écrire (n) x ? ((n/x) x) / 2 Fin de pour Fin
93MAPLE
- Présentation générale et syntaxe des instructions
de base
94Maple
- Maple est un logiciel de calcul formel et
numérique - Calcul formel calcul sur des expressions
littérales sans évaluation numérique (Maple peut
calculer des dérivées, des intégrales, des
développements limités, ) - gt int(1-xx3,x)
- gt taylor(sin(x),x0,6)
- Calcul numérique calcul sur des valeurs (avec
une grande précision) - gt 30! 265252859812191058636308480000000
-
- gt evalf(sqrt(2),50) 1.414213562373095048801
688 7242096980785696718753769
95Maple quelques fonctions
- abs (n) renvoie la valeur absolue de son
argument n - ex gtabs(-4)
- 4
- Ifactor(n) donne la décomposition de n en
facteur premiers - Ex gtifactor(1998)
- (2)(3)3(37)
- Irem(a,b) renvoie le reste de la division
entiere de a par b - Ex gtIrem(5,2)
- 1
- Sum(f(k),ka..b) calcul la sommes de f(k) de a
jusquà b - Product(f(k),ka..b) calcul le produit de f(k)
de a jusquau b
96Maple les packages
- Maple dispose d'un certain nombre de packages
(librairies). Chacun de ces packages est
spécialisé dans un traitement particulier. Comme
exemples de ces packages, on a - linalg pour l'algèbre linéaire
- plots pour le tracé des courbes
- geometry pour la géométrie
- student ce package est conçu pour assister
l'enseignement des mathématiques de base
(intéressant pour les étudiants) -
- Pour utiliser certaines commandes et fonctions de
Maple, il faut d'abord charger le package qui les
contient avec la commande with - with (NomLibrairie) charge le package
NomLibrairie - with (NomLib, NomCmd) charge la commande NomCmd
du package NomLib
97Maple Généralités
- Chaque instruction Maple doit se terminer par
ou - Si l'instruction se termine par Maple l'exécute
et affiche le résultat - Si l'instruction se termine par Maple l'exécute
sans afficher le résultat - Pour introduire un texte en tant que commentaire,
il suffit de précéder la ligne par ( le texte
est alors ignoré par Maple) - Maple fait la distinction entre les lettres
majuscules et minuscules (SMI, Smi, smI et smi
sont différents pour Maple)
98Maple nom et type des variables
- Le nom d'une variable peut être une combinaison
de lettres et de chiffres, mais qui commence par
une lettre, qui ne contient pas d'espaces et qui
est différente des mots réservés (commandes
Maple) - Le type d'une variable est attribué
automatiquement par Maple selon le contexte
(exemple si A prend la valeur 2, A sera de type
integer, si A prend la valeur , A sera de type
float) - Les principaux types prédéfinis en Maple sont
integer (entier), float (réel), fraction
(rationnel), complex (complexe), string (chaîne
de caractères), boolean (booléen), array
(tableau), matrix (matrice) - Maple offre quelques commandes relatifs aux types
ex whattype(var) donne le type de la
variable var
99Maple l'affectation
- Le symbole d'affectation ? se note en Maple avec
- exemple i 1 j i1
- Attention en Maple ab n'est pas une
instruction d'affectation, mais une expression de
type logique (boolean) qui est vrai si les deux
valeurs a et b sont égales et fausse sinon - Maple n'évalue l'expression logique ab que si on
le demande explicitement. Pour cela, on utilisera
la commande evalb - exemple a 1 b 2
- gt ab 12
- gt evalb (ab) false
100Maple instructions d'entrées-sorties
- print(var) permet d'afficher la valeur de la
variable var (c'est l'équivalent de écrire en
pseudo code). Si var n'a pas de valeur, Maple
affiche le nom de la variable - print(chaine) permet d'afficher la chaîne de
caractères qui est entre - gt a1 b2 print(a vaut,a, et b vaut,b)
- a vaut ,1 et b vaut, 2
- readstat permet de saisir des données à partir du
clavier (c'est l'équivalent de lire en pseudo
code) -
- Syntaxe varreadstat(texte) Maple affiche
le texte entre et attend qu'on entre une
valeur au clavier qui doit être suivie de ou - gt nreadstat(entrez la valeur de n )
- Remarque il existe d'autres commandes pour les
entrées-sorties en Maple
101Maple syntaxe des tests
- Écriture en pseudo code Traduction en Maple
- Si condition alors if
condition then instructions
instructions - Finsi fi
- Si condition alors if
condition then - instructions 1 instructions1
- Sinon else
- instructions2 instructions2
- Finsi fi
102Maple syntaxe des boucles
- Écriture en pseudo code Traduction en Maple
- TantQue condition while condition
do instructions instructions
- FinTantQue od
- Pour i allant de v1 à v2 par pas p for i from
v1 to v2 by p do - instructions instructions
- FinPour od
103Algorithmique
104Fonctions et procédures
- Lorsquune séquence dinstructions se répète
plusieurs fois, il est intéressant de faire un
sous-programme correspondant à ce bloc
dinstructions et de lutiliser autant de fois
que nécessaire - Cette séquence dinstructions sera définie dans
un sous-programme qui peut prendre la forme dune
procédure ou dune fonction - De plus, un programme est presque toujours
décomposable en modules qui peuvent alors être
définis de manière indépendante. - Cela permet de modifier éventuellement un
module sans pour autant changer le corps du
programme et de rendre le programme plus
compréhensible (lisibilité) - Un programme est alors un ensemble de procédures
/ fonctions
105Notion de bloc dans un programme
106Fonctions
107Forme dune Fonction
- Une fonction s'écrit en dehors du programme
principal sous la forme -
- Fonction identificateur (paramètres et leurs
types) type_fonction - Instructions constituant le corps de la
fonction - retourne
- FinFonction
- type de fonction le type du résultat renvoyé
par la fonction - Identificateur le nom que lon a donné à la
fonction - liste de paramètres la liste des paramètres
formels donnés en entrée avec leurs types - corps de la fonction un bloc dinstructions,
pouvant comprendre la déclaration des variables
locales a la fonctions - Remarque le corps de la fonction doit comporter
une instruction de la forme return(expression)
où expression est du type du résultat de la
fonction
108Exemple de programme / fonction
109Exemple de fonction / fonction
110Fonctions exemples
- La fonction SommeCarre suivante calcule la somme
des carrées de deux réels x et y - Fonction SommeCarre (x réel, y réel )
réel - variable z réel
- z ?x2y2
- retourne (z)
- FinFonction
- La fonction Pair suivante détermine si un nombre
est pair - Fonction Pair (n entier ) booléen
- retourne (n20)
- FinFonction
Paramètres formels
111Utilisation des fonctions
- L'utilisation d'une fonction se fera par simple
écriture de son nom dans le programme principale.
Le résultat étant une valeur, devra être affecté
ou être utilisé dans une expression, une
écriture, ... - Exepmle Algorithme exepmleAppelFonction
- variables z réel, b booléen
- Début
- b ?Pair(3)
- z ?5SommeCarre(7,2)1
- écrire("SommeCarre(3,5) ",
SommeCarre(3,5)) - Fin
- Lors de l'appel Pair(3) le paramètre formel n
est remplacé par le paramètre effectif 3
112Subdivision dun problème en un ensemble de
fonctions
- Problème Trouver le plus petit nombre premier
strictement supérieur à un entier positif donné n - Utiliser lalgorithme quon a déjà fait
estPremier (le plus petit nombre premier p
supérieur à un entier n) en tant que fonction. - Fait appel a cette fonction a lintérieur de
lalgorithme premier-plus-grand
113La fonction de recherche des nombres premiers
Fonction estPremier
Fonction est-premier (m entier) booléen Pour i 2 à ENT(m/2) Faire Si m mod i 0 alors // i divise m Retourne (Faux) Retourne (Vrai) FinFonction est-premier
114Entrée Un entier positif m Sortie Vrai si m est
premier, Faux si non. Fonction est-premier (m)
Pour i 2 à ENT(m/2) Faire Si m mod i 0
alors // i divise m Retourne (Faux)
Retourne (Vrai) Fin est-premier
Entrée Un entier positif n Sortie Le plus petit
nb premier m gt n Algorithme premier-plus-grand
(n) m n1 Tant que est-premier(m) est
Faux Faire m m1 Retourne(m)
Fin est-premier
Trace de premier-plus-grand pour n8
Trace de est-premier pour m9
Trace de est-premier pour m10
Trace de est-premier pour m11
i2
9 mod 2 1
10 mod 2 0
11 mod 2 1
m 9
9 mod 3 0
i3
i5
11 mod 5 1
m 10
m 11
115Procèdures
- Dans certains cas, on peut avoir besoin de
répéter une tache dans plusieurs endroits du
programme, mais que dans cette tache on ne
calcule pas de résultats ou qu'on calcule
plusieurs résultats à la fois - Dans ces cas on ne peut pas utiliser une
fonction, on utilise une procédure - Une procédure est un sous-programme semblable à
une fonction mais qui ne retourne rien - Une procédure s'écrit en dehors du programme
principal sous la forme -
- Procédure nom_procédure (paramètres et leurs
types) - Instructions constituant le corps de la
procédure -
- FinProcédure
- Remarque une procédure peut ne pas avoir de
paramètres
116Appel d'une procédure
- L'appel d'une procédure, se fait dans le
programme principale ou dans une autre procédure
par une instruction indiquant le nom de la
procédure - Procédure exemple_proc ()
-
- FinProcédure
- Algorithme exepmleAppelProcédure
- Début
- exemple_proc ()
-
- Fin
- Remarque contrairement à l'appel d'une
fonction, on ne peut pas affecter la procédure
appelée ou l'utiliser dans une expression.
L'appel d'une procédure est une instruction
autonome
117Paramètres d'une procédure
- Les paramètres servent à échanger des données
entre le programme principale (ou la procédure
appelante) et la procédure appelée - Comme avec les fonctions
- Les paramètres placés dans la déclaration d'une
procédure sont appelés paramètres formels. Ces
paramètres peuvent prendre toutes les valeurs
possibles mais ils sont abstraits (n'existent pas
réellement) - Les paramètres placés dans l'appel d'une
procédure sont appelés paramètres effectifs. ils
contiennent les valeurs pour effectuer le
traitement - Le nombre de paramètres effectifs doit être égal
au nombre de paramètres formels. L'ordre et le
type des paramètres doivent correspondre
118Transmission des paramètres
- Il existe deux modes de transmission de
paramètres dans les langages de programmation
- La transmission par valeur les valeurs des
paramètres effectifs sont affectées aux
paramètres formels correspondants au moment de
l'appel de la procédure. Dans ce mode le
paramètre effectif ne subit aucune modification - La transmission par adresse (ou par référence)
les adresses des paramètres effectifs sont
transmises à la procédure appelante. Dans ce
mode, le paramètre effectif subit les mêmes
modifications que le paramètre formel lors de
l'exécution de la procédure - Remarque le paramètre effectif doit être une
variable (et non une valeur) lorsqu'il s'agit
d'une transmission par adresse - En pseudo-code, on va préciser explicitement le
mode de transmission dans la déclaration de la
procédure
119Transmission des paramètres exemples
- Procédure incrementer1 (x entier par valeur, y
entier par adresse) - x ? x1
- y ? y1
- FinProcédure
- Algorithme Test_incrementer1
- variables n, m entier
- Début
- n ? 3
- m ? 3
- incrementer1(n, m) résultat
- écrire (" n ", n, " et m ", m) n3 et m4
- Fin
- Remarque l'instruction x ? x1 n'a pas de