You are on page 1of 62

Exercices en Turbo Pascal

Salah Fenni

©2010

LES STRUCTURES SIMPLES
Exercice 1
a) Les variables N, P et Q sont entières et contiennent respectivement les valeurs 5, 7 et 3. Les
expressions suivantes sont-elles correctes. Si oui, donnez leur type et leur valeur.
• N mod P * Q
• N mod P div Q
• N = P Or N <= Q
• SUCC ('N' + 'P')
b) La variable C est de type caractère et contient la valeur 'e'. Les expressions suivantes sont-
elles correctes. Si oui, donnez leur type et leur valeur.
• PRED (C) + 'e'
• ORD (C) + 2.5
• CHR (ORD (C) - 32)
• CHR (SUCC (ORD (C)))
c) Si N est une variable entière et X une variable réelle, quelles sont les affectations possibles :
• X := N ;
• N := X+1 ;
• N := TRUNC(X) +1 ;
• N := INT(X) +1 ;
• N := ROUND(X) +1.5 ;
• N := ROUND(X+1.5) ;
d) Pour chaque opération de lecture ou d'écriture, mettre V si l'opération est possible et F dans
le cas contraire.
[ ] Lire (A) [ ] Lire (45) [ ] Lire (A+B)
[ ] Lire ("A") [ ] Lire ("A =", A) [ ] Ecrire (X+2*Y)
[ ] Ecrire ("A =", A) [ ] Ecrire (A, " ", B) [ ] Ecrire (A:6:2)
[ ] Ecrire (5 mod 7 div 2) [ ] Ecrire ("Saisir un réel") [ ] Ecrire (45)

Exercice 2
Ecrire un algorithme puis la traduction en Pascal d'un programme intitulé Sortie_inverse, qui
saisit trois nombres dans un ordre donné et les affiche dans l’ordre opposé à l’entrée.

Exercice 3
Ecrire un algorithme puis la traduction en Pascal d'un programme intitulé Cylindre, qui calcule
et affiche le volume d'un cylindre après saisie son rayon R et sa hauteur H.

Exercice 4
Ecrire un algorithme puis la traduction en Pascal d'un programme Surface_Rectangle, qui
calcule la surface d'un rectangle de dimensions données et affiche le résultat sous la forme
suivante : "La surface du rectangle dont la longueur mesure .... m et la largeur mesure .... m,
a une surface égale à .... mètres carrés".

Exercice 5
Ecrire un algorithme puis la traduction en Pascal d'un programme Piscine, qui lit les
dimensions d'une piscine, et affiche son volume et la quantité d'eau nécessaire pour la remplir.

Exercice 6
Ecrire un algorithme puis la traduction en Pascal d'un programme Trapèze, qui lit les
dimensions d'un trapèze et affiche sa surface.

Exercice 7
Ecrire un algorithme puis la traduction en Pascal d'un programme intitulé Permut, qui fait la
permutation de deux variables A et B.

Exercice 8
Proposer une marche à suivre qui fait, une permutation circulaire à droite, des valeurs de
trois variables A, B et C.
Par exemple : à partir de (A, B, C) = (10, 25, 4), on passe à (A, B, C) = (4, 10, 25).

|2

Exercice 9
Proposer une marche à suivre qui fait la permutation de deux variables numériques X et Y,
sans faire appel à aucune variable intermédiaire.

Exercice 10
Ecrire un algorithme puis la traduction en Pascal d'un programme intitulé Division, qui fait
calculer et afficher le quotient et le reste de la division euclidienne de A par B.

Exercice 11
Ecrire un algorithme puis la traduction en Pascal d'un programme qui lit une température en
degrés Celsius et affiche son équivalent en Fahrenheit.

Exercice 12
Ecrire un algorithme puis la traduction en Pascal d'un programme permettant de déterminer et
d'afficher la conversion en mile marin d'une distance mesurée en kilomètre.

Exercice 13
Ecrire un algorithme puis la traduction en Pascal d'un programme qui permet de convertir et
d'afficher en octets, kilo octets, méga octets et giga octets un nombre donné en bits.

Exercice 14
Ecrire un algorithme puis la traduction en Pascal d'un programme, qui convertit en heures,
minutes et secondes, une durée T donnée en secondes. Il affiche le résultat sous la forme
digitale comme celle d'une montre électronique (hh : mn : ss).

Exercice 15
Ecrire un algorithme puis la traduction en Pascal d'un programme, qui conjugue un verbe du
premier groupe au futur simple. On ne traite pas les verbes irréguliers.

Exercice 16
Ecrire un algorithme puis la traduction en Pascal d'un programme, qui calcule et affiche,
l'intérêt et la valeur acquise par une somme placée en épargne pendant 5 ans à intérêt
simple.

Exercice 17
On sait qu'avec un réservoir de L litres, une voiture a parcouru Y km. Ecrire un algorithme puis
la traduction en Pascal d'un programme, qui fait lire les données nécessaires et fait calculer et
afficher le taux de consommation aux 100 km de cette voiture.

Exercice 18
Ecrire un algorithme puis la traduction en Pascal d'un programme, qui calcule la résistance
équivalente de 3 résistances montées en parallèle.
On rappelle : 1/R = 1/R1 + 1/R2 + 1/R3

Exercice 19
On se propose de saisir un entier N de trois chiffres non nuls, de déterminer et d'afficher tous
les nombres qui peuvent être formés par les chiffres de N.
Exemple : pour N=427
Les nombres formés par les chiffres de N sont : 427, 472, 724, 742, 247, 274.

Exercice 20
Ecrire un algorithme puis la traduction en Pascal d'un programme, qui fait entrer deux entiers
A et B et fait calculer et afficher leur inf et leur sup.
Utiliser une formule mathématique donnant directement le résultat.

|3

Si la somme des nombres de doigts montrés est paire. Exercice 4 La surface d'un triangle de côtés a. permettant de simuler un jeu entre deux joueurs régi par le principe suivant : Deux joueurs A et B se cachent la main droite derrière le dos. Mlle ou Mme). soyez le bienvenu" ou "Titre"foulena". Exercice 8 Ecrire un programme Pascal intitulé INVITE. en choisissant de tendre un certain nombre de doigts (de 1 à 5). Exercice 6 Ecrire un programme Pascal intitulé PARITE qui saisit un nombre entier et détecte si ce nombre est pair ou impair. Exercice 2 Ecrire un programme Pascal intitulé MAX3 permettant d'obtenir le maximum de trois nombres donnés. écrire un programme Pascal intitulé ABS_DIFF qui détermine et affiche la valeur absolue de (a-b). b) donné. Exercice 5 Sans utiliser la fonction prédéfinie ABS. calcule et affiche SURF. LES STRUCTURES CONDITIONNELLES Exercice 1 Ecrire un programme Pascal intitulé MIN2 qui affiche le plus petit de deux nombres A et B. sinon c'est le second. Exercice 11 Ecrire un programme Pascal intitulé TRI. deux entiers saisis au clavier. c) donné. Exercice 13 Ecrire un programme Pascal intitulé EQUA_2D. Exercice 3 Ecrire un programme Pascal intitulé RACINE qui affiche la racine carrée d'un réel donné. b et c. Exercice 10 Ecrire un programme Pascal intitulé ORDRE qui ordonne dans le sens croissant. inférieur ou égale à B puis affiche le résultat. teste si A est supérieur. qui fait résoudre dans IR l'équation ax+b=0 pour tout couple de réels (a. Exercice 12 Ecrire un programme Pascal intitulé EQUA_1D. qui saisit le prénom d'une personne et son titre (Mr. Les deux joueurs se montrent la main droite en même temps. Exercice 7 Ecrire un programme Pascal intitulé chez_la_fourmi. qui fait lire trois entiers A. en échangeant leur valeur si nécessaire. b et c est donnée par : Surf = p ( p − a )( p − b )( p − c ) Où p = (a+b+c)/2 Ecrire un programme Pascal intitulé Aire_triangle qui lit les valeurs de a. qui fait résoudre dans IR l'équation ax2+bx+c=0 pour tout triplet de réels (a. les permute de façon à les classer par ordre croissant puis affiche le résultat. |4 . le premier joueur a gagné. b. B et C. puis affiche l'invite suivante : "Titre"foulen". soyez la bienvenue" Exercice 9 Ecrire un programme Pascal intitulé SUP_INF qui saisit deux entiers A et B.

Exercice 14 Ecrire un programme Pascal intitulé INEQUATION. mm. Pour le cas de février. Exercice 20 Ecrire un programme Pascal intitulé ANCIENNETE. Exercice 16 Ecrire un programme Pascal intitulé CALCULETTE. *. Exemples : 10 Æ Dix 21 Æ Vingt et un 85 Æ Quatre vingt cinq Exercice 23 Ecrire un programme Pascal intitulé Jour_Semaine. qui permet de saisir la moyenne annuelle d'un élève et affiche la décision du conseil de classe. qui fait résoudre dans IR l'inéquation ax+b<0 pour tout couple de réels (a. mois et jours) qui les sépare. qui saisit une date sous la forme jj/mm/aaaa (chaîne de 10 caractères) et l'affiche décodée (jj Mois aaaa). qui traduit en toutes lettres un entier naturel donné entre 0 et 99. Exercice 21 Ecrire un programme Pascal intitulé LENDEMAIN. qui fait lire une date initiale JI/MI/AI et une date finale JF/MF/AF et qui fait calculer et afficher la durée (exprimée en années. Exercice 15 Ecrire un programme Pascal intitulé TOUCHE qui affiche selon le cas. |5 . la mention adéquate dans le cas où l'élève est admis : 18 ≤ moy Excellent 16 ≤ moy < 18 Très Bien 14 ≤ moy < 16 Bien 12 ≤ moy < 14 Assez Bien 10 ≤ moy < 12 Passable Moy < 10 Redouble Exercice 18 Ecrire un programme Pascal intitulé JOURS qui saisit le numéro du mois et affiche le nombre de jours de ce mois. Exemple : 10/05/2007 donne 10 Mai 2007. voyelle. A chaque opérateur valide correspond une opération arithmétique qu'il faut exécuter et afficher le résultat ou un message d'erreur. le nombre de jours est 29. qui fait lire dans cet ordre : un réel. Exercice 22 Ecrire un programme Pascal intitulé TOUTE_LETTRE. Exemple : le 10/05/2007 est un jeudi. si l'année est bissextile. on lit l'année. le cas échéant. /) et un autre réel. un opérateur arithmétique (+. Exercice 17 Ecrire un programme Pascal intitulé BULLETIN. qui saisit une date quelconque (jj. Exercice 19 Ecrire un programme Pascal intitulé DATE. -. qui permet de déterminer le jour de la semaine correspondant une date donnée. aa) et affiche la date du lendemain. b) donné. sinon c'est 28 jours. la nature du caractère (consonne. chiffre ou symbole) correspondant à une touche saisie.

le programme affichera alors "Perdu.. 3 x 2 x 1. d'abord à l'endroit. des 20 premiers entiers (de 1 à 20). Ecrire un programme Pascal pour s'amuser avec l'ordinateur... LES STRUCTURES ITERATIVES Exercice 1 Ecrire un programme Pascal qui affiche l'alphabet en majuscule. le nombre cherché est : ".25 Note 3 : 13. Donner trois solutions distinctes en utilisant les boucles : POUR. TANT QUE et REPETER..5 Moyenne de ces 4 notes : 12.. Au moment venu on affichera "Bravo vous avez gagné !!". après un passage à la ligne. Exercice 9 Le "jeu du nombre mystérieux" consiste à jouer contre l'ordinateur comme suit : L'ordinateur choisit. au hasard. pour les entiers de 1 à 10. Si le nombre d'essais est atteint sans trouver le nombre mystérieux. Exercice 3 Ecrire un programme Pascal qui calcule et affiche la somme et le produit. |6 . Sachant que (pour N>0) : N ! = N x (N-1) x (N-2) x .5 Note 4 : 8. Exercice 5 Ecrire un programme Pascal qui affiche la table de Pythagore (table de multiplication) pour les 9 premiers nombres entiers. suivie du nombre à trouver. Exercice 4 Considérons la suite définie par la relation : Un+1 = Un + 3 et U1 = 2 On veut calculer la somme de 100 premiers termes de cette suite.31 Exercice 8 Ecrire un programme Pascal faisant calculer et afficher le factoriel d’un entier naturel N donné. Exercice 6 Ecrire cinq programmes Pascal permettant d’afficher les triangles d’étoiles suivants : Exemple : (pour nL=5) * ********* * ***** ***** * *** ******* ** **** **** ** ***** ***** *** *** *** *** ******* *** **** ** ** **** ********* * ***** * * ***** Ecrire deux programmes Pascal permettant d’afficher les pyramides de nombres suivants : Exemple : (pour nL=6) 1 1 232 121 34543 12321 4567654 1234321 567898765 123454321 67890109876 12345654321 Exercice 7 Ecrire un programme Pascal qui permet de calculer et afficher la moyenne de notes fournies au clavier avec un "dialogue" se présentant ainsi : Combien de notes : 4 Note 1 : 12 Note 2 : 15. Exercice 2 Ecrire un programme Pascal qui affiche la table de multiplication par 3. puis à l'envers. un entier entre 1 et 100 et on doit le trouver en 7 essais au maximum grâce aux indices "C'est grand" et "C'est petit".

Les nombres sont des entiers naturels inférieurs ou égaux à 15.. Exemple : 153 est cubique car 153 = 13 + 53 + 33 Ecrire un programme Pascal NBR_CUBE qui cherche et affiche tous les entiers cubiques de trois chiffres. un entier naturel impair donné. Exercice 12 On se propose d'afficher un histogramme à l'aide des lettres A.Exercice 10 Ecrire un programme Pascal qui permet de saisir un entier n... Exercice 14 Un entier naturel de trois chiffres est dit cubique s'il est égal à la somme des cubes de ses trois chiffres. proposer un programme Pascal qui fait calculer Xn. qui répond à cette question en simulant 100 lancers successifs.1/6 ... 8. 3 et 6 seront affichés. Exemple : pour n = 2376 alors les chiffres 2.. + 1/n Avec n.... Exercice 11 Ecrire un programme Pascal SOM_15... +1/n • S2 = 1 + 1/3 + 1/5 + . Exercice 18 Un nombre réel X et un nombre entier N étant donné.. qui permet de déterminer la somme des chiffres d'un nombre entier donné (exemple : pour N= 25418.1/4 . on aura 2+5+4+1+8 = 20).. Exercice 15 Ecrire un programme Pascal SOMME. • S3 = -1/2 . qui détermine toutes les manières possibles d'obtenir un total de 15 en ajoutant trois entiers choisis entre 1 et 9. Etudier tous les cas possibles (N positive ou négative).. déterminer et d'afficher tous ses chiffres qui le divisent.. qui calcule et affiche les sommes suivantes : • S1 = 1 + 1/2 + 1/3 + 1/4 + . Exemple d'exécution : Entrer trois nombres entiers compris entre 0 et 15 : 5.. Exercice 17 Si nous lançons 3 dés. 3 B B B A B A B A B C A B C A B C Exercice 13 Ecrire un programme Pascal SOM_CHIFFRES. .... Quelle est la probabilité d'avoir un total de 12 ? Ecrire un programme Pascal PROBABILITE. Ecrire un programme Pascal qui saisit le nombre de A. le nombre de B et le nombre de C puis affiche l'histogramme correspondant. le total des points est compris entre 3 et 18.... B et C comme celui de l'exemple ci-dessous... |7 ..1/(n-1) Exercice 16 On donne un entier naturel n strictement positif et on définit la suite de Syracuse par : ⎧S 0 = n ⎪ Si S k −1 est pair ⎨S k = S k −1div 2 ⎪S = 3S + 1 Si S k −1 est impair ⎩ k k −1 Ecrire un programme Pascal qui fait afficher les 50 premiers termes de cette suite.

