Exercice 1 : Application du Cours / 4pts
1. Définissez : algorithme, objet. – 1pt + 0.5pt
Algorithme : suite ordonnée d’instructions qui indique la démarche à suivre pour résoudre un problème ou effectuer une tâche.
Objet : case mémoire destinée à contenir des valeurs de type défini au préalable.
2. Donner la structure générale d’un programme PASCAL.
program NomDuProgramme;
var
// déclaration des variables
begin
// début du programme
// instructions
end.
3. On vous propose d’écrire un algorithme calculant le périmètre d’un cercle de diamètre entier:
a. Identifiez les données du problème. – 0.5pt
Les seules données de ce problème sont le diamètre du cercle et la constante ?.
b. Identifiez le(s) résultat(s) escompté(s). – 0.5pt
Le seul résultat attendu est le périmètre du cercle défini par le diamètre pris en entrée.
c. Déclarez tous les objets. – 1pt
const PI = 3.1415;
var diametre : entier;
perimetre : reel;
4. Soient les expressions suivantes :
i) A ou B
ii) (A - 1 > 0) et (B < 0)
iii) (A = "M" et B >= 21) ou (A = "F" et B >= 25)
a. Quels sont les possibles types de A et B dans chacun des cas ci-dessus ? – 0.5pt x 3
Cas i) A et B doivent être des booléens
Cas ii) A et B doivent être des nombres (entier ou réel)
Cas iii) A doit être une chaîne de caractères et B un nombre (entier ou réel)
b. Évaluer iii) pour A="M" et B=20. – 0.5pt
iii) ≡ (A = "M" et B >= 21) ou (A = "F" et B >= 25)
≡ ("M" = "M" et 20 >= 21) ou ("M" = "F" et 20 >= 25) pour A="M" et B=20
≡ (Vrai et Faux) ou (Faux et Faux)
≡ Faux ou Faux ≡ Faux
Exercice 2 – 7pts
On se propose d’écrire un algorithme pour l’évaluation de la formule A suivante en fonction de la valeur de n entrée par l’utilisateur :
? = ∑k=1n kn−k+1 = 1n + 2n−1 + ⋯+ n1 (Problème P).
1. Quel sous-problème (SP) peut être déduit du problème P précédent ? – 1pt
Le sous-problème le plus évident est celui de l’évaluation de la puissance à l’ordre n d’un nombre entier donné.
2. Quel type de sous-programme peut être utilisé pour résoudre SP ? – 1pt
Pour le sous-problème identifié, c’est une fonction qui est convenable : elle prendra en argument le nombre entier (k) ainsi que l’ordre n et retournera la valeur de k élevé à la puissance n.
3. Écrire EN PASCAL le sous-programme power qui permet de résoudre SP. – 1.5pts
function power(k : integer; n : integer) : integer;
var
i, puiss : integer;
begin
puiss := 1;
for i := 1 to n do
puiss := puiss * k;
power := puiss;
end;
4. Quelle est la différence entre la boucle TANTQUE et la boucle POUR ? – 1pt
La principale différence est que la boucle TANTQUE peut être utilisée même dans les cas où le nombre d’itérations n’est pas connu à l’avance ; ce qui n’est pas le cas pour la boucle POUR.
5. La boucle POUR est-elle appropriée pour résoudre le problème P ? Justifiez ! – 1pt
Oui, car le nombre d’itérations (n) est connu.
6. Proposez un PROGRAMME PASCAL somme pour la résolution du problème P : vous devez gérer au mieux tous cas possibles. – 1.5pts
program somme;
var
n, k, som : integer;
function power(k : integer; n : integer) : integer;
var
i, puiss : integer;
begin
puiss := 1;
for i := 1 to n do
puiss := puiss * k;
power := puiss;
end;
begin
writeln('Entrez la valeur de n :');
readln(n);
som := 0;
for k := 1 to n do
som := som + power(k, n - k + 1);
writeln('La somme est : ', som);
end.
Exercice 3 – 4pts
1. Considérons les codes suivants :
Algorithme algo1;
var n, m : entier;
debut
lire(n, m);
tantque(n <> m) faire
si(n > m) alors
n := n - m;
sinon
m := m - n;
fsi
ftq
ecrire(n);
fin;
function fct1(n : entier) : booleen;
var tmp : entier;
debut
tmp := n;
tantque(tmp > 1) faire
tmp := tmp - 2;
ftq
si(tmp = 1) alors
retourner VRAI;
sinon
retourner FAUX;
fin;
a. Qu’affiche l’algorithme algo1 si l’utilisateur entre les valeurs 45 et 18 ? – 0.5pt
Avant la boucle n = 45 et m = 18
Premier tour de boucle n devient 45 – 18 = 27 et m reste 18
Second tour de boucle n devient 27 – 18 = 9 et m reste 18
Troisième tour de boucle n reste 9 et m devient 18 – 9 = 9 puis on sort de la boucle (car n et m ont la même valeur)
La valeur de n est affichée ; par conséquent, pour les valeurs 45 et 18 entrées par l’utilisateur, cet algorithme affiche 9 à l’écran.
b. Que fait la fonction fct1 (expliquer son prototype puis dire ce qu’elle fait) ? – 0.5pt + 0.5pt
Prototype : fct1 prend un entier en paramètre et retourne un booléen
Exemples : si fct1 prend 1, elle retourne Vrai ; si fct1 prend 2, elle retourne Faux ; si fct1 prend 3, elle retourne Vrai…
Conclusion : fct1 prend un nombre entier comme argument et retourne une valeur booléenne indiquant si ledit nombre est impair ou pas.
2. Écrire un PROGRAMME PASCAL qui calcule et retourne la somme des carrés des n premiers entiers naturels.
program SommeCarres;
function somme_carres(n : integer) : integer;
var
k, som : integer;
begin
som := 0;
for k := 1 to n do
som := som + k * k;
somme_carres := som;
end;
var
n, result : integer;
begin
writeln('Entrez un entier n :');
readln(n);
result := somme_carres(n);
writeln('La somme des carrés des ', n, ' premiers entiers naturels est : ', result);
end.
Exercice 4 – 4pts
Vous êtes recrutés en tant que technicien dans une entreprise de logistique. Comme première tâche, il vous est demandé de créer un programme pour permettre au service de fabrication des emballages de connaître les dimensions (de volume plus précisément) des emballages à fabriquer pour le transport de colis personnalisés. En effet, les clients ont pour habitude de commander un certain nombre d’exemplaires de produits de forme cubique (par exemple, un client peut commander 200 dés d’arête 1.5 cm) et de préciser le nombre d’emballages identiques dans lesquels il voudrait recevoir ses produits (5 par exemple). Votre programme doit permettre de déterminer le volume des emballages à fabriquer (pour le cas des dés, par exemple, chaque emballage doit avoir un volume de 135 cm³). Le langage à utiliser est le Langage PASCAL. Comment vous y prenez-vous et quel est le code de votre programme ?
Pour répondre à cette tâche en Pascal, nous allons créer un programme qui calcule le volume total des emballages nécessaires pour les produits cubiques commandés par les clients.
Étapes pour créer le programme :
- Définition des données d'entrée : Nous aurons besoin de l'arête du cube (arrete_cube) et du nombre d'exemplaires commandés (nombre_exemplaires).
- Calcul du volume d'un emballage : Le volume d'un cube est calculé en élevant l'arête au cube : volume_cube = arrete_cube * arrete_cube * arrete_cube.
- Calcul du volume total des emballages : Le volume total des emballages sera le produit du volume d'un cube et du nombre d'exemplaires commandés : volume_total = volume_cube * nombre_exemplaires.
- Affichage du résultat : Afficher le volume total des emballages nécessaires.
program CalculVolumeEmballages;
var
arrete_cube, nombre_exemplaires, volume_cube, volume_total : integer;
begin
writeln('Calcul du volume des emballages pour des produits cubiques');
writeln('--------------------------------------------------------');
// Lecture des données d'entrée
writeln('Entrez la longueur de l\'arête du cube (en cm) :');
readln(arrete_cube);
writeln('Entrez le nombre d\'exemplaires commandés :');
readln(nombre_exemplaires);
// Calcul du volume d'un cube
volume_cube := arrete_cube * arrete_cube * arrete_cube;
// Calcul du volume total des emballages
volume_total := volume_cube * nombre_exemplaires;
// Affichage du résultat
writeln('--------------------------------------------------------');
writeln('Le volume d\'un emballage (cube) est de ', volume_cube, ' cm³.');
writeln('Le volume total des emballages nécessaires est de ', volume_total, ' cm³.');
readln; // Retrouver plein d’exercices corriges sur le site www.PandaCodeur.com
end.