Série d’exercices Année Scolaire: 2008/2009 ****** Lycée Secondaire Ghardimaou

publicité
Lycée Secondaire Ghardimaou
3ème Sciences de l’informatique
Année Scolaire: 2008/2009
******
Matière: Algorithmique et programmation
Série d’exercices
Enseignant: Marzouki Fathi
******
Exercice n°1 :
Ecrire une analyse, un algorithme et la traduction en Pascal d'un programme
intitulé "SOMME_CHIFFRES", qui permet de lire une chaîne de caractères CH
commençant obligatoirement par une lettre alphabétique majuscule (et supposée
composée par des lettres et des chiffres), détermine et affiche l'entier S formé
par la somme des chiffres qui figurent dans la chaîne CH.
Exemple:
Pour CH='Ali12abc26'
la valeur de S est 1+2+2+6 = 11
Le programme SOMME_CHIFFRES affichera le résultat suivant : S = 11.
Exercice n°2 :
Ecrire une analyse, un algorithme et la traduction en Pascal d'un programme
intitulé "CALCUL", qui permet de remplir un tableau T par 100 entiers
strictement positifs, calculer et afficher S1 et S2, sachant que:
- S1 est la somme des éléments pairs de T,
- S2 est al somme des entiers impairs de T.
Exercice n°3 :
Ecrire une analyse, un algorithme et la traduction en Pascal d'un programme
intitulé "PROGRESSION_CROISSNATE", qui permet de lire un entier N
strictement positif et affiche :
- "OUI POUR N" si le chiffres de N forment une progression croissante. On
pourra prendre comme sens : de gauche à droite.
- "NON POUR N" dans le cas contraire.
Exemple:
Le nombre 5789 a des chiffres en progression croissante
Le nombre 166 a des chiffres en progression croissante
Le nombre 187 a des chiffres qui ne forment pas une progression ni croissante
ni décroissante.
Marzouki. F
Page 1 sur 24
Exercice N°4 :
Ecrire une analyse, un algorithme et la traduction en Pascal d'un
programme intitulé "NOMBRE VOYELLE", qui permet de lire une chaîne de
caractères CH non vide, détermine et affiche l'entier S formé par le nombre des
voyelles qui figurent dans la chaîne CH.
Exemple:
Pour CH='BASES DE DONNEES" la valeur de S est 6
Le programme NOMBRE_VOYELLE affichera le résultat suivant: S = 6.
Exercice N°5 :
Ecrire une analyse, un algorithme et la traduction en Pascal d'un programme
intitulé "SOMME_CHIFFRES_PAIR", qui permet de lire un entier N strictement
positif, détermine et affiche l'entier S formé par la somme des chiffres pairs qui
figurent dans l'entier N.
Exemple:
Pour N=14276 la valeur de S est 4+2+6 = 12
Le programme SOMME_CHIFFRES_PAIR affichera le résultat suivant: S=12
Exercice N°6 :
Ecrire une analyse, un algorithme et la traduction en Pascal d'un programme
intitulé "NOMBRE_AMIS", qui permet de lire deux entiers X et Y strictement
positifs, affiche "X et Y sont AMIS" ou "X et Y ne sont pas AMIS".
X et Y sont dits nombres AMIS si SX = Y et SY = X, avec:
- SX est la somme des diviseurs de X excepté lui-même,
- SY est la somme des diviseurs de Y excepté lui-même.
Exercice N°7 :
Ecrire une analyse, un algorithme et la traduction en Pascal d'un
programme intitulé "PROGRESSION_DECROISSANTE", qui permet de lire un
entier N strictement positif et pair, et affiche:
- "OUI POUR N" si le chiffres de N forment une progression décroissante.
On pourra prendre comme sens : de gauche à droite.
- "NON POUR N" dans le cas contraire.
Exemple:
Le nombre 9876 a des chiffres en progression décroissante
Le nombre 662a des chiffres en progression décroissante
Le nombre 816 a des chiffres qui ne forment pas une progression ni croissante
ni décroissante.
Marzouki. F
Page 2 sur 24
Exercice N°8 :
Ecrire une analyse, un algorithme et la traduction en Pascal d'un programme
intitulé "ADRESSE_EMAIL", qui permet de lire une chaîne de caractères CH non
vide et affiche:
- "CORRECTE", si la chaîne CH correspond bien à une adresse e-mail,
- "N'EST PAS CORRECTE" dans le cas contraire.
Une adresse e-mail est correcte si elle contient un seul caractère "@".
Exemple:
[email protected] est une adresse e-mail correcte,
foulen@[email protected] n'est pas une adresse e-mail correcte.
Exercice N°9 :
Ecrire une analyse, un algorithme et la traduction en Pascal d'un programme
intitulé "CODAGE", qui permet de lire un mot non vide, le coder caractère par
caractère, an ajoutant 2 à la valeur du code utilisé pour représenter ce
caractère, enfin affiche le mot codé. (Ainsi la lettre a (dont le code SCII est 97)
sera transformée en c (dont le code ASCII est 99).
Exemple :
"INFO2007" sera transformée en "KPHQ4229"
Le programme CODAGE affiche le message suivant: la chaîne codée est :
KPHQ4229
Exercice N°10 :
Ecrire une analyse, un algorithme et la traduction en Pascal d'un programme
intitulé "SOMME", qui lit un entier N (N>10), calcule et affiche la somme S:
1
3
5
2* N 1
S 


 ... 
1² 2² 3²
N2
Exercice N°11:
Transformer la fonction suivante en une procédure:
Function SOM-DIV (X: Integer): Integer;
Var
i, S :integer;
begin
S:=0;
For i:=1 To X div 2 Do
if (X mod i = 0) then S:= S + i;
SOM-DIV:= S;
End;
Marzouki. F
Page 3 sur 24
Transformer la procédure suivante en une fonction:
Procedure SOM_TAB (V: Tab; N: Integer; Var X: integer);
Var
i: integer;
Begin
X:= V [1];
For i:=2 To N Do
X:= X + V [i];
End ;
Exercice N°12 :
Un entier strictement positif M à N chiffres est dit nombre de Kaprekar si
lorsqu’on élève M au carré, la somme du nombre composé des N chiffres de
droite et du nombre formé par le reste des chiffres redonne ne nombre
d’origine.
Exemple :
92 = 81 et 1 + 8 = 9
452 = 2025 et 25 + 20 = 45
2972 = 88209 et 88 + 209 = 297
1) Analyser le problème en le décomposant en modules.
2) Analyser les modules envisagés dans la réponse à la question n°1.
3) Déduire les algorithmes à partir des analyses faites dans les questions 1) et
Exercice N°13 :
Soit un tableau T de N entiers positifs (5<N<20), on désire écrire un
programme qui permet de remplir un tableau R par les nombres de chiffres
de chaque élément de T, d’afficher les éléments de R ainsi que l’entier qui
admet le plus de chiffres.
NB : Dans le cas où plusieurs entiers ont même nombre de chiffres, le
programme affiche celui qui apparaît le premier dans T.
Exemple :
T
54
17654
9
4532
36187
997
R
2
5
1
4
5
3
L’entier qui possède le plus de chiffres est 17654
1) Analyser le problème en le décomposant en modules.
2) Analyser les modules envisagés dans la réponse à la question n°1.
3) Déduire les algorithmes à partir des analyses faites dans les questions 1) et
2).
Marzouki. F
Page 4 sur 24
Exercice N°14 :
On se propose de saisir N termes informatiques dans un tableau, avec
1<N<35, de trier ce tableau selon l’ordre alphabétique croissant, d’insérer
un nouveau terme dans sa bonne place (sans fausser l’ordre du tableau) et
d’afficher le tableau résultat.
Exemple :
N=5
T : après lecture et avant le tri.
CD-ROM GRAVEUR ADSL DISQUETTE FLASH-ISQUE
T : après le tri.
ADSL CD-ROM DISQUETTE FLASH-DISQUE GRAVEUR
MOT : ‘ BUS’
T : après l’insertion du mot ‘BUS’ (qui est le résultat à afficher).
ADSL BUS CD-ROM DISQUETTE FLASH-DISQUE GRAVEUR
Questions :
1°/ Analyser ce problème en le décomposant en modules.
2°/ Analyser chacun de ces modules.
3°/ En déduire les algorithmes correspondants.
Exercice N°15 :
La « multiplication Russe » est une méthode particulière permettant la
multiplication de deux entiers A et B en utilisant seulement la multiplication
par 2, la division par 2 et l’addition.
Exemple :
Pour A =17 et B = 19, le produit de A par B se fait comme suit :
A
B
17
19
Le premier nombre est divisé par 2 (division entière) et le deuxième est
multiplié par 2 : on aura
8
38
Le processus se répète jusqu’à avoir dans la première colonne 1 :
17
19
8
38
4
76
2
152
1
304
Le résultat est la somme des nombres de la deuxième colonne qui sont en face
des nombres impairs de la première colonne (donc les nombres de la deuxième
colonne qui sont en face des nombres pairs de la première colonne seront
Marzouki. F
Page 5 sur 24
ignorés).
17
19
8
38
ignoré
4
76
ignoré
2
152 ignoré
1
304
17*19= 19+304=323
On veut écrire un programme qui lit deux entiers positifs non nuls et inférieur
à 100, calcule et affiche le produit de deux entiers par la méthode Russe.
Remarque :
On doit définir deux tableaux D et M :
 Dans le tableau D, on va ranger l’entier A ainsi que tous les résultats
