• Aucun résultat trouvé

Cours de l’algorithmique et programmation: Licence SMI- S2 (Accréditation : 2014-2018) Pr. Y. EL BENANI

N/A
N/A
Protected

Academic year: 2022

Partager "Cours de l’algorithmique et programmation: Licence SMI- S2 (Accréditation : 2014-2018) Pr. Y. EL BENANI"

Copied!
95
0
0

Texte intégral

(1)

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)

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

[email protected]

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 algorithmes

correspondants.

É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)

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)

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)

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)

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)

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)

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)

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 programmation

2014/2015 Algo1 /SMI 24

(10)

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)

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)

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)

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)

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 boucles

Formalisme 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é fin

2014/2015 Algo1 /SMI 39

(15)

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)

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)

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)

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-14

2014/2015 Algo1 /SMI 9

(19)

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étique

2014/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)

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 identificateurvaleur : 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 PI3.14 : réel, MAXI32 : 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)

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)

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)

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)

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 + b

a 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)

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)

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 z

2014/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)

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)

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)

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)

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)

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)

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 sinon

2014/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)

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)

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)

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)

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)

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)

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)

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) alors

si (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)

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)

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)

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

Références

Documents relatifs

 Il y aura un accès en lecture et en écriture dans le fichier de configuration pour créer, lire et supprimer des attributs de façon dynamique, ce qui permet alors le partage

Ecrire une fonction qui prend pour argument un tableau Note[ ] (qui contient les notes d’une classe) et n la taille du tableau (le nombre des notes) et elle retourne la moyenne de

Ce théorème d'interpolation torique a eu entre autres des applications en calcul symbolique-numérique, pour la factorisation des polynômes creux (cf B.4. Weimann,

Bibliographie : Manuel BORDAS p 248-249 - BELIN p226-227. Sources : http://www.brgm.fr/activites/geothermie/geothermie,

La recherche se fait par des chercheurs, qui sont des professeurs dans un domaine scientifique, des experts, dans leurs domaines de compétences et des étudiants de différents

(prendre rendez-vous avec madame Janick si

 La présence de votre enfant est recommandée afin qu’il puisse exposer sa propre vision de son cheminement scolaire en tant qu’acteur de

1) chaque descente sur la donnée bruitée est suivie par une descente effectuée sur la donnée non bruitée. 2) la configuration courante est régulièrement remplacée par la