• Aucun résultat trouvé

algo-prog Prepa INSA 1: Fonctions

N/A
N/A
Protected

Academic year: 2022

Partager "algo-prog Prepa INSA 1: Fonctions"

Copied!
36
0
0

Texte intégral

(1)

Les fonctions

SP qui retourne une valeur

(2)

Sous-programme avec/sans résultat

Deux types de Sous-programme (SP)

• SP qui retourne une valeur résultat

toujours appelé fonction

• SP qui ne retourne pas de résultat

appelé procédure ou fonction (selon les habitudes)

(3)

Fonction : SP avec résultat

• Le résultat d'une fonction est une valeur

d'un certain type

valeur calculée par la fonction

valeur utilisée par le programme qui appelle la fonction

• Une fonction booléenne retourne un résultat de type booléen

• Une fonction réelle retourne une valeur de type réel.

(4)

Que contient l'entête d'une fonction en pseudo-code ?

1. nom de la fonction

2. liste des paramètres :

nom du paramètre type du paramètre rôle du paramètre

3. type et description du résultat s'il y en a un (voir exemples sur les deux diapos précédantes)

(5)

Exemple de SP avec et sans résultat

Sans résultat

PROCEDURE afficheSuiteTcheque(n : entier)

PROCEDURE dessineEtoile(nbBr:entier, larg:entier) Avec résultat

FONCTION longSuiteTcheque(n:entier)  entier FONCTION estBissextile(an:entier)  booléen FONCTION pourcentPairTcheq(n:entier)  réel

(6)

Entêtes de fonctions

FONCTION longSuiteTcheque(n:entier)  entier

//retourne le nombre de termes de la suite tchèque de n FONCTION estBissextile(an:entier)  booléen

// retourne vrai si an est une année bissextile FONCTION pourcentPairTcheq(n:entier)  réel

// retourne le pourcentage de nombres pairs dans la suite tchèque de n

(7)

Exemple d'appels de fonctions

Deux appels de procédures

afficheSuiteTcheque(3,Vrai) dessineEtoile(5,10)

Trois appels de fonctions

l longueurSuiteTcheque(3) si estBissextile(200)alors

...

afficher(pourctPairTcheque(3), "% de pairs")

(8)

Que faire du résultat d'une fonction ?

Une fonction qui retourne un résultat est appelée dans le code

à la place d'une valeur de même type que le résultat

Exemple :

long1 245

long2 longueurSuiteTcheque(3) print(555)

print(longueurSuiteTcheque(4444))

(9)

Appel d'une fonction (SP avec résultat)

pour appeler une fonction, on écrit

le nom de la fonction suivi de parenthèses, dans une instruction qui exploite le résultat

uneVar nomFct(liste des valeurs des param.)

Exemples d’appels de fonctions

y cos(30)

NbPet nbArea(im23, ’cat’) + nbArea(im23, ’dog’) affiche ("Surface du cone : ", surfaceCone(r,h))

(10)

FONCTION nomFct(par1 : type1, …) typeRes // rôle de la fct, résultat et rôle des paramètres Variables locales :

v1 : type // rôle de la variable

varRes : type // variable contenant le résultat DEBUT

<instructions>

RETOURNE varRes FIN FONCTION

(11)

FONCTION nbOccurences (car : caractère,

ch : chaine )  entier // retourne le nombre de caractères car

dans le texte ch

nbE nbOccurences('e', "table") nbI nbOccurences('i', "table") afficher ("il y a ")

afficher (nbOccurences('o', "table")) afficher (" 'o' dans le mot table") Trois exemples d'appel de cette fonction

Entête de la fonction

Exemple de fonction

(12)

FONCTION nbOccurences (car : caractère,

ch : chaine)  entier

// retourne le nombre de caractères car dans le texte ch Variables locales :

i : entier // position d’un caratère dans le texte

nbOcc: entier // nb de caract. car trouvés dans le texte ch

DEBUT FONCTION nbOcc 0

i 0

TANT QUE i < longueur(ch) SI ch[i] =? car alors

nbOcc nbOcc + 1 FIN SI

i i + 1 FIN TANT QUE

RETOURNER nbOcc FIN FONCTION

(13)

Exercice : moy de 10 notes valides

• Calculer et afficher la moyenne de 10 notes

saisies au clavier en s'assurant que chaque note est bien dans l'intervalle [0,20].

Remarque : dans cet exercice on ne souhaite pas "conserver" les notes