des divisions successives de A par 2.
 Dans le tableau M, on va ranger l’entier B ainsi que tous les résultats
des multiplications successives de B par 2.
Questions :
1°/ Analyser ce problème en le décomposant en modules.
2°/ Analyser chacun de ces modules.
3°/ En déduire les algorithmes correspondants.
Exercice N°16 :
On se propose d'écrire une analyse, un algorithme et la traduction en Pascal
d’un programme permettant de saisir les éléments d'un tableau T de N
entiers de trois chiffres chacun (N est une constante) puis de chercher et
d'afficher les nombres symétriques de ce tableau.
Exemple:
Pour N=7 et T
424 715 133 121 454 616 566
1
2
3
4
5
6
7
Le programme affichera : les nombres symétriques de T sont: 424, 121, 454 et
616
NB: la solution doit comporter au moins deux modules.
Exercice N°17 :
On se propose d'écrire une analyse, un algorithme et la traduction en Pascal
d ’ un programme permettant de remplir deux tableaux T1 et T2 de N entiers à
deux chiffres chacun (2 ≤ N ≤15) puis de former un tableau T tel que un
élément T [i] est le résultat de la fusion des deux éléments T1 [i] et T2 [i] selon
le principe suivant:
- Insérer le chiffre des dizaines du plus petit nombre parmi T1 [i] et T2 [i],
entre les deux chiffres du plus grand nombre parmi T1 [i] et T2 [i].
Marzouki. F
Page 6 sur 24
- Mettre le chiffre des unités du plus petit nombre parmi T1 [i] et T2 [i], à droite
du nombre obtenu.
Exemples:
- Pour T1 [i] = 52 et T2 [i] = 36, T [i] sera égal à 5326
- Pour T1 [i] = 13 et T2 [i] = 47, T [i] sera égal à 4173
NB: la solution doit comporter au moins deux modules.
Exercice N°18 :
Ecrire une analyse, un algorithme et la traduction en Pascal d ’ u n
p r o g r a m m e intitulé TRIANGLE qui permet:
- De remplir un tableau T de n chaînes de caractères (2  n  20). Chaque
chaîne doit avoir nu nombre de caractères supérieur ou égal à son indice
dans le tableau.
- D'afficher pour chaque élément T [i] du tableau, les i premiers caractères de la
chaîne.
Exemple:soit T un tableau de 6 chaînes de caractères.
T Bit Modem Ecran Souris Processeur Mémoire
1
2
3
4
5
6
Le programme affichera :
B
Mo
Ecr
Sour
Proce
Mémoir
NB: la solution doit comporter au moins deux modules.
Exercice N°19 :
Deux entiers N1 et N2 sont dits frères si chaque chiffre de N1 apparaît au
moins une fois dans N2 et inversement.
Ecrire un programme Pascal qui saisit deux entiers N1 et N2, vérifie et affiche
s'ils sont frères ou non.
Exemples:
- Si N1 = 1164 et N2 = 614 alors le programme affichera : N1 et N2 sont frères
- Si N1 = 905 et N2 = 9059 alors le programme affichera : N1 et N2 sont frères
- Si N1 = 405 et N2 = 554 alors le programme affichera : N1 et N2 ne sont pas
frères
NB: la solution doit comporter au moins deux modules.
Exercice N°20 :
On se propose de chercher les entiers de l'intervalle [m, n] admettant le plus de
diviseurs. Les entiers m et n vérifient la condition 5 ≤ m ≤n ≤100.
Marzouki. F
Page 7 sur 24
Pour cela écrire un programme Pascal permettant de chercher puis d'afficher
ces entiers ainsi que le nombre de leurs diviseurs.
NB: la solution doit comporter au moins deux modules.
Exercice N°21 :
Ecrire un programme Pascal qui permet de saisir un entier naturel n (5 p n
p 20) et n réels à mettre dans un tableau A puis calcule et affiche la moyenne
arithmétique m des éléments de A et leur écart type S.
Sachant que:
n
m  (
A [i ]) / n
i1
S 
n

