CHAPITRE 8 : Tableaux et structures #Cours #Quiz #QUIZ SUR LES TABLEAUX, CHAÎNE DE CARACTÈRES ET STRUCTURESEXERCICES #📝 À NOTERPour des raisons historiques, la numérotation des exercices n’est pas continue.Exercice 1 #Parmi les définitions suivantes, indiquer celles qui sont erronées et expliquer pourquoi :unsigned int matrice[3, 3]; int vecteur[6]; char ordinateur[] = 'IBM PC'; float mesure[2][1000]; int des[3] [3] [3]; char nom[8] = "François"; char mois[14] = "juin"; Exercice 2 #Lesquelles des chaînes suivantes sont initialisées correctement ? Corrigez les déclarations fausses et indiquer pour chaque chaîne de caractères le nombre d’octets réservés en mémoire.char a[] = "un\ndeux\ntrois\n"; char b[12] = "un deux trois"; char c[] = 'abcdefg'; char d[10] = 'x'; char e[5] = "cinq"; char f[] = "Cette " "phrase " "est coupée"; char g[2] = {'a', '\0'}; char h[4] = {'a', 'b', 'c'}; char i[4] = "'o'"; Exercice 3 #À la suite des déclarations et instructions suivantes, placer le contenu mémoire des tableaux suivants (valeur décimale ou caractère) :double values[] = {1.2, -2.3, 0.}; short int IDEtudiant[5] = { 1234, 4576, 7345, 9999}; int serie[5]; for (int i=0; i < 5; i++) serie[i]= 2 * i + 1; char texte[]="Alea jacta est"; struct XY { char x; double y } var1 ={'5',5.f}; struct XY tabStruct[3] = {{'5',5.f}, {'6',6.f}, {'7',7.f} }; Exemple :char L[5]={ 'a', 't'}; donne :L[0]L[1]L[2]L[3]L[4]'a''t'000📝 À NOTERChaque élément représente 1 byte.Exercice 21_1 #Écrire une fonction ch08_ex21_1_CompareArray() qui compare deux tableaux d’entiers de même taille et renvoie true si les tableaux sont identiques, et false sinon. ch08_ex21_1_CompareArray() prend 3 paramètres en entrée : les 2 tableaux d’entiers et leur taille, dans cet ordre.ExemplesPour les tableaux suivants :int array1[] = {1, 2, 3, 4, 4}; int array2[] = {1, 2, 3, 4, 5}; ch08_ex21_1_CompareArray(array1, array2, 0) renvoie true. ch08_ex21_1_CompareArray(array1, array2, 4) renvoie true. ch08_ex21_1_CompareArray(array1, array2, 5) renvoie false.Exercice 21_2 #Écrire une fonction ch08_ex21_2_PrintArray() qui affiche à l’écran un tableau d’entiers, et ne retourne rien. ch08_ex21_2_PrintArray() prend donc 2 paramètres en entrée : 1 tableau d’entiers et sa taille.ExemplesPour le tableau suivant :int array[] = {1, 2, 3, 4, 5}; ch08_ex21_2_PrintArray(array, 0) n’affiche rien. ch08_ex21_2_PrintArray(array, 4) affiche 1 2 3 4. ch08_ex21_2_PrintArray(array, 5) affiche 1 2 3 4 5.⚠️ ATTENTIONChaque élément du tableau est suivi d’un espace, sauf le dernier. De plus, il ne faut pas terminer l’affichage par un \n.Exercice 21_3 #Écrire une fonction ch08_ex21_3_FillArray() qui remplit un tableau d’entiers passé en paramètre avec des valeurs saisies au clavier par l’utilisateur. On s’arrête quand l’utilisateur entre une valeur négative. La fonction ch08_ex21_3_FillArray() retourne le nombre de valeurs correctes saisies.⚠️ ATTENTIONIl faut gérer les erreurs de saisie (cf Comment faut-il vider le buffer stdin ?).Exemplesch08_ex21_3_FillArray(array, -1) ne fait rien.ch08_ex21_3_FillArray(array, 0) ne fait rien.Pour le tableau :int array[] = {-2, -2, -2, -2}; alors ch08_ex21_3_FillArray(array, 4) avec les saisies au claviera b 1 -1 change le tableau en :{1, -2, -2, -2}; Pour le tableau :int array[] = {-2, -2, -2, -2}; alors ch08_ex21_3_FillArray(array, 4) avec les saisies au clavier2 2 -2 change le tableau en :{2, 2, -2, -2}; Pour le tableau :int array[] = {-2, -2, -2, -2}; alors ch08_ex21_3_FillArray(array, 4) avec les saisies au clavier3 3 -2 change le tableau en :{3, 3, -2, -2}; Exercice 21 #En vous aidant des exercices précédents, écrire une fonction ch08_ex21_ArraySum() qui :déclare un tableau pouvant contenir 50 entiers maximumdemande à l’utilisateur le nombre de valeurs n à saisir (maximum 50)remplit le tableau avec n valeurs entrées au clavieraffiche les n premiers éléments du tableauaffiche la somme des valeurs saisies se trouvant dans le tableau⚠️ ATTENTIONIl faut gérer les erreurs de saisie (cf Comment faut-il vider le buffer stdin ?).Exemple 1$ .\ch08_ex21_ArraySum.exe Nb values (max.50): a Nb values (max.50): b Nb values (max.50): -2 Nb values (max.50): -1 Nb values (max.50): 0 array: Total sum: 0 Exemple 2.\ch08_ex21_ArraySum.exe Nb values (max.50): 4 Value 0? -2 Value 1? -1 Value 2? 0 Value 3? 1 array: -2 -1 0 1 Total sum: -2 Exercice 22 #Écrire une fonction qui :déclare un tableau pouvant contenir 50 entiers maximumdemande à l’utilisateur le nombre de valeurs nremplit le tableau avec n valeurs entrées au claviercopie toutes les valeurs strictement positives dans un 2ème tableaucopie toutes les valeurs strictement négatives dans un 3ème tableauAffiche les tableauxExercice 23 #Écrire une fonction ch08_ex23_Array2DSum() qui :déclare un tableau d’entiers (taille maximale : 50 lignes et 50 colonnes).lit les tailles (nombre de lignes et nombre de colonnes) au clavierremplit le tableau avec des valeurs entrées au clavieraffiche la somme de tous ses éléments⚠️ ATTENTIONIl faut gérer les erreurs de saisie (cf Comment faut-il vider le buffer stdin ?).Exemple 1 :$ .\ch08_ex23_Array2DSum.exe Nb lines (max.50): a Nb lines (max.50): -1 Nb lines (max.50): 2 Nb columns (max.50): a Nb columns (max.50): -1 Nb columns (max.50): 2 array[0][0]: 1 array[0][1]: 2 array[1][0]: 3 array[1][1]: 4 Total sum: 10 Exemple 2 :$ .\ch08_ex23_Array2DSum.exe Nb lines (max.50): 0 Nb columns (max.50): 9 Total sum: 0 Exemple 3 :$ .\ch08_ex23_Array2DSum.exe Nb lines (max.50): 9 Nb columns (max.50): 0 Total sum: 0 Exemple 4 :$ .\ch08_ex23_Array2DSum.exe Nb lines (max.50): 0 Nb columns (max.50): 0 Total sum: 0 Exercice 24 #Écrire une fonction ch08_ex24_DotProduct() qui calcule le produit vectoriel de 2 vecteurs d’entiers \(\vec{u}\) et \(\vec{v}\) . Les vecteurs sont passés en paramètres sous forme de tableaux d’entiers, avec leur taille, dans cet ordre.📝 À NOTER\(\vec{u} = (3, 2, -4)\) et \(\vec{v} = (2, -3, 5)\) alors \(\vec{u}\cdot\vec{v} = \begin{pmatrix} x_{u} & y_{u} & z_{u} \end{pmatrix} \begin{pmatrix} x_{v}\\ y_{v}\\ z_{v} \end{pmatrix} \newline \vec{u}\cdot\vec{v} = \begin{pmatrix} 3 & 2 & -4 \end{pmatrix} \begin{pmatrix} 2 \\ -3 \\ 5 \end{pmatrix} \newline \vec{u}\cdot\vec{v} = 3 * 2 + 2 * (-3) + (-4) * 5 = -20\)Exemple : Avec les tableaux suivants :int u[] = {3, 2, -4}; int v[] = {2, -3, 5}; alors ch08_ex24_DotProduct(u, v, 3) renvoie -20.Exercice 25 #Écrire un programme qui détermine la plus grande et la plus petite valeur dans un tableau d’entiers. Afficher ensuite la valeur et la position du maximum et du minimum.Note : si le tableau contient plusieurs maxima ou minima, le programme retiendra la position du premier maximum ou minimum rencontré.🧠 NOTION AVANCÉEExercice 26 #Écrire une fonction qui calcule le produit matriciel de 2 matrices d’entiers (A) et (B) passées en paramètres.Exercice 31 #Écrire une fonction qui lit 5 mots, séparés par des espaces et qui les affiche ensuite dans une ligne, mais dans l’ordre inverse. Les mots sont mémorisés dans 5 variables M1, …, M5.Exercice 32 #Écrire une fonction qui lit une ligne de texte (taille max. 50 caractères) et puis un caractère. Elle doit indiquer si le caractère se trouve dans le texte. Si oui, elle doit afficher à quelle position il se trouve (indice de la première occurrence).⚠️ ATTENTIONIL ne faut pas utiliser des fonctions de <string.h>.Exercice 33 #Écrire une fonction qui lit une ligne de texte (taille maximale : 200 caractères), la mémorise dans une variable texte et affiche ensuite : a) la longueur lChaine de la chaîne. b) le nombre de ’e’ contenus dans le texte. c) toute la phrase à rebours, sans changer le contenu de la variable texte. d) toute la phrase à rebours, après avoir inversé l’ordre des caractères dans texte.📝 À NOTERIl faut utiliser la fonction fgets() pour lire une ligne de texte comportant des espaces.🧠 NOTION AVANCÉEExercice 34 #Écrire une fonction qui lit une ligne de texte (taille maximale : 128 caractères), puis qui supprime tous les espaces dans la chaine et tasse les éléments restants.📝 À NOTERCommencer par faire l’exercice sur papier en raisonnant d’abord avec 2 chaines de caractères, puis avec une seule.🧠 NOTION AVANCÉEExercice 35 #Écrire une fonction qui lit une ligne de texte (taille maximale : 128 caractères), y récupère un chiffre (positif ou négatif), le mémorise dans une variable de type long et l’affiche.📝 À NOTEROn supportera les formats simples comme “1748”, “+1748” et “-1748”.Exercice 41 #Définir une structure Time capable de mémoriser le temps d’un marathon (hh:mm:ss).Écrire une fonction ch08_ex41_InitTime() qui prend 3 entiers (heures, minutes, secondes) passés en paramètres et retourne une structure Time.Écrire une fonction ch08_ex41_PrintTime() qui prend une structure Time en paramètre et affiche le temps associé.Écrire une fonction ch08_ex41_Time() qui créé une structure Time contenant 5 heures, 3 minutes et 17 secondes en utilisant la fonction ch08_ex41_InitTime() et l’affiche en utilisant la fonction ch08_ex41_PrintTime().Exemple : Time t = ch08_ex41_InitTime(5, 3, 17); ch08_ex41_PrintTime(t); affichera 05:03:17 si on a stocké 5 heures 03 minutes et 17 secondes dans t1.📝 À NOTERIl faut utiliser un typedef en définissant la structure.Exercice 42 #Écrire un programme pour gérer des nombres complexes. En particulier :définir le type Complex avec 2 membres de type réel : real et imaginaryajouter le code à scanf pour que la saisie d’un nombres complexe ne se fasse qu’au format (r,i) et encapsuler ce code dans une fonction ch08_ex42_InputComplex() qui retourne une structure Complex.ajouter les fonctions ch08_ex42_SumComplex() et ch08_ex42_DiffComplex() appelées pour calculer la somme, et la différence de deux nombres complexes stockés dans une structure Complex. Ces fonctions prennent 2 paramètres de type Complex et retournent un Complex.sum_complex() : \((a_1 + i b_1)+( a_2 + i b_2) = (a_1+a_2) + i (b_1+b_2)\)diff_complex() : \((a_1 + i b_1)-( a_2 + i b_2) = (a_1-a_2) + i (b_1-b_2)\)implémenter une fonction ch08_ex42_PrintComplex() qui affiche un nombre complexe sous la forme suivante : 5.00 + -3.00i.écrire une fonction ch08_ex42_Complex() qui lit deux nombres complexes, calcule leur somme et leur différence et affiche les résultats.📝 À NOTERIl faut utiliser les fonctions écrites dans les points précédents.⚠️ ATTENTIONIl faut gérer les erreurs de saisie (cf Comment faut-il vider le buffer stdin ?).Exemple :$ .\ch08_ex42_Complex.exe Please enter a complex number (r,i): a Please enter a complex number (r,i): -1 Please enter a complex number (r,i): (1,1) Please enter a complex number (r,i): (2,3) Sum = 3.00 + 4.00i Diff = -1.00 + -2.00i ⚠️ ATTENTIONIl faut gérer les erreurs de saisie (cf Comment faut-il vider le buffer stdin ?).Exercice 43 #Créer un type Person pour une personne, caractérisée par son nom (20 caractères maximum), son prénom (20 caractères maximum) et son année de naissance.Dans une fonction ch08_ex43_Person(), déclarer un tableau de 10 personnes et l’initialiser avec les données des sept personnes suivantes :"Knuth", "Donald", 1938 "Kernighan", "Brian", 1942 "Ritchie", "Dennis", 1941 "Thompson", "Ken", 1943 "Minsky", "Marvin", 1927 "Dijkstra", "Edsger", 1930 "Stroustrup", "Bjarne", 1950 Dans la fonction ch08_ex43_Person(), afficher toutes les personnes âgées de moins de 80 ans.⚠️ ATTENTIONIl faut considérer que nous sommes en 2020.Trouver les personnes dont le nom est en tête/en fin de classement selon l’ordre alphanumérique (le plus proche de « AAA » / le proche de « ZZZ » ).⚠️ ATTENTIONIl faut utiliser la fonction strcmp() pour comparer les noms.Qui sont ces personnes et qu’ont-elles fait ?Exemple :7 Persons Persons less than 80 years old: Brian Kernighan 78 years Dennis Ritchie 79 years Ken Thompson 77 years Bjarne Stroustrup 70 years Alphabetic order: The first is: Dijkstra The last is: Thompson