SMP_SMC

125
2007/2008 Module I2, 1ère année SMP /SMC 1 Cours d’Informatique 1ère année SMP/SMC 2007/2008, Semestre 2 Mouad BEN MAMOUN Moulay Driss RAHMANI Département de Mathématiques et d’Informatique, Université Mohammed V [email protected] [email protected]

description

SMP_SMC

Transcript of SMP_SMC

  • Cours dInformatique

    1re anne SMP/SMC2007/2008, Semestre 2 Mouad BEN MAMOUNMoulay Driss RAHMANIDpartement de Mathmatiques et dInformatique, Universit Mohammed [email protected] [email protected]

    Module I2, 1re anne SMP/SMCINDIANS (I)INDIANS (I)

  • Objectif et plan du coursObjectif:

    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

    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 SMP/SMC

  • Informatique?Techniques du traitement automatique de linformation au moyen des ordinateurs

    Elments dun systme informatique

    Module I2, 1re anne SMP/SMC

  • Matriel: Principaux lments dun PCUnit centrale (le botier)

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

    Priphriques

    Moniteur (l'cran), clavier, sourisModem, imprimante, scanner,

    Module I2, 1re anne SMP/SMC

  • Quest ce quun systme dexploitation?Ensemble de programmes qui grent le matriel et contrlent les applications

    Gestion des priphriques (affichage l'cran, lecture du clavier, pilotage dune imprimante, )

    Gestion des utilisateurs et de leurs donnes (comptes, partage des ressources, gestion des fichiers et rpertoires, )

    Interface avec lutilisateur (textuelle ou graphique): Interprtation des commandes

    Contrle des programmes (dcoupage en taches, partage du temps processeur, )

    Module I2, 1re anne SMP/SMC

  • Langages informatiquesUn langage informatique est un outil permettant de donner des ordres (instructions) la machine

    A chaque instruction correspond une action du processeur

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

    Exemple: un programme de gestion de comptes bancaires

    Contrainte: tre comprhensible par la machine

    Module I2, 1re anne SMP/SMC

  • Langage machineLangage 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 possibilits qui permettent de coder tous les caractres alphabtiques, numriques, et symboles tels que ?,*,&,

    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 SMP/SMC

  • L'assembleur 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

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

    Apparition des langages volus

    Module I2, 1re anne SMP/SMC

  • Langages haut niveauIntrts multiples pour le haut niveau:

    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, )Ncessit dun traducteur (compilateur/interprteur),

    excution plus ou moins lente selon le traducteur

    Module I2, 1re anne SMP/SMC

  • Compilateur/interprteurCompilateur: traduire le programme entier une fois pour toutes

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

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

    + excution instantane apprciable pour les dbutants- excution lente par rapport la compilation

    Module I2, 1re anne SMP/SMC

  • Langages de programmation: Deux types de langages:

    Langages procduraux Langages orients objets

    Exemples de langages:

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

    Choix dun langage?

    Module I2, 1re anne SMP/SMC

  • Etapes de ralisation dun programme

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

    Module I2, 1re anne SMP/SMC

  • AlgorithmiqueLe terme algorithme vient du nom du mathmaticien arabe Al-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

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

    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 SMP/SMC

  • Reprsentation dun algorithmeHistoriquement, deux faons pour reprsenter un algorithme: LOrganigramme: reprsentation graphique avec des symboles (carrs, losanges, etc.) offre une vue densemble de lalgorithmereprsentation quasiment abandonne aujourdhui

    Le pseudo-code: reprsentation textuelle avec une srie de conventions ressemblant un langage de programmation (sans les problmes de syntaxe) plus pratique pour crire un algorithmereprsentation largement utilise

    Module I2, 1re anne SMP/SMC

  • AlgorithmiqueNotions et instructions de base

    Module I2, 1re anne SMP/SMC

  • Notion de variable 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 dclares avant dtre utilises, elle doivent tre caractrises par :

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

    Module I2, 1re anne SMP/SMC

  • Choix des identificateurs (1)Le choix des noms de variables est soumis quelques rgles qui varient selon le langage, mais en gnral: Un nom doit commencer par une lettre alphabtique exemple valide: A1exemple invalide: 1A

    doit tre constitu uniquement de lettres, de chiffres et du soulignement _ (Eviter les caractres de ponctuation et les espaces) valides: SMIP2007, SMP_2007 invalides: SMP 2005,SMI-2007,SMP;2007

    doit tre diffrent des mots rservs du langage (par exemple en Java: int, float, else, switch, case, default, for, main, return, )

    La longueur du nom doit tre infrieure la taille maximale spcifie par le langage utilis

    Module I2, 1re anne SMP/SMC

  • 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

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

    Module I2, 1re anne SMP/SMC

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

    Byte (cod sur 1octet): de 0 255Entier court (cod sur 2 octets) : -32 768 32 767Entier long (cod sur 4 ou 8 octets) Rel simple prcision (cod sur 4 octets) Rel double prcision (cod sur 8 octets)Type logique ou boolen: deux valeurs VRAI ou FAUX

    Type caractre: lettres majuscules, minuscules, chiffres, symboles,

    exemples: A, a, 1, ?, Type chane de caractre: toute suite de caractres, exemples: " Nom, Prnom", "code postale: 1000",

    Module I2, 1re anne SMP/SMC

  • Dclaration des variablesRappel: toute variable utilise dans un programme doit avoir fait lobjet dune dclaration pralableEn pseudo-code, on va adopter la forme suivante pour la dclaration de variables

    Variables liste d'identificateurs : typeExemple:

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

    Remarque: pour le type numrique on va se limiter aux entiers et rels sans considrer les sous types

    Module I2, 1re anne SMP/SMC

  • Linstruction daffectation 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 e peut tre une valeur, une autre variable ou une expressionVar et e doivent tre de mme type ou de types compatibleslaffectation ne modifie que ce qui est gauche de la flche Ex valides: i 1 j i k i+j

    x 10.3 OK FAUX ch1 "SMI" ch2 ch1 x 4 x j (voir la dclaration des variables dans le transparent prcdent)non valides: i 10.3 OK "SMI"j x

    Module I2, 1re anne SMP/SMC

  • Quelques remarquesBeaucoup 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=Al'affectation est diffrente d'une quation mathmatique :

    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

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

    Module I2, 1re anne SMP/SMC

  • Exercices simples sur l'affectation (1)Donnez les valeurs des variables A, B et C aprs excution des instructions suivantes?

    Variables A, B, C: EntierDbutA 3B 7A BB A+5C A + BC B AFin

    Module I2, 1re anne SMP/SMC

  • Exercices simples sur l'affectation (2)Donnez les valeurs des variables A et B aprs excution des instructions suivantes?

    Variables A, B : EntierDbutA 1B 2A BB AFinLes deux dernires instructions permettent-elles dchanger les valeurs de A et B?

    Module I2, 1re anne SMP/SMC

  • Exercices simples sur l'affectation (3)Ecrire un algorithme permettant dchanger les valeurs de deux variables A et B

    Module I2, 1re anne SMP/SMC

  • Expressions et oprateursUne 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 de priorits

    Module I2, 1re anne SMP/SMC

  • Priorit des oprateurs

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

    ^ : (lvation la puissance) * , / (multiplication, division)% (modulo)+ , - (addition, soustraction) exemple: 2 + 3 * 7 vaut 23

    En cas de besoin (ou de doute), on utilise les parenthses pour indiquer les oprations effectuer en priorit exemple: (2 + 3) * 7 vaut 35

    Module I2, 1re anne SMP/SMC

  • Les instructions d'entres-sorties: lecture et criture (1)Les instructions de lecture et d'criture permettent la machine de communiquer avec l'utilisateur

    La lecture permet d'entrer des donns partir du clavier

    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

    Module I2, 1re anne SMP/SMC

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

    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

    Module I2, 1re anne SMP/SMC

  • Exemple (lecture et criture)Ecrire un algorithme qui demande un nombre entier l'utilisateur, puis qui calcule etaffiche le double de ce nombreAlgorithme Calcul_doublevariables A, B : entierDbutcrire("entrer le nombre ")lire(A)B 2*Acrire("le double de ", A, "est :", B)Fin

    Module I2, 1re anne SMP/SMC

  • 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 AffichageNomCompletvariables Nom, Prenom, Nom_Complet : chane de caractresDbutcrire("entrez votre nom")lire(Nom)crire("entrez votre prnom")lire(Prenom)Nom_Complet Nom & Prenomcrire("Votre nom complet est : ", Nom_Complet)Fin

    Module I2, 1re anne SMP/SMC

  • Tests: instructions conditionnelles (1)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 SMP/SMC

  • Tests: instructions conditionnelles (2)La partie Sinon n'est pas obligatoire, quand elle n'existe pas et que la condition est fausse, aucun traitement n'est ralis

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

    Module I2, 1re anne SMP/SMC

  • Exemple (SiAlorsSinon)Algorithme AffichageValeurAbsolue (version1)Variable x : rel DbutEcrire (" 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)FinsiFin

    Module I2, 1re anne SMP/SMC

  • Exemple (SiAlors)Algorithme AffichageValeurAbsolue (version2)Variable x,y : rel DbutEcrire (" Entrez un rel: ) Lire (x) y xSi (x < 0) alors y -xFinsiEcrire ("la valeur absolue de ", x, "est:",y)Fin

    Module I2, 1re anne SMP/SMC

  • Exercice (tests)Ecrire un algorithme qui demande un nombre entier l'utilisateur, puis qui teste etaffiche s'il est divisible par 3Algorithme Divsible_par3 Variable n : entier DbutEcrire " 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")FinsiFin

    Module I2, 1re anne SMP/SMC

  • Conditions composes 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)

    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 compose se fait selon des rgles prsentes gnralement dans ce qu'on appelle tables de vrit

    Module I2, 1re anne SMP/SMC

  • Tables de vrit

    C1C2C1 ET C2VRAIVRAIVRAIVRAIFAUXFAUXFAUXVRAIFAUXFAUXFAUXFAUX

    C1C2C1 OU C2VRAIVRAIVRAIVRAIFAUXVRAIFAUXVRAIVRAIFAUXFAUXFAUX

    C1C2C1 XOR C2VRAIVRAIFAUXVRAIFAUXVRAIFAUXVRAIVRAIFAUXFAUXFAUX

    C1NON C1 VRAIFAUXFAUXVRAI

    Module I2, 1re anne SMP/SMC

  • Tests imbriqusLes tests peuvent avoir un degr quelconque d'imbrications

    Si condition1 alorsSi condition2 alors instructionsASinoninstructionsB FinsiSinon Si condition3 alorsinstructionsCFinsiFinsi

    Module I2, 1re anne SMP/SMC

  • Tests imbriqus: exemple (version 1)Variable n : entierDbutEcrire ("entrez un nombre: ")Lire (n)Si (n < 0) alors Ecrire ("Ce nombre est ngatif")SinonSi (n = 0) alors Ecrire ("Ce nombre est nul")Sinon Ecrire ("Ce nombre est positif")FinsiFinsiFin

    Module I2, 1re anne SMP/SMC

  • Tests imbriqus: exemple (version 2)Variable n : entier DbutEcrire ("entrez un nombre: ")Lire (n) Si (n < 0) alorsEcrire ("Ce nombre est ngatif")FinsiSi (n = 0) alorsEcrire ("Ce nombre est nul")Finsi Si (n > 0) alors Ecrire ("Ce nombre est positif")FinsiFinRemarque : 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

    Module I2, 1re anne SMP/SMC

  • Tests imbriqus: exerciceLe 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

    Module I2, 1re anne SMP/SMC

  • Tests imbriqus: corrig de l'exerciceVariables copies : entier prix : relDbutEcrire ("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

    Module I2, 1re anne SMP/SMC

  • Instructions itratives: les bouclesLes 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' : 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)

    Module I2, 1re anne SMP/SMC

  • Les boucles Tant que

    TantQue (condition)

    instructions FinTantQue

    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 SMP/SMC

  • Les boucles Tant que : remarquesLe 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

    Attention aux boucles infiniesExemple de boucle infinie :

    i 2TantQue (i > 0) i i+1 (attention aux erreurs de frappe : + au lieu de -)FinTantQue

    Module I2, 1re anne SMP/SMC

  • Boucle Tant que : exemple1Contrle de saisie d'une lettre majuscule jusqu ce que le caractre entr soit valable

    Variable C : caractreDebutEcrire (" Entrez une lettre majuscule ")Lire (C)TantQue (C < 'A' ou C > 'Z') Ecrire ("Saisie errone. Recommencez")Lire (C)FinTantQueEcrire ("Saisie valable")Fin

    Module I2, 1re anne SMP/SMC

  • Boucle Tant que : exemple2Un algorithme qui dtermine le premier nombre entier N tel que la somme de 1 N dpasse strictement 100

    version 1Variables som, i : entierDebut i 0 som 0 TantQue (som

  • 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 initialesVariables som, i : entierDebutsom 0 i 1 TantQue (som

  • Les boucles Pour

    Pour compteur allant de initiale finale par pas valeur du pas

    instructions FinPour

    Module I2, 1re anne SMP/SMC

  • Les boucles PourRemarque : 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 SMP/SMC

  • Droulement des boucles PourLa valeur initiale est affecte la variable compteur

    On compare la valeur du compteur et la valeur de finale :

    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

    Si compteur est

  • Boucle Pour : exemple1Calcul 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 : entierDebutEcrire (" Entrez la valeur de x ")Lire (x)Ecrire (" Entrez la valeur de n ")Lire (n)

    puiss 1 Pour i allant de 1 n puiss puiss*x FinPourEcrire (x, " la puissance ", n, " est gal ", puiss)Fin

    Module I2, 1re anne SMP/SMC

  • 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 ngatif)

    Variables x, puiss : rel n, i : entierDebutEcrire (" 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 FinPourEcrire (x, " la puissance ", n, " est gal ", puiss)Fin

    Module I2, 1re anne SMP/SMC

  • Boucle Pour : remarqueIl 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 Pourrend difficile la lecture de l'algorithmeprsente le risque d'aboutir une boucle infinie

    Exemple : Pour i allant de 1 5 i i -1 crire(" i = ", i) Finpour

    Module I2, 1re anne SMP/SMC

  • Lien entre Pour et TantQueLa 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)

    Pour compteur allant de initiale finale par pas valeur du pas

    instructions FinPourpeut tre remplac par :compteur initiale(cas d'un pas positif)TantQue compteur

  • Lien entre Pour et TantQue: exempleCalcul 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 : entierDebutEcrire (" Entrez la valeur de x ")Lire (x) Ecrire (" Entrez la valeur de n ")Lire (n)

    puiss 1 i 1TantQue (i

  • Boucles imbriquesLes instructions d'une boucle peuvent tre des instructions itratives. Dans ce cas, on aboutit des boucles imbriques

    Exemple:Excution

    Pour i allant de 1 5 OXPour j allant de 1 iOOXcrire("O")OOOX FinPourOOOOXcrire("X") OOOOOXFinPour

    Module I2, 1re anne SMP/SMC

  • Les boucles Rpter jusqu

    Rpter

    instructions Jusqu' condition

    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 SMP/SMC

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

    Variables som, i : entierDebutsom 0 i 0Rpteri i+1som som+iJusqu' ( som > 100) Ecrire (" La valeur cherche est N= ", i) Fin

    Module I2, 1re anne SMP/SMC

  • Choix d'un type de boucleSi 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' :

    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 SMP/SMC

  • MAPLEPrsentation gnrale et syntaxe des instructions de base

    Module I2, 1re anne SMP/SMC

  • MapleMaple 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);

    Calcul numrique : calcul sur des valeurs (avec une grande prcision)

    > 30!; 265252859812191058636308480000000> evalf(sqrt(2),50); 1.414213562373095048801688 7242096980785696718753769

    Module I2, 1re anne SMP/SMC

  • Maple : les packagesMaple 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 linaireplots : pour le trac des courbes geometry : pour la gomtriestudent : ce package est conu pour assister l'enseignement des mathmatiques de base (intressant pour les tudiants)Pour utiliser certaines commandes et fonctions de Maple, il faut d'abord charger le package qui les contient avec la commande with :

    with (NomLibrairie) : charge le package NomLibrairiewith (NomLib, NomCmd) : charge la commande NomCmd du package NomLib

    Module I2, 1re anne SMP/SMC

  • Maple : GnralitsChaque instruction Maple doit se terminer par ; ou :

    Si l'instruction se termine par ; Maple l'excute et affiche le rsultatSi 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 SMP/SMC

  • Maple : nom et type des variablesLe 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 , 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 SMP/SMC

  • Maple : l'affectationLe symbole d'affectation se note en Maple avec :=

    exemple : i:= 1; j:= i+1;

    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 SMP/SMC

  • Maple : instructions d'entres-sorties print(var) permet d'afficher la valeur de la variable var (c'est l'quivalent de crire en pseudo code). Si var n'a pas de valeur, Maple affiche le nom de la variable

    print(`chaine`) permet d'afficher la 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

    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 : `);

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

    Module I2, 1re anne SMP/SMC

  • Maple : syntaxe des tests criture en pseudo codeTraduction en Maple

    Si condition alors if condition then instructions instructions Finsi fi;

    Si condition alors if condition theninstructions 1 instructions1Sinon elseinstructions2 instructions2Finsi fi;

    Module I2, 1re anne SMP/SMC

  • Maple : syntaxe des boucles criture en pseudo codeTraduction en Maple

    TantQue condition while condition do instructions instructions FinTantQue od;

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

    Module I2, 1re anne SMP/SMC

  • ALGORITHMIQUEFonctions et procdures

    Module I2, 1re anne SMP/SMC

  • Fonctions et procduresCertains problmes conduisent des programmes longs, difficiles crire et comprendre. On les dcoupe en des parties appeles sous-programmes ou modules

    Les fonctions et les procdures sont des modules (groupe d'instructions) indpendants dsigns par un nom. Elles ont plusieurs intrts :

    permettent de "factoriser" les programmes, cd de mettre en commun les parties qui se rptent

    permettent une structuration et une meilleure lisibilit des programmes

    facilitent la maintenance du code (il suffit de modifier une seule fois)

    ces procdures et fonctions peuvent ventuellement tre rutilises dans d'autres programmes

    Module I2, 1re anne SMP/SMC

  • FonctionsLe rle d'une fonction en programmation est similaire celui d'une fonction en mathmatique : elle retourne un rsultat partir des valeurs des 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 fonctionretourne FinFonction

    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 SMP/SMC

  • Fonctions : exemplesLa fonction SommeCarre suivante calcule la somme des carres de deux rels x et y :

    Fonction SommeCarre (x : rel, y: rel ) : relvariable z : relz x^2+y^2retourne (z) FinFonction

    La fonction Pair suivante dtermine si un nombre est pair :

    Fonction Pair (n : entier ) : boolenretourne (n%2=0) FinFonction

    Module I2, 1re anne SMP/SMC

  • Utilisation des fonctionsL'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

    Lors de l'appel Pair(3) le paramtre formel n est remplac par le paramtre effectif 3

    Module I2, 1re anne SMP/SMC

  • ProcduresDans 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 procdure

    Une procdure est un sous-programme semblable une fonction mais qui ne retourne rien

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

    Procdure nom_procdure (paramtres et leurs types)

    Instructions constituant le corps de la procdureFinProcdureRemarque : une procdure peut ne pas avoir de paramtres

    Module I2, 1re anne SMP/SMC

  • Appel d'une procdureL'appel d'une procdure, se fait dans le programme principale ou dans une autre procdure par une instruction indiquant le nom de la procdure :

    Procdure exemple_proc () FinProcdure

    Algorithme exepmleAppelProcdure Dbut exemple_proc () Fin

    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 SMP/SMC

  • Paramtres d'une procdureLes 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 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 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

    Module I2, 1re anne SMP/SMC

  • Transmission des paramtresIl existe deux modes de transmission de paramtres dans les langages de programmation :

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

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

    Module I2, 1re anne SMP/SMC

  • Transmission des paramtres : exemplesProcdure incrementer1 (x : entier par valeur, y : entier par adresse)x x+1y y+1FinProcdure

    Algorithme Test_incrementer1variables n, m : entier Dbut n 3m 3incrementer1(n, m) rsultat :crire (" n= ", n, " et m= ", m) n=3 et m=4Fin

    Remarque : l'instruction x x+1 n'a pas de sens avec un passage par valeur

    Module I2, 1re anne SMP/SMC

  • Transmission par valeur, par adresse : exemplesProcdure qui calcule la somme et le produit de deux entiers :Procdure SommeProduit (x,y: entier par valeur, som, prod : entier par adresse)som x+yprod x*yFinProcdure

    Procdure qui change le contenu de deux variabales :Procdure Echange (x : rel par adresse, y : rel par adresse)variables z : relz xx yy zFinProcdure

    Module I2, 1re anne SMP/SMC

  • Variables locales et globales (1)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 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

    Module I2, 1re anne SMP/SMC

  • Variables locales et globales (2)La manire de distinguer la dclaration des variables locales et globales diffre selon le langage

    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

    Module I2, 1re anne SMP/SMC

  • Fonctions et procdures en Maple (1)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) local; global ; instructions rsultat end;

    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 SMP/SMC

  • Fonctions et procdures en Maple (2)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 ( ) arrte le droulement de la procdure et renvoie les valeurs de sous forme d'une squence

    Module I2, 1re anne SMP/SMC

  • Procdures Maple : remarquesMaple interdit la modification de la valeur d'un paramtre l'intrieur d'une procdure (pas de transmission par adresse)

    Aprs 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);5> a:=carre(3,3);a := 18

    Module I2, 1re anne SMP/SMC

  • 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

    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

    Module I2, 1re anne SMP/SMC

  • 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 SMP/SMC

  • RcursivitUn 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 ) : entierSi (n=0) alors retourne (1)Sinon retourne (n*fact(n-1))Finsi FinFonction

    Module I2, 1re anne SMP/SMC

  • Fonctions rcursives : exerciceEcrivez 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 ) : entierVariable res : entierSi (n=1 OU n=0) alors res 1Sinon res Fib(n-1)+Fib(n-2)Finsiretourne (res) FinFonction

    Module I2, 1re anne SMP/SMC

  • Fonctions rcursives : exercice (suite)Une fonction itrative pour le calcul de la suite de Fibonacci :

    Fonction Fib (n : entier ) : entier Variables i, AvantDernier, Dernier, Nouveau : entierSi (n=1 OU n=0) alors retourne (1)FinsiAvantDernier 1, Dernier 1 Pour i allant de 2 n Nouveau Dernier+ AvantDernier AvantDernier Dernier Dernier NouveauFinPour retourne (Nouveau)FinFonction Remarque: la solution rcursive est plus facile crire

    Module I2, 1re anne SMP/SMC

  • Procdures rcursives : exemple Une procdure rcursive qui permet d'afficher la valeur binaire d'un entier n

    Procdure binaire (n : entier ) Si (n0) alors binaire (n/2) crire (n mod 2)FinsiFinProcdure

    Module I2, 1re anne SMP/SMC

  • ALGORITHMIQUELes tableaux

    Module I2, 1re anne SMP/SMC

  • Exemple introductifSupposons 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 0Si (N1 >10) alors nbre nbre+1 FinSi.Si (N30>10) alors nbre nbre+1 FinSic'est lourd crireHeureusement, les langages de programmation offrent la possibilit de rassembler toutes ces variables dans une seule structure de donne appele tableau

    Module I2, 1re anne SMP/SMC

  • Tableaux 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)

    En pseudo code : variable tableau identificateur[dimension] : typeExemple :variable tableau notes[30] : 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 SMP/SMC

  • Tableaux : remarquesL'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.

    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

    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 SMP/SMC

  • Tableaux : exemples (1)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 Dbutnbre 0Pour i allant de 0 29 Si (notes[i] >10) alors nbre nbre+1 FinSiFinPourcrire ("le nombre de notes suprieures 10 est : ", nbre)Fin

    Module I2, 1re anne SMP/SMC

  • Tableaux : saisie et affichageProcdures qui permettent de saisir et d'afficher les lments d'un tableau :

    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] ) FinPourFin Procdure

    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]) FinPourFin Procdure

    Module I2, 1re anne SMP/SMC

  • Tableaux : exemples d'appelAlgorithme principale o on fait l'appel des procdures SaisieTab et AfficheTab :

    Algorithme Tableaux variable p : entier tableau A[10] : rel Dbutp 10SaisieTab(p, A)AfficheTab(10,A)Fin

    Module I2, 1re anne SMP/SMC

  • Tableaux : fonction longueurLa plus part des langages offrent une fonction longueur qui donne la dimension du tableau. Les procdures Saisie et Affiche peuvent tre rcrites comme suit : Procdure SaisieTab( tableau T : rel par rfrence ) variable i: entier Pour i allant de 0 longueur(T)-1 crire ("Saisie de l'lment ", i + 1) lire (T[i] ) FinPourFin ProcdureProcdure AfficheTab(tableau T : rel par valeur ) variable i: entier Pour i allant de 0 longueur(T)-1 crire ("T[",i, "] =", T[i]) FinPourFin Procdure

    Module I2, 1re anne SMP/SMC

  • Tableaux : syntaxe MapleEn Maple, un tableau se dfinit en utilisant le type array comme suit :

    identificateur:= array (a..b)

    Identificateur est le nom du tableaua 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]);

    Il est galement possible de les entrer un par un comme suit :

    Exemple : > 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]

    Module I2, 1re anne SMP/SMC

  • Tableaux en malpe : exempleUne 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);rsultat : 21/4

    Module I2, 1re anne SMP/SMC

  • Tableaux deux dimensionsLes 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

    Exemple : une matrice A de 3 lignes et 4 colonnes dont les lments sont relsvariable tableau A[3][4] : rel

    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 SMP/SMC

  • Exemples : lecture d'une matriceProcdure qui permet de saisir les lments d'une matrice :

    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-1crire ("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 FinPourFin Procdure

    Module I2, 1re anne SMP/SMC

  • Exemples : affichage d'une matriceProcdure qui permet d'afficher les lments d'une matrice :

    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-1Pour j allant de 0 m-1 crire ("A[",i, "] [",j,"]=", A[i][j]) FinPour FinPourFin Procdure

    Module I2, 1re anne SMP/SMC

  • Exemples : somme de deux matricesProcdure qui calcule la somme de deux matrices :

    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-1Pour j allant de 0 m-1 C[i][j] A[i][j]+B[i][j] FinPour FinPourFin Procdure

    Module I2, 1re anne SMP/SMC

  • 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 :

    Algorithme Matrices variables tableau M1[3][4],M2 [3][4],M3 [3][4] : rel DbutSaisieMatrice(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

    Module I2, 1re anne SMP/SMC

  • Matrices : syntaxe MaplePour dfinir une matrice en Maple, on peut utiliser le type array ou le type matrix comme suit :

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

    a1 et b1 sont les bornes du premier indice du tableau a2 et b2 sont les bornes du deuxime indice du tableaun 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]] );

    Le type matrix est disponible dans le package linalg. Il faut donc charger ce package avec la commande with(linalg) avant d'utiliser ce type

    Module I2, 1re anne SMP/SMC

  • Tableaux : 2 problmes classiques

    Recherche dun lment dans un tableau

    Recherche squentielleRecherche dichotomique

    Tri d'un tableau

    Tri par slectionTri rapide

    Module I2, 1re anne SMP/SMC

  • Recherche squentielle Recherche de la valeur x dans un tableau T de N lments :

    Variables i: entier, Trouv : boolen i0 , Trouv FauxTantQue (i < N) ET (Trouv=Faux)Si (T[i]=x) alors Trouv VraiSinon ii+1 FinSiFinTantQueSi Trouv alors // c'est quivalent crire Si Trouv=Vrai alorscrire ("x appartient au tableau")Sinoncrire ("x n'appartient pas au tableau")FinSi

    Module I2, 1re anne SMP/SMC

  • Recherche squentielle (version 2)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

    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) FinSiFinPourretourne (Faux)FinFonction

    Module I2, 1re anne SMP/SMC

  • Notion de complexit d'un algorithme Pour valuer lefficacit d'un algorithme, on calcule sa complexit

    Mesurer la complexit revient quantifier le temps d'excution et l'espace mmoire ncessaire

    Le temps d'excution est proportionnel au nombre des 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 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 dans le pire des cas et la complexit moyenne

    Module I2, 1re anne SMP/SMC

  • Recherche squentielle : complexitPour 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 dans le pire des cas est d'ordre N, (on note O(N))

    Pour un ordinateur qui effectue 106 tests par seconde on a :

    N103106109temps1ms1s16mn40s

    Module I2, 1re anne SMP/SMC

  • Recherche dichotomiqueDans 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] :

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

    Module I2, 1re anne SMP/SMC

  • Recherche dichotomique : algorithme inf0 , supN-1, Trouv FauxTantQue (inf T[milieu]) alors infmilieu+1 Sinon supmilieu-1 FinSiFinSiFinTantQueSi Trouv alors crire ("x appartient au tableau")Sinoncrire ("x n'appartient pas au tableau")FinSi

    Module I2, 1re anne SMP/SMC

  • Exemple d'excutionConsidrons le tableau T :

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

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

    4610151718242730

    inf0556sup8855milieu465

    inf002sup833milieu412

    Module I2, 1re anne SMP/SMC

  • Recherche dichotomique : complexitLa complexit dans le pire des cas est d'ordre

    L'cart de performances entre la recherche squentielle et la recherche dichotomique est considrable pour les grandes valeurs de N

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

    Module I2, 1re anne SMP/SMC

  • Tri d'un tableauLe tri consiste ordonner les lments du tableau dans lordre croissant ou dcroissant

    Il existe plusieurs algorithmes connus pour trier les lments dun tableau :

    Le tri par slectionLe tri par insertionLe 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 SMP/SMC

  • Tri par slectionPrincipe : 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

    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 :

    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:

    tape 3:

    94173

    14973

    13974

    13479

    Module I2, 1re anne SMP/SMC

  • Tri par slection : algorithmeSupposons que le tableau est not T et sa taille N

    Pour i allant de 0 N-2indice_ppe i Pour j allant de i + 1 N-1 Si T[j]

  • Tri par slection : complexitQuel 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 du tri par slection est d'ordre 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 :

    N103106109temps1s11,5 jours32000 ans

    Module I2, 1re anne SMP/SMC

  • Tri rapideLe 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 SMP/SMC

  • Procdure Tri rapideProcdure TriRapide(tableau T : rel par adresse, p,r: entier par valeur) variable q: entier Si p
  • Procdure de partitionProcdure Partition(tableau T : rel par adresse, p,r: entier par valeur, q: entier par adresse ) Variables i, j: entier pivot: relpivot T[p], ip+1, j rTantQue (i
  • Tri rapide : complexit et remarquesLa 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

    Module I2, 1re anne SMP/SMC