( A [ i ]  m )²
i1
NB: la solution doit comporter au moins deux modules.
Exercice N°22 :
Ecrire un programme Pascal qui permet de saisir une chaîne de caractères
CH1 puis d'en extraire les deux nombres formés par les chiffres figurant dans
la chaîne CH1 (extraction à partir de la droite puis extraction à partir de la
gauche).
Exemple:
Si CH1 = "A45B3C2"
alors le programme affichera 4532 et 2354
NB: la solution doit comporter au moins deux modules.
Exercice N°23 :
Soit la procédure Inconnue suivante :
PROCEDURE Inconnue (T:tab; N:integer; var v:tab);
VAR ………………………………………… ;
………………………………………… ;
BEGIN
FOR i:=1 To N Do
begin
str(T[i],ch);
ph:='';
j:=length(ch)+1; WHILE (j>1) DO
begin
j:=j-1;
ph:=ph+ch[j];
end;
val(ph,v[i],e);
end;
END;
Marzouki. F
Page 8 sur 24
1) Compléter les pointillés par les données manquantes.
2) Soit le tableau T suivant: (N = 5 )
T
i
41 2304 7919 2451 9
1
2
3
4
5
Quel est le contenu du tableau V après appel à la procédure Inconnue.
41
2304 7919 2451
V
i
1
2
3
4
3) Déduire le rôle ce cette procédure.
9
5
Exercice N°24 :
Ecrire une analyse, un algorithme et la traduction en Pascal d ’ un programme
qui permet de trier par ordre décroissant les éléments d’un tableau A de n
entiers positifs dans un nouveau tableau B de même dimension.
n étant un entier vérifiant 5 < n < 25. On utilisera la démarche suivante :
1. chercher le maximum de A
2. placer ce maximum dans B
3. remplacer le maximum par –1 dans A
4. refaire les étapes 1, 2 et 3 jusqu’à ce que le tableau A soit entièrement
composé de –1.
N.B :
1) Prévoir l’affichage des éléments du tableau B.
2) La solution doit comporter au moins une fonction et une procédure.
Exercice N°25 :
Soit un tableau T1 contenant n lettres majuscules (de A à Z), n étant un
entier compris entre 5 et 20. On désire trier en ordre croissant les éléments
de T1 et les ranger dans un tableau T2 en utilisant le principe suivant :
1. chercher la lettre qui a le plus petit code ASCII dans T1
2. a) ranger cette lettre dans T2
b) remplacer cette lettre par ‘*’ dans T1
3. répéter n fois les étapes 1 et 2.
Ecrire un programme Pascal qui permet de :
 Saisir les éléments de T1,
 Trier les éléments de T1 et les ranger dans T2,
 Afficher les éléments de T2.
