Annee universitaire2006-2007
Serie de TD n o
5
Exerie 1
Consideronsle programmesuivant:
#inlude <stdio.h>
void fontion1(int) ;
int main()
{ int x=0, y=79 ;
fontion1(x) ;
if (y%x)
printf("Ce ne sont pas des multiples\n") ;
else
printf("Ce sont des multiples\n") ;
return 0 ;
}
void fontion1(int iArg)
{
do
{ printf("Entrer un nombre : ") ;
sanf("%d", &iArg) ;
} while ( (iArg<=2) || (iArg>12) ) ;
}
1. En utilisant la representation de la pile vue en ours, donner les etats suessifs de la pile
lorsquelesvaleurs saisiesau laviersont 29puis4.
2. Expliquerpourquoi leprogrammene fontionne pas.
3. Corriger de deux manieres dierentes la fontion fontion1 an que le programme puisse
fontionnerorretement.
Exerie 2
1. Donnerl'aÆhage provoque parle programmesuivant:
#inlude <stdio.h>
void ehange ( int, int) ;
int main()
{ int n=10, p=20, a=30 ;
printf("avant appel : %d %d\n", n, p) ;
ehange (n, p) ;
printf("apres appel : %d %d\n", n, p) ;
return 0 ;
}
void ehange ( int a, int b)
{ int n ;
printf("debut ehange : %d %d\n", a, b) ;
n = a ;
a = b ;
b = n ;
printf("fin ehange : %d %d\n", a, b) ;
}
2. Erireunefontionquiehangeles valeursentieres pointees pardeuxpointeursd'entier.
3. Erireunefontionquiehangeles adressesontenues dansdeux pointeursd'entier.
Un nombre premier est un entier stritement positif qui n'est divisible que par 1 et par lui-
m^eme.
Le rible d'Eratosthene est un proede algorithmique pour etablir la liste des nombres pre-
miers inferieursou egaux a un ertain entier donne n. On onsidere tout d'abord une liste L
representantlesnombresentiersde1an. Onproedealorsparetapessuessivesen\eliminant"
de L tousles multiplesde 2 (dierentsde 2),puistousles multiples de3 (dierentsde 3), de5
(dierents de5), et.
Le butde etexerieest d'erireunprogrammeCpermettantde mettreenoeuvreeproede.
Pour ela, on onsidere un tableau de n entiers,initialement tousegaux a 1. (On remarquera
que l'entieri orrespond a l'element d'indiei-1 dansle tableau.) Une etape d'elimination des
multiplesd'unentierk(voirl'exemplei-dessouspourl'evolutiondesvaleursdek)onsistealors
a aeter la valeur 0 aux elements du tableau orrespondant a des multiples de k (et qui sont
dierentsde k).
A lan desetapesd'elimination,seulsles nombres premiersorrespondronta
deselementsde valeur1 dansletableau.
Exemple : deroulement durible d'Eratosthene pourn=10 :
1 1 1 1 1 1 1 1 1 1
1 1 1 0 1 0 1 0 1 0
1 1 1 0 1 0 1 0 0 0
1 1 1 0 1 0 1 0 0 0
1 1 1 0 1 0 1 0 0 0
Chaque ligne i-dessus orrespond a l'evolution du tableau au ours des etapes d'elimination.
La premiere ligneorrespond a l'initialisation,la deuxiemea k =2 etla troisieme a k =3. La
quatrieme ligne orrespond a k = 5 qui est pluspetit nombre premier stritement plus grand
que3. Lepassagedek=3ak =5esteetueenremarquantque5estl'entierorrespondanta
lapositiondupremier1parmileselementsdutableaud'indieau moins3. Enn,lainquieme
ligneorrespond ak =7. On s'arr^ete alorsartous leselements d'indieau moins7 sont nuls.
1. Erireunefontionquiretourne unentierstritement superieura 1 saisiau lavier.
2. Erireunefontionquipermetd'initialisera1 tousles elements d'untableau d'entiers.
3. ErireunefontionMultipleDansTableau(int viTab[℄, int iN, int iK)quipermetd'aeter
lavaleur0 a tousleselements dutableauviTaborrespondanta desmultiples deiK strite-
ment plusgrandsqueiKetinferieursouegaux a iN.
4. Erire une fontion ProhainNombrePremier(int viTab[℄, int iN, int iP) permettant de
passerd'unnombrepremieraunombrepremiersuivant. Cettefontionretourneralenombre
premier (inferieur ou egal a iN) venant juste apres le nombre premier iP dans le tableau
viTab[℄,ou0 s'il n'yen a pas.
5. Erire une fontion Eratosthene(int viTab[℄, int iN) permettant de mettre en oeuvre le
rible d'Eratosthene. Cette fontion modiera les elements du tableau viTab de maniere a
n'avoir a lan de la fontionque les nombres premiers (entre 1 et iN) quiorrespondent a
deselements de valeur1 dansle tableau.
6. Erire une fontion AffiheNombrePremier(int iN) permettant d'aÆher tous les nombres
premiers omprisentre 1 et iN. Cette fontion utilisera(au moins) les fontions erites aux
questions2 et5.
7. ErireunprogrammeCpermettantdesaisiraulavierunnombreentierstritementsuperieur