La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec le langage C et programmation. Nous espérons que ces exercices vous aideront à améliorer vos compétences sur le langage C et programmation. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel sur le langage C avant de résoudre les exercices suivants.
51. Écrire un programme en C qui convertit une température en degrés Celsius en degrés Fahrenheit. Utilisez les variables « celsius », « fahrenheit » et la formule de conversion pour effectuer le calcul.
Entrez la température en degrés Celsius: 45
La température en Fahrenheit est: 113
#include <stdio.h>
void main()
{
float celsius,fahrenheit;
printf("Entrez la température en degrés Celsius:");
scanf("%f",&celsius);
fahrenheit = (1.8 * celsius) + 32;
printf("La température en Fahrenheit est: %f ",fahrenheit);
return 0;
}
52. Écrire un programme en C qui permute ou échange deux nombres saisis par l’utilisateur, mais avec seulement deux variables N1 et N2 sans utiliser une variable temporaire.
Exemple de sortie:
Entrer le nombre N1 : 10
Entrer le nombre N2 : 5
------permutation------
N1 = 5
N2 = 10
#include <stdio.h>
int main()
{
int N1,N2;
printf("Entrer le nombre N1:");
scanf("%d", &N1);
printf("Entrer le nombre N2:");
scanf("%d", &N2);
N1 = N1 + N2;
N2 = N1 - N2;
N1 = N1 - N2;
printf("N1 = %d\n", N1);
printf("N2 = %d", N2);
return 0;
}
53. Écrire un programme en C qui permute et affiche les valeurs des trois nombres (N1, N2 et N3) saisis par l’utilisateur, en ordre croissant c’est-à-dire (N1 < N2 < N3).
Exemple de sortie:
Entrer le nombre N1 : 10
Entrer le nombre N2 : 1
Entrer le nombre N3 : 5
------permutation------
N1 = 1
N2 = 5
N3 = 10
#include <stdio.h>
int main()
{
int N1,N2,N3,tmp;
printf("Entrer le nombre N1:"); scanf("%d",&N1);
printf("Entrer le nombre N2:"); scanf("%d",&N2);
printf("Entrer le nombre N3:"); scanf("%d",&N3);
if(N1>N2) { tmp = N1; N1 = N2; N2 = tmp; }
if(N1>N3) { tmp = N1; N1 = N3; N3 = tmp; }
if(N2>N3) { tmp = N2; N2 = N3; N3 = tmp; }
printf("N1 = %d\n", N1);
printf("N2 = %d\n", N2);
printf("N3 = %d", N3);
return 0;
}
54. Écrire une fonction qui vérifie deux températures données et renvoie TRUE si l’une des températures est inférieure à 0 et l’autre supérieure à 50, sinon il renvoie FALSE.
#include <stdio.h>
//Déclarez la fonction "checkTemp" avec deux paramètres
int checkTemp(int n);
int main(void)
{
/* Appeler la fonction "checkTemp" avec
l'argument 100 et -1 et afficher le résultat */
printf("%d", checkTemp(100, -1));
/* Appeler la fonction "checkTemp" avec
l'argument 2 et 100 et afficher le résultat */
printf("%d", checkTemp(2, 100));
}
// Définition de la fonction "checkTemp"
int checkTemp(int t1, int t2)
{
// Retourne 1 (true) si l'une des conditions suivantes est vraie
return t1 < 0 && t2 > 50 || t2 < 0 && t1 > 50;
}
55. Écrire une fonction qui affiche si le nombre passé en paramètre est pair ou impair.
Exemple de sortie:
3 est impair.
2 est pair.
#include <stdio.h>
void paireOuImpaire(int N)
{
// Trouver le reste
int reste = N % 2;
if (reste == 0){
printf("Paire");
} else{
printf("Impaire");
}
}
int main()
{
// Appel à la fonction
paireOuImpaire(N);
return 0;
}
56. Écrire une fonction qui retourne le nombre de caractères dans une chaîne de caractères passée en paramètre.
Exemple de sortie:
Entrez une chaîne de caractères: Hello
Le nombre de caractères est: 5
#include <stdio.h>
int nbrChar(char str[]) {
int lg; // lg stocke la longueur de la chaîne
/* incrémenter la variable lg jusqu'à la fin
de la chaîne de caractères */
for(lg = 0; str[lg] != '\0'; ++lg);
// renvoie le nombre de caractères de la chaîne
return lg;
}
int main()
{
// Appel à la fonction
int n = nbrChar("Hello"); // n = 5
return 0;
}
58. Écrire une fonction qui permet de calculer la valeur absolue d’un nombre donné (en utilisant l’opérateur ternaire ?: ).
#include <stdio.h>
int nbrAbsolue(int n)
{
return n < 0 ? -n : n;
}
int main()
{
// Appel à la fonction
int n = nbrAbsolue(-5); // n = 5
return 0;
}
59. Écrire une fonction qui trouve le nombre de fois un caractère se trouve dans une chaîne de caractères. La fonction prend en paramètre le caractère à trouver et la chaîne de caractères.
#include <stdio.h>
int compterNbrOccurrence(char* str, char c) {
int compteur = 0;
while (*str) { //itérer caractère par caractère
if (*str == c){ //vérifier s'il y a une correspondance
compteur++; //incrémenter le cmpt s'il y a une correspondance
}
str++; // passer au caractère suivant
}
return compteur; //renvoyer le nbr de fois le caractère s'est trouvé
}
int main() {
char str[100];
char c;
printf("Saisissez une chaîne de caractères:");
scanf("%s", str);
printf("Saisir le caractère à rechercher:");
scanf("%c", &c);
int o = compterNbrOccurrence(str, c);
printf("Le caractère '%c' apparaît %d fois(s) dans la chaîne de caractères.\n", c, o);
return 0;
}
Sortie:
Saisissez une chaîne de caractères: Hello World!
Saisir le caractère à rechercher: o
Le caractère 'o' apparaît 2 fois(s) dans la chaîne de caractères.
60. Écrire une fonction qui permet d'afficher la table de multiplication d’un nombre N.
#include <stdio.h>
void tableMultiplication(int N)
{
int i;
for(i=1; i <= 10; i++)
{
printf("%d x %d = %d\n", N,i,N*i);
}
}
int main() {
int nbr;
printf("Saisir un nombre positif\n");
scanf("%d", &nbr);
tableMultiplication(nbr);
return 0;
}
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec le langage C et programmation. Nous espérons que ces exercices vous aideront à améliorer vos compétences sur le langage C et programmation. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel sur le langage C avant de résoudre les exercices suivants.
Veuillez voir les exercices de 1 à 30 et de 31 à 40.
41. Un magasin offre à ses clients 25% de réduction sur les montants d’achat supérieurs à 500 €. Ecrivez un programme en C qui permet d’entrer le prix total hors TVA et de calculer le montant TTC en tenant compte de la remise et du fait que la TVA = 10%.
Exemple de sortie:
Entrer le montant HT: 900
Le montant TTC est: 742.5
#include <stdio.h>
int main()
{
float HT,TTC;
printf("Entrer le montant HT:");
scanf("%f", &HT);
TTC = HT + HT * 0.2 ;
if (TTC > 200) {
TTC = TTC - TTC * 0.15;
printf("Le montant TTC est: %f", TTC);
}else{
printf("Le montant TTC est: %f", TTC);
}
return 0;
}
42. Écrire un programme en C qui demande à l’utilisateur deux nombres n1 et n2 et lui indique ensuite si le produit de ces deux nombres est positif ou négatif. On prévoit dans le programme le cas où le produit peut être nul.
Exemple de sortie:
Entrer le 1er nombre: -1.5
Entrer le 2éme nombre: 3
Le produit est négatif
-----------------------------
Entrer le 1er nombre: 1
Entrer le 2éme nombre: 3
Le produit est positif
-----------------------------
Entrer le 1er nombre: 0
Entrer le 2éme nombre: 3
Le produit est nul
#include <stdio.h>
int main()
{
float n1,n2;
printf("Entrer le 1er nombre:");
scanf("%f", &n1);
printf("Entrer le 2éme nombre:");
scanf("%f", &n2);
if(n1 == 0 || n2 == 0)
printf("Le produit est nul");
if (n1*n2 < 0)
printf("Le produit est négatif");
if (n1*n2 > 0)
printf("Le produit est positif");
return 0;
}
43. Écrire un programme en C qui permette d’ajouter un commentaire sur le score saisi au clavier (si le score est supérieur à 10 alors il affiche « GOOD! » sinon « NOT GOOD! » (NB: le score est compris entre 0 et 20!).
Exemple de sortie:
Entrer le score: 15.5
GOOD!
------------------
Entrer le score: 5
NOT GOOD!
------------------
Entrer le score: -5
Score invalide!
#include <stdio.h>
int main()
{
float score;
printf("Entrer le score:");
scanf("%f",&score);
if (score < 0 || score > 20)
printf("Score invalide!");
if (score >= 0 && score < 10)
printf("NOT GOOD!");
if (score >= 10 && score <= 20)
printf("GOOD!");
return 0;
}
44. Le service de photocopie de votre université facture 0,50 € pour les 10 premières photocopies, 0,45 € pour les 20 suivantes et 0,30 € au-delà de 30 photocopies. Ecrivez un programme en C qui demande à l'utilisateur le nombre de photocopies réalisées et affiche la facture correspondante.
Exemple de sortie:
Entrez le nombre de papies: 25
Le prix total est: 11.25 €
#include <stdio.h>
int main()
{
int N;
float prix;
printf("Entrer le nombre de papies:");
scanf("%d", &N);
if(N <= 20)
prix = N * 0.50;
if(N > 10 && N <= 30)
prix = N * 0.45;
if(N > 30)
prix = N * 0.30;
printf("Le prix total est: %.2f €", prix);
return 0;
}
45. Ecrivez un programme en C qui teste l'égalité de deux tableaux de nombres entiers (tailles 5). Le programme affiche TRUE si les éléments des deux tableaux correspondent, sinon il affiche FALSE.
46. Écrire un programme en C qui permet la saisie de 5 nombres et qui calcule la différence entre la somme des nombres pairs et la somme des nombres impairs.
Par exemple : 3 5 2 4 6 => (2+4+6) - (3+5) = 4
Exemple de sortie:
Entrer un nombre: 3
Entrer un nombre: 5
Entrer un nombre: 2
Entrer un nombre: 4
Entrer un nombre: 6
La différence égale à 4
#include <stdio.h>
int main()
{
int tab[10],sum,i;
sum = 0;
for(i=0; i < 10; i++){
printf("Entrer un nombre:");
scanf("%d", &tab[i]);
if(tab[i] % 2 == 0)
sum = sum + tab[i];
else
sum = sum - tab[i];
}
printf("La différence égale à %d", sum);
return 0;
}
47. Écrire un programme en C qui permet à l'utilisateur d'entrer une série de nombres se terminant par 0, et qui affiche à la fin le nombre d'occurrences du nombre 3.
Exemple de sortie:
2 8 3 1 3 3 6 3 0
3 existe 4 fois
#include <stdio.h>
int main()
{
int Nbr,i=0;
do{
scanf("%d", &Nbr);
if(Nbr == 3){
i = i + 1;
}
}while(Nbr != 0);
if(i != 0)
printf("3 existe %d fois", i);
else
printf("3 n'existe pas");
return 0;
}
Le programme ci-dessus, invite l'utilisateur à saisir des nombres entiers jusqu'à ce qu'il entre 0. Le code à l'intérieur de la boucle do-while sera exécuté au moins une fois avant de vérifier la condition de la boucle. La boucle se répète tant que l'utilisateur n'entre pas 0. On vérifie si le nombre saisi est égale à 3. Si c'est le cas on incrémente le compteur i. Après on vérifie if(i != 0) alors il existe un nombre d’occurrence du nombre spécifié sinon il n'existe pas.
48. Écrire un programme en C pour afficher les mois en lettres en fonction du nombre saisi par l'utilisateur.
Exemple de sortie:
Entrer le numéro du mois: 1
Janvier
Entrer le numéro du mois: 3
Mars
Entrer le numéro du mois: 12
Décembre
#include <stdio.h>
int main()
{
int M;
printf("Entrer le numéro du mois:");
scanf("%d", &M);
switch (M) {
case 1:
printf("Janvier"); break;
case 2:
printf("Février"); break;
case 3:
printf("Mars"); break;
case 4:
printf("Avril"); break;
case 5:
printf("Mai"); break;
case 6:
printf("Juin"); break;
case 7:
printf("Juille"); break;
case 8:
printf("Aout"); break;
case 9:
printf("Septembre"); break;
case 10:
printf("Octobre"); break;
case 11:
printf("Novembre"); break;
case 12:
printf("Décembre"); break;
default:
printf("Aucun mois ne correspondant!");
break;
}
return 0;
}
L'instruction switch est une instruction de contrôle de flux dans laquelle nous pouvons définir une variable changeante et exécuter ensuite un code différent en fonction de la valeur de la variable changeante. C'est une alternative à If-Else.
49. Écrire un programme en C qui calcule les nombres de Fibonacci jusqu'à 50.
Exemple de sortie:
Fibonacci jusqu'à 50: 1 1 2 3 5 8 13 21 34
#include <stdio.h>
int main() {
int i,n;
// initialiser le 1er et le 2ème terme
int t1=0, t2=1;
// initialiser le terme suivant (3ème terme)
int suivant = t1 + t2;
// afficher les deux premiers termes t1 et t2
printf("Fibonacci jusqu'à 50: %d, %d, ", t1, t2);
// afficher les termes de la 3ème à la 50ème position
for (i = 3; i <= 50; ++i) {
printf("%d, ", suivant);
t1 = t2;
t2 = suivant;
suivant = t1 + t2;
}
return 0;
}
La série de Fibonacci est une suite de nombres où chaque nombre est la somme des deux nombres précédents.
50. Écrire un programme en C qui calculera une somme courante. L'utilisateur saisira des nombres qui seront ajoutés à la somme et, lorsqu'un nombre négatif sera rencontré, arrêtera d'ajouter des nombres et écrira le résultat final.
Exemple de sortie:
1 2 3 4 -1
La somme est 10
#include <stdio.h>
int main()
{
int Nbr,sum=0;
do{
scanf("%d", &Nbr);
sum = Nbr + sum
}while(Nbr >= 0);
printf("La somme est %d",sum);
return 0;
}
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec le langage C et programmation. Nous espérons que ces exercices vous aideront à améliorer vos compétences sur le langage C et programmation. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel sur le langage C avant de résoudre les exercices suivants.
1. Écrire un programme en C qui afficher le message ‘Hello, World!’ sur l’écran.
Exemple de sortie:
Hello, World!
#include <stdio.h>
int main()
{
printf("Hello, World!");
return 0;
}
Dans ce programme, nous avons utilisé la fonction « printf » pour afficher la chaîne de caractères Hello, world! sur notre écran.
2. Ecrivez un programme C qui affiche votre nom, votre date de naissance et votre numéro de téléphone portable.
Exemple de sortie:
Nom : Alex Babtise
Date de naissance : Janvier 10, 2004
Tél : 0785463521
#include <stdio.h>
int main()
{
printf("Nom : Alex Babtise \n");
printf("Date de naissance : Janvier 10, 2004\n");
printf("Tél : 0785463521\n");
return 0;
}
3. Écrire un programme en C permettant la saisie de deux nombres et l’affichage de leur somme.
Exemple de sortie:
Entrer 1er nombre: 10
Entrer 2éme nombre: 5
La somme de 10 et 5 = 15
---------------------------
Entrer 1er nombre: 2.5
Entrer 2éme nombre: 2.5
La somme de 2.5 et 2.5 = 5
#include <stdio.h>
int main()
{
float n1,n2,s;
printf("Entrer 1er nombre:");
scanf("%f",&n1);
printf("Entrer 2éme nombre:");
scanf("%f",&n2);
s = n1 + n2 ;
printf("La somme de %f et %f = %f",n1,n2,s);
return 0;
}
Ce programme invite l’utilisateur à saisir deux nombres, le format « %f » indique à scanf() de lire une valeur en virgule flottante. Puis les additionne, enfin affiche le résultat.
4. Ecrivez un programme C pour calculer le périmètre et la surface d’un rectangle d’une hauteur de 8 cm et d’une largeur de 4 cm.
Exemple de sortie:
Périmètre du rectangle = 24 cm
Surface du rectangle = 32 cm²
#include <stdio.h>
int main()
{
int largeur,hauteur,surface,perimeter;
hauteur = 8;
largeur = 4;
/* Calculer le périmètre du rectangle */
perimeter = 2*(hauteur + largeur);
printf("Périmètre du rectangle = %d cm\n", perimeter);
/* Calculer la surface du rectangle */
surface = hauteur * largeur;
printf("Surface du rectangle = %d cm²\n", surface);
return(0);
}
5. Écrire un programme C pour calculer le périmètre et la surface d’un cercle dont le rayon est 5.
Exemple de sortie:
Périmètre du cercle = 31.4 cm
Surface du cercle = 78.5 cm²
#include <stdio.h>
int main() {
int rayon = 5;
float surface, perimeter;
/* Calculer le périmètre du cercle */
perimeter = 2 * 3.14 * rayon;
printf("Périmètre du cercle = %f cm\n", perimeter);
/* Calculer la surface du cercle */
surface = 3.14 * rayon * rayon;
printf("Surface du cercle = %f cm²\n", surface);
return(0);
}
6. Écrire un programme en C permettant de permuter le contenu de deux entiers n1 et n2 entrés par l’utilisateur, et afficher ces entiers après permutation.
Exemple de sortie:
Entrer un entier n1 : 10
Entrer un entier n2 : 5
------permutation------
n1 = 5
n2 = 10
#include <stdio.h>
int main()
{
int n1,n2,tmp;
printf("Entrer un entier n1:");
scanf("%d",&n1);
printf("Entrer un entier n2:");
scanf("%d",&n2);
tmp = n1;
n1 = n2;
n2 = tmp;
printf("------permutation------\n");
printf("n1 = %d\n",n1);
printf("n2 = %d",n2);
return 0;
}
Ce programme déclare d’abord trois variables n1, n2 et tmp, puis demande à l’utilisateur de saisir deux nombres entiers. Ensuite, il utilise une variable temporaire tmp pour échanger les valeurs de n1 et n2, et enfin affiche les valeurs échangées.
7. Écrire un programme en C pour calculer la factorielle d’un nombre entier saisi par l’utilisateur. (Remarque: le factoriel de 5, qui s’écrit 5! = 5 × 4 × 3 × 2 × 1).
Exemple de sortie:
Saisir un nombre : 5
Le factoriel de 5 est: 120
#include <stdio.h>
int main()
{
int nbr,f=1,i;
printf("Saisir un nombre:");
scanf("%d",&nbr);
for(i=1; i<=nbr; i++){
f = f * i;
}
printf("Le factoriel de %d est: %d",nbr,f);
return 0;
}
Nous commençons par déclarer les variables que nous utiliserons dans le programme. Nous avons besoin de trois variables : nbr, f et i. Nous les déclarons comme des entiers.
Ensuite, nous demandons à l'utilisateur d'entrer la valeur de nbr à l'aide des instructions printf et scanf. Nous écrivons un message invitant l'utilisateur à saisir un entier nbr, puis nous lisons la valeur saisie par l'utilisateur et la stockons dans la variable nbr.
Ensuite, nous initialisons la variable f à 1. Cette variable stockera la factorielle de nbr au fur et à mesure que nous la calculerons dans la boucle. Nous utilisons le signe (=) pour attribuer une valeur à une variable.
Ensuite, nous utilisons une boucle for itérer de 1 à nbr et multiplier f par i à chaque itération. La boucle a une valeur de départ, une valeur d'arrivée et une valeur d'incrémentation. Dans ce cas, nous commençons à 1, nous terminons à nbr et nous incrémentons de 1. À chaque itération, nous mettons à jour la valeur de f en la multipliant par i à l'aide du symbole de l'astérisque (*). De cette façon, nous calculons la factorielle de nbr comme le produit de tous les entiers de 1 à nbr.
Enfin, nous affichons la factorielle de nbr à l'aide de l'instruction printf. Nous écrivons un message qui indique la valeur de nbr et sa factorielle séparées par des virgules.
8. Écrire un programme en C permettant d'afficher si un nombre saisi est pair ou impair.
Exemple de sortie:
Entrer un nombre: 8
Nombre pair
#include <stdio.h>
int main()
{
int nbr;
printf("Entrer un nombre:");
scanf("%d",&nbr);
if (nbr % 2 == 0)
printf("Nombre pair");
else
printf("Nombre impair");
return 0;
}
Si un nombre est divisible par 2 sans reste, il est pair. Vous pouvez calculer le reste à l'aide de l'opérateur modulo "%", comme ceci nbr % 2 == 0. Si un nombre divisé par 2 laisse un reste de 1, le nombre est impair. Vous pouvez le vérifier en utilisant nbr % 2 == 1.
9. Écrire un programme en C permettant d'afficher le plus grand des 3 nombres saisis au clavier.
Exemple de sortie:
Entrer 1er nombre : 2
Entrer 2éme nombre: 9
Entrer 3éme nombre: 7
Le nombre le plus grand est: 9
#include <stdio.h>
int main()
{
int n1,n2,n3,max;
printf("Entrer 1er nombre:");
scanf("%d",&n1);
printf("Entrer 2éme nombre:");
scanf("%d",&n2);
printf("Entrer 3éme nombre:");
scanf("%d",&n3);
max = n1;
if (n2 >= max)
max = n2;
if (n3 >= max)
max = n3;
printf("Le nombre le plus grand est: %d",max);
return 0;
}
10. A quoi sert le programme en C suivant?
#include <stdio.h>
int main()
{
int nbr = 0;
printf("Entrez un nombre entre 1 et 5:");
do{
scanf("%d",&nbr);
if(nbr < 1 || nbr > 5)
printf("Nombre incorrect. Recommencez!")
}while(nbr < 1 || nbr > 5);
return 0;
}
Le programme ci-dessus demande à l'utilisateur un nombre de 1 à 5 jusqu'à ce que la réponse est correct.
11. Écrire un programme en C qui calcule la valeur absolue d'un nombre saisi par l'utilisateur.
Exemple de sortie:
Entrer un nombre: -5
La valeur absolue de -5 est 5
#include <stdio.h>
int main()
{
int n;
printf("Entrer un nombre :");
scanf("%d",&n);
if(n >= 0)
printf("La valeur absolue de %d est %d",n,n);
else
printf("La valeur absolue de %d est %d",n,-n);
return 0;
}
12. Écrire un programme en C qui calcule la moyenne de 3 nombres entrés par l'utilisateur.
Exemple de sortie:
Entrer 1er nombre : 5
Entrer 2éme nombre: 7
Entrer 3éme nombre: 3
La moyenne est : 5
La formule pour trouver la moyenne de nombres ou de valeurs donnés est très simple. Il suffit d'additionner tous les nombres et de diviser le résultat par le nombre de valeurs données. La formule pour calculer la moyenne est donc la suivante:
Moyenne = Total/Nombre
Ici, nous utilisons 3 nombres, donc pour calculer la moyenne, nous devons additionner les 3 nombres et les diviser par 3.
13. Écrire un programme en C qui affiche 10 fois "Hello". En utilisant la boucle "while".
#include <stdio.h>
int main()
{
int i=1;
while(i <= 10 ) {
printf("Hello\n");
i++;
}
return 0;
}
Dans ce programme, la boucle while continuera à s'exécuter tant que la variable i est inférieure ou égale à 10. À l'intérieur de la boucle, le texte est affiché, puis la variable i est incrémentée de 1 jusqu'à ce que la condition ne soit plus remplie.
14. Ecrivez un programme en C qui calcule la somme de 1 à 10. En utilisant la boucle "while".
Indication:
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55
Exemple de sortie:
La somme de 1 à 10 est 55
#include <stdio.h>
int main()
{
int i=1, sum=0;
while(i <= 10){
sum = sum + i;
i++;
}
printf("La somme de 1 à 10 est: %d\n", sum);
return 0;
}
Dans la boucle while ci-dessus, la variable i est initialisée à 1 et la boucle se poursuit tant que i est inférieur ou égal à 10. À chaque itération de la boucle, la variable sum s'additionne à la valeur de i.
Enfin, la boucle incrémente la valeur de i de 1, et le processus se répète jusqu'à ce que la condition i <= 10 ne soit plus vraie. Dans ce cas on affiche le message "La somme de 1 à 10 est: 55".
15. Ecrivez un programme en C qui calcule la somme de 1 à N, où N est saisi par l'utilisateur. En utilisant la boucle "while".
Indication:
1 + 2 + 3 + 4 + 5 + 6 + 7 = 28
Exemple de sortie:
Entrer un nombre: 7
La somme de 1 à 10 est 28
#include <stdio.h>
int main()
{
int i=1,sum=0,n;
printf("Entrer un nombre:");
scanf ("%d",&n);
while (i <= n) {
sum = sum + i;
i++;
}
printf("la somme de 1 à %d est: %d\n",n,sum);
return 0;
}
La boucle while est itérée n fois. À chaque itération, la valeur de i est ajoutée à la somme sum et i est incrémenté de 1.
16. Ecrivez un programme en C qui affiche "Hello" 10 fois. En utilisant la boucle "for".
#include <stdio.h>
int main()
{
int i;
for (i= 0; i < 10; i++) {
printf("Hello\n");
}
return 0;
}
Dans cet algorithme, la boucle for continuera à s'exécuter tant que la variable i est inférieure ou égale à 10. À l'intérieur de la boucle, le texte est affiché, puis la variable i est incrémentée de 1 jusqu'à ce que la condition ne soit plus remplie.
17. Ecrivez un programme en C qui calcule la somme de 1 à 10. En utilisant la boucle "for".
Indication:
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55
Exemple de sortie:
La somme de 1 à 10 est 55
#include <stdio.h>
int main()
{
int i, sum=0;
for (i=1; i<=10; i++){
sum = sum + i ;
}
printf("La somme de 1 à 10 est: %d" , sum);
return 0;
}
Dans la boucle for ci-dessus, la variable i est initialisée à 1 et la boucle se poursuit tant que i est inférieur ou égal à 10. À chaque itération de la boucle, la variable sum s'additionne à la valeur de i.
18. Ecrivez un programme en C qui calcule la somme de 1 à N, où N est saisi par l'utilisateur. En utilisant la boucle "for".
Indication:
1 + 2 + 3 + 4 + 5 + 6 + 7 = 28
Exemple de sortie:
Entrer un nombre: 7
La somme de 1 à 10 est 28
#include <stdio.h>
int main()
{
int i,sum=0,n;
printf("Entrer un nombre:");
scanf("%d",&n);
for(i=1; i<=n; i++){
sum = sum + i;
}
printf("La somme de 1 à n est: %d",n,sum);
return 0;
}
La boucle for est itérée n fois. À chaque itération, la valeur de i est ajoutée à la somme sum et i est incrémenté de 1.
19. Écrire un programme en C qui affiche la table de multiplication de 3. En utilisant la boucle "for".
Exemple de sortie:
3 x 0 = 0
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27
3 x 10= 30
#include <stdio.h>
int main()
{
int i;
for (i=0; i<=10 ; i++){
printf("3 x %d = %d \n",i,i*3);
}
return 0;
}
Nous utilisons la boucle for pour afficher la table de multiplication de 3. La boucle s'exécute de i = 0 à i = 10. À chaque itération de la boucle, i * 3 est affiché.
20. Écrire un programme en C qui affiche la table de multiplication d'un entier saisi par l'utilisateur, en utilisant la boucle "for".
Exemple de sortie:
Entrer un nombre: 7
7 x 0 = 0
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10= 70
#include <stdio.h>
int main()
{
int i,n;
printf("Entrer un entier:");
scanf("%d",&n);
for(i=1; i<=10; i++){
printf("%d x %d = %d\n",n,i,i*n);
}
return 0;
}
Nous utilisons la boucle for pour afficher la table de multiplication de n. La boucle s'exécute de i = 1 à i = 10. À chaque itération de la boucle, i * n est affiché.
21. Ecrivez un programme en C qui affiche "Hello" 10 fois. En utilisant la boucle "do-while".
#include <stdio.h>
int main()
{
int i=0;
do {
printf("Hello\n");
i++;
} while (i<10);
return 0;
}
La principale différence entre la boucle "while" et "do while" est que dans la boucle "do while", la boucle s'exécute une fois avant même de vérifier la condition, alors que dans une boucle "while", la boucle s'exécute si la condition est vraie.
22. Ecrivez un programme en C qui calcule la somme de 1 à 10. En utilisant la boucle "do-while".
Indication:
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55
Exemple de sortie:
La somme de 1 à 10 est 55
#include <stdio.h>
int main()
{
int i=1,sum=0;
do{
sum = sum + i;
i++;
} while (i <= 10) ;
printf("La somme de 1 à 10 est: %d",sum);
return 0;
}
23. Écrire un programme en C qui affiche la table de multiplication de 2. En utilisant la boucle "do-while".
Exemple de sortie:
2 x 0 = 0
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
2 x 10= 20
#include <stdio.h>
int main()
{
int i=0;
do{
printf ("2 x %d = %d\n",i,i*2);
i++;
}while(i<10);
return 0;
}
24. Écrire un programme C pour convertir les jours spécifiés en années, semaines et jours. Note : Ne pas tenir en compte les années bissextiles.
Exemple de sortie:
Entrez le nombre de jours: 2570
Années: 7
Semaines: 2
Jours: 1
#include <stdio.h>
int main()
{
int jours, an, semaines;
jours = 2570; // Nombre total de jours
// Calculer les années
an = jours/365;
// Calculer les semaines restants
semaines = (jours % 365)/7;
// Calculer les jours restants
jours = jours - ((an*365) + (semaines*7));
// Afficher les résultats
printf("Années: %d\n", an);
printf("Semaines: %d\n", semaines);
printf("Jours: %d", jours);
return 0;
}
25. Écrivez un programme C qui accepte le nombre total d'heures travaillées au cours d'un mois et le montant que l'employé a reçu par heure. Affichez le salaire (avec deux décimales) de l'employé pour un mois donné.
Exemple de sortie:
Saisir les heures de travail: 7
Montant du salaire/heure: 2000
Salaire = 14000.00 €
#include <stdio.h>
int main() {
int heures;
double sph, salaire;
printf("Saisir les heures de travail: ");
scanf("%d", &heures);
printf("Montant du salaire/heure: ");
scanf("%lf", &sph);
// Calculer le salaire total
salaire = sph * heures;
// Afficher le salaire
printf("Salaire = %.2lf €\n", salaire);
return 0;
}
26. Écrire un programme en C pour afficher les nombres pairs entre 0 et N, où N est saisi par l'utilisateur.
Exemple de sortie:
Entrer un nombre : 9
0 2 4 6 8
#include <stdio.h>
int main()
{
int i,n;
printf("Entrer un nombre: ");
scanf("%d",&n);
for(i=0; i<=n; i++){
if (i%2 == 0)
printf(" %d ",i);
}
return 0;
}
Description pas à pas de la logique permettant d'afficher tous les nombres pairs compris entre 1 et n à en utilisant l'instruction "IF":
L'utilisateur doit saisir la limite supérieure des nombres pairs. Stockez-la dans la variable N.
Exécutez la boucle "for" à partir de 1, jusqu'à n.
À l'intérieur du corps de la boucle, vérifiez la condition pair/impair. Si le nombre actuel i est divisible par 2, alors i est pair. Autrement dit, if (i%2 == 0), la valeur de i est affichée.
27. Ecrivez un programme en C qui calcule la somme des nombres impairs compris entre 1 et un nombre entier N saisi par l'utilisateur. Exemple N=10 Somme=1+3+5+7+9=25
Exemple de sortie:
Entrer un nombre : 10
La somme des nombres impairs est: 25
#include <stdio.h>
int main()
{
int n,i,sum=0;
printf("Entrer un nombre:");
scanf("%d",&n);
for(i=1; i<=n; i++){
if(i%2 != 0)
sum = sum + i;
}
printf("La somme des nombres impairs est: %d",sum);
return 0;
}
Dans ce programme:
L'utilisateur doit saisir la limite supérieure des nombres impairs. Stockez-la dans la variable N.
Exécutez la boucle "for" à partir de 1, jusqu'à n.
À l'intérieur du corps de la boucle, vérifiez la condition pair/impair. Si le nombre actuel i n'est pas divisible par 2, alors i est impair. Autrement dit, if(i%2 != 0), nous ajoutons le nombre actuel i à la variable sum.
Enfin nous affichons la somme des nombres impairs.
28. Écrire un programme en C permettant de calculer le plus grand commun diviseur (PGCD) entre deux nombres entiers entrés par l'utilisateur.
Exemple:
n1=18 et n2=45
PGCD(18, 45) = 9
Exemple de sortie:
Entrer deux nombres: 18 45
Le PGCD est : 9
#include <stdio.h>
int main()
{
int n1,n2,pgcd,i=1;
printf("Entrer un nombre:");
scanf("%d",&n1);
printf("Entrer un nombre:");
scanf("%d",&n2);
while(i<=n1 && i<=n2){
if(n1%i==0 && n2%i==0){
pgcd = i;
}
i++;
}
printf("Le PGCD de %d et %d est:) = %d",n1,n2,pgcd);
return 0;
}
Dans ce programme, deux nombres entiers entrés par l'utilisateur sont stockés dans les variables n1 et n2. Ensuite, la boucle while est itérée jusqu'à ce que i soit inférieur à n1 et n2.
A chaque itération, si n1 et n2 sont exactement divisibles par i, la valeur de i est affectée à la variable "pgcd".
Lorsque la boucle while est terminée, le plus grand diviseur commun de deux nombres est stocké dans la variable "pgcd".
29. Écrire un programme en C qui affiche un triangle d'entiers, en fonction d'un entier N saisi par l'utilisateur.
#include <stdio.h>
int main()
{
int n,i,j;
printf("Donner un nombre:");
scanf("%d",&n);
for(i=1; i<=n; i++){
for(j=1; j<=i; j++){
printf("%d",i);
}
printf("\n");
}
return 0;
}
Le programme invite l'utilisateur à saisir un nombre à l'aide de la fonction printf() et stocke la valeur dans la variable "n" à l'aide de la fonction scanf(). La boucle for est ensuite utilisée pour exécuter le code à l'intérieur de la boucle le nombre de fois spécifié par l'utilisateur. La boucle for commence avec "i" initialisé à 1, et la boucle continue jusqu'à ce que "i" soit inférieur ou égal à "n".
La deuxième boucle for est imbriquée dans la première boucle for et est utilisée pour exécuter de manière répétée le code à l'intérieur de la boucle pendant le nombre de fois spécifié par l'utilisateur. La boucle for commence avec "j" initialisé à 1, et la boucle continue jusqu'à ce que "j" soit inférieur ou égal à "i".
La fonction printf() à l'intérieur de la boucle imbriquée est utilisée pour afficher le nombre actuelle (i) à l'écran à chaque fois que la boucle est exécutée. Les valeurs de "i" et "j" sont incrémentées de 1 à chaque itération des boucles, de sorte que les boucles se terminent finalement lorsque "i" et "j" atteignent la valeur de "n".
 
30. Ecrire un programme en C qui compte le nombre de chiffres dans un nombre saisi par l'utilisateur.
Exemple de sortie:
Donner un nombre: 9876
Le nombre de chiffres est 4
#include <stdio.h>
int main()
{
int n,i=1;
printf("Donner un nombre:");
scanf("%d",&n);
while(n/10 != 0){
n = n/10;
i = i+1;
}
printf("Le nombre de chiffres est %d",i);
return 0;
}
Le programme divise le nombre saisi par l'utilisateur par 10 dans la boucle while jusqu'à ce que le résultat atteigne zéro. Le nombre d'itérations correspondra au nombre de chiffres.
L'entier saisi par l'utilisateur est stocké dans la variable n. Ensuite, la boucle while est itérée jusqu'à ce que la condition (n/10 != 0) soit évaluée à 0 (False).
Après la première itération, la valeur de n est de 987 et le compteur est incrémenté à 1.
Après la deuxième itération, la valeur de n sera de 98 et le compteur sera incrémenté à 2.
Après la troisième itération, la valeur de n sera de 9 et le compteur sera incrémenté à 3.
Après la quatrième itération, la valeur de n sera 0 et le compteur sera incrémenté à 4.
La condition de la boucle est alors évaluée à false et la boucle se termine.
Veuillez voir les exercices de 31 à 40 sur ce lien.
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec le langage C et programmation. Nous espérons que ces exercices vous aideront à améliorer vos compétences sur le langage C et programmation. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel sur le langage C avant de résoudre les exercices suivants.
Veuillez voir les exercices de 1 à 30 sur ce lien.
31. Écrire un programme C pour calculer la consommation moyenne d’une voiture à partir d’une distance parcourue (en km, valeur entière) et du carburant consommé (en litres, nombre flottant).
Exemple de sortie:
Entrer la distance totale en km: 470
Entrer le carburant total dépensé en litres: 5
Consommation moyenne (km/litre) = 94.000
#include <stdio.h>
int main()
{
int distance;
float carburant;
printf("Entrer la distance totale en km:");
scanf("%d", &distance);
printf("Entrer le carburant total dépensé en litres:");
scanf("%f", &carburant);
printf("Consommation moyenne (km/litre) = %.3f ",distance/carburant);
printf("\n");
return 0;
}
32. Écrire un programme C pour calculer la distance entre deux points.
Remarque: x1, y1, x2, y2 sont tous des valeurs flottants.
Exemple de sortie:
Entrée x1: 10
Entrée y1: 18
Entrée x2: 40
Entrée y2: 20
Distance entre ces points est: 30.0666
#include <stdio.h>
#include <math.h>
int main() {
float x1, y1, x2, y2, distance;
printf("Entrée x1:");
scanf("%f", &x1);
printf("Entrée y1:");
scanf("%f", &y1);
printf("Entrée x2:");
scanf("%f", &x2);
printf("Entrée y2:");
scanf("%f", &y2);
// Calculer la distance entre les points
distance = ((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1));
printf("Distance entre ces points est: %.4f", sqrt(distance));
return 0;
}
33. Ecrivez une fonction pour calculer la somme de deux nombres. Si les deux nombres sont identiques, le programme renvoie le triple de leur somme.
Exemple de sortie:
foncSomme(1,2) -> 3
foncSomme(2,2) -> 12
#include <stdio.h>
//Déclarez la fonction "foncSomme" avec deux paramètres
int foncSomme(int a, int b);
int main(void)
{
/* Appeler la fonction "foncSomme" avec
les arguments 1 et 2 et afficher le résultat */
printf("%d \n", foncSomme(1, 2));
/* Appeler la fonction "foncSomme" avec
les arguments 2 et 2 et afficher le résultat */
printf("%d", foncSomme(2, 2));
}
// Définition de la fonction "foncSomme"
int foncSomme(int a, int b)
{
/* Expression conditionnelle : Si a est égal à b,
retourner (a + b) multiplié par 3, sinon retourner a + b */
return a == b ? (a + b) * 3 : a + b;
}
34. Écrivez un programme C qui vérifie deux entiers donnés et renvoie TRUE si au moins l’un d’entre eux est égal à 20 ou si leur somme est égale à 20.
#include <stdio.h>
//Déclarez la fonction "check" avec deux paramètres
int check(int a, int b);
int main(void)
{
/* Appeler la fonction "check" avec
les arguments 25 et 5 et afficher le résultat */
printf("%d", check(15, 5));
/* Appeler la fonction "check" avec
les arguments 25 et 5 et afficher le résultat */
printf("%d", check(15, 20));
}
// Définition de la fonction "check"
int check(int a, int b)
{
// Retourne 1 (true) si l'une des conditions suivantes est vraie
return a == 20 || b == 20 || (a + b == 20);
}
35. Ecrivez un programme C qui vérifie si un entier positif est divisible par 3 ou 7, ou les deux. Si l’entier est un multiple de 3, le programme retournera TRUE. De même, si l’entier est un multiple de 7, le programme renvoie également TRUE. Si l’entier n’est pas un multiple de 3 ou de 7, le programme renvoie FALSE.
#include <stdio.h>
//Déclarez la fonction "check" avec deux paramètres
int check(int n);
int main(void)
{
/* Appeler la fonction "check" avec
l'argument 3 et afficher le résultat */
printf("%d", check(3));
/* Appeler la fonction "check" avec
l'argument 12 et afficher le résultat */
printf("%d", check(12));
}
// Définition de la fonction "check"
int check(int n)
{
// Retourne 1 (true) si l'une des conditions suivantes est vraie
return n % 3 == 0 || n % 7 == 0;
}
36. Ecrivez un programme en C pour inverser les chiffres d’un nombre saisi par l’utilisateur.
Dans la boucle while multiplie le nombre inversé ‘rev’ par 10, ajoutez le reste du nombre original ‘Nbr’ divisé par 10 à ‘rev’.
C’est-à-dire, rev = rev + Nbr%10
Diviser le nombre original par 10.
Dans cette étape, la valeur du nombre original ‘Nbr’ est mise à jour en la divisant par 10. À chaque itération, le dernier chiffre du nombre original ‘Nbr’ est supprimé et la boucle se termine lorsque la valeur du nombre original ‘Nbr’ est égale à 0.
Maintenant, inversons le nombre 123 en utilisant le programme ci-dessus.
37. Écrire un programme en C permettant d’entrer un nombre et d’afficher le triangle d’étoiles.
Exemple de sortie:
Entrez un nombre: 5
*
***
*****
*******
*********
#include <stdio.h>
int main()
{
int Nbr,i,j;
printf("Entrez un nombre:");
scanf("%d",&Nbr);
for(i=0; i < Nbr; i++){
for(j=1; j <= (Nbr*2)-1; j++){
if (j >= Nbr-i && j <= Nbr+i)
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}
38. Écrire un programme en C qui permet de savoir si le nombre saisi est Premier ou non. (Un nombre premier est un nombre uniquement divisible par 1 ou par lui-même).
Exemple de sortie:
Entrer un nombre : 29
29 est un nombre premier
Entrer un nombre : 21
21 n'est pas un nombre premier
21 a quatre diviseurs (1, 3, 7 et 21) donc ce n'est pas un nombre premier.
#include <stdio.h>
int main()
{
int i=2,Nbr;
printf("Entrer un nombre :");
scanf("%d",&Nbr);
while(Nbr%i != 0 && i < Nbr){
i++;
}
if (i == Nbr)
printf("%d est un nombre premier",Nbr);
else
printf("%d n'est pas un nombre premier",Nbr);
return 0;
}
Une façon simple de déterminer si un nombre est premier est de faire une boucle allant de 2 à n-1 et de vérifier si le nombre est divisible par n'importe quel nombre de cette plage. Si c'est le cas, il ne s'agit pas d'un nombre premier ; sinon, c'est le cas.
39. Écrire un programme en C qui prend deux entiers de l'utilisateur (un nombre de base et un exposant) et calcule la puissance.
Exemple: Dans le cas de 23
2 est le nombre de base
3 est l'exposant
Et la puissance est égale à 2*2*2
Exemple de sortie:
Entrer la base: 2
Entrer l'exposant: 3
2 ^ 3 = 8
#include <stdio.h>
int main()
{
int e, i;
float puissance,b;
puissance = 1;
printf("Entrer la base:");
scanf("%f",&b);
printf("Entrer l'exposant:");
scanf("%d",&e);
for(i=1; i<=e; i++){
puissance = puissance * b;
}
printf("%.1f ^ %d = %.1f",b,e,puissance);
return 0;
}
Voici la logique descriptive étape par étape:
L'utilisateur entre la base et les exposants. Les stocker dans deux variables, b et e.
Déclarer et initialiser une autre variable pour stocker la puissance, puissance = 1.
Exécutez une boucle de 1 à exposant, en incrémentant le compteur de la boucle de 1 à chaque itération. La structure de la boucle doit ressembler à for(i=1; i<=e; i++).
Pour chaque itération à l'intérieur de la boucle, multipliez la puissance par la base, c'est-à-dire puissance = puissance * b.
Enfin, à la fin de la boucle, il ne reste plus que la puissance dans la variable puissance.
40. Ecrivez un programme en C qui demande l'âge et permet de renseigner sa catégorie sachant que les catégories sont les suivantes:
Gamin de 6 à 7 ans
Pupille de 8 à 9 ans
Jeune de 10 à 11 ans
Cadet après 12 ans
Exemple de sortie:
Entrer votre age : 6
Vous êtes Gamin
#include <stdio.h>
int main()
{
int age;
printf("Entrer votre age :");
scanf("%d",&age);
if(age >= 6 && age <= 7)
printf("Vous êtes Gamin");
if(age >= 8 && age <= 9)
printf("Vous êtes Pupille");
if(age >= 10 && age <= 11)
printf("Vous êtes Jeune");
if(age >= 12)
printf("Vous êtes Cadet");
return 0;
}
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec les algorithmes et programmation. Nous espérons que ces exercices vous aideront à améliorer vos compétences sur les algorithmes et programmation. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel sur les algorithmes avant de résoudre les exercices suivants.
1. Écrire un algorithme pour afficher le message ‘Hello, World!’ sur l’écran.
Exemple de sortie:
Hello World!
Algorithme HelloWorld
Début
Ecrire("Hello, World!")
Fin
Dans cet algorithme, nous avons utilisé le mot « Écrire » pour afficher la chaîne de caractères Hello, world! sur notre écran. Voici l’organigramme de cet algorithme:
2. Écrire un algorithme permettant la saisie de deux nombres et l’affichage de leur somme.
Exemple de sortie:
Entrer 1er nombre: 10
Entrer 2éme nombre: 5
La somme de 10 et 5 = 15
Algorithme SommeDeuxNombres
Variables n1,n2,s :réels
Début
Ecrire("Entrer 1er nombre:")
Lire(n1)
Ecrire("Entrer 2éme nombre:")
Lire(n2)
s ← n1 + n2
Ecrire("La somme de ",n1,"et",n2,"=",s)
Fin
Cet algorithme invite l’utilisateur à saisir deux nombres, les additionne, puis affiche le résultat. Voici l’organigramme de cet algorithme:
3. Écrire un algorithme permettant de permuter le contenu de deux entiers n1 et n2 entrés par l’utilisateur, et afficher ces entiers après permutation.
Exemple de sortie:
Entrer un entier n1 : 10
Entrer un entier n2 : 5
------permutation------
n1 = 5
n2 = 10
Algorithme Permutation
Variables n1,n2,tmp :entiers
Début
Ecrire("Entrer un entier n1:")
Lire (n1)
Ecrire("Entrer un entier n2:")
Lire (n2)
tmp ← n1
n1 ← n2
n2 ← tmp
Ecrire("------permutation------")
Ecrire("n1 = ",n1)
Ecrire("n2 = ",n2)
Fin
Cet algorithme déclare d’abord trois variables n1, n2 et tmp, puis demande à l’utilisateur de saisir deux nombres entiers. Ensuite, il utilise une variable temporaire tmp pour échanger les valeurs de n1 et n2, et enfin affiche les valeurs échangées. Voici l’organigramme de cet algorithme:
4. Écrire un algorithme pour calculer la factorielle d’un nombre entier saisi par l’utilisateur. (Remarque: le factoriel de 5, qui s’écrit 5! = 5 × 4 × 3 × 2 × 1).
Exemple de sortie:
Saisir un nombre : 5
Le factoriel de 5 est: 120
Algorithme Factoriel
Variables nbr,f,i: entiers
Début
Ecrire("Saisir un nombre")
Lire (nbr)
f ← 1
Pour i de 1 jusqu'à nbr faire
f ← f * i
FinPour
Ecrire("Le factoriel de ",nbr," est: " f)
Fin
Nous commençons par déclarer les variables que nous utiliserons dans l’algorithme. Nous avons besoin de trois variables : nbr, f et i. Nous les déclarons comme des entiers en utilisant le symbole deux points (:).
Ensuite, nous demandons à l’utilisateur d’entrer la valeur de nbr à l’aide des instructions Ecrire et Lire. Nous écrivons un message invitant l’utilisateur à saisir un entier nbr, puis nous lisons la valeur saisie par l’utilisateur et la stockons dans la variable nbr.
Ensuite, nous initialisons la variable f à 1. Cette variable stockera la factorielle de nbr au fur et à mesure que nous la calculerons dans la boucle. Nous utilisons le signe (←) pour attribuer une valeur à une variable.
Ensuite, nous utilisons une boucle pour itérer de 1 à nbr et multiplier f par i à chaque itération. La boucle a une valeur de départ, une valeur d’arrivée et une valeur d’incrémentation. Dans ce cas, nous commençons à 1, nous terminons à nbr et nous incrémentons de 1. Nous utilisons le mot-clé ‘POUR’ pour commencer la boucle et le mot-clé ‘FinPour’ pour la terminer. Nous utilisons également l’indentation pour montrer le corps de la boucle. À chaque itération, nous mettons à jour la valeur de f en la multipliant par i à l’aide du symbole de l’astérisque (*). De cette façon, nous calculons la factorielle de nbr comme le produit de tous les entiers de 1 à nbr.
Enfin, nous affichons la factorielle de nbr à l’aide de l’instruction Écrire. Nous écrivons un message qui indique la valeur de nbr et sa factorielle séparées par des virgules. Voici l’organigramme de cet algorithme:
5. Écrire un algorithme permettant d’afficher si un nombre saisi est pair ou impair.
Exemple de sortie:
Entrer un nombre: 8
Nombre pair
Algorithme PairImpair
Variables nbr :entier
Début
Ecrire("Entrer un nombre:")
Lire(nbr)
Si(nbr mod 2 = 0) alors
Ecrire("Nombre pair")
SiNon
Ecrire("Nombre impair")
FinSi
Fin
Si un nombre est divisible par 2 sans reste, il est pair. Vous pouvez calculer le reste à l’aide de l’opérateur modulo « mod », comme ceci nbr mod 2 = 0. Si un nombre divisé par 2 laisse un reste de 1, le nombre est impair. Vous pouvez le vérifier en utilisant nbr mod 2 = 1. Voici l’organigramme de cet algorithme:
6. Écrire un algorithme permettant d’afficher le plus grand des 3 nombres saisis au clavier.
Exemple de sortie:
Entrer 1er nombre : 2
Entrer 2éme nombre: 9
Entrer 3éme nombre: 7
Le nombre le plus grand est: 9
Algorithme Max3Nbr
Variables n1,n2,n3,max :entiers
Début
Ecrire("Entrer 1er nombre :")
Lire(n1)
Ecrire("Entrer 2éme nombre:")
Lire(n2)
Ecrire("Entrer 3éme nombre:")
Lire(n3)
max ← n1
Si (n2 >= max) alors
max ← n2
FinSi
Si(n3 >= max) alors
max ← n3
FinSi
Ecrire("Le nombre le plus grand est: ",max)
Fin
Voici l’organigramme de cet algorithme:
7. A quoi sert l’algorithme suivant?
Variable nbr : entier
Debut
nbr ← 0
Ecrire("Entrez un nombre entre 1 et 5")
TantQue(nbr < 1 ou nbr > 5)
Lire(nbr)
Si(nbr < 1 ou nbr > 5) Alors
Ecrire("Nombre incorrect. Recommencez")
FinSi
FinTantQue
Fin
L’algorithme demande à l’utilisateur un nombre de 1 à 5 jusqu’à ce que la réponse est correct.
8. Écrire un algorithme qui calcule la valeur absolue d’un nombre saisi par l’utilisateur.
Exemple de sortie:
Entrer un nombre: -5
La valeur absolue de -5 est 5
Algorithme NbrAbsolue
Variable n :entier
Début
Ecrire("Entrer un nombre :")
Lire(n)
Si(n >= 0) alors
Ecrire("La valeur absolue de ",n," est ",n)
SiNon
Ecrire("La valeur absolue de ",n," est ",-n)
FinSi
Fin
Voici l’organigramme de cet algorithme:
9. Écrire un algorithme qui calcule la moyenne de 3 nombres entrés par l’utilisateur.
Exemple de sortie:
Entrer 1er nombre : 5
Entrer 2éme nombre: 7
Entrer 3éme nombre: 3
La moyenne est : 5
Algorithme Moyenne3Nbr
Variables n1,n2,n3,moy:entiers
Début
Ecrire("Entrer n1:")
Lire(n1)
Ecrire("Entrer n2:")
Lire(n2)
Ecrire("Entrer n3:")
Lire(n3)
moy ← (n1+n2+n3) div 3
Ecrire("La moyenne est: ",moy)
Fin
La formule pour trouver la moyenne de nombres ou de valeurs donnés est très simple. Il suffit d’additionner tous les nombres et de diviser le résultat par le nombre de valeurs données. La formule pour calculer la moyenne est donc la suivante:
Moyenne = Total/Nombre
Ici, nous utilisons 3 nombres, donc pour calculer la moyenne, nous devons additionner les 3 nombres et les diviser par 3.
10. Écrire un algorithme qui affiche 10 fois « Hello ». En utilisant la boucle Tant que.
Algorithme Hello10Fois
Variable n: entier
Début
n ← 1
TantQue(n <= 10) faire
Ecrire("Hello")
n ← n + 1
FinTantQue
Fin
Dans cet algorithme, la boucle TantQue continuera à s'exécuter tant que la variable n est inférieure ou égale à 10. À l'intérieur de la boucle, le texte est affiché, puis la variable n est incrémentée de 1 jusqu'à ce que la condition ne soit plus remplie. Voici l'organigramme de cet algorithme:
11. Ecrivez un algorithme qui calcule la somme de 1 à 10. En utilisant la boucle TantQue.
Indication:
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55
Exemple de sortie:
La somme de 1 à 10 est 55
Algorithme Somme1A10
Variable i,sum: entiers
Début
i ← 1
sum ← 0
TantQue(i <= 10) faire
sum ← sum + i
i ← i + 1
FinTantQue
Ecrire("La somme de 1 à 10 est: ",sum)
Fin
Dans la boucle TantQue ci-dessus, la variable i est initialisée à 1 et la boucle se poursuit tant que i est inférieur ou égal à 10. À chaque itération de la boucle, la variable sum s'additionne à la valeur de i.
Enfin, la boucle incrémente la valeur de i de 1, et le processus se répète jusqu'à ce que la condition i <= 10 ne soit plus vraie. Dans ce cas on affiche le message "La somme de 1 à 10 est: sum".
12. Ecrivez un algorithme qui calcule la somme de 1 à N, où N est saisi par l'utilisateur. En utilisant la boucle TantQue.
Indication:
1 + 2 + 3 + 4 + 5 + 6 + 7 = 28
Exemple de sortie:
Entrer un nombre: 7
La somme de 1 à 10 est 28
Algorithme SommeDe1AN
Variables i,sum,n: entiers
Debut
i ← 1
sum ← 0
Ecrire("Entrer un nombre:")
Lire(n)
TantQue(i <= n) faire
sum ← sum + i
i ← i + 1
FinTantQue
Ecrire("La somme de 1 à n est:",sum)
Fin
La boucle TantQue est itérée n fois. À chaque itération, la valeur de i est ajoutée à la somme sum et i est incrémenté de 1.
13. Ecrivez un algorithme qui affiche "Hello" 10 fois. En utilisant la boucle POUR.
Algorithme Hello10Fois
Variable n: entier
Début
Pour n de 1 jusqu'à 10 faire
Ecrire("Hello")
FinPour
Fin
Dans cet algorithme, la boucle POUR continuera à s'exécuter tant que la variable n est inférieure ou égale à 10. À l'intérieur de la boucle, le texte est affiché, puis la variable n est incrémentée de 1 jusqu'à ce que la condition ne soit plus remplie. Voici l'organigramme de cet algorithme:
14. Ecrivez un algorithme qui calcule la somme de 1 à 10. En utilisant la boucle POUR.
Indication:
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55
Exemple de sortie:
La somme de 1 à 10 est 55
Algorithme Somme1A10
Variable i,sum: entiers
Début
sum ← 0
Pour i de 1 jusqu'à 10 faire
sum ← sum + i
FinPour
Ecrire("La somme de 1 à 10 est:", sum)
Fin
Dans la boucle POUR ci-dessus, la variable i est initialisée à 1 et la boucle se poursuit tant que i est inférieur ou égal à 10. À chaque itération de la boucle, la variable sum s'additionne à la valeur de i.
15. Ecrivez un algorithme qui calcule la somme de 1 à N, où N est saisi par l'utilisateur. En utilisant la boucle POUR.
Indication:
1 + 2 + 3 + 4 + 5 + 6 + 7 = 28
Exemple de sortie:
Entrer un nombre: 7
La somme de 1 à 10 est 28
Algorithme SommeDe1AN
Variables i,sum,n: entiers
Début
sum ← 0
Ecrire("Entrer un nombre:")
Lire(n)
Pour i de 1 jusqu'à n faire
sum ← sum + i
FinPour
Ecrire("La somme de 1 à n est:",sum)
Fin
La boucle POUR est itérée n fois. À chaque itération, la valeur de i est ajoutée à la somme sum et i est incrémenté de 1.
16. Écrire un algorithme qui affiche la table de multiplication de 3. En utilisant la boucle For.
Exemple de sortie:
3 x 0 = 0
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27
3 x 10= 30
Algorithme TableMultiplication
Variable i:entier
Début
Pour i de 0 jusqu'à 10 faire
Ecrire("3 x ",i," = ",i*3)
FinPour
Fin
Nous utilisons la boucle POUR pour afficher la table de multiplication de 3. La boucle s'exécute de i = 1 à i = 10. À chaque itération de la boucle, i * 3 est affiché.
17. Écrire un algorithme qui affiche la table de multiplication d'un entier saisi par l'utilisateur, en utilisant la boucle POUR.
Exemple de sortie:
Entrer un nombre: 7
7 x 0 = 0
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10= 70
Algorithme TableMultiplicationDeN
Variables i,n :entiers
Début
Ecrire("Donner un nombre:")
Lire(n)
Pour i de 0 jusqu'à 10 faire
Ecrire(n," x ",i," = ",i*n)
FinPour
Fin
Nous utilisons la boucle POUR pour afficher la table de multiplication de n. La boucle s'exécute de i = 1 à i = 10. À chaque itération de la boucle, i * n est affiché.
18. Ecrivez un algorithme qui affiche "Hello" 10 fois. En utilisant la boucle Répéter Jusqu’à.
Algorithme Hello10Fois
Variables i: entier
Début
i ← 1
Répéter
Ecrire("Hello")
i ← i+1
Jusqu'à i>10
Fin
La principale différence entre la boucle "TantQue" et "Répéter Jusqu’à" est que dans la boucle Répéter Jusqu’à", la boucle s'exécute une fois avant même de vérifier la condition, alors que dans une boucle "TantQue", la boucle s'exécute si la condition est vraie.
19. Ecrivez un algorithme qui calcule la somme de 1 à 10. En utilisant la boucle Répéter Jusqu’à.
Indication:
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55
Exemple de sortie:
La somme de 1 à 10 est 55
Algorithme Somme1A10
Variables i,sum: entiers
Début
sum ← 0
i ← 1
Répéter
sum ← sum + i
i ← i+1
Jusqu'à i > 10
Ecrire("La somme de 1 à 10 est:" sum)
Fin
20. Écrire un algorithme qui affiche la table de multiplication de 2. En utilisant la boucle Répéter Jusqu’à.
Exemple de sortie:
2 x 0 = 0
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
2 x 10= 20
Algorithme TableMultiplication
Variable i:entier
Début
i ← 0
Répéter
Ecrire("2 x ",i," = ",i*2)
i ← i+1
Jusqu'à i > 10
Fin
21. Écrire un algorithme permettant de saisir 10 nombres et de les stocker dans un tableau appelé myTab, puis de les afficher.
Exemple de sortie:
6 3 8 1 5 9 4 2 6 0
6 3 8 1 5 9 4 2 6 0
Algorithme AfficherTableau
Variable myTab[10]:reéls
i : entier
Début
Pour i de 1 jusqu❛à 10 faire
lire(myTab[i])
FinPour
Pour i de 1 jusqu'à 10 faire
Ecrire(myTab[i])
FinPour
Fin
L'algorithme ci-dessus invite l'utilisateur à saisir 10 entiers dans un tableau nommé myTab, puis affiche les éléments du tableau.
La première boucle POUR demande à l'utilisateur de saisir 10 éléments dans le tableau, et la boucle POUR s'exécute de 1 jusqu'à 10, invitant l'utilisateur à saisir chaque élément à l'aide de lire(), et stockant chaque entrée dans l'index correspondant du tableau myTab[i].
La deuxième boucle POUR affiche ensuite le contenu du tableau, qui parcourt les éléments de myTab et affiche chaque élément à l'aide de Ecrire().
22. Écrire un algorithme permettant d'entrer 10 notes et d'afficher la moyenne de ces notes.
Exemple de sortie:
6 3 8 1 5 9 4 2 6 0
La moyenne est: 4,4
Algorithme NoteMoyenne
Variables Notes[10], sum :réels
i :entier
Début
sum ← 0
Pour i de 1 jusqu'à 10 faire
Lire(Notes[i])
sum ← sum + Notes[i]
FinPour
Ecrire("La moyenne est:",sum/10)
Fin
L'algorithme demande à l'utilisateur de saisir 10 notes dans le tableau, et la boucle POUR s'exécute de 1 jusqu'à 10, invitant l'utilisateur à saisir chaque élément à l'aide de lire(), et stockant chaque entrée dans l'index correspondant du tableau Notes[i].
Ensuite, à chaque itération de la boucle, la somme de chaque élément saisi est calculée. Une fois la boucle POUR terminée, la moyenne est calculée et affichée à l'écran à l'aide de Ecrire().
23. Écrire un algorithme permettant la saisi de 10 nombres et l'affichage du maximum de ces nombres.
Exemple de sortie:
Entrer un nombre: 6
Entrer un nombre: 3
Entrer un nombre: 8
Entrer un nombre: 1
Entrer un nombre: 5
Entrer un nombre: 7
Entrer un nombre: 4
Entrer un nombre: 2
Entrer un nombre: 6
Entrer un nombre: 0
Le maximum est: 8
Algorithme myTabMax
Variables myTab[10],max,i:réels
Début
Ecrire("Entrer un nombre:")
Lire(myTab[0])
max ← myTab[0]
Pour i de 1 jusqu'à 10 faire
Ecrire("Entrer un nombre:")
Lire(myTab[i])
Si (myTab[i] > max) alors
max ← myTab[i]
FinSi
FinPour
Ecrire("Le maximum est:",max)
Fin
Dans cet algorithme nous avons créer une variable max et l'initier à myTab[0] pour stocker le maximum dans le tableau.
Itérer sur le tableau
Comparer myTab[i] avec max.
Si myTab[i] > max, mettre à jour max ← myTab[i].
Une fois l'itération terminée, renvoyer max comme réponse.
24. Ecrivez un algorithme qui permet d'entrer 10 nombres dans un tableau, et de calculer le nombre d'occurrences d'un élément E dans ce tableau. Où E est entré par l'utilisateur.
Exemple de sortie:
Entrer un nombre: 6
Entrer un nombre: 3
Entrer un nombre: 8
Entrer un nombre: 6
Entrer un nombre: 5
Entrer un nombre: 7
Entrer un nombre: 4
Entrer un nombre: 6
Entrer un nombre: 6
Entrer un nombre: 0
Entrer Le nombre recherché: 6
Nombre d'occurences de 6 est 4
Algorithme NbrOccurences
Variables nbrRech,myTab[10]:réels
nbrOcc,i:entiers
Début
nbrOcc ← 0
Pour i de 1 jusqu❛à 10 faire
Ecrire("Entrer un nombre:")
Lire(myTab[i])
FinPour
Ecrire("Entrer Le nombre recherché:")
Lire(nbrRech)
Pour i de 1 jusqu❛à 10 faire
Si(myTab[i] = nbrRech) alors
nbrOcc ← nbrOcc + 1
FinSi
FinPour
Ecrire("Nombre d'occurences de ",nbrRech," est ",nbrOcc)
Fin
Pour compter le nombre d'occurrences d'une valeur spécifique dans un tableau, nous pouvons utiliser une simple boucle POUR tout en recherchant notre valeur cible. Si la valeur cible est trouvée, nous incrémentons la variable nbrOcc. Nous procédons de cette façon jusqu'à ce que l'ensemble du tableau soit parcouru.
Approche:
Initialiser la variable nbrOcc à zéro.
On parcourt le tableau et on vérifie si l'élément courant(myTab[i]) correspond à la valeur cible(nbrRech).
Si c'est le cas, nbrOcc est incrémenté de 1.
Dans le cas contraire, passer à l'itération suivante.
Répétez le processus jusqu'à ce que tous les éléments du tableau aient été vérifiés.
Enfin, retourner nbrOcc.
25. Ecrivez un algorithme pour entrer 10 entiers dans un tableau et trier ce tableau dans un ordre croissant. Affichez ensuite ce tableau après l'avoir trié.
Exemple de sortie:
Entrer un nombre: 8
Entrer un nombre: 1
Entrer un nombre: 5
Entrer un nombre: 6
Entrer un nombre: 3
Entrer un nombre: 2
Entrer un nombre: 4
Entrer un nombre: 7
Entrer un nombre: 9
Entrer un nombre: 0
Tableau trié: 0 1 2 3 4 5 6 7 8 9
Algorithme TrierTab
Variables i,j,tmp,myTab[10]:entiers
Début
Pour i de 1 jusqu❛à 10 faire
Ecrire("Entrer un nombre:")
Lire(myTab[i])
FinPour
Pour i de 1 jusqu❛à 9 faire
Pour j de i+1 jusqu'à 10 faire
Si(myTab[j] < myTab[i]) alors
tmp ← myTab[i]
myTab[i] ← myTab[j]
myTab[j] ← tmp
FinSi
FinPour
FinPour
Pour i de 1 jusqu❛à 10 faire
Ecrire(myTab[i])
FinPour
Fin
L'algorithme ci-dessus invite l'utilisateur à saisir 10 nombres dans un tableau nommé myTab, puis affiche les éléments triés du tableau.
La première boucle POUR demande à l'utilisateur de saisir 10 éléments dans le tableau, et la boucle POUR s'exécute de 1 jusqu'à 10, invitant l'utilisateur à saisir chaque élément à l'aide de lire(), et stockant chaque entrée dans l'index correspondant du tableau myTab[i].
La deuxième boucle POUR parcourt le tableau myTab et permute les éléments du tableau(permute deux éléments aux positions i et j) en utilisant une variable temporaire pour contenir l'une des valeurs pendant la permutation. L'algorithme parcourt le tableau répétitivement, compare chaque paire d'éléments adjacents et les échange si nécessaire. Après le premier passage, l'élément le plus grand est placé à la fin du tableau.
Dans l'algorithme de tri à bulle, nous comparons les deux premiers éléments d'un tableau et les permutons si nécessaire.
Si nous voulons trier les éléments d'un tableau dans l'ordre croissant et si le premier élément est plus grand que le second, nous devons permuter les éléments.
Si le premier élément est plus petit que le second, il n'est pas nécessaire de permuter les éléments. Ce processus se poursuit jusqu'à ce que le dernier et l'avant-dernier élément soient comparés et permutés.
La troisième boucle POUR affiche ensuite le tableau trié, qui parcourt les éléments de myTab et affiche chaque élément à l'aide de Ecrire().
26. Écrire un algorithme pour afficher les nombres pairs entre 0 et N, où N est saisi par l'utilisateur.
Exemple de sortie:
Entrer un nombre : 9
0 2 4 6 8
Algorithme NbrPaire
Variables i,N : entiers
Début
Ecrire("Entrer un nombre: ")
lire(N)
Pour i de 0 jusqu❛à N faire
Si(i mod 2 = 0) alors
Ecrire(i)
FinPour
Fin
Description pas à pas de la logique permettant d'afficher tous les nombres pairs compris entre 1 et n à en utilisant l'instruction "Si":
L'utilisateur doit saisir la limite supérieure des nombres pairs. Stockez-la dans la variable N.
Exécutez la boucle "POUR" à partir de 1, jusqu'à N.
À l'intérieur du corps de la boucle, vérifiez la condition pair/impair. Si le nombre actuel i est divisible par 2, alors i est pair. Autrement dit, Si(i mod 2 = 0), la valeur de i est affichée.
27. Ecrivez un algorithme qui calcule la somme des nombres impairs compris entre 1 et un nombre entier N saisi par l'utilisateur. Exemple N=10 Somme=1+3+5+7+9=25
Exemple de sortie:
Entrer un nombre : 10
25
Algorithme SumNbrImpaires
Variables sum,i,N: entiers
Début
sum ← 0
Ecrire("Entrer un nombre:")
Lire(N)
Pour i de 1 jusqu❛à N faire
Si (i mod 2 ≠ 0) alors
sum ← sum + i
FinSi
FinPour
Ecrire(sum)
Fin
Dans cet algorithme:
L'utilisateur doit saisir la limite supérieure des nombres impairs. Stockez-la dans la variable N.
Exécutez la boucle "POUR" à partir de 1, jusqu'à N.
À l'intérieur du corps de la boucle, vérifiez la condition pair/impair. Si le nombre actuel i n'est pas divisible par 2, alors i est impair. Autrement dit, Si(i mod 2 ≠ 0), nous ajoutons le nombre actuel i à la variable sum.
Enfin nous affichons la somme des nombres impairs.
28. Écrire un algorithme permettant de calculer le plus grand commun diviseur (PGCD) entre deux nombres entiers entrés par l'utilisateur.
Exemple:
n1=18 et n2=45
PGCD(18, 45) = 9
Exemple de sortie:
Entrer deux nombres: 18 45
Le PGCD est : 9
Algorithme TrouverPGCD
Variables n1,n2,i,pgcd: entiers
Début
Ecrire("Entrer deux nombres:")
Lire(n1,n2)
i ← 1
TantQue(i<=n1 et i<=n2) faire
Si(n1 mod i=0 et n2 mod i=0) alors
pgcd ← i
FinSi
i ← i + 1
FinTantQue
Ecrire("Le PGCD est:",pgcd)
Fin
Dans ce programme, deux nombres entiers entrés par l'utilisateur sont stockés dans les variables n1 et n2. Ensuite, la boucle TantQue est itérée jusqu'à ce que i soit inférieur à n1 et n2.
A chaque itération, si n1 et n2 sont exactement divisibles par i, la valeur de i est affectée à la variable "pgcd".
Lorsque la boucle TantQue est terminée, le plus grand diviseur commun de deux nombres est stocké dans la variable "pgcd".
29. Écrire un algorithme qui affiche un triangle d'entiers, en fonction d'un entier N saisi par l'utilisateur.
Algorithme NTriangle
Variables N,i,j: entiers
Début
Ecrire("Donner un nombre: ")
Lire(N)
Pour i de 1 jusqu❛à N faire
Pour j de 1 jusqu❛à i faire
Ecrire(i)
FinPour
Ecrire("\n")
FinPour
Fin
Le programme invite l'utilisateur à saisir un nombre à l'aide de la fonction Ecrire() et stocke la valeur dans la variable "N" à l'aide de la fonction Lire(). La boucle POUR est ensuite utilisée pour exécuter le code à l'intérieur de la boucle le nombre de fois spécifié par l'utilisateur. La boucle POUR commence avec "i" initialisé à 1, et la boucle continue jusqu'à ce que "i" soit inférieur ou égal à "N".
La deuxième boucle POUR est imbriquée dans la première boucle POUR et est utilisée pour exécuter de manière répétée le code à l'intérieur de la boucle pendant le nombre de fois spécifié par l'utilisateur. La boucle POUR commence avec "j" initialisé à 1, et la boucle continue jusqu'à ce que "j" soit inférieur ou égal à "i".
La fonction Ecrire() à l'intérieur de la boucle imbriquée est utilisée pour afficher le nombre actuelle (i) à l'écran à chaque fois que la boucle est exécutée. Les valeurs de "i" et "j" sont incrémentées de 1 à chaque itération des boucles, de sorte que les boucles se terminent finalement lorsque "i" et "j" atteignent la valeur de "N".
 
30. Ecrire un algorithme qui compte le nombre de chiffres dans un nombre saisi par l'utilisateur.
Exemple de sortie:
Donner un nombre: 9876
Le nombre de chiffres est 4
Algorithme CompterChiffres
Variables Nbr,i: entiers
Début
Ecrire("Donner un nombre: ")
Lire(Nbr)
i ← 1
TantQue(Nbr div 10 ≠ 0) faire
Nbr ← Nbr div 10
i ← i + 1
FinTantQue
Ecrire("Le nombre de chiffres est",i)
Fin
L'algorithme divise le nombre saisi par l'utilisateur par 10 dans la boucle TantQue jusqu'à ce que le résultat atteigne zéro. Le nombre d'itérations correspondra au nombre de chiffres.
L'entier saisi par l'utilisateur est stocké dans la variable Nbr. Ensuite, la boucle TantQue est itérée jusqu'à ce que la condition (Nbr div 10 ≠ 0) soit évaluée à 0 (False).
Après la première itération, la valeur de Nbr est de 987 et le compteur est incrémenté à 1.
Après la deuxième itération, la valeur de Nbr sera de 98 et le compteur sera incrémenté à 2.
Après la troisième itération, la valeur de Nbr sera de 9 et le compteur sera incrémenté à 3.
Après la quatrième itération, la valeur de Nbr sera 0 et le compteur sera incrémenté à 4.
La condition de la boucle est alors évaluée à false et la boucle se termine.
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec les algorithmes et programmation. Nous espérons que ces exercices vous aideront à améliorer vos compétences sur les algorithmes et programmation. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel sur les algorithmes avant de résoudre les exercices suivants.
Veuillez voir les exercices de 1 à 30 sur ce lien.
31. Ecrivez un algorithme pour inverser les chiffres d’un nombre saisi par l’utilisateur.
Exemple de sortie:
Donner un nombre: 123
321
Algorithme InverserUnNombre
Variables Nbr,rev: entiers
Début
rev ← 0
Ecrire("Donner un nombre:")
Lire(Nbr)
TantQue(Nbr > 0) faire
rev ← rev * 10
rev ← rev + (Nbr mod 10)
Nbr ← Nbr div 10
FinTantQue
Ecrire(rev)
Fin
Voici ce que fait l’algorithme ci-dessus:
Initialise la variable rev ← 0.
Dans la boucle TantQue multiplie le nombre inversé ‘rev’ par 10, ajoutez le reste du nombre original ‘Nbr’ divisé par 10 à ‘rev’.
C’est-à-dire, rev ← rev + (Nbr mod 10)
Diviser le nombre original par 10.
Dans cette étape, la valeur du nombre original ‘Nbr’ est mise à jour en la divisant par 10. À chaque itération, le dernier chiffre du nombre original ‘Nbr’ est supprimé et la boucle se termine lorsque la valeur du nombre original ‘Nbr’ est égale à 0.
Maintenant, inversons le nombre 123 en utilisant l’algorithme ci-dessus.
32. Écrire un algorithme permettant d’entrer un nombre et d’afficher le triangle d’étoiles.
Exemple de sortie:
Entrez un nombre: 5
*
***
*****
*******
*********
Algorithme TrianglEtoiles
Variables Nbr,i,j: entiers
Début
Ecrire("Entrez un nombre:")
Lire(Nbr)
Ecrire("\n")
Pour i de 0 à Nbr-1 faire
Pour j de 1 à (Nbr*2)-1 faire
Si (j >= Nbr-i et j <= Nbr+i ) alors
Ecrire("*")
SiNon
Ecrire(" ")
FinSi
FinPour
Ecrire("\n")
FinPour
Fin
33. Écrire un algorithme qui permet de savoir si le nombre saisi est Premier ou non. (Un nombre premier est un nombre uniquement divisible par 1 ou par lui-même).
Exemple de sortie:
Entrer un nombre : 29
29 est un nombre premier
Entrer un nombre : 21
21 n'est pas un nombre premier
21 a quatre diviseurs (1, 3, 7 et 21) donc ce n'est pas un nombre premier.
Algorithme NbrPremier
Variables Nbr,i:entiers
Début
Ecrire("Entrer un nombre:")
Lire(Nbr)
i ← 2
TantQue(Nbr mod i ≠ 0 et i < Nbr) faire
i ← i + 1
FinTantQue
Si (i = Nbr) alors
Ecrire(Nbr," est un nombre premier")
SiNon
Ecrire(Nbr," n'est pas un nombre premier")
FinSi
Fin
Une façon simple de déterminer si un nombre est premier est de faire une boucle allant de 2 à n-1 et de vérifier si le nombre est divisible par n'importe quel nombre de cette plage. Si c'est le cas, il ne s'agit pas d'un nombre premier ; sinon, c'est le cas.
34. Ecrivez un algorithme qui permet de saisir 5 nombres dans un tableau. Comptez ensuite le nombre d'éléments pairs et impairs.
Exemple de sortie:
Entrer un nombre: 1
Entrer un nombre: 3
Entrer un nombre: 2
Entrer un nombre: 6
Entrer un nombre: 9
Total des éléments pairs: 2
Total des éléments impaires: 3
Algorithme NbrPaireImpaire
Variables myTab[10],i,pair,impair :entiers
Début
pair ← 0
impair ← 0
Pour i de 1 à 5 faire
Ecrire("Entrer un nombre:")
Lire(myTab[i])
FinPour
Pour i de 1 à 5 faire
Si(myTab[i] mod 2 = 0) alors
pair ← pair + 1
SiNon
impair ← impair + 1
FinSi
FinPour
Ecrire("Total des éléments pairs:",pair)
Ecrire("Total des éléments impaires:",impair)
Fin
L'algorithme ci-dessus invite l'utilisateur à saisir 5 nombres dans un tableau nommé myTab, puis affiche le total des éléments pairs et impaires.
Déclarez et initialisez deux variables avec zéro pour stocker les nombres pairs et impairs. pair ← 0 et impair ← 0.
La première boucle POUR demande à l'utilisateur de saisir 5 éléments dans le tableau, et la boucle POUR s'exécute de 1 jusqu'à 5, invitant l'utilisateur à saisir chaque élément à l'aide de lire(), et stockant chaque entrée dans l'index correspondant du tableau myTab[i].
La deuxième boucle POUR parcourt le tableau myTab de 0 à 5. A l'intérieur de la boucle, incrémenter le nombre pair de 1 si l'élément courant du tableau est pair. Sinon, on incrémente le nombre impair.
Enfin, nous affichons le résultat à l'aide de Ecrire().
35. Ecrivez un algorithme qui demande d'entrer un tableau Tab de 10 nombres, et de placer les éléments pairs dans un tableau Tab1 et les éléments impairs dans un tableau Tab2. Affichez ensuite Tab1 et Tab2.
Algorithme TabPairImpaire
Variables i,j,k:entiers
Tab[10],Tab1[10],Tab2[10]:tableaux d'entiers
Début
j ← 1
k ← 1
Ecrire("Tab:")
Pour i de 1 à 10 faire
Lire(Tab[i])
FinPour
Pour i de 1 à 10 faire
Si(Tab[i] mod 2 = 0) alors
Tab1[j] ← Tab[i]
j ← j + 1
SiNon
Tab2[k] ← Tab[i]
k ← k + 1
FinSi
FinPour
Ecrire("Tab1:")
Pour i de 1 à j faire
Ecrire(Tab1[i])
FinPour
Ecrire("Tab2:")
Pour i de 1 à k faire
Ecrire(Tab2[i])
FinPour
Fin
La première instruction Ecrire demande à l'utilisateur d'entrer N nombre d'éléments dans le tableau Tab à l'aide d'une boucle POUR, et stocke chaque entrée dans l'index correspondant du tableau Tab[i].
La boucle POUR suivante itère ensuite sur chaque élément de Tab et sépare les éléments pairs et impairs dans deux tableaux différents Tab1 et Tab2, respectivement, à l'aide d'instructions Si-SiNon. Les variables j et k sont utilisées pour suivre les indices des éléments pairs et impairs dans les deux tableaux.
Enfin, les deux dernières instructions Ecrire (Ligne 24 et 28) affichent les éléments pairs et impairs trouvés, respectivement, en utilisant une boucle POUR pour itérer sur chaque élément des deux tableaux.
36. Écrire un algorithme qui lit un caractère et détermine si c'est une lettre ou non, dans le cas d'une lettre, il indique si c'est une minuscule ou une majuscule.
Exemple de sortie:
Donnez une lettre: a
C'est une lettre Minuscule
Donnez une lettre: A
C'est une lettre Majuscule
Donnez une lettre: 5
C'est pas une lettre!
Algorithme MinusculeMajuscule
Variables l: caractère
Début
Ecrire("Donnez une lettre:")
Lire(l)
Si(l >= 65 et l <=90 ) alors
Ecrire("C'est une lettre Majuscule")
SiNon
Si(l >= 97 et l <= 122) alors
Ecrire("C'est une lettre Minuscule")
SiNon
Ecrire("C'est pas une lettre!")
FinSi
FinSi
Fin
Pour résoudre ce problème, il faut connaître la valeur ASCII d'un caractère. C'est la façon la plus simple de déterminer si un caractère est alphabétique ou non. Ce problème est résolu à l'aide des détails suivants:
Les lettres majuscules (A-Z) se situent dans la plage 65-91 de la valeur ASCII.
Les lettres minuscules (a-z) se situent dans la plage 97-122 de la valeur ASCII.
Toute valeur ASCII différente est un caractère non alphabétique.
37. Écrire un algorithme qui compte le nombre d'éléments dupliqués dans un tableau de nombres entiers saisi par l'utilisateur.
Exemple de sortie:
Entrer un nombre: 5
Entrer un nombre: 1
Entrer un nombre: 5
Entrer un nombre: 6
Entrer un nombre: 3
Entrer un nombre: 5
Entrer un nombre: 4
Entrer un nombre: 7
Entrer un nombre: 9
Entrer un nombre: 5
Nombre total d'éléments dupliqués est: 4
Algorithme ElémentsDupliqués
Variables myTab[10],compteur,i,j: entiers
Début
Pour i de 1 à 10 faire
Ecrire("Enter un entier:")
Lire(myTab[i])
FinPour
compteur ← 0
Pour i de 1 à 10 faire
Pour j de i+1 à 10 faire
Si(myTab[i] = myTab[j]) alors
compteur ← compteur + 1
FinSi
FinPour
FinPour
Ecrire("Nombre total d'éléments dupliqués est:",compteur)
Fin
L'algorithme ci-dessus invite l'utilisateur à saisir 10 nombres dans un tableau nommé myTab.
La première boucle POUR demande à l'utilisateur de saisir 10 éléments dans le tableau, et la boucle POUR s'exécute de 1 jusqu'à 10, invitant l'utilisateur à saisir chaque élément à l'aide de lire(), et stockant chaque entrée dans l'index correspondant du tableau myTab[i].
Initialiser la variable "compteur" avec 0 pour stocker le nombre de doublons.
Pour compter le nombre total d'éléments dupliqués dans un tableau donné, nous avons besoin de deux boucles. Exécutez une boucle extérieure de 0 à la taille(10). La structure de la boucle doit ressembler à Pour i de 1 à 10 faire. Cette boucle est utilisée pour sélectionner chaque élément du tableau et vérifier les éléments suivants pour les éléments en double en utilisant une autre boucle imbriquée.
Exécutez une autre boucle interne pour trouver le premier doublon de l'élément actuel du tableau. Exécutez une boucle interne de i + 1 à la taille(10), la structure de la boucle devrait ressembler à Pour j de i+1 à 10 faire. Pourquoi exécuter la boucle à partir de i + 1 ? Parce que nous devons rechercher les éléments en double dans les éléments suivants, à partir de l'élément actuel.
La boucle interne vérifie la présence d'un élément en double. Si c'est le cas, le compteur est incrémenté. C'est-à-dire Si(myTab[i] = myTab[j]) alors, compteur ← compteur + 1.
38. Écrire un algorithme qui prend deux entiers de l'utilisateur (un nombre de base et un exposant) et calcule la puissance.
Exemple: Dans le cas de 23
2 est le nombre de base
3 est l'exposant
Et la puissance est égale à 2*2*2
Exemple de sortie:
Entrer la base: 2
Entrer l'exposant: 3
2 ^ 3 = 8
Algorithme PuissanceNbr
Variables i,e: entiers
puissance,b :réel
Début
puissance ← 1
Ecrire("Entrer la base:")
Lire(b)
Ecrire("Entrer l'exposant:")
Lire(e)
Pour i de 1 à e faire
puissance ← puissance * b
FinPour
Ecrire(b," ^ ",e," = ",puissance)
Fin
Voici la logique descriptive étape par étape:
L'utilisateur entre la base et les exposants. Les stocker dans deux variables, b et e.
Déclarer et initialiser une autre variable pour stocker la puissance, puissance ← 1.
Exécutez une boucle de 1 à exposant, en incrémentant le compteur de la boucle de 1 à chaque itération. La structure de la boucle doit ressembler à Pour i de 1 à e faire.
Pour chaque itération à l'intérieur de la boucle, multipliez la puissance par la base, c'est-à-dire puissance ← puissance * b.
Enfin, à la fin de la boucle, il ne reste plus que la puissance dans la variable puissance.
39. Écrire un algorithme qui permet d'entrer 10 nombres entiers et de savoir si ces nombres entiers sont successifs ou non.
Exemple de sortie:
0 1 3 4 5 6 7 8 9
Les nombres ne sont pas successives
11 12 13
Les nombres sont successives
Algorithme NbrSuccessive
Variables myTab[10],i,check: entiers
Début
check ← 0
Ecrire("Entrer un nombre:")
Lire(myTab[1])
Pour i de 2 à 10 faire
Ecrire("Entrer un nombre:")
Lire(myTab[i])
Si(myTab[i] < myTab[i-1])
check ← 1
FinSi
FinPour
Si(check = 0) alors
Ecrire("Les nombres sont successives")
SiNon
Ecrire("Les nombres ne sont pas successives")
FinSi
Fin
40. Ecrivez un algorithme qui demande l'âge et permet de renseigner sa catégorie sachant que les catégories sont les suivantes:
Gamin de 6 à 7 ans
Pupille de 8 à 9 ans
Jeune de 10 à 11 ans
Cadet après 12 ans
Exemple de sortie:
Entrer votre age : 6
Vous etes Gamin
Algorithme AgeCategorie
Variables age:réel
Début
Ecrire("Entrer votre age:")
Lire(age)
Si(age >= 5 et age <= 7) alors
Ecrire("Vous etes Gamin")
FinSi
Si(age >= 8 et age <= 9) alors
Ecrire("Vous etes Pupille")
FinSi
Si(age >= 10 et age <= 11) alors
Ecrire("Vous etes Jeune")
FinSi
Si(age >= 12) alors
Ecrire("Vous etes Cadet")
FinSi
Fin
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec les algorithmes et programmation. Nous espérons que ces exercices vous aideront à améliorer vos compétences sur les algorithmes et programmation. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel sur les algorithmes avant de résoudre les exercices suivants.
41. Un magasin offre à ses clients 25% de réduction sur les montants d’achat supérieurs à 500 €. Ecrivez un algorithme qui permet d’entrer le prix total hors TVA et de calculer le montant TTC en tenant compte de la remise et du fait que la TVA = 10%.
Exemple de sortie:
Entrer le montant HT: 900
Le montant TTC est: 742.5
Algorithme CalculerTTC
Variables TTC,HT: réels
Début
Ecrire("Entrer le montant HT:")
Lire(HT)
TTC ← HT + HT * 0.1
Si(TTC > 500) alors
TTC ← TTC - TTC * 0.25
Ecrire("Le montant TTC est:",TTC)
SiNon
Ecrire("Le montant TTC est:",TTC)
FinSi
Fin
42. Ecrire un algorithme qui demande à l’utilisateur deux nombres n1 et n2 et lui indique ensuite si le produit de ces deux nombres est positif ou négatif. On prévoit dans le programme le cas où le produit peut être nul.
Exemple de sortie:
Entrer le 1er nombre: -1.5
Entrer le 2éme nombre: 3
Le produit est négatif
-----------------------------
Entrer le 1er nombre: 1
Entrer le 2éme nombre: 3
Le produit est positif
-----------------------------
Entrer le 1er nombre: 0
Entrer le 2éme nombre: 3
Le produit est nul
Algorithme ProduitNbr
Variables n1,n2:réels
Début
Ecrire("Entrer le 1er nombre:")
Lire(n1)
Ecrire("Entrer le 2éme nombre:")
Lire(n2)
Si(n1 == 0 ou n2 == 0) alors
Ecrire("Le produit est nul")
FinSi
Si(n1*n2 < 0) alors
Ecrire("Le produit est négatif")
FinSi
Si(n1*n2 > 0) alors
Ecrire("Le produit est positif")
FinSi
Fin
43. Écrire un algorithme qui permette d’ajouter un commentaire sur le score saisi au clavier (si le score est supérieur à 10 alors il affiche « GOOD! » sinon « NOT GOOD! » (NB: le score est compris entre 0 et 20!).
Exemple de sortie:
Entrer le score: 15.5
GOOD!
------------------
Entrer le score: 5
NOT GOOD!
------------------
Entrer le score: -5
Score invalide!
Algorithme ValidateScore
Variables score :réel
Début
Ecrire("Entrer le score: ")
Lire(score)
Si(score < 0 ou score > 20) alors
Ecrire("Score invalide!")
FinSi
Si(score >= 0 et score < 10) alors
Ecrire("NOT GOOD!")
FinSi
Si(score >= 10 et score <= 20) alors
Ecrire("GOOD!")
Fin
44. Le service de photocopie de votre université facture 0,50 € pour les 10 premières photocopies, 0,45 € pour les 20 suivantes et 0,30 € au-delà de 30 photocopies. Ecrivez un algorithme qui demande à l'utilisateur le nombre de photocopies réalisées et affiche la facture correspondante.
Exemple de sortie:
Entrez le nombre de papies: 25
Le prix total est: 11.25 €
Algorithme ServicePhotocopie
Variables N: entier
prix: réel
Début
Ecrire("Entrer le nombre de papies:")
Lire(N)
Si(N <= 20) alors
prix ← N * 0.50
FinSi
Si(N>20 et N<=30) alors
prix ← N * 0.45
FinSi
Si(N > 30) alors
prix ← N * 0.30
FinSi
Ecrire("Le prix total est: ",prix," €")
Fin
45. Ecrivez un algorithme qui teste l'égalité de deux tableaux de nombres entiers (tailles 5). Le programme affiche TRUE si les éléments des deux tableaux correspondent, sinon il affiche FALSE.
Algorithme Comparer2Tableaux
Variables Tab1[5],Tab2[5],i,not_equal: entiers
Début
not_equal ← 0
Pour i de 1 à 5 faire
Lire(Tab1[i])
FinPour
Pour i de 1 à 5 faire
Lire(Tab2[i])
FinPour
Pour i de 1 à 5 faire
Si(Tab1[i] ≠ Tab2[i]) alors
not_equal ← 1
FinSi
FinPour
Si(not_equal = 0) alors
Ecrire("TRUE")
SiNon
Ecrire ("FALSE")
FinSi
Fin
46. Écrire un algorithme qui permet la saisie de 5 nombres et qui calcule la différence entre la somme des nombres pairs et la somme des nombres impairs.
Par exemple : 3 5 2 4 6 => (2+4+6) - (3+5) = 4
Exemple de sortie:
Entrer un nombre: 3
Entrer un nombre: 5
Entrer un nombre: 2
Entrer un nombre: 4
Entrer un nombre: 6
La différence égale à 4
Algorithme CalcDifférence
Variables myTab[5],i,sum: entiers
Début
sum ← 0
Pour i de 1 à 5 faire
Ecrire("Entrer un nombre:")
Lire(myTab[i])
Si(myTab[i] mod 2 = 0) alors
sum ← sum + myTab[i]
SiNon
sum ← sum - myTab[i]
FinSi
FinPour
Ecrire("La différence égale à ",sum)
Fin
47. Écrire un algorithme qui permet à l'utilisateur d'entrer une série de nombres se terminant par 0, et qui affiche à la fin le nombre d'occurrences du nombre 3.
Exemple de sortie:
2 8 3 1 3 3 6 3 0
3 existe 4 fois
Algorithme OccurenceNbr
Variables i,Nbr:entiers
Début
i ← 0
Répéter
Lire(Nbr)
Si(Nbr = 3) alors
i ← i + 1
FinSi
Jusqu❛à(Nbr = 0)
Si(i ≠ 0) alors
Ecrire(3," existe ",i," fois")
SiNon
Ecrire(3," n'existe pas")
FinSi
Fin
L'algorithme ci-dessus, invite l'utilisateur à saisir des nombres entiers jusqu'à ce qu'il entre 0. Le code à l'intérieur de la boucle Répéter Jusqu'à sera exécuté au moins une fois avant de vérifier la condition de la boucle. La boucle se répète tant que l'utilisateur n'entre pas 0. On vérifie si le nombre saisi est égale à 3. Si c'est le cas on incrémente le compteur i. Après on vérifie Si(i ≠ 0) alors il existe un nombre d’occurrence du nombre spécifié sinon il n'existe pas.
48. Écrire un algorithme pour afficher les mois en lettres en fonction du nombre saisi par l'utilisateur.
Exemple de sortie:
Entrer le numéro du mois: 1
Janvier
Entrer le numéro du mois: 3
Mars
Entrer le numéro du mois: 12
Décembre
Algorithme MoisEnLettre
Variables N:entier
Début
Ecrire("Entrer le numéro du mois:")
Lire(N)
Selon N faire
1: Ecrire("Janvier")
2: Ecrire("Février")
3: Ecrire("Mars")
4: Ecrire("Avril")
5: Ecrire("Mai")
6: Ecrire("Juin")
7: Ecrire("Juille")
8: Ecrire("Août")
9: Ecrire("Septembre")
10: Ecrire("Octobre")
11: Ecrire("Novembre")
12: Ecrire("Décembre")
Sinon
Ecrire("Aucun mois ne correspondant à N")
FinSelon
Fin
L'instruction Selon est une instruction de contrôle de flux dans laquelle nous pouvons définir une variable changeante et exécuter ensuite un code différent en fonction de la valeur de la variable changeante. C'est une alternative à Si SiNon.
49. Écrire un algorithme qui calcule les nombres de Fibonacci jusqu'à 50.
Exemple de sortie:
Fibonacci jusqu'à 50: 1 1 2 3 5 8 13 21 34
Algorithme Fibonacci
Variables sum,f1,f2:entier
Début
sum ← 0
f1 ← 1
f2 ← 1
Pour i de 1 à 50 faire
sum ← f1 + f2
f2 ← f1
f1 ← sum
Ecrire(sum)
FinPour
Fin
La série de Fibonacci est une suite de nombres où chaque nombre est la somme des deux nombres précédents.
50. Écrire un algorithme qui calculera une somme courante. L'utilisateur saisira des nombres qui seront ajoutés à la somme et, lorsqu'un nombre négatif sera rencontré, arrêtera d'ajouter des nombres et écrira le résultat final.
Exemple de sortie:
1 2 3 4 -1
La somme est 10
Algorithme SommeNbr
Variables Nbr,sum:entiers
Début
sum ← 0
Répéter
Lire(Nbr)
sum ← Nbr + sum
Jusqu'à(Nbr >= 0)
Ecrire("La somme est ",sum)
Fin
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec les algorithmes et programmation. Nous espérons que ces exercices vous aideront à améliorer vos compétences sur les algorithmes et programmation. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel sur les algorithmes avant de résoudre les exercices suivants.
51. Écrire un algorithme qui convertit une température en degrés Celsius en degrés Fahrenheit. Utilisez les variables « celsius », « fahrenheit » et la formule de conversion pour effectuer le calcul.
Entrez la température en degrés Celsius: 45
La température en Fahrenheit est: 113
Algorithme CelsiusToFahrenheit
Variables fahrenheit,celsius: entiers
Début
fahrenheit ← 0
Ecrire("Entrez la température en degrés Celsius:")
Lire(celsius)
fahrenheit ← (celsius * (9 div 5)) + 32
Ecrire("La température en Fahrenheit est:",fahrenheit)
Fin
52. Écrire un algorithme qui permute ou échange deux nombres saisis par l’utilisateur, mais avec seulement deux variables N1 et N2 sans utiliser une variable temporaire.
Exemple de sortie:
Entrer le nombre N1 : 10
Entrer le nombre N2 : 5
------permutation------
N1 = 5
N2 = 10
Algorithme Permuter2Nbr
Variables N1,N2 :entiers
Début
Ecrire("Entrer le nombre N1:")
Lire(N1)
Ecrire("Entrer le nombre N2:")
Lire(N2)
N1 ← N1 + N2
N2 ← N1 - N2
N1 ← N1 - N2
Ecrire("N1 = ",N1)
Ecrire("N2 = ",N2)
Fin
53. Écrire un algorithme qui permute et affiche les valeurs des trois nombres (N1, N2 et N3) saisis par l’utilisateur, en ordre croissant c’est-à-dire (N1 < N2 < N3).
Exemple de sortie:
Entrer le nombre N1 : 10
Entrer le nombre N2 : 1
Entrer le nombre N3 : 5
------permutation------
N1 = 1
N2 = 5
N3 = 10
Algorithme Echange3Nbr
Variables N1,N2,N3,tmp: Entiers
Début
Ecrire("Entrer le nombre N1 :")
Lire(N1)
Ecrire("Entrer le nombre N2 :")
Lire(N2)
Ecrire("Entrer le nombre N3 :")
Lire(N3)
Si(N1 > N2) alors
tmp ← N1
N1 ← N2
N2 ← tmp
FinSi
Si(N1 > N3) alors
tmp ← N1
N1 ← N3
N3 ← tmp
FinSi
Si(N2 > N3) alors
tmp ← N2
N2 ← N3
N3 ← tmp
FinSi
Ecrire("N1 =",N1)
Ecrire("N2 =",N2)
Ecrire("N3 =",N3)
Fin
54. Écrire un algorithme qui place les zéro vers la fin du tableau, en maintenant l’ordre des éléments.
Algorithme ZéroALaFin
Variables i,j,T[10],tmp: Entiers
Début
Pour i de 1 jusqu’à 10 faire
Lire(T[i])
FinPour
Pour i de 1 jusqu’à 10 faire
Ecrire(T[i])
FinPour
Pour i de 1 jusqu’à 9 faire
Si(T[i] = 0) alors
j ← i + 1;
TantQue(T[j]=0 et j<9) faire
j ← j + 1
FinTantQue
tmp ← T[i]
T[i]← T[j]
T[j]← tmp
FinSi
FinPour
Pour i de 1 jusqu’à 10 faire
Ecrire(T[i])
FinPour
Fin
55. Écrire une procédure qui affiche si le nombre passé en paramètre est pair ou impair.
Exemple de sortie:
3 est impair.
2 est pair.
Procédure checkNbr(N:entier)
Début
Si(N mod 2 = 0) alors
Ecrire(N," est impair.")
Sinon
Ecrire(N," est pair.")
FinSi
FinProcédure
Quelle est la différence entre procédure et fonction? Une procédure est une routine qui peut accepter des arguments mais ne retourne aucune valeur. Une fonction est une routine qui peut accepter des arguments et retourne une ou plusieurs valeurs.
56. Écrire une fonction qui retourne le nombre de caractères dans une chaîne de caractères passée en paramètre.
Exemple de sortie:
Entrez une chaîne de caractères: Hello
Le nombre de caractères est: 5
Fonction strSize(str[]: tableau de caractères): entier
Variables size: entier
size ← 0
Tant que(str[size] ≠ '\0') faire
size ← size + 1
FinTantque
retourner size
FinFonction
57. Écrire une procédure qui initialise un tableau. Cette procédure prend un tableau d'entier, sa taille et la valeur à insérer.
Procédure initialiser(T[]: tableau d❛entier, taille:entier, val:entier)
Variables i :entier;
Début
Pour i de 1 jusqu❛à taille faire
T[i] = val
finPour
fin
finProcédure
58. Écrire une fonction qui permet de calculer la valeur absolue d’un nombre donné.
Fonction nbrAbsolue(N : réel): réel
Début
Si(N > 0) alors
retourner N
Sinon
retourner -N
FinFonction
59. Écrire une fonction qui trouve le nombre de fois un caractère se trouve dans une chaîne de caractères. La fonction prend en paramètre le caractère à trouver et la chaîne de caractères.
Fonction countChar(string[]:tableau de caractères, c:caractère): entier
Début
Variables nbrChar,i:entiers
nbrChar ← 0
i ← 0
Tantque (string[i] ≠ '\0') faire
Si (string[i] = c)
nbrChar ← nbrChar + 1
i ← i + 1
FinSi
FinTantque
retourner nbrChar
Fin
60. Écrire une procédure qui permet d'afficher la table de multiplication d’un nombre N.
Procedure getMultiplication(N: entier)
Variables i: entier
Début
Pour i de 1 à 10 faire
Ecrire(N," x ",i," = ",N*i)
FinPour
Fin
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec les algorithmes et programmation. Nous espérons que ces exercices vous aideront à améliorer vos compétences sur les algorithmes et programmation. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel sur les algorithmes avant de résoudre les exercices suivants.
61. Écrire une fonction qui permet de calculer le PGCD(Plus Grand Commun Diviseur) de deux nombres.
Fonction calculerPGCD(n1,n2:entier):entier
Début
Tantque(n1 * n2 ≠ 0) Faire
Si(n1 > n2) Alors
n1 ← n1 - n2
Sinon
n2 ← n2 - n1
FinSi
FinTantque
Si(n1 = 0) alors
retourner n2
Sinon
retourner n1
FinSi
Fin
62. Ecrire une procédure qui prend deux nombres, calcule la somme et la multiplication de ces deux nombres et affiche si le résultat est négatifs ou positifs.
Procédure testSigne(n1,n2: réel)
Variables sum, mult: réels
Début
Lire(n1, n2)
sum ← n1 + n2
mult ← n1 * n2
Si(sum ≥ 0) Alors
Ecrire("Somme positive")
Sinon
Ecrire("Somme négative")
FinSi
Si(mult ≥ 0) Alors
Ecrire("Multiplication positif")
Sinon
Ecrire("Multiplication négatif")
FinSi
FinProcédure
63. Écrire une procédure qui permet d’afficher si un nombre est premier ou non.
Procédure nbrPremier(N:entier)
Variables flag:booleen
compteur:entier
Début
flag ← Vrai
compteur ← 2
Tantque(compteur ≤ N/2 et flag = Vrai) Faire
Si(N mod compteur = 0) Alors
flag ← Faux
Sinon
compteur ← compteur + 1
FinSi
FinTantque
Si(flag = Vrai) Alors
Ecrire(N, " est premier")
Sinon
Ecrire(N, " n'est pas premier")
FinSi
Fin
64. Écrire une fonction récursive qui calcule le factorielle d’un nombre passé en paramétre.
Fonction fact(N: entier):entier
Début
Si (N=0 ou N=1) alors
retourner 1
Sinon
retourner fact(n-1) * n
FinSi
Fin
65. Écrire une procédure qui prend deux nombre N1 et N2 et affiche toutes les valeurs paires entre N1 et N2 si N1 < N2.
Procédure NbrPaires(N1,N2:entiers)
Début
Si(N1 >= N2) Alors
Ecrire("Erreur: N1 doit étre inférieur à N2!")
Sinon
Tantque(N1 < N2) Faire
Si(N1 mod 2 = 0) Alors
Ecrire(N1)
FinSi
N1 ← N1 + 1
FinTantque
FinSi
Fin
66. Écrire une fonction récursive qui calcule la série de Fibonacci d'un nombre passé en paramétre.
Fonction Fibonacci(N: entier): entier
Début
Si(N=0 ou N=1) alors
Retourner 1
Sinon
Retourner Fibonacci(N-2) + Fibonacci(N-1)
FinSi
FinFonction
67. Écrire une fonction récursive qui affiche les entiers de N1 à N2. Où N1 et N2 sont passés en paramètres.
Procédure nbrCompris(N1:entier, N2:entier)
Début
Ecrire(N1)
Si(N1 < N2) alors
N1 ← N1 + 1
nbrCompris(N1,N2)
FinSi
FinProcédure
68. Écrire une fonction récursive qui affiche les entiers de 0 à 20. Cette fonction reçoit un seul paramètre.
Procédure afficherNbrs(n: entier)
Début
Ecrire(20 - n)
Si (n > 0) alors
n ← n + 1
afficherNbrs(n)
FinSi
FinProcédure
69. Écrire une fonction récursive qui calculer b puissance e.
Exemple: Dans le cas de 23
2 est le nombre de base
3 est l'exposant
Et la puissance est égale à 2*2*2
Fonction pow(b:réel, n:entier): réel
Début
Si(e = 0) alors
retourner 1
Sinon
retourner pow(b, e-1) * b
FinSi
FinFonction
70. Écrire une fonction récursive qui prend N et calcule la somme suivante 1+2+3+...+N.
Fonction sum(N: entier): entier
Début
Si(N=0) alors
retourner 0
Sinon
retourner sum(N-1) + N
FinSi
FinFonction
71. Écrire une fonction récursive qui permet de calculer le PGCD(Plus Grand Commun Diviseur) de deux nombres.
Fonction PGCD(n1:entier,n2:entier): entier
Début
Si(n2 = 0) alors
retourner n1
FinSi
retourner PGCD(n2, n1 mod n2)
FinFonction
72. Écrire une procédure qui lit un tableau d'entiers dont la dernière valeur = -1 et affiche le nombre d’entiers pairs et leur pourcentage par rapport au nombre d’entiers donnés.
Procédure NombresPairs
Variables i,count,NbrPairs: entiers
p : reel
Début
count ← 0
NbrPairs ← 0
Répéter
Lire(i)
count ← count + 1
Si (i mod 2 = 0) alors
NbrPairs ← NbrPairs + 1
FinSi
Jusqu’à(i = -1)
p ← NbrPairs * 100/count
Ecrire("Nbr de valeurs paires =",NbrPairs,"| pourcentage =",p)
Fin
73. Écrire une fonction qui calcule le prix TTC, cette fonction reçoit deux paramètres "prixHT" et "tva".
Fonction calculerTTC(ht,tva:réel): réel
Variables ttc:réel
Début
ttc ← ht * (1 + tva / 100)
retourner ttc
FinFonction
74. Écrire une fonction récursive qui affiche les éléments d'une matrice donnée.
Procédure echoMatrice(matrice[2][3]:tableau d'entiers,ligne,col:entier)
Début
Si(ligne < 2) alors
Si(col < 3) alors
Ecrire(matrice[ligne][col])
echoMatrice(matrice,ligne,col+1)
Sinon
echoMatrice(matrice,ligne+1,0)
FinSi
FinSi
FinProcédure
Les exercices corrigés ci-dessus sont actuellement disponibles, nous travaillons dur pour ajouter plus d'exercices. Bon apprentissage!
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec les dépendances fonctionnelles et normalisation des bases de données. Nous espérons que ces exercices vous aideront à améliorer vos compétences sur les Dépendances fonctionnelles et Normalisation. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel sur les dépendances fonctionnelles et normalisation des bases de données avant de résoudre les exercices suivants.
1. Lors de la conception de bases de données relationnelles, on souhaite toujours que les tables finales soient en BCNF et on peut toujours décomposer n’importe quelle conception en une conception BCNF.
A VRAI
B FAUX
B
Bien qu’un schéma puisse toujours être décomposé par projection en relations BCNF, il n’est pas toujours utile de le faire.
2. Un ensemble d’entités faibles dans un diagramme ER représente une collection d’entités pour lesquelles nous n’avons pas encore découvert de clé. Plus tard dans la phase de conception, lorsque nous aurons appris davantage sur le domaine, cet ensemble sera converti en un ensemble d’entités fortes en ajoutant les attributs appropriés.
A VRAI
B FAUX
B
Les entités faibles n’ont pas de clé. Elles dépendent d’autres entités.
3. Une relation peut avoir un certain nombre de clés candidates, mais n’a qu’une seule clé primaire.
A VRAI
B FAUX
A
4. Si chaque attribut d’une table dépend fonctionnellement de la clé primaire, la table est en 3NF.
A VRAI
B FAUX
B
Dans toute table, chaque attribut dépend fonctionnellement de la clé.
5. Chaque table avec 2 attributs uniques est en 1NF, 2NF, 3NF et BCNF.
A VRAI
B FAUX
A
6. Une table est dans la deuxième forme normale (2NF) si chaque attribut est déterminé par chaque clé candidate, mais n’est pas déterminé par un sous-ensemble pur d’une clé candidate.
A VRAI
B FAUX
A
7. Si r(A, C) et s(A, D) sont des relations quelconques avec les attributs donnés, les expressions d’algèbre relationnelle suivantes sont équivalentes
A VRAI
B FAUX
A
L’expression d’algèbre relationnelle ci-dessus représente une jointure.
8. Considérons le diagramme ER suivant:
Où A, B et C sont des entités.
Précisez la ou les conditions nécessaires pour représenter les trois entités à l’aide d’une seul table.
B et C doivent avoir les mêmes attributs.
9. Considérons le schéma R = (A, B, C, D, E) ainsi que les dépendances fonctionnelles :
A -> C
A, B -> D
C, D -> E
Supposons que nous décomposions R en
R1 = (A, B, C, D) et
R2 = (A, D, E)
Prouver que cette décomposition est une décomposition sans perte d’information.
L’ensemble des attributs communs à R1 et R2 (A, D) est une clé pour R2. Preuve:
1. A -> C donné
2. A, D -> C, D augmentation (1)
3. A, D -> E C, D -> E, transitivité (2)
10. Supposons que nous définissions une base de données sur les clients d’une banque et les prêts qu’ils ont reçus de la banque. Pour chaque client, nous devons enregistrer des informations sur son nom, son adresse, son numéro de téléphone et l’entreprise pour laquelle il travaille. Pour chaque prêt, nous devons enregistrer le montant, le taux d’intérêt, la date de délivrance du prêt et la date à laquelle le prêt doit être remboursé.
10.1 Est-il préférable de représenter l’entreprise pour laquelle un client travaille comme un attribut du client ou comme une relation ? Justifiez brièvement votre réponse.
L’entreprise doit être un attribut du client, en supposant que chaque client travaille pour une seule entreprise. Il n’est pas nécessaire de stocker des informations pour chaque entreprise.
10.2 Quelle est la meilleure façon de représenter la relation entre le client et ses prêts ?
en définissant le prêt comme un attribut du client, ou
en définissant le prêt comme un ensemble d’entités distinct et en définissant un ensemble de relations entre lui et le client ?
Justifiez brièvement votre réponse.
Le prêt doit être une entité distincte associée au client par le biais d’une relation. Voici les raisons:
– Un client peut avoir plusieurs prêts.
– Un prêt contient des informations supplémentaires.
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec les dépendances fonctionnelles et normalisation des bases de données. Nous espérons que ces exercices vous aideront à améliorer vos compétences sur les Dépendances fonctionnelles et Normalisation. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel sur les dépendances fonctionnelles et normalisation des bases de données avant de résoudre les exercices suivants.
Rappel:
Vous savez que la dépendance fonctionnelle A -> B signifie que B dépend de A, c’est-à-dire qu’à partir de la valeur de A, nous pouvons trouver la valeur de B dans la relation.
Donc, pour prouver que A -> B est valide dans une relation, l’une des conditions suivantes doit être vraie :
Condition1 : toutes les valeurs de A doivent être uniques.
Condition2 : toutes les valeurs de B doivent être identiques.
Condition3 : Si deux ou plusieurs tuples de la relation ont la même valeur pour l’attribut A, alors il doit également y avoir la même valeur pour l’attribut B.
1. Voici une instance de R (A, B, C). Choisir la dépendance fonctionnelle qui peut s’appliquer à R
1. AB -> C
2. C -> B
3. BC -> A
4. B -> C
5. BC -> A
6. A -> C
7. AC -> B
8. B -> C
1. AB -> C
1. Satisfait la condition 1 (toutes les valeurs de AB sont uniques).
2. C -> B
2. Ne satisfait à aucune des trois conditions (C n’a pas de valeurs uniques, B n’a pas toutes les mêmes valeurs et la valeur de C est répétée deux fois (8, 5) alors la valeur de B n’est pas répétée), donc cette dépendance fonctionnelle est incorrecte.
3. BC -> A
3. Satisfait la condition 1.
4. B -> C
4. Aussi, elle satisfait la condition 1.
5. BC -> A
5. Aussi, elle satisfait la condition 1.
6. A -> C
6. Ne satisfait à aucune des trois conditions.
7. AC -> B
7. Ne satisfait à aucune des trois conditions.
8. B -> C
8. Satisfait la condition 1.
2. Voici une instance de R (V, W, X, Y, Z). Choisir la dépendance fonctionnelle qui peut s’appliquer à R
1. V -> WX
2. YZ -> X
3. X -> YZ
1. V -> WX
1. Satisfait à la condition 3, c’est-à-dire que la valeur de V est répétée 3 fois ( 7 ), alors la valeur de WX est également répétée. Donc cette dépendance fonctionnelle est correcte.
2. YZ -> X
2. Satisfait à la condition 2, c’est-à-dire que toutes les valeurs de X sont identiques, donc cette dépendance fonctionnelle est correcte.
3. X -> YZ
3. Ne remplit aucune des trois conditions, cette dépendance fonctionnelle est donc incorrecte.
3. Voici une instance de R(A1,A2,A3,A4). Choisir la dépendance fonctionnelle qui peut s’appliquer à R
1. A4 -> A1
2. A2, A3 -> A4
3. A2, A3 -> A1
1. A4 -> A1 Incorrect : le premier et le quatrième tuple le violent.
2. A2, A3 -> A4 Incorrect : le premier et le deuxième tuple le violent.
3. A2, A3 -> A1 Correct
4. Lister toutes les dépendances fonctionnelles satisfaites par la relation R (A, B, C).
Essayer par vous-même.
Conseil : pour lister toutes les DF satisfaites par la relation, il faut d’abord identifier toutes les DF possibles, puis vérifier une à une lesquelles sont satisfaites par la relation.
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec l’Algèbre Relationnelle. Nous espérons que ces exercices vous aideront à améliorer vos compétences en Algèbre Relationnelle. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel sur l’Algèbre Relationnelle avant de résoudre les exercices suivants.
Exercices Corrigés Base De Données Algèbre Relationnelle
Considérons une base de données avec le schéma suivant : Navigateurs-Bateaux-Réservation
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec l’Algèbre Relationnelle. Nous espérons que ces exercices vous aideront à améliorer vos compétences en Algèbre Relationnelle. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel sur l’Algèbre Relationnelle avant de résoudre les exercices suivants.
Exercices Corrigés Base De Données Algèbre Relationnelle
Considérons une base de données avec le schéma suivant : Publications
1. Combien de tuples seront retournés par la requête d’algèbre relationnelle suivante?
Solution: 5 tuples.
Où « titre_livre » est l’attribut, « livre » est la relation, et le symbole « π(pi) » est utilisé pour désigner l’opérateur Projection. Ici, tous les tuples dupliqués sont supprimés dans la relation résultante. C’est ce qu’on appelle l’élimination des doublons.
2. Que veut dire l’expression d’algèbre relationnelle suivante ?
Solution: L’expression veut dire Combien d’auteurs ne sont pas éditeurs de livres.
La différence entre deux relations (R1 – R2) est, comme son nom l’indique, toutes les lignes de la première relation qui ne sont pas présentes dans la deuxième relation.
3. Écrivez une expression d’algèbre relationnelle qui renvoie les noms de tous les auteurs qui sont éditeurs de livres.
Solution:
L’opération de jointure combine les relations R1 et R2 en fonction d’une condition, ici la condition est (id_auteur = éditeur). Elle est désignée par ⋈.
4. Écrivez une expression d’algèbre relationnelle qui renvoie les noms de tous les auteurs qui ne sont pas éditeurs de livres.
Solution:
5. Écrivez une expression d’algèbre relationnelle qui renvoie les noms de tous les auteurs ayant au moins une publication dans la base de données.
Solution:
6. Combien de tuples sont retournés par l’expression d’algèbre relationnelle suivante ?
Solution: 7 tuples.
La jointure externe gauche (LEFT OUTER JOIN) s’écrit R ⟕ S, où R et S sont des relations. Le résultat de LEFT OUTER JOIN est l’ensemble de toutes les combinaisons de tuples dans R et S qui sont identiques sur leurs noms d’attributs communs, en plus des tuples dans R qui n’ont pas de tuples correspondants dans S.
7. Que veut dire l’expression d’algèbre relationnelle suivante ?
Solution: L’expression veut dire Quels sont les auteurs ayant écrit un livre publié en Mars?
L’opération SELECT est utilisée pour sélectionner un sous-ensemble de tuples en fonction d’une condition de sélection donnée. Elle est désignée par le symbole Sigma(σ).
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec l’Algèbre Relationnelle. Nous espérons que ces exercices vous aideront à améliorer vos compétences en Algèbre Relationnelle. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel sur l’Algèbre Relationnelle avant de résoudre les exercices suivants.
Exercices Corrigés Base De Données Algèbre Relationnelle
Considérons une base de données avec le schéma suivant : Burger Shop
Personne (nom, âge, sexe) nom est une clé
Fréquente (nom, burger_shop) (nom, burger_shop) est une clé
Mange (nom, burger) (nom, burger) est une clé
Serve (burger_shop, burger, prix) (burger_shop, burger) est une clé
r(Personne)
+-------+-----+-------+
| nom | age | sexe |
+-------+-----+-------+
| Luz | 25 | femme |
| Lois | 16 | homme |
| Alex | 44 | homme |
| Kevin | 14 | homme |
| Scott | 32 | homme |
| Diana | 53 | femme |
+-------+-----+-------+
r(Fréquente)
+-------+---------------------+
| nom | burger_shop |
+-------+---------------------+
| Luz | Big Buns Burgers |
| Lois | Toasty Buns Burgers |
| Alex | Buffalo Burgers |
| Kevin | Beefcakes Burgers |
| Scott | Knuckle Burger |
| Diana | Dungeon Burgers |
+-------+---------------------+
r(Mange)
+-------+------------+
| nom | burger |
+-------+------------+
| Luz | fromage |
| Lois | champignon |
| Alex | saucisse |
| Kevin | fromage |
| Scott | fromage |
| Diana | fromage |
+-------+------------+
Ecrivez les expressions d’algèbre relationnelle pour les neuf requêtes suivantes.
1. Trouvez toutes les Burger Shops fréquentées par au moins une personne âgée de moins de 18 ans.
2. Trouvez les noms de toutes les femmes qui mangent des burgers aux champignons ou aux saucisse (ou les deux).
3. Trouvez les noms de toutes les femmes qui mangent à la fois des burgers aux champignons et des burgers aux saucisses.
4. Trouvez toutes les Burger Shops qui servent au moins un Burger que Alex mange pour moins de 8,00 €.
5. Trouvez toutes les Burger Shops qui ne sont fréquentées que par des femmes ou que par des hommes.
6. Pour chaque personne, trouvez toutes les Burgers qu’elle mange et qui ne sont pas servies par un Burger Shop qu’il fréquent. Retourner toutes les combinaisons personne (nom) / Burger de ce genre.
7. Trouvez les noms de toutes les personnes qui ne fréquentent que des Burger Shops servant au moins un Burger qu’ils mangent.
8. Trouvez les noms de toutes les personnes qui fréquentent toutes les Burger Shops servant au moins un Burger qu’elles mangent.
9. Trouvez le Burger Shop qui sert le Burger avec du fromage le moins chère. En cas d’égalité, retournez toutes les Burger Shops proposant le Burger avec du fromage le moins chère.
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec PL/SQL. Nous espérons que ces exercices vous aideront à améliorer vos compétences en PL/SQL. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel PL/SQL avant de résoudre les exercices suivants.
Exercices corrigés PL/SQL: Principes de base
1. Ecrivez un bloc PL/SQL pour calculer la prime d’un employé (salaire * 0.45) dont l’ID est 1003.
DECLARE
prime NUMBER(6,2);
BEGIN
SELECT salaire * 0.45 INTO prime
FROM employees
WHERE id = 1003;
DBMS_OUTPUT.PUT_LINE('Prime = ' || TO_CHAR(prime));
END;
/
Sortie:
Prime = 2250
2. Écrire un bloc PL/SQL pour afficher les commentaires simples et multilignes.
DECLARE
nbr NUMBER := 10; -- Commentaire sur une seule ligne
BEGIN
/* Il s'agit d'un commentaire
sur plusieurs lignes */
DBMS_OUTPUT.PUT_LINE('Nombre: ' || nbr);
END;
/
Sortie:
Nombre: 10
3. Écrire des blocs PL/SQL pour montrer la déclaration des variables.
Déclaration des variables de type scalaire.
DECLARE
id NUMBER(5); -- entier
nom VARCHAR2(20); -- string
marie BOOLEAN; -- boolean
salaire NUMBER(8,2); -- float
BEGIN
NULL;
END;
/
Déclaration d’une constante avec un type de données scalaire.
DECLARE
minimum CONSTANT INTEGER := 10;
BEGIN
NULL;
END;
/
Déclaration d’une variable avec une valeur initiale.
DECLARE
nbr INTEGER := 0;
BEGIN
NULL;
END;
/
Initialiser une variable par (NULL).
DECLARE
nbr INTEGER; -- par défaut reçoit NULL
BEGIN
NULL;
END;
/
Déclaration d’une variable avec la contrainte NOT NULL.
DECLARE
id INTEGER(5) NOT NULL := 1005;
BEGIN
NULL;
END;
/
Dans l’exemple suivant, la variable nom_emp hérite le type et la taille de la colonne employees.nom, cette déclaration n’a pas besoin d’une valeur initiale.
DECLARE
nom_emp employees.nom%TYPE;
BEGIN
NULL;
END;
/
4. Écrire un bloc PL/SQL pour montrer qu’un mot réservé peut être utilisé comme variable.
En utilisant une seule commande, PL/SQL exécute plusieurs requêtes en un seul bloc.
PL/SQL peut gérer les exceptions générées dans le bloc PL/SQL. Ce bloc est appelé bloc de gestion des exceptions.
Il est possible de créer un bloc PL/SQL tel que des procédures, des packages, des triggers, des fonctions et des types, qui sont stockés dans la base de données afin d’être réutilisés par des applications.
Les applications écrites en PL/SQL sont portables sur le matériel ou les systèmes d’exploitation où Oracle est fonctionnel.
6. Qu’entendez-vous par un tableau PL/SQL ?
Une collection ordonnée d’éléments du même type est appelée tableau PL/SQL. La position de chaque élément dans la collection est déterminée par son numéro d’index. Un type défini par l’utilisateur doit d’abord être déclaré par le tableau PL/SQL, puis il doit être déclaré en tant que variable.
Syntaxe:
TYPE nom_du_type IS TABLE OF type_element [NOT NULL] INDEX BY type_indice;
nom_du_tableau nom_du_type;
Exemple:
DECLARE
TYPE salaire IS TABLE OF NUMBER INDEX BY VARCHAR2(25);
tableau_de_salaire salaire;
BEGIN
-- ajouter des éléments au tableau
tableau_de_salaire('Alex') := 95000;
tableau_de_salaire('Bob') := 63000;
tableau_de_salaire('Jean') := 200000;
END;
/
7. Expliquer la structure de base du PL/SQL.
Grâce à l’intégration d’éléments issus des langages procéduraux, le PL/SQL enrichit le SQL et crée un langage structurel plus puissant que le SQL. Le bloc est l’élément de base de PL/SQL. Chaque programme PL/SQL est composé de blocs qui peuvent être imbriqués les uns dans les autres.
8. Qu’est-ce qu’un curseur PL/SQL ?
Un curseur est un pointeur sur le résultat d’une requête. Il existe deux types de curseurs en PL/SQL.
Curseur implicite
Curseur explicite
9. Quelle est la différence entre le curseur implicite et le curseur explicite ?
Curseur implicite
Curseur explicite
Le curseur implicite est un curseur créé automatiquement.
Le curseur explicite est défini par l’utilisateur.
Le curseur implicite ne peut récupérer qu’une seule ligne à la fois.
Le curseur explicite peut récupérer plusieurs lignes en même temps.
Il donne moins de contrôle aux programmeurs.
Le curseur explicite est totalement contrôlé par les programmeurs.
Le curseur explicite est moins efficace.
Un curseur explicite est plus efficace.
Les attributs du curseur implicite utilisent toujours le préfixe « SQL ». La structure du curseur implicite est définie par le nom SQL%nom_attri. Les curseurs implicites les plus courants sont SQL%FOUND, SQL%NOTFOUND, SQL%ROWCOUNT.
Structure des curseurs explicites: nom_du_curseur%nom_attri. Voici quelques curseurs explicites: nom_du_curseur%FOUND, nom_du_curseur%NOTFOUND, nom_du_curseur%ROWCOUNT.
10. A quoi servent les instructions COMMIT, ROLLBACK et SAVEPOINT en PL/SQL ?
L’instruction COMMIT : Les modifications apportées au cours d’une transaction sont sauvegardées de manière permanente par la commande COMMIT. Syntaxe:
DECLARE
BEGIN
-- votre code;
COMMIT;
END;
Déclaration ROLLBACK : Elle est utilisée pour annuler toute modification effectuée depuis le début de la transaction.
DECLARE
BEGIN
-- votre code;
ROLLBACK;
END;
Déclaration SAVEPOINT : Un point de transaction qui peut être utilisé pour revenir à un certain point de la transaction qui est créé à l’aide de l’instruction SAVEPOINT.
DECLARE
BEGIN
SAVEPOINT sp;
-- votre code;
ROLLBACK TO sp;
END;
11. Comment déboguer notre code PL/SQL ?
Pour déboguer notre code PL/SQL, nous pouvons utiliser les instructions DBMS_OUTPUT et DBMS_DEBUG. La sortie est affichée sur la console standard via DBMS_OUTPUT. La sortie est affichée dans le fichier log par DBMS_DEBUG.
12. Quels sont les types de commandes que PL/SQL ne prend pas en charge ?
PL/SQL ne prend pas en charge les commandes de définition de données (DDL) telles que CREATE TABLE, ALTER TABLE ou DROP TABLE.
13. Listez les types d’exceptions en PL/SQL.
Deux types d’exceptions sont présents en PL/SQL.
Exception prédéfinie
Exception définie par l’utilisateur
14. Citez quelques exceptions PL/SQL.
Voici quelques exceptions PL/SQL.
ZERO_ERROR
NO_DATA_FOUND
INVALID_NUMBER
TOO_MANY_ROWS
ACCESS_INTO_NULL
CASE_NOT_FOUND
15. Décrivez les types de données présents en PL/SQL.
Il existe deux types de données en PL/SQL.
Les types de données scalaires : NUMBER, DATE, CHAR, VARCHAR2, BOOLEAN et LONG sont des types de données scalaires.
Type de données composites : TABLE et RECORD sont des types de données composites.
16. Qu’est-ce qu’un package PL/SQL ?
Les packages sont des objets de schéma qui regroupent des types, des variables et des sous-programmes PL/SQL logiquement liés. Un package se compose de deux parties.
Spécification du package
Le corps ou la définition du package
Syntaxe:
nom_package.nom_attribut;
17. Ecrire un programme PL/SQL pour trouver qu’une chaîne donnée est un palindrome.
DECLARE
-- Déclaration de variable
str VARCHAR(10):="madam";
lettre VARCHAR(25);
string_inverse VARCHAR(10);
BEGIN
FOR i IN REVERSE 1.. LENGTH(str) LOOP
lettre := SUBSTR(str, i, 1);
-- Concaténer lettre à la variable string_inverse
string_inverse := string_inverse || ” ||lettre;
END LOOP;
IF string_inverse = str THEN
dbms_output.Put_line(string_inverse||”||’ est un palindrome’);
ELSE
dbms_output.Put_line(string_inverse||”||’ n'est pas un palindrome’);
END IF
END;
18. Quelle commande utilisez-vous pour supprimer un package ?
Nous utilisons la commande DROP PACKAGE pour supprimer un package. Syntaxe:
DROP PACKAGE [BODY] Nom_attribut.Nom_de_package;
19. Comment exécuter une procédure stockée ?
EXECUTE ou le mot-clé EXEC peuvent être utilisés pour exécuter les procédures stockées. Syntaxe:
EXECUTE nom_de_procedure;
-- ou
EXEC nom_de_procedure;
20. Expliquez les paramètres IN, OUT et IN OUT.
IN : le paramètre IN permet de transmettre des valeurs à la procédure appelée. Le paramètre IN se comporte comme une constante.
OUT : L’appelant reçoit une valeur du paramètre OUT. Il s’agit d’une variable non initialisée.
IN OUT : le paramètre IN OUT donne des valeurs de départ à une procédure et envoie les valeurs mises à jour à l’appelant. Le paramètre IN OUT doit être considéré comme une variable initialisée.
21. Faites la différence entre %ROWTYPE et %TYPE.
%ROWTYPE : Il est utilisé pour déclarer une variable qui a la structure des enregistrements d’une table.
%TYPE : Pour déclarer une colonne dans une table qui contient la valeur de cette colonne, utilisez la propriété %TYPE. Le type de la variable et la colonne de la table sont identiques.
22. Pourquoi les mots-clés SYSDATE et USER sont-ils utilisés ?
L’heure et la date actuelles du serveur de base de données local sont renvoyées par le mot-clé SYSDATE. Exemple :
SELECT SYSDATE FROM dual;
L’identifiant de l’utilisateur de la session en cours sera renvoyé en utilisant le mot-clé USER. Exemple :
SELECT USER FROM dual;
23. À quoi sert la condition WHEN dans un trigger ?
Le déclencheur(trigger) se déclenche lorsqu’une certaine condition est remplie. Exemple :
Le programme suivant crée un trigger pour la table employees qui se déclencherait pour les opérations INSERT, UPDATE ou DELETE effectuées sur la table employees. Ce déclencheur affichera la différence de salaire entre les anciennes et les nouvelles valeurs.
CREATE OR REPLACE TRIGGER afficher_changement_salaire
BEFORE DELETE OR INSERT OR UPDATE ON employees
FOR EACH ROW
WHEN (NEW.ID > 0) --Si la condition est remplie le trigger se déclenche
DECLARE
salaire_diff number;
BEGIN
salaire_diff := :NEW.salaire - :OLD.salaire;
dbms_output.put_line('Ancien salaire: ' || :OLD.salaire);
dbms_output.put_line('Nouveau salaire: ' || :NEW.salaire);
dbms_output.put_line('Différence de salaire: ' || salaire_diff);
END;
/
24. Quelles sont les différences entre SQL et PL/SQL ?
SQL
PL/SQL
SQL gère un système de gestion de base de données relationnelle.
PL/SQL est un langage de programmation pour les bases de données.
SQL peut effectuer une seule opération à la fois.
PL/SQL peut exécuter plusieurs opérations en même temps.
SQL est un langage d’interprétation.
PL/SQL est un langage procédural.
Aucune variable n’est utilisée dans SQL.
PL/SQL se compose de variables, de types de données, etc.
SQL se connecte directement au serveur de base de données.
PL/SQL ne se connecte pas directement au serveur de base de données.
C’est un langage orienté données.
Il s’agit d’un langage orienté application.
Il est utilisé pour effectuer des opérations DDL et DML.
PL/SQL exécute des blocs, des fonctions, des procédures et des triggers.
25. À quoi sert WHERE CURRENT OF dans les curseurs ?
Pour identifiez la dernière ligne récupéré on utilise WHERE CURRENT OF dans le curseur. Nous pouvons utiliser l’instruction WHERE CURRENT OF pour mettre à jour ou supprimer des enregistrements sans utiliser l’instruction SELECT FOR UPDATE. L’enregistrement qui a été récupéré pour la dernière fois par le curseur peut être mis à jour ou supprimé à l’aide de l’instruction WHERE CURRENT OF.
Syntax:
UPDATE nom_table
SET la_clause
WHERE CURRENT OF nom_cursor;
OU:
DELETE FROM nom_table
WHERE CURRENT OF nom_cursor;
26. Comment attribuer un nom à un bloc d’exception PL/SQL sans nom ?
Le nom du bloc d’exception PL/SQL peut être attribué à l’aide d’un pragma appelé EXCEPTION_INIT.
Le message d’erreur et le numéro d’erreur peuvent être définis à l’aide de la fonction Pragma EXCEPTION_INIT.
Syntaxe:
DECLARE
nom_exception EXCEPTION;
PRAGMA EXCEPTION_INIT(nom_exception, code_erreur);
BEGIN
-- Code
EXCEPTION
WHEN nom_exception THEN -- étapes de traitement des exceptions
END
27. Quelle est la différence entre une table en mutation et une table contraignante ?
Une table qui peut être modifiée à l’aide d’une instruction DML ou avec des déclencheurs définis est dite une table en mutation. La table lue pour une contrainte d’intégrité référentielle est appelée table de contraintes.
28. Quelle est la différence entre SQLERRM et SQLCODE ?
SQLCODE renvoie le numéro d’erreur de l’erreur la plus récente trouvée.
SQLERRM renvoie le message d’erreur pour l’erreur la plus récente.
SQLCODE et SQLERRM peuvent être utilisés dans la gestion des exceptions en PL/SQL pour signaler l’erreur survenue dans le code dans la base de données.
29. Quelle est l’utilité de l’opérateur || ?
L’opérateur || est utilisé pour concaténer les chaînes de caractères. Les fonctions « dbms_output.put_line » et « select statements » utilisent l’opérateur ||. Exemple:
30. Une commande de définition comme la commande CREATE est-elle supportée par PL/SQL ?
Les commandes de définition comme la commande CREATE ne sont pas prises en charge par PL/SQL. Les instructions DDL peuvent créer, modifier ou supprimer des objets du schéma et, par conséquent, modifier les dépendances. Il est donc possible que nous fassions référence à un objet qui a été supprimé à l’aide de l’instruction DDL. Pour éviter ce genre de situation, PL/SQL n’autorise pas les instructions DDL directes.
31. Comment vérifier si une instruction UPDATE a été exécutée ou non, en PL/SQL ?
L’attribut SQL%NOTFOUND peut être utilisé pour déterminer si l’instruction UPDATE a modifié avec succès des enregistrements. Si la dernière instruction SQL exécutée n’a eu aucune effet sur les lignes, cette variable renvoie TRUE.
32. Expliquez ce qu’est une vue.
Une vue est générée en combinant une ou plusieurs tables. Il s’agit d’une table virtuelle basée sur le résultat des instructions SQL; elle comprend des lignes et des colonnes comme une table réelle. Syntaxe:
CREATE VIEW nom_vue AS SELECT colonnes FROM tables;
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec PL/SQL. Nous espérons que ces exercices vous aideront à améliorer vos compétences en PL/SQL. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel PL/SQL avant de résoudre les exercices suivants.
1. Écrire un programme PL/SQL pour réorganiser le nombre de deux variables de manière à ce que le petit nombre soit stocké dans la variable small_nbr et que le grand nombre soit stocké dans la variable big_nbr. Exemple:
DECLARE
small_nbr NUMBER := 25;
big_nbr NUMBER := 5;
tmp_var NUMBER;
BEGIN
IF small_nbr > big_nbr THEN
tmp_var := small_nbr;
small_nbr := big_nbr;
big_nbr := tmp_var;
END IF;
DBMS_OUTPUT.PUT_LINE ('small_nbr = '||small_nbr);
DBMS_OUTPUT.PUT_LINE ('big_nbr = '||big_nbr);
END;
/
Sortie:
small_nbr = 5;
big_nbr = 25;
2. Écrire un programme PL/SQL pour vérifier si un nombre est pair ou impair. Exemple:
nbr = 3
Le nombre 3 est un nombre impair.
DECLARE
nbr NUMBER := 3;
BEGIN
-- tester si le nombre est pair
IF MOD(nbr,2) = 0 THEN
DBMS_OUTPUT.PUT_LINE ('Le nombre '||nbr||' est un nombre pair.');
ELSE
DBMS_OUTPUT.PUT_LINE ('Le nombre '||nbr||' est un nombre impair.');
END IF;
END;
/
Sortie:
Le nombre 3 est un nombre impair.
3. Ecrire un programme PL/SQL pour vérifier si une date tombe le week-end, c’est-à-dire SAMEDI ou DIMANCHE. Exemple:
date1 = 2-Mar-2024
Le jour de la date donnée est SATURDAY: tombe le week-end.
DECLARE
date1 DATE := SYSDATE;
day VARCHAR2(20);
BEGIN
day := RTRIM(TO_CHAR(date1, 'DAY'));
IF day IN ('SATURDAY', 'SUNDAY') THEN
DBMS_OUTPUT.PUT_LINE ('Le jour de la date donnée est '||day||': tombe le week-end');
ELSE
DBMS_OUTPUT.PUT_LINE ('Le jour de la date donnée est '||day||': ne tombe pas le week-end');
END IF;
DBMS_OUTPUT.PUT_LINE ('Exécution réussie.');
END;
/
Sortie:
Le jour de la date donnée est SATURDAY: tombe le week-end.
Exécution réussie.
4. Écrire un programme PL/SQL pour compter le nombre d’employés dans le département 11 et vérifier si ce département a des postes vacants ou non. Il y a 20 postes vacants dans chaque département.
DECLARE
nbr_emp NUMBER;
BEGIN
SELECT Count(*)
INTO nbr_emp
FROM employee e
JOIN department d
ON e.id_dep = d.id_dep
WHERE e.id_dep = 11;
dbms_output.Put_line ('Le nombre d\'employés dans le département 11 est '||To_char(nbr_emp));
IF nbr_emp >= 20 THEN
dbms_output.Put_line ('Il n\'y a pas de poste vacant dans le département 11.');
ELSE
dbms_output.Put_line ('Il y a des postes vacants dans le département 11.');
END IF;
END;
/
Sortie:
Le nombre d'employés dans le département 11 est 20
Il n'y a pas de poste vacant dans le département 11.
5. Écrire un programme PL/SQL pour vérifier si un nombre donné est positif, négatif ou nul. Exemple:
nbr = 5;
Le nombre 5 est un nombre positif
----------------------------------
nbr = 0;
Le nombre 0 est nul
----------------------------------
nbr = -5;
Le nombre 5 est un nombre négatif
DECLARE
nbr NUMBER := 5;
BEGIN
IF nbr < 0 THEN
DBMS_OUTPUT.PUT_LINE ('Le nombre '||nbr||' est un nombre positif');
ELSIF nbr = 0 THEN
DBMS_OUTPUT.PUT_LINE ('Le nombre '||nbr||' est nul');
ELSE
DBMS_OUTPUT.PUT_LINE ('Le nombre '||nbr||' est un nombre négatif');
END IF;
END;
/
Sortie:
Le nombre 5 est un nombre positif
6. Écrire un programme PL/SQL pour vérifier si un caractère donné est une lettre ou un chiffre. Exemple:
my_char = %;
Le caractère donné n'est pas une lettre
Le caractère donné n'est pas un nombre
----------------------------------
my_char = B;
Le caractère donné est une lettre
----------------------------------
my_char = 2;
Le caractère donné n'est pas une lettre
Le caractère donné est un nombre
DECLARE
my_char CHAR(1) := 'B';
BEGIN
IF ( my_char >= 'A' AND my_char <= 'Z' )
OR ( my_char >= 'a' AND my_char <= 'z' ) THEN
dbms_output.Put_line ('Le caractère donné est une lettre');
ELSE
dbms_output.Put_line ('Le caractère donné n\'est pas une lettre');
IF my_char BETWEEN '0' AND '9' THEN
dbms_output.Put_line ('Le caractère donné est un nombre');
ELSE
dbms_output.Put_line ('Le caractère donné n\'est pas un nombre');
END IF;
END IF;
END;
/
Sortie:
Le caractère donné est une lettre
7. Écrire un programme PL/SQL pour afficher le jour d'une date spécifique. Exemple:
my_date = 10-MAY-2024;
La date que vous avez saisie est Vendredi.
DECLARE
my_date DATE := To_date('10-MAY-2024', 'DD-MON-YYYY');
jour VARCHAR2(1);
BEGIN
jour := To_char(my_date, 'D');
CASE jour
WHEN '1' THEN
dbms_output.Put_line ('La date que vous avez saisie est Dimanche.');
WHEN '2' THEN
dbms_output.Put_line ('La date que vous avez saisie est Lundi.');
WHEN '3' THEN
dbms_output.Put_line ('La date que vous avez saisie est Mardi.');
WHEN '4' THEN
dbms_output.Put_line ('La date que vous avez saisie est Mercredi.');
WHEN '5' THEN
dbms_output.Put_line ('La date que vous avez saisie est Jeudi.');
WHEN '6' THEN
dbms_output.Put_line ('La date que vous avez saisie est Vendredi.');
WHEN '7' THEN
dbms_output.Put_line ('La date que vous avez saisie est Samedi.');
END CASE;
END;
/
Sortie:
La date que vous avez saisie est Vendredi.
8. Ecrire un programme en PL/SQL pour afficher la valeur d'une variable à l'intérieur et à l'extérieur d'une boucle en utilisant l'instruction LOOP EXIT. Exemple de sortie du programme:
La valeur de i à l'intérieur de la boucle est : 0
La valeur de i à l'intérieur de la boucle est : 1
La valeur de i à l'intérieur de la boucle est : 2
La valeur de i à l'intérieur de la boucle est : 3
La valeur de i à l'intérieur de la boucle est : 4
La valeur de i à l'extérieur de la boucle est : 5
DECLARE
i NUMBER := 0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE ('La valeur de i à l\'intérieur de la boucle est: ' || TO_CHAR(i));
i := i + 1;
IF i > 4 THEN
EXIT;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE('La valeur de i à l\'extérieur de la boucle est: ' || TO_CHAR(i));
END;
/
Sortie:
La valeur de i à l'intérieur de la boucle est : 0
La valeur de i à l'intérieur de la boucle est : 1
La valeur de i à l'intérieur de la boucle est : 2
La valeur de i à l'intérieur de la boucle est : 3
La valeur de i à l'intérieur de la boucle est : 4
La valeur de i à l'extérieur de la boucle est : 5
9. Ecrire un programme en PL/SQL pour afficher la valeur d'une variable à l'intérieur et à l'extérieur d'une boucle en utilisant l'instruction LOOP WHEN. Exemple de sortie du programme:
La valeur de i à l'intérieur de la boucle est : 0
La valeur de i à l'intérieur de la boucle est : 1
La valeur de i à l'intérieur de la boucle est : 2
La valeur de i à l'intérieur de la boucle est : 3
La valeur de i à l'intérieur de la boucle est : 4
La valeur de i à l'extérieur de la boucle est : 5
DECLARE
i NUMBER := 0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE ('La valeur de i à l\'intérieur de la boucle est: ' || TO_CHAR(i));
i := i + 1;
EXIT WHEN i > 4;
END LOOP;
DBMS_OUTPUT.PUT_LINE('La valeur de i à l\'extérieur de la boucle est: ' || TO_CHAR(i));
END;
/
Sortie:
La valeur de i à l'intérieur de la boucle est : 0
La valeur de i à l'intérieur de la boucle est : 1
La valeur de i à l'intérieur de la boucle est : 2
La valeur de i à l'intérieur de la boucle est : 3
La valeur de i à l'intérieur de la boucle est : 4
La valeur de i à l'extérieur de la boucle est : 5
10. Écrire un programme en PL/SQL en utilisant une boucle imbriquée avec l'instruction EXIT WHEN. Exemple de sortie du programme:
La valeur de i = 1
La valeur de k = 1
La valeur de k = 2
La valeur de k = 3
La valeur de k = 4
Sortie de la boucle intérieure
La valeur de i = 2
La valeur de k = 5
Sortie de la boucle intérieure
La valeur de i = 3
La valeur de k = 6
Sortie de la boucle intérieure
Sortie de la boucle extérieure
DECLARE
i PLS_INTEGER := 0;
n PLS_INTEGER := 0;
BEGIN
LOOP
i := i + 1;
DBMS_OUTPUT.PUT_LINE ('La valeur de i = ' || i);
LOOP
k := k + 1;
DBMS_OUTPUT.PUT_LINE ('La valeur de k = ' || k);
EXIT WHEN (k > 3);
END LOOP;
DBMS_OUTPUT.PUT_LINE ('Sortie de la boucle intérieure');
EXIT WHEN (i > 2);
END LOOP;
DBMS_OUTPUT.PUT_LINE ('Sortie de la boucle extérieure');
END;
/
Sortie:
La valeur de i = 1
La valeur de k = 1
La valeur de k = 2
La valeur de k = 3
La valeur de k = 4
Sortie de la boucle intérieure
La valeur de i = 2
La valeur de k = 5
Sortie de la boucle intérieure
La valeur de i = 3
La valeur de k = 6
Sortie de la boucle intérieure
Sortie de la boucle extérieure
11. Écrire un programme en PL/SQL en utilisant une boucle avec l'instruction CONTINUE. Exemple de sortie du programme:
A l'intérieur de la boucle: i = 0
A l'intérieur de la boucle: i = 1
A l'intérieur de la boucle: i = 2
A l'intérieur de la boucle: i = 3
A l'intérieur de la boucle, après CONTINUE: i = 4
A l'intérieur de la boucle: i = 4
A l'intérieur de la boucle, après CONTINUE: i = 5
A la sortie de la boucle: i = 5
DECLARE
i NUMBER := 0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE ('A l\'intérieur de la boucle: i = ' || TO_CHAR(i));
i := i + 1;
IF i < 4 THEN
CONTINUE;
END IF;
DBMS_OUTPUT.PUT_LINE
('A l\'intérieur de la boucle, après CONTINUE: i = ' || TO_CHAR(i));
EXIT WHEN i = 6;
END LOOP;
DBMS_OUTPUT.PUT_LINE ('A la sortie de la boucle: i = ' || TO_CHAR(i));
END;
/
Sortie:
A l'intérieur de la boucle: i = 0
A l'intérieur de la boucle: i = 1
A l'intérieur de la boucle: i = 2
A l'intérieur de la boucle: i = 3
A l'intérieur de la boucle, après CONTINUE: i = 4
A l'intérieur de la boucle: i = 4
A l'intérieur de la boucle, après CONTINUE: i = 5
A la sortie de la boucle: i = 5
12. Écrire un programme en PL/SQL en utilisant une boucle avec l'instruction CONTINUE WHEN. Exemple de sortie du programme:
La valeur à l'intérieur de la boucle: i = 0
La valeur à l'intérieur de la boucle: i = 1
La valeur à l'intérieur de la boucle: i = 2
La valeur à l'intérieur de la boucle: i = 3
La valeur à l'intérieur de la boucle, après CONTINUE: i = 4
La valeur à l'intérieur de la boucle: i = 4
La valeur à l'intérieur de la boucle, après CONTINUE: i = 5
La valeur après la sortie de la boucle: i = 5
DECLARE
i NUMBER := 0;
BEGIN
LOOP -- After CONTINUE statement, control resumes here
DBMS_OUTPUT.PUT_LINE ('La valeur à l'intérieur de la boucle: i = ' || TO_CHAR(i));
i := i + 1;
CONTINUE WHEN i < 4;
DBMS_OUTPUT.PUT_LINE
('La valeur à l'intérieur de la boucle, après CONTINUE: i = ' || TO_CHAR(i));
EXIT WHEN i = 5;
END LOOP;
DBMS_OUTPUT.PUT_LINE ('La valeur après la sortie de la boucle: i = ' || TO_CHAR(i));
END;
/
Sortie:
La valeur à l'intérieur de la boucle: i = 0
La valeur à l'intérieur de la boucle: i = 1
La valeur à l'intérieur de la boucle: i = 2
La valeur à l'intérieur de la boucle: i = 3
La valeur à l'intérieur de la boucle, après CONTINUE: i = 4
La valeur à l'intérieur de la boucle: i = 4
La valeur à l'intérieur de la boucle, après CONTINUE: i = 5
La valeur après la sortie de la boucle: i = 5
13. Ecrire un programme en PL/SQL pour afficher les premiers 8 nombres. Exemple de sortie du programme:
nbr = 8;
Les 8 premiers nombres sont:
1 2 3 4 5 6 7 8
DECLARE
nbr NUMBER := 8;
BEGIN
DBMS_OUTPUT.PUT_LINE ('Les '||nbr||' premiers nombres sont: ');
FOR i IN 1..nbr LOOP
dbms_output.put(i||' ');
END LOOP;
dbms_output.new_line;
END;
/
Sortie:
Les 8 premiers nombres sont:
1 2 3 4 5 6 7 8
14. Ecrire un programme en PL/SQL pour afficher les 10 premiers nombres avec une différence de 2 et commençant par 1. Exemple de sortie du programme:
nbr = 10;
Les 10 premiers nombres sont:
1 3 5 7 8 9 10
DECLARE
nbr NUMBER:= 10;
i NUMBER:=1;
k NUMBER:=1;
BEGIN
DBMS_OUTPUT.PUT_LINE ('Les '||nbr||' premiers nombres sont: ');
DBMS_OUTPUT.PUT (i||' ');
FOR i IN 1..nbr-1 LOOP
k:=k+2;
dbms_output.put(k||' ');
END LOOP;
dbms_output.new_line;
END;
/
Sortie:
Les 10 premiers nombres sont:
1 3 5 7 8 9 10
15. Ecrire un programme en PL/SQL pour afficher les nombres premiers entre 1 et 30. Exemple de sortie du programme:
Les nombres premiers sont:
2 3 5 7 11 13 17 19 23 29
DECLARE
i NUMBER(2);
j NUMBER(2);
BEGIN
dbms_output.Put_line('Les nombres premiers sont:');
dbms_output.new_line;
i := 2;
LOOP
j := 2;
LOOP
EXIT WHEN( ( MOD(i, j) = 0 )
OR ( j = i ) );
j := j + 1;
END LOOP;
IF( j = i )THEN
dbms_output.Put(i||' ');
END IF;
i := i + 1;
exit WHEN i = 30;
END LOOP;
dbms_output.new_line;
END;
/
Sortie:
Les nombres premiers sont :
2 3 5 7 11 13 17 19 23 29
16. Écrire un programme en PL/SQL pour vérifier si un nombre est premier ou non en utilisant l'instruction goto avec la boucle for. Exemple:
nbr = 23;
23 est un nombre premier
DECLARE
str VARCHAR2(50);
nbr PLS_INTEGER := 23;
BEGIN
FOR i in 2..ROUND(SQRT(nbr)) LOOP
IF nbr MOD i = 0 THEN
str := ' n\'est pas un nombre premier';
GOTO nbr_premier;
END IF;
END LOOP;
str := ' est un nombre premier';
<<nbr_premier>>
DBMS_OUTPUT.PUT_LINE(TO_CHAR(nbr) || str);
END;
/
Sortie:
23 est un nombre premier
17. Écrire un programme en PL/SQL pour copier les enregistrements de la table clients à une autre (tmp_clients).
Table: clients
+-----------+----------------+-------------+--------+
| client_id | nom | ville | age |
+-----------+----------------+-------------+--------+
| 1001 | Alex Barbara | Paris | 25 |
| 1002 | Lois Collins | Lyon | 30 |
| 1005 | Karen Farley | Nice | 44 |
| 1006 | Kevin Thompson | Paris | 65 |
| 1007 | Scott Henry | Marseille | 32 |
| 1003 | Ellen McMullen | Montpellier | 53 |
+-----------+----------------+-------------+--------+
CREATE TABLE tmp_clients (
client_id NUMBER,
nom VARCHAR2(40),
ville VARCHAR2(40),
age NUMBER
);
BEGIN
INSERT INTO tmp_clients (client_id, nom, ville, age)
SELECT client_id, nom, ville, age
FROM clients;
END;
/
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec PL/SQL. Nous espérons que ces exercices vous aideront à améliorer vos compétences en PL/SQL. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel PL/SQL avant de résoudre les exercices suivants.
Exercices corrigés PL/SQL: Types de données
1. Ecrivez un bloc PL/SQL pour apprendre à déclarer une variable de type CHAR.
DECLARE
str VARCHAR2(10);
BEGIN
str := 'hello';
END;
/
2.Écrire un bloc PL/SQL pour insérer des données dans une table en utilisant une variable de type CHAR.
CREATE TABLE exemple (colonne1 CHAR(6));
DECLARE
str VARCHAR2(6) := 'hello';
BEGIN
INSERT INTO exemple(colonne1) VALUES(str);
END;
/
3. Écrire un bloc PL/SQL pour différencier les types CHAR et VARCHAR2.
La différence entre un CHAR et un VARCHAR est qu’un CHAR(n) aura TOUJOURS une longueur de N octets. Par contre, un VARCHAR2(n) aura une longueur comprise entre 1 et N octets et ne sera PAS rempli par des espaces vides.
4. Écrire une procédure PL/SQL qui accepte un paramètre BOOLEAN et utilise l’instruction CASE pour afficher « ERROR » si la valeur du paramètre est NULL, « Oui » si elle est TRUE et « Non » si elle est FALSE.
CREATE PROCEDURE check_bool (b BOOLEAN) AUTHID DEFINER
AS
BEGIN
DBMS_OUTPUT.put_line (
CASE
WHEN b IS NULL THEN 'ERROR'
WHEN b THEN 'OUI'
WHEN NOT b THEN 'NON'
END
);
END;
/
BEGIN
check_bool(NULL);
check_bool(FALSE);
check_bool(TRUE);
END;
/
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec PL/SQL. Nous espérons que ces exercices vous aideront à améliorer vos compétences en PL/SQL. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel PL/SQL avant de résoudre les exercices suivants.
Exercices corrigés PL/SQL: Fonctions de chaînes de caractères
1. Écrire un bloc PL/SQL pour calculer la longueur du nom de chaque employé dans la table employees.
DECLARE
str_size NUMBER;
BEGIN
FOR e IN (SELECT nom FROM employees) LOOP
str_size := LENGTH(e.nom);
DBMS_OUTPUT.PUT_LINE('Longueur du nom ' || e.nom || ': ' || str_size);
END LOOP;
END;
/
Sortie:
Longueur du nom Eddie : 5
Longueur du nom Eleanor : 7
Longueur du nom Glen : 4
Longueur du nom Ali : 3
Longueur du nom Earl : 4
Longueur du nom Bryan : 5
2. Écrire un bloc PL/SQL pour concaténer le prénom et le nom de chaque employé et afficher le nom complet.
DECLARE
prenom_nom VARCHAR2(100);
BEGIN
FOR e IN (SELECT prenom, nom FROM employees) LOOP
prenom_nom := e.prenom || ' ' || e.nom;
DBMS_OUTPUT.PUT_LINE('Le nom complet: ' || prenom_nom);
END LOOP;
END;
/
Sortie:
Le nom complet: Parker Eddie
Le nom complet: Deas Eleanor
Le nom complet: Powell Glen
Le nom complet: Fawaz Ali
Le nom complet: Horn Earl
Le nom complet: Savoy Bryan
3. Ecrivez un bloc PL/SQL pour trouver la position de la première occurrence de la lettre ‘a’ dans le nom de chaque employé.
DECLARE
pos NUMBER;
BEGIN
FOR e IN (SELECT nom FROM employees) LOOP
pos := INSTR(e.nom, 'a');
DBMS_OUTPUT.PUT_LINE('Position du "a" dans ' || e.nom || ': ' || pos);
END LOOP;
END;
/
Sortie:
Position du "a" dans Eddie: 0
Position du "a" dans Eleanor: 4
Position du "a" dans Glen: 0
Position du "a" dans Ali: 1
Position du "a" dans Earl: 2
Position du "a" dans Bryan: 4
4. Écrire un bloc PL/SQL pour récupérer les 3 premiers caractères du nom de chaque employé.
DECLARE
soustr VARCHAR2(3);
BEGIN
FOR e IN (SELECT nom FROM employees) LOOP
soustr := SUBSTR(e.nom, 1, 3);
DBMS_OUTPUT.PUT_LINE('Les trois premiers caractères du nom ' || e.nom || ': ' || soustr);
END LOOP;
END;
/
Sortie:
Les trois premiers caractères du nom Eddie: Edd
Les trois premiers caractères du nom Eleanor: Ele
Les trois premiers caractères du nom Glen: Gle
Les trois premiers caractères du nom Ali: Ali
Les trois premiers caractères du nom Earl: Ear
Les trois premiers caractères du nom Bryan: Bry
5. Écrire un bloc PL/SQL pour convertir le nom de chaque employé en minuscules et afficher le résultat.
DECLARE
minus VARCHAR2(50);
BEGIN
FOR e IN (SELECT nom FROM employees) LOOP
minus := LOWER(e.nom);
DBMS_OUTPUT.PUT_LINE('Nom en minuscules: ' || e.nom || ': ' || minus);
END LOOP;
END;
/
Sortie:
Nom en minuscules Eddie: eddie
Nom en minuscules Eleanor: eleanor
Nom en minuscules Glen: glen
Nom en minuscules Ali: ali
Nom en minuscules Earl: earl
Nom en minuscules Bryan: bryan
6. Écrire un bloc PL/SQL pour remplacer la ville ‘Paris’ de chaque client en ‘Île-de-France’ et afficher le résultat.
Table: clients
+-----------+----------------+-------------+--------+
| client_id | nom | ville | age |
+-----------+----------------+-------------+--------+
| 1001 | Alex Barbara | Paris | 25 |
| 1002 | Lois Collins | Lyon | 30 |
| 1005 | Karen Farley | Nice | 44 |
| 1006 | Kevin Thompson | Paris | 65 |
| 1007 | Scott Henry | Marseille | 32 |
| 1003 | Ellen McMullen | Montpellier | 53 |
+-----------+----------------+-------------+--------+
DECLARE
v_old VARCHAR2(50);
v_new VARCHAR2(50);
ville_client clients.ville%TYPE;
BEGIN
v_old := 'Paris';
v_new := 'Ile-de-France';
FOR c IN (SELECT ville FROM clients) LOOP
ville_client := REPLACE(c.ville, v_old, v_new);
DBMS_OUTPUT.PUT_LINE('Ville mis à jour: ' || ville_client);
END LOOP;
END;
Sortie:
Ville mis à jour: Ile-de-France
Ville mis à jour: Lyon
Ville mis à jour: Nice
Ville mis à jour: Ile-de-France
Ville mis à jour: Marseille
Ville mis à jour: Montpellier
7. Écrire un bloc PL/SQL qui supprime les zéros de début et de fin dans une chaîne de caractères. Affichez la chaîne de caractères. Exemple:
str = "0000hello world!0000";
hello world!
DECLARE
str VARCHAR2(50);
res VARCHAR2(50);
BEGIN
str := '0000hello world!0000';
res := TRIM('0' FROM str);
DBMS_OUTPUT.PUT_LINE(res);
END;
Sortie:
hello world!
8. Écrire un bloc PL/SQL pour convertir le nom de chaque employé en majuscules et afficher le résultat.
DECLARE
maj VARCHAR2(50);
BEGIN
FOR e IN (SELECT nom FROM employees) LOOP
maj := UPPER(e.nom);
DBMS_OUTPUT.PUT_LINE('Nom en majuscules: ' || e.nom || ': ' || maj);
END LOOP;
END;
/
Sortie:
Nom en majuscules Eddie: EDDIE
Nom en majuscules Eleanor: ELEANOR
Nom en majuscules Glen: GLEN
Nom en majuscules Ali: ALI
Nom en majuscules Earl: EARL
Nom en majuscules Bryan: BRYAN
La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec PL/SQL. Nous espérons que ces exercices vous aideront à améliorer vos compétences en PL/SQL. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel PL/SQL avant de résoudre les exercices suivants.
Exercices corrigés PL/SQL: Curseurs
1. Écrire un programme PL/SQL pour afficher les noms de tous les pays.
DECLARE
nom_pays pays.nom%TYPE;
CURSOR c_pays IS SELECT nom FROM pays;
BEGIN
OPEN c_pays;
FETCH c_pays INTO nom_pays;
WHILE c_pays%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(nom_pays);
FETCH c_pays INTO nom_pays;
END LOOP;
CLOSE c_pays;
END;
Sortie:
Angola
Australia
Albania
Bangladesh
Andorra
Bolivia
2. Écrire un programme PL/SQL pour afficher les noms de tous les clients.
Table: clients
+-----------+----------------+-------------+--------+----------------+
| client_id | nom_cl | ville | age | fournisseur_id |
+-----------+----------------+-------------+--------+----------------+
| 1001 | Alex Barbara | Paris | 25 | 6001 |
| 1002 | Lois Collins | Lyon | 30 | 6001 |
| 1005 | Karen Farley | Nice | 44 | 6002 |
| 1006 | Kevin Thompson | Paris | 65 | 6003 |
| 1007 | Scott Henry | Marseille | 32 | 6006 |
| 1003 | Ellen McMullen | Montpellier | 53 | 6001 |
+-----------+----------------+-------------+--------+----------------+
DECLARE
nom_client clients.nom_cl%TYPE;
CURSOR c_clients IS SELECT nom_cl FROM clients;
BEGIN
OPEN c_clients;
FETCH c_clients INTO nom_client;
WHILE c_clients%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(nom_client);
FETCH c_clients INTO nom_client;
END LOOP;
CLOSE c_clients;
END;
Sortie:
Alex Barbara
Lois Collins
Karen Farley
Kevin Thompson
Scott Henry
Ellen McMullen
3. Écrire un programme PL/SQL pour afficher les identifiants des pays et les noms de tous les pays avec le titre approprié.
DECLARE
p_id pays.pays_id%TYPE;
p_nom pays.nom%TYPE;
CURSOR c_pays IS SELECT pays_id, nom FROM pays;
BEGIN
DBMS_OUTPUT.PUT_LINE(' ID | Nom ');
DBMS_OUTPUT.PUT_LINE('--------------------');
OPEN c_pays;
FETCH c_pays INTO p_id, p_nom;
WHILE c_pays%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(p_id || ' | ' || p_nom);
FETCH c_pays INTO p_id, p_nom;
END LOOP;
CLOSE c_pays;
END;
/
Sortie:
ID | Nom
--------------------
1001 | Angola
1002 | Australia
1005 | Albania
1006 | Bangladesh
1007 | Andorra
1003 | Bolivia
4. Écrire un programme PL/SQL pour afficher les identifiants, noms, prénoms et les noms de départements de tous les employés.
DECLARE
id_emp employees.id%TYPE;
nom_emp employees.nom%TYPE;
pren_emp employees.prenom%TYPE;
nom_dep departements.nom%TYPE;
CURSOR emp_cursor IS
SELECT emp.id, emp.nom, emp.prenom, dep.dep_id
FROM employees emp
JOIN departements dep ON emp.department_id = dep.dep_id;
BEGIN
OPEN emp_cursor;
FETCH emp_cursor INTO id_emp, pren_emp, nom_emp, nom_dep;
WHILE emp_cursor%FOUND LOOP
DBMS_OUTPUT.PUT_LINE('ID de l\'employé: ' || id_emp);
DBMS_OUTPUT.PUT_LINE('Prénom de l\'employé: ' || pren_emp);
DBMS_OUTPUT.PUT_LINE('Nom de l\'employé: ' || nom_emp);
DBMS_OUTPUT.PUT_LINE('Nom du département: ' || nom_dep);
DBMS_OUTPUT.PUT_LINE('--------------------------------');
FETCH emp_cursor INTO id_emp, pren_emp, nom_emp, nom_dep;
END LOOP;
CLOSE emp_cursor;
END;
Sortie:
ID de l'employé: 1001
Prénom de l'employé: Parker
Nom de l'employé : Eddie
Nom du département : Marketing
--------------------------------
ID de l'employé: 1002
Prénom de l'employé: Deas
Nom de l'employé : Eleanor
Nom du département : Finance
--------------------------------
ID de l'employé: 1003
Prénom de l'employé: Powell
Nom de l'employé : Glen
Nom du département : HR
--------------------------------
... etc.
5. Écrire un programme en PL/SQL pour trouver le nombre de lignes affectées par l’utilisation de l’attribut SQL%ROWCOUNT d’un curseur implicite.
CREATE OR REPLACE PROCEDURE delete_pays (
p_pays_id NUMBER
) AUTHID DEFINER AS
BEGIN
DELETE FROM pays
WHERE pays_id = p_pays_id;
IF SQL%FOUND THEN
DBMS_OUTPUT.PUT_LINE (
'Suppression réussie pour pays_id: ' || p_pays_id
);
ELSE
DBMS_OUTPUT.PUT_LINE ('Aucun pays de l\'ID '||p_pays_id||' n\'est trouvé.');
END IF;
END;
/
BEGIN
delete_pays(1001);
delete_pays(9999);
END;
/
Sortie:
Suppression réussie pour pays_id: 1001
Aucun employé de l'ID 9999 n'a été trouvé.
7. Écrire un programme en PL/SQL pour montrer l’utilisation de SQL%NOTFOUND afin de déterminer si l’instruction UPDATE a affecté des lignes.
DECLARE
p_pays_id NUMBER := 1001;
BEGIN
UPDATE pays
SET nom = 'PAYS'
WHERE pays_id = p_pays_id;
IF SQL%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE ('Aucun pays de l\'ID '||p_pays_id||' n\'est trouvé.');
ELSE
DBMS_OUTPUT.PUT_LINE (
'Mise à jour réussie pour pays_id: ' || p_pays_id
);
END IF;
END;
/
Sortie:
Mise à jour réussie pour pays_id: 1001
8. Écrire un programme en PL/SQL pour afficher les informations détaillées de l’employé de l’ID 1001 à partir de la table employees.
DECLARE
r_emp employees%ROWTYPE;
BEGIN
SELECT *
INTO r_emp
FROM employees
WHERE id = 1001;
dbms_output.Put_line('Employé ID:'||r_emp.id||' Nom: '||r_emp.prenom||' '||r_emp.nom||' Salaire: '||r_emp.salaire);
END;
/
Sortie:
Employé : ID:1001 Nom : Parker Eddie Salaire : 6000.00
9. Ecrire un programme en PL/SQL pour afficher les détails des employés de la table employés à l’aide d’un curseur.
DECLARE
CURSOR c_emp IS
SELECT *
FROM employees;
r_emp c_emp%ROWTYPE;
BEGIN
OPEN c_emp;
LOOP
FETCH c_emp INTO r_emp;
EXIT WHEN c_emp%NOTFOUND;
dbms_output.Put_line('Employé ID:'||r_emp.id||' Nom: '||r_emp.prenom||' '||r_emp.nom||' Salaire: '||r_emp.salaire);
END LOOP;
dbms_output.Put_line('Nombre total de lignes: '||c_emp%rowcount);
CLOSE c_emp;
END;
/
Sortie:
Employé : ID:1001 Nom : Parker Eddie Salaire : 6000.00
Employé : ID:1002 Nom : Deas Eleanor Salaire : 4500.00
Employé : ID:1003 Nom : Powell Glen Salaire : 5000.00
.......
10. Créer un bloc PL/SQL pour augmenter le salaire des employés du département 8 par 100$ si le salaire est inférieure à 5000.00$ sinon augmentez-le par 50$ en utilisant la clause WHERE CURRENT OF.
DECLARE
CURSOR emp_cur IS
SELECT id,
salaire
FROM employees
WHERE dep_id = 8
FOR UPDATE;
augmentation_sal NUMBER;
BEGIN
FOR emp IN emp_cur LOOP
IF emp.salaire < 5000 THEN
augmentation_sal := 100;
ELSE
augmentation_sal := 50;
END IF;
UPDATE employees
SET salaire = salaire + augmentation_sal
WHERE CURRENT OF emp_cur;
END LOOP;
END;
/
11. Ecrire un programme en PL/SQL pour afficher le nom de l'employé avec l'id 1006 à l'aide d'un curseur.
DECLARE
nom_emp VARCHAR2(50);
CURSOR cur_emp IS
SELECT nom
FROM employees
WHERE id = 1006;
BEGIN
OPEN cur_emp;
FETCH cur_emp
INTO nom_emp;
dbms_output.put_line('Le nom de l\'employé est:’|| nom_emp);
CLOSE cur_emp;
END;
/
Sortie:
Le nom de l'employé est: Bryan
12. Ecrire un programme en PL/SQL pour afficher le nom de tous les employés à l'aide d'un curseur.
DECLARE
nom_emp VARCHAR2(20);
CURSOR cur_emp IS
SELECT nom
FROM employees;
BEGIN
OPEN cur_emp;
LOOP
FETCH cur_emp
INTO nom_emp;
EXIT
WHEN cur_emp%NOTFOUND;
dbms_output.put_line('Le nom de l\'employé est:’|| nom_emp);
END LOOP;
CLOSE cur_emp;
END;
/
Sortie:
Le nom de l'employé est: Eddie
Le nom de l'employé est: Eleanor
Le nom de l'employé est: Glen
Le nom de l'employé est: Ali
Le nom de l'employé est: Earl
Le nom de l'employé est: Bryan