ECRIRE("Etes-vous un homme ?")
REPONSE <-- ""
TANT QUE REPONSE != "O" OU REPONSE != "N"
ECRIRE "Saisir O ou N"
REPONSE <-- LIRE()
FIN TANT QUE
ECRIRE("Avez-vous des enfants ?")
REPONSE2 <-- ""
TANT QUE REPONSE2 != "O" OU REPONSE2 != "N"
ECRIRE "Saisir O ou N"
REPONSE2 <-- LIRE()
FIN TANT QUE
ECRIRE("Etes-vous majeur(e) ?")
REPONSE <-- ""
TANT QUE REPONSE != "O" OU REPONSE != "N"
ECRIRE "Saisir O ou N"
REPONSE <-- LIRE() FIN TANT QUE
L’appel d’une fonction permet de récupérer une valeur
La fonction appelée renvoie une valeur
valeur_sinus <-- sin(45) // (racine de 2 / 2)
La fonction appelée renvoie une valeur
Les fonctions sin
cos
prennent en paramètre
une valeur.
sin(angle)
Mot clé: renvoyer
Une procédure réalise une suite d’opérations sans renvoyer de valeur
ECRIRE("a", 2, "b", 3)
C’est l’équivalent soit:
questionOuiNon
FONCTION questionOuiNon() renvoie TEXTE
VARIABLES
TEXTE reponse
DEBUT FONCTION
reponse <-- ""
TANT QUE reponse != "O" OU reponse != "N"
ECRIRE "Saisir O ou N"
reponse <-- LIRE()
FIN TANT QUE
RENVOYER reponse
FIN FONCTION
VARIABLES
TEXTE rep1, rep2, rep3
DEBUT
ECRIRE("Etes-vous un homme ?")
rep1 <-- questionOuiNon()
ECRIRE("Avez-vous des enfants ?")
rep2 <-- questionOuiNon()
ECRIRE("Etes-vous majeur(e) ?")
rep3 <-- questionOuiNon()
FIN
questionOuiNonMessage
Déclaration 1
FONCTION questionOuiNonMessage(message) renvoie TEXTE
PARAM
TEXTE message
...
Déclaration 2
FONCTION questionOuiNonMessage(message: TEXTE) renvoie TEXTE
VARIABLES
TEXTE reponse
DEBUT FONCTION
ECRIRE(message)
reponse <-- ""
TANT QUE reponse != "O" OU reponse != "N"
ECRIRE "Saisir O ou N"
reponse <-- LIRE()
FIN TANT QUE
RENVOYER reponse
FIN FONCTION
VARIABLES
TEXTE rep1, rep2, rep3
DEBUT
rep1 <-- questionOuiNon("Etes-vous un homme ?")
rep2 <-- questionOuiNon("Avez-vous des enfants ?")
rep3 <-- questionOuiNon("Etes-vous majeur(e) ?")
FIN
questionOuiNonMessage
(variante avec
réponses attendues)FONCTION questionOuiNonMessage(message: TEXTE, repA: TEXTE, repB: TEXTE) renvoie TEXTE
VARIABLES
TEXTE reponse
DEBUT FONCTION
ECRIRE(message)
reponse <-- ""
TANT QUE reponse != repA OU reponse != repB
ECRIRE("Saisir " + repA + " ou " + repB)
reponse <-- LIRE()
FIN TANT QUE
RENVOYER reponse
FIN FONCTION
VARIABLES
TEXTE rep1, rep2, rep3
DEBUT
rep1 <-- questionOuiNonMessage("Etes-vous ?", "une femme", "un homme")
rep2 <-- questionOuiNonMessage("Avez-vous des enfants ?", "o", "n")
rep3 <-- questionOuiNonMessage("Etes-vous majeur(e) ?", "o", "n")
FIN
Fonction qui ne renvoie pas de valeur
ECRIRE
DEBUT
afficher_table_mult(7)
afficher_table_mult(8) FIN
PROCEDURE afficher_table_mult(param: ENTIER)
DEBUT PROCEDURE
ECRIRE("Table de multiplication par " + param)
POUR i allant de 0 à 11
ECRIRE(param + " x " + i + " = "+ (param * i*))
FIN POUR: i <-- i + 1 FIN PROCEDURE
Écrivez une fonction qui renvoie la somme de cinq nombres fournis en argument.
Écrivez une fonction qui renvoie la somme des nombres placés dans un tableau passé en argument.
Créer la fonction est_pair(int)
qui renvoie 1 si le
nombre passé en paramètre est pair, 0 sinon.
Écrire le programme principal permettant d’afficher si 2, 5, 8 et 13 sont pairs ou pas.
Exemple d’affichage
2 est pair
5 n'est pas pair
Utiliser la fonction puissance2
vue précédemment (avec
des entiers) pour écrire le calcul du carré de l’hypothénuse dans un
triangle rectangle.
Écrire la fonction racine(int)
qui prend un entier en
paramètre et renvoie la valeur flottante de la racine carrée du
paramètre.
Dans le programme principal, demander à l’utilisateur les valeurs des côtés et afficher la valeur de l’hypothénuse (arrondie à un chiffre après la virgule).
0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
'T' |
'e' |
'x' |
't' |
'e' |
Tous les langages, je dis bien tous, proposent peu ou prou les fonctions suivantes, même si le nom et la syntaxe peuvent varier d’un langage à l’autre :
length(chaîne)
: renvoie le nombre de caractères d’une
chaînesubstring(chaîne, debut, longueur)
: renvoie un extrait
de la chaîne, commençant au caractère à l’index debut
et
faisant longueur
caractères de long.Ce sont les deux seules fonctions de chaînes réellement indispensables. Cependant, pour nous épargner des algorithmes fastidieux, les langages proposent également :
Exemples :
length("Bonjour, ça va ?") vaut 16
length("") vaut 0
substring("Zorro is back", 4, 7) vaut "ro is b"
substring("Zorro is back", 12, 1) vaut "c"
left("Et pourtant…", 8) vaut "Et pourt"
right("Et pourtant…", 4) vaut "t…"
trouve("Un pur bonheur", "pur") vaut 4
trouve("Un pur bonheur", "techno") vaut -1
Il existe aussi dans tous les langages des fonctions qui renvoient
ascii(caractère)
,caractere(ascii)
,Asc("N") vaut 78
Chr(63) vaut "?"
Écrivez une fonction qui renvoie le nombre de voyelles contenues dans une chaîne de caractères passée en argument. Au passage, notez qu’une fonction a tout à fait le droit d’appeler une autre fonction.
On va découper cet algorithme en trois fonctions:
lettreA(...)
)estVoyelle(...)
)nbVoyelles(...)
qui va
parcourir la chaîne en utilisant les deux précédentes
FONCTION lettreA(chaine: TEXTE, pos: ENTIER)
DEBUT FONCTION
RENVOYER RIGHT(LEFT(chaine, pos + 1), pos)
FIN FONCTION
FONCTION estVoyelle(car : CARACTERE)
DEBUT FONCTION
RENVOYER car == "a" || car == "e"
|| car == "i" || car == "o"
|| car == "u" || car == "y"
|| car == "A" || car == "E"
|| car == "I" || car == "O"
|| car == "U" || car == "Y"
FIN FONCTION
FONCTION nbVoyelles(chaine : TEXTE)
VARIABLE
ENTIER i
CARACTERE car
ENTIER compteur
DEBUT FONCTION
compteur <-- 0
POUR i allant de 0 à LENGTH(chaine)
car <-- lettreA(chaine, i)
SI ( estVoyelle(car) ) ALORS
compteur <-- compteur +1
FIN SI
FIN POUR: i <-- i + 1
RENVOYER compteur FIN FONCTION
Bonjour ça va
pos = 0
LEFT(chaine, pos + 1) -> "B"
RIGHT("B", pos) -> "B"
pos = 1
LEFT(chaine, pos + 1) -> "Bo"
RIGHT("Bo", pos) -> "o"
Version alternative de estVoyelle
:
FONCTION estVoyelle(car : CARACTERE)
TABLEAU DE CARACTERE voyelles[12]
BOOLEEN drapeau
INTEGER i
DEBUT FONCTION
drapeau <-- FAUX
voyelles[0] = "a"
voyelles[1] = "e"
voyelles[2] = "i"
...
voyelles[11] = "Y"
POUR i allant de 0 à 12
drapeau <-- drapeau OU (car == voyelles[i])
FIN POUR: i <-- i + 1
RENVOYER drapeau FIN FONCTION
Variante de l’alternative
FONCTION estVoyelle(car : CARACTERE)
TABLEAU DE CARACTERE voyelles[12]
INTEGER i
DEBUT FONCTION
voyelles[0] = "a"
voyelles[1] = "e"
voyelles[2] = "i"
...
voyelles[11] = "Y"
POUR i allant de 0 à 12
SI (car == voyelles[i]) ALORS
RENVOYER VRAI
FIN SI
FIN POUR: i <-- i + 1
RENVOYER FAUX FIN FONCTION
trouve
Réécrivez la fonction Trouve
, vue précédemment, à l’aide
des fonctions substring
et length
(comme quoi,
Trouve
, à la différence de substring
et
length
, n’est pas une fonction indispensable dans un
langage).
La fonction substring
va nous permettre de récupérer une
chaîne de la même longueur que la chaîne à chercher.
Cela amène à étudier deux cas d’utilisation possibles:
Bon
chaine = "Bonjour ça va ?"
cherchee = "Bon"
length(cherchee)
-> 3
substring(chaine, 0, length(cherchee))
->
Bon
onj
chaine = "Bonjour ça va ?"
cherchee = "onj"
length(cherchee)
-> 3
substring(chaine, 0, length(cherchee))
->
Bon
substring(chaine, 1, length(cherchee))
->
onj
FONCTION trouve(chaine: TEXTE, cherchee: TEXTE)
ENTIER longueur_cherchee
ENTIER i
DEBUT FONCTION
longueur_cherchee <-- length(cherchee)
POUR i allant de 0 à length(chaine) - longueur_cherchee
SI (cherchee IDENTIQUE_A substring(chaine, i, longueur_cherchee)) ALORS
RENVOYER i
FIN SI
FIN POUR: i <-- i + 1
RENVOYER -1 FIN FONCTION
purge
Ecrivez une fonction qui purge une chaîne d’un caractère, la chaîne comme le caractère étant passés en argument. Si le caractère spécifié ne fait pas partie de la chaîne, celle-ci devra être retournée intacte. Par exemple :
Purge("Bonjour","o")
renverra "Bnjur"
Purge("J'ai horreur des espaces"," ")
renverra
"J'aihorreurdesespaces"
Purge("Moi, je m'en fous", "y")
renverra
"Moi, je m'en fous"
Même question que précédement, mais cette fois, on doit pouvoir fournir un nombre quelconque de caractères à supprimer en argument.
Reprenons la fonction questionOuiNonMessage(...)
définie
précédemment.
reponse
FONCTION questionOuiNonMessage(message: TEXTE) renvoie TEXTE
VARIABLES
TEXTE reponse
DEBUT FONCTION
ECRIRE(message)
reponse <-- ""
TANT QUE reponse != "O" OU reponse != "N"
ECRIRE "Saisir O ou N"
reponse <-- LIRE()
FIN TANT QUE
RENVOYER reponse
FIN FONCTION
Définition et utilisation de la variable globale:
PROCEDURE traiterReponse()
DEBUT PROCEDURE
ECRIRE(reponse)
FIN PROCEDURE
VARIABLES
TEXTE reponse, rep1, rep2, rep3
DEBUT
// Dans ce contexte, reponse est une variable globale
reponse <-- "Bravo"
rep1 <-- questionOuiNon("Etes-vous un homme ?")
traiterReponse()
rep2 <-- questionOuiNon("Avez-vous des enfants ?")
rep3 <-- questionOuiNon("Etes-vous majeur(e) ?")
FIN
PROCEDURE f()
VARIABLE
ENTIER x
DEBUT
x <-- 5
g()
ECRIRE(x)
FIN
PROCEDURE g()
VARIABLE
ENTIER x
DEBUT
x <-- 2
ECRIRE(x)
FIN
DEBUT
f()
ECRIRE(x) //ERREUR FIN
Sortie:
2
5
Variable localisée:
FONCTION f(x: ENTIER)
VARIABLE
ENTIER y
DEBUT
y <-- g(2 * x)
y <-- y + x * x
RENVOYER y
FIN
FONCTION g(x: ENTIER)
DEBUT
RENVOYER x + 1
FIN
DEBUT
ECRIRE(f(2)) FIN
Sortie:
9
Calcul de la factorielle d’un nombre: n!
On va appeler cette fonction fact
FONCTION fact(x : ENTIER)
VARIABLE
ENTIER res
DEBUT FONCTION
res <-- 1
TANT QUE x > 1
res <-- res * x
x <-- x - 1
FIN TANT QUE
RENVOYER res
FIN FONCTION
Si n > 1: n! = n * (n - 1)!
Si n = 1:
n! = 1
FONCTION fact(x : ENTIER)
VARIABLE
ENTIER res
DEBUT FONCTION
res <-- 1
SI x == 1 ALORS
res <-- 1
SINON
res <-- x * fact(x - 1)
FIN SI
RENVOYER res
FIN FONCTION