28
Série de révision BAC 2008-2009 atis.clicforum.com Collectée par Khaled KACHBOURI – atis.clicforum.com 1 Série de révision BAC 2008/2009 50 exercices atis.clicforum.com Algorithmique & Programm@tion 4ème Sc.Info Exercice1 La fonction d’Ackermann est définie par : Analyser et déduire l’algorithme récursif qui permet de renvoyer la valeur de la fonction d'Ackermann pour un couple (i,j) donné. Exercice2 L’un des plus vieux code secret est le chiffre de César. Il consiste en un décalage circulaire de N positions de l’alphabet utilisé. Exemple: Lettres à coder : A B C D E F G . . . Y Z Pour un décalage circulaire de 4 positions : Lettres après codage : E F G H I J K . . . C D Le mot “BAC” est codé “FEG”. Travail à faire Proposer un module qui permet d'encoder une chaîne de caractères passée en paramètres suivant le principe des chiffres de César Exercice 3 Ecrire l'analyse d'une fonction qui permet de calculer et retourner une valeur approchée de à 10 -4 près, en utilisant la formule suivante : Ackermann (0, j) = j + 1 Ackermann (i, 0) = Ackermann (i-1, 1) Ackermann (i, j) = Ackermann (i-1, Ackermann (i, j-1))

Serie d'Algorithme(50 Exercice)

Embed Size (px)

Citation preview

Page 1: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 1

Série de révision BAC 2008/2009

50 exercices atis.clicforum.com

Algorithmique & Programm@tion

4ème Sc.Info

Exercice1

La fonction d’Ackermann est définie par :

Analyser et déduire l’algorithme récursif qui permet de renvoyer la valeur de la fonction d'Ackermann

pour un couple (i,j) donné.

Exercice2

L’un des plus vieux code secret est le chiffre de César. Il consiste en un décalage

circulaire de N positions de l’alphabet utilisé.

Exemple:

Lettres à coder : A B C D E F G . . . Y Z

Pour un décalage circulaire de 4 positions :

Lettres après codage : E F G H I J K . . . C D

Le mot “BAC” est codé “FEG”.

Travail à faire

Proposer un module qui permet d'encoder une chaîne de caractères passée en paramètres suivant

le principe des chiffres de César

Exercice 3

Ecrire l'analyse d'une fonction qui permet de calculer et retourner une valeur approchée de à 10-4

près, en utilisant la formule suivante :

Ackermann (0, j) = j + 1

Ackermann (i, 0) = Ackermann (i-1, 1)

Ackermann (i, j) = Ackermann (i-1, Ackermann (i, j-1))

Page 2: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 2

Exercice4

Soit la fonction suivante :

Questions :

1- Exécuter la fonction pour j=7.

2- Quel est le rôle de cette fonction ?

3- Ecrire l’algorithme d’une fonction qui permet de renvoyer une valeur approchée de π à 10-5 près,

en utilisant la formule Zêta de Riman :

π2/6 = 2

2/(2

2-1) x 3

2/(3

2-1) x 5

2/(5

2-1) x 7

2/(7

2-1) x 11

2/(11

2-1) …

N.B : 2, 3, 5, 7, 11 sont des nombres premiers.

Exercice5

Un nombre d'Armstrong est un entier naturel qui est égal à la somme des cubes de ces chiffres. Ainsi 153

est un nombre d'Armstrong car 13 + 53 + 33 = 1 + 125 + 27 = 153.

Proposez un module récursif qui permet de vérifier si un entier N est un nombre d'Armstrong ou non.

Exercice6

Ecrivez l'algorithme de la fonction permettant de calculer exp(x), (x est un réel). On supposera que

l'erreur d'évaluation E est un paramètre de la fonction.

exp(x) = 1 + x + x2/2! + x3/ 3! + ... + xn/ n! + ...

0) Début Fonction inconnue (j : entier) : entier

1) N � j

2) Répéter

N � N+1,

k �2,

v � vrai

Tant que (k <= N div 2) et (v) faire

Si (N mod k = 0) alors

V � Faux

Sinon

k � k+1

FinSi

Fin Tant que

Jusqu’à (V)

3) inconnue � N

4) Fin inconnue

Page 3: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 3

Exercice7

Un serveur de noms (DNS) permet d’associer une adresse IP à chaque URL. Dans un réseau, on associe

une adresse IP unique à chaque machine. Mais si une adresse est facile à manipuler par un ordinateur,

elle est difficile à mémoriser par un humain. Le serveur de noms DNS permet de trouver l’adresse IP à

partir du nom (URL) de la machine (ou inversement). Pour résoudre un nom en adresse IP, la méthode

la plus simple consiste à mettre tous les noms des machines et leurs adresses associés dans un fichier.

Exemple : Chaque machine est définie par 3 champs :

192.168.1.1 site1.org 1

127.0.0.1 localhost.localdomain 0

194.146.255.213 atis.clicforum.com 100

196.168.50.20 www.footsite1.com 20

• Le premier champ est l’adresse IP,

• Le deuxième champ est le nom (URL) de la ressource (site web, image…)

• Le troisième champ désigne la distance (nombre de machines) entre le serveur et la machine cible.

Dans la suite, on suppose que le serveur de noms sauvegarde ces informations dans le fichier

"hosts.dat" enregistré sous le dossier "C:\config".

Les opérations effectuées par le serveur de noms sont les suivantes :

- Chercher l’adresse IP d’une ressource donnée : Si elle existe, on afficherait son adresse IP, sinon

on afficherait le message "la ressource est indisponible".

- Ajouter les informations d’une nouvelle machine : Si des nouvelles machines viennent se

connecter au réseau alors le serveur ajoute celles ci à la fin du fichier "hosts.dat".

