Partie 1
Partie 1
Partie 1
1re anne SM/SMI 2007/2008, Info2 Dpartement de Mathmatiques et dInformatique, Universit Mohammed V [email protected] [email protected]
2007/2008
Apprendre les concepts de base de l'algorithmique et de la programmation tre capable de mettre en oeuvre ces concepts pour analyser des problmes simples et crire les programmes correspondants
Gnralits sur lalgorithmique et les langages de programmation Notion de variable, affectation, lecture et criture Instructions conditionnels et instructions itratives Les Tableaux, les fonctions et procdures, la rcursivit Introduction la complexit des algorithmes Donnes structures
2007/2008
Programme
Un programme correspond la description dune mthode de rsolution pour un problme donn. Cette description est effectue par une suite dinstructions dun langage de programmation Ces instructions permettent de traiter et de transformer les donnes (entres) du problme rsoudre pour aboutir des rsultats (sorties). Un programme nest pas une solution en soi mais une mthode suivre pour trouver les solutions.
2007/2008
Langages informatiques
Un langage informatique est un code de communication, permettant un tre humain de dialoguer avec une machine en lui soumettant des instructions et en analysant les donnes matrielles fournies par le systme. Le langage informatique est lintermdiaire entre le programmeur et la machine. Il permet dcrire des programmes (suite conscutive dinstructions) destins effectuer une tache donne
Programmation : ensemble des activits orientes vers la conception, la ralisation, le test et la maintenance de programmes.
2007/2008
Langages de programmation
Deux types de langages:
Le choix d'un langage de programmation n'est pas facile, chacun a ses spcificits et correspond mieux certains types d'utilisations
2007/2008
Notion dalgorithme
Un programme informatique permet lordinateur de rsoudre un problme
Avant de communiquer lordinateur comment rsoudre ce problme, il faut en premier lieu pouvoir le rsoudre nous mme Le rsultat cest comme le plat cuisiner Les donnes sont lanalogues des ingrdients de la recette Les rgles de transformations se comparent aux directives ou instructions de la recette
2007/2008
Algorithme informatique
Un algorithme est une suite dinstructions ayant pour but de rsoudre un problme donn. Ces instructions doivent tre excutes de faon automatique par un ordinateur.
Exemples:
prparer une recette de cuisine montrer le chemin un touriste programmer un magntoscope etc ...
2007/2008
Algorithme : exemple
Pour trouver une valeur approximative de la racine carre de x: prendre une approximation initiale arbitraire G amliorer cette approximation en calculant la moyenne arithmtique entre G et x/G continuer jusqu' atteindre la prcision souhaite Exemple : x pour x=2 X=2 G=1 X/G = 2 G = (1+ 2) = 1.5 X/G = 4/3 G = (3/2 + 4/3) = 17/12 = 1.416666 X/G = 24/17 G = (17/12 + 24/17) = 577/408 = 1.4142156
2007/2008
Algorithme et programme
Llaboration dun algorithme prcde ltape de programmation
Un programme est un algorithme Un langage de programmation est un langage compris par l'ordinateur
Llaboration dun algorithme est une dmarche de rsolution de problme exigeante La rdaction dun algorithme est un exercice de rflexion qui se fait sur papier
L'algorithme est indpendant du langage de programmation Par exemple, on utilisera le mme algorithme pour une implantation en Java, ou bien en C++ ou en Visual Basic Lalgorithme est la rsolution brute dun problme informatique
Info2, 1re anne SM/SMI 9
2007/2008
Algorithmique
algorithme = mthode de rsolution algorithme vient du nom du clbre mathmaticien
arabe Al Khawarizmi (Abu Ja'far Mohammed Ben Mussa Al-Khwarismi)
Lalgorithmique dsigne aussi la discipline qui tudie les algorithmes et leurs applications en Informatique Une bonne connaissance de lalgorithmique permet dcrire des algorithmes exacts et efficaces
2007/2008 Info2, 1re anne SM/SMI 10
algorithmique
Conception
comment dvelopper un algorithme? quelles techniques produisent de bons algorithmes?
Analyse
tant donn un algorithme, quelles sont ses qualits? est-il adapt au problme? est-il efficace? comment mesurer ses performances?
test
fin
11
2007/2008
12
Le pseudo-code: reprsentation textuelle avec une srie de conventions ressemblant un langage de programmation
plus pratique pour crire un algorithme reprsentation largement utilise
2007/2008
13
Algorithmique
2007/2008
14
instructions de base
Un programme informatique est form de quatre types dinstructions considres comme des petites briques de base :
2007/2008
15
Notion de variable
Une variable sert stocker la valeur dune donne dans un langage de programmation Une variable dsigne un emplacement mmoire dont le contenu peut changer au cours dun programme (do le nom de variable) Chaque emplacement mmoire a un numro qui permet d'y faire rfrence de faon unique : c'est l'adresse mmoire de cette cellule. Rgle : La variable doit tre dclare avant dtre utilise, elle doit tre caractrise par :
un nom (Identificateur) un type qui indique lensemble des valeurs que peut prendre la variable (entier, rel, boolen, caractre, chane de caractres, ) Une valeur
2007/2008
16
r Identificateurs : rgles
Le choix du nom dune variable est soumis quelques rgles qui varient selon le langage, mais en gnral: Un nom doit commencer par une lettre alphabtique
exemple : E1 (1E nest pas valide)
doit tre constitu uniquement de lettres, de chiffres et du soulignement ( _ ) (viter les caractres de ponctuation et les espaces)
Exemples : SMI2008, SMI_2008 (SMP 2008, SMP-2008, SMP;2008 : sont non valides)
doit tre diffrent des mots rservs du langage (par exemple en C: int, float, double, switch, case, for, main, return, ) La longueur du nom doit tre infrieure la taille maximale spcifie par le langage utilis
2007/2008
17
Identificateurs : conseils
Conseil: pour la lisibilit du code choisir des noms significatifs qui dcrivent les donnes manipules exemples: NoteEtudiant, Prix_TTC, Prix_HT Remarque: en pseudo-code algorithmique, on va respecter les rgles cites, mme si on est libre dans la syntaxe
2007/2008
18
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[ Rel simple prcision (cod sur 4 octets) : prcision dordre 10-7 Rel double prcision (cod sur 8 octets) : prcision dordre 10-14
Type logique ou boolen: deux valeurs VRAI ou FAUX Type caractre: lettres majuscules, minuscules, chiffres, symboles,..
Exemples : A, b, 1, ?,
Type chane de caractre: toute suite de caractres Exemples: " " , " Nom, Prnom", "code postale: 1000",
Info2, 1re anne SM/SMI 19
2007/2008
Variables : remarques
pour le type numrique, on va se limiter aux entiers et rels sans considrer les sous types Pour chaque type de variables, il existe un ensemble d'oprations correspondant. Une variable est l'association d'un nom avec un type, permettant de mmoriser une valeur de ce type.
2007/2008
21
Constante
Une constante est une variable dont la valeur ne change pas au cours de l'excution du programme, elle peut tre un nombre, un caractre, ou une chaine de caractres. 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 : rel, MAXI=32 : entier Une constante doit toujours recevoir une valeur ds sa dclaration.
2007/2008
22
Affectation
Laffectation consiste attribuer une valeur une variable (cest--dire remplir ou modifier le contenu d'une zone mmoire) En pseudo-code, l'affectation est note par 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 mme type ou de types compatibles - laffectation ne modifie que ce qui est gauche de la flche
Exemples : i 1 j i k i+j
2007/2008
23
Affectation
Les langages de programmation C, C++, Java, utilisent le signe gal = pour laffectation . Remarques : Lors dune affectation, lexpression de droite est value et la valeur trouve est affecte la variable de gauche. Ainsi, AB est diffrente de BA l'affectation est diffrente d'une quation mathmatique :
Les oprations x x+1 et x x-1 ont un sens en programmation et se nomment respectivement incrmentation et dcrmentation. A+1 3 n'est pas possible en langages de programmation et n'est pas quivalente A 2
Certains langages donnent des valeurs par dfaut aux variables dclares. Pour viter tout problme il est prfrable d'initialiser les variables dclares.
Info2, 1re anne SM/SMI 24
2007/2008
2007/2008
26
Fiche 2.6
Affectation : exercices
Donnez les valeurs des variables A, B et C aprs excution des instructions suivantes ? Variables A, B, C: Entier Dbut A7 B 17 AB B A+5 CA+B CBA Fin
2007/2008
27
Affection : exercices
Donnez les valeurs des variables A et B aprs excution des instructions suivantes ?
Variables A, B : Entier Dbut A6 B2 AB BA Fin
2007/2008
28
0.
1.
A 2.
B 3.
A
2007/2008
B
29
Fiche 2.6
Affectation : changes
crire un algorithme permettant dchanger les valeurs de deux variables A et B ? Rponse : on utilise une variable auxiliaire C et on crit les instructions suivantes : C A; A B; B C;
2007/2008
30
Expressions et oprateurs
Une expression peut tre une valeur, une variable ou une opration constitue de variables relies par des oprateurs exemples: 1, b, a*2, a+ 3*b-c, L'valuation de l'expression fournit une valeur unique qui est le rsultat de l'opration Les oprateurs dpendent du type de l'opration, ils peuvent tre :
des oprateurs arithmtiques: +, -, *, /, % (modulo), ^(puissance) des oprateurs logiques: NON(!), OU(| |), ET (&&) des oprateurs relationnels: =, <, >, <=, >= des oprateurs sur les chanes: & (concatnation)
Une expression est value de gauche droite mais en tenant compte des priorits des oprateurs.
2007/2008
31
Expression : remarques
On ne peut pas additionner un entier et un caractre Toutefois dans certains langages on peut utiliser un oprateur avec deux oprandes de types diffrents, cest par exemple le cas avec les types arithmtiques (4 + 5.5) La signification dun oprateur peut changer en fonction du type des oprandes
loprateur + avec des entiers effectue laddition, 3+6 vaut 9 avec des chanes de caractres il effectue la concatnation "bonjour" + " tout le monde" vaut "bonjour tout le monde"
2007/2008
32
Expression : remarques
Pour le langage C, si x et y sont entiers, x/y est une division entire alors que si lun des deux ne lest pas la division est relle x+y/z : est une expression arithmtique dont le type dpend des types de x, y et z (x>y) | | !(x=y+1) : est une expression boolenne (| | dnote loprateur logique ou et ! Dnote la ngation) Avant dutiliser une variable dans une expression, il est ncessaire quune valeur lui ait t affecte. La valeur de lexpression est value au moment de laffectation
2007/2008
exemple: (9 + 3) * 4 vaut 48
priorit gale, lvaluation de lexpression se fait de gauche droite
2007/2008 Info2, 1re anne SM/SMI 34
Faux Vrai
Info2, 1re anne SM/SMI 36
2007/2008
37
2007/2008
38
2007/2008
40
2007/2008
41
instructions conditionnelles
test
Faux
Vraie
Suite dinstructions 1
Suite dinstructions 2
2007/2008
42
Instructions conditionnelles
Remarques :
la condition ne peut tre que vraie ou fausse si la condition est vraie alors seules les instructions1 sont excutes si la condition est fausse seules les instructions2 sont excutes la condition peut tre une expression boolenne simple ou une suite compose dexpressions boolennes
La partie Sinon est optionnelle, on peut avoir la forme simplifie suivante: Si condition alors instruction ou suite d'instructions1 Finsi
2007/2008
43
Si SiAlors : exemple
Algorithme ValeurAbsolue2 Variable x, y : rel Dbut Ecrire (" Entrez un rel : " ) Lire (x) y x Si x < 0 alors y -x Finsi Ecrire ("la valeur absolue de ", x, "est:",y) Fin
2007/2008 Info2, 1re anne SM/SMI 45
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 Dbut 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
2007/2008 Info2, 1re anne SM/SMI 46
2007/2008
47
50
2007/2008
51
Tests : remarques
Un sinon se rapporte toujours au dernier si qui na pas encore de sinon associ Il est recommand de structurer le bloc associ si et 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 affichage : 1
0 2
1 3
2007/2008
53
L'instruction cas
Lorsque lon doit comparer une mme variable 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 linstruction cas
2007/2008
54
L'instruction cas
Sa syntaxe en pseudo-code est : cas o v vaut v1 : action1 v2 : action2 ... vn : actionn autre : action autre fincas v1,. . . ,vn sont des constantes de type scalaire (entier, naturel, numr, ou caractre) action i est excute si v = vi (on quitte ensuite linstruction cas) action autre est excute si quelque soit i, v vi
2007/2008 Info2, 1re anne SM/SMI 55
2007/2008
57
condition
Vrai
instructions
Faux
la condition (dite condition de contrle de la boucle) est value avant chaque itration si la condition est vraie, on excute les instructions (corps de la boucle), puis, on retourne tester la condition. Si elle est encore vraie, on rpte l'excution, si la condition est fausse, on sort de la boucle et on excute l'instruction qui est aprs FinTantQue Il est possible que les instructions rpter ne soient jamais excutes.
2007/2008 Info2, 1re anne SM/SMI 58
FinTantque Fin
2007/2008
61
2007/2008
63
instructions Faux
condition Vrai
Condition est value aprs chaque itration les instructions entre Rpter et jusqu sont excutes au moins une fois et leur excution est rpte jusqu ce que la condition soit vraie (tant qu'elle est fausse)
2007/2008 Info2, 1re anne SM/SMI 64
2007/2008
65
2007/2008
66
Vrai
instructions
ii+pas
Faux
2007/2008
68
2007/2008
69
2007/2008
73
75
Boucles : exercice
Ecrire un algorithme qui compte le nombre de 1 dans la reprsentation binaire de lentier n. Solution : Variables i, n, poids : entiers Debut Ecrire(" Entrer la valeur de n :") lire(n) i n nbits 0 TantQue(i<>0) faire si (i mod 2 = 1) alors poids poids + 1 i i/2 FinTantQue Ecrire("Pour lentier",n," le poids est : ",poids) Fin
2007/2008
76
2007/2008
77
2007/2008
Si on doit tester la condition de contrle avant de commencer les instructions de la boucle, on utilisera TantQue Si la valeur de la condition de contrle dpend d'une premire excution des instructions de la boucle, on utilisera rpter jusqu'
Info2, 1re anne SM/SMI 78