Choisir la somme qui fait intervenir le minimum de termes. 2 1 3 3 5 5 7 7 9 Ecrire un programme Pascal qui utilise la formule ci-dessus pour déterminer et afficher une valeur approchée de Π à 10-8 prés. B) = PGCD (a-b. Ecrire un programme Pascal qui fait calculer et afficher la suite : S = 1 + 1 + 1 + .Exercice 19 Ecrire un programme Pascal qui saisit deux entiers X et Y. Exercice 27 Un entier supérieur à 1 est dit premier s'il n'est divisible que par 1 et par lui-même. |8 . Exercice 25 On se propose de déterminer le PPCM (Plus Petit Commun Multiple) de deux entiers positifs non nuls A et B. B) = A sinon PGCD (A.). et fait calculer l’expression S=X*Y par additions successives (X*Y=X+X+X+.6) = PGCD (4. A mod B) Exemple : PGCD (32. Exercice 23 On se propose de déterminer le PGCD (Plus Grand Commun Diviseur) de deux entiers positifs non nuls A et B en utilisant l'algorithme d'Euclide qui repose sur le principe suivant : Si B=0 alors PGCD (A. Ecrire un programme Pascal qui cherche et affiche tous les nombres premiers ≤ à 400.. Ecrire un programme Pascal qui fait sortir tous ces entiers. 8) = PGCD (8.16) = PGCD (10. 0) = 4. Exercice 22 On se propose de déterminer une valeur approchée de Π par la méthode de Wallis. Exercice 28 Un nombre entier naturel est dit parfait s'il est égal à la somme de ses diviseurs sauf lui- même... Exercice 26 Les nombres de Fibonacci sont donnés par la récurrence : Fn = Fn-2 + Fn-1 avec F0 = 1 et F1 = 1.2) = PGCD (2.2) = 2... b)= a (ou b) Sinon PGCD (A. B) = PGCD (B. 12) = PGCD (12.... Exercice 20 Pour un entier naturel N donné..6) = PGCD (4. b) si a>b Sinon PGCD (a. définie par la formule suivante : π 2 2 4 4 6 6 8 8 = x x x x x x x x . b) = PGCD (a. Ecrire un programme Pascal qui affiche les 20 premiers nombres de Fibonacci. 4) = PGCD (4. Ecrire un programme Pascal permettant de déterminer et d'afficher tous les nombres parfaits compris entre a et b (2<a<b). Exercice 24 On se propose de déterminer le PGCD (Plus Grand Commun Diviseur) de deux entiers positifs non nuls A et B en utilisant la méthode de la différence qui repose sur le principe suivant : Si A=B alors PGCD (a. b-a) Exemple : PGCD (10. où a est différent de b et c est différent de d. + 1 0! 1! 2! n! Exercice 21 On remarque que : 12 x 42 = 21 x 24 12 x 63 = 21 x 36 12 x 84 = 21 x 48 Il y a 14 produits qui vérifient la propriété : (10 a + b) (10 c + d) = (10 b + a) (10 d + c).

2π]. La dernière somme calculée est une valeur approchée de sin(x). …. Exercice 31 x x3 x5 x7 x9 Sachant que s in ( x ) = − + − + − .. Exemple : Si n = 60 alors on affiche 60 = 2*2*3*5. Exemple : L'entier de 3 chiffres. ….Exercice 29 Deux entiers m et n sont dis amis si et seulement si la somme des diviseurs de m sauf lui- même est égale à n et la somme des diviseurs de n sauf lui-même est égale à m. + 2 3 4 nn Ecrire un programme Pascal intitulé SOMME permettant de calculer et d'afficher la somme Sn pour un entier n positif donné en utilisant la formule ci-dessus. de gauche à droite. Exercice 34 Ecrire un programme Pascal intitulé COMBINAISON. X et Epsilon sont des données. 1! 2! 3! n! xn Le calcul s’arrête lorsque ≤ epsilon ..... Exercice 36 Ecrire un programme Pascal qui affiche tous les entiers positifs impairs inférieurs à 100. Exercice 30 Ecrire un programme Pascal permettant de décomposer un entier N donné (2 ≤ N ≤ 100) en produit de facteurs premiers et d'afficher N et le produit de ses facteurs trouvés. …. qui lit deux entiers naturels n et p avec (0<p<n). |9 ..... Ecrire un programme Pascal permettant de déterminer et d'afficher tous les nombres amis compris entre 1 et 1000.... L'affichage doit être sur 5 colonnes comme l'aspect suivant : 1 3 5 9 11 13 17 19 23 25 27 29 31 33 37 …. en omettant les nombres divisibles par 7. n! Exercice 33 Soit la somme Sn suivante : 3 5 7 2n − 1 Sn = 1 + 2 + 3 + 4 + . tel que x ∈ [0. Exercice 32 Ecrire un programme Pascal qui donne une approximation de : x x2 x3 xn e  1+ x + + + . 1! 3 ! 5! 7! 9! Ecrire un programme Pascal qui permet d'afficher sin(x) en utilisant la formule ci-dessus... …... + à epsilon près. 147 est bien ordonné car 1<4<7 L'entier de 4 chiffres. puis calcule et affiche le nombre de combinaisons de p objets parmi n.. 1265 n'est pas bien ordonné car 6>5 Ecrire un programme Pascal qui saisit un entier n (1<n<9) et fait sortir tous les entiers bien ordonnés de n chiffres et le nombre total de ces entiers. Le calcul s'arrête quand la différence entre deux termes consécutifs devient ≤ à 10-4. n! On rappelle que : C np = p ! ( n − p )! Exercice 35 Un entier de n chiffres (1<n<9) est dit bien ordonné si ses chiffres forment. une suite strictement croissante.

On demande d'écrire un programme REINE permettant de lire les coordonnées (x. y) définissant la position de la reine. Exemple d’exécution : Entrer un entier : 45 Les sommes consécutives sont : 45 = 1+2+3+4+5+6+7+8+9 45 = 5+6+7+8+9+10 45 = 7+8+9+10+11 45 = 14+15+16 45 = 22+23 Exercice 38 Considérons un échiquier classique de 64 cases disposées en un carré de 8 lignes composées de 8 cases.Exercice 37 On se propose d’écrire un programme Pascal qui permet de déterminer et d’afficher toutes les représentations sous forme de sommes d’entiers consécutifs d’un entier n donné. Exemple : Pour x=2 et y=5 on aura l'affichage : * * * * * * * R * * * * * * * * * * * * * * * * | 10 . d'afficher la lettre R à la position correspondante et une * (astérisque) à chacune case accessible.

Ensuite il fait afficher. Exercice 9 Soit T un tableau contenant N entiers (10≤N≤50). Exercice 4 Ecrire un programme Pascal qui permet de convertir un entier naturel en son équivalent binaire (conversion de la base10 à la base2). On propose d'écrire un programme Pascal qui permet de déterminer et d'afficher la valeur maximale et la valeur minimale de T. le produit et la moyenne arithmétique des éléments de T. les éléments de T. Exercice 10 On se propose d'écrire un programme Pascal qui permet de saisir un entier n >1 et pair. Exemple : T R 2 -3 15 6 -9 -1 0 2 15 6 0 -3 -9 -1 | 11 . On propose d'écrire un programme Pascal qui permet d'inverser les éléments de T (permuter T[1] et T[n]. • Compter la fréquence d'apparition (le nombre d'occurrence) de chaque lettre majuscule dans le tableau LET et ranger les résultats statistiques dans un tableau FE. Exemple : pour n = 10 4 4 0 0 -5 -5 8 8 3 3 4 0 -5 8 3 3 8 -5 0 4 Etat initial de T Etat final de T Exercice 11 Soit un tableau de 20 entiers. On propose d'écrire un programme Pascal qui permet d'éclater T en deux tableaux : TN (contenant les éléments négatifs de T) et TP (contenant les éléments positifs de T). qui fait remplir un tableau T par n lettres (2<n≤20). Exercice 8 Soit T un tableau contenant N entiers (10≤N≤50). sans redondance. Exercice 2 Ecrire un programme Pascal. Exercice 5 Ecrire un programme Pascal qui permet de convertir un nombre écrit dans une base b1 en son équivalent dans une base b2. sans modifier l'ordre de saisie des valeurs paires et impaires. il fait calculer et afficher la somme. Exercice 7 Soit T un tableau contenant N entiers (10≤N≤50). puis T[2] et T[n-1]. Enfin transformer T en un tableau symétrique. On propose d'écrire un programme Pascal qui permet de regrouper les éléments pairs au début et les éléments impairs à la fin de T.…). Ensuite remplir un tableau T par n entiers égaux deux par deux. On se propose de ranger les éléments de T dans un tableau R de façon à mettre les éléments positifs ou nuls de T au début de R suivis des éléments négatifs. qui fait remplir un tableau T par n (5<n<=10) entiers compris entre 1 et 20. LES TABLEAUX Exercice 1 Ecrire un programme Pascal. On utilisera la fonction prédéfinie Random. Exercice 3 Ecrire un programme Pascal qui fait réaliser les tâches suivantes : • Remplir un tableau LET de 35 cases par des lettres majuscules au hasard. Ensuite. Exercice 6 Soit T un tableau contenant N entiers (10≤N≤50).

Exercice 19 Transposition d’une Matrice carrée Une Matrice carrée est une matrice à n lignes et n colonnes. Ecrire un programme Pascal qui permet de trouver et d'afficher tous les entiers ROND de l'intervalle [1. dans la liste de valeurs de T.c] = T[l-1. 10 7 9 0 0 6 0 4 8 0 On regroupe les éléments restant au début du tableau T. Exemple : 1 2 3 1 4 7 La Matrice 4 5 6 Devient 2 5 8 7 8 9 3 6 9 Ecrire un programme Pascal qui permet de saisir une Matrice carrée puis il cherche et affiche son transposée. On propose d'écrire un programme Pascal qui permet de chercher l'existence d'un élément V donné.1000]. 10 7 9 6 4 8 0 0 0 0 Ecrire un programme Pascal qui fait le traitement ci-dessus pour un tableau T de n (2 ≤n≤20) entiers positifs non nuls. • Les autres éléments sont obtenus au moyen de la relation : T[l. Le programme doit faire remplir par la suite un tableau fréquence F par le nombre de fois que chaque face est obtenue. 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. Exercice 16 On dispose d’un tableau de N_MAX éléments rempli par N caractères (N<N_MAX). Exercice 17 Le triangle de Pascal est obtenu en considérant que pour une ligne donnée : • Le premier élément et le dernier élément sont égaux à 1. Exercice 14 Ecrire un programme Pascal qui fait remplir un tableau T par les résultats de 20 lancements d'un dé. Exercice 20 On se propose d'utiliser l'algorithme de tri par sélection pour trier un tableau de 20 chaînes de caractères.Exercice 12 Soit T un tableau contenant N entiers (10≤N≤50).c-1] Ecrire un programme Pascal permettant de générer et afficher le triangle de pascal de taille n. Exemple : 9 est représenté en binaire par 1001 donc 9 est un nombre ROND. On propose d'écrire un programme Pascal qui permet de déterminer et d'afficher le rang de chaque élève. Exemple d'exécution : Taille du triangle : 5 1 Le triangle correspondant est : 1 1 1 2 1 1 3 3 1 1 4 6 4 1 Exercice 18 Un entier naturel est dit nombre ROND si son écriture binaire contient autant de 1 que de 0. Ecrire un programme Pascal permettant d’insérer un caractère C donné à la k_ème position (avec K<=N).c] + T[l-1. Exercice 15 On dispose d'un tableau MOY qui contient la liste des moyennes de N élèves. Exercice 13 Soit le tableau T suivant : 10 7 9 7 10 6 7 4 8 8 Pour chaque élément de T on ne garde que sa première occurrence et on remplace les autres par 0. | 12 .

l'ordre alphabétique des chaînes intervient. On se propose d'écrire un programme Pascal. Exercice 23 On se propose d'écrire un programme Pascal permettant : 1. De saisir les éléments d'un tableau T composé de n chaînes de caractères non vides. puis de droite à gauche. Ainsi. Exemple : Ali Salah Sonia Tounsi Salma Ahmed B N B N N B Sont réarrangés comme suit : Ahmed Ali Sonia Salah Salma Tounsi B B B N N N Exercice 26 Ecrire un programme Pascal. qui range les éléments de l'intersection des deux tableaux dans un tableau INTER puis affiche les trois tableaux T1. Ecrire un programme Pascal qui permet de réarranger les éléments de T et C de manière à ce que les éléments de couleur 'B' précèdent les éléments de couleur 'N'. Si deux éléments ont des couleurs identiques. Sachant que la moyenne = (note1+2*note2)/3. Elle consiste à parcourir le tableau de gauche à droite. De trier le tableau T dans un ordre croissant selon les deux critères suivants : • Longueur de la chaîne en premier lieu. Le professeur d'arabe Mr Najib veut utiliser l'ordinateur pour faire la moyenne trimestrielle et le rang de ses élèves. T2 et INTER. On se propose d'écrire un programme Pascal permettant de saisir n entiers (10<n<20) dans un tableau T et de le trier en utilisant le principe mentionné ci-dessus. les plus petits éléments du tableau descendant au même rythme que remontent les plus grands éléments.Exercice 21 Une classe est composée de 30 élèves. Exemple : V1 1 3 2 -6 V2 0 4 -5 V3 -6 -5 0 1 2 3 4 Exercice 27 Ecrire un programme Pascal permettant de faire une étude comparative du temps d'exécution de algorithmes de tri (sélection. Exercice 24 Une version de tri à bulles est le tri bidirectionnel. Mr Najib veut afficher les résultats sous forme d'un tableau comportant : Nom Prénom Note 1 Note2 Moyens Rangs ………… ………… ………… ………… ………… ………… ………… ………… ………… ………… ………… ………… Exercice 22 Soient deux tableaux T1 et T2 contenant chacun n éléments distincts deux à deux (2<n<100). On appelle intersection de T1 et T2 l'ensemble des éléments communs à ces deux tableaux. bulles et insertion) | 13 . le changement de direction ayant lieu chaque fois que l'une des extrémités est atteinte. 2. qui permet de créer un tableau V3 d'entiers croissants à partir de deux tableaux V1 et V2 d'entiers. Exercice 25 Nous disposons de deux tableaux T de n noms et C de n couleurs ('B' ou 'N'). • Ordre alphabétique en cas d'égalité pour les longueurs.

une procédure qui permet de construire à partir d'un tableau T de n entiers un tableau Rang tel que Rang[i] soit l'indice dans T du ieme élément dans l'ordre croissant sans modifier le tableau T. 5). de rechercher dans le tableau la plus longue suite de caractères identiques et d'afficher le caractère concerné ainsi que le nombre de fois qu'il est répété. | 14 . Exemple : Si on introduit (a a b c c e d e e e e e f f g a a a).Exercice 28 Ecrire. Le programme doit afficher (e. Exemple : T 80 50 90 35 20 1 2 3 4 5 Rang 5 4 2 1 3 Exercice 29 Ecrire un programme Pascal qui permet de remplir un tableau T par n caractères. en s'inspirant du tri par sélection.

Exercice 4 Ecrire un programme Pascal qui convertit une chaîne de caractères. Sur combien d'octets est codée S ? Où est stockée la longueur courante de S ? Quelles sont les 2 façons pour connaître la longueur courante de S ? Exercice 2 Un palindrome est un mot. on veut aérer une chaîne de caractères en insérant un espace entre les caractères de cette chaîne. Exercice 10 Ecrire un programme Pascal permettant de lire deux mots ch1 et ch2 et d’afficher tous les caractères qui apparaissent dans les deux chaînes sans redondance. Soit S une variable du type chain. si la chaîne saisie est "TUNIS". en minuscule puis en majuscule. Exemple : si ch = 'Turbo PAScal' Æ 'turbo pascal' Æ 'TURBO PASCAL' Exercice 5 Ecrire trois programmes Pascal qui permettent de saisir une chaîne de caractères en majuscule et l'affiche sous les formes suivantes : Par exemple. Exercice 3 Ecrire un programme Pascal qui permet d'inverser une chaîne de caractères (chaîne miroir). Ecrire un programme Pascal qui vérifie si une chaîne de caractères est palindrome ou non. LES CHAINES DE CARACTERES Exercice 1 Question de cours : On introduit le type suivant : Type chain = String [63] . par exemple kayak et radar. Par exemple : 'RESOLUTION DE PROBLEMES' devient 'PROBLEMES DE RESOLUTION' Exercice 8 On veut écrire un programme Pascal permettant de : • Saisir une chaîne de caractères CH • Parcourir la chaîne CH et afficher l'occurrence de chacun de ses caractères. puis déterminer et afficher le nombre d'occurrence d'un mot donné. on aura : T TS TT TU TUIS UTTU TUN TUNNIS NUTTUN TUNI TUNIUNIS INUTTUNI TUNIS TUNISTUNIS SINUTTUNIS Exercice 6 On veut écrire un programme Pascal permettant de supprimer les espaces superflus dans une chaîne de caractères. Exemple : si la chaîne est : '99Travaux999pratique999999pascal999' Alors l'exécution du programme donnera la chaîne = 'Travaux9pratique9pascal' Exercice 7 Ecrire un programme Pascal qui saisit une phrase et l'affiche renversée. lisible dans les deux sens. Exemple : soit ch1 = "Coccinelle" et ch2 = "Cible" Résultat : "Cile" Exercice 11 Pour réaliser un bel affichage. Exercice 9 Ecrire un programme Pascal permettant de lire un texte de longueur > à 20. ou une phrase. Par exemple : DEVOIR devient D9E9V9O9I9R | 15 . dans ce texte.

Ce mot sera caché sous des tirets. | 16 . Exercice 15 Le Jeu du PENDU consiste à : Un joueur donne un mot en majuscule. L'autre joueur devra alors deviner ce mot de la manière suivante : Il propose chaque fois une lettre. de remplir puis d'afficher les éléments du tableau Q. soit 312211 Soit la suite : 1 11 21 1211 111221 312211 13112221 1113213211 31131211131221 13211311123113112211 Ecrire un programme Pascal. écrire un programme Pascal qui copie N caractères d'une chaîne ch1 à partir d'une position p. lus de gauche à droite.9) et non vides. Exercice 13 Sans utiliser la fonction prédéfinie POS. On se propose de remplir un tableau Q de la façon suivante : Q[i] contiendra la chaîne de caractères P[i] écrite à l'envers. deux "2". Si cette lettre existe dans le mot caché alors le tiret sera remplacé par la lettre proposée chaque fois où se trouve cette lettre précédemment sinon "Echec" sera affiché jusqu'à ce que le nombre d'essais sera égal à la longueur du mot caché ou le mot sera deviné. qui affiche les n lignes de cette suite.. Exercice 14 Sans utiliser la fonction prédéfinie COPY. Exercice 17 Ecrire un programme Pascal qui permet de convertir un nombre écrit dans une base b1 en son équivalent dans une base b2. un "1". chine sont des anagrammes du mot niche). Exemple : soit le nombre : 111221 Le nombre suivant sera ainsi : trois "1". Ecrire un programme Pascal qui permet de saisir deux mots non vides MOT1 et MOT2 puis de déterminer si MOT2 est une anagramme de MOT1. conformément à l’exemple : BONJOUR Â B-----R. Exemple : Si P[2] = "9025" alors Q[2] contiendra la chaîne "5209" Ecrire un programme Pascal permettant de saisir les éléments de P. Exercice 16 Soit un tableau P de n (1<n<100) chaîne de caractères. Tous les éléments de T doivent être constitués uniquement de chiffres (0. Exercice 18 Une suite mystérieuse La suite correspond à l'énumération orale des chiffres successifs. écrire un programme Pascal qui détermine la première position d'une chaîne ch1 dans une autre ch2. en regroupant les chiffres identiques consécutifs.Exercice 12 Une anagramme est un mot obtenu par transposition des lettres d’un autre mot (par exemple chien.

Exercice 19 Ecrire un programme pascal qui permet de saisir une chaîne non vide CH de longueur impaire et de l’afficher sous la forme d’un sablier. Exemple : Si Ch=″SABLIER″ Le programme affichera SABLIER ABLIE BLI L BLI ABLIE SABLIER | 17 .

Exercice 8: Écrire un programme en Pascal permettant de : • Saisir et enregistrer des noms des villes dans un fichier dont le nom physique est "c:\villes. la somme. grade et salaire).dat" • Afficher toutes les villes commençant par la lettre "A" • Pour chaque lettre. puis affiche le caractère du milieu. | 18 . afficher la liste des villes dont le nom commence par cette lettre. nom.bd) + (ad + bc) i (a + b i) / (c + d i) = (a c + bd) / (c2 + d2) + (bc -ad) i / (c2 + d2) Exercice 3: Écrire un algorithme. Exercice 7: Ecrire un programme Pascal qui permet de : • Créer un 1er fichier texte f3ligne et saisir 3 lignes • Créer un 2ème fichier texte f1ligne et saisir une ligne • Créer un 3ème fichier texte f4ligne et générer son contenu de 4 lignes par recopie du fichier1 et du fichier2. prénom et âge. relatives à 10 personnes et qui les affiche d’une façon ordonnée suivant le nom. puis un programme Pascal qui permet : • De créer un tableau Emp qui contiendra les informations sur les 50 employés d’une entreprise : • Matricule (un entier) • Nom (chaîne de caractères) • Salaire (un réel) • Etat_Civil (M ou C) • D'afficher le nombre d’employés mariés dont le salaire est ≥ 800 Dinars. ENREGISTREMENTS ET FICHIERS Exercice 1: Écrire une analyse. puis un programme Pascal qui lit au clavier les informations : nom. Exercice 4: Écrire un algorithme. un algorithme et un programme Pascal qui demande à l’utilisateur les coordonnées de deux points distincts du plan et qui affiche le coordonnées du point milieu. Exercice 5: Ecrire un programme Pascal qui permet de saisir un fichier séquentiel des caractères (contenant 26 lettres alphabétique). le produit et la division de deux nombres complexes C1 (a + b i) et C2 (c + d i) tout en utilisant les formules suivantes : (a + b i) + (c + d i) = (a + c) + (b + d) i (a + b i) * (c + d i) = (a c . Exercice 9: Ecrire un programme Pascal qui supprime un composant d’un fichier de données. Exercice 2: Écrire un algorithme. au moyen de type enregistrement. Exercice 6: Ecrire un programme Pascal permettant de : • Créer et remplir un fichier "FP" qui contient les informations sur le personnel d’une entreprise (matricule. • Afficher la liste des employés de cette entreprise dont le salaire est compris entre 500D et 800D. puis un programme Pascal qui permet de calculer et d’afficher. • Rechercher un employé dans le fichier "FP" en connaissant son matricule.

dans un deuxième fichier texte intitulé tauto. qui ne sera pas enregistrée dans le fichier. Exemple : Le lion lape le lait lentement On se propose de sauvegarder toutes les lignes tautogrammes de ce fichier texte. Exercice 14: Le contenu de plusieurs pages de texte est enregistré dans un fichier nommé "PAGES.TXT". On se propose de fusionner les contenus des deux fichiers f1 et f2 dans un troisième fichier f3 pour obtenir une liste triée par ordre croissant. Ces fichiers sont triés dans l’ordre croissant.txt. à partir d'un fichier de texte nommé 'c:\modele. Un tautogramme est un texte dont tous les mots commencent par la même lettre (sans distinction entre majuscule et minuscule). puis recopie à partir du fichier. Exercice 12: On dispose d'un fichier texte. l'occurrence et le pourcentage de présence de chaque une de ces lettres.txt'. N.dat".txt'. • Déterminer le nombre de voyelles de chaque ligne.txt'. Ce fichier est déjà trié en ordre croissant. Exercice 17: Fusion de deux fichiers On dispose de 2 fichiers f1 et f2 qui contiennent chacun des chaînes de caractères. Exercice 11: Ecrire un programme en pascal qui permet lors de son exécution d'afficher lui-même (le programme source).Exercice 10: Nous disposons d'un fichier d'entiers enregistré sous le nom physique "Valeurs. les lignes d’ordre impair dans un 2ème fichier et les lignes d’ordre pair dans un 3ème fichier. Ecrire l'algorithme d'une procédure nommée INSERTION réalisant cette tâche. On désire connaître le nombre total de lettres de ce fichier. Exercice 13: Écrire un programme en Pascal permettant de : • Saisir un ensemble des lignes d’un texte qui se termine par un point.B.txt. • Déterminer le nombre des mots par ligne. N. Ecrire les analyses et les algorithmes d'un programme modulaire permettant l'affichage du contenu du fichier 'c:\binaire.: On termine la saisie des lignes de texte par une ligne vide. convertir chaque code trouvé en son équivalent binaire et le sauvegarder dans un fichier texte nommé 'c:\binaire. Exercice 15: Nous désirons. Exercice 16: On se propose d’écrire un programme qui saisit un fichier texte. lire son contenu et déterminer le code ASCII de chacun de ses caractères. intitulé source.B: L'insertion doit se faire directement dans le fichier et non pas à travers un transfert dans un tableau ou dans un autre fichier. Exemple : F1 F2 F3 des bien bien exemples choisir choisir fait germer des la exemples solution fait germer la solution | 19 . Nous désirons insérer dans ce fichier et sa bonne place une nouvelle valeur V donnée.

pour ajouter les données relatives à un nouvel adhérent.Créer un nouveau fichier .Afficher les informations relatives à un patient donné 5.Chercher un film . La longueur d’une ligne de ce fichier ne dépasse pas 60 caractères. • La valeur "M". pour supprimer un adhérent dont on saisit le numéro de la carte.Supprimer un film | 20 .Ouvrir un fichier existant .Modifier les informations relatives à un patient existant 3. un deuxième fichier de données nommé « d:\club\adherent. Pour trier le fichier. On se propose de : A) Créer à partir de ce fichier. mois. • La valeur "Q" pour quitter l'application.Sortir .Attribuer un RDV pour un patient donné 4. L'ajout se fera à la fin du fichier.Afficher la liste des patients ayant un RDV à une date donnée 7. le nombre d’heures de sport. Un patient est caractérisé par : • Un numéro de dossier • Un nom_prénom • Une date de naissance (jour.Afficher la liste des patients 6.txt et enregistré dans le dossier « d:\club ».Ajouter un film .Quitter l'application. la date de naissance.dat » où chaque enregistrement correspond à un adhérent et a la structure suivante : • Le N° de la carte : un entier • Le nom : une chaîne de 40 caractères • La date de naissance : une chaîne de 10 caractères • Le nombres d’heures de sport : un entier B) Informatiser la gestion des adhérents au club. Ecrire un programme permettant les actions offertes par les menus suivants: Menu Fichiers Menu Edition Menu Quitter . • La valeur "S". les données seront recopiées dans le fichier d'origine. année) • Une date du prochain RDV (jour.Modifier un film .Fermer un fichier . le responsable d'une vidéo club décide d'informatiser sa vidéothèque par la création d'un fichier faisant objet d'une base de donnée de ses films. le nom. année) Exercice 21: Pour mieux gérer et organiser ses films.Ajouter un nouveau patient 2. pour modifier les données relatives à un adhérent dont on saisit le numéro de la carte. mois. Exercice 19: Les informations concernant les adhérents à un club de sport sont enregistrées dans un fichier texte nommé adherent. • La valeur "T".Supprimer un fichier . par la création d’une application offrant un menu qui permet les actions ci-dessous selon la valeur d’une lettre saisie : • La valeur "A". On se propose de l'aider à travers un programme Pascal permettant d'effectuer les tâches suivantes : 1. on copiera les données nécessaires dans la mémoire centrale. Chaque ligne de ce fichier concerne un adhérent et comporte 4 informations séparées par des virgules à savoir : Le N° de la carte d’adhérent.Exercice 18: Ecrire un programme qui permet de tester si deux fichiers d’entiers sauvegardés sur disque dur sont égaux ou non. Exercice 20: Un médecin veut informatiser la gestion de son cabinet. Une fois triées. pour trier le fichier dans l'ordre alphabétique croissant des noms des adhérents.

