Vous êtes sur la page 1sur 5

Examen dalgorithmique

Mercredi 20 dcembre 2006

Les diffrentes parties sont indpendantes. Lisez tout le sujet avant de commencer Nhsitez pas travailler sur un brouillon avant de recopier ! Loprateur modulo (reste de la division entire) sera not avec le symbole pourcent (%). En plus de vos algorithmes, donnez des commentaires sur ce que vous faites. De mme, si vous navez pas toutes les tapes dun problme, rajoutez un texte explicatif de ce qui manque. Documents autoriss : cours, TD.

Le crible dratosthne

Le crible dratosthne est algorithme permettant de trouver facilement les nombres premiers.

1.1

Prsentation du sujet

Nombres premiers Un nombre premier est un nombre qui nest divisible de manire entire que par 1 ou par lui-mme. Par exemple 3, 5, 11,. . .sont premiers alors que 4 (divisible par 2), 9 (divisible par 3),. . .ne le sont pas. Principe On considre les nombres de 2 N . Le premier (2) est premier, tous ces multiples ne sont donc pas premiers (4, 6, . . .) et sont limins. On sintresse ensuite au prochain nombre qui na pas t limin (3) et on limine tous ces multiples (3,6 qui a dj t limin, 9,. . .). Le prochain nombre non limin est 5 et on ritre lopration (on limine ainsi 15, 25, . . .les autres multiples de 5 sont aussi multiples de 2 et on t limins.) Lopration sarrte lorsque lon est arriv llment N . Le tableau 1 prsente lapplication de cette mthode pour les 10 premiers entiers.

1.2

Travail faire

Proposez un programme qui afche les nombres entiers dans lintervalle 1..N N est demand lutilisateur (maximum 100). 1

T AB . 1 Le crible dratosthne pour les 10 premiers entiers Itration Liste des nombres description de lopration 0 2,3,4,5,6,7,8,9,10 Initialisation des lments de 2 N 1 2,3,4,5,6,7,8,9,10 2 est premier, limination des ces multiples 2,3,4,5,6,7,8,9,10 3 est premier, limination des ces multiples 2 3 2,3,4,5,6,7,8,9,10 5 est premier, aucun multiple dans lintervalle considr 2,3,4,5,6,7,8,9,10 7 est premier, aucun multiple dans linter4 valle considr 2,3,4,5,6,7,8,9,10 Plus aucun nombre non ray dans linter5 valle, n de lalgorithme

Pour cela vous utiliserez un tableau de N cases (et pas N 1). Dans ce tableau vous placerez 0 si le nombre est premier, 1 sinon. Commencez chercher les nombres premiers partir de 2.

1.3

Correction

VAR i,j,n : ENTIER tab[100] : ENTIER DEBUT AFFICHER Jusqu quel nombre voulez-vous rechercher les nombres premiers ? LIRE n POUR i DE 2 A n SI tab[i]=0 ALORS AFFICHER Le nombre i est premier POUR j DE (i+1) A n SI (tab[j]=0) ET (tab[j]%i=0) tab[j]=1 FSI FPOUR FSI FPOUR FIN

2
2.1

Chiffre de Csar
Prsentation du sujet

Lun des plus vieux code secret est le chiffre de Csar. Il consiste en un dcalage circulaire de lalphabet utilis. Le tableau 2 prsente le codage obtenu pour un dcalage de 4 positions de lalphabet. Le mot BAC est cod FEG. T AB . 2 Un exemple du chiffre de Csar Lettre coder A B C D E F G ... Lettre aprs codage E F G H I J K . . .

Y C

Z D

2.2

Travail faire

On stocke dans le tableau CHAINE_A_CODER la chane de caractres encoder. Elle est remplie, vous navez pas demander lutilisateur de la saisir. Cette chane fait une longueur dnie par la variable LONGUEUR_CHAINE. Cette chane de caractres ne contient que des majuscules. Proposez un programme qui encode CHAINE_A_CODER et afche le rsultat. Le nombre de lettre de dcalage est demand lutilisateur. Plusieurs solutions sont possibles, vous pouvez utiliser : un tableau de 26 lettres, ou loprateur modulo et la valeur de la lettre A, ou toute autre solution. . . Si vous avez le temps, vous pouvez proposer deux solutions, un bonus sera accord.

2.3

Correction

VAR i,d : ENTIER NOUVELLE_CHAINE[LONGUEUR_CHAINE] : CARACTERES DEBUT AFFICHER Donnez le nombre de lettres de dcalage LIRE d POUR i DE 1 A LONGUEUR_CHAINE NOUVELLE_CHAINE[i] = (CHAINE_A_CODER[i]+d) % 26 AFFICHER NOUVELLE_CHAINE[i] FPOUR FIN Le code en C est un peu plus compliqu car il faut prendre en compte le code ASCII de la lettre A. 3

3
3.1

Suite de Conway
Prsentation

Llment n de la suite de Conway est construite en lisant llment n 1. Gnralement, on utilise 1 comme lment initial. On obtient par exemple (tab. 3) : T AB . 3 Les premiers termes de la suite de Itration Lecture 1 tat initial Un un 2 3 Deux un Un deux, un un 4 5 Un un, un deux, deux un 6 Trois un, deux deux, un un ... ... Conway Valeur 1 11 21 1211 111221 312211 ...

3.2

Travail faire

En utilisant deux tableaux dentiers, proposez un algorithme qui afche les n premiers termes (n est demand lutilisateur) de la suite de Conway. En partant de litration n contenue dans le tableau 1, vous construisez litration n + 1 dans le tableau 2 et vous lafchez. Ensuite, vous recopiez le tableau 2 dans le tableau 1 pour construire litration suivante. Il ne sagit que dun problme de comptage dlments. . .

3.3

Correction

VAR tableau1[50], tableau2[50] : ENTIER longueur1, longueur2 : ENTIER i,j,k,m : ENTIER valeur, occurence, nb_iter : ENTIER DEBUT tableau1[0]=1; longueur1=1; AFFICHER Combien ditration ? LIRE nb_iter POUR m DE 1 A nb_iter valeur=tableau1[0] occurence=1 longueur2=0 POUR i DE 1 A longueur1-1 4

SI tableau1[i]=tableau1[i+1] occurence = occurence +1 SINON tableau2[longueur2] = occurence longueur2 = longueur2 + 1 tableau2[longueur2] = valeur valeur = tableau1[i+1] occurence = 1 FSI SI tableau1[longueur1] != valeur occurence=1 valeur = tableau1[longueur1] FSI tableau2[longueur2] = occurence longueur2 = longueur2 + 1 tableau2[longueur2] = valeur valeur = tableau1[i+1] POUR i DE 1 A longueur2 tableau1[i] = tableau2[i] AFFICHER tableau2[i] FPOUR longueur1=longueur2 FPOUR FPOUR