Content text +TD Programmation 2 (Langage C) FSR RABAT 19 20.pdf
- 1/2 - Université Mohammed V-Agdal Année Universitaire 2019/2020 Faculté des Sciences de Rabat MODULE M21 (SMI4) Département d'Informatique Travaux Dirigés de Programmation II [TD n°1 : Rappels & Notion d’Enregistrement] Objectifs : - Rappeler les notions de tableaux, de pointeurs, de fonctions et de récursivité ; - Introduire la notion d’enregistrement (structure en C). Exercice 1 a)- Ecrire en langage C une fonction itérative, nbre_occurrences, qui détermine le nombre de fois où un élément noté elt apparaît dans un tableau T donné contenant de N entiers. b)- Refaire la question a)- en utilisant une fonction récursive, nbre_occ_rec. c)- Ecrire une fonction principale, main, qui teste ces deux fonctions. Exercice 2 Soit T un tableau d’entiers contenant N éléments. On suppose qu’il n’est pas trié. Définir une fonction de type void, elt_plus_frequent, qui détermine l’élément qui apparaît le plus de fois dans le tableau T, ainsi que son nombre d’occurrences. Si plusieurs éléments répondent au problème, alors prendre un seul. On notera qu’il n’est pas permis d’utiliser d’autres tableaux. Exercice 3 On s’intéresse à définir une fonction effectuant la recherche dichotomique d’un élément noté elt dans un tableau T trié de N nombres entiers. Cette fonction retournera la position de l’élément elt dans le tableau T, sinon la valeur -1. a)- Donner une version itérative, rech_dicho_iter, de la fonction de recherche dichotomique. b)- Donner une version récursive, rech_dicho_rec. Exercice 4 Définir la fonction, tri_selection, qui effectue le tri par ordre croissant d’un tableau T de N entiers par la méthode de sélection. On rappelle que le principe du tri par sélection consiste à échanger le premier et le plus petit élément de la partie non triée du tableau. Pour cela, on commencera par définir les deux fonctions : echanger et position_minimum. Exercice 5 On caractérise un étudiant par son matricule (entier), son nom (chaîne de 20 caractères au plus.), son prénom (chaîne de20 caractères au plus), sa date de naissance (3 entiers désignant le jour, le mois et l'année) et sa moyenne générale (réel). a)- Définir en langage C le type Etudiant, représentant un étudiant. On notera que la date de naissance pourra être stockée dans une structure à part. (indication : utiliser struct et typedef).
TD n°1 : [Rappels & Notion d’Enregistrement] - 2/2 - On considère la structure Tab_Etud suivante permettant de gérer 1000 étudiants. typedef struct tab_etud { int nb_etud; /* nombre d'étudiants */ Etudiant etudiants[1000]; /* tableau d'étudiants */ } Tab_Etud; b)- Ecrire une fonction, saisie_etudiant, de saisie des informations d'un étudiant. Il est à noter qu'on ne se préoccupera pas de la validité de la date entrée. c)- Ecrire une fonction, affiche_etudiant, d'affichage des informations concernant un étudiant. d)- Ecrire une fonction, ajout_etudiant, qui permet d'ajouter un étudiant dans un tableau d'étudiants e)- Ecrire une fonction, tri_nom, qui permet de classer les étudiants par ordre alphabétique des noms.
- 1/1 - Université Mohammed V de Rabat Année Universitaire 2019/2020 Faculté des Sciences MODULE M21 (SMI4) Département d'Informatique Travaux Dirigés de Programmation II [TD n°2 : Chaînes de Caractères] Objectifs : - Introduire les chaînes de caractères ; - Traiter des applications des chaînes de caractères. Exercice 1 Ecrire la fonction lire_chaine qui permet de lire une chaîne de caractères au clavier et de la stocker dans un tableau de caractères (de taille maximale = 100). Le caractère retour à la ligne ‘\n’ indiquera la fin de saisie. Indication : utiliser la fonction getchar() qui permet de lire un caractère au clavier et le retourner. Exercice 2 a)- Sans utiliser les fonctions de string.h, définir la fonction longueur_chaine qui calcule la longueur d’une chaîne de caractères, de deux manières : - en travaillant avec des tableaux, - en travaillant avec des pointeurs. b)- Ecrire une fonction main pour tester la fonction longueur_chaine. Exercice 3 Ecrire la fonction miroir qui permet d’inverser une chaîne de caractères et retourne l’adresse de cette chaîne. Exercice 4 On appelle palindrome une suite de caractères qui se lit de la même façon dans les deux sens, comme « ressasser » et « laval ». Définir la fonction palindrome Exercice 5 Ecrire la fonction en_majuscules qui prend en argument une chaîne de caractères, la transforme en majuscules et retourne son adresse. Exercice 6 Définir la fonction char* copie_chaine(char *ch_d, char *ch_s) qui copie la chaîne de caractères ch_s dans ch_d. Cette fonction devra retourner le pointeur sur la chaîne ch_d. Exercice 7 Définir la fonction int compare_chaines(char *s1, char *s2) qui prend en paramètres deux chaînes de caractères s1 et s2 et retourne 0 si les deux chaînes sont équivalentes, -1 si s1 est avant s2 dans l’ordre lexicographique, et 1 sinon. Exercice 8 Écrire la fonction int nombre_espaces(char *s) qui renvoie le nombre de caractères espace ‘ ‘ présents dans la chaîne s. Utilisez la fonction strchr de . Exercice 9 Définir la fonction char **les_mots(char *s) qui extrait de la chaîne s les mots qui la constituent et les place dans un tableau de chaînes de caractères. Indication : Utiliser les fonctions nombre_espaces, strchr, strcpy et strncpy.
Université Mohammed V de Rabat Année Universitaire 2019/2020 Faculté des Sciences MODULE M21 (SMI4) Département d'Informatique Travaux Dirigés de Programmation II [Solutionnaire TD n°2 : Chaînes de Caractères (Partie I)] Objectifs : - Introduire les chaînes de caractères ; - Traiter des applications des chaînes de caractères. Exercice 1 a)- void lire_chaine(char tab[100]){ // Lire au clavier une chaîne de caractères // et la mettre dans le tableau tab int i=0; char c; // caractère lu au clavier par getchar() c=getchar(); while ((c!='\n') && (i<100)){ tab[i++]=c; c=getchar(); } tab[i]='\0'; // placer caractère fin de chaine } Exercice 2 a)- Répondre aux questions sans utiliser la librairie // En utilisant des tableaux #define MAX 100 int longueur(char ch[MAX]) { // Retourne la longueur de ch int l=0; while(ch[l]!='\0') // ou bien while (ch[i}) l++; return l; }