La saisie s’arrête selon le choix de l’utilisateur en répondant à la question « voulez-vous continuer ? O/N ». Attention au deux cas (NE <0 !!) et (NE ≥ taille de fichier !!). Ecrivez les analyses et les algorithmes des différents modules d’un programme qui permet de :  Remplir un fichier intitulé « data. Ecrivez un programme modulaire nommé GESTION qui permet :  Remplir un fichier intitulé « info.  Afficher à l’écran l’enregistrement numéro NUM.  Afficher à l’écran les noms et les prénoms des personnes résidant dans une ville donnée. | 21 . Numéro fiscal (entier) .  L’affichage de toutes les fiches (sur l’écran) une par une avec une attente jusqu’à l’appui de la touche entrée. Date de naissance (jj / mm / aaaa) . Exercice 23 Une société veut informatiser la gestion de ses employés. Ecrivez un programme modulaire nommé STATISTIQUES qui permet de :  Remplir un fichier intitulé « institut. Les informations relatives à un employé sont représentées par la structure FICHE suivante : Nom_prénom (30 caractères) .dat » sous la racine C:/ par des étudiants.  Afficher à l’écran le nombre d’enregistrements. Téléphone (10 caractères) . G2. code postal (entier non signé)) . le prénom et le numéro fiscal de la personne ayant ce numéro de téléphone. Le grade (uniquement G1. Attention au cas échéant lorsque (NUM <0 !!) ou lorsque (NUM≥ taille de fichier !!). Où NUM est un entier saisit au clavier représentant le numéro d’ordre de l’enregistrement dans le fichier. Numéro de carte d’étudiant NCE : entier non signé . Exercice 24 La structure d’un étudiant est : Nom.  La saisie d’un grade et l’affichage de nombre d’employés ayant ce grade ainsi que leur pourcentage par rapport au nombre total des employés. Si ce NCE n’existe pas dans le fichier alors le programme doit afficher un message indiquant que cet étudiant n’existe pas.dat » sous la racine C:/ par des personnes. Assurance de maladie (lettre O pour oui et la lettre N pour non) .  L’affichage de nombre des employés qui possèdent une assurance de maladie et leur pourcentage par rapport au nombre total des employés.  Saisir le nom d’une ville puis calculer et afficher le nombre des personnes résidant dans cette ville. prénom (chaîne) . Admission :(O pour oui et N pour non) . Où NE est un entier saisit au clavier représentant le numéro d’ordre de l’enregistrement que l’on veut le supprimer.  Saisir un numéro de téléphone TEL puis chercher et afficher le nom.  Calculer et afficher le nombre des étudiants appartenant à un niveau NIV donné et qui ont réussit. Adresse (rue (entier) . Prénom : chaîne . G3 ou G4).  L’affichage des noms et prénoms et les grades des employés qui n’ont pas d’assurance de maladie.Exercice 22 Les informations relatives à une personne sont : Nom.  Supprimer l’enregistrement numéro NE. ville (chaîne) .dat » sous la racine C:/ par des Fiches. Niveau : (5 caractères) . La saisie s’arrête selon le choix de l’utilisateur en répondant à la question « voulez-vous continuer ? O/N ». Code fiscal (entier non signé). La saisie s’arrête selon le choix de l’utilisateur en répondant à la question « voulez-vous continuer ? O/N ».  Calculer et afficher le nombre des étudiants qui ont réussit et leur pourcentages par rapport au nombre total des étudiants.  Recopier ce fichier dans l’emplacement « C:/Bac201N/ ».  Saisir le NCE d’un étudiant et afficher son résultat d’admission.

Exercice 25
Les caractéristiques d’une voiture sont :
Marque (10 caractères) ;
Couleur (10 caractères) ;
Matricule (20 caractères) ;
Nombre de chevaux ;
Ecrivez un programme modulaire qui permet de :
 Remplir un fichier intitulé « véhicules.dat » sous C:/Bac201N par des voitures. La saisie s’arrête
selon le choix de l’utilisateur en répondant à la question « voulez-vous continuer ? O/N ».
 Chercher puis afficher les marques des voitures possédant 5 chevaux.
 Afficher les matricules des voitures une couleur saisie au clavier.
 Saisir une voiture V et vérifier si elle existe dans le fichier ou non en se basant sur sa matricule.
 Effacer le fichier totalement du disque.

Exercice 26
Les informations relatives à une élève sont les suivantes :
Nom (15 caractères) ;
Prénom (15 caractères) ;
Sexe ("garçon" ou "fille");
Moyenne générale ;
Date de naissance ;
Ecrivez un programme modulaire qui permet de :
 Remplir un fichier intitulé « classe.dat » sous C:/Bac201N par des élèves. La saisie s’arrête selon le
choix de l’utilisateur en répondant à la question « voulez-vous continuer ? O/N ».
 Calculer et afficher la moyenne arithmétique de cette classe.
 Afficher le nombre des garçons et le nombre des filles de cette classe.
 Dégager le nom et le prénom du meilleur élève de cette classe.
 Transférer les moyennes des élèves dans un tableau T. (on supposera que le nombre
d’enregistrements dans le fichier est inférieur à 100).
Supprimer tous les enregistrements qui suit l’enregistrement d’ordre NUM (on va tronquer le fichier).
Où NUM est un entier saisit au clavier. Attention au cas échéant lorsque (NUM <0 !!) ou lorsque (NUM>
taille de fichier !!).

Exercice 27
Dans une clinique, la fiche d’un patient contient les informations suivantes :
Nom de patient (15 caractères) ;
Prénom de patient (15 caractères) ;
Numéro de carte d’identité ;
Numéro de la salle ou il est logé.
Médecin de patient (nom, prénom, spécialité) ;
Date de consultation (15 caractères) ;
Ecrivez un programme modulaire qui permet de :
 Remplir un fichier intitulé « clinique .dat » sous C:/Bac201N par des patients. La saisie s’arrête
selon le choix de l’utilisateur en répondant à la question « voulez-vous continuer ? O/N ».
 Afficher les noms et les prénoms des patients du médecin « xxxx » « yyyy ». .
 Modifier le numéro de salle des patients qui sont consulté le "02/10/2007" avec le numéro S saisit au
clavier.
 Chercher et d’afficher les noms et les prénoms des patients qui ont été consultés à une date T
donnée.
 Saisir un patient P et vérifier s’il existe dans ce clinique ou non en se basant sur sa carte d’identité.

Exercice 28
Un hôtel est caractérisé par :
Nom de l’hôtel ;
Classe ("*", "**", "***", "****", "*****") ;
Ville (15 caractères) ;
Directeur de l’hôtel (nom, prénom, téléphone) ;
Ecrivez un programme modulaire qui permet de :
 Ecrire un module qui permet de remplir un tableau T par N hôtels (4 ≤ N ≤ 100).
Transférer les éléments de tableau T dans un fichier intitulé « stat.dat » sous la racine C:/ Bac201N.
 Afficher les noms d’hôtels et leurs classes d’une ville V saisie au clavier.
 Compter le nombre des villes contenant des hôtels.
| 22
 Dégager à partir du tableau T les noms d’hôtels de la ville "sousse" ayant comme classe "*****".

Exercice 29
Une bibliothèque emprunte des livres aux élèves. Un livre emprunté est caractérisé par :
Identifiant (5 caractères) ;
Titre (20 caractères) ;
Genre (20 caractères) ;
Auteur (nom, prénom) ;
Date d’emprunt ;
Elève (nom, prénom, classe) ;

Ecrivez un programme modulaire qui permet de :
 Remplir un fichier intitulé « biblio.dat » sous C:/Bac201N par des livres. La saisie s’arrête selon le
choix de l’utilisateur en répondant à la question « voulez-vous continuer ? O/N ».
 Chercher et d’afficher les noms et les prénoms des élèves qui ont emprunté des livres aujourd’hui.
 Chercher et d’afficher les noms et les prénoms des élèves qui ont emprunté des livres de genre
« informatique ».
 Le livre ayant pour identifiant « info4 » est emprunté de nouveau à l’élève : Nom : « xxxx »
Prénom : « yyyy »
Classe : « 4si »
Ecrire un module qui effectue les modifications appropriées dans le fichier.
 Compter et afficher le nombre des élèves de la classe « 4si » qui ont emprunté des livres de la
bibliothèque.
 Saisir le nom, le prénom et la classe d’un élève puis modifier l’enregistrement numéro NUM par ces
nouvelles informations (NUM est saisit au clavier).
 Supprimer le fichier totalement de disque.

Exercice 30
Ecrivez un programme modulaire qui permet de :
 Créer un fichier texte intitulé « paragraphe.txt » sous C:/Bac201N et le remplir par des chaînes de
caractère saisie au clavier. La saisie s’arrête lorsqu’on tape la chaîne 'FIN' (minuscule ou majuscule). La
chaîne de caractère, 'FIN' en l'occurrence ne sera pas stockée dans le fichier.
Compter et afficher le nombre de lignes NBL enregistré dans ce fichier.
Compter et afficher le nombre de caractères NBC enregistré dans ce fichier.
Afficher le contenu de F à l’écran.

Exercice 31
Ecrivez un programme modulaire qui permet de :
 Créer un fichier texte intitulé « texte .doc » sous C:/Bac201N et le remplir par des chaînes de
caractère saisie au clavier. Le nombre de chaînes saisies ne doit pas dépasser 100. La saisie s’arrête
selon le choix de l’utilisateur en répondant à la question « voulez-vous continuer ? O/N ».
Afficher le contenu de F à l’écran.
Transférer le contenu du fichier dans un tableau T.

Exercice 32
Ecrivez un programme modulaire qui permet de :
Remplir un fichier texte intitulé « nombres.txt » sous C:/Bac201N et le remplir par des entiers positifs.
La saisie s’arrête selon le choix de l’utilisateur en répondant à la question « voulez-vous continuer ?
O/N » ou lorsque le nombre d’entiers saisit atteint 100.
Afficher le contenu de F à l’écran.
Calculer la somme S et le Produit P des entiers de F.
Question : Expliquer Comment peut-on trier les entiers qui existent dans F
Transférer les entiers de fichier F vers un tableau T.
Trier les éléments de T par ordre décroissant.
Recopier les entiers de nouveau dans le fichier F.

Exercice 33
Ecrivez un programme modulaire intitulé FUSION qui permet de
Fusionner le fichier texte «texte2.txt » qui existe sous C:/Bac201N dans le fichier «texte1.txt » qui
existe sous C:/. La fusion consiste à copier le contenu de fichier « texte2.txt » dans le fichier
« texte1.txt » et à la suite de son contenu.
Afficher le contenu de F à l’écran.

| 23

LA RECURSIVITE

Exercice 1
Écrire une procédure qui affiche les entiers par ordre décroissant, de 10 jusqu’à 1. Proposer
une solution itérative et une autre récursive.

Exercice 2
Soit la procédure itérative suivante :
procedure affiche;
var a, b: integer;
begin
for a := 0 to 3 do
for b := 0 to 9 do
writeln(a * 10 + b);
end;
Transformer cette procédure en une procédure récursive.

Exercice 3
Écrire une procédure récursive permettant de saisir un entier N pair (1<N<31).

Exercice 4
Écrire une procédure récursive permettant de remplir un tableau T par N entiers positifs.

Exercice 4.2
Écrire une procédure récursive permettant d'afficher un tableau T.

Exercice 5
Écrire une fonction récursive permettant de calculer la factorielle d’un entier N donné.

Exercice 6
On appelle "palindrome" un mot ou une phrase qui se lit de la même façon à l'endroit comme
à l'envers, sans tenir compte des espaces.
Exemple : le mot "ABCBA" est un palindrome.
Ecrire une fonction récursive permettant de vérifier si une chaîne de caractères CH est un
palindrome.

Exercice 7
Ecrire une fonction récursive permettant de vérifier la parité d’un entier N.

Exercice 8
Écrire une fonction récursive permettant d'effectuer la multiplication de deux entiers positifs
(notés p et q) donnés, en utilisant uniquement l'addition entière.
En effet, pxq = p+p+p+…+p (q fois).

Exercice 9
Écrire une fonction récursive permettant de calculer la somme des N premiers entiers.

Exercice 10
n
Écrire une fonction récursive permettant de calculer X pour X réel et n entier relatif.

Exercice 11
Écrire une fonction récursive permettant de calculer le PGCD de deux entiers A et B par la
méthode d' EUCLIDE puis la méthode de différence.

Exercice 12
Écrire une fonction récursive permettant de calculer le PPCM de deux entiers A et B.

| 24

Exercice 14 Écrire une procédure récursive permettant de décomposer un entier N en facteurs premiers. .. Exercice 21 Écrire une fonction récursive qui détermine la valeur la plus proche d'un entier m donné dans un tableau T de n entiers. (Exemple : 432 = 2*2*2*2*3*3*3). Exercice 22 Écrire une fonction récursive qui teste l'existence d'un élément donné dans un tableau donné en utilisant une recherche séquentielle. Ecrire une ème fonction récursive permettant de calculer le N terme de la suite de Fibonacci. + pour tout n>0. Écrire une fonction récursive qui vérifie si un entier N est premier ou non. Exercice 16 Un entier supérieur à 1 est dit premier s’il n’est divisible que par 1 et par lui-même. n) qui renvoie xn. 3 5 7 2n + 1 Exercice 20 Écrire une fonction récursive qui permet de chercher le maximum dans un tableau T de n entiers. Ecrire une fonction récursive qui calcule la valeur approchée de ex en faisant appel aux fonctions fact et puiss... + 1 2! 3! n! Faire une fonction fact(n) qui renvoie n!. 2 3 4 n Exercice 19 1 1 1 1 Calculer par récursivité S ( n ) = 1 − + − + . + ( − 1) n pour tout n>=0. | 25 . Exercice 24 Écrire une procédure récursive qui permet de décaler tous les éléments d’un tableau d’une position à droite à partir de la position p..Exercice 13 La suite de Fibonacci est définie par : Un = Un-1 + Un-2 avec U1 = 1 et U2 = 1. Écrire une fonction récursive qui permet de chercher le minimum dans un tableau T de n entiers. Exercice 23 Écrire une fonction récursive qui teste l'existence d'un élément donné dans un tableau donné en utilisant une recherche dichotomique. Exercice 17 x x2 x3 xn Soit l’exponentielle : e  1+ x + + + . Exercice 18 1 1 1 1 Calculer par récursivité S (n ) = 1 + + + + .. Exercice 25 Écrire une procédure récursive qui permet d’inverser les éléments d’une partie d’un tableau compris entre la position p et n. Exercice 15 Un nombre parfait est un nombre qui est égale à la somme de ses diviseurs sauf lui même exemple : 6 est parfait car 6=1+2+3 Écrire une fonction récursive qui calcule la somme de diviseurs d'un entier N sauf lui-même. Faire une fonction puiss(x.

Exercice 34 Ecrire une procédure récursive qui supprime toutes les occurrences d'un caractère donné d'une chaîne de caractère. Par exemple les mots suivants sont des anagrammes : – aimer et maire – chien et niche Par définition. Exercice 28 Soit une chaîne de caractères . Exercice 30 Écrire une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri par insertion. supposons qu'on veuille faire aussi bien la fonction que la procédure qui nous renvoie l'inverse de cette chaîne. Exercice 35 Écrire une fonction qui compte le nombre d’occurrences d’un caractère c dans une chaîne ch. on considère que deux mots vides sont des anagrammes. Exercice 39 Écrire une fonction récursive qui teste la présence d'un caractère dans une chaîne de caractère. Exercice 31 Écrire une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri à bulles. Exercice 27 Écrire une fonction récursive qui détermine la valeur maximale de deux entiers positifs sans utiliser < et >. Exercice 37 Écrire une fonction récursive qui détermine le nombre des chiffres d'un entier. Exercice 38 Deux mots sont des anagrammes si l’un est une permutation des lettres de l’autre. Exercice 40 Écrire une fonction récursive nommée suppr_car qui permet de supprimer la première occurrence d'un caractère d'une chaîne. | 26 . Exercice 32 Écrire une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri Shell. Exercice 36 Écrire une fonction récursive qui calcule la somme des chiffres d'un nombre entier. Proposez une fonction récursive qui permet de savoir si deux mots sont des anagrammes. Exercice 29 Écrire une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri par sélection. Exercice 33 Écrire une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri par fusion.Exercice 26 Écrire une procédure récursive qui permute les n éléments consécutifs deux à deux d’un tableau T.

Écrire une fonction récursive qui évalue cette chaîne de caractères.2) Exercice 45 Évaluation d’une chaîne de caractère Soit une chaîne de caractères du type s="5+123-4+67-2" . "bac". Ce triangle est le suivant : 0 0:1 (a+b) = 1 1 1:11 (a+b) = 1a + 1b 2 2 2 2:121 (a+b) = 1a + 2ab + 1b 3 3 2 2 3 3:1331 (a+b) = 1a + 3a b + 3ab + 1b 4 4 3 2 2 3 4 4:14641 (a+b) = 1a + 4a b + 6a b + 4ab + 1b Écrire une fonction récursive permettant de déterminer les valeurs du triangle pascal. Exercice 43 Écrire une fonction récursive MacCarthy qui calcule MacCarthy(n) selon la définition suivante : Si n>100 MacCarthy(n) = n-10 Si n≤100 MacCarthy(n) = MacCarthy( MacCarthy(n+11)) Exercice 44 Écrire une fonction récursive calculant la fonction d'Ackermann définie comme suit : ⎧ n+1 si m = 0 ⎪ Ack ( m . proposez une fonction récursive constructible qui permet de savoir si un mot est constructible à partir d'un ensemble de lettres."BJNORUYZ") retournera faux (le 'O' n'apparaissant qu'une seule fois dans "BJNORUYZ") Constructible ("TRALALA". il faut qu'elle apparaissent au moins deux fois dans l'ensemble de lettres. Exercice 46 Vers une mini-calculatrice Soit une chaîne de caractères du type s="5+3*4/2-5*3+4*7/2" . les anagrammes des lettres de "abc" sont : "abc".3) et Ack(2.Exercice 41 En utilisant les deux fonctions précédentes (teste et suppr_car). faisons le programme qui évalue cette chaîne de caractères. Si une lettre apparaît deux fois dans le mot. n-1)) ⎩ si m > 0 et n > 0 Calculer Ack(0."LLAAAAART") retournera vrai Constructible ("". Par exemple. "acb". 1) si m > 0 et n = 0 ⎪Ack (m-1. Exercice 47 Écrire une procédure récursive qui affiche les combinaisons (les différentes permutations de n objets) d'une chaîne de caractères. | 27 . "cab" et "cba"."ABC") retournera vrai Exercice 42 Le triangle de Pascal est le tableau des coefficients qui sont utilisés pour le développement de n certaines expressions comme (a+b)² ou (a+b) . "bca". n ) = ⎨Ack (m-1. Par exemple : Constructible ("BONJOUR". Ack (m. Le mot et l'ensemble de lettres sont représentés à l'aide d'une chaîne de caractères.

• 6 s'écrit VI. Exemples d'écriture des nombres romains : • 4 s'écrit IV. • 15 s'écrit XV. • 149 s'écrit CXLIX (et non CIL.Exercice 48 Écrire un programme permettant d'évaluer un nombre romain en son équivalant en décimal. Exercice 50 Écrire un programme qui utilise une fonction récursive pour trouver le plus petit nombre d’un fichier d’entiers sauvegardés sur disque dur. • 47 s'écrit XLVII. sont égaux ou non. | 28 . puis l’affiche à l’écran. comme on pourrait le penser) On constate ici la décomposition 100+40+9 = C + XL + IX • 1490 s'écrit MCDXC = 1000 + 400 + 90 = M + CD + XC Exercice 49 Écrire une fonction booléenne récursive qui teste si deux fichiers d’entiers sauvegardés sur disque dur. Sachant que les chiffres romains : • M = 1000 • D = 500 • C = 100 • L = 50 • X = 10 •V=5 •I=1 On constate que les nombres s'arrêtaient aux milliers. • 9 s'écrit IX.

VA) 6) Fin Temps 6) Fin Interet_Simple Exercice 17 Exercice 18 0) Début Consommation 0) Début Résistance 1) Ecrire ("Nombre de Km parcouru : "). C) 1) Lire (X. s. Lire (B) 2) F Å 9/5 * D + 32 3) Q Å A div B 3) Ecrire (D. " m 3) EAU Å V*1000 et la largeur mesure ". Lire (R1. Lire (L) 2) R Å 1/ (1/R1 + 1/R2 + 1/R3) 3) TAUX Å (L*100)/Y 3) Ecrire ("La résistance équivalente est = "." mètres 4) Ecrire ("Le volume = ". Lire (H) 3) Ecrire ("C = "). Y) 6) Ecrire (A. B1. LESSTRUCTURES LES STRUCTURESSIMPLES SIMPLES Exercice 1-d) [ V ] Lire (A) [ F ] Lire (45) [ F ] Lire (A+B) [ F ] Lire ("A") [ F ] Lire ("A ="." km = ". B) 7) Fin Permut Exercice 8 Exercice 9 0) Début Permut_Circulaire 0) Début Permut 1) Lire (A. B. la. q. R2. A) [ V ] Ecrire (X+2*Y) [ V ] Ecrire ("A =". A) 6) Ecrire ("La nouvelle valeur de B est : ". Lire (SOM) 2) H Å T div 3600 2) Ecrire ("Donner le taux d'intérêt : "). 2) Ecrire ("Longueur = "). " Fahrenheit") 4) R Å A mod B 4) Fin Temperature 5) Ecrire ("Le quotient est ". F. " °C = ". " litres") 5) Fin Surface_rectangle 6) Fin Piscine Exercice 6 Exercice 7 0) Début Aire_Trapeze 0) Début Permut 1) Ecrire ("Donner les dimensions du trapèze "). a une surface égale à ". B. B) Lire (H. Y) 2) AUX Å A 2) X Å X+Y 3) AÅC 3) Y Å X-Y 4) CÅB 4) X Å X-Y 5) B Å AUX 5) Ecrire (X. V) 5) Fin Sortie_Inverse 4) Fin Cylindre Exercice 4 Exercice 5 0) Début Surface_rectangle 0) Début Piscine 1) Ecrire ("Largeur = "). Lire(C) 2) V Å PI*R*R*H 4) Ecrire (C. " ". Lire (lo) Lire (LO. " ". " %") 4) Fin Résistance 5) Fin Consommation | 29 . V) carrés.B) [ V ] Ecrire (A : 6 : 2) [ V ] Ecrire (5 mod 7 div 2) [ V ] Ecrire ("Saisir un réel") [ V ] Ecrire (45) Exercice 2 Exercice 3 0) Début Sortie_Inverse 0) Début Cylindre 1) Ecrire ("A = "). M. kilo. " : ". r) 6) Fin Division Exercice 12 Exercice 13 0) Début Mile_marin 0) Début Conversion 1) Ecrire ("Donner le nombre de Km : "). LA. mega. B. Lire (T) 1) Ecrire ("Donner la somme initiale : "). Lire (A) 1) Ecrire ("Donner le rayon : "). B2) 2) AUX Å A 2) SÅ H*(B1 + B2) 3) AÅB 3) Ecrire ("La surface = ". TAUX. Lire (bit) 2) Mm Å km/1. R) 4) Ecrire ("Taux de consommation est = ". A) [ V ] Ecrire (A. S) 4) B Å AUX 4) Fin Aire_trapeze 5) Ecrire ("La nouvelle valeur de A est : ". PR) 3) SÅ la * lo 2) V Å LO*LA*PR 4) Ecrire ("La surface du rectangle dont la longueur mesure ". Lire (km) 1) Ecrire ("Nombres de bits = "). Lire (B) 2) Ecrire ('Donner la hauteur : "). 1) Lire (A. Lire (A) 1) Ecrire ("Donner une température en °C : "). EAU. C) 6) Fin Permut 7) Fin Permut_Circulaire Exercice 10 Exercice 11 0) Début Division 0) Début Temperature 1) Ecrire ("A = "). Lire (TAUX) 3) M Å (T mod 3600) div 60 3) INTERET Å (SOM * TAUX/100) * 5 4) S Å T mod 60 4) VA Å SOM + INTERET 5) Ecrire (H. " ". mm. Lire (D) 2) Ecrire ("B = "). " ". giga) 7) Fin conversion Exercice 14 Exercice 16 0) Début Temps 0) Début Interet_Simple 1) Ecrire ("Donner une durée en secondes "). A) 3) Ecrire ("Volume = ". " : ". Lire(Y) 1) Ecrire ("Donner les trois résistances : ").") 5) Ecrire ("Quantité d'eau = ". " ". S) 5) Ecrire ("Après 5 ans la somme sera = "." miles marins") 3) Kilo Å octet/1024 4) Fin mile_marin 4) Mega Å kilo/1024 5) Giga Å mega/1024 6) Ecrire (octet." m. Lire (la) 1) Ecrire ("Donner les dimensions de la piscine"). lo. Lire(R) 2) Ecrire ("B = ").852 2) Octet Å bit/8 3) Ecrire (km. R3) 2) Ecrire ("Nombre de litres d'essence : "). " et le reste est ". " ".

r1. verbe. 2) Ecrire ("Je ".B)) div 2 4) INF Å (A + B . SUP. verbe. r2. "ai") Lire (N) 3) Ecrire ("Tu ". Lire (B) 3) SUP Å (A + B + abs (A . Lire (verbe) 1) Ecrire ("Saisir un entier formé de 3 chiffres non nuls : "). verbe. "a") 3) d Å n mod 100 div 10 5) Ecrire ("Nous ".B)) div 2 5) Ecrire ("Valeur sup = ". "ons") 4) u Å n mod 10 6) Ecrire ("Vous ".abs (A . verbe. Exercice 15 Exercice 19 0) Début Futur 0) Début NBR_3 1) Ecrire ("Donner un verbe du 1er groupe : "). "ez") 5) r1 Å c*100+u*10+d 7) Ecrire ("Ils ou elles ". r3. r5) 11) Fin NBR_3 Exercice 20 0) Début Sup_Inf 1) Ecrire ("A = "). INF) 6) Fin Sup_Inf | 30 . " Valeur inf = ". verbe. "ont") 6) r2 Å u*100+d*10+c 8) Fin Futur 7) r3 Å u*100+c*10+d 8) r4 Å d*100+c*10+u 9) r5 Å d*100+u*10+c 10) Ecrire (N. verbe. r4. "as") 2) c Å n div 100 4) Ecrire ("Il ou elle ". Lire (A) 2) Ecrire ("B = ").