- Supprimer les informations d’une machine : Si une machine se déconnecte du réseau, le serveur

supprimerait les informations relatives à cette machine.

On se propose d’écrire un programme qui offre un menu permettant d’exécuter l’une des opérations:

- "A" : Pour ajouter une nouvelle machine à la fin du fichier.

- "R" : Pour chercher l’adresse IP d’un nom URL donné.

- "S" : Pour supprimer une machine du réseau.

- "T" : Pour trier les machines selon l’ordre croissant de la distance par rapport au serveur. Le tri

se fait au niveau de la mémoire centrale. Une fois triées, les données seront remises au fichier

d’origine.

- "Q" : Pour quitter le programme.

Travail demandé :

Page 4: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 4

1- Quelles sont les structures de données adéquates à la résolution de ce problème.

2- Analyser le problème en le décomposant en modules et en déduire l’algorithme du programme

principal.

3- Analyser chacun des modules envisagés précédemment et en déduire les algorithmes

correspondants.

Exercice8

E étant un ensemble à n éléments, on appelle combinaison de p éléments de E toute collection non

ordonnée de p éléments distincts de E.

On note le nombre de combinaisons de p éléments parmi n. On a :

Ecrire une fonction récursive permettant de calculer les combinaisons Cnp en se servant de la relation

suivante :

C(0,p)=1

C(p,p)=1

C(n,p) = C(n-1,p) + C(n-1,p-1)

Exercice9

On veut compresser un fichier d'entiers binaires (contenant des 0 et des 1).

Le principe de compression est le suivant :

Si le fichier contient : 00000011111000, La compression nous donne : 605130

Et se lit : on a 6 zéros, 5 uns et 3 zéros.

Ecrire un programme Pascal qui permet de créer et remplir un fichier nommé "source.fch" par N entiers

binaires (N est un nombre aléatoire compris entre 4 et 100), puis compresser ce fichier dans un fichier

résultat nommé "compress.fch" en utilisant le principe ci-dessus et l'afficher.

Page 5: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 5

ISBN A12-41213104-92651027-5

Exercice10

L'ISBN (International Standard Book Number) est un numéro qui

permet d'identifier le titre d'un livre.

Ce numéro est formé de 20 caractères regroupés en 4 parties :

• La première correspond à la zone linguistique qui est un

nombre de 3 chiffres hexadécimaux distincts, et qui commence obligatoirement par une lettre :

Exemples : A12 pour Arabe

FB2 pour Français

• Les deux autres parties (indiquant l'éditeur et le numéro d'ordre dans la production de l'éditeur)

sont formés uniquement par des chiffres : 8 chiffres par partie.

• La dernière partie (chiffre ou lettre) correspond à la clé de contrôle :

La clé est le reste de la division d'un nombre intermédiaire N par 11 en utilisant la règle de

divisibilité.

- Si ce reste est non nul et formé d’un seul chiffre, la clé sera égale au reste.

- Si ce reste est 10 la clé sera notée X.

- Si le reste est 0 la clé sera égale à la somme des chiffres de la représentation binaire de la

première partie

Le nombre intermédiaire N est obtenu en regroupant les deux chiffres de même position de la 2 ème

et la

3 ème

partie de numéro de l'ISBN suivis des deux chiffres de la position suivante jusqu'à ajouter les deux

chiffres de la 8 ème

position.

Exemple1 :

Numéro saisie : A12-41213104-92651027

Numéro affecté au livre : A12-41213104-92651027-5

Sur l'exemple1 A12-41213104-92651027, le calcul intermédiaire donne N : 4912261531100247 et

4912261531100247 a pour reste 5 dans la division par 11, la clé est donc 5.

Exemple2 :

Numéro saisie : A12-41213104-92651022

Numéro affecté au livre : A12-41213104-92651022-4

Sur l'exemple2 A12-41213104-92651022, le calcul intermédiaire donne N:4912261531100242 et

4912261531100242 a pour reste 0 dans la division par 11, d’où on effectue la somme des chiffres de la

représentation binaire de A12.

Page 6: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 6

NB : La règle de divisibilité d’un entier N par 11 :

S1 = Somme des chiffre d’indices impairs et S2 = somme des chiffres d’indices pairs

S = ABS(S1-S2)

Si S mod 11=0 alors N est divisible par 11

Exp : 50312 mod 11 = abs ((2+3+5)-(1+0)) mod 11 = 9

Travail à faire :

On veut écrire un programme permettant de saisir le numéro ISBN d’un livre, déterminer la clé affectée

à ce numéro et afficher le numéro final du livre.

- Décomposer ce problème en modules.

- Analyser chacun des modules.

- En déduire les algorithmes et les tableaux des déclarations.

Exercice11

Soit l’algorithme suivant :

0) Début Inconnu

1) Associer (f1, "Fichier1.dat")

2) Associer (f2, "Fichier2.dat")

3) Ouvrir (f1)

4) Recréer (f2)

5) Tant que Non Fin_Fichier (f1) Faire

Tant que Non Fin_Ligne (f1) Faire

Lire (f1, ch)

Ecrire (f2, ch)

Fin Tant que

Lire_nl (f1)

Ecrire_nl (f2)

Fin Tant que

6) Fermer (f1)

7) Fermer (f2)

8) Fin Inconnu

Page 7: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 7

Travail demandé :

1. Quel est le type des fichiers "Fichier1.dat" et "Fichier2.dat"

2. Quel est le rôle de cet algorithme

3. Donnez le tableau de codification des objets

Exercice 12

Soit le type ligne_t = string;

On dispose de 2 fichiers texte nom1 et nom2 qui contiennent chacun exactement 1 mot par ligne (lettres

minuscules sans espacement), sauf à la fin où il peut y avoir une ligne vide.

