Objectif:
Révision générale en programmation pour les élèves 4si
Exercice 1 : Vecteur d’enregistrements
Exercice 2 : Tri par comptage
Exercice 3 : Vérifier si un tableau est Trié
Exercice 4 : Traitement récurrent : Suite (1)
Exercice 5 : Traitement récurrent : Suite (2)
Exercice 6 : Algorithmes arithmétiques
Exercice 7 : Décomposition en facteurs premiers
Exercice 8 : Conversion entre les bases de numération
Exercice 9 : Premier Factoriel
Exercice 10 : Traitement récurrent : Suite (3)
Série de 10 exercices : Exercice 1 :
(Le vecteur d’enregistrements)Soient les déclarations suivantes :
Objet Type / Nature Rôle
T F P1, P2 X, Y e
Vect Texte Personne Entier Octet
Tableau contenant les informations des de personnes Fichier texte
Deux personnes Stocker deux données Position de l’erreur
Travail à faire :
En se basant sur les déclarations précédentes, dire pour chacune des instructions
suivantes si elle est valide ou non. Dans le cas où l’instruction est invalide, justifier votre réponse.
Type date = Enregistrement J, M, A : mot Fin date
Personne = Enregistrement CIN : entierlong N, P : chaine [20]
T : chaine [8]
DN : date
S : tableau [1..12] de réel Fin Personne
Vect = Tableau [1..35] de Personne
Instruction Valide Invalide Justification
1 X Ent(15.5) div 3 2 T[2].S[3] 1.5 + 2 3 Ecrire (P1.DN)
4 P1.CIN -10 div 2 5 Valeur (X, P1.S[1], e) 6 P1.NP2.P
7 T[4].date.J 5 8 Lire_nl(F, abs(-122)) 9 P1.N "Personne"
10 Ecrire_nl(F, P1) 11 Lire(T[1].DN.J) 12 T[1].S[13] 10/2
Solution exercice 1 :
Instruction Valide Invalide Justification
1 X Ent(15.5) div 3 * L’opérateur div ne s’applique pas sur les réels et Ent(15.5) donne un réel
2 T[2].S[3] 1.5 + 2 *
3 Ecrire (P1.DN) * Impossible d’afficher un enregistrement tout entier mais champ par champ 4 P1.CIN -10 div 2 *
5 Valeur (X, P1.S[1], e) * Le premier paramètre de la procédure valeur qui est X doit être de type chaine et non pas de type entier
6 P1.NP2.P *
7 T[4].date.J 5 * L’enregistrement personne n’a pas un champ nommé date mais un champ DN 8 Lire_nl(F, abs(-122)) * Le deuxième paramètre de la procédure
Lire_nl doit être un nom d’une variable et non pas une valeur.
9 P1.N "Personne" *
10 Ecrire_nl(F, P1) * Il est impossible d’écrire un
enregistrement tout entier dans un fichier texte mais champ par champ 11 Lire(T[1].DN.J) *
12 T[1].S[13] 10/2 * La taille maximale du tableau S est 12 et non pas 13.
Exercice 2 :
(Le tri par comptage)Soit le principe suivant de tri par comptage qu’on peut appliquer sur un tableau rempli par des entiers distincts afin de les trier par ordre croissant dans un deuxième tableau : Principe de tri comptage :
Pour chaque élément du tableau T :
1- Calculer le nombre nb d’éléments qui lui sont strictement inférieurs 2- Placer cet élément dans la position nb+1 du tableau V
1- Appliquer le principe précédant sur le tableau T suivant et remplir le tableau V.
14 2 21 5 7 36
2- Donner l’algorithme d’un module tri par comptage qui permet d’ordonner par ordre croissant les éléments d’un vecteur T de type TAB dans un deuxième tableau V de même type sachant que le vecteur T peut contenir N entiers.
NB : N est déjà saisie et le tableau T est déjà rempli dans le programme appelant.
T
...
V
Solution exercice 2 :
1/ Application du principe précédant sur le tableau T et remplissage du tableau V.
14 2 21 5 7 36
2 5 7 14 21 36
2/
0) DEF PROC Tri_comptage(T :tab ; var V :tab ; N :entier) 1) pour i de 1 à N faire
nb0
pour j de 1 à N faire si T[j]<T[i] alors nbnb+1 Fin si
Fin pour
V[nb+1] T[i]
Fin pour
2) fin Tri_comptage
T
...
V
Exercice 3:
(Le tri)Soit l’algorithme de la fonction f suivante :
0) DEF FN Quoi (T :TAB ; N : entier) : …………
1) i 1 Répéter
i i+1
ok T[i-1] > T[i]
Jusqu’a ( Non (ok) ) ou (i = N) 2) Quoi ok
3) Fin Quoi
Avec TAB un type utilisateur représentant un tableau de 20 réels et T un tableau de N éléments.
Questions :
1) Dresser le Tableau de Déclaration des Objets Locaux de la fonction Quoi 2) Donner le type de la fonction Quoi
3) Soit le tableau U suivant :
U 2 7 ………. 15.3 29 ………. 30
1 2 3 4 5 6 7
Et soit l’appel de la fonction Quoi dans un programme : Si Quoi(U,N) alors
ecrire ('' les valeurs sont correctes'') Sinon
ecrire ('' les valeurs ne sont pas correctes'') FinSi
Proposer deux valeurs à mettre dans la 3éme et la 6éme case du tableau U, pour que le programme appelant affiche le message '' les valeurs sont correctes''
4) Quel est le rôle de cette fonction ?
Solution exercice 3:
1) Le TDOL de la fonction Quoi : Objet Type / Nature Rôle i
ok Entier
Booléen Compteur
Variable de test
2) Le type de la fonction Quoi : Booléen
3)
4) Le Rôle de la fonction Quoi :
La fonction Quoi vérifie si un tableau formé par N réels est trié par ordre décroissant ou non. Si oui elle renvoie Vrai sinon elle renvoie Faux.
Une valeur comprise entre ]29 .. 30[
Une valeur comprise entre ]7 .. 15.3[
Exercice 4 :
(Le traitement récurrent : Suite 1) Soit la suite U définie par :U
1= 5
U
n= 2 * U
n-1+ 1
1- Calculer U2, U3, U4 et U5.
2 – Quel est l’ordre de récurrence de la suite U ? justifier votre réponse.
3- Donner la fonction écrite en Pascal qui prend en paramètre un entier N et renvoie la valeur du Nième terme de la suite.
Solution exercice 4 :
1- Calculer U2, U3, U4 et U5. U2 = 2 * 5 + 1 = 11 U3 = 2 * 11 + 1 = 23 U4 = 2 * 23 + 1 = 47 U5 = 2* 47 + 1=95
2 – Quel est l’ordre de récurrence de la suite U ? justifier votre réponse.
La valeur d’un terme de la suite U dépend d’une seule valeur précédente Un-1 donc l’algorithme qui calcule le terme de la suite U est un algorithme récurrent d’ordre 1.
3- Donner la fonction écrite en Pascal qui prend en paramètre un entier N et renvoie la valeur du Nième terme de la suite.
Exercice 5 :
(Le traitement récurrent : Suite 2) Soit la suite U définie par :U
1= 5 U
2= x
U
n= 2 * U
n-1+ U
n-2+ K ,
avec x un entier naturel non nul et K un réel 1- Sachant que x=3 et k=1/2 Calculer U3, U4 et U5.2 – Quel est l’ordre de récurrence de la suite U ? justifier votre réponse.
3- Donner la fonction écrite en Pascal qui prend en paramètre N, x et K et renvoie la valeur du Nième terme de la suite.
Solution exercice 5 :
1- Sachant que x=3 et k=1/2 Calculer U3, U4 et U5. U3 = 2 * U2 + U1 + 0.5 = 2*3 + 5 + 0.5 = 11.5 U4 = 2 * U3 + U2 + 0.5 = 2* 11.5 + 3 + 0.5 = 26.5 U5 = 2 * U4 + U3 + 0.5 = 2* 26.5 + 11.5 +0.5 = 65
2 – Quel est l’ordre de récurrence de la suite U ? justifier votre réponse.
L’ordre de récurrence de la suite U est égal à 2 car pour calculer la valeur d’un terme U de la suite on a besoin de deux termes précédents Un-1 et Un-2.
3- Donner la fonction écrite en Pascal qui prend en paramètre N, x et K et renvoie la valeur du Nième terme de la suite.
Exercice 6 :
(Algorithmes arithmétiques)Donner l’algorithme d’un module permettant de calculer et retourner la somme S suivante sachant que N est un entier positif et x un réel positif déjà saisis au niveau du programme appelant.
𝑆 = 3 − 𝑥
1! + 𝑥
22! − 𝑥
33! + ⋯ (𝑥)
𝑁−1(𝑁 − 1)!
solution exercice 6:
0) DEF FN SOMME (N :entier ; x :réel) : réel 1) sig -1 , s 3
Pour i de 1 à N-1 faire
s s+ sig * (FN puis(x,i) / FN fact(i)) sig- sig
Fin pour 2) SOMME S 3) Fin SOMME
Objet Type / Nature Rôle i
sig s puis fact
Entier Entier Réel Fonction Fonction
Compteur Signe Somme
Calculer la puissance Calculer la factorielle
0) DEF FN Puis (x :réel ; y:entier) : réel 1) P1
Pour i de 1 à y faire P P*x
Fin pour 2) Puis P 3) Fin Puis
Objet Type / Nature Rôle i
P Entier
réel Compteur
La valeur de la puissance
0) DEF FN fact (x :entier) : entierlong 1) F1
Pour i de 1 à x faire FF*i
Fin pour 2) fact F 3) Fin Fact
Objet Type / Nature Rôle i
F Entier
entierlong Compteur
La valeur de la factorielle
Exercice 7 :
(Décomposition en facteurs premiers)On demande de faire l’algorithme d’un module qui prend en paramètre un entier strictement positif X et l’affiche sous forme d’un produit de ses facteurs premiers comme le montre l’exemple suivant :
Exemple :
Pour X=112 le programme doit afficher :
112 = 2*2*2*2*7
Solution exercice 7 :
0) def proc factprem (x :entier) 1) i2 , convch(x,ch), chch + "="
2) repeter
si (x mod i = 0) alors convch(i,r) chch+r+ "*"
xx div i sinon ii+1 fin si
jusqu'à(x=1) 3) ecrire (ch) 4) fin factprem
Le TDOL de la fonction factprem :
Objet Type / Nature Rôle i
ch r
Entier Chaine chaine
Compteur
Le résultat à afficher
Stocker la valeur du compteur i sous forme de chaine
Exercice 8 :
(Conversion entre les bases de numération) Soit R un réel de l'intervalle 0, 1.En binaire, R s'écrit sur n chiffres après la virgule comme suit : 0.C1C2C3C4C5…Cn-1Cn avec Ci est un chiffre binaire (0 ou 1)
Pour déterminer les chiffres après la virgule de l'équivalent binaire du réel R, on suit le procédé suivant :
1. Calculer C1 en multipliant R par 2
Si 2 * R < 1, alors C1 est égal à zéro et on remplace R par 2 * R
Si 2 * R ≥ 1, alors C1 est égal à 1 et on remplace R par 2 * R – 1 2. Répéter n fois l'étape 1 jusqu'à calculer Cn
Exemple 1 :
Pour R = 0.825 et n = 5, l'équivalent binaire de R est 0.C1C2C3C4C5 se calcule comme suit :
2 * 0.825 = 1.65 ≥ 1 d'où C1 = 1 et on remplace R par 0.65 = (2 * 0.825 – 1)
2 * 0.65 = 1.3 ≥ 1 d'où C2 = 1 et on remplace R par 0.3 = (2 * 0.65 – 1)
2 * 0.3 = 0.6 < 1 d'où C3 = 0 et on remplace R par 0.6 = (2 * 0.3)
2 * 0.6 = 1.2 ≥ 1 d'où C4 = 1 et on remplace R par 0.2 = (2 * 0.6 – 1)
2 * 0.2 = 0.4 < 1 d'où C5 = 0 et on remplace R par 0.4 = (2 * 0.2) D'où l'équivalent binaire à 5 chiffres après la virgule de 0.825 est 0.11010 Exemple 2 :
Pour R = 0.625 et n = 4, l'équivalent binaire de R est 0.C1C2C3C4 se calcule comme suit :
2 * 0.625 = 1.25 ≥ 1 d'où C1 = 1 et on remplace R par 0.25 = (2 * 0.625 – 1)
2 * 0.25 = 0.5 < 1 d'où C2 = 0 et on remplace R par 0.5 = (2 * 0.25)
2 * 0.5 = 1.0 ≥ 1 d'où C3 = 1 et on remplace R par 0 = (2 * 0.5 – 1)
2 * 0 = 0 < 1 d'où C4 = 0 et on remplace R par 0 = (2 * 0) D'où l'équivalent binaire à 4 chiffres après la virgule de 0.625 est 0.1010 Travail demandé
Écrire un algorithme d'une fonction de type chaîne, nommée RBin, qui dépend des deux paramètres R, n et permet de retourner "0.C1C2C3C4C5…Cn-1Cn" : la représentation binaire, sur n chiffres après la virgule, d'un réel R de l'intervalle 0, 1 en utilisant le procédé décrit ci-dessus.
Solution exercice 8 :
Exercice 9 :
(Premier Factoriel)Un nombre PF est dit premier factoriel s’il vérifie les deux propriétés suivantes :
PF est un nombre premier
et PF s’écrit sous la forme d’un factoriel incrémenté ou décrémenté de 1 (PF=F!+1 ou PF=F! – 1) Sachant que le factoriel de F noté F! est égale à F*(F-1) * ... * 1
Exemples :
7 est un nombre premier factoriel car 7 est premier et il s’écrit sous la forme 3!+1.
719 est un nombre premier factoriel car 719 est premier et il s’écrit sous la forme 6! -1.
Travail demandé :
1- Faire une fonction booléenne (en pascal) qui vérifie si un entier X est premier factoriel ou non. Sachant que X est un entier positif déjà saisi au niveau du programme appelant.
2- Faire un module(en pascal) qui affiche les N premiers nombres premiers factoriels (avec 4<N<10) en utilisant la fonction précédente.
Solution exercice 9 :
1 2
Exercice 10:
(Le traitement récurrent : Suite 3) Soit la suite (U) définie par :U0 = 2 U1 = 3
Un = Un-1 + 2* Un-2 1- Calculer U3 et U4
2- Supposant que cette suite est croissante, écrire un programme pascal permettant de lire un entier x (x>3), de vérifier et d’afficher s’il est un terme de la suite U ou non.
Dans l’affirmative, afficher son rang.
Solution exercice 10 : 1- U0 = 2
U1= 3
U2= 3+2*2 = 7 U3=7+2*3= 13 U4=13+2*7 = 27
Problème 1 :
1- Lancer l’éditeur de texte disponible sur votre machine et créer le fichier
"c:\calcul.txt" et y saisir les opérations d’additions suivantes : 21+15+1+12+17
1+521+2
255+120+19+15+10+14+5 11+5
170+1258+10 12+190+12+100
2- On vous demande de faire le programme pascal qui permet de créer un deuxième fichier "c:\resultats.txt" contenant sur chaque ligne une opération du fichier
"c:\calcul.txt", suivi du signe "=" suivi du résultat de l’opération d’addition comme le montre l’exemple suivant :
3- Afficher le contenu du fichier "c:\resultats.txt"
21+15+1+12+17=66 1+521+2=524
255+120+19+15+10+14+5=438 11+5=16
170+1258+10=1438 12+190+12+100=314 Le fichier "c:\resultats.txt"
Solution Probleme 1:
Problème 2 :
On désire faire un programme Pascal intitulé PALINDROME qui permet de:
1- Remplir un fichier texte D:\mots.txt par des chaines de caractères à raison d’une chaine par ligne. La saisie s’arrête une fois la réponse à la question ''autre saisie O/N ? '' est ''N'' ou ''n'' . Sachant que chaque chaine de caractères doit être non vide et formée unquement par des lettres alphabétiques.
2- Afficher toutes les chaines palindromes qui se trouvent dans le fichier D:\mots.txt Remarque :
Une chaine est dite palindrome si elle peut être lue de droite à gauche comme de gauche à droite.
Exemple de chaines palindromes :
radar, AzizA, sos, (2+2) ….
Solution Problème 2:
Problème 3 :
Ecrire un programme Pascal nommé alphabet qui permet de:
1- Remplir une matrice M carrée d’ordre N (avec 5 ≤ N < 20) par des lettres alphabétiques majuscules de façon aléatoire.
2- Afficher le contenu de la matrice ligne par ligne comme le montre l’exemple.
3- Calculer et afficher le nombre des voyelles ainsi que celui des consonnes qui se trouvent dans la matrice M comme le montre l’exemple.
4- Ecrire votre nom et prénom sous forme de commentaire au début du programme.
Exemple :
Pour N = 5 et la matrice M suivante remplie aléatoirement, le programme doit afficher les resultats suivants :