N.B : La solution doit comporter au moins une fonction et deux procédures
Marzouki. F
Page 9 sur 24
Exercice N°26 :
Ecrire un programme Pascal intitulé PROD_SCALAIRE qui permet de
calculer et d’afficher le produit scalaire de deux tableaux A et B de n
entiers positifs (n étant un entier compris entre 5 et 50).
N.B :
1) Le produit scalaire de deux tableaux A et B est donné par la formule
suivante:
n
PS   A[i ] * B[i ]
i 1
2) La solution doit comporter au moins une fonction et une procédure.
Exercice N°27 :
On se propose d'écrire un programme Pascal permettant de saisir une chaîne
de caractères CH et de supprimer les parenthèses, si elles existent, ainsi que
leurs contenus.
NB: on suppose que la chaîne contient au maximum deux parenthèses
correctement utilisées (une ouvrante et une fermante).
Exemple:
Pour la chaîne CH= "lire un entier strictement positif (N>0) et l'afficher", le
programme retourne la chaîne "lire un entier strictement positif et l'afficher"
NB: la solution doit comporter au moins deux modules.
Exercice N°28 :
Ecrire un programme Pascal permettant de saisir deux entiers naturels et
d'afficher s'ils sont premiers entre eux ou non.
a et b sont dits premiers entre eux,
si PGCD (a, b) = 1. Exemple:
Pour a=7 et b=4, PGCD (7, 4) = 1 donc 7 et 4 sont premiers entre eux.
Indication:
Sachant que PGCD (a, b) = PGCD (b, r), avec r = a mod b.
Tant que le reste r est non nul, on remplace a par b et b par r. le dernier
reste non nul est alors le
PGCD des deux nombres.
Exemple:
Donc PGCD (323, 247) = 19
a
b Reste (a mod b)
323 247
76
247 76
19
76 19
0
NB: la solution doit comporter au moins deux modules.
Marzouki. F
Page 10 sur 24
Exercice N°29 :
Pour chercher le chiffre de chance d'une personne, on procède comma suit: on
additionne les chiffres composants la date de naissance de la personne
concernée. Au nombre obtenu, on refait le même procédé jusqu'à ce qu'on
additionne un nombre composé d'un seul chiffre. Ce nombre est le chiffre de
chance.
Exemple :
Soit la date de naissance suivante: "29/09/1999"
On additionne les chiffres de la date da naissance: 2+9+0+9+1+9+9+9 = 48
 48 est composé de deux chiffres, on refait le même traitement: 4+8 = 12
 12 est composé de deux chiffres, on refait le même traitement: 1+2 = 3
 3 est composé d'un seul chiffre et c'est le chiffre de chance recherché.
