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).