Exercice

(14)

Exercice : moy de 10 notes valides

• Calculer et afficher la moyenne de 10 notes

saisies au clavier en s'assurant que chaque note est bien dans l'intervalle [0,20].

Remarque : dans cet exercice on ne souhaite pas "conserver" les notes

Exercice

Observez

l'analyse descendante

d'où vient l'idée de créer une fonction

(15)

Exercice : moy de 10 notes valides

Discussion :

A-t-on besoin de 10 variables pour les 10 notes ? Et si on le fait de tête (sans papier)

est-on obligé de mémoriser les 10 notes ?

Exercice

(16)

Exercice : moy de 10 notes valides

Discussion :

Idée : si on calcule la somme des notes au fur et à mesure qu'on les saisit,

on n'a pas besoin de garder la note en mémoire, donc on peut ré-utiliser la même variable pour les la note suivante

>>> une seule variable note

et une variable pour la somme des notes

Exercice

(17)

Exercice : moy de 10 notes valides

Table des variables :

note : réel // contient une note saisie

total : réel // somme des notes saisies

Exercice

(18)

Exercice : moy de 10 notes valides

Algo en pseudo code (version intermédiaire ) : répéter 10 fois (boucle pour) :

saisir une note (valide)

l'ajouter au total des notes déjà saisies calculer er afficher la moyenne : total / 10

remarques (comment procéder ?) - utiliser les variables (note et total)

- détecter les nouvelles variables (compteur boucle pour) - oublier les "détails" (ne pas se focaliser d'abord

sur la validité de la note)

Exercice

(19)

Exercice : moy de 10 notes valides

Algorithme (version intermédiaire) : total  0

POUR i de 1 à 10

saisir une note valide total  total + note FIN POUR

afficher ("moyenne : ", total / 10)

Exercice

(20)

Exercice : moy de 10 notes valides

Table des variables :

note : réel // une note saisie

total : réel // somme des notes saisies

i : entier // compteur des notes

Exercice

(21)

Exercice : moy de 10 notes valides

Algorithme (version intermédiaire sans les détails) : total  0

POUR i de 1 à 10

saisir une note valide // instr. complexe total  total + note

FIN POUR

afficher ("moyenne : ", total / 10)

Exercice

(22)

Exercice : moy de 10 notes valides

• Exécution

(23)

Exercice : moy de 10 notes valides

total  0

POUR i de 1 à 10

note  saisir1noteValide() total  total + note

FIN POUR

afficher ("moyenne : ", total / 10)

Exercice

noteOK Faux

TANT QUE noteOK =? Faux saisir (note)

SI note est dans [0,20]

noteOK ← Vrai FIN SI

FIN TANT QUE

On met le détail dans une fonction

qui retourne la note correcte

(24)

Exercice : moy de 10 notes valides

Algorithme

total  0

POUR i de 1 à 10

noteOK Faux

Tant que noteOK =? Faux saisir (note)

SI note est dans [0,20]

noteOK ← Vrai FIN SI

FIN TANT QUE

total  total + note FIN POUR

afficher ("moyenne : ", total / 10 )

Exercice

instructions pour saisir une

note valide

(25)

Définition d'une fonction

qui saisit et retourne une note valide

FONCTION saisir1noteCorrecte() réel

// retourne une note entre 0 et 20 saisie par l'utilisateur VARIABLES

noteOK : booléen // vrai si la note est dans [0, 20]

note : réel // la note saisie DEBUT

noteOK Faux

TANT QUE noteOK =? Faux saisir(note)

SI note est dans [0,20]

noteOK ← Vrai FIN SI

FIN TANT QUE RETOURNE note

FIN FONCTION

Exercice

(26)

Rôle du SP et des paramètres

Comment comprenez vous ces descriptions de SP ?

(27)
(28)

Deux entêtes pour un même SP

dans le module turtle, le SP speed (vitesse)

PROCEDURE vitesse (v : entier)

// définit la vitesse de la tortue : la valeur 1 est la plus lente, et 10correspond à l'animation la plus rapide.

Avec la valeur 0, il n'y a pas d'animation, le dessin est quasi instantané.

--- FONCTION vitesse ()  entier

// retourne la valeur courante de la vitesse de la tortue

(29)

PROCEDURE selonVotreGout( )

// demande à l'utilisateur s'il veut accélerer ou ralentir la tortue selon sa vitesse actuelle

VARIABLE