Question:
Ecrire un programme Pascal permettant de saisir la date de naissance d'une
personne sous la forme d'une chaîne de caractères "jj/mm/aaaa" (aucun
contrôle ne sera effectué) puis d'appliquer la méthode citée ci-dessus et
d'afficher le chiffre de chance trouvé.
NB: la solution doit comporter au moins deux modules.
Exercice N°30 :
Un "tautogramme" est une chaîne dont chacun de ses mots commence
par la même lettre (sans distinction entre majuscule et miniscule).
Exemple :
La chaîne "Le lion lape le lait lentement" est un "tautogramme"
Question :
Ecrire un programme Pascal, permettant de saisir un chaîne de caractères
composée uniquement de lettres et d'espaces (on suppose que deux mots
consécutifs sont séparés par un seul espace); puis d'afficher un message
indiquant si cette chaîne est "tautogramme" ou non.
NB: la solution doit comporter au moins deux modules.
Exercice N°31 :
Un "totalogramme" est une chaîne dont chacun de ses mots commence et
se termine par la même lettre.
Exemple:
la chaîne "AMIRA EMPRUNTE TEMPORAIREMENT A AZIZA SES SOULIERS"
est "totalogramme".
Marzouki. F
Page 11 sur 24
Question :
Ecrire un programme Pascal, permettant de saisir un chaîne de caractères
composée uniquement de lettres et d'espaces (on suppose que deux mots
consécutifs sont séparés par un seul espace); puis d'afficher un message
indiquant si cette chaîne est "totalogramme" ou non.
NB: la solution doit comporter au moins deux modules.
Exercice N°32 :
Soit l'algorithme du programme principal suivant:
0) Début Traitement_Tab
1) Répéter
Ecrire ("donner le nombre d'éléments") Lire (N)
Jusqu'à N dans [2..20]
2) Proc Remplir (N, T)
3) Pour i de 1 à (N div 2) Répéter
Aux ← T [i]
T [i] ← T [N-i+1]
T [N-i+1] ← Aux
Fin Pour
4) Fin Traitement_Tab
Questions:
1. Traduire l'algorithme ci-dessus en Pascal
2. Ecrire la procédure Remplir permettant de remplir, d'une manière
automatique et aléatoire, un tableau V par p chiffres décimaux (de 0 à 9),
avec (2 £ p £ 20).
3. Transformer la séquence 3) en une procédure Traitement et en tenir
compte dans le programme principal.
4. Afficher les éléments du tableau T avant et après traitement.
5. Ecrire, sous forme de commentaire, le rôle de la procédure Traitement, juste
avant son appel dans le programme principal.
Exercice N°33 :
Ecrire un programme Pascal permettant de saisir deux entiers naturels
strictement positifs m et n avec (m ≤ 100 et n ≤100), de calculer puis d'afficher
leur produit p selon le principe suivant:
1. Initialiser la variable produit p à 0,
2. Si (m<n) alors permuter les contenus des deux
variables m et n.
3. Ajouter n ² à p.
4. Affecter à m la valeur de (m-n).
5. Répéter les actions 2, 3 et 4 jusqu'à ce que m ou n soit
nul.
6. Afficher la valeur de p qui est le produit de m par n.
NB: la solution doit comporter au moins deux modules.
Marzouki. F
Page 12 sur 24
Exercice N°34 :
L’algorithme du programme principal:
0) Début Liste9
1) Ecrire ("Donner un entier de deux chiffres distincts")
Lire (N)
2) Répéter
N ← Absolue (N – FN Echanger (N))
Ecrire (N)
Jusqu'à N=9
3) Fin Liste9
NB: la fonction Echanger permet de permuter les chiffres d'un nombre N donné
formé de deux chiffres distincts.
L'algorithme ci-dessus est celui d'un programme permettant de déterminer
et d'afficher la liste des nombres générés, à partir d'un entier N donné de deux
chiffres distincts, selon le principe suivant:
Exemple:
Si N=19
1. Permuter les chiffres de N, on obtient 91.
2. calculer la valeur absolue de la différence entre 91 et 19 pour générer le
nombre 72; (72=91-19)
3. répéter les deux étapes précédentes avec le nombre 72 pour générer le
nombre 45; (45=72-27)
4. refaire le même travail avec chacun des nombres générés jusqu'à obtenir un
dernier nombre égal à 9.
Questions:
1. Traduire cet algorithme en Pascal.
2. Transformer la séquence 1) en nue procédure Lecture et y ajouter les
contrôles nécessaires pour que N soit composé de deux chiffres distincts et
en tenir compte dans le programme principal.
3. Ecrire la fonction Echanger permettant de permuter les deux chiffres de N.
4. Ajouter, dans le programme principal, une instruction permettant d'afficher
à chaque fois le nombre généré.
Exercice N°35 :
Sur les touches (2, 3, 4, 5, 6, 7, 8 et 9) du clavier d'un téléphone portable, sont
inscrites des lettres pour écrire des messages en plus des chiffres.
Par exemple, sur la touche 5 sont inscrits les lettres J, K et L.
- pour taper la lettre J on appuie une seule fois.
- Pour taper la lettre K on appuie deux fois
- Pour taper la lettre L on appuie trois fois.
Ecrire un programme Pascal permettant de déterminer et d'afficher le
Marzouki. F
Page 13 sur 24
nombre total d'appuie sur les touches du clavier d'u téléphone portable
pour saisir un mot donné de N lettres, supposées non accentuées, (4 £ N £
9).
Indication :
La figure suivante donne la répartition des lettres sur les touches du clavier
d'un téléphone portable.
NB: la solution doit comporter au moins deux modules.
Exercice N°36 :
Ecrire un programme Pascal intitulé El_Frequent permettant de saisir les
éléments d'un tableau T de N entiers (5 ≤ N ≤20) et d'afficher l'élément qui
apparaît le plus dans le tableau T, ainsi que son nombre d'occurrence.
Si plusieurs éléments différents répondent à la condition, le programme doit en
fournir le premier.
NB: la solution doit comporter au moins deux modules.
Exercice N°37 :
Soit l'algorithme du programme principal suivant:
0) Début Apparition
1) Répéter
Ecrire ("saisir un mot:") Lire (M)
Test ← vrai
i←0
l ← long (M)
Tant que (test) et (i<l) faire
i←i+1
test ← Majus (M [i]) dans ["A" .. "Z"]
Fin Tant que
2) Ecrire ("saisir une phrase: "), lie (ph)
3) M ← FN Majuscule (M)
4) Ph ← FN Majuscule (ph)
5) Ecrire ("le nombre d'apparition est:", FN Freq (M, ph))
6) Fin Apparition
Exemple:
Si le mot saisi est "bon" et si la phrase saisie est "Bonjour ! ce bonbon est très
bon, on va acheter une bonne quantité" alors le programme affichera : le
nombre d'apparitions est 5
Questions:
1. traduire cet algorithme en Pascal.
2. transformer les deux séquences 1) et 2) en une procédure Saisie et en
tenir compte dans le programme principal.
3. écrire la fonction majuscule permettant de convertir une chaîne donnée en
Marzouki. F
Page 14 sur 24
majuscule.
4. écrire la fonction Freq permettant de déterminer le nombre d'apparitions
du mot (M) dans la phrase (ph).
Exercice N°38 :
Soit un tableau T de n caractères (5 ≤ n≤ Nmax) qui ne peuvent être que "A", "B"
ou "C" et tels que deux éléments successifs du tableau ne sont pas égaux. (Nmax
est une constante de valeur 15).
On se propose d'insérer un caractère donné Car dans la première position
possible dans le tableau T en respectant la règle ci-dessus mentionné puis
d'afficher le tableau T dans son nouvel état (après insertion).
NB:
 Car ne peut être que "A", "B" ou "C" et ne peut être insérée ni à la première
ni à la dernière position du tableau.
 On suppose que l'insertion d'un nouveau élément est possible en effet
