le sujet

Transcription

le sujet
ESIL – Département Informatique, Réseaux et Multimédia
Première année
Introduction à la Programmation
15 décembre 2011
Documents autorisés : supports de cours et notes manuscrites à
l’exclusion des comptes-rendus de TD
Les exercices peuvent être écrits en C ou C++ (limité à ce qui a été vu en cours). Un pseudocode simple et/ou des commentaires pertinents seront très appréciés.
Le tout doit être présenté de manière propre, concise et lisible.
Le barème proposé est indicatif.
Exercice I : Tableaux (6 points)
Ecrire la fonction Tri() dont les paramètres sont :
- un tableau d’entiers T1 de N éléments (où N est une constante donnée) tous compris
entre 0 et une constante positive donnée M ;
- un tableau d’entiers T2 ;
- un entier k .
A l’appel de la fonction le tableau T1 est donné.
Après l’appel de fonction :
- le tableau T2 contient les éléments de T1 rangés par ordre décroissant.
- le paramètre k contient la plus grande parmi les fréquences des éléments de T1 (la
fréquence d’un élément est le nombre d’apparitions de cet élément).
L’algorithme de tri est le suivant :
A partir de T1, construire le tableau d’entiers T tel que T[i] contient le nombre
d’apparitions de i parmi les éléments de T1. T est un tableau local de dimension convenable.
A partir de T, construire le tableau T2 et calculer k.
Ecrire le programme complet (déclarations et fonction main) qui appelle la fonction Tri
pour un tableau donné A, calcule le tableau ordonné B et la fréquence maximale et affiche ces
résultats à l’écran.
Exercice II : Structures et chaînes de caractères (7 points)
Ecrire un programme qui permette de convertir des phrases tapées par l'utilisateur en code
morse. Le programme demande répétitivement à l'utilisateur de donner une phrase et affiche
sa traduction en morse. Le programme se termine quand l'utilisateur entre un point seul sur
une ligne.
La traduction en morse sera effectuée par une fonction MorseEncode()recevant en
paramètre la chaîne à traduire. Cette fonction effectue l'allocation d'un tableau de caractères
de taille suffisante pour contenir la phrase codée, remplit ce tableau et retourne un pointeur
sur celui-ci.
Pour pouvoir coder la phrase en morse il faut déterminer la longueur de la phrase codée. Ceci
fera l'objet d'une fonction MorseEncodingLength()renvoyant la longueur du codage
morse d'une phrase passée en paramètre.
Pour effectuer le codage proprement dit, il faut parcourir la chaîne de départ et remplir dans la
chaîne d'arrivée avec le codage de chaque lettre. Le codage d'une lettre est une chaîne d’au
plus 5 caractères '-' ou '.'.
Ce codage sera défini par un tableau de chaînes. Afin de ne pas perdre de temps à décrire le
codage morse en entier, considérez que vous n'avez à coder que des messages formés des 5
premières lettres de l'alphabet. Toutefois, votre programme doit être facilement modifiable
pour pouvoir être étendu à tout l'alphabet.
Pour calculer la longueur du codage de la phrase, il suffit d'additionner la longueur du codage
de chaque lettre de la chaîne initiale. La longueur du codage de chacune des lettres de
l'alphabet sera avantageusement évaluée et rangée dans un tableau d'entiers.
Amélioration possible : Plutôt que d'avoir deux tableaux, on pourra définir un seul tableau de
structures contenant le codage d'une lettre et la longueur de ce codage.
II.1. Décrire ce tableau de structures. A défaut vous travaillerez avec les deux tableaux.
II.2. Ecrire la fonction MorseEncodingLength().
II.3. Ecrire la fonction MorseEncode().
II.4. Ecrire le programme complet (déclarations et fonction main) qui initialise le tableau de
structures (ou le tableau des longueurs) puis boucle sur la lecture d’une phrase et
l’affichage de sa traduction en morse.
Exercice III : Pointeurs (3 points)
III.1. Dans le programme suivant il y a 2 variables de type pointeur sur entier et 2 variables
de type entier. Compléter le programme ci-dessous en rajoutant & ou * quand cela est
nécessaire.
int
int
int
int
x
y
z
t
y = 2
t = 3
x = y
z = t
printf
printf
y = z
printf
;
;
;
;
;
;
;
;
("x et y doivent etre identiques : %d et %d\n", x, y) ;
("z et t doivent etre identiques : %d et %d\n", z, t) ;
;
("La valeur de y est : %d\n",y) ;
III.2. Quelle est la valeur de y à la fin du programme ?
Exercice IV : Formes itérative et récursive d’une fonction (4 points)
On souhaite écrire une fonction qui calcule la suite un = 2n .
IV.1 En écrire une version itérative : double Un_iter (int n).
IV.2 En utilisant la remarque suivante :
ቊ
u0 = 1
un = 2 un-1
écrire une version récursive : double Un_rec (int n).