Ces fichiers sont triés sur les mots dans l'ordre croissant.

On se propose de fusionner ces 2 fichiers en 1 fichier unique nom3, qui contiendra tous les mots de

nom1 et nom2, et sera trié.

Exemple :

Ecrire une spécification et déduire un algorithme du programme qui permet de fusionner les lignes des

deux fichiers existants triés en un seul fichier en respectant l'ordre.

Exercice13

Soit la fonction f définie par f(x) =

On se propose d'écrire un programme qui permet de :

- calculer S1 la valeur approchée de l'aire sous la courbe de la fonction f par la méthode des

rectangles sur l'intervalle [1, 3].

- calculer S2 la valeur approchée de l'aire sous la courbe de la fonction f par la méthode des trapèzes

sur l'intervalle [1,3].

- Chercher N le nombre d'intervalles nécessaires pour avoir une différence entre S1 et S2 strictement

inférieur à 10-6

.

- Déterminer et afficher une valeur approchée du point fixe avec une précision Epsilon.

nom1 Choisir fait germer la solution

nom2 bien des

exemples

nom3 Choisir bien des exemples fait germer la solution

Page 8: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 8

Question

1) Proposer une analyse modulaire pour ce problème.

2) Analyser chacun des modules et déduire les algorithmes correspondants.

Exercice 14

Le but de ce problème est de proposer une solution de gestion d'un ensemble d'informations concernant

des personnes (nom, prénom, adresse, code postal, ville, téléphone, e-mail…). On désire pouvoir créer,

consulter, supprimer et modifier ce répertoire.

1. Proposer une structure de données permettant de stocker les informations concernant une

personne, puis une structure de données permettant de stocker durablement toutes les

informations relatives à toutes les personnes.

2. Définir une procédure de saisie de données relatives à une personne, puis de stockage de ces

données.

3. Définir une procédure permettant d'accéder à la liste des personnes et de l'afficher soit dans un

fichier texte, soit à l'écran.

4. Définir une procédure de consultation des renseignements relatifs à une personne donnée. On

suppose que l'on connaît la position de la personne dans le répertoire.

5. Définir une procédure de modification des renseignements relatifs à une personne donnée dont

on connaît la position dans le répertoire.

6. Définir une procédure de suppression d'une personne donnée dont on connaît dans le répertoire.

7. Définir une procédure de recherche des renseignements concernant une personne à partir du

nom et du prénom de la personne.

8. Définir une procédure permettant de lister toutes les personnes habitant une ville donnée.

9. Définir une procédure de tri par ordre alphabétique (nom + prénom) des personnes du

répertoire.

Exercice15

Soit un tableau remplit par n élèves d'une classe. Un élève est caractérisé par un nom et une note

Ecrire un programme qui permet de :

• trier ce tableau par ordre croissant des notes en utilisant la méthode du tri rapide.

• Enregistrer dans un fichier texte nommé "reussi.txt", les noms des élèves qui ont une moyenne

supérieure ou égale à 10.

Page 9: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 9

Exercice16

Sachant que

Pour x très proche de zéro.

Ecrire un module qui permet de calculer la valeur approchée de sin(x) en utilisant la formule ci-dessus. Le

calcul s'arrête quand la différence entre deux termes consécutifs devient inférieure ou égale à epsilon

(epsilon est une donnée passée en paramètre dans le module).

Exercice 17

Ecrire un module récursif qui permet de mettre à zéro la diagonale principale d'une matrice carrée de

n*n entiers.

Exemple : Soit la matrice suivante pour n=3 :

3 5 1

4 2 8

12 9 7

Après exécution du module, le contenu de la matrice devient :

0 5 1

4 0 8

12 9 0

Exercice18

Ecrire un module prenant en entrée un entier n et une paire de valeurs réelles qui sont en fait les valeurs

du cosinus et du sinus d'un certain angle x, et renvoyant la paire (cos(nx), sin(nx)). Autrement dit, le

deuxième argument de la fonction est une paire (a,b) telle que a = cos x et b = sin x.

• Le schéma de calcul doit être récursif (mais non < diviser pour régner >).

• On pourra se servir des formules de trigonométrie suivantes :

cos(nx) = cos((n-1)x) cos(x) - sin((n-1)x) sin(x) et sin(nx) = sin((n-1)x) cos(x) + cos((n-1)x) sin(x)

Page 10: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 10

Exercice19

Soit f une fonction continue dans un intervalle [a,b] et définie par :

f(x) =

Calculez une valeur approchée de : en utilisant la méthode des trapèzes

Exercice20

Nous allons écrire un programme capable de résoudre une équation du second degré à coefficients

complexes. Pour cela, nous allons successivement calculer le discriminant, en extraire une racine carrée

en utilisant le module et l'argument, puis appliquer la formule

xi =

Avec ² = = b² -4ac après avoir vérifié la non nullité de a.

Nous définissons le type complexe comme couple de réels représentant la partie réelle et la partie

imaginaire : type complexe=record

Preel, Pimag : real;

end;

1) Ecrire une procédure qui permet de lire un nombre complexe.

2) Ecrire une procédure qui effectue le produit de deux complexes.

3) Ecrire une fonction qui calcule le module d'un nombre complexe.

4) Ecrire une fonction qui calcule l'argument d'un nombre complexe par la méthode suivante :

Si la partie réelle est nulle, l'argument est p2 ou -p2 selon le signe de la partie imaginaire, sinon la

fonction arctan fournit un argument modulo p, compris entre -p2 et p2 ; il faut donc ajouter p à ce

dernier dans le cas où la partie réelle est négative. On remarque qu'avec cette méthode la mesure

principale de l'argument est située entre -p2 et 3p2.