n<Nmax.
Exemple:
T à l'état initial
B A B C A C B A
T après l’insertion d’un caractère Car="B"
B
A
B
C
B
A
C
B
A
Par la suite on donne l'algorithme suivant:
0) Début insertion
1) Ecrire ("Donner nu entier n avec 5 ≤ n≤ Nmax"), lire (n)
2) Pour i de 1 à n faire
Ecrire ("Donner une lettre A ou B ou C")
Lire (T [i])
Fin Pour
3) Proc Insert_Car (cat, T, n)
4) Proc Affiche (n, T)
5) Fin Insertion
Questions:
1. Traduire e Pascal l'algorithme Insertion ci-dessus.
2. Transformer la séquence 1) en une procédure Saisie, ajouter les
conditions nécessaires pour la lecture de n ainsi que des éléments de T et
en tenir compte dans le programme principal.
3. Ecrire la procédure Insert_Car permettant d'insérer un caractère Car dans
le tableau T, tout en respectant les conditions mentionnées ci-dessus.
4. Ecrire la procédure Affiche permettant d'afficher les éléments de T après
insertion de Car.
Exercice N°39 :
Ecrire un Programme pascal permettant d'afficher tous les couples d'entiers
Marzouki. F
Page 15 sur 24
naturels (m , n) vérifiant la propriété suivante :
m  [1, 100] et n  [2, 15] et m figure dans l'écriture du produit m*n
Exemples :
1) Si m = 20 et n = 6
alors le produit m*n = 120 contient le nombre 20 dans
ce cas le couple (20,6) sera affiché.
2) Si m = 20 et n = 12 alors le produit m*n = 20 * 12 = 240 ne contient pas le
nombre 20
NB: la solution doit comporter au moins deux modules.
Exercice N°40 :
On veut écrire un programme en Pascal permettant d’afficher tous les entiers
naturels formés de quatre chiffres dont la somme donnera un entier d’un seul
chiffre.
Exemple :
La somme des chiffres de l’entier 2004 est égale à 6 (2+0+0+4=6) et par
conséquent l’entier 2004 sera affiché.
NB: la solution doit comporter au moins deux modules.
Exercice N°41 :
On appelle poids d’un mot la somme des produits de la position de chaque
voyelle contenue dans le mot par son rang dans l’alphabet français.
Une lettre a le même rang qu’elle soit écrite en majuscule ou en minuscule.
Ecrire un programme Pascal qui calcule et affiche le poids d’un mot donné.
Exemple :
Le mot « Epreuve » a pour poids 165 car :(1*5) + (4*5) + (5*21) + (7*5) = 165
NB: la solution doit comporter au moins deux modules.
Exercice N°42 :
Soit la suite (U) définie par: U0= 2, U1= 3, Un = Un-1+ 2*Un-2 pour tout n >= 2
En supposant que cette suite est croissante, écrire un programme permettant
de lire un entier x (x > 2), de vérifier et d'afficher s'il est un terme de la suite U
ou non. Dans l'affirmative afficher son rang.
Exercice N°43 :
Marzouki. F
Page 16 sur 24
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 inferieur ou égale à 10 -4. Le
dernier terme calculé est une valeur approchée de x à 10 -4 près?
Exercice N°44 :
Soit la suite (Pi), i impaire définie par:
P1= 2
Pi = Pi-2 * (i-1)/i * (i+1)/i
Ecrire un programme qui permet de calculer et d'afficher les termes de la suite
P jusqu'à ce que la différence entre deux termes consécutifs devient
inférieure ou égale à 10 -4.
Exercice N°45 :
Sachant que sin(x) = x/1! - x3/3! + x5/5! - x7/7! + x9/9! - ... Pour x très proche de
zéro.
Ecrire un programme qui permet d'afficher sin(x) en utilisant la formule cidessus. Le calcul s'arrête quand la différence entre deux termes consécutifs
devient inférieure ou égale à 10 -4. La dernière somme calculée est une valeur
approchée de sin(x).
Exercice N°46 :
Ecrire un programme Pascal qui permet de convertir un nombre hexadécimal
(base 16) en son équivalent décimal (base 10).
On demande :
1. Ecrire une procédure remplir qui permet de remplir un tableau T par les
caractères d’un nombre hexadécimal donné.
2. Ecrire une fonction puissance qui permet de calculer la puissance d’un
entier x par un autre y.
3. Ecrire une fonction somme qui permet de convertir un nombre
hexadécimal en son équivalent décimal.
4. Ecrire le programme Pascal permettant de convertir un nombre
hexadécimal en son équivalent décimal.
Exemple :
Si on donne 1EF3, le programme affichera 7923.
Pour convertir le nombre 1EF3 en décimal, on procède comme suit :
Marzouki. F
Page 17 sur 24
163*1+162*14+161*15+1603=7923.
Exercice N°47 :
Ecrire une spécification et un algorithme qui permet de chercher puis d’afficher
tous les entiers naturels de l’intervalle [1000,2000] qui vérifient la propriété
suivante :
La somme des chiffres des unités et des dizaines est égale au produit du chiffre
des centaines par celui des milliers.
Exemple : L’entier 1954 sera affiché car 4+5=9*1.
Questions :
1. Donner la spécification de ce problème.
2. Déduire l’algorithme.
Exercice N°48 :
On veut écrire un algorithme permettant de saisir les éléments de deux tableaux
Ta et Tb contenant respectivement p et q entiers (3<=p<=20 et 3<=q<=20) puis
déterminer si Ta est un « sous_tableau » de Tb.
C'est-à-dire que tous les éléments de Ta figurant dans l’ordre de Tb.
Exemple :
Ta 0 3 5
Tb 2 0 3 5 0
L’algorithme doit répondre «Ta est sous tableau de Tb».
Questions :
1. Donner la spécification de ce problème.
2. Déduire l’algorithme.
Exercice N°49 :
On se propose d’écrire un programme qui permet de calculer puis d’afficher les
premiers termes de 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 devienne inférieure ou égale à 10 -4.
Marzouki. F
Page 18 sur 24
NB : La solution proposée doit comporter obligatoirement une fonction et une
procédure.
Vous pouvez utiliser un tableau de n réels, pour sauvegarder les premiers
termes de la suite Un..
x est un réel donné.
1. Ecrire une spécification et un algorithme de ce programme.
2. Ecrire une spécification et un algorithme pour chacun des deux modules.
Exercice N°50 :
On veut remplir un tableau T avec n chaînes de caractères, chaque chaîne doit
être de taille inférieure à 20 et supérieure à 10, ensuite trier en ordre croissant
les chaînes de taille pair et en ordre décroissant les chaînes de taille impair, et en
fin afficher le contenu du tableau T, pour cela on demande d’écrire :
1. La spécification et l’algorithme d’un module « Remplir », qui permet de
remplir un tableau T avec n chaînes en tenant compte du contrôle de saisi.
2. La spécification et l’algorithme d’un module « Tri_Selection » qui permet de
trier une chaîne de caractères en ordre croissant selon la méthode de tri par
sélection.
3. La spécification et l’algorithme d’un module « Tri_bulle » qui permet de trier
une chaîne de caractères en ordre décroissant selon la méthode tri à bulles.
4. La spécification et l’algorithme d’un module « Afficher» qui permet d’afficher
les éléments d’un tableau.
La spécification et l’algorithme du programme principal qui fait appel aux
différents modules envisagés précédemment pour réaliser le traitement énoncé
ci-dessus.
Exercice N°51 :
On veut écrire un programme qui permet de calculer le PPCM de n entiers, avec
n un entier donné (3≤ n ≤ 10).
1. Décomposer ce problème en modules.
2. Donner une spécification et un algorithme du programme qui permet de
résoudre ce problème.
3. Donner pour chaque module une spécification et un algorithme.
Exercice N°52 :
Un carrée magique est un tableau d’entiers, ou les sommes des
colonnes, des lignes et des diagonales sont toutes égales. Dans
l’exemple ci contre, le total commun, ou «somme magique», de ce
carrée est 15, et sa taille, ou «ordre», est 3.
1. On considère une constante OrdreMax valant 10, et un type Carre_t qui
est un tableau d’entiers en 2 dimensions, dont les indices de ligne et de
Marzouki. F
Page 19 sur 24
2.
3.
4.
5.
6.
colonne vont de 1 à OrdreMax. Quelles sont les 2 façons de déclarer
Carre_t ?
Ecrire la procédure AffiCarre(c : Carre_t; n : integer); qui reçoit en
paramètres un carre c de taille n×n et l’affiche a l’écran.
Ecrire une fonction CarreMagique(c : Carre_t; n : integer) : boolean; qui
reçoit en paramètres un carre c de taille n×n, puis renvoie TRUE si les
sommes des colonnes, des lignes et des diagonales de c sont toutes égales,
FALSE sinon. (Conseil : les 2 diagonales sont parcourues avec c [i, i] et
c[i,n-i+1], respectivement).
On dit qu’un carré est «normal» si les entiers qui sont dans le carré
n’apparaissent qu’une fois et sont tous compris entre 1 et n² (c’est le cas de
l’exemple ci-dessus). Ecrire une fonction CarreNormal(c : Carre_t; n :
integer) : boolean; qui reçoit en paramètres un carré c de taille n×n, puis
renvoie TRUE si le carre est normal, FALSE sinon. (Conseil : utiliser un
tableau de booléens pour marquer les entiers déjà utilises).
Intéressons-nous maintenant au cas des carrés magiques d’ordre 3 ; nous
souhaitons écrire une procédure qui les trouve tous. L’algorithme que l’on
demande de programmer part de l’idée suivante : on constate que tout
carré magique peut se décomposer sous la forme ci-contre, a partir de 4
entiers e, f, g, h et pour une somme magique s. Il suffit donc de générer
toutes les combinaisons d’entier e, f, g, h entre 1 et 9 (soit 4 boucles
imbriquées) et de compléter chaque carré comme
e
f
s-e-f
indiqué. Les carrés générés ne sont pas forcément
g
h
s-g-h
magiques ni normaux (il faudra faire les tests), mais le s-e-g s-f-h s-e-h
nombre de carrés générés n’est que de 94= 6561.
Ecrire une procédure CaMaNo3(s:integer); qui cherche avec cet
algorithme tous les quadruplets formant un carré magique normal de
somme magique s et affiche les carrés solution.
Ecrire un programme principal qui demande une somme magique puis
appelle CaMaNo3. Indiquer en commentaire l’emplacement des types et
fonctions (mais sans les recopier).
Exercice N°53 :
On veut écrire un programme qui permet de remplir un tableau T par n entiers
positifs triés dans l’ordre croissant (2<=n<=20), puis d’afficher les entiers
manquants entre le premier et le dernier élément de ce tableau.
Exemple :
Si n = 7 et si T est le tableau suivant :
5
6
8
9
10
12
15
Le programme affichera : les entiers manquants sont : 7, 11, 13, 14
1. Décomposer ce problème en modules.
2. Ecrire une spécification et un algorithme pour le programme principal.
3. Ecrire une spécification et un algorithme pour chaque module.
Marzouki. F
Page 20 sur 24
Exercice N°54 :
On veut écrire un programme qui permet de:
 Afficher un triangle d’étoiles de hauteur n avec : 1 symbole * sur la 1 ère
