Examen 2012
Examen 2012
Examen 2012
Soit un entier N donnée en base 10, écrire une fonction récursive qui convertit N en
binaire.
Exercice 2: (4points)
Soient deux piles1 P1 et P2 d’entiers, écrire une fonction NB_Diff qui retourne le
nombre d’éléments de P1 qui n’existent pas dans P2 (Ne pas restaurer P1 et P2).
Exercice 3: (13 points)
Soit un texte T (taille max=1000) constitué de mots séparés par un seul blanc.
(Remarque : Il y a un blanc après le dernier mot)
a) Définir le type texte.
b) Ecrire une fonction RechPosMot qui recherche dans T un mot donnée M et
retourne sa position s’il existe sinon retourne -1, ainsi que l’adresse du mot
suivant s’il y en a.
Prototype : char * RechPosMot(texte T, char* M, int* pos) ;
1
Les fonctions sur les piles, dont les prototypes sont donnés ci-dessous, sont supposées prédéfinies :
pile initpile() ; int pilevide(pile p) ; typelem sommetpile(pile p) ;
void empiler(pile *p , typelem x) ; void desempiler(pile *p, typelem* x) ;
2
Les fonction suivantes : liste créer_noeud() ; void ajout_tete(liste * tete, typelem E) ;
void ajout_Apres(liste* prd, typelem E) ; sont supposées prédéfinies
USTHB 2011-2012 Module ALGO L2-ACAD (S3)
Faculté d’électronique & d’informatique Section B
Département d’informatique C. IGHILAZA
d) Ecrire une fonction ExtraireMots qui retourne une liste chainée Lmot
contenant chaque mot du texte T ainsi que la liste de ces positions.
Remarques : - Il faut donner la déclaration de la liste (avec element qui est une
structure contenant le mot (taille max=30) et un pointeur
(Tetepos) sur la liste des positions)
- La liste va contenir même les mots qui se répètent et qui seront
supprimés par la suite.
- L’ordre des mots n’a aucune importance
f) En utilisant la liste Lmot, écrire une fonction Mot_Frequent qui retourne le mot
qui se répète le plus dans le texte T.
g) Ecrire le programme qui étant donnée un texte T, extrait les mots et construit la
structure de point d’entrée Lmot, supprime de Lmot les mots qui se répètent
puis affiche le mot le plus fréquent.
Rappel :
strcmp(S1, S2) = 0 si S1=S2 ,
> 0 si S1 suit S2,
< 0 si S1 précède S2
3
Les fonctions suivantes : void supprim_tete(liste *tete) ;
void supprim_Après(liste prd, liste p) ; sont supposées prédéfinies
USTHB 2011-2012 Module ALGO L2-ACAD (S3)
Faculté d’électronique & d’informatique Section B
Département d’informatique C. IGHILAZA
Exercice1:
int binaire1(int n)
{ if(n!=0) return(n%2+10*binaire(n/2));
else return 0;
}
Exercice2:
typedef int typelem ;
pile Diff_Poly(pile p1, pile p2)
{ typelem x1, x2; pile R=initpile(); int cpt=0; int bool;
while (!pilevide(p1))
{ desempiler(&p1,&x1); bool=1;
while(!pilevide(p2) && bool==1)
{ desemiler(&p2,x2); empiler(&R, x2);
if (x1==x2) bool=0;
}
if (bool==1) cpt++;
while (!pilevide(R) ) {desmpiler(&R, &x2); empiler(&p2,x2);
}
}
Exercice3:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
liste2 creer_noeud2()
{ liste2 p=(liste2)malloc(sizeof(noeud2));
if (!p) { printf("erreur d'allocation\n"); exit(-1); }
return p;
}
liste2 ExtraireMots(texte T)
{ liste2 lmot=NULL; int i=0,j; chaine M; element E;
while(T[i]!='\0')
{ j=0;
while(T[i]!=' ') { M[j]=T[i]; i++; j++; }
M[j]='\0'; strcpy(E.mot,M); E.svt=PositionMot(T,M);
ajout_tete2(&lmot,E);
i++;
}
return lmot;
}
while(lmot!=NULL)
{ tetepos=lmot->E.svt;
f=0;
while(tetepos!=NULL) { tetepos=tetepos->svt; f++; }
if (f>fmax) { fmax=f; s=lmot; }
lmot=lmot->svt;
}
strcpy(M,s->E.mot);
}
main()
{ texte T; chaine M; liste2 lmot;
printf("Donnez votre texte \n");
fflush(stdin);
gets(T);
lmot=ExtraireMots(T);
printf("Affiche le contenu de la structure\n");
affiche(lmot);
supprim_repetition(lmot);
printf("Apres suppression \n");
affiche(lmot);
FrequenceMax(lmot,M);
printf("Le mot le plus fréquent est : %s", M);
getch();
}