5) Ecrire une procédure permettant l'affichage des nombres complexes.

6) Ecrire une procédure permettant la division de nombres complexes. Elle effectue le produit du

dividende par le conjugué du diviseur puis la division du résultat par le carré du module du

dénominateur.

Page 11: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 11

7) Ecrire une procédure qui calcule une solution de l'équation en fonction des nombres complexes a et b

et une racine du discriminant. Elle calcule le numérateur et le dénominateur de la formule qui donne la

solution et appelle la procédure de division de nombres complexes.

8) Ecrire le programme principal de résolution d'une équation de degré deux à coefficients complexes :

� Lecture des coefficients complexes

� Calcul du discriminant

� Calcul d'une racine carrée du discriminant

Après avoir vérifié que l'équation est de degré deux, calculer et afficher les solutions.

Exercice21

1) Proposez un algorithme qui lit un nombre binaire positif N et le convertit dans la base 10.

2) A partir de cette question, le nombre N est exprimé dans a base 10. On cherche à déterminer si

un entier N saisi (N>9) est divisible par 9 ou non en appliquant la méthode suivante :

(i) On fait la somme du premier et du second chiffre de N.

(ii) Si la somme obtenue est supérieure ou égale à 9, on lui soustrait 9.

(iii) On ajoute ensuite à cette somme le chiffre suivant et on lui applique la règle (ii) et ainsi de

suite jusqu’au dernier chiffre de N.

(iv) Si le résultat final est nul alors le nombre est divisible par 9.

Exemple : pour N = 65493, l’algorithme effectuera les opérations suivantes :

6 + 5 = 11 (11 > 9, on lui soustrait 9, on obtient 2)

2 + 4 = 6 (6 < 9)

6 + 9 = 15 (15 > 9, on lui soustrait 9, on obtient 6)

6 + 3 = 9 (9 = 9, on lui soustrait 9, on obtient 0)

Le résultat est nul et tous les chiffres de N ont été traités ; donc le nombre 65493 est divisible par 9.

Exercice22

Nous avons un tableau A de n entiers relatifs. Nous recherchons un sous tableau de A dont la somme des

éléments soit maximale. Autrement dit, nous recherchons un couple d'entiers i et j (1< i< j< n) tel que

∑(k=i,j) (A[k]) soit maximale.

Exemple :

Pour le tableau A suivant, les valeurs cherchées sont i = 4 et j = 5.

A 2 5 -8 6 5 -9 3 4

Page 12: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 12

2 3 4

Exercice 23

Dans notre lycée les résultats des élèves de chaque classe sont sauvegardées dans un fichier

d’enregistrements.

Chaque enregistrement comporte les renseignements sur un élève de la classe :

Nom & Prénom (chaine de caractères), Age (entier non signé) et Moyenne (réel).

Ecrivez un programme nommé CLASSE qui permet :

• La saisie et la sauvegarde des renseignements concernant les élèves de votre classe dans un

fichier ‘’4SI1.dat’’ sur le disque local ‘’C’’. la fin de la saisie est possible si nous répondons N (Non)

à la question « Continuer (O/N) ? ».

• La transfère des moyennes des N élèves dans un tableau T.

• Le tri dans l’ordre décroissant des moyennes en utilisant la méthode de tri Rapide.

• Afficher le tableau trié.

Questions :

1) Proposez une analyse et un algorithme du programme principal.

2) Proposez une analyse pour chaque module.

3) Déduisez les algorithmes correspondants des modules envisagés.

Exercice24

On peut définirπ , grâce aux expressions suivantes :

1) 4

π = ∫ −

1

0

1 x2 dx

2) π = 12 * (1 - 3*3

1 +

3*5

1 -

3*7

1 +

3*9

1 - …)

On se propose d’écrire un programme nommé Approximation, qui permet de calculer et d’afficher la

valeur la plus précise de π à partir des deux expressions précédentes (c'est-à-dire qui est plus proche à

la valeur de PI qui est le nom d’une fonction standard dans pascal qui renvoi la valeur de π )

NB :

- Pour l’expression 1), utilisez la méthode des rectangles.

- Afficher π avec 5 chiffres après la virgule.

- Le programme doit afficher un message comme le suivant : pi = « 3.14131 » trouvé par

l’expression « 2 »

Page 13: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 13

Exercice25

Un nombre heureux est un nombre entier qui, lorsqu'on ajoute les carrés de chacun de ses chiffres, puis

les carrés des chiffres de ce résultat et ainsi de suite jusqu'à l'obtention d'un nombre à un seul chiffre,

donne 1 pour résultat.

Ainsi, 7 est heureux, puisque :

7² = 49

4² + 9² = 97

9² + 7² =130

1² + 3² + 0² =10

1² + 0² = 1 (on est arrivée à un nombre d'un seul chiffre = 1, donc 7 est heureux)

Ecrire l'analyse d'une fonction qui permet de retourner vrai si le nombre passé en paramètre est

heureux.

Exercice26

Soit l’algorithme de la fonction Inconnu suivante :

0) Début Fonction Inconnu (n : entier long) : entier

1) S ← 0

Répéter

S ← S + (n Mod 10)

n ← n Div 10

Jusqu’a (n = 0)

2) Inconnu ← S

3) Fin Inconnu

Questions :

1. Exécuter manuellement l’algorithme de la fonction Inconnu, si on appelle cette fonction avec le

paramètre effectif n = 192837, en donnant les valeurs successives des variables S et n.

2. En déduire le rôle de cette fonction.

3. L’algorithme de cette fonction est-il récurent ? si oui quel est son ordre. ?

4. Ecrire l’algorithme d’une fonction récursive réalisant le même traitement.

Page 14: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 14

Exercice27

On se propose de définir une fonction qui évalue une expression de calcul donnée sous forme d’une

