You are on page 1of 18
Département ’Informatique Module 1132 : Algorithmique et programmation 2 Parcours MIP ($3) Automne 2019/2020 Examen Pr, S. ANTER 1h30 ~ Page 1/2 - NB: 2, St au cours de Uéprewve, vous replrez ce qui vous semble ite une erreur d’énoncé, vous le sigales sur votre cupie et Poursuives votre composition en espliquant les raisons des initiatives que vous avez amené a prendre. 4 Ba qualité dela rédaction, la clarté et la précision des rasonnements entreront pour une part importante dans Vappréciation des Le but de cet exercice est d’implémenter des opérations sur des polynémes par des tableaux de structures. On Teprésente un polynéme par un tableau de mondmes oii un monéme est défini par une structure A deux ‘champs le coefficient ot Vesposant. Par exemple, le polynéime 82° + 7a4 +52? +3 peut Stre représenté par le teblenn des ‘mondmes suivant : Sea | aera Soit la structure suivante : a J 1] typeaer struct ( 2 float coef; 4 int exp; 4] dmonon: Soit la fonction mystere suivante : Afvoia nystere (ine LO, int md int 1,3, for Gsi;4¢ jo x= LE; while (0 < j bk x > LIj-11)¢ LO] = DOj-1; 5 saga ise u uy > vp> LU) = x5 1. Lors de l'appel mystere(L,5) lorsque Zest le tableau {6, 2, 4, 7, 9}, donner le contenu du tableau L ala fin de chaque itération de la bouele for.(2pte) 2 On soubaite, partant d'un tableau de monémes, trier le tableau par ordre décroissant des exposants suivant le fonctionnement ci-dessous : AfMonone PE] = (3 , 0}, (2, 6), (6, 2, (7, a> ‘Aprés I'appel trier(P,4), le tableau P devient Ye, 6, 7, a, &, 2. ha, ov > En modifiant la fonction mystere, YeWuirla fonction void trier(Monome LJ, int m) réalisant cette opération ‘of m est ls Jongueur du tableau L.(2pts) 3. En utilisant le formalisme pointeur, et sans trier le tableau des mondmes, définirla fonction int dere(Monome Lf}, int m) retournant le degré du polynéme représenté par le tableau des mondmes L de langueur rm. (2pts) 4. Soit un polynéme P définie per le tableau de monémes L selon le principe expliqué plus haut. En utilisant le formalisme pointeur, définir Ia fonction float eval(Monome Lj, float, int m) qui caleule et retourne la valeur de P(z) ob z est un nombre réel passé en paramdtres et oft m Ia longueur du tableau ‘L.(2pts) ~ Page 2/2 - 5. Soit le polyndme suivant : P(z) = a2" +--+ -+ag27 4012" +09 = En supposant que a; x0 Vi € [0,n], calculer le nombre de multiplications qu'effectue la fonction eval en fonction den, Justifier votre réponse (Il n'est pas demandé d’écrire un programime).(ipts) 6. Afin de réduire le nombre de multiplications effectuées, le mathématicien anglais William George Horner (1786-1897) « proposé une méthode efficace. Elle consiste & remplacer le polynime P(t) = aq” +--- +090" + af +09 par P(e) = (( (eet + ont)2 + Ona) + on-s)2-+ += -+.01)2-+ a9 = En supposant que a; #0 Vi e [0,n], définir Ia fonction float horner(Monome W},oat 2, int m) qui caleule et retourne la valeur du P(x) selon la méthode d'Horner.(2pts) 7, Caleuler Ie nombre de mupltiplications qu'effoctue la fonction horner en fonction de n. Justifier votre réponse (U n'est pas demandé d’écrire un programme).(1pts) Les imprimantes sont des systémes fabriqués en grande série dans des usines robotisées. Pour améliorer la qualité des produits vendus, ila 6té mis en place différents tests de fin de chalne pour valider 'acsemblage des produits. {les échantillons de tests cont envoyés sous la forme d'une trame (chaine de caractiree)-et sauvgardés dans un fichier texte chacun dans une ligne. Chaque échantillons (ligne) se présente sous la forme suivante — un entéte qui permet d'identifir la mesure sur un caractére (°U' tension moteur,’T” courant moteur, "P? position absolue), an — Je nombre de mesures envoyées, — les données constituées des mesures obtenues, chaque mesure étant codée & aide du caractére “4” ou” de 3 caractéres pour la valeur absolue, = un checksum, somme des mesures obtenues modulo 10000 (4 caractéres). ‘Bxemple : Soit le fichier qui contient un exemple de deux echantillons : 1 fesse Sasso 2 | P004+005-013+002+005-0001 3 Soit la fonction echentillon lect.echantillon(char* mesure) (supposée prédéfinie et que vous pouves utiliser au 8 de besoin) qui retourne un échantillon & partir de la mesure (chaine de caractres) passée en arguement. Exemple : Soit la mesure suivante: m="U005 +012+-004-029-002+0{2+0099". Aprés Vexécution de elect echantillon(m), la variable ¢ contiendra la structure {°U’, 5, {12, 4, -23, -2, 42), 33).(2pta) Soit les déclarations suivantes 7+ Wonbre max de mesures par échantillon +/ 1] #derine nbr_nesure. 2 /* Longueur max des 1ignes du fichier +/ #define taille. 1] typedet seructt 2] char sa; 3] int nombre_nesur 4] int nesure (abr; 5 6 int chekeom; Yechantilion; 1. Eerire Ia fonction int somme(int tf, int n) qui retourne la somme des valeurs de t.(2pts) 2. Ecrire la fonction void lire(char* fichier, echantillon Ej) qui récuptre toutes les mesures de fichier dont le nom est passé en arguements et de les stocker dans le tablean E. (2pts) 3. Ecrire In fonction int check(echantillon ¢) qui retourne 1 si léchantillon e est: valide (La somme des mesures ‘modulo 10000 est égale au checksom) et 0 sinon. (2pta) 4. En utilisant le formalisme pointeur, Gere Ia fonction int tension. moteur.mon.valide(echantillon HJ, int n) gui regoint en paramétres le tableau E de tous les échantillons ainsi que sa longueur n et qui retourne le nombre d’échantillons “tension moteur” non valides. (2pts) Département 4’Informatique Module 1132 : Algorithmique et programmation 2 Parcours MIP ($3) Examen (2017/2018) one Pr. 8. ANTER NB :1.5i, au cours de Vépreuve, vous repérez ce qui vous semble étre une erreur d’énoneé, vous le signales sur vatre opie et poursuives votre composition en expliquant les raisons des initiatives que vous avez amené & prendre fT qualité de lo rédaction, la clarté et le précision des raisonnements entreront pour une part importante dons Voppréciation des copies. On se propose d'écrire une application en langage C qui permet de gérer les factures d'un magasin qui n'ont pas encore é¢6 payées. Chaque facture est définie selon le type Facture ci-dessous et dont, Date est une autre structure représentant une date = typedef struct( int aun typedef struct{ char nos [30] Non du client float priziT ; //Prix hors taxe & payer (en dh limite ; // Date limite de paiement 1. Définir la fonetion Facture lire() permettant de eréer et de retourner une facture dont le numéro, nom, pric HT et date limite (jour, mois et année) sont lus au clavier sant le formalisme pointeur, définir Ia fonction void lire.tous(Facture* F, int nf) permettant de ire les nf factures non payées dont Jeurs informations sont lues au clavier et de les stocker dans le tableau F (penser & utiliser la fonction lire de la question Q.1). 3, Définir la fonction void trier(Facture* F, int nf) permettant de trier les factures par ordre croissant du nom des clients. 4. En supposant que le tableau des factures est trié par ordre croissant des noms des clients, et en utilisant tune recherche dichotomique, définir la fonction Facture recherche. dichotomique(Facture* F, int nf, char* nom) retournant la facture correspondant au client dont le nom est passé en argument et structure vide sinon (c-a-d return {0,”",0,{0,"",0}}). 5. Berire une fonction d'entéte void maj-factures(Facture* F, int nf) qui permet d’augmenter de 10% par fan de retard les prix HT de toutes les factures dont l'année limite de paiement est strictement inférieure année en cours (2018) Exemple 1 Soit la facture ayant l'année limite de palement 20016 et le prixHT—100dh, le nouveau prix deviendra 121 dh. (De 2016 & 2017 on augmente le prix de 10% soit 110, de 2017 & 2018, on augmente 110dh de 10% soit 121 dh) 6. En utilisant le formalisme pointeur, écrire une fonction d’entéte float total. TTC((Facture* FP, int nf) qui retourne la somme des prix totaux TTC (Toute Taxe Comprise) de toutes les factures dans le tableaux F. La TVA étant fixée & 20% (Priz-TTC = Pric_HT + PrisHT * TVA) 7. Définir la fonction void sauvgarder(Facture' f, int nf, char* fichier) permettant de sauvegarder toutes les factures dans le fichier dont le nom est passée en arguement. 8. Ecrire un programme principale de test 1. Distance de Hamming entre deux mots : La distance de Hamming entre deux mots (chaine de ‘caractéres) de méme longueur est égale au nombre de lettres, & la méme position, qui différe. Par exemple la distance de Hamming entre "rose" et " ruse” est de 1, alors que la distance de Hamming entre "AFMDH" et "ABEDO" est de 3. = Définir la fonction int hamming(char* motf, char* mot2) permettant de calculer la distance de Ham- ming entre les deux mots passé en arguement (mot! et mot# sont deux chaines de caractéres de méme longueur) 2, Distance de Hamming d’un langage : Un langage est un tableau de mots (supposés de méme lan- ueur), La distance de Hamming d'un langage est éxale au minimum des distances de Hamming entre deux mots de ce langage différents deux & deux. = Définir la fonction int distanceHammingLangage(Char langage (NBI[L]) qui retourne la distance de Hamming de son paramétre langage (langage est un tableau de NB mots tous de méme langueur L, NB et L sont deux constantes symboliques strictement posits déja déclarées) Sit ay ul or een nt ee adh Semen el say ping ge tem wt ‘ oie aoe as r Pat + » sia La ah . Me oe Diethyl ookted ohana 5 ce) eo er Wh A yada ae di nS CS ths came Saal 5 oti het eri. Hate sabes wl ep Whergies ait Fe A encase. sirinkoe sat Bh malta des paler eee PS RR or SRI wey i set Ath Heme daca atest oma (EDS Miy"" RF siete beg oh pom Spt Soe sti tae Ue od Senet er he tar Wert deci SIRE I Nee Sime wh >it wena Ri Qe mii i aha i Ce aie seat ART P Rg Fp Arye oul cat fer ed (we apa IE AGORA es Te SOE a ish Ainagte de OH a 18 eared cae be foe lye Naha at ie of tn = Ule Jest eae Wierda be eee Module 1132 » Algorithmique et programmation 2 wae Parcours MIP (33) sea sae (2017/2018) Pr. 8. ANTER Rattrapage NB : 1.5%, au cours de Véprewve, vous repérez ce qui vous semble étre une erreur d’énoneé, vous le signales sur votre copie et poursuives votre composition en expliquant les raisons des initiatives que vous avez amené & prendre 2 La qualité de la rédaction, le claté et la précision des raisonnements entreront pour une part importante dane Vappréciation des copies. 1. Eerire la fonction void lire (float tabj), int nb) qul initialise le tableau tab par nb nombre réels lus au clavier. (On utlisere uniquement des pointeurs pour pareouri le tableau. Aucun indice entir n'est autoreé) 2, Berire Ia fonction void afficher(float tab{), int nb) qui affiche les tableau tab. (On utilisera uniquement des pointeurs pour parcourir le tableau, Aucun indice entier n’est autorisé)- 3, Rerire la fonition int nbldern(float ti), float t2/), int nb) qui retourne le nombre de valeurs identiques et dau méme endroit dans les tableaux t1 et €2 supposés de méme taille nb. (On utilisera uniquement des pointeurs pour parcourir le tableau. Aucun indice entier n'est autorisé). 4. Ferire la fonction void inverse Tab(float tabj), int nb) qui modifie le tableau tab en inversant la position dde tous los éléments. Le tableau contenant « 10 30 15 6 > devient « 6 16 30 10 >. (On utilise uniquement les pointeurs. Aucun indice entier n'est autorisé) 5, Eerire un programme principal de test ob vous — Déclarea deux tableaux de réel. — Lise les valeurs des deux tableaux. — Calcules ot affichea le nombre de valeurs identiques des deux tableaux. — Inverser leurs contenus et Valficher. Le principe du SUDOKU est trés simple. Sur une grille 9x9, il faut placer les chiffres de 1 8 9 tels que toutes Jes lignes, toutes les colonnes et toutes les régions ne doivent voir ces chiffres qu'une seule fois. Dans eet exercico tn se propose d'écrire deux fonctions qui permettent de tester partellement une grille de sudoku. Une grille de sudoleu sera représentée par un tableau d'entiers de 9 lignes et 9 colonnes. Une case de la grille contient: un nombre compris entre 1 et 9 ou bien un 0 pour indiquer que la case est vide. 4. Définir la fonction verife.valeurs qui prend en parometre une grille de sudoku (une matrice 9X9) et qui renvoie 1si toutes le cases ont des valeurs correctes ou bien 0 si une case contient tune mauvaise valeur, 1 me s'agit pas il de savoir si la grille est bien remplie en respectant les régles du sudoku, mais simplement de verifier quil n'y « pas dans la grille de valeur supérieure & 9 ou inférieure & 0. 2. Dédinir In fonction controle-ligne qui prend en paramétre une grille de sudoku et un numéro de ligne ft qui vérfle que ln ligne en question est correctement remplie. Autrement-dit, le chifres entre 1 et 9 niapparaissent ait plus qu'une fois chacun sur la ligne 4, Définir la fonction controle-colonne qui prend en paramitre une grille de sudoku et un numéro de colonne tt qui vérfe que la colonne en question est correctement remplie, Autrement-dit, les chifres entro 1 et 9 napparaissent au plus qu'une fois chacun sur Ia colonne. 4, Définir Ia fonction controle-matrice qui prend en paramétre une grille de sudoku et qui vérife que toutes Jes colonne et toutes les lignes sont correctement remplies. ‘Uno des contraintes syntaxiquos d’un programme écrit en langage C ost do respecter les délimiteurs de blocs (los accolades) : & chaque accolade ouvrante ({) doit correspondre tune accolade fermante (})- Ce porive la fonction verifier qui prend en paramétre le nom d'un fichier (texte) source et qui vérifie que les sreolades sont correctement positionnées dans ce fichier en retournant 1 si c'est le cas et 0 sinon. ere i ws a scene a et towed ann seoomae Tae woes aS dan TRASH pe ea Wickes een eee - Peni se stings yw Syme Aueeeel outs CaN eT en ey as nse i gn org ait to Ose ns mrerne: Woot er gy . Caccn e ae mk in ag al ete Ue Test Dépatonednoratiqu Module 1132 : Algorithmique et programmation 2 2a sie ci aa fase Parcours MIP (S3) ea (2018/2019) Pr. 8. ANTER Examen 1h30 ~ Page 1/2- NB 2 1. Si, aw cours de l'éprewve, vous repérez ce qui vous semble étre une erreur d’énoneé, vous le signalez sur votre ‘copie et poursuivez voire composition en ezpliquant les raisons des initiatives que vous avez amené & prendre. 2 La qualité de ta rédaction, la clarté et la précision des raisonnements entreront pour une part importante dans Vappréciation des copies. Dans cet exercice, nous allons écrire du code C permettant de gérer un élevage de lapins. Dans un élevage moderne, chaque lapin porte un émetteur/récepteur GPS. De cette manitre, la position exacte de chaque lapin est connue en tout temps. encase I aie FM Wie pases iit keen === =H Be ep peeetcke os geepeeh Ss eee ree reer secrete = typedef struct{ ‘char code [10]; 3 gist float i floaty: imine , diapin; ane | " Sala oa La Jongueur de Venclos (longueur) ainsi que sa largeur (Jargeur) sont des variables globales déclarées et initialisées. On supposera qu'un enclos a toujours une forme rectangulaire. 1. Définir Ia fonction dentéte int exterieur(lapin'* enclos, int NL, int code) permettant de vérifier si un lapin s'est echapé (se trouve a l’extérieur de enclos, autrement-dit : 2 > longueur ou y > largeur). La fonction recevra le code du lapin (code), Ie tableau des lapins (enclos) ainsi que leur nombre (NL) et retournera 1 si le lapin dont le code est passé en parambtre est & l'extérieur de l'enclos et 0 sinon. 2, En utilisant le formatisme pointeur (aucun indice n’est autorisé), définir la fonction dentate int alarme(lapin* enclos, int NL) qui permet de tester si des lapins se sont échappés de Penclos. La fonction retournera 0 si aucun lapin ne s'est échappé et 1 sinon. 3, Nous aimerions maintenant identifier les lapins éventuellement en dehors de l’enclos. Pour ce faire, écrire la fonction d'entéte void lapins.echapes(lapin* encios, int NL) permettant d'afficher les codes ainsi que les coordonnées des lapins qui se trouvent en dehors de enclos. 4, Bcrire la fonction d’entéte float distance(lapin* enclos, int 11, int 12) qui retourne la distance entre les eux lapins dont leurs codes 11 et 12 sont passés en paramdtre (la distance entre deux point A(a, Ya) et Bx, ys) est Ga — 2)? + Ua — W)*)). 5, Donner le corps de la fonction d’en-téte int plus_proche.lapin(lapin* enclos, int NL, int code) qui retourne le code du lapin le plus proche de celui dont le code est passé en parambtre. 6. Définir la fonction d'entéte void trier(lapin* enclos, int NL) permettant de trier les lapins par leurs abscisses. 7. Définir la fonction void sauvgarder(lapin* encios, int NL, char* fichier) permettant de sauvgarder les informations des lapins (code et coordonnées) dans le fichier dont ie nom est passé en paramétre. ‘On se propose dans cet exercice de trier une matrice. Exemple : Soit M une matrice de L lignes et C colonnes od L et C sont deux contantes globales déclarées et initialisées. syn ays 172 [3 [4 4 [12 [TI] 2 | Pappel de ta fonction trier(M) donnera le résultat suivant: [S]6 [7 [8 es [thio oor az = Page 2/2 - Le principe de ce tri est le suivant : = Localiser la case contenant la valeur min et I'échanger avec la case M00]. = Localiser la case contenant la valeur min du reste de la matrice (partie grise, autrement-dit, la partie se trouvant entre les cases M{0|[1) et M(Z — 1][C — 1]) et ‘Véchanger avec la case M(0)|[1). = Localiser la case contenant la valeur min du reste de la matrice non triée (partie arise) et Méchanger avec la case M0)(2. = ete 1. Définir la fonction int ligne.min(int M/L{(CJ , int io , int jo) permettant de retourne T'indice de la ligne de Ja case contenant Ja valeur min de la partie de la matrice se trouvant entre la case M|io][jo] et M[L~1][C—1] 2, Définir la fonetion int colonne.min(int ML|{C} , int ip , int jo) permettant de retourne indice de la colonne de la case contenant la valeur min dela partie de la matrice se trouvant entre la case Miig|{jo] et MIL -1\(C -1) Exemple Soit la matrice suivante Les appels des fonctions suivantes igne.min(M,0,3) et colonne.min(M,0,3) renvoient respectivement les valeurs 1 et 0. En effet, la veleur min de la partie entre la case M{0}(3] et la case M{L—1)[C ~1] (la partie arise) se trouve dans la cas M(1}(0) 3. Définir la fonction void echanger(int M[L}{C] , int ip , int jn , int i , int j1) permettantd’échanger les cases Mlio]|jo] et M{ix}{i1) 4. En utilisant les fonctions précedentes, définir la fonction void trier(int M(b|[O]) permettant de trier la matrice M. Département d’Informatique Module 1132 : Algorithmique et programmation 2 Parcours MIP ($3) Pr. 8. ANTER Examen 2018/2019 1h30 ee ~ Page 1/2 - NB: 1. Si, au cours de ’épreuve, vous repérez ce qui vous semble étre une erreur d’énoneé, vous le signalez sur votre copie et poursuiver votre composition en expiquant les raisons des initiatives que vous avez amené a prendre. 3. Chaque partie de ce sujet peut étre traitée séparement. Vous pouves utiliser toutes les fonctions des questions précédentes méme si vous ne les avez pas implémentées. tok Dans le domaine de la bioinformatique, la recherche de sous-chaines, appelée motif, dans un texte de taille trés grande, était un composant important de beacoup d’algorithmes. Les motifs recherchés ainsi que le texte dans lequel on effectue la recherche, sont écrits dans un alphabets composé de quatre caracttres :A, C, G et T. Ces caractéres représentent les quatre bases de l’ADN : Adéninne, Cytosine, Guanine et Thymine. 1, Sans utiliser la fonction sirlen de la bibliothtque string.h, ecrire la fonction int len(char* §) qui regoit en paramétre, une chaine de caractéres $ et qui retourne sa. longueur. Exemple : len ("AGT") renvoie 3 len("") renvoie 0 2. Ecrire une autre version de la fonction Jen, en utilisant le formalisme pointeur. 3. Un préfixe d’une chaine de caractéres non vide, est une sous chaine non vide de 5, composée de la suite des caractéres entre la premitre position de $ et une certaine position de S. Exemple : La chaine "TAT" est un prefixe de “TATCTAGCTA". La chaine "TATCTA" est un prefixe de "TATCTAGCTA". = Sans utiliser la fonction strnemp de la bibliothéque string.h, écrire la fonction int est_prefice(char* M, char* 8), qui recoit en paramétre deux chaines de caractéres M et S non vides, et qui retourne 1 si la chaine M est un préfixe de $ et 0 sinon. 4, Un suffixe d'une chaine de caractires $ non vide, est une sous-chaine M non vide de S, composée de la suite des caractéres, on partant d’une certaines position p dans $, jusqu’d la derniére position de $. L’entier p est appelé position du suffize (Rmarquer que p = len($) — len(M)) Exemple : La chaine "CTA" est un sufixe de "TATCTAGCTA" de position 7. La chaine "CTAGCTA" est un sufixe de "TATCTAGCTA" de position 3 La chaine "AGAT" n’est pas un sufixe de "TATCTAGCTA". = Eerire la fonction int est.suffize(char* M, char* $), qui regoit en paramétre deux chaines de caractéres M et S non vides, et qui retourne 1 si M est un suffixe de S et 0 sinon. - Page 2/2 - Eerire la fonction void sous.chaine(char*S, char*M, int p) qui regoit en paramétre deux chaines de caractires S et M et un entiers pet qui permet de copier dans M la sous chaine de caractéres de S située entre la*position p et la fin de la chaine de caractires (Ie caractére de fin chaine \0 inclu). (On suppose que 0

len(S) —p) Exemple : Soit S="TAGCT" Aprés 1’appel sous_chaine(s,m,3), M devient "CT" Aprés 1’appel sous_chaino(S,M,0), M devient “TAGCT* Aprés 1’appel sous_chaine(S,M,4), M devient "T" . Soit la structure suivante typedef struct{ char suff[100]; /*0 int position; }euffixe; = Ecrire la fonction void liste-suffizes(char* S, suffize T/]), qui recoit. en paramtre une chaine de caractéres $ non vide, un tableau des suffixes T (remarquer que la longueur du tableau T est égale la longueur de la chaine de caractéres S) et qui permet d’extraire tous les suffixes de $ et de les stocker dans le tableau T. Exemple : soit la chaine S="TAGCT" Apres Vappel de la fonction liste-suffizes(S,7) on obtient le tableau T suivant : [t=CC"TAcet™ oF, CraGcT™ 1}, ("CCT 2}, C"eT" 3}, (°7T" 499) Ecrire la fonction void trier(suffize Ti], int N), qui regoit en paramétre le tableau T des suffixes d'une chaine de caractire de longueur N, crée selon le principe décrit dans la question 2. La fonction trier, trie les éléments de T dans 'ordre alphabétique croissant des suffixes. Exemple : [t-CO"TAGCT™ 0}, ("AGOT" 1}, ("GOT 2}, C"CT" 3}, C97", 4) Apres l’appel de la fonction trier(T,5) le tableau T devient : [t=€C" accor" 1}, ("CT 3}, {"GCT" 2}, {"T" 4}, {"TAGCT" ,0}} EE 10. Ecrire une fonction int position(suffize Ti), char* S, int N), qui utilise le principe de la recherche dichotomique dans le tableau des suffixes T trié dans Vordre al- phabétique croissant des suffixes. Si S est un suffixe alors la fonction retourne la position du motif $ et -1 sinon. Exemple : Soit {"AGCT" ,1},{"CT",3},{"GCT" ,2},{"T" 4}, {"TAGCT" ,O}} position(T,"CT",5) renvoie 3. position(T,"GCT",5) renvoie 2. position(T,"TAGCT",5) renvoie 0 position(T,"TATCG",5) renvoie . Ecrire la fonction void sauvgarder(suffize T{j, int N, char* nom-fichier) permet- tant’de sauvgarder tous les suffixes dans un fichier texte dont le nom est passé en arguement. Eerie un programme principal de test (main) ot vous appellez toutes les fonctions définies plus haut, avec des exemples de votre choix. wee #include typedef struct{ char suff [100]; int position; yout fixe; int len(char* s){ int n=O; char* p=s; while (ep!="\0'){ att; pets 3 return n; 3 int est_prefixe(chars m, chars s){ ant i= while (mfi]!=*\0")¢ if(a[i] !=s[i))return iets + return 1; + int eet_suffixe(char* m, char* s){ int i,p.j; pelen(m); i=; en(s)-len(m); while(i<=p){ printé("%e %e\n",mCil,s(5])5 if(m(i]!=e[j]) return 0; itty atts i return 1; + void sous_chaine(char*s, char*m, int p){ int i; for (45 + void liste_suffixes(char* S, suffixe T[]){ int i; for (i=0;i0){ keji } + aux=T(i]; TUi)=TOk); Tlk]=aux; > } int position(suffixe T[], char* S, int N){ int g.d,m; a-n; while (g0)d=m; else g=n+1; + return -1; + void sauvgarder(suffixe T[], int N, char* nom_fichier){ FILE* f=fopen(non_fichier ,"w"); for(int i=0;i

You might also like