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.