Exercices sur l'algorithmique et la programmation - 1, Exercices de Applications informatiques
Christophe
Christophe3 March 2014

Exercices sur l'algorithmique et la programmation - 1, Exercices de Applications informatiques

PDF (113.2 KB)
3 pages
416Numéro de visites
Description
Exercices d’informatique sur l'algorithmique et la programmation - 1. Les principaux thèmes abordés sont les suivants: exercices.
20points
Points de téléchargement necessaire pour télécharger
ce document
Télécharger le document

ENSEIRB 2009-2010 - Département informatique - Première année PG116 - Atelier algorithmique et programmation

Examen (session1) - durée 1h20

Documents de cours/td autorisés

Exercice 1 (7 points)

On considère un tableau t d’éléments de taille esize octet(s) chacun. Le dernier élément significatif du tableau est suivi d’une sentinelle (ou butée). On suppose connue une fonction :

int s e n t i n e l (void ∗ e ) ;

qui renvoie 1 si la valeur à l’adresse e est la sentinelle, et 0 sinon.

1. Écrire une fonction :

int count (void ∗ t , s i z e t e s i z e ) ;

qui calcule le nombre d’éléments dans le tableau. Vous utiliserez uniquement l’arithmétique de pointeurs : l’opérateur [] est prohibé.

2. Afin de rendre la fonction count générique, l’utilisateur doit pouvoir spécifier comment détecter la sentinelle qui marque la fin du tableau t. Comment doit être modifié le prototype de la fonction count pour y parvenir ?

Exercice 2 (7 points)

Nous considérons la structure châınée définie dans la feuille de TD 2 et rappelée en an- nexe A.

1. Quelle est l’utilité de la constante LINK_H ?

2. Que représentent les types struct link et struct lelement ?

3. Nous considérons le TAD file muni des opérations ci-dessous. Compléter le fichier file.h en annexe B. À l’aide du type struct link mettre en œuvre le type struct file et toutes les fonctions. Vous serez particulièrement attentif à la gestion de la mémoire.

sort file

file_empty : -> file

file_is_empty : file -> bool

file_push : file * elmt -> file

file_pop : file -> file

file_top : file -> elmt

1

Exercice 3 (6 points)

Nous considérons un TAD bintree muni des opérations suivantes :

sort bintree

bt_is_empty : bintree -> bool

bt_left : bintree -> bintree

bt_right : bintree -> bintree

Le fichier bintree.h en annexe C présente une déclaration de ce TAD en langage C. Nous considérons à nouveau le TAD file de l’exercice précédent. L’algorithme ci-dessous

calcule le nombre de nœuds dans l’arbre binaire t par un parcours en largeur d’abord.

integer count(bintree t)

integer c = 0

file f = file_push(file_empty(), t)

while (not file_is_empty(f)) do

bintree t’ = file_top(f);

f = file_pop(f)

if (not bt_is_empty(t’)) then

f = file_push(file_push(f, bt_left(t’)), bt_right(t’))

c = c+1

endif

endwhile

return c

1. Mettre en œuvre l’algorithme count ci-dessus en langage C.

2. La complexité de l’algorithme count est O(n) où n est le nombre de nœuds dans t. C’est à dire que chaque nœud est visité un nombre constant de fois. Quelles fonctions sur le type struct link (annexe A) faut-il utiliser pour mettre en œuvre les opérations push et pop du TAD file afin de garantir cette complexité ?

2

A link.h

#ifndef LINK H #define LINK H

struct l i n k { struct l e l ement ∗head ; struct l e l ement ∗ t a i l ;

} ;

struct l e l ement { void ∗ data ; struct l e l ement ∗next ;

} ;

struct l i n k lnk in i t empty (void ) ;

void lnk add head ( struct l i n k ∗ , struct l e l ement ∗ ) ; void lnk remove head ( struct l i n k ∗ ) ;

void l n k a d d t a i l ( struct l i n k ∗ , struct l e l ement ∗ ) ; void l n k r e m o v e t a i l ( struct l i n k ∗ ) ;

void l n k a d d a f t e r ( struct l i n k ∗ , struct l e l ement ∗ , struct l e l ement ∗ ) ; void l nk r emove a f t e r ( struct l i n k ∗ , struct l e l ement ∗ ) ;

#endif

B file.h

#ifndef FILE H #define FILE H

struct f i l e ;

struct f i l e ∗ f i l e e m p t y ( ) ; int f i l e i s e m p t y ( const struct f i l e ∗ ) ; void f i l e p u s h ( struct f i l e ∗ , void ∗ ) ; void f i l e p o p ( struct f i l e ∗ ) ; void ∗ f i l e t o p ( struct f i l e ∗ ) ;

#endif

C bintree.h

#ifndef BINTREE H #define BINTREE H

struct b i n t r e e ;

int bt i s empty ( const struct b i n t r e e ∗ ) ; struct b i n t r e e ∗ b t l e f t ( const struct b i n t r e e ∗ ) ; struct b i n t r e e ∗ b t r i g h t ( const struct b i n t r e e ∗ ) ;

#endif

3

commentaires (0)
Aucun commentaire n'a été pas fait
Écrire ton premier commentaire
Ceci c'est un aperçu avant impression
Chercher dans l'extrait du document
Docsity n'est pas optimisée pour le navigateur que vous utilisez. Passez à Google Chrome, Firefox, Internet Explorer ou Safari 9+! Téléchargez Google Chrome