Vous êtes sur la page 1sur 3

IUT d'Orsay, Dpartement Informatique

Algorithmique 1re anne, 2003-2004

Feuille n4 : Procdures et Fonctions

PARTIE 1 : Comprendre et reconnatre les sous-algorithmes Exercice 1.1 : simulation


Algorithme devinette {...?} variables essai, prcdent : entier ok : boolen dbut prcdent 9 rpter afficher ("Principal : une donne SVP : ") saisir (essai) ok faux deviner(essai, prcdent, ok) afficher ("Principal : ", essai, prcdent) tant que non ok fin procdure deviner(val1, val2, rp) {...?} paramtres (D) val1 : entier (D/R) val2 : entier (R) rp: boolen dbut afficher ("dbut deviner : ", val1, val2) si val2 mod 2 = 0 Alors val2 val2 / 2 sinon val2 val2 + (val2 + 1) / 2 fsi rp val1 = val2 val1 0 afficher ("fin deviner : ", val1, val2) fin

Quels sont les affichages de l'algorithme devinette lorsque les donnes saisies sont 11, 11, 11, 11, ... ? Quelles sont les lignes qui peuvent tre supprimes sans que le fonctionnement gnral de l'algorithme ne soit modifi?

Exercice 1.2 : Identification de sous-algorithmes


Algorithme miseEnPage {Cet algorithme permet la mise en page de nombres entiers cadrs droite} Constantes (Largeur : entier) 10 (Etoile : caractre) '*' variables valeur, taille : entiers encoreDonnes : boolen dbut encoreDonnes rponseUtilisateur() tant que encoreDonnes faire afficher ("Entrez une valeur : ") saisir (valeur) si valeur 0 Alors taille longueurEntier(valeur) sinon taille 1 + longueurEntier(-valeur) fsi ligne(Largeur, Etoile) ligne(Largeur taille, '.') afficher (valeur) encoreDonnes rponseUtilisateur() ftq ligne(Largeur, Etoile) fin

Algorithmique, Feuille de TD n 4

Page 1

IUT d'Orsay, Dpartement Informatique

Algorithmique 1re anne, 2003-2004

a) Quels sont les sous-algorithmes utiliss par cet algorithme ? Donnez-en l'entte (fonction/procdure, nom identifiant, liste de paramtres). b) Lire les sous-algorithmes fournis par votre enseignant, puis les complter en ajoutant une spcification pour chacun dentre eux. c) simuler l'excution de lalgorithme sur les donnes suivantes O 23 O 401 O -520 O -1007 N

PARTIE 2 : Savoir crire des sous-algorithmes Exercice 2.1 : a) Ecrire la procdure changer qui provoque l'affichage de 2 puis de 1 lors de l'excution des instructions suivantes: ...
A 1 B 2 changer(A,B) afficher(A,B)

... b) Que se passerait-il si la ligne changer(A,B) tait remplace par changer(1,2) ? c) Exercice 2.2 : a) Ecrire une fonction continuer(Rp) qui retourne VRAI si le caractre pass en paramtre est gal 'o' ou 'O', et FAUX sinon. b) Ecrire une procdure calcul(annNaiss, annCour, age) qui calcule l'ge qu'aura une personne ne durant l'anne annNaiss la fin de l'anne courante annCour. c) Transformer la procdure calcul en une fonction calculBis. d) Ecrire un algorithme age qui demande l'utilisateur l'anne de naissance d'un individu, puis qui calcule et affiche l'ge ce de dernier la fin de l'anne courante (l'anne courante sera fournie par l'utilisateur). Cet algorithme doit utiliser les sous-algorithmes prcdents. L'utilisateur doit pouvoir continuer fournir des annes de naissance aussi longtemps qu'il le dsire. Exercice 2.3 En vous aidant des algorithmes de la feuille 2 (sur litration) crire a) Une fonction deuxChiffres qui retourne VRAI si le nombre pass en paramtre est un nombre 2 chiffres, et FAUX sinon. b) Une fonction factorielle qui retourne la factorielle dun nombre donn. c) Une procdure max qui saisit nbVal valeurs (nbVal est un paramtre de la fonction) et qui renvoie (par le biais des paramtres) la plus grande valeur saisie. d) Un algorithme qui demande lutilisateur dentrer une valeur entire positive (uneVal), puis a. qui indique lutilisateur si uneVal est un nombre 2 chiffres, b. qui affiche la factorielle de uneVal, c. et qui saisit uneVal valeurs et affiche la plus grande valeur saisie. Vous devrez bien sr faire appel aux sous-algorithmes dfinis en a), b) et c)

Algorithmique, Feuille de TD n 4

Page 2

IUT d'Orsay, Dpartement Informatique

Algorithmique 1re anne, 2003-2004

Feuille n4 : procdures et Fonctions (suite)

Procdures et fonctions de l'exercice 1.2 Fonction rponseUtilisateur() retourne boolen


{}

variable rp : caractre dbut rpter afficher ("Nouvelle donne entire saisir , rpondre par la premire lettre de 'Oui' ou 'Non'? ") saisir (rp) tant que rp 'O' et rp 'o' et rp 'N' et rp 'n' retourne (Rp = 'O' ou Rp = 'o') fin

Fonction longueurEntier (unNbre) {} paramtre (D) unNbre : entier variables nbChiffres, K : entier dbut nbChiffres 1 K 10 tant que (unNbre div K) > 0 faire nbChiffres nbChiffres + 1 K K * 10 ftq retourne (nbChiffres) fin procdure ligne (nbcar, caract)
{}

paramtres

(D) nbcar : entier


(D) caract: caractre

variable cpt : entier dbut allerAlaligne() (procdure non dcrite qui provoque un saut de ligne) pour cpt 1 nbcar faire afficher (caract) fin

Algorithmique, Feuille de TD n 4

Page 3