chaine. On suppose que l’expression ne contient que des nombres et les deux opérateurs d’addition (+)

et de multiplication (*).

Exemples:

• Ch = ‘12*5+3*2+6’ la fonction retourne 72.

• Ch=’14+5’ la fonction retourne 19

• Ch=’5’ la fonction retourne 5

Directives :

Pour évaluer cette expression on peut suivre le principe suivant :

• La première de chose à faire est la séparation des termes par appels récursifs; en effet on doit

extraire tous les termes qui sont séparés par des +.

• En suite nous devons évaluer chacun des termes extrait qui contient éventuellement que les

opérateurs de multiplication.

Exercice28

On dispose d’un fichier nommé « hexadecimal.dat » à remplir avec n chaines hexadécimales valides (n

entre 2 et 10) puis à partir de ce fichier on remplira un deuxième fichier nommé « conversions.dat »

contenant autant d’enregistrement que de chaines hexadécimales dans le fichier « hexadecimal.dat ».

Chaque enregistrement est composé de deux données successives : la chaine hexadécimale pris du

premier fichier suivi de son équivalent en décimale.

Enfin, on désire afficher le contenu du fichier « conversion.dat » trié dans l’ordre croissant des nombres

décimaux comme indiqué dans l’exemple ci-dessous.

Remarque : utiliser un principe de tri de votre choix.

Exemple :

Hexadecimal.dat 01B 11 A 0F

conversions.dat 0F

15

01B

27

11 A

282

Résultat affiché : (0F) 16 = (15)10 ( 01B) 16 = (27) 10 ( 11A) = (282) 10

Page 15: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 15

Questions :

1) Analyser le programme en le décomposant en modules.

2) Analyser les différents modules envisagés.

3) Déduire l’algorithme du programme principal.

Exercice29

Soit l’algorithme de la fonction suivante :

0. Déf proc inconnue(t : tab ;n :entier ; var L1,p :entier)

1. L�1

L1�0

P�1

Pour i de 2 à n faire

Si t[i] >= t[i-1] alors

L �L+1

Sinon

Si L>L1 alors

L1 �L

P�i-L1

Fin si

L �1

Fin si

Fin pour

2. Fin inconnue

T= 3 4 5 2 4 5 6 1 4 0 1 2

1 2 3 4 5 6 7 8 9 10 11 12

Questions

a. Exécuter cette fonction et donner la succession des valeurs prises par toutes les variables.

b. Donner le rôle de cette fonction.

c. Proposer une solution récursive.

Page 16: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 16

Exercice30

On se propose de définir une procédure qui, à partir d’un caractère numérique donné, affiche une

pyramide composée de N lignes. Chaque ligne est calculée en fonction de la ligne qui la précède en

insérant à son début et à sa fin un chiffre C égal à (la somme de ses chiffres + sa longueur) mod 10). Le

Nième

ligne correspond au premier nombre divisible par 7.

Exemple :

Pour le premier caractère ="1" on aura :

1

212

82128

6821286

968212869

06820682128602860

{Ce nombre est divisible par 7.}

Exercice31

Soit la formule suivante :

En se servant de la formule ci-dessus, proposer une fonction qui permet de donner une valeur

approchée de en s'arrêtant lorsque le terme devient plus petit qu'une valeur Epsilon

Exercice 32

On se propose de remplir une matrice M selon le principe suivant :

• La dernière colonne et la deuxième diagonale de la matrice M sont des « 1 ».

• un élément quelconque de matrice est égal à la somme du dernier élément de la même ligne

avec l’élément de dessus et l’élément qui le précède dans la même ligne.

Exemple :

M [5,6] = 1 + 3 + 3 = 7

1- Compléter la dernière ligne de la matrice M.

2- Quel est l’ordre de récurrence de ce traitement.

3- Ecrire l’analyse et l’algorithme du module qui permet de remplir la matrice sous la forme suivante :

Page 17: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 17

1

1 1

1 3 1

1 3 7 1

1 3 7 15 1

1 3 7 15 31 1

1 3 7 15 31 63 1

1 1

A compléter

Exercice33

Le sélectionneur de l'équipe de Tunisie veut faire des statistiques sur les matchs de 1ère

division. Il

dispose des types suivants pour mémoriser le nom des équipes :

CONST MaxEquipe = 25 ;

TYPE nom_t = string[63];

tabNom_t = array[1..MaxEquipe] of nom_t;

1. Ecrire la procédure SaisieNoms (var tN : TabNom_t ; var nN : integer); qui lit au clavier une suite

de noms (1 par ligne), termine par une ligne vide, mémorise ces noms dans tN le nombre

résultant dans nN.

2. Les équipes sont désormais numérotées dans leur ordre de saisie. On introduit maintenant des

types pour numériser les scores des matchs, qui ont lieu chaque fois entre une équipe locale et

une équipe extérieure :

CONST MaxMatch = 1000;

TYPE Match_t = record

n_loc, n_ext, {numéro équipe locale, extérieure}

s_loc, s_ext : integer; {score équipe locale, extérieure}

end ;

TabMatch_t = array[1..MaxMatch] of Match_t ;

Ecrire la fonction QuiGagne(m : Match_t) : integer; qui pour un match m donné, renvoie 1, -1 ou 0

selon que la gagnante est l'équipe locale, extérieure ou que le match est nul.

Page 18: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 18

3. Ecrire la procédure AffiGagnant(M : TabMatch_t; nM : integer; tN : TabNom_t; nM : integer); qui

affiche pour chacun des nM matchs le nom de l'équipe gagnante, en appelant éventuellement la

fonction QuiGagne.

4. Ecrire la fonction DiffLocalExt(tM : TabMatch_t; nM : integer) : integer; qui renvoie pour

