Vous êtes sur la page 1sur 21

Cours dInformatique

1re anne SM/SMI 2005/2006, Semestre 2

Objectif et plan du cours


z

Objectif:

Apprendre les concepts de base de l'algorithmique et de la programmation Etre capable de mettre en oeuvre ces concepts pour analyser des problmes simples et crire les programmes correspondants

Mouad BEN MAMOUN Dpartement de Mathmatiques et dInformatique, Universit Mohammed V ben_mamoun@fsr.ac.ma

Plan:

Gnralits (matriel dun ordinateur, systmes dexploitation, langages


de programmation, )

Algorithmique (affectation, instructions conditionnelles, instructions itratives, fonctions, procdures, ) MAPLE (un outil de programmation)
Module I2, 1re anne SM/SMI 2

2005/2006

Module I2, 1re anne SM/SMI

2005/2006

Informatique?
z

Matriel: Principaux lments dun PC


z

Techniques du traitement automatique de linformation au moyen des ordinateurs

Unit centrale (le botier)

Elments dun systme informatique


Applications (Word, Excel, Jeux, Maple, Maple, etc.) Langages (Java,C/C++, Fortran,etc.) Syst Systme d dexploitation (DOS,Windows, Unix, etc.) Mat Matriel (PC, Macintosh, station SUN, etc.)

Processeur ou CPU (Central Processing Unit) Mmoire centrale Disque dur, lecteur disquettes, lecteur CD-ROM Cartes spcialises (cartes vido, rseau, ...) Interfaces d'entre-sortie (Ports srie/parallle, )

Priphriques


3 2005/2006

Moniteur (l'cran), clavier, souris Modem, imprimante, scanner,

2005/2006

Module I2, 1re anne SM/SMI

Module I2, 1re anne SM/SMI

Quest ce quun systme dexploitation?


z

Langages informatiques
z

Ensemble de programmes qui grent le matriel et contrlent les applications

Un langage informatique est un outil permettant de donner des ordres (instructions) la machine

Gestion des p priph riphriques (affichage l'cran,


clavier, pilotage dune imprimante, )

lecture du

A chaque instruction correspond une action du processeur

Gestion des utilisateurs et de leurs donn donnes (comptes,


partage des ressources, gestion des fichiers et rpertoires, )

Intrt : crire des programmes (suite conscutive dinstructions) dstins effectuer une tache donne

Interface avec l lutilisateur (textuelle ou


Interprtation des commandes du temps processeur, )

graphique):
z

Exemple: un programme de gestion de comptes bancaires