vitActuelle : entier // vitesse actuelle DEBUT

vitActuelle  vitesse() afficher la vitActuelle

demander si ralentir, accélérer ou rien et agir FIN

procédure ou fonction ?

(30)

PROCEDURE selonVotreGout( )

// accélère ou ralentit la tortue selon le choix de l'utilisateur et la vitesse cour.

VARIABLE vitActuelle : entier // vitesse actuelle

rep : chaine // réponse de l'utilisateur DEBUT

vitActuelle  vitesse()

afficher ("vitesse actuelle : ", vitActuelle)

afficher ("Voulez vous Ralentir, Accélérer ou Ne rien faire (R/A/N) ?") saisir (rep)

SI rep = 'R' ET vitActuelle > 1 ALORS vitesse(vitAtuelle - 1)

SINON SI rep = 'A' ET vitActuelle < 10 ALORS vitesse(vitAtuelle + 1)

FIN SI FIN SI

FIN

procédure ou fonction ?

(31)

PROCEDURE selonVotreGout( )

// accélère ou ralentit la tortue selon le choix de l'utilisateur et la vitesse cour.

VARIABLE vitActuelle : entier // vitesse actuelle

rep : chaine // réponse de l'utilisateur DEBUT

vitActuelle  vitesse()

afficher ("vitesse actuelle : ", vitActuelle)

afficher ("Voulez vous Ralentir, Accélérer ou Ne rien faire (R/A/N) ?") saisir (rep)

SI rep = 'R' ET vitActuelle > 1 ALORS vitesse(vitAtuelle - 1)

SINON SI rep = 'A' ET vitActuelle < 10 ALORS vitesse(vitAtuelle + 1)

FIN SI FIN SI

FIN

procédure ou fonction ?

(32)

Rappel

On affecte un valeur à une variable : variable  valeur

exemples de valeur :

0.1 une constante

a valeur de la variable a

a + 0.1 valeur de l'expression

cos(34) valeur retournée par la fonction cos calculeTruc(a) valeur retournée par la fonction

(33)

Retenez

Le programme qui appelle la fonction doit gérer la valeur que la fonction lui retourne :

Dans le programme appelant :

• on peut affecter le résultat de la fonction à une variable : variable  fonctionTruc(…)

• on peut afficher le résultat de la fonction : afficher("résultat : ", fonctiontruc(…))

(34)

Retenez

Une fonction booléenne peut être appelée dans une condition

POUR n de 1 à 10

SI estPremier(n) ALORS afficher (n)

FIN SI FIN POUR

(35)

Exercice : définir la fonction moyHasard

FONCTION moyHasard(n : entier, binf : entier, bsup : entier)  réel // retourne la moyenne de n entiers tirés au hasard dans [binf, bsup]

VARIABLE

i : entier //

tot : entier // total des nombres tirés au hasard DEBUT

tot  0

POUR i de 1 à n

tot  tot + hasard(binf, bsup) FIN POUR

RETOURNER tot / n FIN FONCTION

(36)

Appel de la fonction moyHasard

VARIABLES

i : entier // compte les itérations

n : entier // nombre d'entiers tirés au hasard

r : réel // moyenne

DEBUT n  10

afficher ("Moyennes de n nombres tirés dans [0,100] : ") POUR i de 1 à 5

r  moyHasard(n, 0,100)

afficher ("moyenne avec ", n , "nombres : ", r) n  n*10

FIN POUR FIN

Références

Documents relatifs

Une suite géométrique positive et strictement croissante admet une limite égale à

Programmer cet algorithme sur machine (calculatrice ou ordinateur avec le logiciel Algobox). Écrire le programme en indiquant la marque de la calculatrice dans le cas d’un programme

Enfin, si f(x) est de type mammum, il y a au plus une équation (i) telle que l'expression (4) reste au-dessous d'une limite finie quel que soit n ; le quotient de celle expression

La question 1 permet de « construire » la suite tandis que la question 2 (plus délicate) permet d’obtenir un élément-clé nous permettant de conclure à la convergence de la

En fait tous ses coecients sont imaginaires purs, on s'en aperçoit en considérant P. Cette création est mise à disposition selon

Soit x un nombre réel en lequel la fonction f est dérivable.. Calculer de deux façons le produit des racines

Dans cette question plus particulièrement, on citera très précisément les théorèmes

On dira qu'il est positif lorsqu'il est réel, non nul et que tous ses coecients sont positifs ou nuls.. Soit m un entier