l'ensemble des nM matchs, la différence entre le nombre de matchs gagnés par l'équipe locale et

le nombre de matchs gagnés par l'équipe extérieure, en appelant éventuellement la fonction

QuiGagne.

Exercice34

Pour se connecter à une application de messagerie instantanée sur Internet (exemple MSN), les

utilisateurs doivent taper leurs adresses e-mail (login) et leurs mots de passe. Ces derniers sont envoyés

à un serveur distant et enregistrer automatiquement dans un fichier texte intitulé « password.txt » sous

la racine du serveur.

Chaque ligne de ce fichier contient un mot de passe crypté sous forme d’une séquence binaire, de façon

que chaque caractère soit représenté sur un Octet (8bits).

Pour décrypter un mot de passe il suffit de :

• Convertir chaque Octet binaire en son équivalent hexadécimal (sans passer par la base 10).

• Convertir les chaines hexadécimales obtenues en base 10 (décimale).

• Chaque nombre obtenu correspond au code ASCII d’un caractère du mot de passe.

Exemple :

Soit la ligne du texte suivante: 01000010 01101111 01101110

42 6F 6E

66 111 108

‘’B’’ ‘’o’’ ‘’n’’

On se propose d’écrire un programme qui permet d’afficher les mots de passe du fichier texte.

1) Proposez une analyse est un algorithme du programme principal.

2) Proposez pour chaque module une analyse détaillée.

3) Déduisez les algorithmes des modules envisagés.

D’où le mot est ‘’Bon’’

Page 19: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 19

Exercice 35

On vous demande d’écrire un programme qui permet de :

� Remplir au hasard une matrice carrée d’ordre n par les entiers 0 ou 1.

NB : La fonction Random (X), permet de générer un nombre entier aléatoire appartenant à

l’intervalle [0, X-1].

� A partir de cette matrice, créer un fichier d’enregistrements FH stocké physiquement sous

'c:\Hexa.dat', chaque enregistrement renferme les deux champs suivants :

� Hex : représente la conversion en hexadécimale de chaque ligne de la matrice. (La

conversion en hexadécimal se fait directement et sans passer par la base 10)

� nb : représente le nombre de lettres existant dans la conversion Hexadécimale.

� A partir du fichier FH créer un deuxième fichier FD dont le nom physique est 'C:\Div11.dat', qui

contient toutes les chaînes hexadécimaux dont le nombre de caractère est supérieur à 1 (nb ≥ 1)

et dont la conversion en décimal est divisible par 11.

NB : vous devez utiliser la méthode suivante pour déterminer la divisibilité par 11 : Soustraire de N

amputé de son chiffre des unités le chiffre supprimé et recommencer éventuellement avec le nombre

ainsi obtenu jusqu’au moment où l’on peut conclure à la divisibilité.

Exemple : pour n = 8

M FH FD

1 1 1 0 0 1 1 1

1 0 0 0 1 1 1 1

1 1 1 1 1 1 1 1

0 0 1 1 0 0 0 1

0 0 0 1 0 0 0 0

0 1 1 1 0 1 1 1

0 0 1 0 0 0 0 1

1 1 1 1 1 1 0 1

E7 1

8F 1

FF 2

31 0

10 0

77 0

21 0

FD 2

E7

8F

FD

Si N = 12345674

1234567 – 4 = 1234563

123456 – 3 = 123453

12345 – 3 = 12342

1234 – 2 = 1232

123 – 2 = 121

12 – 1 = 11

1 – 1 = 0 qui est divisible par 11

D’où 12345674 est divisible par 11.

Page 20: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 20

- (1110 0111)2

- La première ligne de la matrice est égal à : 1110 0111.

Hex = E7

nb = 1

- (E7) 16 = (231) 10

- 231 est divisible par 11 et nb ≥ 1, d’où l’écriture de E7 dans le fichier FD.

Questions :

1. Analyser et déduire l’algorithme du programme principal qui permet de réaliser le traitement

décrit précédemment en le décomposant en modules.

2. Analyser chacun des modules envisagés précédemment et en déduire les algorithmes

correspondants.

Exercice36

Le sélectionneur de l’équipe nationale d’athlétisme veut choisir les meilleurs coureurs pour chaque

course, afin de retenir les athlètes qui participeront aux jeux olympiques de 2008. Un athlète de l'équipe

ne participe qu'à une seule course. Le sélectionneur dispose du meilleur temps (record) enregistré par

chaque athlète.

Un athlète est caractérisé par son nom, la course à laquelle il participe et son record.

Exemple :

Nom = Mohamed Jouini,

Course = 100,

Record = 10,7 (On suppose que tous les records sont exprimés en secondes)

Les informations sur les athlètes sont stockées dans un fichier nommé "olymp.dat" enregistré dans le

dossier "d:\courses".

On se propose d'écrire un programme qui offre au sélectionneur un menu de quatre choix définis selon

la valeur d'une lettre saisie.

• la valeur "S", pour saisir les données relatives à un nouvel athlète. L'ajout se fera à la fin du

fichier.

• la valeur "T", pour classer les athlètes par ordre croissant des records pour chacune des courses

programmées.

• la valeur "A", pour déterminer par course, le meilleur athlète et afficher la course, le nom de

l'athlète et son record.

• la valeur « Q », pour quitter le programme.

Page 21: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 21

Questions :

1- Quelles sont les structures de données adéquates à ce problème ? Justifier le choix de chaque

structure proposée.

2- Analyser et déduire l’algorithme du programme principal qui permet de réaliser le traitement décrit

précédemment en le décomposant en modules.

3- Analyser chacun des modules envisagés précédemment et en déduire les algorithmes

correspondants.

Exercice37