Contrle des programmes (dcoupage en taches, partage


2005/2006 Module I2, 1re anne SM/SMI 5

Contrainte: tre comprhensible par la machine

2005/2006

Module I2, 1re anne SM/SMI

Langage machine
z

L'assembleur
z

Langage binaire: linformation est exprime et manipule sous forme dune suite de bits Un bit (binary digit) = 0 ou 1 (2 tats lectriques) Une combinaison de 8 bits= 1 Octet 28 = 256 possibilits qui permettent
de coder tous les caractres alphabtiques, numriques, et symboles tels que ?,*,&,

Problme: le langage machine est difficile comprendre par l'humain Ide: trouver un langage comprhensible par l'homme qui sera ensuite converti en langage machine Assembleur (1er langage): exprimer les instructions lmentaires de faon symbolique
ADD A, 4 LOAD B MOV A, OUT

z z

traducteur

langage machine

Le code ASCII (American Standard Code for Information Interchange) donne les

correspondances entre les caractres alphanumriques et leurs reprsentation binaire, Ex. A= 01000001, ?=00111111

Les oprations logiques et arithmtiques de base (addition, multiplication, ) sont effectues en binaire
Module I2, 1re anne SM/SMI 7

+: dj plus accessible que le langage machine -: dpend du type de la machine (nest pas portable) -: pas assez efficace pour dvelopper des applications complexes

2005/2006

Apparition des langages volus


8

2005/2006

Module I2, 1re anne SM/SMI

Langages haut niveau


z

Compilateur/interprteur
z

Intrts multiples pour le haut niveau:

Compilateur: traduire le programme entier une fois pour toutes


exemple.c
fichier source Compilateur

proche du langage humain anglais (comprhensible) permet une plus grande portabilit (indpendant du matriel) Manipulation de donnes et dexpressions complexes (rels, objets, a*b/c, )

exemple

ex excution

fichier ex excutable

Ncessit dun traducteur (compilateur/interprteur), excution plus ou moins lente selon le traducteur
Code source Compilateur ou interpr interprteur Langage machine

+ plus rapide lexcution + scurit du code source - il faut recompiler chaque modification

Interprteur: traduire au fur et mesure les instructions du programme chaque excution


Interpr Interprtation+ex tation+excution exemple.bas fichier source + excution instantane apprciable pour les dbutants - excution lente par rapport la compilation
Module I2, 1re anne SM/SMI 10

en langage volu volu


9 2005/2006

2005/2006

Module I2, 1re anne SM/SMI

Langages de programmation:
z

Etapes de ralisation dun programme


Enonc Enonc du probl problme Sp Spcification Cahier des charges Analyse Algorithme Traduction en langage Programme source Compilation Programme ex excutable Tests et modifications Version finale et r rsultats

Deux types de langages:

Langages procduraux Langages orients objets

Exemples de langages:

Fortran, Cobol, Pascal, C, C++, Java,

Choix dun langage?

La ralisation de programmes passe par lcriture dalgorithmes Do lintrt de lAlgorithmique


2005/2006 Module I2, 1re anne SM/SMI 11 2005/2006 Module I2, 1re anne SM/SMI 12

Algorithmique
z

Reprsentation dun algorithme


Historiquement, deux faons pour reprsenter un algorithme:

Le terme algorithme vient du nom du mathmaticien arabe AlAl-Khawarizmi (820 aprs J.C.) Un algorithme est une description complte et dtaille des actions effectuer et de leur squencement pour arriver un rsultat donn

LOrganigramme: Organigramme: reprsentation graphique avec des symboles (carrs, losanges, etc.)

Intrt: sparation analyse/codage (pas de proccupation de syntaxe) Qualits: exact (fournit le rsultat souhait), efficace (temps dexcution, mmoire occupe), clair (comprhensible), gnral (traite le plus grand nombre de cas possibles),

offre une vue densemble de lalgorithme reprsentation quasiment abandonne aujourdhui

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
Module I2, 1re anne SM/SMI 13

Le pseudopseudo-code: code: reprsentation textuelle avec une srie de conventions ressemblant un langage de programmation (sans
les problmes de syntaxe)


2005/2006

plus pratique pour crire un algorithme reprsentation largement utilise

2005/2006

Module I2, 1re anne SM/SMI

14

Algorithmique

Notion de variable
z

Dans les langages de programmation une variable sert stocker la valeur dune donne Une variable dsigne en fait un emplacement mmoire dont le contenu peut changer au cours dun programme (do le nom variable) Rgle : Les variables doivent tre dclar clares avant dtre utilises, elle doivent tre caractrises par :

Notions et instructions de base

2005/2006 Module I2, 1re anne SM/SMI 15

un nom (Identificateur) un type (entier, rel, caractre, chane de caractres, )

2005/2006

Module I2, 1re anne SM/SMI

16

Choix des identificateurs (1)


Le choix des noms de variables est soumis quelques rgles qui varient selon le langage, mais en gnral:
z

Choix des identificateurs (2)


Conseil: pour la lisibilit du code choisir des noms significatifs qui dcrivent les donnes manipules
exemples: TotalVentes2004, Prix_TTC, Prix_HT

Un nom doit commencer par une lettre alphabtique


exemple valide: A1 exemple invalide: 1A

doit tre constitu uniquement de lettres, de chiffres et du soulignement _ (Eviter les caractres de ponctuation et les espaces) valides: SMI2005, SMI_2005 invalides: SMI 2005, SMISMI-2005, SMI;2005

Remarque: en pseudo-code algorithmique, on va respecter les rgles cites, mme si on est libre dans la syntaxe

doit tre diffrent des mots rservs du langage (par exemple en Java: int, float, float, else, else, switch, switch, case, default, default, for, main, return, ) Java int, La longueur du nom doit tre infrieure la taille maximale spcifie par le langage utilis
Module I2, 1re anne SM/SMI 17 2005/2006 Module I2, 1re anne SM/SMI 18

2005/2006

Types des variables


Le type dune variable dtermine lensemble des valeurs quelle peut prendre, les types offerts par la plus part des langages sont: z Type num numrique (entier ou r rel)

Dclaration des variables


z z


z z

Byte (cod sur 1octet): de 0 255 Entier court (cod sur 2 octets) : -32 768 32 767 Entier long (cod sur 4 ou 8 octets) Rel simple pr prcision (cod sur 4 octets) Rel double pr prcision (cod sur 8 octets)

Rappel: toute variable utilise dans un programme doit avoir fait lobjet dune dclaration pralable En pseudo-code, on va adopter la forme suivante pour la dclaration de variables

Variables
z

liste d'identificateurs : type


i, j,k : entier x, y : rel OK: boolen ch1, ch2 : chane de caractres

Exemple: Variables

Type logique ou bool boolen: en: deux valeurs VRAI ou FAUX Type caract caractre: lettres majuscules, minuscules, chiffres, symboles,
exemples: A, a, 1, ?,

Type cha chane de caractre: toute suite de caractres,


exemples: " Nom, Pr Prnom", "code postale: 1000",
Module I2, 1re anne SM/SMI 19

Remarque: pour le type numrique on va se limiter aux entiers et rels sans considrer les sous types
Module I2, 1re anne SM/SMI 20

2005/2006

2005/2006

Linstruction daffectation
z

Quelques remarques
z

laffectation consiste attribuer une valeur une variable


(a consiste en fait remplir o modifier le contenu d'une zone mmoire)

En pseudo-code, l'affectation se note avec le signe Var e: attribue la valeur de e la variable Var

Beaucoup de langages de programmation (C/C++, Java, ) utilisent le signe gal = pour laffectation . Attention aux confusions:

l'affectation n'est pas commutative : A=B est diffrente de B=A l'affectation est diffrente d'une quation mathmatique :

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

A=A+1 a un sens en langages de programmation A+1=2 n'est pas possible en langages de programmation et n'est pas quivalente A=1

Ex valides:

i 1 x 10.3 ch2 ch1

j i OK FAUX x 4 OK "SMI"

k i+j ch1 "SMI" x j j x


21

(voir la dclaration des variables dans le transparent prcdent)


z

Certains langages donnent des valeurs par dfaut aux variables dclares. Pour viter tout problme il est prfrable d'initialiser les variables dclares

non valides: i 10.3

2005/2006

Module I2, 1re anne SM/SMI

2005/2006

Module I2, 1re anne SM/SMI

22

Exercices simples sur l'affectation (1)


Donnez les valeurs des variables A, B et C aprs excution des instructions suivantes ?
Variables A, B, C: Entier Dbut A3 B7 AB B A+5 CA+B CBA Fin

Exercices simples sur l'affectation (2)


Donnez les valeurs des variables A et B aprs excution des instructions suivantes ? Variables A, B : Entier Dbut A1 B2 AB BA Fin Les deux dernires instructions permettent-elles dchanger les valeurs de A et B ?
23 2005/2006 Module I2, 1re anne SM/SMI 24

2005/2006

Module I2, 1re anne SM/SMI

Exercices simples sur l'affectation (3)


Ecrire un algorithme permettant dchanger les valeurs de deux variables A et B

Expressions et oprateurs
z

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 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 de priorits
Module I2, 1re anne SM/SMI 26

2005/2006

Module I2, 1re anne SM/SMI

25

2005/2006

Priorit des oprateurs


z

Les instructions d'entres-sorties: lecture et criture (1)


z

Pour les oprateurs arithmtiques donns ci-dessus, l'ordre de priorit est le suivant (du plus prioritaire au moins prioritaire) :

Les instructions de lecture et d'criture permettent la machine de communiquer avec l'utilisateur La lecture permet d'entrer des donns partir du clavier

^ : (lvation la puissance) * , / (multiplication, division) % (modulo) + , - (addition, soustraction)

2+3*7 vaut 23

En pseudo-code, on note: lire (var) la machine met la valeur entre au clavier dans la zone mmoire nomme var Remarque: Le programme s'arrte lorsqu'il rencontre une instruction Lire et ne se poursuit qu'aprs la frappe dune valeur au clavier et de la touche Entre

exemple:
z

En cas de besoin (ou de doute), on utilise les parenthses pour indiquer les oprations effectuer en priorit exemple:
2005/2006

(2 + 3) * 7 vaut 35
27 2005/2006 Module I2, 1re anne SM/SMI 28

Module I2, 1re anne SM/SMI

Les instructions d'entres-sorties: lecture et criture (2)


z

Exemple (lecture et criture)


Ecrire un algorithme qui demande un nombre entier l'utilisateur, puis qui calcule et affiche le double de ce nombre

L'criture permet d'afficher des rsultats l'cran (ou de les crire dans un fichier)

En pseudo-code, on note: crire (var) la machine affiche le contenu de la zone mmoire var Conseil: Avant de lire une variable, il est fortement conseill dcrire des messages lcran, afin de prvenir lutilisateur de ce quil doit frapper

Algorithme Calcul_double variables A, B : entier Dbut crire("entrer la valeur de A ") lire(A) B 2*A crire("le double de ", A, "est :", B) Fin
2005/2006 Module I2, 1re anne SM/SMI 30

2005/2006

Module I2, 1re anne SM/SMI

29

Exercice (lecture et criture)


Ecrire un algorithme qui vous demande de saisir votre nom puis votre prnom et qui affiche ensuite votre nom complet
Algorithme AffichageNomComplet variables Nom, Prenom, Nom_Complet : chane de caractres Dbut crire("entrez votre nom") lire(Nom) crire("entrez votre prnom") lire(Prenom) Nom_Complet Nom & Prenom crire("Votre nom complet est : ", Nom_Complet) Fin
2005/2006 Module I2, 1re anne SM/SMI 31

Tests: instructions conditionnelles (1)


z

Les instructions conditionnelles servent n'excuter une instruction ou une squence d'instructions que si une condition est vrifie
On utilisera la forme suivante: Si condition alors

instruction ou suite d'instructions1 Sinon instruction ou suite d'instructions2 Finsi

la condition ne peut tre que vraie ou fausse si la condition est vraie, se sont les instructions1 qui seront excutes si la condition est fausse, se sont les instructions2 qui seront excutes la condition peut tre une condition simple ou une condition compose de plusieurs conditions
Module I2, 1re anne SM/SMI 32

2005/2006

Tests: instructions conditionnelles (2)


z

Exemple (SiAlorsSinon)
Algorithme AffichageValeurAbsolue (version1) Variable x : rel Dbut Ecrire " Entrez un rel : " 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

La partie Sinon n'est pas obligatoire, quand elle n'existe pas et que la condition est fausse, aucun traitement n'est ralis

On utilisera dans ce cas la forme simplifie suivante: Si condition alors instruction ou suite d'instructions1 Finsi

2005/2006

Module I2, 1re anne SM/SMI

33

2005/2006

Module I2, 1re anne SM/SMI

34

Exemple (SiAlors)
Algorithme AffichageValeurAbsolue (version2) 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

Exercice (tests)
Ecrire un algorithme qui demande un nombre entier l'utilisateur, puis qui teste et affiche s'il est divisible par 3 Algorithme Divsible_par3 Variable n : entier Dbut Ecrire " Entrez un entier : " Lire (n) Si (n%3=0) alors Ecrire (n," est divisible par 3") Sinon Ecrire (n," n'est pas divisible par 3") Finsi Fin
35 2005/2006 Module I2, 1re anne SM/SMI 36

2005/2006

Module I2, 1re anne SM/SMI

Conditions composes
z

Tables de vrit
C1 VRAI VRAI FAUX FAUX C1 C2 VRAI FAUX VRAI FAUX C2 VRAI FAUX VRAI FAUX C1 ET C2 VRAI FAUX FAUX FAUX C1 XOR C2 FAUX VRAI VRAI FAUX
Module I2, 1re anne SM/SMI 38

Une condition compose est une condition forme de plusieurs conditions simples relies par des oprateurs logiques: ET, OU, OU exclusif (XOR) et NON Exemples : x compris entre 2 et 6 : (x > 2) ET (x < 6)

C1 VRAI VRAI FAUX FAUX C1 VRAI FAUX

C2 VRAI FAUX VRAI FAUX NON C1 FAUX VRAI

C1 OU C2 VRAI VRAI VRAI FAUX

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)
VRAI VRAI FAUX FAUX
37 2005/2006

L'valuation d'une condition compose se fait selon des rgles prsentes gnralement dans ce qu'on appelle tables de vrit
Module I2, 1re anne SM/SMI

2005/2006

Tests imbriqus
z

Tests imbriqus: exemple (version 1)


Variable n : entier Dbut Ecrire ("entrez un nombre : ") Lire (n) Si n < 0 alors Ecrire ("Ce nombre est ngatif") Sinon Si n = 0 alors Ecrire ("Ce nombre est nul") Sinon Ecrire ("Ce nombre est positif") Finsi Finsi Fin
39 2005/2006 Module I2, 1re anne SM/SMI 40

Les tests peuvent avoir un degr quelconque d'imbrications Si condition1 alors Si condition2 alors instructionsA Sinon instructionsB Finsi Sinon Si condition3 alors instructionsC Finsi Finsi

2005/2006

Module I2, 1re anne SM/SMI

Tests imbriqus: exemple (version 2)


Variable n : entier Dbut Ecrire ("entrez un nombre : ") Lire (n) Si n < 0 alors Ecrire ("Ce nombre est ngatif") Finsi Si n = 0 alors Ecrire ("Ce nombre est nul") Finsi Si n > 0 alors Ecrire ("Ce nombre est positif") Finsi Fin Remarque : dans la version 2 on fait trois tests systmatiquement alors que dans la version 1, si le nombre est ngatif on ne fait qu'un seul test Conseil : utiliser les tests imbriqus pour limiter le nombre de tests et placer d'abord les conditions les plus probables
2005/2006 Module I2, 1re anne SM/SMI 41

Tests imbriqus: exercice


Le prix de photocopies dans une reprographie varie selon le nombre demand: 0,5 DH la copie pour un nombre de copies infrieur 10, 0,4DH pour un nombre compris entre 10 et 20 et 0,3DH au-del. Ecrivez un algorithme qui demande lutilisateur le nombre de photocopies effectues, qui calcule et affiche le prix payer

2005/2006

Module I2, 1re anne SM/SMI

42

Tests imbriqus: corrig de l'exercice


Variables copies : entier prix : rel Dbut Ecrire ("Nombre de photocopies : ") Lire (copies) Si copies < 10 Alors prix copies*0.5 Sinon Si copies < 20 prix copies*0.4 Sinon prix copies*0.3 Finsi Finsi Ecrire (Le prix payer est : , prix) Fin
2005/2006 Module I2, 1re anne SM/SMI 43

Instructions itratives: les boucles


z

Les boucles servent rpter l'excution 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 rpte des instructions tant qu'une certaine condition est ralise Les boucles jusqu' jusqu' : on y rpte des instructions jusqu' ce qu'une certaine condition soit ralise Les boucles pour ou avec compteur : on y rpte des instructions en faisant voluer un compteur (variable particulire) entre une valeur initiale et une valeur finale

(Dans ce cours, on va s'intresser essentiellement aux boucles Tant que et boucles Pour qui sont plus utilises et qui sont dfinies en Maple)
2005/2006 Module I2, 1re anne SM/SMI 44

Les boucles Tant que


TantQue (condition)
condition Vrai instructions

Les boucles Tant que : remarques


z

instructions FinTantQue

Le nombre d'itrations dans une boucle TantQue n'est pas connu au moment d'entre dans la boucle. Il dpend de l'volution de la valeur de condition Une des instructions du corps de la boucle doit absolument changer la valeur de condition de vrai faux (aprs un certain nombre d'itrations), sinon le programme tourne indfiniment

Faux

la condition (dite condition de contrle de la boucle) est value avant chaque itration si la condition est vraie, on excute 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
Module I2, 1re anne SM/SMI 45

Attention aux boucles infinies Exemple de boucle infinie : i2 TantQue i > 0 (attention aux erreurs de frappe : + au lieu de -) i i+1 FinTantQue
Module I2, 1re anne SM/SMI 46

2005/2006

2005/2006

Boucle Tant que : exemple1


Contrle de saisie d'une lettre majuscule jusqu ce que le caractre entr soit valable Variable C : caractre Debut Ecrire (" Entrez une lettre majuscule ") Lire (C) TantQue (C < 'A' ou C > 'Z') Ecrire ("Saisie errone. Recommencez") Lire (C) FinTantQue Ecrire ("Saisie valable") Fin
2005/2006 Module I2, 1re anne SM/SMI 47

Boucle Tant que : exemple2


Un algorithme qui dtermine le premier nombre entier N tel que la somme de 1 N dpasse strictement 100
version 1 Variables som, i : entier Debut i0 som 0 TantQue (som <=100) i i+1 som som+i FinTantQue Ecrire (" La valeur cherche est N= ", i) Fin
2005/2006 Module I2, 1re anne SM/SMI 48

Boucle Tant que : exemple2 (version2)


Un algorithme qui dtermine le premier nombre entier N tel que la somme de 1 N dpasse strictement 100 version 2: attention l'ordre des instructions et aux valeurs initiales Variables som, i : entier Debut som 0 i1 TantQue (som <=100) som som + i i i+1 FinTantQue Ecrire (" La valeur cherche est N= ", i-1) Fin
2005/2006 Module I2, 1re anne SM/SMI 49

Les boucles Pour


Pour compteur allant de initiale finale par pas valeur du pas instructions FinPour
i initiale

i n'a pas atteint finale Faux


2005/2006

Vrai

instructions

i i + pas

Module I2, 1re anne SM/SMI

50

Les boucles Pour


z

Droulement des boucles Pour


1) La valeur initiale est affecte la variable compteur 2) On compare la valeur du compteur et la valeur de finale :
a) Si la valeur du compteur est > la valeur finale dans le cas d'un pas positif (ou si compteur est < finale pour un pas ngatif), on sort de la boucle et on continue avec l'instruction qui suit FinPour b) Si compteur est <= finale dans le cas d'un pas positif (ou si compteur est >= finale pour un pas ngatif), instructions seront excutes i. Ensuite, la valeur de compteur est incrmente de la valeur du pas si pas est positif (ou dcrment si pas est ngatif)

