Université Mohammed V Faculté des Sciences
Département d’informatique
Cours de l’algorithmique et programmation:
Licence SMI- S2 (Accréditation : 2014-2018)
Pr. Y. EL BENANI
Année de production : 2014
2
Chap1: L’introduction à l’algorithmique
2014/2015 Algo1 /SMI 1
Cours d’Algorithmique 1 1ère année SMI
Département d’Informatique, Université Mohammed V
2014/2015 Algo1 /SMI 2
Objectif du cours
Objectifs :
•
Apprendre les conceptsde basede l'algorithmique.•
S’initier à l’analyse et la résolutionde problèmeset écrire les algorithmescorrespondants.
•
Étudier les procédureset les fonctionsqui permettent de structurer et de réutiliser les algorithmes.• Avoir une première notion de performance des algorithmes utilisés.
Plan du cours
Chap1: L’introduction à l’algorithmique
Chap2: Notion de variables et d’affectation
Chap3: La lecture et l’écriture
Chap4: Les instructions conditionnelles
Chap5: Les instructions itératives (les boucles)
Chap6: Les tableaux
Chap7: Les fonctions et les procédures
Chap8: La récursivité
Chap9: L’introduction à la complexité des algorithmes
Chap10: Les algorithmes de recherche et tri
2014/2015 Algo1 /SMI 3
3
Galerie de portraits
2014/2015 Algo1 /SMI 4
Mathématicien anglais, il publie en 1854 les Lois de la pensée. Dans ce livre, il décrit comment toute la logique peut être définie par un principe simple: le binaire.
George BOOLE (1815-1864)
John Von NEUMANN
(1903-1957)
L'un des personnages clés des débuts de l'informatique.
Il publia de nombreux articles sur l'algèbre et la mécanique quantique avant de se consacrer à la construction d'ordinateurs et à la modélisation mathématique de la réaction en chaîne de la bombe A.
Ses "machines IAS" sont à l'origine de "l'Architecture Von NEUMANN", c'est à dire celle des ordinateurs tels que nous les connaissons.
Galerie de portraits
2014/2015 Algo1 /SMI 5
Cette américaine, mobilisée comme auxiliaire dans la marine américaine fut affectée aux travaux de programmation et d'exploitation de l'ENIAC. Puis, devenue une grande spécialise de la programmation des ordinateurs, elle sera l'une des principales créatrices du COBOL.
Grace Murray HOPPER (1906 - 1992)
Mathématicien anglais, maître-assistant à Cambridge dès 23 ans.
Il a conçu en 1936 une machine logiquecapable de résoudre tous les problèmes que l'on peut formuler en termes d'algorithmes.
Pendant la guerre, il participera à la réalisation de la Bombe, première machine électromécanique de décryptage des messages codés avec l'Enigma Allemande.
Alan TURING (1912 - 1954)
Galerie de portraits
2014/2015 Algo1 /SMI 6
Cet ingénieur des laboratoires Bell, est l'auteur du langage C. En 1973, avec K. THOMPSON, il réécrira dans ce nouveau langage le système d'exploitation UNIX.
Dennis RITCHIE (1941)
C'est l'un des pères de l'Internet. Encore étudiant de l'université de Los Angeles, il fut l'un des auteurs du protocole TCP/IPet développa avec une équipe de chercheurs les premiers outils utilisant ce mode de communication. Il est aujourd'hui président de l'Internet Society qui surveille les nouveaux standards d'Internet.
Vinton G.
(1943 - ) CERF
4
Galerie de portraits
2014/2015 Algo1 /SMI 7
Créateur dulangage C++basé sur le langage C mais en lui donnant une dimension de Langage Orienté Objet.
Bjarne STROUSTRUP (1950 - )
James Gosling (1955 - )
Créateur dulangage Javabasé sur le langageC++.
La particularité principale de Java est que les logiciels écrits dans ce langage sont trè s facilement portablessur plusieurssystèmesd’exploitation.
Galerie de portraits
2014/2015 Algo1 /SMI 8
Ancien président (et fondateur avec P. ALLEN) de Microsoft. Cette société est à l'origine du MS-DOS, de Windows, du Basic-Microsoft puis de Visual Basic.
Bill GATES (1951 - )
Steve JOBS (1955 - 2011)
L’un des fondateurs de la société Apple.
Après son éviction d'Apple S. JOBS créera la société Nextavant d'être rappelé pour redresser Apple.
Galerie de portraits
2014/2015 Algo1 /SMI 9
Richard STALLMAN
(1953 - )
Fondateur du projet GNU, lancé en 1984pour développer le système d'exploitation libre GNUet donner ainsi aux utilisateurs des ordinateurs la liberté de coopérer et de contrôler les logiciels qu'ils utilisent. Il est également le créateur (entre autres) de l'éditeur Emacset du compilateur gcc.
Finlandais d'origine, il a construit en 1991 un nouveau système d'exploitation de type UNIX appelé Linux.
Ayant choisi de le diffuser suivant le principe des logiciels libres, Linus TORVALDS ne retire aucune royaltie de son travail sur le noyau Linux.
Linus TORVALDS (1969 -)
5
Galerie de portraits
2014/2015 Algo1 /SMI 10
Larry Page
(1973 - ) Sergey Brin (1973 - )
Créateurs du moteur de recherche Google.
Ces deux jeunes brillants nord-américains ont lancé leur moteur de recherche en 1999.
Ce mot vient du terme "googol" qui désigne un chiffre, un 1 suivi de 100 zéros, traduisant l'exhaustivité du moteur de recherche.
Mark Zuckerberg (1984 - )
Créateur de Facebook
C'est en 2004 que la première version de Facebookvoit le jour pour mettre en relation les étudiants de Harvard.
Pourquoi un cours d’algorithmique
Pour proposer à la «machine» d’effectuerun travail à notre place.
Problème: expliquer à la machine comment elle doit le faire.
Besoins:
•
savoir expliquer et formaliserson problème•
Concevoiret écriredes algorithmes (séquence d’instructionsqui décritcomment résoudreun problème particulier).2014/2015 Algo1 /SMI 11
Les algorithmes sont anciens !
Les algorithmes ne sont pas nés avec l’informatique:
L’algorithme d’Euclidepour calculer le PGCDde deux entiers est vieux de plus de 2000 ans !
Des descriptions précises d’algorithmes sont présents dans la Chine ancienne.(Par exemple, pour extraire des racines carréesà partir de divisions effectuées sur une « surface à calculer »).
2014/2015 Algo1 /SMI 12
6 Les origines de
l’algorithmique
Mohammed Al-Khwarizmi (780 - 850)
ou
Mathématicien, géographe, astrologueet astronome musulman arabe dont les écrits ont permis l'introduction de l'algèbreen Europe.
L’ origine du mot «algorithme» est lié au nom d’Al- Khwarizmi.
Ce savant arabe a publié plusieurs méthodespour le calcul effectif de racinesd’une équationdu second degréet grâce à lui les chiffres arabesont pu se diffuser en occident.
2014/2015 Algo1 /SMI 13
Algorithme
Savoir expliquercomment faire un travail sans la moindre ambiguïté.
Un algorithme : est une suite finied’instructions que l’on applique à un nombre finide donnéesdans un ordre précis pour arriver à un résultat.
L’écriture algorithmique : un travail de programmationayant une vision universelle :
•
Un algorithme ne dépend pas du langage dans lequel il est implanté,•
ni de la machine qui va exécuter le programme correspondant.2014/2015 Algo1 /SMI 14
2014/2015 Algo1 /SMI 15
Algorithmique
L’algorithmiquedésigne la disciplinequi étudie les algorithmeset leurs applicationsen
informatique
Une bonneconnaissance de l’algorithmique permet d’écrire des algorithmes exactset efficaces
7
2014/2015 Algo1 /SMI 16
Propriétés d’un algorithme
Un algorithme doit:
– avoir un nombrefini d’étapes,
– avoir un nombre fini d’opérations par étape, –se terminer après un nombre finid’opérations, – fournir un résultat.
Chaque opération doit être:
–définierigoureusementet sans ambiguïté –effective, c.-à-d. réalisablepar une machine
Le comportement d'un algorithme est déterministe.
Les 3 étapes d’un algorithme
•
Les entrées(les données du problème)•
Le traitement•
Les sorties(l’affichage des résultats) Les entrées : Il s’agit de repérerles données nécessairesà la résolution du problème.
Le traitement : Il s’agit de déterminertoutes les étapes des traitements à faire et donc des "instructions" à développerpour arriver aux résultats.
2014/2015 Algo1 /SMI 17
Les 3 étapes d’un algorithme
Les sorties : les résultats obtenus peuvent être affichés sur l’écran, ou imprimés sur papier, ou bien encore conservés dans un
fichier.2014/2015 Algo1 /SMI 18
8
Exemple d’algorithme : recette de cuisine
2014/2015 Algo1 /SMI 19
Exemple d’un algorithme
On se donne deux points A et B du plan.
•
1. Tracer le cerclede centreA passant par B.•
2. Tracer le cerclede centre Bpassant parA.•
3. Nommer Cet Dles points d’intersectionde ces cercles. Construire le polygone ADBC.
Cet algorithmedécrit la constructiond’un losangedont une diagonaleest [AB].
Les entréessont : les points A et B.
Le traitement de la construction est décrit dans les phases 1. 2. et 3.
La sortieest : le polygone ADBC.
2014/2015 Algo1 /SMI 20
Algorithme de calcul
2014/2015 Algo1 /SMI 21
9
Génie logiciel
Définition: le génie logiciel regroupeles scienceset les technologiesqui permettent la productionet la maintenance de logicielsde qualité
Le cycle de vie d’un logiciel regroupeles étapesde productiondu logiciel, ainsi que leur
ordonnancement.
2014/2015 Algo1 /SMI 22
Les étapes de développement du logiciel
2014/2015 Algo1 /SMI 23
Les étapes de développement du logiciel
1) Analysedes besoins: que fait le système ?
•
On définit les fonctionnalités du systèmeà développer. 2) conception : comment faire le système ?
•
décompositiondu système en modules logicielset matériel. 3) Implémentation (codage):
•
Réalisation des programmes dans un langage de programmation2014/2015 Algo1 /SMI 24
10
Les étapes de développement du logiciel
4) tests unitaires : effectuer les tests de chaque composant du logiciel en vue de son intégration.
5) intégration : Intégration des modules et test de tout le système
6) Livraison et maintenance:
•
Livraisondu produit finalà l'utilisateur,•
Le suivi, les modifications, les améliorationsaprès livraison.2014/2015 Algo1 /SMI 25
Modèles de développement
Objectifs:
•
Organiserles différentes phasesdu cycle de vie pour l'obtention d'un logiciel fiable, adaptable et efficace.•
Guiderle développeurdans ses activités techniques•
Fournirdes moyens pour gérerle développement et la maintenance (ressources, délais, avancement, etc.). Il existe plusieurs typesde modèles: en cascade, en V, en spirale…
2014/2015 Algo1 /SMI 26
Modèle en cascade
2014/2015 Algo1 /SMI 27
11
Modèle en V
2014/2015 Algo1 /SMI 28
Modèle en spirale
2014/2015 Algo1 /SMI 29
Les langages de programmation
Le langage de programmationest l'intermédiaireentre l'humain (anglais)et la machine(binaire).
Il existe des milliersde langagesde niveau élevé, pour tous les goûtset toutes les applications.
Quelques uns des plus connus: C, C++, Java, PHP,…
2014/2015 Algo1 /SMI 30
12
Les langages de programmation
Haut niveau : proche de l’homme, vocabulaire et syntaxe plus riches
•
C++, Java, PHP,…•
C, Fortran,…•
Assembleur•
Langage machine Bas niveau : proche de la machine, instructions élémentaires
2014/2015 Algo1 /SMI 31
Compilation et interpréteur
Compilation: permet de traduirele code sourcedu programme vers le langage natif (objet)de la machine(ou parfois vers du code intermédiaire).
Interpréteur: permet de traduireet d’exécuterchaque instruction du programme. Ce mécanisme est utilisé pour le passaged’un programme précompiléà un pseudo-code (cas de Java).
2014/2015 Algo1 /SMI 32
2014/2015 Algo1 /SMI 33
13
Représentation d’un algorithme
Un algorithme, pour être lupar tous, est écrit en langage naturel (pseudo-code) ou représenté par un organigramme.
Un programmeest la traduction d’un algorithme pour être comprispar une machine(ordinateur,
calculatrice, téléphone,…).
2014/2015 Algo1 /SMI 34
2014/2015 Algo1 /SMI 35
Représentation d’un algorithme
L’organigramme:
représentation graphique avec des symboles (réctangles, losanges, etc.)
offre une vue d’ensemble de l’algorithme.
Représentation presque abandonnée aujourd’hui.
Représentation d’un algorithme
Le pseudo-code:
représentation textuelle avec une série de
conventions ressemblant à un langage de
programmation.
plus pratique pour écrire un algorithme.
représentation largement utilisée.
Un algorithme écrit en pseudo-codeest composé de trois parties suivantes : L’en-tête, la partie déclarativeet le corps
2014/2015 Algo1 /SMI 36
14
2014/2015 Algo1 /SMI 37
Les instructions de base
Un programmeinformatique est formé de quatre types d’instructions considérées comme des briques de base:
•
Les affectations de variables•
Les lectures et/ou les écritures•
Les tests•
Les bouclesFormalisme d’un algorithme
Un algorithme informatique doit suivre les règlessuivantes : Il est composéd’une entête et d’un corps:
•
l’entête, qui spécifie :•
le nom de l’algorithme (Nom:)•
son utilité (Rôle:)•
Les données“en entrée”, c.-à-d. les éléments qui sont indispensables à son bon fonctionnement (Entrée:)2014/2015 Algo1 /SMI 38
Formalisme d’un algorithme
•
les données “en sortie”, c.-à-d. les éléments calculés, produits, par l’algorithme (Sortie:)•
les données locales à l’algorithme et indispensables (Déclaration:) le corps, qui est composé :
•
du mot clé début•
d’une suited’instructions•
du mot clé fin2014/2015 Algo1 /SMI 39
15
Formalisme d’un algorithme : exemple
Nom: addDeuxEntiers
Rôle : Additionner deux entiers a et b et mettre le résultat dans c
Entrée: a, b deux entiers Sortie: c un entier
Déclaration : a, b, c : entier début
c←a+b;
ecrire(ʺla somme de a et b est =ʺ, c);
fin
2014/2015 Algo1 /SMI 40
16
Chap2: Notion de variables et d’affectation
2014/2015 Algo1 /SMI 1
Algorithmique
Notions et Instructions de base
2014/2015 Algo1 /SMI 2
Notion de variable
Une variablesert à stocker la valeur d’une donnéedans un langage de programmation.
Une variabledésigne un emplacement mémoire (boites étiquetées)dont le contenu peut changer au cours d’un programme (d’où le nom de variable).
Chaque emplacement mémoirea un numéro qui permet d'y faire référencede façon unique : c'est l'adresse mémoirede cette cellule.
2014/2015 Algo1 /SMI 3
Notion de variable
Règle :La variable doit être déclaréeavant d’être utilisée, elle doit être caractérisée par :
•
un nom (Identificateur).•
un type qui indique l’ensemble des valeurs que peut prendre la variable (entier, réel, booléen, caractère, chaîne de caractères, …).•
Une valeur.17
2014/2015 Algo1 /SMI 4
Identificateurs : règles
Le choix du nom d’une variable est soumis à quelques règlesqui varientselon le langage, mais en général:
•
Un nom doit commencer par une lettre alphabétique exemple : E1 (1E n’est pas valide)•
doit être constitué uniquement de lettres, de chiffreset du soulignement (« _ ») (Éviter les caractères de ponctuation et les espaces).Exemples : SMI2009, SMI_2009
SMP 2009, SMP-2009, SMP;2009 : sont non valides
2014/2015 Algo1 /SMI 5
Identificateurs : règles
•
doit être différent des mots réservés du langage (par exemple en C : int, float, double, switch, case, for, main, return, …).•
La longueur du nomdoit être inférieureà la taille maximalespécifiée par le langageutilisé.2014/2015 Algo1 /SMI 6
Identificateurs : conseils
Conseil:pour la lisibilité du code choisirdes noms significatifsqui décrivent les données manipulées exemples: NoteEtudiant, Prix_TTC, Prix_HT
Remarque:en pseudo-codealgorithmique, on va respecter les règles citées, même si on est libre dans la syntaxe.
18
2014/2015 Algo1 /SMI 7
les variables
Le typed’une variable détermine l’ensembledes valeurs qu’elle peut prendre.
Toute variable utilisée dans un programme doitfaire l’objet d’une déclarationpréalable.
En pseudo-code, la déclarationde variables est effectuée par la forme suivante :
Variables id1, id2, … : type
Cette instructionpermet de réserverde l’espace mémoire pour les variables nommées id1, id2, …
Dépendant du typede données : entiers, réels, caractères, etc.
2014/2015 Algo1 /SMI 8
les variables
Exemple de variables
Variables age, compteur : entier;
note, moyen : réel;
OK: booléen;
nom, prenom : chaîne de caractères;
Types des variables
Les types offerts par la plus part des langages sont :
•
Type numérique : entier ou réel•
Byte(codé sur 1octet): de [-27,27[ ou [0, 28[•
Entier court (codé sur 2 octets) : [-215,215[•
Entier long (codé sur 4 octets): [-231,231[•
Réel simple précision (codé sur 4 octets) : précision d’ordre 10-7•
Réel double précision (codé sur 8 octets) : précision d’ordre 10-142014/2015 Algo1 /SMI 9
19
Type numérique : entier ou réel
•
Operateurs arithmétiques :•
+ (addition)•
- (soustraction)•
* (produit )•
/ou div(quotient)•
% ou mod (reste de la division entière )•
Opérateurs de comparaison :•
<, >, =, <=, >= : selon l’ordre alphabétique2014/2015 Algo1 /SMI 10
2014/2015 Algo1 /SMI 11
Types des variables
•
Type booléen: deux valeurs VRAIou FAUX•
Opérateurs : ET, OU et NON•
Type caractère:lettres majuscules, minuscules, chiffres, symboles,.. Exemples : ’A’, ’b’, ’1’, ’?’, …•
Opérateurs : <, >, =, <=, >= , selon l’ordre alphabétique•
Type chaîne de caractère (string en anglais) :toute suite de caractères. Le contenu de ces variables est noté entre guillemets (" " : pour ne pas confondre 777 et "777");•
Exemples: " " , " Nom, Prénom", "code postale: 1000"2014/2015 Algo1 /SMI 12
Variables : remarques
Pour le type numérique, on va se limiter aux entierset réels sans considérer les sous types
Pour chaque type de variables, il existe un ensemble d'opérationscorrespondant.
Une variableest l'associationd'un nomavec un type, permettant de mémoriserune valeur de ce type.
Une fois qu’un typede données est associé à une variable, cette variable ne peut plus en changer.
Une fois qu’un typede données est associé à une variable le contenude cette variabledoit obligatoirement être du même type.
20
2014/2015 Algo1 /SMI 13
Constante
Une constante est une variabledont la valeur ne change pas au cours de l'exécution du programme.
En pseudo-code, Constante identificateurvaleur : type (par convention, les noms de constantes sont en
majuscules)
Exemple: pour calculer la surface des cercles, la valeur de pi est une constante mais le rayon est une variable.
Constante PI3.14 : réel, MAXI32 : entier
Une constante doit toujours recevoir une valeur dès sa déclaration.
2014/2015 Algo1 /SMI 14
Affectation
L’affectationconsiste à attribuer une valeurà une variable(c’est-à-dire remplirou modifierle contenu d'une zone mémoire).
En pseudo-code, l'affectation est notée par le signe ← : Var← e; /*attribue la valeur de e à la variable Var*/
-epeut être une valeur, une autre variable ou une expression.
-Varet edoivent être de même typeou de types compatibles.
-l’affectation ne modifie que ce qui est à gauche de la flèche.
Affectation
Exemples :
i ←1; j ←i; k ←i+j;
x ←10.3 ; val ← 132;
OK ←FAUX ; ch1 ←"SMI“;
ch2 ←ch1 ; x ←4; x ←j delta ←b*b - 4*a*c;
(avec i, j, k : entier; x, a, b, c, delta :réel; ok :booléen;
ch1,ch2 :chaine de caractères)
Exemples non valides:
i ←10.3 ; OK ←"SMI";
j ←x;
2014/2015 Algo1 /SMI 15
21
2014/2015 Algo1 /SMI 16
Affectation
Les langagesde programmation C, C++, Java,
… utilisent le signe égal=pour l’affectation ←.
Remarques :
•
Lors d’une affectation, l’expressionde droite est évaluéeet la valeur trouvée est affectéeà la variablede gauche.•
Ainsi, A←B; est différente deB←A;Affectation : remarques
•
l'affectationest différented'une équation mathématique :•
Les opérations x ← x+1 et x ← x-1 ont un sens en programmationet se nomment respectivement incrémentation et décrémentation.•
A+1 ← 3 n'est pas possible en langages de programmation et n'est pas équivalente à A ← 2•
Certains langagesdonnent des valeurs par défaut aux variables déclarées.•
Pour éviter tout problème, il est préférable d'initialiser les variablesdéclarées.2014/2015 Algo1 /SMI 17
2014/2015 Algo1 /SMI 18
Syntaxe générale de l’algorithme
Algo exemple
/* La partie déclaration de l’algorithme */
Constantes// les constantes nécessitent une valeur dès leur déclaration var1←20 : entier
var2←"bonjour!" : chaîne
Variables // les variables proprement dites var3, var4 : réels
var5 : chaîne
Début // corps de l’algorithme /* instructions */
Fin
22
2014/2015 Algo1 /SMI 19
la séquence des instructions
Les opérations d'un algorithme sont habituellement exécutées uneà la suitede l'autre, en séquence (de hauten baset de gaucheà droite).
L'ordre est important.
On ne peut pas changer cette séquence de façon arbitraire.
Par exemple, enfiler ses bas puis enfiler ses bottes n’est pas équivalent à enfiler ses bottes puis enfiler ses bas.
Fiche 2.6
2014/2015 Algo1 /SMI 20
Affectation : exercices
Donnez les valeurs des variables A, B et C après exécution des instructions suivantes ?
Variables A, B, C: Entier Début
A ← 7;
B ← 17;
A ← B;
B ← A+5;
C ← A + B;
C ← B – A;
Fin
A B C
7 - -
7 17 -
17 17 -
17 22 -
17 22 39
17 22 5
2014/2015 Algo1 /SMI 21
Affection : exercices
Donnez les valeurs des variables A et B après exécution des instructions suivantes ?
Variables A, B : Entier Début
A ← 6;
B ← 2;
A ← B;
B ← A;
Fin
Les deux dernières instructions permettent-elles d’échanger les valeurs de A et B ?
A B
6 -
6 2
2 2
2 2
23
2014/2015 Algo1 /SMI 22
Affectation : l’échange des chandails
Fiche 2.6
2014/2015 Algo1 /SMI 23
Affectation : échanges
Écrire un algorithme permettant d’échanger les valeurs de deux variables A et B? Réponse :
on utilise une variable auxiliaire Cet on écrit les instructions suivantes :
C A ; A B ; B C ;
Opérateur
Un opérateurest un symboled’opérationqui permet d’agir sur des variables ou de faire des “calculs”.
Il peut être unaireou binaire.
Exemple :
nonA ( A variable de type booléen) : cas unaire a + b : cas binaire ( a et b entiers)
2014/2015 Algo1 /SMI 24
24
Les types d’opérateurs
Les opérateursdé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: =, <, >, <=, >=•
des opérateurs sur les chaînes: &(concaténation)2014/2015 Algo1 /SMI 25
2014/2015 Algo1 /SMI 26
Les opérandes
Une opérandeest une entité (variable, constante ou expression) utilisée par un opérateur.
Exemple :
Variables a, b : entier; x, y : réel;
•
a + ba est l’opérandegauche et best l’opérandedroite
•
a+ 200;•
x - y;Les expressions
Une expressionpeut être une valeur, une variable ou une opérationconstituée de variables reliées par des opérateurs.
Exemples : 1, b, a*2, a+ 3*b-c, …
L'évaluationde l'expression fournit une valeur uniquequi est le résultat de l'opération.
Une expressionest évaluée de gauche à droitemais en tenant compte des prioritésdes opérateurs.
2014/2015 Algo1 /SMI 27
25
2014/2015 Algo1 /SMI 28
Priorité des opérateurs
Pour les opérateurs arithmétiques donnés ci-dessous, l'ordrede prioritéest le suivant(du plus prioritaireau moins prioritaire) :
• ( ) : les parenthèses
• ^ : (élévation à la puissance)
• * , /, % (multiplication, division, modulo)
• + , - (addition, soustraction)
• <, <=, >, >=
• ==, !=
Priorité des opérateurs
Exemple : 9 + 3 * 4 vaut 21 (et non 48)
En cas de besoin, on utilise les parenthèses pour indiquer les opérations à effectuer en priorité
Exemple : (9 + 3) * 4 vaut 48
À prioritéégale, l’évaluation de l’expression se fait de gaucheà droite.
Exemple:
15 / 5 * 3 = 9et non 1 5 – 2 + 4 = 7et non –1
2014/2015 Algo1 /SMI 29
2014/2015 Algo1 /SMI 30
Expression : remarques
On ne peut pas additionnerun entieret un caractère
Toutefois dans certains langageson peut utiliser un opérateuravec deux opérandesde types différents, c’est par exemple le cas avec les types arithmétiques(4 + 5.5)
La significationd’un opérateurpeut changer en fonction du type des opérandes(le cas de Java)
•
l’opérateur +avec des entiers effectue l’addition, 3+6 vaut 9•
avec des chaînes de caractères, il effectue la concaténation"bonjour" + " tout le monde" vaut"bonjour tout le monde"
26
2014/2015 Algo1 /SMI 31
Expression : remarques
Pour le langage C, si x et y sont entiers, x/yest une division entièrealors que sil’un des deux ne l’est pas la divisionest réelle
x+y/z: est une expression arithmétique dont le type dépenddes types de x, y et z
(x>y) | | !(x=y+1) : est une expression booléenne (| | dénote l’opérateur logique ouet !dénote la négation)
Expression : remarques
Avant d’utiliserune variabledans une expression, il est nécessairequ’une valeur lui ait été affectée.
La valeur de l’expressionest évaluée au moment de l’affectation
•
x 4•
y 6•
z x + y•
Ecrire(z) 10•
y 20•
Ecrire(z) 10 la modification de y après affectation n’a aucun effet sur la valeur de z2014/2015 Algo1 /SMI 32
2014/2015 Algo1 /SMI 33
Les opérateurs booléens
Associativitédes opérateurs et et ou a et (b et c)= (a et b)et c
Commutativité des opérateurs etet ou a etb = b eta
a oub = b oua
Distributivité des opérateurs et et ou a ou(b etc) = (a oub) et(a ouc) a et(b ouc) = (a etb) ou(a etc)
27
Les opérateurs booléens
Involution (homographie réciproque) : non nona = a
Loi de Morgan : non(a oub) = nona etnonb non(a etb) = nona ounonb
Exemple:
soient a, b, c et d quatre entiers quelconques : (a<b)| |((a>=b)&&(c==d)) (a<b)| |(c==d) car (a<b)| |(!(a<b)) est toujours vraie
2014/2015 Algo1 /SMI 34
2014/2015 Algo1 /SMI 35
Tables de vérité
C1 C2 C1 etC2 C1 ouC2 C1 XORC2
Vrai Vrai Vrai Vrai Faux
Vrai Faux Faux Vrai Vrai
Faux Vrai Faux Vrai Vrai
Faux Faux Faux Faux Faux
C1 Non C1
Vrai Faux Faux Vrai
28
Chap3: La lecture et l’écriture
2014/2015 Algo1/SMIA 1
Algorithmique
Les instruction de Lecture et d’Écriture
Les instructions d’entrées et sorties
Soit le programme suivant qui calcule le carré d’un nombre, par exemple 7:
Algorithme Carre Variables A : entier;
Début A ← 12^2 ; Fin
Si on veut calculerle carréd’une autre valeur, il faut réécrireun autreprogramme !
Solution: l’utilisateur doit entrerla valeur souhaitée.
On parle d’opérationsde lecture
2014/2015 Algo1/SMIA 2
2014/2015 Algo1/SMIA 3
Les instructions d’entrées et sorties : lecture et écriture
Les instructions de lectureet d'écriturepermettent à la machinede communiquer avec l'utilisateur.
La lecturepermet d'entrer des donnésà partir du clavier (la saisie).
• En pseudo-code, on note: lire (var);
Lorsque le programme rencontre une instruction de lecture(lire(var)), il passe la mainà l’utilisateurpour la saisiede la valeur de var. Ce dernierdoit appuyer sur la touche Entréepour validercette entrée.
29
Lecture et Ecriture des données
Remarque: lire (var); se dérouleen trois étapes:
1) Le programme s'arrêtelorsqu'il rencontre une instruction Lireet ne se poursuit qu'après la saisiede l’entréeattendue par le clavier.
2) La touche Entréesignale la finde la saisie.
3) La machine placela valeurentrée au clavier (ou saisie) dans la zone mémoire nommée var.
Conseil: Avant de lire une variable, il est fortement conseillé d’écriredes messagesà l’écran, afin de prévenir l’utilisateur de ce qu’il doit taper (sinon longue attente).
2014/2015 Algo1/SMIA 4
2014/2015 Algo1/SMIA 5
Les instructions d’entrées et sorties : lecture et écriture
L'écriturepermet d'afficher des résultats à l'écran(ou de les écriredans un fichier)
• En pseudo-code, on note: écrire (liste d’expressions) La machine afficheles valeurs des expressionsdécrite dans la liste d’expressions.
Ces instructionspeuvent être des variablesayant des valeurs, des nombresou des commentaires sous forme de chaines de caractères.
Exemple : écrire(a, b+2, "Message");
2014/2015 Algo1/SMIA 6
Exemple : lecture et écriture
Écrire un algorithme qui demande un nombre entierà l'utilisateur, puis qui calcule et affichele carréde ce nombre.
Algorithme Calcul_du_Carre Rôle : calcul du carre Données : un entier
Résultats : le carre du nombre variables A, B : entier Début
écrire("entrer la valeur de A ");
lire(A);
B ← A*A;
écrire("le carré de ", A, " est :", B);
Fin
30
2014/2015 Algo1/SMIA 7
Exercice : lecture et écriture
Écrire un algorithme qui permet d’effectuer la saisied’un nom, d’un prénomet afficheensuite le nom complet
Algorithme AffichageNomComplet
…
variables Nom, Prenom, Nom_Complet : chaîne de caractères Début
écrire("entrez le nom");
lire(Nom);
écrire("entrez le prénom");
lire(Prenom);
Nom_Complet ← Nom & " " & Prenom;
écrire("Votre nom complet est : ", Nom_Complet);
Fin
2014/2015 Algo1/SMIA 8
Langage C
Présentation générale et instructions de base
2014/2015 Algo1/SMIA 9
Langage C
Créé en 1972 (D. Ritchie et K. Thompson), est un langage rapide et trés populaire et largement utilisé.
Le C++ est un langage orienté objet créé à partir du C en 1983.
Le langage C a inspiré de nombreux langages :
•
C++, Java, PHP, ... leurs syntaxes sont proches de celle de C Le Langage C est un bon acquis pour apprendre d’autres langages
31
2014/2015 Algo1/SMIA 10
Premier programme en C
#include <stdio.h>
void main() {
printf(“Mon programme !\n");
}
bibliothèque
Point d'entré du programme Instruction
2014/2015 Algo1/SMIA 11
Langage C : Généralités
Chaque instruction en C doit se terminer par ;
Pour introduire un texte en tant que commentaire, il suffit de précéder la ligne par // ( le texte est alors ignoré par le compilateur de C)
Il est aussi possible d'écrire des commentaires sur plusieurs lignes en utilisant les symboles (/* ..*/)
/* exemple sur ligne 1 exemple sur ligne 2 */
2014/2015 Algo1/SMIA 12
Langage C : 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 du langage C
Les principaux types définis en C sont :
• char(caractères),
• int (entier),
• short(entiers courts),
• long(entiers longs),
• float(réel),
• double(réel grande précision),
• long double(réel avec plus de précision),
• unsigned int(entier non signé)
32
2014/2015 Algo1/SMIA 13
Langage C : nom et type des variables
Déclaration d'une variable
•
Type nom_de_la_variable [= valeur] ;
Exemple:
•
int nb;•
float pi = 3.14;//déclaration et initialisation•
char c = ‘x';•
long a, b, c;•
double r = 7.1974851592;2014/2015 Algo1/SMIA 14
Langage C: l'affectation
Le symbole d'affectation ← se note en C avec
=
exemple : i= 1; j= i+1;
Attention : en C, le test de l’égalité est
effectuée par l’opérateur ==a==b ; est une expression de type logique
(boolean) qui est vrai si les deux valeurs a et b sont égales et fausse sinon2014/2015 Algo1/SMIA 15
Langage C : affichage d’une variable
printf("format de l’affichage", var) permet d'afficher la valeur de la variable var (c'est l'équivalent de écrire en pseudo code).
printf("chaine") permet d'afficher la chaîne de caractères qui est entre guimets " "
int a=1, b=2; printf("a vaut :%d et b vaut:%d \n ", a, b);
a vaut 1 et b vaut 2
float r= 7.45; printf("le rayon =%f \n ",r);
Autres formats :
• %c: caractère
• %lf: double
• %s: chaine de caractères
• %e: réel en notation scientifique
33
2014/2015 Algo1/SMIA 16
Langage C : affichage d’une variable
Affichage de la valeur d'une variable en C++ •
cout <<chaîne 1 <<variable 1<<chaîne 2 <<variable 2;•
Exemple•
int i =2; int j = 20;•
cout <<"i vaut:" << i <<"j vaut:"<<j <<'\n';•
float r = 6.28;•
cout<<"le rayon = "<< r <<'\n';2014/2015 Algo1/SMIA 17
Langage C : lecture d’une variable
Lecture d’une variable n de type entier:
Syntaxe : scanf("%d ",&n); lit la valeur tapé par l’utilisateur au clavier et elle la stocke dans la variable n.
Comme pour printf, le premier argument est une chaine de caractères qui donne le format de la lecture. Cette chaine ne peut contenir que des formats, pas de messages.
Attention: notez la présence du caractère &devant n (adresse associée à la variable n) et ce n’est pas équivaut à scanf("%d", n);
2014/2015 Algo1/SMIA 18
Langage C : lecture d’une variable
lecture d'une variable en C++
•
cin>>var;•
Exemple•
int i ;•
cout <<"entrez i "<<'\n';•
cin>>i;•
float r ;•
cout<<"entrez le rayon r " <<'\n';•
cin>>r;34
Chap4: Les instructions conditionnelles
Algorithmique 1
Les instructions conditionnelles
2014/2015 Algo1 /SMI 1
2014/2015 Algo1 /SMI 2
Tests: instructions conditionnelles
Définition: une condition est une expression écrite entre parenthèse à valeur booléenne.
Les instructions conditionnelles servent à n'exécuter une instructionou une séquence d'instructions que si une condition est vérifiée.
En pseudo-code: Si conditionalors
instruction ou suite d'instructions1 Sinon
instruction ou suite d'instructions2 Finsi
2014/2015 Algo1 /SMI 3
instructions conditionnelles
Suite d’instructions 2
test Vraie Suite d’instructions 1
Faux
35
2014/2015 Algo1 /SMI 4
Instructions conditionnelles
Remarques:
•
La conditionne peut être que vraieou fausse•
Si la conditionest vraiealors seules les instructions1 sont exécutées.•
Si la condition est fausseseules les instructions2 sont exécutées.•
La conditionpeut être une expressionbooléenne simple ou une suite composéed’expressions booléennes. La partie Sinon est optionnelle, on peut avoir la forme simplifiéesuivante:
Si conditionalors
instruction ou suite d'instructions1 Finsi
2014/2015 Algo1 /SMI 5
Si…Alors…Sinon : exemple
Algorithme ValeurAbsolue1
Rôle : affiche la valeur absolue d’un entier Données : la valeur à calculer
Résultat: la valeur absolue 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
2014/2015 Algo1 /SMI 6
Si…Alors : exemple
Algorithme ValeurAbsolue2
…
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
36
2014/2015 Algo1 /SMI 7
Exercice (tests)
Écrire un algorithme qui demande un nombre entier à l'utilisateur, puis qui teste et affiche s'il est divisible par 7 ou non
Algorithme Divsible_par7
…
Variable n : entier Début
Ecrire (" Entrez un entier : ");
Lire (n) Si (n%7=0) alors
Ecrire (n," est divisible par 7");
Sinon
Ecrire (n," n'est pas divisible par 7");
Finsi Fin
2008/2009 Inf o2, 1ère année SM/SMI 8
Langage C : syntaxe des tests
Écriture en pseudo code Traduction en C Si condition alors if (condition) {
instructions instructions;
Finsi }
Si condition alors if (condition) {
instructions1 instructions1;
Sinon } else {
instructions2 instructions2;
Finsi }
2014/2015 Algo1 /SMI 9
Conditions composées
Une condition composéeest une condition formée de plusieurs conditions simples reliéespar 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)
L'évaluation d'une condition composéese fait selon des règles présentéesgénéralement dans ce qu'on appelle tablesde vérité.
37
2014/2015 Algo1 /SMI 10
Tests imbriqués
Les testspeuvent avoir un degréquelconque d'imbrications
Si condition1 alors
Si condition2 alors instructionsA SinoninstructionsB
Finsi Sinon
Si condition3 alors instructionsC Finsi
Finsi
2014/2015 Algo1 /SMI 11
Tests imbriqués : exemple 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
2014/2015 Algo1 /SMI 12
Tests imbriqués : exemple 2
Variablen : 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
38
Tests imbriqués
Remarque : dans l’exemple 2 on a fait trois tests systématiquement alors que dans l’exemple 1, si le nombre est négatif on ne fait qu'un seul test Conseil : utiliser les tests imbriqués pour limiterle
nombrede testset placer d'abordles conditionsles plus probables.
2014/2015 Algo1 /SMI 13
2014/2015 Algo1 /SMI 14
Tests imbriqués : exercice
Le prix de disques compacts (CDs) dans espace de vente varie selon le nombre à acheter:
5 DH l’unité si le nombre de CDs à acheter est inférieur à 10, 4 DH l’unité si le nombre de CDS à acheter est compris entre 10 et 20 et 3 DH l’unité si le nombre de CDs à acheter est au-delà de 20.
Écrivez un algorithme qui demande à l’utilisateur le nombre de CDs à acheter, qui calcule et affiche le prix à payer
2014/2015 Algo1 /SMI 15
Tests imbriqués : corrigé
Variables unites : entier prix : réel Début
Ecrire("Nombre d’unités : ");
Lire (unites);
Si unites < 10 Alors prix ← unites*5;
Sinon Si unites < 20 alors prix ← unites*4;
Sinon prix ← unites*3;
Finsi Finsi
Ecrire(“Le prix à payer est : ”, prix);
Fin
39
2014/2015 Algo1 /SMI 16
Tests : remarques
Un sinonse rapporte toujours au dernier siqui n’a pas encorede sinonassocié
Il est recommandé de structurerle bloc associé à siet celui associé à sinon
Exemple :
•
Lire(a);•
x ←1;•
Si (a>= 0) alorssi (a==0) alors x ←2 ; sinon x ←3;
finsi finsi
ecrire(x) a : -1 0 1 affichage : 1 2 3
2014/2015 Algo1 /SMI 17
L'instruction cas
Lorsque l’on doit comparer une mêmevariable avec plusieurs valeurs, comme par exemple :
si a=1 alors instruction1 sinon si a=2 alors instruction2
sinon si a=4 alors instruction4 sinon . . .
finsi finsi finsi
On peut remplacer cette suite de si par l’instruction cas
2014/2015 Algo1 /SMI 18
L'instruction cas
Sa syntaxe en pseudo-codeest : cas où v vaut
v1 : action1 v2 : action2 . . . vn : actionn autre : action autre fincas
v1,. . . ,vn sont des constantesde type scalaire(entier, naturel, énuméré, ou caractère)
action i est exécutée si v = vi (on quitte ensuite l’instruction cas) action autreest exécutée siquelque soit i, v ≠ vi
40
2014/2015 Algo1 /SMI 19
L'instruction cas : exemple 1
…
Variables c : caractère Début
Ecrire("entrer un caractère");
Lire (c);
Si((c>=’A’) et (c<=‘Z’)) alors cas où c vaut
‘A’,’E’, ‘I’, ‘O’, ‘U’, ‘Y’ : ecrire(c, "est une voyelle majuscule");
autre : ecrire(c, " est une consonne majuscule ");
fincas
sinon ecrire(c, "n’est pas une lettre majuscule");
Finsi Fin
L'instruction cas : exemple 2
…
Variables saison : entier;
Début
écrire(" Entrez une valeur entre 1 et 12 : ");
lire(saison);
Cas où saison vaut
3..5 : écrire(" Printemps");
6..8 : écrire("Eté");
12, 1..2 : écrire("Hiver");
autre : écrire("Automne");
finCas Fin
2014/2015 Algo1 /SMI 20
41
Chap5: Les instructions itératives (les boucles)
Algorithmique 1
Les instructions Itératives : les boucles
2014/2015 Algo1 /SMI 1
2014/2015 Algo1 /SMI 2
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 conditionest réalisée.
• Les boucles répéter: on y répètedes instructions jusqu'à ce qu'une certaine condition soit non réalisée.
• Les boucles pourou avec compteur: on y répètedes instructions en faisant évoluer un compteur(variable particulière) entre une valeur initialeet une valeur finale
2014/2015 Algo1 /SMI 3
Les boucles Tant que
TantQue (condition) faire instructions
FinTantQue
La condition (dite conditionde contrôle de la boucle) est évaluée avant chaque itération.
Sila conditionest vraie, on exécuteles instructions (corps de la boucle), puis, on retourne tester la condition. Si elle est encore vraie, on répète l'exécution, …
condition Vrai instructions
Faux
42
2014/2015 Algo1 /SMI 4
Les boucles Tant que
Sila conditionest fausse, on sortde la boucleet on exécute l'instruction qui est après FinTantQue
Il est possibleque les instructions à répéter ne soient jamais exécutées.
Le nombre d'itérationsdans une boucle TantQue n'est pas connuau moment d'entrée dans la boucle. Il dépendde l'évolution de la valeur de la condition
2014/2015 Algo1 /SMI 5
Les boucles Tant que : remarques
Unedes instructions du corpsde la boucle doit absolument changer la valeur de la conditionde vrai à faux (après un certain nombre d'itérations), sinon le programme va tourner indéfiniment
Attention aux boucles infinies
Exemple de boucle infinie : correction
i ← 1 ; i ← 1;
TantQue (i > 0) faire TantQue ( i <100) faire
i ← i+1 ; i ← i+1;
FinTantQue FinTantQue
2014/2015 Algo1 /SMI 6
Boucle Tant que : exemple1
Contrôle de saisied'une lettrealphabétique jusqu’àce que le caractère entrésoit valable
…
Variable C : caractère Debut
Écrire (" Entrez une lettre majuscule ");
Lire (C);
TantQue ((C < 'A‘) ou (C > 'Z')) faire Ecrire ("Saisie erronée. Recommencez");
Lire (C);
FinTantQue
Ecrire ("La saisie est valable ");
Fin