Les anciens égyptiens ne connaissaient, comme rationnels, que les inverses d'entiers. Il s'agit de

décomposer un rationnel de ] 0 ; 1 [ en une somme d'inverses d'entiers strictement croissants.

Exemples :

5/8 = 1/2 + 1/8

7/11 = 1/2 + 1/11 + 1/22

Ecrire un module qui permet de décomposer un nombre rational de la forme n/d en une somme de

nombres rationnels unitaires de la forme 1/m en utilisant le principe des fractions égyptiennes.

Principe (appliqué sur un exemple):

Convertir 19/20 en une fraction égyptienne.

• Etape 1 : 20/19 = 1 avec un certain reste, donc notre première fraction unitaire est 1/2.

• Etape 2 : 19/20 - 1/2 = 9/20.

• Etape 3 : 20/9 = 2 avec un certain reste, donc notre deuxième fraction unitaire est 1/3.

• Etape 4 : 9/20 - 1/3 = 7/60

• Etape 5 : 60/7 = 8 avec un certain reste, donc notre troisième fraction unitaire est 1/9.

• Etape 6 : 7/60 - 1/9 = 1/180 qui est elle-même une fraction unitaire.

Donc, notre résultat est :

Page 22: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 22

Exercice38

Ecrire un programme qui permet de calculer puis d'afficher la racine carrée d'un réel positif x en utilisant

la suite suivante:

U0 = (1+x)/2

Un+1 = (Un+ x/Un)/2

Il s'agit de calculer les premiers termes de cette suite jusqu'à ce que la différence entre deux termes

successifs devient inférieur ou égale à 10^-4. Le dernier terme calculé est une valeur approchée de √x à

10^-4 près

Exercice39

Un carré magique d’ordre n est une matrice carrée (n * n) telle que la somme des entiers de chaque

ligne, chaque colonne et des deux diagonales est identiques.

Exemple :

La matrice suivante est un carré magique d’ordre 3.

8 1 6

3 5 7

4 9 2

Ecrire un module (procédure ou fonction) qui permet de déterminer si une matrice est un carré magique

ou non.

Exercice40

Soit la suite de racines carrées suivante :

R = N+++++ ...4321

Proposez dans un contexte récursif une fonction intitulée RACINE qui permet de donner une valeur

estimée de R.

Exercice41

On appelle nombre de Keith un nombre K de n chiffres (n >=2) ayant la propriété suivante :

En partant des n chiffres d’un nombre K, on compose une sorte de suite récurrente d’ordre n, dont

chaque terme est obtenu en calculant la somme des n derniers nombres de la suite. Si cette suite

fournit à un moment le nombre k de départ, ce nombre est dit de Keith.

Page 23: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 23

On propose d’écrire un programme Pascal qui permet d’afficher tous les nombres de Keith compris entre

10 et 10 000.

Exemple :

• Pour n = 2, soit k = 19, les termes de a suite sont donc les suivant :

1, 9, 10, 19, 29,…..

� Il s’agit ici d’une suite récurrente d’ordre 2 donné par la relation suivante :

• Pour n= 3, soit k = 742, les termes de a suite sont donc les suivant :

7, 4, 2, 13, 19, 34, 66, 119, 219, 404, 742, 1365, …..

� Il s’agit ici d’une suite récurrente d’ordre 3 donné par la relation suivante :

Exercice42

Appelons "nombre fibonaccien" chaque terme de la suite de Fibonacci.

Les nombres fibonaccien sont : 1, 1, 2, 3, 5, 8, 13, 21,….

On souhaite écrire un programme qui permet de :

- Remplir le fichier "fichier1.rz" par des entiers strictement positifs. Pour finir la saisie, il suffit de

répondre à la question "Continuez (O/N) ? " par le caractère N.

- Effacer les nombres non fibonacciens du fichier cité ci-dessus.

- Utiliser ce fichier pour :

� Extraire les nombres fibonacciens dont la représentation hexadécimale est composée seulement

de chiffres et les mettre dans le fichier "fichier2.rz"

� Extraire le reste des nombres fibonacciens et les mettre dans le fichier "fichier3.rz"

- Afficher les éléments de chaque fichier.

On rappelle que la suite de Fibonacci est définie par : U0 = 1, U1 = 1, Un = Un-2 + Un-1

Travail demandé :

� Analyser le problème en le décomposant en modules.

� Analyser les modules envisagés en déduire les algorithmes correspondants.

Page 24: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 24

Exercice43

On propose par la suite, l'une des méthodes de la conversion d'un entier décimal (X) en son équivalent

binaire (base 2).

1. On divise (division entière) le nombre X par 2

2. On sauvegarde le reste de la division

3. On refait les deux étapes précédentes avec le quotient de la division, jusqu'à avoir un quotient

nul.

4. Le regroupement des restes en sens inverse de leurs apparitions donne la valeur du nombre X en

binaire.

Exemple :

Si X = 13 alors

- La division entière de 13 par 2 donne un quotient = 6 et un reste = 1

- La division entière de 6 par 2 donne un quotient = 3 et un reste = 0

- La division entière de 3 par 2 donne un quotient = 1 et un reste = 1

- La division entière de 1 par 2 donne un quotient = 0 et un reste = 1

Donc le nombre décimal 13 vaut 1101 en Binaire.

Question :

Ecrire un programme Pascal permettant de saisir un entier naturel X ≤ 100, de déterminer et d'afficher sa

valeur en Binaire, selon le format suivant :

le nombre décimal X vaut ….. en binaire.

N.B : La solution doit comporter au moins une procédure et une fonction récursive.

Exercice44

Soit la suite U définie par :

U0= 1 et Un = le nombre des chiffres consécutifs du terme Un-1 en commençant de gauche à droite suivi

du chiffre lui-même

Exemple

U0 = 1

U1 : dans U0 on a une seule fois le chiffre 1 d’où U1 = 11

Sens de lecture des restes

Page 25: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 25

U2 : dans U1 on a deux fois le chiffre 1 d’où U2 = 21

U3 : dans U2 on a une seule fois le chiffre 2 et une seule fois le chiffre 1 d’où U3 = 1211

U4 : dans U3 on a une seule fois le chiffre 1 ; une fois le chiffre 2 et deux fois le chiffre 1

d’où U4= 111221

U5 : dans U4 on a trois fois le chiffre 1 ; deux fois le chiffre 2 et une fois le chiffre1 U5= 312211

U6=13112221

U7=1113213211

Travail demandé :

1. Donner la valeur de U8 et de U9

2. Quel est l’ordre de récurrence de cette suite

3. Ecrire la spécification d’un module permettant de déterminer pour un entier n le terme Un

Exercice45

Un nombre abcd est divisible par 7 si |abc-2*d| est divisible è son tour par 7

Exemple :

Pour n =7241

|724 – 2*1| = 722 on doit tester si 722 est divisible par 7

|72- 2*2| =68

|6-2*8|= 10

|1-2*0|= 1 d’où 7241 n’est pas divisible par 7

Pour n = 30086

|3008 – 2*6| = 2996

|299- 2*6| =287

|28-2*7|= 14

|1-2*4|= 7 d’où 30086 est divisible par 7

Pour n = 147

|14-2*7|= 0 d’où 147 est divisible par 7

Travail demandé :

Ecrire la spécification et l’algorithme d’un module récursif permettant de vérifier si un entier n est

divisible par 7

Page 26: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 26

Exercice46

Un polynôme en x et de degré n s'écrit sous la forme :

P(x) = cnxn

+ cn-1xn-1

+ … + c1x + c0

Il est représenté par un tableau C de coefficients défini par C[i] = ci pour tout i de 0 à n.

1. Soit le polynôme P(x) = 5x4 - 3x

2 + x -5/3

Donner tous les éléments du tableau C correspondant à ce polynôme.

2. On considère la fonction «calcul » ci-dessous, qui évalue pour un réel x donné, la valeur du

polynôme P de degré n dont les coefficients sont stockés dans le tableau C.

0) Début Fonction Calcul (n : octet ; x : réel ; C : tableau) : réel