Remarque : le nombre d'itrations dans une boucle Pour est connu avant le dbut de la boucle Compteur est une variable de type entier (ou caractre). Elle doit tre dclare Pas est un entier qui peut tre positif ou ngatif. Pas peut ne pas tre mentionn, car par dfaut sa valeur est gal 1. Dans ce cas, le nombre d'itrations est gal finale - initiale+ 1 Initiale et finale peuvent tre des valeurs, des variables dfinies avant le dbut de la boucle ou des expressions de mme type que compteur
Module I2, 1re anne SM/SMI 51

ii. On recommence l'tape 2 : La comparaison entre compteur et finale est de nouveau effectue, et ainsi de suite
2005/2006 52

2005/2006

Module I2, 1re anne SM/SMI

Boucle Pour : exemple1


Calcul de x la puissance n o x est un rel non nul et n un entier positif ou nul
Variables x, puiss : rel n, i : entier Debut Ecrire (" Entrez respectivement les valeurs de x et n ") Lire (x, n) puiss 1 Pour i allant de 1 n puiss puiss*x FinPour Ecrire (x, " la puissance ", n, " est gal ", puiss) Fin
2005/2006 Module I2, 1re anne SM/SMI 53

Boucle Pour : exemple1 (version 2)


Calcul de x la puissance n o x est un rel non nul et n un entier positif ou nul (version 2 avec un pas n ngatif) Variables x, puiss : rel n, i : entier Debut Ecrire (" Entrez respectivement les valeurs de x et n ") Lire (x, n) puiss 1 Pour i allant de n 1 par pas -1 puiss puiss*x FinPour Ecrire (x, " la puissance ", n, " est gal ", puiss) Fin
2005/2006 Module I2, 1re anne SM/SMI 54