b. x. Var x : Real . Readln (a. b. Uses Wincrt . Surf. End. Program Aire_Triangle . Var a. End. IF titre = 'Mr' IF a>b Then Begin Then sie := ' est supérieur à ' term1 := 'e' . sqrt(x)) Then Writeln ('Il ne s''agit pas d''un triangle') Else Writeln ('Donnée incorrecte') .') a. Readln (titre) . min : Integer . Begin Begin Write ('Saisir un réel ') . foulen. Writeln (titre. IF a<b Then min := a maxi := a . End. End. Write ('Votre nom = ') . Writeln ('Nombre de doigts montrés par le joueur B'). ' '. ' bienvenu'. Uses Wincrt. Var N : Integer . na. Writeln ('Saisir deux entiers : ') . nb. Program Abs_diff. Else IF a<b term2 := '' . b. sie : String . P : Real. term1 := 'a' . Begin Begin Writeln ('Donner un entier ') . 2:End. 1: Writeln ('Nombre de doigts montrés par le joueur A'). IF c>maxi Then maxi := c . Var titre. Uses Wincrt . End. IF b>maxi Then maxi := b . Writeln ('La plus grande valeur est : '.2 . Uses Wincrt. Uses Wincrt . term2 := 'e' . term1. Readln (n) . IF x >= 0 IF (a+b=c) Or (a+c=b) Or (b+c=a) Then Writeln ('Racine carrée '. Program Invite . Exercice 9 Exercice 8 Program Sup_Inf. foulen. z).' est impair') . | 31 . Begin Begin Write ('Titre = ') . Uses Wincrt . Program Max3 . Var a. z : Integer. Uses Wincrt . Else Begin End. End. Readln (a. b) . Writeln ('Aire de triangle = '. sie. Exercice 6 Exercice 5 Program Parite . Readln (a. Var a. Uses Wincrt . IF z='n' Then goto 2 Else goto 1 . Program Chez_la_fourmi. b : Integer . P := (a+b+c)/2. b. Readln (x) . term2 : String . Else Writeln ('Le joueur B gagne. Then Begin Writeln (a. Writeln ('Saisir trois entiers : ') . Var a.'). Surf:4:2). c. IF (na+nb) mod 2 =0 Var na. b). VAL (a. End . b) . err). Writeln ('La plus petite valeur est : '. b. Readln (a. b. c) . Begin Writeln ('Voulez vous jouer encore ? (o/n)'). Then Writeln ('Le joueur A gagne. '. Write ('Donner deux entiers : '). label 1. maxi) . Var a. End Then sie := ' est inférieur à ' Else IF (titre = 'Mlle') Or (titre='Mme') Else sie := ' est égal à ' . VAL (b. err : Integer. a:=readkey. maxi : Integer .' est pair') Else z:=a-b. nb. Readln (foulen) . term2) . Begin Begin Writeln ('Saisir deux entiers : ') . err). Writeln ('valeur absolue de a-b = '. End. Surf := sqrt (P*(P-a)*(P-b)*(P-c)). soyez l'. term1. IF n mod 2 = 0 IF (a-b) < 0 Then z:=b-a Then Writeln (n.' = '. Else min := b . End. Readln (z). Writeln ('Donner 3 réels positifs :'). LES STRUCTURES CONDITIONNELLES Exercice 1 Exercice 2 Program Min2 . z : Char. b. b) . c. c). Exercice 7 b:=readkey. Exercice 3 Exercice 4 Program Racine . Else Writeln (n. Uses Wincrt . Readln (a. min) .

op. End. End .a-b:3:2) .' = '.'Y'] '+' : Writeln (a:3:2. b). Var aux : Integer. Program Inequation . -b/a) Then Writeln ('IR') Else IF b<0 Else Writeln ('{}') Then Writeln ('IR') Else Writeln ('x = '. Var a. Var a.'U'. Writeln (nature). Readln (c).' = '. Write ('b = ') . b:4.' '. b. End Else Writeln ('Deux solutions complexes') . c). Then Writeln ('impossible') End. Case c of Case op of 'a'. Readln (a) . (-b+sqrt (delta))/ (2*a)) . Readln (a) . Begin Begin Write ('a = ') .'A'.a+b:3:2 ) . Readln (a) .Exercice 10 Exercice 12 Program Ordre . Readln (b) . Readln (b) . Else Writeln (a:3:2.4*a*c .'O'. IF delta = 0 {solution réelle double} Then Writeln ('x1=x2= '. Var a. b. aux:=x. Write ('b = ') . Begin IF a>b Then permut (a. Uses Wincrt . Readln (c) . op : Char . Readln (e1. '*' : Writeln (a:3:2.b:3:2. (*****************************) Exercice 13 Exercice 14 Program Equa_2d .'Z' : IF UPCASE(c) in ['A'.. e2) . Var a. Uses Wincrt. Readln (op) . Begin Uses Wincrt. End. Exercice 11 Program Tri. b : Real . End. IF b>c Then permut (b.' '. Write ('a = ') . Readln (c) . Write ('b = ') . c : Integer.'z'.' = '. y : Integer).' = '. | 32 .a*b:3:2) . IF a <> 0 IF e1>e2 Then Begin Then Writeln ('x = '. Readln (a) . y:=aux. grand : Integer . IF a>0 IF a = 0 {équation 1er degré} Then Writeln ('x < '.' '. Then Writeln ('IR') End. End. delta : Real . Program Equa_1d . Then nature := 'Voyelle' '-' : Writeln (a:3:2.'I'. Readln (b) . -c/b) Else Writeln ('Impossible') .' '.op.b:3:2. End.'E'. grand:3) . End. c:4).. Var a. -b/a) Then IF b = 0 Else IF a<0 Then IF c = 0 Then Writeln ('x > '. Uses Wincrt . IF a>b Then permut (a. Writeln (a. Writeln (petit. Write ('a = ') . Begin Begin Writeln ('Saisir deux entiers : ') . Readln (a) . End. Uses Wincrt . grand := e2 . Write ('a = ') . '0'. Procedure permut (Var x.' '. b : Real .' '.b:3:2.'9' : nature := 'Chiffre'. (*****************************) Write ('c = ') . nature : String.' '. Writeln ('x2= '. (-b-sqrt (delta))/ (2*a)) . End. Exercice 15 Exercice 16 Program Touche . Readln (b) . Var c : Char .' '. b : Real . Uses Wincrt . -b/ (2*a)) Else IF delta > 0 {deux solutions réelles} Then Begin Writeln ('x1= '. Begin Begin Writeln ('Taper sur une touche').op.a/b:3:2). petit := e1 . petit.b:3:2. Else Writeln ('{}') . Uses Wincrt . -b/a) petit := e2 . Else Writeln ('Opérateur incorrect'). c. Write ('c = ') . b). e2. x:=y. '/' : IF b = 0 Else nature := 'Symbole'. Else nature := 'Consonne'. Readln (b) . Write ('b = ') . Else IF b = 0 grand := e1 . Var e1. Program Calculette .. Else delta := sqr (b) .op.

jf.a). write ('Année : '). End. err : Integer . ' Mention = '. mm. mf. af) . Begin Readln (ji. me := '' . ai) . Else IF moy < 18 End. 4.6. Readln (date) . Then Begin VAL (COPY (date. aa. Exercice 21 Else Begin Program Lendemain. Readln (jf. 4) . Program Date . 9 : mois := 'Septembre' . Then j:=j+1 | 33 .ai . Then me := 'Très bien' Else me := 'Excellent' . jf := jf + 30 . me) . Begin date. an : integer. dec. readln (an). mm. mm := mf . 6. 8. 1. m:=m+1. j:=1. 3. Then Begin 4 : mois := 'Avril' .ji . mm. Begin 2 : IF a mod 4 =0 Writeln ('Donner une date sous forme jj mm aa'). End . End . 7 : mois := 'Juillet' . End . 12 : mois := 'Décembre' . if mm in [4. Else IF m = 12 End Then Begin Else IF j<28 j:=1. Uses Wincrt . Uses wincrt. Write ('N° du mois : ') .'/'. Then j:=j+1 m:=1. ' jours') . mm. jj := jf . aa := af . End m:=3. readln (mm) . 7. Writeln ('Moyenne = '. nbj). 10 : mois := 'Octobre' . Var mm. Uses Wincrt. Var j. Else IF moy < 16 Then me := 'Bien' writeln ('Le nombre de jours du mois saisi est : '. err) . jj := COPY (date. aa:2) . IF moy < 12 nbj := 28. moy. End. 2) . dec := 'Redouble' . af := af . mois : String [10] . mf := mf + 12 . Writeln ('La date du lendemain est : '.m. Then me := 'Assez bien' end.1 .12 : IF j<31 j:=1. Then j:=j+1 Case m Of Else Begin 1. Then me := 'Passable' if (an mod 4=0)and((an mod 100<>0)or(an mod 400=0)) Else IF moy < 14 then nbj := 29. mf. 5. m.9. m. 11 : mois := 'Novembre' . mois:2.j. Var ji. Uses Wincrt . mi. 4. a : Integer. End. Writeln ('Saisir une date sous la forme jj/mm/aaaa') . End. jj. ' mois '. 10. Else Begin End. 1 : mois := 'Janvier' . Then IF j<29 Readln (j. Begin Begin Write ('Donner la moyenne annuelle : ') . IF ji > jf aa := COPY (date. 2). 5 : mois := 'Mai' .1 . 8 : mois := 'Août' .mi . Readln (moy) . 9. Var moy : Real . jj.11] End then nbj :=30 Else Begin else begin dec := 'Admis' . Writeln (aa.11: IF j<30 End. Write ('Donner la date initiale : ') . Var nbj. ai. 6 : mois := 'Juin' . Uses Wincrt . Then j:=j+1 m:=3. End. mi. End . Exercice 20 Exercice 19 Program Anciennete . dec : String . j:=1. ' années '. Case mm of mf := mf . m:=m+1. aa : Integer . Else Begin a:=a+1. End. Writeln (jj. IF moy < 10 Then Begin nbj :=31. 7. 2 : mois := 'Février' . Program nbr_jours_mois. j:=1. jj. af.Exercice 17 Exercice 18 Program Bulletin . Write ('Donner la date finale : ') .' Décision = '. me.'/'. a). IF mi > mf 3 : mois := 'Mars' .

month.'cinquante'.'deux'. 11 : daymonth:=daymonth+30.'un'. writeln ('Donner l''année'). Var n : Integer. end. writeln ('Le jour correspondant est '. jj:string. End. Uses Wincrt.. case weekday of 0:jj:='Dimanche'.'quinze'. End.'dix-neuf').'cinq'.'dix-huit'. 1:jj:='Lundi'.'sept'. End.69.'trois'.'quatre'. 8. daymonth.'treize'.'huit'.''.80. readln (day).'neuf'.'trente'. end. 5:jj:='Vendredi'.Exercice 22 Program Toute_Lettre..89: IF ((n mod 10 = 1) and (n<>81)) Then result := Dizaines [n div 10] + ' et ' + Chiffres [n mod 10] Else result := Dizaines [n div 10] + ' ' + Chiffres [n mod 10]. Case n of 0..'soixante'.'douze'. readln (year). dayyear:=(year-1)*365 + ((year-1) div 4). 3:jj:='Mercredi'.'').'seize'.'quatre-vingt'.. Dizaines : Array[2. Var day. daymonth:=0. 12 : daymonth:=daymonth+31. 6. 10.. result : String.'dix-sept'. for cm:=1 to (month-1) do case cm of 1. 6:jj:='Samedi'. 9.'dix'. 7.79. cm:integer. IF n=0 Then Writeln ('zéro') Else Writeln (result). Exercice 23 Program jour_semaine. 2:jj:='Mardi'.'quatorze'. dayyear.9] of String = ('vingt'. 2 : if (year mod 4=0) and ((year mod 100<>0) or (year mod 400 =0)) then daymonth:=daymonth+29 else daymonth:=daymonth+28. Const Chiffres : Array[0. year.. | 34 . Uses wincrt. weekday.90. Begin Writeln ('Donner un entier entre 0 et 99'). Begin writeln ('Donner le jour'). 20.19 : result := Chiffres [n]. 4:jj:='Jeudi'. 5. 70.'quarante'.'six'. jj). Readln (n).. writeln ('Donner le mois').99: IF (n = 71) Then result := Dizaines [n div 10 -1] + ' et ' + Chiffres [n mod 10 + 10] Else result := Dizaines [n div 10 -1] + ' ' + Chiffres [n mod 10 + 10]. 'onze'. 3.19] of String =(''. readln (month). 4. weekday:=(dayyear+daymonth+day) mod 7.

Writeln . End. Writeln ('3*'. Begin begin FOR i:=1 To n Do for i:=0 to n do Begin begin FOR j:=1 To n Do Write (i * j : 4) . u := 2 . End. note. Begin Writeln . Const n = 10 . Writeln (som) . Begin p := p * i . End. Uses Wincrt. | 35 . Uses Wincrt . Uses Wincrt . Writeln ('Produit = '. Begin FOR i := 1 To 100 Do s := s + i . Writeln (som) . Const n=9. i : Integer . Program Table3. Writeln ('Somme = '. writeln. p:2:2). End. End. s : Real. Var som. var i. Repeat While (i<=100) Do som := som + u . Exercice 4 Exercice 4 Program Suite . n. P := 1 . Var c : Char . Repeat s:=0. End . FOR i := 2 To n Do fact := fact * i . end. for j:=-i to i do write ('*').255] . Writeln (n. u := u+3 . End.i. s := s+note. End . ' : '). End. j : integer. Writeln (som) . const N=4. som := som + u . Readln (note). end. fact : Real . Var som. End . n : Integer. Program Suite . i. LES STRUCTURES ITERATIVES Exercice 1 Exercice 2 Program Alphabet. u := u + 3 . Var som. p : Real . i := i+1 . Var i. fact) .3*i). End . i := 1 . u : Integer . Uses Wincrt . u : Integer . n : Byte . s/n:2:2). Exercice 7 Exercice 8 Program Moy_Notes. u := 2 . End. j : Byte . Write ('Note '. Readln (n). Var i. FOR i:=1 To n Do Readln (n) . i. Begin Begin som := 0 .' = '. Program Suite . Var i. ' notes : '. i. Writeln ('Moyenne de ces '. u : Integer .. Writeln ('Saisir un entier'). fact := 1 . Begin Var i : Integer . som := 0 . Uses Wincrt . Program Factoriel . som := som + u . FOR c:= 'A' To 'Z' Do Write (c:2). FOR i:= 1 To n Do FOR c:= 'Z' Downto 'A' Do Write (c:2). FOR i:= 1 To 20 Do u := 2 . som := 0 . Uses Wincrt . Begin Begin Write ('Combien de notes : '). uses wincrt. Uses Wincrt . End. End. Uses Wincrt . Program Pyramide. Uses Wincrt . i := 1 . Var s. Until (i>100) . Begin u := u + 3 . Exercice 3 Exercice 4 Program Somme_Produit . Begin Begin S := 0 . i := i+1 . i. for j:=i+1 to n do write (' '). Exercice 5 Exercice 6 Program Pythagore . ' ! = '. Begin Until n IN [0. s).

lecture(n3). n3:integer. FOR i:= max Downto 1 Do Begin Begin l:=21. Write ('Essai numéro '. writeln ('Entrer trois entiers compris entre 0 et 15'). Exercice 13 Exercice 14 Program Som_Chiffres. r : Integer. nc). Readln (np) . som:=som+r. Else Writeln ('C':4). r:= n mod 10. essai : Integer . affiche(n1. Until (np = nc) Or (essai = 7) . Writeln ('La somme de chiffres est : '. essai := essai+1 . End.i:integer . Begin Repeat c:=k div 100 . End. Var n. Procedure lecture (var n:integer). u:=k mod 10 . Begin Begin Writeln ('Donner un entier'). j. {numéro de ligne} IF i>a Then Write (' ') for i:=1 to n do Else Write ('A'). nc. End. essai := 0 . IF np > nc Then Writeln ('C''est grand') Uses Wincrt .15] . m. Begin Begin Writeln ('Entrer trois entiers compris entre 0 et 15'). Else Write ('B':4). nc := Random (100) +1 . End. essai. IF b>max Then max:=b.c:integer. Repeat IF z='n' Then goto 2 Else goto 1 . End. FOR i:=1 TO 9 DO Readln (n). ' est un nombre cubique'). Uses Wincrt. d..10. | 36 . Then Writeln (k. writeln(ca). End. Randomize . ' '). Then Begin m:= m div 10. Else Writeln ('Bravo vous avez gagné !!') . k : Integer. 'Votre nombre : ':20). FOR k:=100 To 999 Do som:=0. end. IF c>max Then max:=c. repeat readln(n) until n in [0. som). le nombre cherché est : '. End. Procedure affiche (n. Readln (n). affiche(n3. End. Var a. max. c.Exercice 10 Exercice 11 Program Diviseurs.'C'). Uses Wincrt. j.l). n:= n div 10.'B'). k). End. Writeln ('Voulez vous jouer encore ? (o/n)'). lecture(n2).14. FOR j:=1 TO 9 DO m:=n. affiche(n2. ' '. c. max:=a. c). Var l. Program Nbr_Cube. Program Som_15. Else IF np < nc Then Writeln ('C''est petit') Label 1. z : Char . Var n. Uses Wincrt. IF (u*u*u+d*d*d+c*c*c) = K Until n=0. i : Integer. End. FOR k:=1 TO 9 DO Repeat IF (i+j+k=15) r:= m mod 10. IF (n mod r = 0) Then Write (r.18. Exercice 12 Program histogramme. Uses Wincrt. Var n1. Readln (z).'A'). b. Then Writeln ('Perdu. begin IF i>b Then Write (' ':4) gotoxy(c. u : Integer. Uses wincrt. n2. Program Histogramme. som. End. Exercice 9 Program Jeu . Var k. Begin IF np<>nc 1: Clrscr . Until m=0. 2:End. Var np. ' '. r : Integer. 2 . Begin Begin Writeln ('Donner un entier'). IF i>c Then Writeln (' ':4) l:=l-1. Writeln (i. b. Uses Wincrt. Readln . Begin lecture(n1). ca:char). Readln (a. Var i. d:=(k div 10) mod 10.

Writeln ('Probabilité est : '. ' * '. Exercice 17 Exercice 18 Program Probabilite. and (a<>b) and (b<>c) diff:= (p*r) . s. ' '). d. Writeln (s) . var p. Begin Begin Randomize. end. begin i : longint. IF n<0 Then y := 1/y . Uses Wincrt . Writeln ('Donner un entier'). FOR i := 1 To n Do x := y . k : Integer . Var d1. FOR i:=1 To 50 Do s1:=0. until abs (diff) < 1e-8. for b:=c downto a do repeat for d:=c downto a do i:=i+2. s := 0 . s : Integer . FOR i:=1 To y Do s := s+x . i : Byte. Program Suite . Var x. Var i. Uses Wincrt . ' = ' . Var n. y. Writeln (s1:8:2. ' = '). uses wincrt. Until odd (n). IF odd (i) Then s2 := s2 + 1/i IF S mod 2 = 0 Else s3 := s3 . uses wincrt. s := 1 . Readln (x) . S:=n. Uses Wincrt .s3 . FOR i:=1 To essai Do y := 1 . End. ' puissance ' . n : Integer . essai = 100. s3 : Real . Exercice 21 Exercice 22 Program produits. then Writeln (a. PROGRAM PI_WALLIS. Begin Begin Repeat Writeln ('Saisir un entier > 0 '). r. i:=0. End . d:integer. d2. ' * '. Writeln (s:5:2) . Var n. Begin FOR i:=1 To n Do Write (S. i : Integer . Else S:= 3*S+1. c. d1 := 1 + Random (6). IF y<0 Then Begin End . var a. Begin y := aux . Write ('Saisir un nombre réel : ') . End. i. writeln ('par la formule de wallis pi = '. Readln (n) . n . y) . End . End. s. End. cumul :=0. s1. Write ('Saisir la puissance n : ') . a. y:5:2) . Begin Begin Writeln ('Donner deux entiers') . invfact := invfact/i . aux. x : Real . End. Var n. Readln (n). i : Integer . d. Readln (n). for a:=1 to 9 do begin for c:=a to 9 do p:=1. s3:8:2). Program Syracuse . Then S:= S div 2 s1:= s2 . invfact : Real . b. IF abs(y)>abs(x) Then Begin invfact := 1 . diff : real. s2:8:2. d3.Exercice 15 Exercice 16 Program Somme . y:= -y . s3:=0. d3 := 1 + Random (6). p:=p*r. Write ('Saisir un entier impair : '). s2:=0. IF (d1+d2+d3 = n) Then cumul := cumul +1. x:= -x . c. cumul.1/i . Writeln (x:5:2. End. Const n = 12. Begin FOR k := 1 To abs (n) Do y := y * x . aux := x . Readln (x. Uses Wincrt . s2. | 37 . Exercice 19 Exercice 20 Program Multiplication_Addition . Program Puissance_n . s := s + invfact . Uses Wincrt. end.p. cumul/essai :5:2). ' * '. Readln (n) . b. 2*p:2:7). ' = '. Uses Wincrt. y. b. c) . if ((10*a+b)*(10*c+d) = (10*b+a)*(10*d+c)) r:=i/(i-1)*i/(i+1). d2 := 1 + Random (6). End. y. Write (x. End.

b : Integer. end. s:2:10). Writeln ('PGCD = '. uses wincrt . b := aux. End. begin begin repeat repeat writeln ('saisir deux entiers > 0'). d. f:real. readln (a. uses wincrt . while (ppcm mod b <> 0) do ppcm := ppcm + a. uses wincrt . if nb=som then writeln (nb. Exercice 26 Exercice 27 Program Fibonacci . Program Nbre_Premiers . r : Integer. end . b. b. While b<>0 Do While a<>b Do Begin IF a>b Then a:= a-b r := a mod b. f0. until abs(p/f) <= epsilon. Until (a>0) and (b>0) . a*c). c:=c+1. end. b := r. uses wincrt. var k. som. s:=s+p/f. i : integer . end. end. writeln ('ppcm = '. i:=i+1. until (a>0) and (b>0). writeln ('expn = '. epsilon. Writeln ('PGCD = '. begin begin f0 := 1 . p:=p*x. a. b) . Program PPCM_AB. Readln (a. b) . a) . ppcm := a. repeat begin Readln(a. Program PGCD_Diff. f2 : integer . write ('epsilon = '). until (a*c) mod b = 0. until (2<a) and (a<b). End. ppcm). write (f2. b. until (a>0) and (b>0). begin repeat som:=0. readln (x). end. for d:=1 to (nb div 2) do f:=f*i. f0 := f1 . a).b). a := b. a. aux:= a. writeln ('saisir deux entiers > 0'). i:=1. Exercice 25 Exercice 25 Program PPCM_AB. var nb.Exercice 23 Exercice 24 Program PGCD_Euclide. write ('x = '). end. Var a. begin i:integer. Var a. Until (a>0) and (b>0) . a := b. begin if (i > nb div 2) then write (nb:4) . p:=1. end. f1. Exercice 28 Exercice 32 Program Parfait . Program Exponentiel. end. for nb:=a to b do s:=1. ' ') . c:=0. a := b. f1. End. Else b:= b-a . end. var ppcm. if a < b then begin if a < b then begin aux:= a. Uses Wincrt. b := aux. for k := 2 to 19 do while (nb mod i <> 0) and (i <= nb div 2) do i:= i+1 . ' '. Begin Begin Repeat Repeat Writeln ('Saisir deux entiers > 0'). readln (a. f1 := 1 . Writeln ('Saisir deux entiers >0 '). end . s. uses wincrt . var c. | 38 . aux: integer. f2 := f1+f0 . b : integer. begin i := 2 . f1 := f2 . ' ') . aux : integer. uses wincrt. p. f:=1. if (nb mod d = 0) then som:=som+d . ' est parfait'). var nb. repeat writeln ('ppcm = '. readln (epsilon). b). var x. a. Uses Wincrt. b). Readln (a. for nb := 2 to 400 do write (f0.

n. Until (0<p) and (p<n) . x:1:2. s:=0. ' = '). type tab = array [1. i : integer. for i:=2 to f do write (' * '. p. if (x mod i) = 0 then sdx := sdx+i. ' sont amis') . Readln (n). Writeln ('Donner un entier positif'). end. begin begin repeat sdx:=1. fact := f . Var cnp : Real . n. Until (0<p) and (p<n) . var x:real. s:2:3). begin fp[f] := i. uses wincrt. write ('sin('. for i:=2 to (x div 2) do until (n>=2) and (n<=1000) . write (n. ReadLn (p. term2:=x.P*****************) End. Exercice 34 Exercice 34 Program Combinaison . sdn := diviseurs (n). term2. term2:=term1 * -sqr(x) / (i*(i-1)). until (0<= x) and (x <= 2*Pi). repeat End. Npf :=1. saisie (n). p:=1. n. sdn. Program Combinaison . Uses Wincrt . i:=1. end. m. Function puissance (x : Integer):Longint. writeln ('donner un entier entre 2 et 1000') . Procedure saisie (Var m : Integer). Uses Wincrt. Exercice 31 Exercice 33 Program calcul_sinus. i : Integer . Program Somme. Nf :=1. function diviseurs (x : integer) : integer. n). IF i<=n-p Then npf := npf*i. n. begin (**************************************) repeat Begin write ('donner un réel x '). uses wincrt . End . Program Facteur_Premier . Cnp := nf / (pf*npf) . f : integer . i : Integer . FOR j:=1 To x Do p:=p*x.0001. Writeln ('la somme = '. readln (n) . Begin Write (‘n = '). Pf :=1. Var j : Integer . var sdx. Writeln ('Combinaison = '. sdm : integer. puissance:=p. Until m>0. i := 2 . i:=i+2. cnp :4:2) . Begin begin Repeat som:=x. fp[i]). Uses Wincrt . som:=som+term2. (**************************************) Begin Function Fact (x : Integer) : LongInt . end. Readln (p). i:real. repeat (***********************************) if (n mod i = 0) begin then begin for m:=1 to 1000 do n:= n div i. (**********************************) var fp : tab . cnp := fact (n) / (fact (p) * fact (n-p)) . p : Longint.') = '. Writeln ('Combinaison = '. for n:=1 to 1000 do f:=f+1. var som. IF i<=p Then pf := pf*i. npf : Longint . Var i. diviseurs:=sdx. if (sdm=n) and (sdn=m) until (n=1). write (fp[1]). FOR i := 2 To x Do f := f * i . var m. Begin until abs (term2-term1) <= 0. p : Integer .Exercice 29 Exercice 30 Program Amis. s : Real. else i:=i+1. sinus:=som. n : Integer. End. End. pf. sinus(x):10:10). | 39 . uses wincrt. i. f:=0. end. Repeat Var f : LongInt . f := 1 . Write (‘p = '). (*************************************) FOR i:=2 To n Do Begin Begin Repeat Nf := nf*i .. Readln (m). Writeln (‘Donner deux entiers : ’). FOR i:=1 To n Do s:= s + (2*i-1) / puissance (i). term1. end. end sdm := diviseurs (m). (***********************************) (*************************************) function sinus (x:real) : real. readln(x). then writeln (n. Var cnp : Real . Nf. cnp :4:2) . (*****************P.100] of integer . End. End. ' et '. end. (**************************************) term1:=term2.

for k:=i+1 to j do write(' + '. Readln (Y). c2:= m MOD 10. Begin Writeln (p:10. program sommes_entiers. j:= i. Repeat End.k). valide : Boolean. Readln (m). max:=10*max + (9-m+i). end. writeln. FOR i:=1 To 8 Do Begin FOR j:=1 To 8 Do IF (i=x) and (j=y) Then Write (' R ') Else IF (i=x) Or (j=y) Or (abs(x-i)=abs(y-j)) Then Write (' * ') Else Write (' '). mn. max:Longint). readln (n). i. Program Ordered . End. Var x. n:=n+1. ' . end. Readln .Exercice 35 ordre:=valide. m:= m DIV 10. Write (' Y = ') . Var i. saisie (n). Else Writeln (i:4). until s >= n. Writeln . c2 : Integer. end. valide:= (c1>c2). Uses Wincrt. Until Not (valide) Or (m<10) . max:=0. Begin Write ('Les coordonnées de la dame: X = ') . Then Write (i:4) S := S + j. Var i : Integer. End.. i). Uses Wincrt. mx). Var min. i. Procedure saisie (Var m : Integer). Begin Var c1. p : Longint. if S=N then End. var n. | 40 . k. s:integer. min:=0. j. FOR i:=mn To mx DO (***********************************) IF ordre (i) Then Function ordre (m:Longint) : Boolean. Begin (**************************************) Repeat Procedure min_max (m : Integer. End.i). p:=p+1. min_max (n. Exercice 38 Program Reine . FOR i:=1 To m Do (*******************************************) Begin Begin min:=10*min + i. FOR i:=1 To 99 Do for i:=1 to n div 2 do IF ODD (i) and (i mod 7 <>0) begin Then Begin S := i. Repeat IF n mod 5 <>0 J := j +1. End. y. j : Byte . mx. End.'. Begin begin n:=0.' = '. begin write (n. mn.8]. Uses Wincrt. p:=0. End. c1:= m MOD 10. Write ('Donner un entier n compris entre 2 et 8 : '). (*******************************************) Var n : Integer. End. n : Integer. Readln (X). End. Begin Until m in [2. uses wincrt. i. writeln ('entrer la valeur de N :'). Exercice 36 Exercice 37 Program Nbre_Impairs.

Exercice 3 Exercice 4 Program Freq_Lettre .'Z'] of Byte . st). Type Tab = Array [1. Writeln .. Var T : Array [1. Begin FOR i:=2 To 20 Do St := st + T[i] .n] of Char . Readln (n). n. FOR i := 1 To n Do Write (T[1].. end.. i.chr:string. i:=i+1. Var rest : Array [1. Uses Wincrt . FOR i := 1 To n Do FOR j:=i Downto 1 Do Write (rest[j]). End. str(r. Until (n > 0). End.10] of Integer . Program Conversion_base10_base2.dec_bin(n). end. Begin Begin Repeat Repeat Write ('N = '). i. begin Repeat Writeln ('Donner un entier positif'). End. ' '). Begin i : Byte . n. FOR j := 'A' To 'Z' Do FE[j] := 0 .. j : Char..20] . st := 0 . Uses Wincrt . Writeln ('Produit = '. st : Integer . pt : Real . dec_bin:=chb. (********************PP********************) Begin Saisir (n). Const n=35 . Readln (T[i]). Until (n>5) and (n<=10) . n:=n div 2. Write (LET[i] :2) . Until upcase (T[i]) in ['A'. FOR j := 'A' To 'Z' Do Write (j:2). While (j>2) and (T[i]<>T[j-1]) Do j:=j-1. mt. Readln (T[i]) . insert (chr. Until n=0. rest[i]:=n mod 2. Begin Repeat LET[i] := CHR (65+ Random (26)) . End. 1). Uses Wincrt.'Z'] . ============ Solution 2 ================= Writeln . Uses Wincrt. Until n in [3. st/n:2:2). Until (1<= T[i]) and (T[i] <= 20) . Writeln. ' '). (*****************************************) End. chr). Readln (n). n.n. FOR j := 'A' To 'Z' Do Write (FE[j]:2) . chb. var chb. Var LET : Array [1.. Writeln ('Moyenne arithmétique = '. Begin Pt := pt * T[i] .1. ' = '). trunc (pt)). Randomize . IF T[i] <>T[j-1] Then Write (T[i]. Writeln . Write ('T'. FOR i := 1 To n Do i:=0. Until (n > 0). i). Uses Wincrt. Repeat Begin Writeln ('Donner un entier positif'). Writeln . j : Integer. i. n:=n div 2. Program Conversion_base10_base2. FE[LET[i]] := FE[LET[i]] + 1. var n:integer. End. Writeln ('Somme = '. | 41 . Until n=0. Repeat r:=n mod 2. End. End .1. i. r:0. begin chb:=''. procedure saisir(var n:integer).20] of Char. FOR i:=1 To 20 Do Write (T[i].')2'). j : Integer. Writeln ('Donner un entier'). Readln (n).')10 = ('. writeln ('('.. (***************************************) function dec_bin (n:integer):string. Program Affich_sans_redondance...50] of 0. Var T : Tab . FOR i:=1 To n Do FOR i := 1 To n Do Repeat Repeat Writeln ('Saisir la case d''ordre '. LES LES TABLEAUX TABLEAUX Exercice 1 Exercice 2 Program Som_Produit_MoyArith . j:=i. Readln (n) . pt := 1 . FE : Array ['A'. ' ').

Writeln (‘Saisir les '. Begin i. Until nb10=0.. Then Begin Begin k := k+1 . n. Writeln ('Donner le nombre à convertir'). Randomize . Program Eclater_tab . i. FOR i := 1 To n Do Writeln . Uses Wincrt . Else Write (CHR (reste[j]-10 + ORD ('A'))). k. T[i] := T[n-i+1] .50] of Integer . Exercice 8 Program Regrouper_tab . n. Program Min_Max_tab . TP[k] := T[i] . TP : Tab . Begin Uses Wincrt . Var T : Tab . T[i] := -20+Random (41) . End . End.16]) and (b2 in [2. Writeln (‘Saisir les '. aux : Integer .50] of Integer. IF T[i]<min Then min:=T[i]. Begin FOR i := 1 To n Do Write (T[i]:4) . k:=0 . max.. Until n in [10. Begin Writeln . nb10 : Integer. nb10:=nb10+nb[n]. i:=i+1. nch : String. b2. FOR i:=1 To n Do Readln (T[i]) .ORD ('A') + 10) . IF (T[i] mod 2) = 0 i. Writeln . min. k : Integer . FOR i:=1 TO N DO Readln (T[i]). Type Tab = Array [1. IF T[i] < 0 Then Begin Type Tab = Array [1.50] of Integer . Exercice 9 min:=T[1]. Readln (nch). Until (n>=10) and (n<=50) . Until (n>=10) and (n<=50) .Exercice 5 {conversion de la base b1 au décimal} Program Conversion_b1_b2. nb[i].50] of Integer . End . reste : Array [1. Write ('N = '). Readln (b2). Begin IF T[i]>max Then max:=T[i]. Repeat Repeat Write ('Base b1 = '). min). j. T[n-i+1] := aux .15. Readln (n) . FOR i := 1 To k Do Write (TP[i]:4) . Repeat Readln (n) Until (n>=10) and (n<=50). Writeln . n:=Length (nch).. n. ' éléments de T’) . FOR i:=1 To n-1 Do nb10:=(nb10+nb[i])*b1. FOR i := 1 To n Do Var T : Array [1. FOR i := 1 To j Do Write (TN[i]:4) . | 42 . End. End. Readln (n) . {affichage du résultat} FOR i:=1 To n Do FOR j:=i Downto 1 Do IF ORD (nch[i]) <65 IF reste[j] < 10 Then VAL (nch[i]. Repeat tmp := T[i] . Var T. Writeln ('Valeur maximale = '. FOR j:=i Downto k+1 Do T[j]:=T[j-1] . Repeat Writeln ('Tableau inversé :') . reste[i]:=nb10 mod b2. FOR i:=2 TO n DO Var T : Array [1. j. Writeln ('Saisir un entier') . n : Integer. k := 0 . Until (b1 in [2. Exercice 7 FOR i := 1 To (n div 2) Do Program Inverser_tab . err) Then Write (reste[j]) Else nb[i] :=(ORD (nch[i]) . Writeln . Write ('Base b2 = '). n. FOR i := 1 To n Do Write(T[i]:4) . j. Write (T[i]:4) . nb10 :=0. Readln (n) .. FOR i := 1 To n Do Readln (T[i]) . Uses Wincrt. Uses Wincrt. n. End. End. {conversion de nb10 du décimal à la base b2} Begin i:=0. i.. max:=T[1]. tmp : Integer . Readln (b1).. End. End .50] . Writeln ('Saisir un entier') . err.. End. Var nb.. ' éléments de T’) . i.50] of 0. Writeln ('Valeur minimale = '. TN[j] := T[i] . TN. FOR i := 1 To n Do Uses Wincrt . b1. aux := T[i] . Exercice 6 j := 0 . T[k] := tmp ..16]). nb10:=nb10 div b2. End Begin Else Begin Repeat k := k+1 . n. max). j := j+1 .

' ne figure pas dans le tableau') Until T[i] >= T[i-1]. Procedure Saisie (Var T : Tab . N. End . Writeln ('Tableau symétrique :') . T[k] := T[i] . Begin R[j] := T[i] . g.50]. Type Tab = Array [1. type Tab = Array [1. | 43 . ' éléments de T') .. Var d. Uses Wincrt . End. End.10] of Integer . pos : Integer. ' se trouve à la position '. Else IF V>T[m] Begin Then g:=m+1 Repeat Else d:=m-1. (************************) Readln (T[1]). End . v : Integer). i. Writeln ('Donner la valeur à chercher') . Until (n>=2) and (n<=20) . Begin FOR i:=2 To n Do Saisie (T. V : Integer. i :=i+1 . k:=0 . N. n. Program Symetri_tab . FOR i:=1 To n Do IF v=T[i] IF T[i]<>0 Then Begin Then Writeln (v. End. Uses Wincrt .. n : Integer . Write ('N = ') . Readln (v). Until (n>1) and (n mod 2 =0) .. End. Readln (T[2*i-1]) . FOR i := 1 To 10 Do Write (R[i]:4) . Var T. Writeln ('Donner la valeur à chercher'). Until (pos=m) Or (g>d). g:=1 ... j : Integer . n div 2. k. Uses Wincrt . IF T[i] <> T[k] Then Begin End.Exercice 11 Exercice 10 Program Ranger_tab . recherche (V. IF T[i] >= 0 Then Begin FOR i := 1 To (n div 2) Do j := j+1 . Readln (n) . R : Tab . FOR i := 1 To 10 Do Write (T[i]:4) . Repeat IF Recherche (V. n. T)). T) = 0 Readln (T[i]) Then Writeln (V. Var n. ' éléments de T '). T[n-i+1] := T[i] . Var T : Array [1. d:=n . Readln (n). i. FOR i := 1 To n Do Readln (T[i]) . Uses Wincrt . tmp : Integer . Until n in [10. n : Integer . Begin Begin Repeat Repeat Write ('N = '). IF V=T[m] Then pos:=m Var i : Integer. FOR i:=1 To n Do Readln (T[i]) . Var T : Tab . n : Integer . Else Writeln (V. T[i] := tmp . Until (10<=n) and (n<=50). j:=0 . i. FOR i := 1 To 10 Do Writeln ('Saisir '. T[2*i]:= T[2*i-1]. End. V). Function Recherche (v. Exercice 12 (************************) Program Recherche_Dichotomique_tab .20] of Integer . IF T[i] < 0 Then Begin FOR i := 1 To (n div 2)-1 Do j := j+1 . Program Regrouper_Tab . Readln (n) . Writeln . tmp := T[k] . pos:=0.50] of Integer . j. Uses Wincrt. End. N. Repeat (***************************) m:=(g+d) div 2 . Readln (v) . Writeln ('Saisir les '.50] of Integer . End . T : Tab) : Integer.50] of Integer. ' ne figure pas dans le tableau'). Exercice 12 Exercice 13 Program Recherche_sequentielle_tab . recherche:= pos . j. FOR j:=i+1 To n-i Do T[j] := T[j+1] . ' se trouve à la position '. FOR j:=i+1 To n Do Repeat IF (T[j] = T[i]) Then T[j]:=0 . Begin Var T : Tab. Begin Begin Writeln (‘Saisir les 10 éléments de T’) . Repeat FOR i:=1 To 10 Do Writeln ('Saisir un entier') . End. Var T : Array [1. FOR i:=1 To n-1 Do i := 0 . Readln (T[i]) . Type Tab = Array [1. N. Writeln ('Saisir les éléments de T') . FOR i := 1 To 10 Do End. FOR i := 1 To n Do Write (T[i]:4) . Else Writeln (v. i. v. End. Writeln ('Donner un entier'). Begin R[j] := T[i] . m. Readln (n). Until (v=T[i]) Or (i=n) . Writeln ('Saisir les éléments de T en ordre croissant'). i) k:=k+1 . FOR i:=1 To n Do Write(T[i]:3) ..

End . Const n_max = 100. FOR i:=1 To n Do End.. Begin Var l.1]:=1.6 .c]:=T[l-1. 1. Writeln . F : Array [1. Begin Write (T[j].c]+T[l-1. Begin Begin FOR i:=1 To n Do Randomize . R[i]:=1. m:=i. Uses Wincrt. Writeln ('Donner le caractère à insérer'). Var A. Program Triangle_Pascal. Var T : Array [1. Exercice 17 Exercice 17 Program Triangle_Pascal. Writeln ('Donner un entier '). n1:=0. FOR c:=2 To l-1 Do Begin T[l. End. ' : '). Var T : matrice. Var i : Integer. i.Exercice 14 Exercice 15 Program Frequence . Writeln ('Donner la position d''insertion'). n0:=0. FOR i:=1 To n Do Begin FOR i:=1 To 6 Do F[i] := 0 . c). Var i. | 44 .. ' '). Const n=20 . Until (n>=1) and (n<n_max). FOR c:=1 To l Do Write (T[l. End. reste:=''.. Repeat FOR i := 1 To n Do Write ('Note élève '. Else Writeln (m. Program Moy_Rang.1]:=1. Writeln (T[1]).6] of 0. N : Integer. T[j]:=T[j]+T[j-1]. Begin Writeln (T[1]). Begin Procedure triangle (n : Integer . Var T : Array [1. Uses Wincrt.n_max] of Char. Uses Wincrt . Repeat FOR i:=1 To n Do Readln (T[i]). FOR l:=2 To n Do End. Var reste. Writeln ('Moyens':25. {décalage des éléments vers droite} IF reste[j]='0' Then n0:=n0+1. Readln (c). Uses Wincrt . T[k]:=c.. i : Integer. End. T[l. FOR i:=1 To 1000 Do Begin Begin Repeat n:=i. T[i] := 1+ Random (6) . Procedure init (n : Integer . End. Write (T[i] : 2) . End. FOR j:=i Downto 2 Do Procedure Afficher (n : Integer . FOR i:=2 To n Do End. j. k. j.20 .n] of Real. End.l]:=1. Begin Begin T[1]:=1.20 . Writeln (‘Saisir les éléments de T’) . Program Nbre_Rond. Var T : Tab). T[l. FOR i := 1 To 6 Do Write (F[i] : 4) . Repeat Until n=0.. c : String. F[T[i]] := F[T[i]] + 1 . Readln (k) FOR j :=1 To Length (reste) Do Until k in [1. R : Array [1. m. n. Begin Readln (A[i]). Type Tab = Array [1. N : Integer. Const n=30.c]. ' '). FOR i:=2 To n Do T[i]:=0.. j : Integer. Var l. End.. i. n0 : Integer. Readln . T:matrice).. End. reste:= c+reste. Begin End. Procedure triangle (n : Integer .n] of 1. n1. End. IF n1=n0 Then Writeln (m. c : Integer. Writeln (A[i]:25:2. Begin IF reste[j]='1' Then n1:=n1+1. FOR l:=1 To n Do End.n]. c : Char. STR (n mod 2. Var T:matrice).15] of Integer. Until (A[i]>=0) and (A[i]<=20). Var T : Tab). FOR j:=1 To n Do FOR i:=1 To n Do IF A[i]<A[j] Then R[i]:=R[i]+1. n : Integer. n:=n div 2. trunc (R[i]):5).. Writeln .15. Uses Wincrt. ' n''est pas ROND'). FOR i:= n Downto k Do T[i+1] := T[i]. Readln (n). Exercice 16 Exercice 18 Program Insert_Tab. i : 1. T[1.c-1]. ' est ROND') FOR i:=1 To n+1 Do Write(T[i]:4). Begin i.15] of Integer.. Type matrice = Array [1. Var T : Tab.. c : Integer. 'Rangs':8). Uses Wincrt.

T).15]. For i:=1 to n do type Mat=array[1.j:integer. n). FOR i := 1 TO n DO Writeln (T[i]) . tmp : String.2]:(12-a+b). T). a. Write ('Nom : ').2]). Const n=30. 'Prénom':15.j]. 'Note 2':10. FOR i:=1 To n Do Begin a:=Length (nom[i. note[i. b:=Length (nom[i. Writeln ('Nom'. n). posmin : Integer . Begin FOR i := 1 TO n DO Readln (T[i]) . | 45 .i]:=aux. var i.n.. begin M[j. FOR i:=1 To n Do End .j]). var a ux.1]).n:integer). remplir (M.(*****************************************) End. trunc(note[i. begin n:integer. Readln (nom[i.j]:=M[j. 1.1]).2]). 'Note 1':10. End. IF T[j] < T[posmin] Then posmin := j . Until n in [2. j:integer.4]:=1. end. Exercice 19 Procedure Transpose (Var M:Mat. End.1]+note[i. Afficher (n. Writeln ('Donner la taille du triangle : '). End. FOR j:=1 To n Do Writeln ('Tableau trié :').. Exercice 20 Exercice 21 Program TRI_SELECTION . ' : '). End. aux:=M[i. End. Program transpose_matrice. M[i.' '). begin begin For j:=1 to n do Write( M[i.3]:10:2. Uses Wincrt. FOR i := 1 TO n-1 DO Write ('Prénom : '). IF note[i. Readln (nom[i. i).3] := (note[i. For j:=1 to n do end. T). T[posmin] := tmp .. Begin (*********************************************) Repeat Begin Writeln ('Donner la taille du triangle : ').nmax].i. Const n = 20 . 'Rangs':10). Var T : Tab . Writeln (nom[i. Var Nom : Array [1. begin const nmax=10. Repeat Until n in [2. note[i. IF i<> posmin Then Begin Until (note[i. readln(n). T[i] := T[posmin] . {Programme Principal} readln(M[i.3] Then note[i. Transpose (M. i. Begin FOR j:=1 To 2 Do posmin := i .i]. Repeat FOR j := i+1 TO n DO Write ('Note '.4]:=note[i.j]>=0) and (note[i. n] of String . tmp := T[i] .4]+1. end. For i:=1 to n do var i. nom[i.. i .4]):9). note[i. Uses Wincrt .15]. For j:=1 to i-1 do var M:Mat. Affiche (M.. Begin End . Type Tab = Array [1. 1. n:integer). begin end.'. until n in [1.. Writeln ('Elèves n° '.j]).j].2]:10:2. Triangle (n.1]:(15-b):2. b : Integer. Init (n.'. Writeln('Donner M['.i. Triangle (n.. End.. begin end.2]*2)/3.n.j.3]<note[j. 'Moyens':10.nmax] of integer. n:integer).']'). Procedure saisie (Var n:integer).. T). Readln (note[i. begin Procedure remplir (Var M:Mat. j.2] of String [50]. For i:=1 to n do writeln.. note[i. repeat end. Readln (n). writeln('Donner n :'). end. Readln (n). Begin Begin FOR i:=1 To n Do Writeln ('Remplir le tableau par des chaînes :'). note[i.j]<=20). Note : Array [1. End. j. Program Moy_Rang. end.1]. saisie (n). n).4] of Real.nmax. uses wincrt. j:integer. Procedure Affiche ( M:Mat. j .1.

for j:=i+1 to n do var i:integer. until t[i]<>''. c[i]:=c[i+1]. IF A1[i]=A2[j] End. n:=n-1 end.j. T2). B[p]:=A1[i]. (**************************************************) procedure affiche (n:integer. Writeln ('Saisir la case '. if (c[i]>c[i+1])or((c[i]=c[i+1])and(t[i]>t[i+1])) t[i]:=t[pos]. readln (c[i]). Begin Readln (A[i]). j:=j+1. Then Begin (****************************************) p:=p+1. m : Integer. t:tch.10] of string[20]. if (length(t[j])<length(t[pos])) OR begin ((length(t[j])=length(t[pos]))AND(t[j]<t[pos])) repeat then pos:=j .99] of Integer. repeat for i:=1 to n do write('ch = '). T2).t. t[i]:=t[i+1]. for i:=1 to n-1 do end. i). begin for i:=1 to n do writeln(t[i]. for i:=1 to n do writeln (t[i]).t. Readln (a[1]). Exercice 23 Exercice 25 program tri_2_criteres. aux:string. aux:=t[i] ..c). tri (n. While (j>1) and (A[i] <> A[j]) Do j:=j-1. readln(t[i]). Program tri_2_criteres. const n=10. affiche_tab (n. End. procedure tri(n:integer. Procedure intersection (nf : Integer . write ('N = '). permut:boolean. ' '). Var p : Integer . end. Procedure remplir_tab (nf : Integer . Begin End. Readln (nf).var c:tc). T1). A:vect). end. Begin End. inter : vect. Writeln . var t:tab. (***************************) end.c).. End. Begin Begin j:=0.n] of string. affiche_tab (m. begin begin writeln('Remplir T :'). type tch=array[1. affiche_tab (n.P******************************) Begin Saisie (n. Repeat Repeat Write ('N = ').t:tch.c:tc). (*********************************************) i. end. procedure saisie(var n:integer. uses wincrt.var c:tc). end. Var T1. (****************** P. Var i. uses wincrt. tmp:char. Repeat Var i : Integer. p:=0. t[i+1]:=aux. Writeln ('Saisir la case 1'). saisie_int (n).pos:integer.99]. intersection (n. FOR i:=1 To nf Do Write (A[i]. affiche (n. Begin n. c[i+1]:=tmp. inter). (*******************P.. A2:vect. (****************************************) FOR i:=2 To nf Do Procedure affiche_tab (nf : Integer . T2. tc=array[1. permut:=true (****************************) end. tmp:=c[i] . Var A:vect).10] of char.P. *********************) Until A[i]<>A[j]. End. write('nom = ').. Until nf in [3. Var i.readln(n). Uses Wincrt. c:tc. for i:=1 to n do writeln ('remplir les tableaux T et C :').c). type tab=array[1. Writeln .. repeat write ('couleur = '). T2. j : Integer.var t:tch. Until (j=nf) Or (A1[i]=A2[j]).c[i]). A1. var i:integer. End.t. var n:integer. var i:integer. remplir_tab (n. | 46 . begin readln(t[i]). until c[i] in ['B'.ecran. j : Integer. Var B:vect). m. until (permut=false) or (n=1).'N'].Exercice 22 (****************************************) Program Intersection_Tab. Type vect = Array [1. permut:=false. j:=i-1.ecran. aux:string. inter).' '. if i<>pos then begin for i:=1 to n-1 do aux:=t[i] . (****************************************) FOR i:=1 To nf Do Procedure saisie_int (Var nf : Integer).var t:tch. begin (*********************************************) pos:=i. then begin t[pos]:=aux. T1). remplir_tab( n. T1. End.

(********************************************) T[i+1]:=aux. end. randomize. begin var i.c2:integer. taille:integer). until (c1>n) or (c2>m).m:integer. if t[i]<t[i-1] if v1[c1]<v2[c2] then begin then begin aux:=T[i].lecture(n). begin fin:=fin-1.var c:integer). write('Taille V2 : '). (**********************P. v3[c]:=v1[i]. writeln('Tableau après le tri :'). (********************************************) (********************************************) procedure remplir(var t:tab.ecran. c:=0. if t[j]<t[min] then min:=j. taille:integer). var i.var t:tab).25].n). readln(n). for i:=debut to fin-1 do t[min]:=tmp.Exercice 24 Exercice 26 Program tri_bulles_bidirectionnel. else begin end.n. v3[c]:=v1[c1]. c:=c+1.v2.fin:=n.25] of integer. end.n). (********************************************) var i. uses wincrt. (********************************************) writeln. n. | 47 . c2:=c2+1. repeat if i<>min then begin permut:=false. remplir(t. type tab=array[1. until taille in [2.n). procedure remplir (var t:tab . n:integer). T[i]:=T[i+1]. var i:integer. c:=c+1.debut. debut:=debut+1.tmp.. end. procedure trier (taille:integer. end. begin begin for i:= 1 to taille do readln(t[i]). end.fin:integer..c1. trier(t. v3[c]:=v2[c2]. end.' '). readln(taille). n:integer). afficher(t. then begin end.v3:tab. aux:=T[i]. var v1. procedure afficher(t:tab. uses wincrt. until n in [5. tmp:=t[i].ecran.n). end end. end. for i:= 1 to taille do write(t[i]:4).aux. begin (**********************) min:=i.var v3:tab. for i:=1 to n do write(T[i].lecture(m).c:integer. writeln('Tableau fusion :'). permut:=true. **********************) for i:=c1 to n do BEGIN begin saisir(n). for i:=1 to n do T[i]:=1+random(100). procedure lecture (var taille:integer). begin END.m. c1:=c1+1. begin var i:integer. min. t[i]:=t[min]. var i:integer.n:integer).v2:tab. if t[i]>t[i+1] end.20]. begin for j:=i+1 to taille do debut:=1.n). c1:=1.. n:integer. end until (permut=false) or (debut>=fin).P.. writeln('Remplir V1 :'). var i:integer. T[i]:=T[i-1]. var t:tab. program fusion. type tab=array [1. afficher(t. end permut:=true. if c1>n then (*********************************************) for i:=c2 to m do procedure afficher(T:tab .20] of integer. T[i-1]:=aux. for i:=1 to taille-1 do permut:boolean.j:integer.P*********************) begin write('Taille V1 : '). (********************************************) end. else (******************* P. end.remplir(v1. end. begin v3[c]:=v2[i]. writeln('Tableau avant le tri :'). (********************************************) (*******************************************) procedure saisir(var n:integer). begin begin repeat repeat writeln('Donner un entier entre 5 et 25'). procedure trier (var T:tab . procedure fusionner(v1. repeat for i:=fin downto debut+1 do c:=c+1. c2:=1.

t1[i]).m).i:integer.ti1.var j:integer.j:integer.j : integer.v2. end.t1).v3.hs1. Var i. gettime(hs1.ms2.t:tab).ss2.remplir(v2. var t:tab. tri2(n.ss2. pm:=posmin(i.c). ELSE s[j]:=s[j]+1.v2). THEN s[i]:=s[i]+1 suite:=t[1]. type tab=array[1. (********* TRI SELECTION **************) End . Procedure permut (var x.ss1. ts1:=(hs2-hs1)*3600*100+(ms2-ms1)*60*100+(ss2-s1)*100+css2- begin css1. end.si2.v1). suite:=t[i].csi2).hs2.f:integer.si1. trier(n. FOR i:=1 TO n DO s[i]:=1.i:integer. max.si2. j:=i. var i:integer.mi1. trier(m. randomize. writeln (max[1]. for j:=d+1 to f do (********** Programme principal ***********) if t[j] < t[pmin] then pmin:=j.. ecran. then Begin t2[i]:=t[i]. lecture_duplic(n. aux:=x. procedure decaler (var t2:tab. end.t2).t2). begin writeln('tri selection : '.' ').mi1. End. y:=aux.t:tab):integer. End .css2. begin affiche(n.j.n. suite:string. type tab=array[1.m. writeln('tri insertion : '. Function posmin(d. Writeln('Saisir un entier pour la taille des tableaux'). end.ss1. var pm.var t1:tab). Decaler(t2. FOR i:=1 TO n-1 DO begin FOR j:=i+1 TO n DO for i:=1 to n do readln(t[i]). var j. var i. Exercice 27 (************* TRI INSERTION *************) Program temps_tris.csi1. end..mi2.csi2. procedure tri2 (n:integer. for i:=1 to n-1 do affiche(n.t2:tab.c). t2[j]:=t2[j-1]. ti1:=(hi2-hi1)*3600*100+(mi2-mi1)*60*100+(si2-si1)*100+csi2- (*************************) csi1. Procedure tri1 (n:integer. end. | 48 . Begin var i:integer. tmp:=t2[i]. (***********************) for i:=1 to n do Begin begin for i:=2 to n do t[i]:=100*random.t2). BEGIN posmin:=pmin. gettime(hi2. length(max)).mi2. gettime(hi1.t2:tab).var rang.css2). (******** lecture et duplication *************) WHILE (j>1)and(t2[j-1]>tmp) DO procedure lecture_duplic(var n:integer.var t2:tab). Readln(n). readln.css1).var t.t1). ' Centième de seconde'). begin begin for i:=1 to n do write(t[i]:2:2.100[ } if t2[i]<t2[i-1] t1[i]:=t[i]. (************** Affichage **************) (*************************) procedure affiche(n:integer. t2[j]:=tmp.ts1. end.y:real). var aux:real.t1). then suite:=suite+t[i] END.si1. writeln('Remplir V2 :').ecran. gettime(hs2.s:tab).ts1. var t. begin j:=j-1.ms2. IF T[i]>T[j] max:=t[1]. if pm<>i then permut(t1[pm].i:integer).hi2. afficher(v3. end. uses wincrt. Exercice 28 Exercice 29 Procedure Trier (n:integer . (****************************) n:integer. pmin:=d.t1.csi1).n] of char. readln. T:tab.t..1000] of real. ' Centième de seconde'). end. x:=y. for i:=2 to n do if t[i]=t[i-1] FOR i:=1 TO n DO rang[s[i]]:=i. program long_suite. begin ms1. { réel aléatoire entre ]0. END. fusionner(v1.windos.pmin. BEGIN const n=20.n.ms1. else begin if length(suite)>length(max) then max:=suite. tmp:real. (**************************) tri1(n.css1. uses wincrt.i). end.ti1:word. i:integer. end.t1. hi1.t1.

END. Then DELETE (ch. Writeln (COPY (ch. Writeln ('Saisir une chaîne'). 1. i. test : Boolean. test:=True. inv : String. p. Then ch[i]:=ch[i] var i. chr := chd + chr . chd) . (***************** P. chd) . Uses Wincrt. Else Writeln (ch. Exercice 4 miroir:=ch. Uses Wincrt . begin FOR i := Length (ch) Downto 1 Do l:=length(ch). ch). chr. End. Readln (ch). Writeln ('Donner une chaîne'). begin Writeln (ch). Readln (ch) . end. inv := '' . i)). Var ch : string. inv := inv + ch[i]. ch[i]:=ch[l-i+1]. Program chaine_inverse. 1.'Z']) Then test:=False. Var ch : String. end. Uses Wincrt . Uses wincrt. chd : String . Writeln ('Donner un mot en majuscule') . Else ch[i]:=CHR (ORD (ch[i]) + 32).ch. 1. Exercice 7 Exercice 6 Program Renverser_ch . Until test=True . i:=0 . End. Readln (ch). p) . l : integer. for i:=1 to l div 2 do IF ch = inv begin Then Writeln (ch. l:=length(ch). Uses Wincrt . i:=i+1. end. P := POS (' '. test : Boolean. i). ' n''est pas palindrome'). Exercice 5 Exercice 5 Program Chaine1 . End.readln(ch). Begin Begin Writeln ('Saisir une phrase') . i : Integer. ' est palindrome') c:=ch[i].. i:=0 . mirch:=ch. 1). lg-i+1. l : integer. test:=True.P ******************) Var ch : String. c : char. lg : Integer. 1). p : Integer . IF Not (ch[i] in ['A'. Program Chaine2. Program Chaine_Majus_Minus. IF ch[1]=' ' DELETE (chd. p := POS (' '. ch: String . Var ch. Until test=True . FOR i:=1 To Length (ch) Do ============== solution 2 ============== IF ch[i] in ['a'. for i:=1 to l do mirch[i] := ch[l-i+1]. Until (test=False) Or (i=Length (ch)). FOR i:=1 To Length (ch) Do ch[i]:=upcase (ch[i]). chr := ' ' + COPY (chd. End. End.. 1). IF ch[Length(ch)]=' ' End . Writeln (ch). BEGIN i : Integer. ch). ch[l-i+1]:=c. 1. Writeln ('La chaîne devient : '. Length (ch).' est : '. (*************************************) Begin Function miroir (ch:string):string. Var p : Integer . Uses Wincrt . chr := '' .'Z']) Then test:=False. 1. i. | 49 . Repeat p := POS(' '. IF Not(ch[i] in ['A'. write('ch = '). {position de 2 espaces dans ch} While p <> 0 Do IF p<>0 Then DELETE (ch. Readln (ch). Begin writeln('l''inverse de '. Program Espace_superflus . Readln (ch) . Var ch : String. Uses Wincrt. miroir:=mirch.. Writeln ('Saisir une chaîne de caractères'). p-1) + chr . Readln (chd) . Until (test=False) Or (i=Length (ch)). Writeln ('Phrase renversée est : '. Begin Until p=0 . i)). Begin Begin Repeat Repeat Writeln ('Donner un mot en majuscule') . FOR i := 1 To Length (ch) Do FOR i:=1 To lg Do Writeln (COPY (ch. LES CHAINES DE CARACTERES Exercice 2 Exercice 3 Program Palindrome. lg:=Length (ch). miroir(ch)). chr) .'z'] Function miroir (ch:string) : string. Repeat Repeat i:=i+1. Var i : Integer . End. var i. Then DELETE (ch. COPY (ch. Writeln . mirch : string.

Program Aerer_ch . Program Occurrence_mot . if (mot1='') and (mot2='') then anagram:=true. anagram:=false. until i>length(ch). mot2). n : integer. then begin IF i = POS (ch[i]. var mot1. k := 0 . ' est une anagramme de '. n). mot2 : string. ch) nb:=nb+1. end. writeln ('saisir un texte'). End. begin var aux : char. n : Integer. begin repeat aux:=a. writeln ('donner deux mots : '). until (m1 > '') and (m2 > ''). end. ch) . i : integer. i. ch1:=ch2.1). delete(mot1. Begin Write('Chaîne 2 = ').Readln (ch1).p. uses wincrt. Uses Wincrt . nb:=0. begin Begin repeat Writeln ('Saisir une chaîne'). end. procedure permut (var a. readln (mot). j. if anagram (mot1. Then ch3:=ch3+ch1[i].m2:string). uses wincrt. Readln (ch). if p>0 begin then begin n:=length (mot). End. mot1). i:=1.ch3)=0) Writeln ('Chaîne aérée = '. readln(m2). ' n''est pas une anagramme de '.Exercice 8 Exercice 9 Program Occurence_car.mot2). for j:=i+1 to n do end. mot2) then writeln (mot2. ch2. readln (m1).mot2:string):boolean. end. mot2) if trie (mot1) = trie (mot2) then writeln (mot1. Then Writeln ('Occurrence de '. Exercice 12 Exercice 12 Program Anagrammes. Write('Chaîne 1 = '). i. b : char).1). Begin ch : String . Exercice 10 Exercice 11 Program Sans_Redondance . FOR i:=1To Length(ch1) Do IF (POS(ch1[i]. until (m1 > '') and (m2 > ''). (********************************************) (*************************************) begin begin saisie_ch (mot1. n:=0. saisie_ch (mot1. Writeln(ch3). ' n''est pas une anagramme de '. Program anagrammes. Writeln ('Saisir une chaîne') . Insert (' '. end. ch3:=''. end. End. Var ch1. trie := mot. Until k = length(ch)-1. mot1) else writeln (mot1. aux : String. var ch. var i. i. if length(ch1)>length(ch2) Readln (ch) . Uses Wincrt.Readln (ch2). a:=b. FOR i:=1 To Length (ch) Do until length (ch)>20. k:=k+2. j. readln (m2). b:=aux. readln (m1). i:=i+k. k)) Then n:=n+1. | 50 . k:=length (mot). end. (*********************************) (****************************************) function trie (mot : string) : string. ' = '. mot : string. else i:=i+1. then begin aux:=ch1. m2 : string). k) . end. var p:integer. begin begin repeat repeat writeln ('donner deux mots : '). ch[i]. for i:=1 to n-1 do delete(mot2. ' figure dans le texte '. mot2). ' est une anagramme de '. end. FOR j:=1 To Length (ch) Do repeat IF ch[i]=ch[j] if (ch[i] = mot[1]) and (mot = copy (ch. nb. ch3. Var ch : String. if mot[i]>mot[j] until (p=0) or (mot1=''). mot[j]). then permut (mot[i]. p:=pos(mot1[1]. repeat ch2:=aux. else writeln (mot2. mot2:string. ' fois'). ch. nb. Uses Wincrt. procedure saisie_ch(var m1. function anagram (mot1. mot2).ch2)<>0)and(POS(ch1[i]. readln (ch).1. end End. writeln (mot. var mot1. k: integer. (*********************************) (*****************************************) procedure saisie_ch (var m1. Begin writeln ('saisir un mot'). Var k : Byte . uses wincrt.

Var se. End. n : Integer.l]) and (n in [1. Var p. rep. j : Integer. Repeat Write ('Nbre caractères = '). i. Program Copie_ch. saisie_let (let). r : Boolean. ma). Writeln (ma). FOR i:=1 To m Do (***************************************) Repeat Procedure masquer (se:chain. i. IF ma=se Then Writeln ('Bravo. r:=False. (***************************************) Readln (let). i:=1 . p). q). Begin While (test=True) and (j<Length (T[i])) Do ma:=se. p. Begin End. j] in ['0'. let:=upcase (let). Until (nb=Length (se)) Or (ma=se). Var T : Tab). End. chinv:=chinv+ch[i]. FOR i:=Length (ch) Downto 1 Do Var i : Integer. ch2 : String. ' '). ma:chain. i:=i+1. Exercice 15 Exercice 16 Program Jeu_pendu . Begin FOR i:= 2 To (Length (se)-1) Do ma[i]:='-'. Begin inverse:=chinv. ch2)..Exercice 13 Exercice 14 Program Pos_ch. Procedure devoiler (se : chain. Write ('ch1 = '). Repeat p:=0. Until (Length (ch2)-i < Length (ch1)) Or (p<>0) . i. Procedure partie_jeu (se. p : Integer.. Begin r:=True. FOR i:=p To p+n-1 Do Writeln ('La chaîne '. let : Char). Until (p in [1. Write ('ch2 = '). Procedure saisie_tab (m : Integer. chr:=chr+ch1 [i].. Until (r=False) Or (i=Length (se)). r:=True. Program Chaines_inverses. IF ch1 = COPY (ch2. IF r=False Then Writeln ('Echec'). Repeat Begin Writeln ('Donner un entier').100] of String [50]. nb:=0. let. Readln (ch1). Length (ch1)) Then p:=i. test : Boolean. Begin r : Boolean. let : Char. ' propositions') | 51 . Repeat nb:=nb+1. End. Begin (****************************************) saisie_entier (n). saisie_tab (n. controle_saisie := r.'9']) Then test:=False. (***************************************) (*********************************) Function controle_saisie (se:chain) : Boolean.P *********************) End. End.. Readln (m). (*************************************) IF Not (se[i] in ['A'. Begin Begin Write ('ch1 = '). Var i : Integer. nb. ma[i]:=let. test:=True. ch1. Begin (***************************************) chinv:=''. chr : String. End. (***************** P. Uses Wincrt. Var i. Readln (p).l]) and (p+n<=l+1). Begin End. l : Integer. Uses Wincrt. IF Not (T [i. Writeln ('Donner l''élément d''ordre '. j:=j+1. q : Tab. Uses Wincrt. Var ch1. ' occupe la position '. ma : chain . FOR i:=1 To m Do Write (T[i].. Until (test=True) and (T[i] <>''). Var nb : Integer. Until (1<m) and (m<100). Uses Wincrt. i). Readln (ch2). Writeln ('Donner une lettre '). j:=0. chr:=''. Var ch1. Var i : Integer. Readln (ch1). Readln (n). i:=i+1. End. End. Writeln (ma). n. ClrScr. Type Tab=Array [1. l:=Length (ch1). chr). Var ma : chain). Var i : Integer. T : Tab). Function inverse (ch : String) : String. let : Char. devoiler (se. i. Var ma : chain). Writeln ('La chaîne copiée est : '. Then Begin Var i : Integer. Write ('Position = '). chinv : String. (***************************************) End. trouvé en '. Procedure saisie_let (Var let : Char). type chain=String [50]. Repeat End. i:=0 . affiche_tab (n. Procedure saisie_entier (Var m : Integer). ' dans la chaîne '. p. Readln (T[i]). FOR i:=2 To (Length (se)-1) Do (***********************************) IF se[i]=let Procedure Affiche_tab (m : Integer.'Z']) Then r:=False. End. FOR i:=1 To n Do Begin q[i] := inverse (p[i]).

i.n:=0. conv_b1_10:=dec. then Val(nch[i]. l. end. End. until test=true.b1). (****************** P. se). uses wincrt. ch2:=esp+copy(ch. for j:=1 to l do writeln(ch2). conv_10_b2:=chb2. Procedure affiche_bas(var esp:string. Function Conv_10_b2 (nd:longint. nch:string. err) write('Base b2 = ').9] then str(r. puiss:=puiss*b1. c). partie_jeu (se. End. writeln (ligne). begin readln(nch). var err. end. if ligne[j] = ligne[j+1] until length(copy(ch. c : string.puiss:longint. length(ch)-n))=1. masquer (se. i : integer. else begin (******************************************) str (nb. b2:integer) : string. end. var i.ch:string). P ******************) Begin Writeln ('Le jeu du pendu').readln(b2). end. (*insert (ch1. begin var ch2:string. | 52 . (*******************************************) n.chb2. Write ('Voulez-vous rejouer (o/n) ? ').')'. n:=n+2. Until Upcase (rep) = 'N'. begin var ch1. begin for i:=1 to n do esp:=''. Function Conv_b1_10 (nch:string. chb2:=ch1+chb2. lignsuiv:=''. writeln ('Donner un nombre en base '. repeat for i:=1 to length(nch) do r:= nd mod b2.P *******************************) Begin saisie_base(b1. n. ligne:='1'. Program suite_mystere. readln (n). lignsuiv:= lignsuiv + c + ligne[j]. Procedure saisie_nombre (var nch:string.' = ('. Readln (se).. uses wincrt. nb:=1.ch:string)..b2:integer). Else Writeln ('Perdu le mot à deviner est '. nb:=1. nb. i. var ligne. (**************** P. then nb:=nb+1 end. Exercice 17 (**** Conversion de la base b1 vers base 10 **********) Program conversion_base1_base2. dec:=dec+n*puiss. b2). var esp. if (pos(nch[i]. length(ch)-n). begin (*******************************************) dec:=0. b2:integer..n:integer. End. dec.16]) and (b2 in [2.i:=1. else n:=ord(nch[i])-55. Procedure affiche_haut(esp.b2).nch. var b1. Procedure saisie_base (var b1. b1). chb2:=''. chb2:string. b2).1)*) end.. (******************************************) end. Const chb='0123456789ABCDEF'. Until controle_saisie (se). nd:= nd div b2 . until (nd = 0). lignsuiv. begin writeln(ch). b1:integer). b1:integer) : longint. ch2:string. let). saisie_nombre(nch. until (b1 in [2.i. Repeat Repeat Write ('Rentrez un mot secret en majuscule : ').i:=i+1.chb)>b1) or (pos(nch[i]. ma).ch1) then test:=false. for i:=length(nch) downto 1 do begin begin repeat if nch[i] in ['0'. (**** Conversion de la base 10 vers la base b2 *********) test:boolean. writeln('('. else ch1:= chr(55+r). j. ecran.16]) and (b1<>b2). write ('N = '). b1). test:=true. conv_10_b2 (conv_b1_10 (nch.ch:string. ecran. ')'. ma. Readln (rep). uses wincrt. esp:=' '+esp.chb)=0) if r in [0.readln(b1).b1. puiss:=1. Writeln . n. Exercice 19 Exercice 18 Program sablier.'9'] write('Base b1 = '). repeat r:integer. Var i:integer. repeat l:=length (ligne).i:integer.n:integer.

| 53 .begin ligne:= lignsuiv. affiche_bas(esp.1. length(ch) div 2-i. delete(esp.n:=1. end. n:=n+2. readln(ch). end. end.ch). until (ch<>'') and (odd(length(ch))). until ch2=ch. (********************PP***********************) begin repeat write('CH = '). repeat end. writeln(ch2). i:=-1.ch). affiche_haut(esp.1).i:=i+1. ch2:=esp+copy(ch. n).

L'appel : afficher (10) . end . i. readln (T[i]). i. n). begin if n=0 then fact := 1 else fact := n * fact(n .i+1. then begin ========== Solution récursive ========== writeln (a * 10 + b). n:integer). T) . n-1) . T) end . then if (b<10) end. L'appel : affiche (0. if n>=1 then begin readln (n). length(ch) .1) . 1. writeln (n). affiche (a. length(ch) . 2.0) . begin begin if (a<4) for n:=10 downto 1 do writeln(n). var T:Tab). else remplir (T. end. end. begin if length (ch) < 2 then palindrome := true else palindrome := (ch[1] = ch[length(ch)]) and (palindrome (copy(ch. n) begin end. Exercice 3 Exercice 4 Procedure saisir (var n : byte). affiche (T.2))). b: integer). n : integer). Procedure afficher (n:integer). n) procedure affiche (T:tab . readln (T[n]). Exercice 4. =============solution 2============= begin Procedure remplir (var T:tab . if (n<1) or (n>31) or (n mod 2 <>0) if T[n]<0 then saisir (n) . ============================= {solution 2} ============================== Function palindrome (ch: string): boolean. LA RECURSIVITE Exercice 1 Exercice 2 Procedure afficher . if n>=1 then begin begin write (T[n]:4). Procedure affiche (a. L’appel : affiche (t. end. Var n:integer. n). i+1. begin begin writeln ('Taper un entier'). i. end. 2. begin if (length(ch)<2) then palindrome := true else if (ch[1] = ch[length(ch)]) then palindrome := palindrome (copy(ch. Exercice 6 Function palindrome (ch: string): boolean. end. n:integer). if T[i]<0 =============solution 2=============== then remplir (T. then remplir (n. end. Procedure affiche (T : tab . L’appel : remplir (t. if i<=n affiche (T. b + 1). afficher (n-1). if i<=n end. then begin end. end.2)) else palindrome := false. 0). Exercice 5 Function fact (n : byte) : real . else remplir (n-1. Procedure remplir (n : integer .n). then begin write (T[i]:4).2 end. 1. begin end if n >=1 else affiche (a + 1. then begin end . end. | 54 .

end. begin if (n=0) then pair := true else pair := impair (n-1) . end. (***************** P. b: Integer ): Integer. begin begin if (a=b) then pgcd := a if (p mod b)=0 else if (a>b) then ppcm := p then pgcd := pgcd (a-b. n) then writeln (n. q : integer) : integer.readln (n). else pair := pair (n-2) . q-1) . a)). ppcm(a. Exercice 8 Exercice 9 Function prosom (p. c : integer) : integer. end . begin begin if (a*c) mod b =0 if (n <= 2) then ppcm := a*c then fibonacci := 1 else ppcm := ppcm (a. Function Pgcd ( a. end . | 55 . b. b. 1)). begin Function impair (n:integer) : boolean.Exercice 7 ===== Solution 2 : récursivité mutuelle ===== Function pair (n:integer) : boolean. else somme := n + somme (n-1) . end . begin begin if (n=0) then puissance := 1 if (a=b) or (b=0) else if (n<0) then Pgcd := a then puissance := 1/puissance(x. n)+i fact_prem(n div i. b-a) . L’appel sera : Writeln ('PPCM = '. else sommediv := sommediv (i+1. end end. if (n=0) then pair := true begin else if (n=1) if (n=0) then impair := false then pair := false else impair := pair (n-1) . i + 1). b) else ppcm := ppcm (a. b. begin begin if (p=0) or (q=0) then prosom := 0 if (n=0) else if q=1 then prosom := p then somme := 0 else prosom := p + prosom(p. Function somme (n : integer) : longint.P ****************) end.1)+fibonacci (n . end . else fact_prem(n. ppcm (a. Exercice 10 Exercice 11 PGCD EUCLIDE Function puissance (x :real . Function pair (n:integer) : boolean. if n = sommediv (1. n:integer):integer. end . p : integer) : integer. end. else pgcd := pgcd (a. end. i : integer).2). n-1) . b : integer) : integer .' '). then sommediv := sommediv (i+1. Function ppcm (a. end. begin begin if (n > 1) then if i>n div 2 if (n mod i)=0 then sommediv := 0 then begin else if n mod i=0 Write(i. write ('N = ').-n) else Pgcd := Pgcd ( b. ' n''est pas parfait'). else puissance := x*puissance (x. begin l’appel sera : fact_prem(n. n). i). p+a) . L’appel sera : Writeln ('PPCM = '. end . Function fibonacci (n : integer) : integer. b. b. Function sommediv (i. Exercice 11 PGCD Différence Exercice 12 Function Pgcd (a. Exercice 12 Exercice 13 Function ppcm (a. Exercice 14 Exercice 15 Procedure fact_prem (n. a mod b ) .' est parfait') else writeln (n. else fibonacci := fibonacci (n . b. c+1) . n : integer) : real. 2). end.

Function som (n : integer):real . n) end. then max := max (t. if (i<=n) for i := 1 to n do p := p * x.Exercice 16 Exercice 16 Function nb_div (i. end.' est premier') then write (n.n-1)+ puiss(x. end. begin var i. then m:=max(t.n) / fact(n). n). n-1)> t[n] for i := 2 to n do f := f * i. n) then write (n.P ************) (************** P. end. m. n:integer):boolean. then if (t[i]>m) puiss := p. if n=0 then expn:=1 L’appel : write ( max(t. m. end. begin end. readln (n). n)+1 then exist_div := true else nb_div := nb_div (i+1. n). Function max (t:tab . end. n) = 2 if exist_div (2. else max := t[n] . (************** P. n:integer):integer. som:= terme + som(n-1). else m:=max(t. i+1. function fact (n : integer) : integer. begin begin if (i>= n div 2) if (i>n div 2) then nb_div := 2 then exist_div := false else if (n mod i=0) else if (n mod i=0) then nb_div := nb_div (i+1. function puiss (x : real. readln (n). Exercice 18 Exercice 19 Function som (n : integer):real . p : real. n). write ('N = '). end. begin begin p := 1.i. f : integer.n:integer):integer. signe:integer. end. i+1. t[i]. n)) . | 56 . n : integer) : real. then som:=1 end.' est premier'). 2. else exist_div := exist_div (i+1. end. (*************************************) var m:integer. else expn:=expn(x. ============ Solution 2 ============ var i : integer. Exercice 17 Exercice 20 Function expn (x : real. begin Var terme :real. (************************************) max:=m. Function max (t:tab . else write (n. if n=1 begin then som := 1 if n=0 else som := 1/n + som (n-1). n-1) fact := f. if nb_div (2. if n=1 begin then max := t[1] f := 1. else if max (t. n:integer):integer. t[1]. terme:=signe * 1/(2*n+1) .' est non premier').P ************) begin begin write ('N = '). n : integer) : real.' est non premier') else write (n. Function exist_div (i. else begin if n mod 2 = 0 then signe := 1 else signe :=-1. end.

n-1. p.T) else if (val > T[milieu]) and (fin > milieu) then dichotomique := dichotomique (milieu+1. p. if st = '' then inverse := '' Function max (a. end. t). f : integer) . else if (val < T[milieu]) and (deb < milieu) End. end. solution 2 : (*****************PP**********************) Function cherche (i. b-1. then cherche:=0 writeln('Liste des valeurs les plus proches de '. delete(st. n. milieu-1. Function cherche (elm. p + 1. t : tab):integer. write('b = ').readln(a). BEGIN begin Saisir (n. length(st) . if a=0 end. end end. inverse(st). writeln('La valeur max = '.1). c := st[length(st)]. n . st := c + st. val : integer . 1.max(a. length(st). fin. END. Exercice 27 Exercice 28 program maximum. then dichotomique := true End.val. 1). else cherche:=cherche (i+1. t[d]:=t[d+1]. for i:=1 to n do end. d. n : Integer). then dichotomique := dichotomique (deb. else inverse := st[length(st)] + begin inverse(copy(st. else cherche:=cherche (t. t). begin begin if st <> '' then begin write('a = '). If p <= n Then begin Begin milieu:=(deb+fin) div 2. begin var a. if val = T[milieu] t[p+1] := t[p]. end. acc+1). then max:=b+acc ============ Solution 2 ============== else if b=0 then max:=a+acc Procedure inverse (var st: string). Procedure permuter (var t : tab .' est :'). end. End.m:integer):integer.Exercice 21 Exercice 22 Function cherche (t:tab. elm. 1. Function inverse (st: string): string. var aux:integer. | 57 . end. Begin var milieu:integer. n. if abs (m-t[i]) = diff then write(t[i]. fin.m. permuter(t. else if i=n diff:=cherche (t. else cherche := cherche (elm. p+1. t).b.acc:integer):integer. (deb. else max:=max(a-1. n. m). Begin begin If p < n Then if d < f then Begin begin aux := t[p]. t:tab) : boolean.0)). end. Var c: char. then cherche := true cherche:=cherche (t.f). t[n] := aux. begin begin if n=1 then cherche:=diff if n=0 else if abs(t[n]-m)<diff then cherche:=false then begin else if elm = t[n] diff:=abs(t[n]-m).m).d+2. n-1. n-1. end. elm :integer . Inverser (t. if elm=T[i] then cherche:=i diff:=abs (t[1]-m).val.b. end. Exercice 25 Exercice 26 Procedure Inverser (Var t : Tab.readln(b). m).' ').acc:integer. Exercice 23 Exercice 24 Function Dichotomique Procedure Decaler (Var t : Tab. n) . aux:=t[d]. m.b. n). t[d+1]:=aux.1)). n : integer). Appel : permuter (t. End. Decaler (t. t:tab) : boolean . n : integer . t[p] := t[n]. Var aux : Real.T) else dichotomique := false.n. uses wincrt.

while (j>1) and (t[j-1]>tmp) do j:=i . (**************************) end. tri_bulles (t. var t:tab). (*********************************) var j. var t:tab). Procedure tri_selection (deb. begin var tmp. begin end. procedure permut (var x. then permut (t[j]. T). n. end. tri_selection (n-1. end. var T:tab). t). end. tri_bulles (t. end. begin (**************************) If n>1 then begin begin if deb<>n then p := posmax (n. pos:=posmax (deb. i+1. p. n. begin var max. var T:tab). permut:boolean). t). n. function posmax (n:integer. posmax:=max. end . j:=j-1 . t[j+1]). T). t). (var t:tab . false). tri_insertion (n-1. n:integer . Exercice 30 =============solution 2================ Procedure tri_insertion (n:integer . end.n:integer. | 58 . if (t[j]>t[j+1]) t[i+1]:=aux. end. end. (**************************) var i. var t:tab). j : integer). false). begin (**************************) if (n>1) begin then begin if (i<=n-1) for i:=1 to n-1 do then begin if t[i]>t[i+1] then begin if (j<=n-i) aux:=t[i].Exercice 29 Procedure tri_selection (n:integer. if (permut=true) then tri_bulles (t.y:integer).n:integer . j:integer. i. (**************************) var max. t). end. begin for j:=2 to n do max:=deb. if t[j]>t[max] then max:=j. t[j]:=tmp.T). if T[j]>T[max] then max:=j. t[j]:=tmp. Appel : tri_selection (n. T). 1). (**************************) var pos:integer. var t:tab).y:integer. end. n. 1. Appel : tri_bulles (t.T:tab):integer. j:=n. begin if p<>n then permuter (n. t). Exercice 31 =========== solution 2================ Procedure tri_bulles Procedure tri_bulles (var t : tab . n. for j:=deb+1 to n do posmax := max. T[pos]). n:integer . procedure inserer (n:integer .y:integer). tmp : integer . Appel : tri_insertion (2. 1). end . =============solution 2================ var p:integer. n-1. (**************************) (**************************) procedure permuter (var x. max:=1. end. begin j:=j-1. if (i<=n) begin then begin if t[n]<t[n-1] then if t[i]<t[i-1] begin then begin tmp:=t[n]. end.n. function posmax(deb. Appel : tri_selection (1. Procedure tri_insertion (i. n. procedure permuter (x. inserer (n. end. aux : integer. if pos<>deb then permuter (T[deb]. n. end. n. tri_selection (deb+1. permut:=true. j+1).j:integer. end . end. end. t:tab):integer. t). t[j]:=t[j-1]. begin while (t[j-1]>tmp) and (j>1) do t[j]:=t[j-1]. tmp:=t[i].j:integer. t). i. if n>=2 then begin end. then begin t[i]:=t[i+1]. (********************************) tri_insertion(i+1. n. Appel : tri_bulles (t.

end. else teste := false. copy(ch.1. begin begin if n<>0 then if n=0 then nb_occ:=0 if ch[n]=c else if ch[n]=c then begin then nb_occ:=nb_occ (n-1. Exercice 36 Exercice 37 Function sc (n:integer):integer. ch:string .1). n.Exercice 32 Exercice 33 Procedure Tri_Shell_Rec (Var t:TAB. for k:=d to f do T[k]:=temp[k].i : integer.f. end. ch.t).n. ch:string):Boolean. (* fusionner *) end . end Until (i = pas) or (aux > t[i . else nbc := 1+ nbc (n div 10). Function nbc (n:integer):integer. (**************************) Begin if f>d then begin m:=(d+f) div 2. End. c)) .d.mot2). delete(mot2. end. Exercice 38 Exercice 39 Function anagram (mot1. var m : integer. ch). Function nb_occ (n:byte . pas :integer).pas]. then teste:=true else teste:= teste (c. Procedure tri_fusion (d. n-1. begin Begin if c = ch[i] if (mot1='') and (mot2='') then teste:= true then anagram:=true else if i < length(ch) else begin then teste := teste (i+1. | 59 . If n > pas Then i. f :integer . c) supprim (c. ch) p:=pos(mot1[1]. Begin var temp:tab. begin (***************************) If pas > 0 Then procedure fusionner(var t:tab.m. c. begin begin Tri_Shell_Rec (t. c:char. Appel : writeln(nb_occ (length(ch). if (mot1<>'')and(p>0) end. end.d. End. If t[n] < t[n . c:char):byte. var ch:string). i:=i+1. begin begin if n<10 if n <10 then sc := n then nbc := 1 else sc := (n mod 10) + sc (n div 10).m. ch. end. else if ch[1]=c end. then begin Repeat temp[k]:=T[i]. Var p:integer. Begin for k:=d to f do aux:= t[n]. n .1). else begin t[i] := aux. i := i .mot2). c)+1 delete(ch. pas Div 3). i:=d. End. end else supprim (c. then begin ============ solution 2 ============= delete(mot1. else nb_occ:=nb_occ (n-1. var T:tab).f). ch).m. n:integer . End.pas]). Tri_Shell_Rec (t. if (j>f) or((i<=m) and (T[i]<T[j])) i := n. end. pas).pas. (* trier partie droite *) fusionner (t. temp[k]:=T[j].mot2:string):boolean. begin anagram:=anagram(mot1.p. if (ch='') or ((length(ch)=1)and(ch[1]<>c)) end then teste:=false else anagram:=false. Function teste (i:integer .pas] Then j:=m+1. t[i] := t[i . n. ch: string):boolean.j. Function teste (c:char . Var aux.f:integer). end . ch. end.t). j:=j+1. (* trier partie gauche *) tri_fusion (m+1.2. tri_fusion (d.length(ch)-1)). Exercice 34 Exercice 35 Procedure supprim(c:char .k:integer.pas. n-1.1). End.

length(st) . l: integer):integer. Ack (m. i-1 ). val (copy(st. a. n :integer):integer.l-1)+ else MacCarthy := MacCarthy (MacCarthy (n+11)). if length(st) = 0 then eval := 0 Function eval0(st: string): integer.1) else begin else Ack := Ack (m-1. end. e: integer. Program mini_cal. 1. write( 'La somme = : '. i-1 ). i . Exercice 46 Function eval (st: string): integer. 1. else begin var a. 1. readln (st). end. eval := a + eval(st) delete(st. eval (st)).1. end. i:=1.ch : string):string.'-']) or (i>length(st)). end. uses wincrt. i.2. Exercice 42 Exercice 43 Function val_triangle (c. Function ack (m. begin val (copy(st. delete(st. i:=i+1.l-1). ack:= n + 1. Function eval (st: string): integer. end.copy(ch.1)). m := m – 1. begin var e:integer. end. e: integer. n .1) . i := i-1 a:=eval0(copy(st. Exercice 44 Exercice 45 Function Ack (m. until (i = 0) or (st[i] in ['*'. suppr_car(mot[1].ch : string):string. e). begin 1 : if ch[1]=c then suppr_car:='' if mot='' else suppr_car:=ch.2.10 else val_triangle := val_triangle(c. i. repeat ======Implémentation itérative========== i:=i+1. end.lettres)) else constructible:=false. val_triangle (c-1. end. if m = 0 begin then Ack := n+1 if length(st) = 0 else if n = 0 then eval := 0 then Ack := Ack (m-1.lettres) then suppr_car:=copy(ch. end.2. if st[i] = '*' end.lettres : string):boolean. else eval0 := a. i + 1. signe: char. | 60 . '/']). begin var a.a. constructible(copy(mot. i . end. Function MacCarthy (n: integer): integer.1) + then constructible:=true suppr_car(c. repeat until (st[i] in ['+'. n : integer) : integer.e). then constructible:=true else if ch[1]=c else if teste(mot[1].length(ch)-1)). begin begin if (c=1) or (l=c) if n >100 then val_triangle := 1 then MacCarthy := n . until (st[i] in ['+'. end. n-1)) i:=1. length(st) .length(mot)-1). 1. begin eval := a + eval (st). end. i. begin function suppr_car(c:char. Function Constructible (mot. ch:string):Boolean. var a.1 + i). case length(ch) of function teste (c:char . st:string .'-']) or (i>length(st)). while m <> 0 do delete(st.Exercice 40 Exercice 41 Function suppr_car (c:char. if n = 0 then n := 1 else n := ack (m.length(ch)-1) then if length(mot)=1 else suppr_car := copy(ch. i: integer. begin repeat i := length(st).i). then eval0 := eval0 (st) * a begin else if st[i] = '/' write ('Entrer une chaîne formée d''une somme de then eval0 := eval0 (st) div a nombre :'). else constructible := end. 0 : suppr_car:=''.1).

combinaison(copy(ch. ''). begin if ch <> '' then begin Writeln (ch). Affiche (copy(ch. ch := copy(ch. 2. eval := n1 + eval (copy(s. end. var n1: integer. else begin n1 := valeur (s[1]). 2. Var ch: String . ch:=tete+ch. case c of begin 'M': valeur := 1000. end . length(ch)-1)). 1. Exercice 49 Program Chaine. begin end. length(s) . length(ch)-1). Procedure combinaison(ch.1)). 2. function eval(s: string): integer. (***************************************) Begin Readln (ch). end. then begin 'C': valeur := 100. (***************************************) Procedure affiche (ch:string). begin var i: integer. length(ch)-1) + ch[1] . End. for i := 1 to length(ch) do end. tete+ch[1]). | 61 . end.Exercice 48 Exercice 47 Function valeur(c: char): integer. end. else 'I': valeur := 1. Affiche (ch). if length(s) = 1 then eval := valeur(s[1]) Appel : combinaison (ch. if n1 < valeur (s[2]) then n1 := -n1. tete: string). end 'V': valeur := 5. begin end. 'L': valeur := 50. if length(ch) = 1 'D': valeur := 500. writeln(ch) 'X': valeur := 10. Uses Wincrt .

© Edition le libre savoir .