1) [S ← C[n]] Pour i de n-1 à 0 (pas=-1) Faire

S ← S * x + C[i]

Fin Pour

2) Calcul ← S

3) Fin Calcul

a) On appelle cette fonction avec les paramètres effectifs suivants : n = 4, x=2 et

C 3 8 0 1 1

0 1 2 3 4

Exécuter manuellement l’algorithme de la fonction Calcul, en donnant les valeurs successives des

variables i et S.

b) Ecrire une fonction récursive réalisant le même calcul.

Exercice47

Soient les déclarations Pascal suivantes :

Type Sexe=(masculin, feminin) ;

Info = Record

Nom :string[30] ;

Age : byte ;

S:Sexe;

End;

Fich_pers = File Of Info;

Fich_ent = File Of Integer;

Var

Page 27: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 27

F1 : Fich_pers;

F : Text;

I : Info ;

F2 : Fich_ent;

Ch : String;

Soit les instructions pascal suivantes ; mettre la lettre V dans les cases correspondantes aux instructions

correctes et la lettre F dans le reste des cases. Justifier à chaque fois votre réponse.

- Readln (F1,I) ;

- Write(ch, F);

- Write(F2,3);

- Write(F1,I.Age) ;

Exercice48

Ecrire l’analyse puis l’algorithme d’un module récursif qui permet d’afficher les caractères d’une chaîne

sous la forme indiquée dans l’exemple suivant :

Exemple : Soit la chaîne "TURBO"

TURBO

TURB

TUR

TU

T

Exercice49

Une institution éducative veut mettre à jour son archive enregistré dans un fichier texte "Arch2008.Txt"

et contenant par ligne les informations d’un élève sous la forme suivante :

MatriculeNomAgeRésultatClasse (il n’y a aucun espace entre les différentes informations)

Matricule : Chaîne de 6 chiffres

Nom : Chaîne formé de caractères alphabétiques majuscules

Age : Entier de deux chiffres

Résultat : Un caractère qui peut être "A" pour Admis "R" pour redouble et "E" pour exclu

Page 28: Serie d'Algorithme(50 Exercice)

Série de révision BAC 2008-2009 atis.clicforum.com

Collectée par Khaled KACHBOURI – atis.clicforum.com 28

Classe : un entier entre 1 et 4

Exemple :

004750MALEKALI17A4

196704ALOUIASMA16R3

On vous demande de :

- Extraire à partir du fichier texte les informations des élèves et les stocker dans un fichier

d’enregistrements qui sera enregistré sous le nom "Eleves.dat"

- Effacer les élèves admis au Baccalauréat et ceux exclus

- Mettre à jour l’âge de chaque élève(en ajoutant 1) ainsi que sa classe s’il est admis

- Transférer les informations mises à jour dans un fichier texte enregistré dans le même

emplacement sous le nom "Arch2009"

NB : L’effacement des élèves et la mise à jour seront au niveau du fichier d’enregistrement

L’effacement d’un élève se fait de façon que tous les élèves qui le suivent se décalent vers sa

position.

Travail à faire :

- Définir les structures des données adéquates pour ce problème

- Analyser ce problème en utilisant la méthode d’analyse modulaire

- Déduire les différents algorithmes des modules envisagés précédemment.

Exercice50

Bonne chance BAC SI 2009

Merci à tous mes collègues

Notre forum … Notre famille …

Innovateurs … Collaborateurs …