Boucle Pour : remarque


z

Lien entre Pour et TantQue


La boucle Pour est un cas particulier de Tant Que (cas o le nombre d'itrations est connu et fix) . Tout ce qu'on peut crire avec Pour peut tre remplac avec TantQue (la rciproque est fausse)

Il faut viter de modifier la valeur du compteur (et de finale) l'intrieur de la boucle. En effet, une telle action :

perturbe le nombre d'itrations prvu par la boucle Pour rend difficile la lecture de l'algorithme prsente le risque d'aboutir une boucle infinie Exepmle : Pour i allant de 1 5 i i -1 crire(" i = ", i) Finpour

Pour compteur allant de initiale finale par pas valeur du pas instructions FinPour peut tre remplac par :
(cas d'un pas positif)

compteur initiale TantQue compteur <= finale instructions compteur compteur+pas FinTantQue
56

2005/2006

Module I2, 1re anne SM/SMI

55

2005/2006

Module I2, 1re anne SM/SMI

Lien entre Pour et TantQue: exemple


Calcul de x la puissance n o x est un rel non nul et n un entier positif ou nul (version avec TantQue) Variables x, puiss : rel n, i : entier
Debut Ecrire (" Entrez respectivement les valeurs de x et n ") Lire (x, n) puiss 1, i 1 TantQue (i<=n) puiss puiss*x i i+1 FinTantQue Ecrire (x, " la puissance ", n, " est gal ", puiss) Fin
2005/2006 Module I2, 1re anne SM/SMI 57

Boucles imbriques
z

Les instructions d'une boucle peuvent tre des instructions itratives. Dans ce cas, on aboutit des boucles imbriqu imbriques Exemple: Pour i allant de 1 5 Pour j allant de 1 i crire("O") FinPour crire("X") FinPour Ex Excution OX OOX OOOX OOOOX OOOOOX

2005/2006

Module I2, 1re anne SM/SMI

58

Les boucles Rpter jusqu


Rpter instructions Jusqu' Jusqu' condition
condition Vrai
z z

Boucle Rpter jusqu : exemple


Un algorithme qui dtermine le premier nombre entier N tel que la somme de 1 N dpasse strictement 100 (version avec rpter jusqu')

instructions

Faux

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 condition soit vrai (tant qu'elle est fausse)
Module I2, 1re anne SM/SMI 59

Variables som, i : entier Debut som 0 i0 Rpter i i+1 som som+i Jusqu' ( som > 100) Ecrire (" La valeur cherche est N= ", i) Fin
2005/2006 Module I2, 1re anne SM/SMI 60

2005/2006

10

Choix d'un type de boucle


z

Si on peut dterminer le nombre d'itrations avant l'excution de la boucle, il est plus naturel d'utiliser la boucle Pour S'il n'est pas possible de connatre le nombre d'itrations avant l'excution de la boucle, on fera appel l'une des boucles TantQue ou rpter jusqu' Pour le choix entre TantQue et jusqu' :

MAPLE


2005/2006

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'
Module I2, 1re anne SM/SMI 61

Pr Prsentation g gnrale et syntaxe des instructions de base

2005/2006

Module I2, 1re anne SM/SMI

62

Maple
z

Maple : les packages


z

Maple est un logiciel de calcul formel et numrique

Calcul formel : calcul sur des expressions littrales sans valuation numrique (Maple peut calculer des drives, des intgrales, des dveloppements limits, ) > int(1-x+x^3,x); > taylor(sin(x),x=0,6);
x2 x4 + 2 4 3 x x5 x+ + O(x 6 ) 6 120 xz

Maple dispose d'un certain nombre de packages (librairies). Chacun de ces packages est spcialis dans un traitement particulier. Comme exemples de ces packages, on a :

linalg : pour l'algbre linaire plots : pour le trac des courbes geometry : pour la gomtrie student : ce package est conu pour assister l'enseignement des mathmatiques de base (intressant pour les tudiants)

Calcul num numrique : calcul sur des valeurs (avec une grande prcision) > 30!; 265252859812191058636308480000000 1.414213562373095048801688 7242096980785696718753769
63

Pour utiliser certaines commandes et fonctions de Maple, il faut d'abord charger le package qui les contient avec la commande with :

> evalf(sqrt(2),50);
2005/2006

with (NomLibrairie) : charge le package NomLibrairie with (NomLib, NomCmd) : charge la commande NomCmd du package NomLib
Module I2, 1re anne SM/SMI 64

Module I2, 1re anne SM/SMI

2005/2006

Maple : Gnralits
z

Maple : nom et type des variables



65

Chaque instruction Maple doit se terminer par ; ou : Si l'instruction se termine par ; Maple l'excute et affiche le rsultat Si l'instruction se termine par : Maple l'excute sans afficher le rsultat Pour introduire un texte en tant que commentaire, il suffit de prcder la ligne par # ( le texte est alors ignor par Maple) Il est aussi possible d'crire des commentaires en cliquant sur l'icne T de la barre d'outils et sur l'icne [> pour revenir en mode normal Maple fait la distinction entre les lettres majuscules et minuscules (SMI, Smi, smI et smi sont diffrents pour Maple)
Module I2, 1re anne SM/SMI

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 diffrente des mots rservs (commandes Maple) Le type d'une variable est attribu automatiquement par Maple selon le contexte (exemple : si A prend la valeur 2, A sera de type integer, si A prend la valeur 2, A sera de type float) Les principaux types dfinis en Maple sont : integer (entier), float (rel), fraction (rationnel), complex (complexe), string (chane de caractres), boolean (boolen), array (tableau), matrix (matrice) Maple offre quelques commandes relatifs aux types : ex : whattype(var) donne le type de la variable var
Module I2, 1re anne SM/SMI 66

2005/2006

2005/2006

11

Maple : l'affectation
z

Maple : instructions d'entres-sorties


z

Le symbole d'affectation se note en Maple avec := i:= 1; j:= i+1; exemple : Attention : en Maple a=b n'est pas une instruction d'affectation, mais une expression de type logique (boolean) qui est vrai si les deux valeurs a et b sont gales et fausse sinon Maple n'value l'expression logique a=b que si on le demande explicitement. Pour cela, on utilisera la commande evalb exemple : a:= 1; b:= 2; > a=b; 1=2 > evalb (a=b); false
Module I2, 1re anne SM/SMI 67

print( print(var) permet d'afficher la valeur de la variable var (c'est l'quivalent de crire en pseudo code). Si var n'a pas de valeur, Maple affiche le nom de la variable print(` print(`chaine`) permet d'afficher la chane de caractres qui est entre ` `

> a:=1: b:=2: print(`a vaut`,a, `et b vaut`,b);

a vaut ,1 et b vaut, 2
z

readstat permet de saisir des donnes partir du clavier (c'est l'quivalent de lire en pseudo code)

Syntaxe: var:=readstat(`texte`) Maple affiche le texte entre ` ` et attend qu'on entre une valeur au clavier qui doit tre suivie de ; ou :

> n:=readstat(`entrez la valeur de n : `);


z

Remarque : il existe d'autres commandes pour les entres-sorties en Maple


Module I2, 1re anne SM/SMI 68

2005/2006

2005/2006

Maple : syntaxe des tests


criture en pseudo code Si condition instructions Finsi alors Traduction en Maple if fi; condition instructions then

Maple : syntaxe des boucles


criture en pseudo code TantQue condition instructions FinTantQue Traduction en Maple while condition instructions od; od do

Si

condition instructions 1 Sinon instructions2 Finsi

alors

condition instructions1 else instructions2 fi;

if

then Pour i allant de v1 v2 par pas p instructions FinPour for i from v1 to v2 by p do instructions od; od;

2005/2006

Module I2, 1re anne SM/SMI

69

2005/2006

Module I2, 1re anne SM/SMI

70

Fonctions et procdures
z

Certains problmes conduisent des programmes longs, difficiles crire et comprendre. On les dcoupe en des parties appeles soussous-programmes ou modules Les fonctions et les proc procdures sont des modules (groupe d'instructions) indpendants dsigns par un nom. Elles ont plusieurs int intrts :

Fonctions et proc procdures

permettent de "factoriser" les programmes, cd de mettre en commun les parties qui se rptent permettent une structuration et une meilleure lisibilit lisibilit des programmes facilitent la maintenance du code (il suffit de modifier une seule fois) ces procdures et fonctions peuvent ventuellement tre rutilis utilises dans d'autres programmes
Module I2, 1re anne SM/SMI 72


71

2005/2006

Module I2, 1re anne SM/SMI

2005/2006

12

Fonctions
z

Fonctions : exemples
z

Le rle d'une fonction en programmation est similaire celui d'une fonction en mathmatique : elle retourne un r rsultat partir des valeurs des param paramtres Une fonction s'crit en dehors du programme principal sous la forme :

Fonction nom_fonction (paramtres et leurs types) : type_fonction Instructions constituant le corps de la fonction retourne FinFonction
z

La fonction SommeCarre suivante calcule la somme des carres de deux rels x et y : Fonction SommeCarre (x : rel, y: rel ) : rel variable z : rel z x^2+y^2 retourne (z) FinFonction La fonction Pair suivante dtermine si un nombre est pair : Fonction Pair (n : entier ) : boolen retourne (n%2=0) FinFonction

z z

Pour le choix d'un nom de fonction il faut respecter les mmes rgles que celles pour les noms de variables type_fonction est le type du rsultat retourn L'instruction retourne sert retourner la valeur du rsultat
Module I2, 1re anne SM/SMI 73 2005/2006

2005/2006

Module I2, 1re anne SM/SMI

74

Utilisation des fonctions


z

Procdures
z

L'utilisation d'une fonction se fera par simple criture de son nom dans le programme principale. Le rsultat tant une valeur, devra tre affect ou tre utilis dans une expression, une criture, ... Exepmle : Algorithme exepmleAppelFonction variables z : rel, b : boolen Dbut b Pair(3) z 5*SommeCarre(7,2)+1 crire("SommeCarre(3,5)= ", SommeCarre(3,5)) Fin

Dans certains cas, on peut avoir besoin de rpter une tache dans plusieurs endroits du programme, mais que dans cette tache on ne calcule pas de rsultats ou qu'on calcule plusieurs rsultats la fois Dans ces cas on ne peut pas utiliser une fonction, on utilise une proc procdure Une proc procdure est un sous-programme semblable une fonction mais qui ne retourne rien

z z

Une procdure s'crit en dehors du programme principal sous la forme :

Proc Procdure nom_procdure (paramtres et leurs types) Instructions constituant le corps de la procdure FinProc FinProcdure
z

Lors de l'appel Pair(3) le param paramtre formel n est remplac par le param paramtre effectif 3
Module I2, 1re anne SM/SMI 75

Remarque : une procdure peut ne pas avoir de paramtres


Module I2, 1re anne SM/SMI 76

2005/2006

2005/2006

Appel d'une procdure


z

Paramtres d'une procdure


z

L'appel d'une procdure, se fait dans le programme principale ou dans une autre procdure par une instruction indiquant le nom de la procdure : Proc Procdure exemple_proc ()

Les paramtres servent changer des donnes entre le programme principale (ou la procdure appelante) et la procdure appele Les paramtres placs dans la dclaration d'une procdure sont appels param paramtres formels. Ces paramtres peuvent prendre toutes les valeurs possibles mais ils sont abstraits (n'existent pas rellement) Les paramtres placs dans l'appel d'une procdure sont appels param paramtres effectifs. ils contiennent les valeurs pour effectuer le traitement Le nombre de paramtres effectifs doit tre gal au nombre de paramtres formels. L'ordre et le type des paramtres doivent correspondre

FinProc FinProcdure Algorithme exepmleAppelProc exepmleAppelProcdure Dbut exemple_proc ()

Fin
z z

Remarque : contrairement l'appel d'une fonction, on ne peut pas affecter la procdure appele ou l'utiliser dans une expression. L'appel d'une procdure est une instruction autonome
Module I2, 1re anne SM/SMI 77

2005/2006

2005/2006

Module I2, 1re anne SM/SMI

78

13

Transmission des paramtres


Il existe deux modes de transmission de paramtres dans les langages de programmation :
z

Transmission des paramtres : exemples


Proc Procdure incrementer1 (x : entier par valeur, y : entier par adresse) x x+1 y y+1 FinProc FinProcdure Algorithme Test_incrementer1 variables n, m : entier Dbut n3 m3 incrementer1(n, m) crire (" n= ", n, " et m= ", m) Fin

La transmission par valeur : les valeurs des paramtres effectifs sont affectes aux paramtres formels correspondants au moment de l'appel de la procdure. Dans ce mode le paramtre effectif ne subit aucune modification La transmission par adresse (ou par r rfrence) : les adresses des paramtres effectifs sont transmises la procdure appelante. Dans ce mode, le paramtre effectif subit les mmes modifications que le paramtre formel lors de l'excution de la procdure

Remarque : le paramtre effectif doit tre une variable (et non une valeur) lorsqu'il s'agit d'une transmission par adresse

rsultat : n=3 et m=4

En pseudo-code, on va prciser explicitement le mode de transmission dans la dclaration de la procdure


Module I2, 1re anne SM/SMI 79

Remarque : l'instruction x x+1 n'a pas de sens avec un passage par valeur
2005/2006 Module I2, 1re anne SM/SMI 80

2005/2006

Transmission par valeur, par adresse : exemples


Proc Procdure qui calcule la somme et le produit de deux entiers :
Proc x,y: entier par valeur, som, Procdure SommeProduit (x som, prod : entier par adresse) som x+y prod x*y FinProc FinProcdure

Variables locales et globales (1)


z

On peut manipuler 2 types de variables dans un module (procdure ou fonction) : des variables locales et des variables globales. Elles se distinguent par ce qu'on appelle leur port porte (leur "champ de dfinition", leur "dure de vie") Une variable locale n'est connue qu' l'intrieur du module ou elle a t dfinie. Elle est cre l'appel du module et dtruite la fin de son excution Une variable globale est connue par l'ensemble des modules et le programme principale. Elle est dfinie durant toute lapplication et peut tre utilise et modifie par les diffrents modules du programme

Proc Procdure qui change le contenu de deux variabales :


Proc Procdure Echange (x : rel par adresse, y : rel par adresse) variables z : rel zx xy yz FinProc FinProcdure
2005/2006 Module I2, 1re anne SM/SMI 81
z

2005/2006

Module I2, 1re anne SM/SMI

82

Variables locales et globales (2)


z

Fonctions et procdures en Maple (1)


z

La manire de distinguer la dclaration des variables locales et globales diffre selon le langage

En Maple, il n'y a pas de distinction entre les notions de fonction et procdure. Les deux se dclarent de la mme faon comme suit : identificateur:= proc (paramtres) l1 , ..., l n ; local global g 1 , ..., g k ; instructions rsultat end; end;

En gnral, les variables dclares l'intrieur d'une fonction ou procdure sont considres comme variables locales

En pseudo-code, on va adopter cette rgle pour les variables locales et on dclarera les variables globales dans le programme principale Conseil : Il faut utiliser autant que possible des variables locales plutt que des variables globales. Ceci permet d'conomiser la mmoire et d'assurer l'indpendance de la procdure ou de la fonction

z z

Identificateur est le nom de la fonction ou de la procdure En Maple, on prcise explicitement si les variables sont locales ou globales par les mots cls local et global
Module I2, 1re anne SM/SMI 84

2005/2006

Module I2, 1re anne SM/SMI

83

2005/2006

14

Fonctions et procdures en Maple (2)


z

Procdures Maple : remarques


z

Une variable globale est connue en dehors de la procdure o elle a t dfinie dans l'ensemble de la session de calcul Les paramtres, les variables locales et globales sont facultatifs, ils peuvent ne pas figurer dans la dclaration Une procdure Maple peut rendre un seul rsultat (comme une fonction), plusieurs rsultats ou aucun rsultat Pour rendre plusieurs rsultats, on peut utiliser une liste, un ensemble, un tableau (on verra ces structures la sance prochaine) Le rsultat de la procdure est donn soit implicitement par la dernire instruction, soit par la commande RETURN RETURN ( v1 , ... , v n ) arrte le droulement de la procdure et renvoie les valeurs de v1 , ... , v n sous forme d'une squence
Module I2, 1re anne SM/SMI 85

Maple interdit la modification de la valeur d'un paramtre l'intrieur d'une procdure (pas de transmission par adresse) Aprs end; end; Maple affiche le texte de la procdure. Dans le cas o end est suivi de : rien n'est affich
> carre:=proc(x,y) > x^2+y^2; > end; carre:=proc (x, y) x^2+y^2 end proc

En Maple, une procdure peut tre appele sans tre affecte. Elle peut aussi tre affecte une variable
> carre(1,2); > a:=carre(3,3); 5 a := 18
Module I2, 1re anne SM/SMI 86

2005/2006

2005/2006

Procdures Maple : exemples (1)


> exemple:=proc(a,b) > local c,d,e; > c:=a+b; d:=a-b; e:=a*b; > RETURN(c,d,e); > d:=c+e; > end: > exemple(4,7); 11, -3, 28

Procdures Maple : exemples (2)


Exemple : procdure qui calcule la somme des n premiers entiers
> somme:=proc() > local n,i,som; > som:=0; > n:=readstat(`entrez la valeur de n : `); > for i from 1 to n do > som:=som+i; > od; > print(`somme=`,som); > end; > somme(); sur l'cran apparat le message : entrez la valeur de n : si on entre 3, on obtient somme=,6
Module I2, 1re anne SM/SMI 88

Remarque : l'excution s'arrte aprs RETURN. L'instruction d:=c+e n'est pas excute, le rsultat est donn sous forme d'une squence

2005/2006

Module I2, 1re anne SM/SMI

87

2005/2006

Rcursivit
z

Fonctions rcursives : exercice


z

Un module (fonction ou procdure) peut s'appeler lui-mme: on dit que c'est un module rcursif Tout module rcursif doit possder un cas limite (cas trivial) qui arrte la rcursivit Exemple : Calcul du factorielle
Fonction fact (n : entier ) : entier Si (n=0) alors retourne (1) Sinon retourne (n*fact (n-1)) n*fact(n Finsi FinFonction

Ecrivez une fonction rcursive (puis itrative) qui calcule le terme n de la suite de Fibonacci dfinie par : U(0)=U(1)=1 U(n)=U(n-1)+U(n-2)
Fonction Fib (n : entier ) : entier Variable res : entier Si (n=1 OU n=0) alors res 1 Sinon res Fib(n-1)+Fib(n-2) Finsi retourne (res) FinFonction

2005/2006

Module I2, 1re anne SM/SMI

89

2005/2006

Module I2, 1re anne SM/SMI

90

15

Fonctions rcursives : exercice (suite)


z

Procdures rcursives : exemple


z

Une fonction itrative pour le calcul de la suite de Fibonacci : Fonction Fib (n : entier ) : entier Variables i, AvantDernier, Dernier, Nouveau : entier Si (n=1 OU n=0) alors retourne (1) Finsi AvantDernier 1, Dernier 1 Pour i allant de 2 n Nouveau Dernier+ AvantDernier AvantDernier Dernier Dernier Nouveau FinPour retourne (Nouveau) FinFonction
Module I2, 1re anne SM/SMI 91

Une procdure rcursive qui permet d'afficher la valeur binaire d'un entier n

Proc Procdure binaire (n : entier ) Si (n<>0) alors binaire (n/2) crire (n mod 2) Finsi FinProc FinProcdure

Remarque: la solution rcursive est plus facile crire


2005/2006 2005/2006 Module I2, 1re anne SM/SMI 92

Exemple introductif
z

Supposons qu'on veut conserver les notes d'une classe de 30 tudiants pour extraire quelques informations. Par exemple : calcul du nombre d'tudiants ayant une note suprieure 10 Le seul moyen dont nous disposons actuellement consiste dclarer 30 variables, par exemple N1, , N30. Aprs 30 instructions lire, on doit crire 30 instructions Si pour faire le calcul nbre 0 Si (N1 >10) alors nbre nbre+1 nbre+1 FinSi . Si (N30>10) alors nbre nbre+1 nbre+1 FinSi

Les tableaux
z

c'est lourd crire Heureusement, les langages de programmation offrent la possibilit de rassembler toutes ces variables dans une seule structure de donn donne appele tableau
Module I2, 1re anne SM/SMI 94

2005/2006

Module I2, 1re anne SM/SMI

93

2005/2006

Tableaux
z

Tableaux : remarques
z

Un tableau est un ensemble d'lments de mme type dsigns par un identificateur unique Une variable entire nomme indice permet d'indiquer la position d'un lment donn au sein du tableau et de dterminer sa valeur La dclaration d'un tableau s'effectue en prcisant le type de ses lments et sa dimension (le nombre de ses lments)

L'accs un lment du tableau se fait au moyen de l'indice. Par exemple, notes[i] donne la valeur de l'lment i du tableau notes Selon les langages, le premier indice du tableau est soit 0, soit 1. Le plus souvent c'est 0 (c'est ce qu'on va adopter en pseudo-code). Dans ce cas, notes[i] dsigne l'lment i+1 du tableau notes Il est possible de dclarer un tableau sans prciser au dpart sa dimension. Cette prcision est faite ultrieurement
.

En pseudo code :

variable tableau identificateur[dimension] : type


Exemple :

Par exemple, quand on dclare un tableau comme paramtre d'une procdure, on peut ne prciser sa dimension qu'au moment de l'appel En tous cas, un tableau est inutilisable tant quon na pas prcis le nombre de ses lments

variable tableau notes[30] : r rel


On peut dfinir des tableaux de tous types : tableaux d'entiers, de rels, de caractres, de boolens, de chanes de caractres,
Module I2, 1re anne SM/SMI 95

Un grand avantage des tableaux est qu'on peut traiter les donnes qui y sont stockes de faon simple en utilisant des boucles
Module I2, 1re anne SM/SMI 96

2005/2006

2005/2006

16

Tableaux : exemples (1)


z

Tableaux : saisie et affichage


z

Pour le calcul du nombre d'tudiants ayant une note suprieure 10 avec les tableaux, on peut crire :
Variables i ,nbre : entier tableau notes[30] ] : rel

Procdures qui permettent de saisir et d'afficher les lments d'un tableau : Proc Procdure SaisieTab(n : entier par valeur, tableau T : rel par rfrence ) variable i: entier Pour i allant de 0 n-1 crire ("Saisie de l'lment ", i + 1) lire (T[i] ) FinPour Fin Proc Procdure Proc Procdure AfficheTab(n : entier par valeur, tableau T : rel par valeur ) variable i: entier Pour i allant de 0 n-1 crire ("T[",i, "] =", T[i]) FinPour Fin Proc Procdure

Dbut nbre 0 Pour i allant de 0 29 Si (notes[i] >10) alors nbre nbre+1 FinSi FinPour crire ("le nombre de notes suprieures 10 est : ", nbre) Fin
2005/2006 Module I2, 1re anne SM/SMI 97

2005/2006

Module I2, 1re anne SM/SMI

98

Tableaux : exemples d'appel


z

Tableaux : fonction longueur


La plus part des langages offrent une fonction longueur qui donne la dimension du tableau. Les procdures Saisie et Affiche peuvent tre rcrites comme suit : Proc Procdure SaisieTab( tableau T : rel par rfrence ) variable i: entier Pour i allant de 0 longueur(T)longueur(T)-1 crire ("Saisie de l'lment ", i + 1) lire (T[i] ) FinPour Fin Proc Procdure Proc Procdure AfficheTab(tableau T : rel par valeur ) variable i: entier Pour i allant de 0 longueur(T)-1 crire ("T[",i, "] =", T[i]) FinPour Fin Proc Procdure
2005/2006 Module I2, 1re anne SM/SMI 100

Algorithme principale o on fait l'appel des procdures SaisieTab et AfficheTab : Algorithme Tableaux variable p : entier tableau A[10] : rel Dbut p 10 SaisieTab(p, A) AfficheTab(10,A) Fin

2005/2006

Module I2, 1re anne SM/SMI

99

Tableaux : syntaxe Maple


z

Tableaux en malpe : exemple


z

En Maple, un tableau se dfinit en utilisant le type array comme suit :

Une procdure qui calcule la moyenne des lments d'un tableau :


> moyenne:=proc(n,T) > local i,s; > s:=0; > for i from 1 to n do > s:=s+T[i]; > od; > s/n; > end; > A:=array(1..4,[5,8,1,7]); > moyenne(4,A);

identificateur:= array (a..b) a..b)

Identificateur est le nom du tableau a et b sont les bornes de l'indice du tableau

Il est possible d'entrer directement toutes les valeurs d'un tableau. Exemple: > A:=array (1..4,[5,8,1,7]); A:=array(1..4,[5,8,1,7]);

Il est galement possible de les entrer un par un comme suit : Exemple : > T:=array (1..3); T:=array(1..3); > T[1]:=1: T[2]:=3: T[3]:=5:

Pour afficher tous les lments d'un tableau, il suffit d'utiliser la commande print > print(T); [1, 3, 5] print(T);
Module I2, 1re anne SM/SMI 101

rsultat : 21/4

2005/2006

2005/2006

Module I2, 1re anne SM/SMI

102

17

Tableaux deux dimensions


z

Exemples : lecture d'une matrice


z

Les langages de programmation permettent de dclarer des tableaux dans lesquels les valeurs sont repres par deux indices. Ceci est utile par exemple pour reprsenter des matrices En pseudo code, un tableau deux dimensions se dclare ainsi : variable tableau identificateur[dimension1] [dimension2] : type

Procdure qui permet de saisir les lments d'une matrice :


Proc Procdure SaisieMatrice(n : entier par valeur, m : entier par valeur , tableau A : rel par rfrence ) Dbut variables i,j : entier Pour i allant de 0 n-1 crire ("saisie de la ligne ", i + 1) Pour j allant de 0 m-1 crire ("Entrez l'lment de la ligne ", i + 1, " et de la colonne ", j+1) lire (A[i][j]) FinPour FinPour Fin Proc Procdure

Exemple : une matrice A de 3 linges et 4 colonnes dont les lments sont rels

variable tableau A[3][4] : r rel


z

A[i][j] permet d'accder llment de la matrice qui se trouve lintersection de la ligne i et de la colonne j
Module I2, 1re anne SM/SMI 103

2005/2006

2005/2006

Module I2, 1re anne SM/SMI

104

Exemples : affichage d'une matrice


z

Exemples : somme de deux matrices


z

Procdure qui permet d'afficher les lments d'une matrice : Proc Procdure AfficheMatrice(n : entier par valeur, m : entier par valeur ,tableau A : rel par valeur ) Dbut variables i,j : entier Pour i allant de 0 n-1 Pour j allant de 0 m-1 crire ("A[",i, "] [",j,"]=", A[i][j]) FinPour FinPour Fin Proc Procdure

Procdure qui calcule la somme de deux matrices : Proc Procdure SommeMatrices(n, m : entier par valeur, tableau A, B : rel par valeur , tableau C : rel par rfrence ) Dbut variables i,j : entier Pour i allant de 0 n-1 Pour j allant de 0 m-1 C[i][j] A[i][j]+B[i][j] FinPour FinPour Fin Proc Procdure

2005/2006

Module I2, 1re anne SM/SMI

105

2005/2006

Module I2, 1re anne SM/SMI

106

Appel des procdures dfinies sur les matrices


Exemple d'algorithme principale o on fait l'appel des procdures dfinies prcdemment pour la saisie, l'affichage et la somme des matrices :

Matrices : syntaxe Maple


z

Pour dfinir une matrice en Maple, on peut utiliser le type array ou le type matrix comme suit :

Algorithme Matrices variables tableau M1, M2, M3: : rel Dbut SaisieMatrice(3, 4, M1) SaisieMatrice(3, 4, M2) AfficheMatrice(3,4, M1) AfficheMatrice(3,4, M2) SommeMatrice(3, 4, M1,M2,M3) AfficheMatrice(3,4, M3) Fin
2005/2006 Module I2, 1re anne SM/SMI 107

identificateur:= array (a1..b1, a2..b2) identificateur:= matrix(n, matrix(n, m)

a1 et b1 sont les bornes du premier indice du tableau a2 et b2 sont les bornes du deuxime indice du tableau n est le nombre de lignes et m le nombre de colonnes

Il est possible d'entrer directement toutes les valeurs d'une matrice Exemple: > A:=matrix (2, 3, [ [7,0,1], [2,4,3]] ); A:=matrix(2,

Le type matrix est disponible dans le package linalg. Il faut donc charger ce package avec la commande with( with(linalg) linalg) avant d'utiliser ce type
Module I2, 1re anne SM/SMI 108

2005/2006

18

Tableaux : 2 problmes classiques


z

Recherche squentielle
z

Recherche de la valeur x dans un tableau T de N lments : Variables i: entier, Trouv : boolen

Recherche d dun lment dans un tableau

Recherche squentielle Recherche dichotomique

Tri d'un tableau


2005/2006

Tri par slection Tri rapide

i0 , Trouv Faux TantQue (i < N) ET (Trouv=Faux) Si (T[i]=x) alors Trouv Vrai Sinon ii+1 FinSi FinTantQue Si Trouv alors // c'est quivalent crire Si Trouv=Vrai alors crire ("x appartient au tableau") Sinon crire ("x n'appartient pas au tableau") FinSi
109 2005/2006 Module I2, 1re anne SM/SMI 110

Module I2, 1re anne SM/SMI

Recherche squentielle (version 2)


z

Notion de complexit d'un algorithme


z z

Une fonction Recherche qui retourne un boolen pour indiquer si une valeur x appartient un tableau T de dimension N. x , N et T sont des paramtres de la fonction

Pour valuer lefficacit efficacit d'un algorithme, on calcule sa complexit complexit Mesurer la complexit complexit revient quantifier le temps d'excution et l'espace mmoire ncessaire Le temps d'excution est proportionnel au nombre des op oprations effectues. Pour mesurer la complexit en temps, on met en vidence certaines oprations fondamentales, puis on les compte Le nombre d'oprations dpend gnralement du nombre de donn donnes traiter. Ainsi, la complexit est une fonction de la taille des donnes. On s'intresse souvent son ordre de grandeur asymptotique En gnral, on s'intresse la complexit complexit dans le pire des cas et la complexit complexit moyenne
Module I2, 1re anne SM/SMI 112

Fonction Recherche(x : rel, N: entier, tableau T : rel ) : boolen Variable i: entier Pour i allant de 0 N-1 Si (T[i]=x) alors retourne (Vrai) FinSi FinPour retourne (Faux) FinFonction
2005/2006 Module I2, 1re anne SM/SMI 111

2005/2006

Recherche squentielle : complexit


z

Recherche dichotomique
z

Pour valuer lefficacit de l'algorithme de recherche squentielle, on va calculer sa complexit dans le pire des cas. Pour cela on va compter le nombre de tests effectus Le pire des cas pour cet algorithme correspond au cas o x n'est pas dans le tableau T Si x nest pas dans le tableau, on effectue 3N tests : on rpte N fois les tests (i < N), (Trouv=Faux) et (T[i]=x) La complexit complexit dans le pire des cas est d'ordre N, (on note O(N)) Pour un ordinateur qui effectue 106 tests par seconde on a :

Dans le cas o le tableau est ordonn, on peut amliorer l'efficacit de la recherche en utilisant la mthode de recherche dichotomique Principe : diviser par 2 le nombre d'lments dans lesquels on cherche la valeur x chaque tape de la recherche. Pour cela on compare x avec T[milieu] :

z z

Si x < T[milieu], il suffit de chercher x dans la 1re moiti du tableau entre (T[0] et T[milieu-1]) Si x > T[milieu], il suffit de chercher x dans la 2me moiti du tableau entre (T[milieu+1] et T[N-1])

N temps
2005/2006

103 1ms

106 1s

109 16mn40s
113

Module I2, 1re anne SM/SMI

2005/2006

Module I2, 1re anne SM/SMI

114

19

Recherche dichotomique : algorithme


inf0 , supN-1, Trouv Faux TantQue (inf <=sup) ET (Trouv=Faux) milieu(inf+sup)div2 Si (x=T[milieu]) alors Trouv Vrai SinonSi (x>T[milieu]) alors infmilieu+1 Sinon supmilieu-1 FinSi FinSi FinTantQue Si Trouv alors crire ("x appartient au tableau") Sinon crire ("x n'appartient pas au tableau") FinSi
2005/2006 Module I2, 1re anne SM/SMI 115

Exemple d'excution
z

Considrons le tableau T :

10 15 17 18 24 27 30

Si la valeur cherch est 20 alors les indices inf, sup et milieu vont voluer comme suit :

inf sup milieu


z

0 8 4

5 8 6

5 5 5

6 5

Si la valeur cherch est 10 alors les indices inf, sup et milieu vont voluer comme suit :

inf sup milieu


2005/2006

0 8 4

0 3 1

2 3 2
116

Module I2, 1re anne SM/SMI

Recherche dichotomique : complexit


z

Tri d'un tableau


z

La complexit dans le pire des cas est d'ordre log 2 N L'cart de performances entre la recherche squentielle et la recherche dichotomique est considrable pour les grandes valeurs de N

Le tri consiste ordonner les lments du tableau dans lordre croissant ou dcroissant Il existe plusieurs algorithmes connus pour trier les lments dun tableau :

Exemple: au lieu de N=1milion 220 oprations effectuer avec une recherche squentielle il suffit de 20 oprations avec une recherche dichotomique

Le tri par slection Le tri par insertion Le tri rapide

Nous verrons dans la suite l'algorithme de tri par slection et l'algorithme de tri rapide. Le tri sera effectu dans l'ordre croissant
Module I2, 1re anne SM/SMI 118

2005/2006

Module I2, 1re anne SM/SMI

117

2005/2006

Tri par slection


z

Tri par slection : algorithme


z

Principe : l'tape i, on slectionne le plus petit lment parmi les (n - i +1) lments du tableau les plus droite. On l'change ensuite avec l'lment i du tableau

Supposons que le tableau est not T et sa taille N

9 4 1 7 3 Exemple : tape 1: on cherche le plus petit parmi les 5 lments du tableau. On lidentifie en troisime position, et on lchange alors avec llment 1 : 1 4 9 7 3

tape 2: on cherche le plus petit lment, mais cette fois partir du deuxime lment. On le trouve en dernire position, on l'change avec le deuxime:

Pour i allant de 0 N-2 indice_ppe i Pour j allant de i + 1 N-1 Si T[j] <T[indice_ppe] alors indice_ppe j Finsi FinPour temp T[indice_ppe] T[indice_ppe] T[i] T[i] temp FinPour
2005/2006 Module I2, 1re anne SM/SMI 120

2005/2006

tape 3:

9
119

Module I2, 1re anne SM/SMI

20

Tri par slection : complexit


z

Tri rapide
z

Quel que soit l'ordre du tableau initial, le nombre de tests et d'changes reste le mme On effectue N-1 tests pour trouver le premier lment du tableau tri, N-2 tests pour le deuxime, et ainsi de suite. Soit : (N-1)+(N-2)++1 = N(N-1)/2 On effectue en plus (N-1) changes. La complexit complexit du tri par slection est d'ordre N N la fois dans le meilleur des cas, en moyenne et dans le pire des cas Pour un ordinateur qui effectue 106 tests par seconde on a :

Le tri rapide est un tri rcursif bas sur l'approche "diviser pour rgner" (consiste dcomposer un problme d'une taille donne des sous problmes similaires mais de taille infrieure faciles rsoudre) Description du tri rapide :

1) on considre un lment du tableau qu'on appelle pivot 2) on partitionne le tableau en 2 sous tableaux : les lments infrieurs ou gaux pivot et les lments suprieurs pivot. on peut placer ainsi la valeur du pivot sa place dfinitive entre les deux sous tableaux 3) on rpte rcursivement ce partitionnement sur chacun des sous tableaux cres jusqu' ce qu'ils soient rduits un un seul lment
Module I2, 1re anne SM/SMI 122

N temps
2005/2006

103 1s

106 11,5 jours

109 32000 ans


121

2005/2006

Module I2, 1re anne SM/SMI

Procdure Tri rapide


Proc Procdure TriRapide(tableau T : rel par adresse, p,r: entier par valeur) variable q: entier Si p <r alors Partition(T,p,r,q) TriRapide(T,p,q-1) TriRapide(T,q+1,r) FinSi Fin Proc Procdure A chaque tape de rcursivit on partitionne un tableau T[p..r] en deux sous tableaux T[p..q-1] et T[q+1..r] tel que chaque lment de T[p..q-1] soit infrieur ou gal chaque lment de A[q+1..r] . L'indice q est calcul pendant la procdure de partitionnement
2005/2006 Module I2, 1re anne SM/SMI 123

Procdure de partition
Proc Procdure Partition(tableau T : rel par adresse, p,r: entier par valeur, q: entier par adresse ) Variables i, j: entier pivot: rel pivot T[p], ip+1, j r TantQue (i<=j) TantQue (i<=r et T[i] <=pivot) i i+1 FinTantQue TantQue (j>=p et T[j] >pivot ) j j-1 FinTantQue Si i <j alors Echanger(T[i], T[j]), i i+1, j j-1 FinSi FinTantQue Echanger(T[j], T[p]) qj Fin Proc Procdure 2005/2006 124 Module I2, 1re anne SM/SMI

Tri rapide : complexit et remarques


z

La complexit du tri rapide dans le pire des cas est en O(N) La complexit du tri rapide en moyenne est en O(N log N) Le choix du pivot influence largement les performances du tri rapide Le pire des cas correspond au cas o le pivot est chaque choix le plus petit lment du tableau (tableau dj tri) diffrentes versions du tri rapide sont proposs dans la littrature pour rendre le pire des cas le plus improbable possible, ce qui rend cette mthode la plus rapide en moyenne parmi toutes celles utilises

2005/2006

Module I2, 1re anne SM/SMI

125

21

Vous aimerez peut-être aussi