Vous êtes sur la page 1sur 4

Premier cycle

Vendredi 29 Juin 2007

I3 - Algorithmique et Langage C
Dur e : 3h00 e Documents autoris s : AUCUN (calculatrice comprise) e Remarques : Veuillez lire attentivement les questions avant de r pondre. e Le bar` me donn est un bar` me indicatif qui pourra evoluer lors de la correction. e e e Rendez une copie propre.

Position dune sous-chane (4 points)

Donnez le corps de la fonction suivante qui retourne lindice de la premi` re occurrence de sousChaine e dans chaine. Si sousChaine nest pas pr sente dans chaine, alors la fonction retourne -1. e fonction position (chaine,sousChaine : Chane de caract` res) : Entier e Vous pouvez utiliser les fonctions suivantes : fonction longueur (uneChaine : Chane de caract` res) : Naturel e . . .avec longueur() = 0 fonction iemeCaractere (uneChaine : Chane de caract` res, iemePlace : Naturel) : Caract` re e e . . .avec 0 < iemeP lace longueur(uneChaine)

Palindrome (3 points)

` ` Une chane de caract` res est un palindrome si la lecture de gauche a droite et de droite a gauche e est identique. Par exemple radar, t , rotor, etc. ee En plus des deux fonctions p c dentes, vous pouvez utiliser la fonction suivante : e e fonction sousChaine (uneChaine : Chane de caract` res, debut, longueur : Naturel) : Chane e de caract` res e . . .avec : 0 < debut longueur(uneChaine), debut + longueur longueur(uneChaine), sousChaine(s,d,0)="" Ecrire une fonction r cursive qui permet de savoir si une chane est un palindrome. e

Pile et expression arithm tique (8 points) e


On suppose dans cet exercice que lon poss` de : e Le type Operateur : Type Operateur = {addition,soustraction,multiplication,division} e Le type ElementEA (pour El ment dune Expression Arithm tique) avec les op rations suie e vantes : 1

fonction creerElementEAAPartirDUnReel (a : R el) : ElementEA e fonction creerElementEAAPartirDUnOperateur (op : Operateur) : ElementEA fonction estUnOperateur (e : ElementEA) : Bool en e fonction obtenirOperateur (e : ElementEA) : Operateur fonction obtenirNombre (e : ElementEA) : R el e

3.1

Pile d l ments dexpression arithm tique (3,5 points) ee e

D nition e e Une pile est un type de donn es qui permet de stocker des el ments avec un acc` s LIFO (Last In e e First Out, Dernier Entr Premier Sortie). Il peut etre sch matis a laide de la gure 1 (ici les nombres e e e` e 1 puis 2 ont et empil s). e

empiler

dpiler

2 1
F IG . 1 une pile

3.1.1

Utilisation dune pile d l ments dexpression arithm tique (0,5 points) ee e

Soit le type PileDElementsEA avec les fonctions et proc dures suivantes : e fonction creerPileDElementsEA () : PileDElementsEA . . .qui permet de cr er une pile vide e fonction estVide (laPile : PileDElementsEA) : Bool en e . . .qui permet de savoir si une pile est vide proc dure empiler ( E/S laPile : PileDElementsEA , E e : ElementEA ) e . . .qui permet dempiler e dans laPile proc dure depiler ( E/S laPile : PileDElementsEA , S e : ElementEA ) e e ` . . .qui permet de d piler le sommet de la pile (on obtient cet el ment a laide du param` tre e e formel e). ` Soit p de type PileDElementsEA. Dessinez p (` limage de la gure 1) a lissue des instructions a suivantes : p creerPileDElementsEA() empiler(p,creerElementEAAPartirDUnReel(5)) empiler(p,creerElementEAAPartirDUnReel(3)) empiler(p,creerElementEAAPartirDUnOperateur(addition)) 2

empiler(p,creerElementEAAPartirDUnReel(2)) empiler(p,creerElementEAAPartirDUnOperateur(multiplication)) 3.1.2 Conception (3 points)

` On se propose de concevoir le type PileDElementsEA a laide dune structure : Type PileDElementsEA = Structure lesElementsEA : Tableau[1. . .MAX] dElementEA nbElementsEA : Naturel nstructure Donnez le corps des fonctions et proc dures pr c dentes : creerPileDElementsEA, estVide, empie e e ler, depiler (on consid` re quon utilise correctement la pile, on ne traite pas les cas derreurs). e

3.2 Evaluation dune expression arithm tique (4,5 points) e


Comme lindique la section 3.1.1, on peut stocker une expression arithm tique en notation poloe ` naise invers e (nomm e aussi postxe) a laide dune pile. e e 1. Donnez la repr sentation en notation polonaise invers e de lexpression arithmetique (2 + 3) e e (4 + 5). 2. Dessinez une pile stockant cette expression. ` 3. A limage de la suite dinstructions de la section 3.1.1, donnez la liste dinstructions qui permet de stocker lexpression arithm tique (2 + 3) (4 + 5). e 4. Donnez le corps de la proc dure suivante qui permet d valuer une expression arithm tique e e e e stock e dans une pile en d pilant ses el ments. Le param` tre erreur permet de savoir si lexe e e pression arithm tique stock e dans la pile est correcte. e e proc dure evaluer ( E/S lExpression : PileDElementsEA , S valeur : R el, erreur : Bool en e e e )

4
1 2 3 4 5 6 7 8 9 10 11 12

Un peu de C (2 points)
Soit le programme C suivant :

# i n c l u d e < s t d l i b . h> # i n c l u d e < s t d i o . h> # d e f i n e TAILLE BUFFER 100 char s a i s i r C h a i n e ( ) { char b u f f e r [ TAILLE BUFFER ] ; s c a n f ( %s , b u f f e r ) ; return b u f f e r ; } v o i d a f f i c h e r C h a i n e ( char c h a i n e ) { p r i n t f ( Vous a v e z t a p e %s \n , c h a i n e ) ; 3

13 } 14 15 i n t main ( i n t a r g c , char a r g v ) { 16 afficherChaine ( saisirChaine ( ) ) ; 17 r e t u r n EXIT SUCCESS ; 18 } On compile ce programme : > g c c c Wall p e d a n t i c main . c main . c : I n f u n c t i o n s a i s i r C h a i n e : main . c : 8 : w a r n i n g : f u n c t i o n r e t u r n s a d d r e s s o f l o c a l v a r i a b l e R pondez aux questions suivantes (` chaque fois en 10 lignes maximum) : e a 1. Que signient les options -c, -Wall et -pedantic de gcc ? 2. Que signie le warning afch par gcc ? Expliquez comment r soudre ce probl` me (donnez le e e e code C) ?

Et pour nir, encore du C (3 points)


Quafche le programme C suivant :

# i n c l u d e < s t d l i b . h> # i n c l u d e <s t d i o . h> void f1 ( i n t a , i n t b ) { a = b ; } v o i d f 2 ( i n t b , i n t c ) { b = c ; } void f3 ( i n t a , i n t c ) { a=c + 1 ; } i n t main ( i n t a r g c , char a r g v ) { i n t v1 , v2 , v3 ; v1 = 5 ; v2 = 8 ; v3 = 1 0 ; p r i n t f ( Au d e p a r t : v1 = %d v2 = %d v3 = %d \ n f 1 ( v1 , &v2 ) ; p r i n t f ( A p r e s f 1 : v1 = %d v2 = %d v3 = %d \ n , f 2 (&v3 , (& v1 ) ) ; p r i n t f ( A p r e s f 2 : v1 = %d v2 = %d v3 = %d \ n , f 3 (&v3 , v2 ) ; p r i n t f ( A p r e s f 3 : v1 = %d v2 = %d v3 = %d \ n , r e t u r n EXIT SUCCESS ; }

, v1 , v2 , v3 ) ; v1 , v2 , v3 ) ; v1 , v2 , v3 ) ; v1 , v2 , v3 ) ;