ligne, 2 symboles * sur la 2ème ligne, etc. Les étoiles seront disposées
comme ceci :

1.
2.
3.
*
**
***
****
*****
Afficher un triangle d’étoiles de hauteur n dont la pointe sera centrée,
comme ceci :
*
***
*****
*******
*********
Décomposer ce problème en modules.
Ecrire une spécification et un algorithme pour le programme principal.
Ecrire une spécification et un algorithme pour chaque module .
Exercice N°55 :
On veut écrire un algorithme qui permet de transposer une matrice carrée.
L’opération de transposition consiste à inverser les lignes et les colonnes en
effectuant une symétrie par rapport à la diagonale principale de la matrice.
Exemple :
1 2 3
4 5 6
7 8 9
1
2
3
4 7
5 8
6 9
1. Décomposer ce problème en modules.
2. Ecrire une spécification et un algorithme pour le programme principal.
3. Ecrire une spécification et un algorithme pour chaque module.
Exercice N°56 :
Une technique ultérieure de cryptographie consista à opérer non avec un
décalage systématique, mais par une substitution aléatoire. Pour cela, on utilise
un alphabet-clé, dans lequel les lettres se succèdent de manière désordonnée,
par exemple :
HYLUJPVREAKBNDOFSQZCWMGITX
Marzouki. F
Page 21 sur 24
C’est cette clé qui va servir ensuite à coder le message. Selon notre exemple, les
A deviendront des H, les B des Y, les C des L, etc.
Ecrire une analyse, un algorithme et le programme Pascal qui effectue ce
cryptage (l’alphabet-clé sera saisi par l’utilisateur, et on suppose qu'il effectue
une saisie correct).
Exercice N°57 :
On se de ranger dans un tableau V les numéros des cartes d’identité nationale
des N élèves d’un lycée.
Deux élèves ne peuvent pas avoir un même numéro de carte d’identité nationale.
Un numéro de carte d’identité nationale est composé obligatoirement de huit
chiffres.
1. Analyser ce problème.
2. En déduire l’algorithme correspondant.
3. Ecrire le programme pascal.
Exercice N°58 :
Ecrire un programme Pascal qui permet de coder en morse un mot de passe,
supposé composé de N chiffres décimaux (4≤N≤8), puis d’afficher ce code.
Pour une meilleure lisibilité du résultat, les chiffres codés en morse seront
séparés par un point d’interrogation ( ?) lors de l’affichage.
Tableau d’équivalence chiffres / codes morses :
0
1
2
3
4
5
6
7
8
9
----- .---- ..--- …-- ….- ….. -…. --… ---.. ----.
Exemple :
Pour le mot de passe 123456, le programme affichera :
.---- ? ..--- ? …-- ? ….- ? ….. ? -…. ?
1. Analyser ce problème.
2. En déduire l’algorithme correspondant.
3. Ecrire le programme pascal.
Exercice N°59 :
Ecrire un programme Pascal qui permet de :
 Remplir un tableau T par n chaînes de caractères, avec (5≤n≤30).
 Eliminer tous les caractères non alphabétiques de chaque élément de T.
Marzouki. F
Page 22 sur 24
Afficher les chaînes non vides du tableau T, précédées chacun de son
indice.
N.B : On suppose que les lettres accentuées ne sont pas considérées comme des
lettres alphabétiques.

Exemple :
Pour le tableau T suivant, avec n=8 :
T Ab ?23k 2kj !mn tkrmob Z56a8ù B&12a :c 43 ?8\% 7in8fço (90,k ?
1
2
3
4
5
Le programme affiche les chaînes suivantes
1
2
3
4
5
7
8
6
7
8
:
Abk
kjmn
tkrmob
Za
bac
info
ok
Exercice N°60 :
Ecrire un programme Pascal qui permet de :
 Remplir un tableau T, d’une façon automatique et aléatoire, par n entiers
strictement positifs, inférieurs ou égaux à 1000, avec (5≤n≤30).
 Vérifier pour l’élément de T d’indice p donné, s’il est égal à la somme d’un
certain nombre d’éléments consécutifs de T qui le précèdent
immédiatement. Dans ce cas, le programme affiche ces éléments, sinon il
affiche «Conditions non vérifiée».
Exemple 1 :
Pour le tableau T suivant, avec n=7 et p=5 :
T 3 2 4 6 12 18 20
1
2
3
4
5
6
7
Le programme affiche : 6, 4,2
Exemple 2 :
Pour le tableau T suivant, avec n=7 et p=3 :
T 3 2 4 6 12 18 20
1
2
3
4
5
6
7
Le programme affiche : «Conditions non vérifiée»
Marzouki. F
Page 23 sur 24
Exercice N°61 :
On se propose d’écrire un programme Pascal permettant de déterminer et
d’afficher un code à partir d’un entier N strictement positif et supérieur à 100,
selon le principe suivant :
1. Calculer la somme S des chiffres qui composent le nombre N.
2. Recommencer le calcul de la somme des chiffres obtenue S tant que celleci n’est comprise entre 1 et 9.
3. Le code sera le nombre formé par N auquel on place à sa gauche la
dernière somme obtenue.
Exemple:
Pour N=9867, le programme affichera : « Le code est : 39867 ».
On effet :
Pour N=9867 :
 La 1ère somme S vaut 30 (car 9+8+6+7=30).
 La 2ème somme S 3 (car 3+0=3).
 Etant donné que la dernière somme S, qui vaut 3, est comprise entre 1 et
9, le code sera 39867.
Exercice N°62 :
On se propose d’écrire un programme Pascal permettant de déterminer et
d’afficher si un entier N saisi (N>9) est divisible par 9 ou non, en appliquant la
méthode suivante :
1. On fait la somme du 1er et du 2ème chiffre de N.
2. Si la somme obtenue est supérieure ou égale à 9, on lui soustrait 9.
3. On ajoute ensuite à cette somme et on lui applique la règle 2(on lui
retranche 9 si elle est supérieure à 9) et ainsi de suite jusqu’au dernier
chiffre de N.
4. Si le résultat final est nul, le nombre N est alors divisible par 9.
Exemple:
Pour N=65493 le programme effectuera les opérations suivantes :
 6+5=11 (11 est supérieur ou égal à 9, on lui soustrait 9, on obtient 2).
 2+4=6 (6 est strictement inférieur à 9).
 6+9=15 (15 est supérieur ou égal à 9, on lui soustrait 9, on obtient 6).
 6+3=9 (9 est supérieur ou égal à 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. En effet, 65493=9*7277.
Marzouki. F
Page 24 sur 24
Téléchargement