Vue normale

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierWayToLearnX

400 Exercices Corrigés En C – Partie 4

Par : Thomas
12 avril 2024 à 23:50

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, 30 à 40 et 40 à 50.

 

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.

Formule: Fahrenheit (°F) = (Température en degrés Celsius (°C) * 9/5) + 32

Exemple de sortie:

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.

Exemple de sortie:

checkTemp(100, -1) -> TRUE
checkTemp(2, 100) -> 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; 
} 
 

L’article 400 Exercices Corrigés En C – Partie 4 est apparu en premier sur WayToLearnX.

400 Exercices Corrigés En C – Partie 3

Par : Thomas
12 avril 2024 à 09:24

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.

Exemple de sortie:

1	2	3	4	5
1	2	3	4	5
TRUE

10	20	30	40	50
20	30	40	50	60
FALSE
#include <stdio.h>

int main()
{
	int i,not_equal=0,tab1[10],tab2[10];
	
	//remplir tab1
	for(i=0; i<10; i++){
		scanf("%d", &tab1[i]);
	}
	printf("\n");
	
	//remplir tab2
	for(i=0; i<10; i++){
		scanf("%d", &tab2[i]);
	}

	for(i=0; i<10; i++) {
		//vérifier l'égalité
		if(tab1[i] != tab2[i]) 
			not_equal = 1;
	}
	
	if (not_equal == 0) 
		printf("TRUE");
	else  
		printf ("FALSE");

	return 0; 
}
 
 
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; 
}
 

L’article 400 Exercices Corrigés En C – Partie 3 est apparu en premier sur WayToLearnX.

400 Exercices Corrigés En C – Partie 1

Par : Thomas
11 avril 2024 à 19:19

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
#include <stdio.h>

int main() 
{
	int n1,n2,n3,moy;
	
	printf("Entrer 1er nombre:"); 
	scanf("%d",&n1);
	printf("Entrer 2éme nombre:"); 
	scanf("%d",&n2);
	printf("Entrer 3éme nombre:"); 
	scanf("%d",&n3);
	
	moy = (n1 + n2 + n3) / 3 ; 
	
	printf("La moyenne est: %d", moy);
	return 0; 
}

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".

Exemple de sortie:

Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
#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".

Exemple de sortie:

Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
#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".

Exemple de sortie:

Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
#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.

Exemple de sortie:

Donner un nombre: 7
1
22
333
4444
55555
666666
7777777
#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".

 
&nbsp
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.

 

L’article 400 Exercices Corrigés En C – Partie 1 est apparu en premier sur WayToLearnX.

400 Exercices Corrigés En C – Partie 2

Par : Thomas
12 avril 2024 à 00:50

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.

Exemple de sortie:

check(15, 5) ->  TRUE
check(15, 20) ->  TRUE
check(15, 25) ->  FALSE
#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.

Exemple de sortie:

check(3) ->  TRUE
check(12) ->  TRUE
check(4) ->  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.

Exemple de sortie:

Donner un nombre: 123
321
#include <stdio.h>

int main()
{
	int Nbr,rev=0;   
	printf("Donner un nombre:");
	scanf("%d",&Nbr);

	while(Nbr > 0){
		rev = rev * 10;  
		rev = rev + Nbr%10; 
		Nbr = Nbr/10;
	}
	printf("%d",rev);   

	return 0; 
}

Voici ce que fait le programme ci-dessus:

  • Initialise la variable rev = 0.
  • 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.

Nbr = 123
rev = 0
rev = rev * 10 + Nbr % 10 = 0 * 10 + 123 % 10 = 3
Nbr = Nbr/ 10 = 12
rev = rev * 10 + Nbr % 10 = 3 * 10 + 12 % 10 = 32
Nbr = Nbr/ 10 = 1
rev = rev * 10 + Nbr % 10 = 32 * 10 + 1 % 10 = 321
Nbr = Nbr/10 = 0.

Le résultat sera donc 321.

 
 
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; 
}
 

L’article 400 Exercices Corrigés En C – Partie 2 est apparu en premier sur WayToLearnX.

100 Exercices Corrigés En Algorithme avec les Organigrammes – Partie 1

Par : Thomas
7 avril 2024 à 19:36

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.

Exemple de sortie:

Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
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.

Exemple de sortie:

Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
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’à.

Exemple de sortie:

Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
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.

  1. Dans l'algorithme de tri à bulle, nous comparons les deux premiers éléments d'un tableau et les permutons si nécessaire.
  2. 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.
  3. 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.

Exemple de sortie:

Donner un nombre: 7
1
22
333
4444
55555
666666
7777777
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".

 
&nbsp
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.
 

L’article 100 Exercices Corrigés En Algorithme avec les Organigrammes – Partie 1 est apparu en premier sur WayToLearnX.

100 Exercices Corrigés En Algorithme avec les Organigrammes – Partie 2

Par : Thomas
9 avril 2024 à 02:42

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.

Nbr = 123
rev = 0
rev = rev * 10 + Nbr mod 10 = 0 * 10 + 123 mod 10 = 3
Nbr = Nbr/ 10 = 12
rev = rev * 10 + Nbr mod 10 = 3 * 10 + 12 mod 10 = 32
Nbr = Nbr/ 10 = 1
rev = rev * 10 + Nbr mod 10 = 32 * 10 + 1 mod 10 = 321
Nbr = Nbr/10 = 0.

Le résultat sera donc 321.

 
 
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.

Exemple de sortie:

Tab : 1 5 2 4 9 3 3 6 8 7   
Tab1: 2 4 6 8     
Tab2: 1 5 9 3 3 7
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
 

L’article 100 Exercices Corrigés En Algorithme avec les Organigrammes – Partie 2 est apparu en premier sur WayToLearnX.

100 Exercices Corrigés En Algorithme avec les Organigrammes – Partie 3

Par : Thomas
10 avril 2024 à 00:16

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 et 30 à 40.

 

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.

Exemple de sortie:

1	2	3	4	5
1	2	3	4	5
TRUE

10	20	30	40	50
20	30	40	50	60
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
 

L’article 100 Exercices Corrigés En Algorithme avec les Organigrammes – Partie 3 est apparu en premier sur WayToLearnX.

100 Exercices Corrigés En Algorithme avec les Organigrammes – Partie 4

Par : Thomas
10 avril 2024 à 11:17

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, 30 à 40 et 40 à 50.

 

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.

Formule: Fahrenheit (°F) = (Température en degrés Celsius (°C) * 9/5) + 32

Exemple de sortie:

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.

Exemple de sortie:

Entrée: 8 0 6 0 1 6 0 0 2 3
Sortie: 8 6 1 6 2 3 0 0 0 0
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
 

L’article 100 Exercices Corrigés En Algorithme avec les Organigrammes – Partie 4 est apparu en premier sur WayToLearnX.

100 Exercices Corrigés En Algorithme avec les Organigrammes – Partie 5

Par : Thomas
10 avril 2024 à 18:18

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, 30 à 40, 40 à 50 et 50 à 60.

 

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!

 

L’article 100 Exercices Corrigés En Algorithme avec les Organigrammes – Partie 5 est apparu en premier sur WayToLearnX.

Exercices Corrigés Dépendances fonctionnelles(Forme Normale) – Partie 1

Par : Thomas
31 mars 2024 à 05:17

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.

 

 

L’article Exercices Corrigés Dépendances fonctionnelles(Forme Normale) – Partie 1 est apparu en premier sur WayToLearnX.

Exercices Corrigés Dépendances fonctionnelles(Forme Normale) – Partie 2

Par : Thomas
31 mars 2024 à 17:18

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.

 

 

L’article Exercices Corrigés Dépendances fonctionnelles(Forme Normale) – Partie 2 est apparu en premier sur WayToLearnX.

Exercices Corrigés Algèbre Relationnelle – Partie 3

Par : Thomas
28 mars 2024 à 02:09

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

Navigateurs(id_navigateur, n_nom, note, age)
Bateaux(id_bateau, b_nom, couleur)
Réservation(id_navigateur, id_bateau, date)
r(Navigateur)

+----------------+---------+------+-----+
| id_navigateur  |  n_nom  | note | age |
+----------------+---------+------+-----+
| 1              | Luz     | 7    | 25  |
| 2              | Lois    | 6    | 30  |
| 3              | Alex    | 2    | 18  |
| 4              | Kevin   | 9    | 65  |
| 5              | Scott   | 8    | 32  |
| 6              | Diana   | 10   | 19  |
+----------------+---------+------+-----+
r(Bateau)

+------------+---------+---------+
| id_bateau  |  b_nom  | couleur |
+------------+---------+---------+
| 1          | Liberté | rouge   |
| 2          | Évasion | bleu    |
| 3          | Altair  | bleu    |
| 4          | Raven   | vert    |
| 5          | Scott   | jaune   |
| 6          | Vaimit  | jaune   |
+------------+---------+---------+
r(Réservation)

+----------------+--------------+------------+
| id_navigateur  |  id_bateau   |    date    |
+----------------+--------------+------------+
| 1              | 3            | 2016-01-16 |
| 2              | 4            | 2018-06-17 |
| 3              | 1            | 2020-11-02 |
| 4              | 2            | 2022-12-30 |
| 5              | 2            | 2024-03-19 |
| 6              | 3            | 2022-12-30 |
+----------------+--------------+------------+

 
 
1. Trouvez les couleurs des bateaux réservés par Alex.


 

2. Trouvez tous les identifiants des navigateurs qui ont une note minimale de 7 ou un bateau réservé 6.


 

3. Trouvez les noms des navigateurs qui n’ont pas réservé de bateau bleu.


 

4. Trouver les identifiants des navigateurs âgés de plus de 25 ans qui n’ont pas réservé de bateau bleu.


 

5. Trouvez les noms des navigateurs qui ont réservé au moins deux bateaux.

Nous allons utiliser les abréviations suivantes:
  • Navigateurs n
  • Bateaux b
  • Réservation r


 
 
 
6. Trouvez les noms des navigateurs qui ont réservé tous les bateaux.
Nous allons utiliser les abréviations suivantes:
  • Navigateurs n
  • Bateaux b
  • Réservation r


 

7. Trouvez les noms des navigateurs qui ont réservé tous les bateaux appelés « Raven ».

Nous allons utiliser les abréviations suivantes:
  • Navigateurs n
  • Bateaux b
  • Réservation r


 

8. Trouver les identifiants des navigateurs dont la note est meilleure que celle d’un navigateur appelé « Kevin ».

Nous allons utiliser les abréviations suivantes:
  • Navigateurs n
  • Bateaux b
  • Réservation r


 

9. Trouver les identifiants des navigateurs dont la note est meilleure que celle de tous les navigateurs appelés « Kevin ».

Nous allons utiliser les abréviations suivantes:
  • Navigateurs n
  • Bateaux b
  • Réservation r


 

10. Trouver les identifiants des navigateurs ayant la meilleure note.

Nous allons utiliser les abréviations suivantes:
  • Navigateurs n
  • Bateaux b
  • Réservation r


 

11. Trouvez le nom et l’âge du navigateur le plus âgé.

Nous allons utiliser les abréviations suivantes:
  • Navigateurs n
  • Bateaux b
  • Réservation r


 
 

L’article Exercices Corrigés Algèbre Relationnelle – Partie 3 est apparu en premier sur WayToLearnX.

Exercices Corrigés Algèbre Relationnelle – Partie 1

Par : Thomas
25 mars 2024 à 20:56

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

auteur(id_auteur, prénom, nom)
publication_auteur(id_auteur, id_publication)
livre(id_livre, titre_livre, mois, année, éditeur)
publication(id_publication, titre, id_livre)
r(auteur)

+-----------+---------+----------+
| id_auteur |   nom   |  prenom  |
+-----------+---------+----------+
| 1         | Eddie   | Parker   |
| 2         | Eleanor | Deas     |
| 3         | Glen    | Powell   |
| 4         | Ali     | Fawaz    |
| 5         | Earl    | Horn     |
| 6         | Bryan   | Savoy    |
+-----------+---------+----------+
r(publication_auteur)

+-----------+----------------+
| id_auteur | id_publication |
+-----------+----------------+
| 1         | 1              |
| 2         | 2              |
| 3         | 2              |
| 4         | 3              |
| 5         | 4              |
| 6         | 5              |
+-----------+----------------+
r(livre)

+----------+-------------+------------+-------+---------+
| id_livre | titre_livre |    mois    | année | éditeur |
+----------+-------------+------------+-------+---------+
| 1        | DNS         | Avril      | 1988  | 6       |
| 2        | DNS         | Mars       | 1972  | 6       |
| 3        | IMAP        | Janvier    | 1999  | NULL    |
| 4        | TCP         | May        | 1985  | 2       |
| 5        | UDP         | Décembre   | 2004  | 1       |
| 6        | DHCP        | Octobre    | 2010  | 3       |
+----------+-------------+------------+-------+---------+
r(publication)

+----------------+-----------------------+----------+
| id_publication |         titre         | id_livre |
+----------------+-----------------------+----------+
| 1              | Réseau Informatique   | 1        |
| 2              | Télécommunication     | 2        |
| 3              | Sécurité              | 3        |
| 4              | Informatique          | 4        |
| 5              | Programmation Réseau  | 5        |
+----------------+-----------------------+----------+

 
 
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(σ).

 

 

L’article Exercices Corrigés Algèbre Relationnelle – Partie 1 est apparu en premier sur WayToLearnX.

Exercices Corrigés Algèbre Relationnelle – Partie 2

Par : Thomas
26 mars 2024 à 23:46

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    |
+-------+------------+
r(Serve)

+---------------------+------------+-------+
| burger_shop         | burger     | prix  |
+---------------------+------------+-------+
| Big Buns Burgers    | fromage    | 9.5   |
| Toasty Buns Burgers | champignon | 5     |
| Buffalo Burgers     | saucisse   | 8     |
| Beefcakes Burgers   | fromage    | 10    |
| Knuckle Burger      | fromage    | 12    |
| Dungeon Burgers     | fromage    | 8.5   |
+---------------------+------------+-------+

 
 

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.


 
 

L’article Exercices Corrigés Algèbre Relationnelle – Partie 2 est apparu en premier sur WayToLearnX.

32 Exercices Corrigés PL/SQL: Principes de base

Par : Thomas
21 mars 2024 à 05:14

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.

Table: employees

+------+---------+----------+----------+----------------+
|  id  |   nom   |  prenom  | salaire  | departement_id |
+------+---------+----------+----------+----------------+
| 1001 | Eddie   | Parker   | 6000.00  | 8              |
| 1002 | Eleanor | Deas     | 4500.00  | 8              |
| 1003 | Glen    | Powell   | 5000.00  | 6              |
| 1004 | Ali     | Fawaz    | 7800.00  | 2              |
| 1005 | Earl    | Horn     | 9000.00  | 9              |
| 1006 | Bryan   | Savoy    | 8000.00  | 3              |
+------+---------+----------+----------+----------------+
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.
DECLARE
  "BEGIN" varchar2(20) := 'En majuscule';
  "Begin" varchar2(20) := 'En majuscule minuscule';
  "begin" varchar2(20) := 'En minuscule';
BEGIN
  DBMS_Output.Put_Line("BEGIN");
  DBMS_Output.Put_Line("Begin");
  DBMS_Output.Put_Line("begin");
END;
/

Sortie:

BEGIN
Begin
begin

 

5. Quelles sont les caractéristiques de PL/SQL ?

  • PL/SQL est un langage procédural.
  • 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:
DECLARE 
   str1 string(10) := 'Welcome';
   str2 string(10) := 'to';
   str3 string(10) := 'WayToLearnX!';
   
BEGIN 
   dbms_output.put_line(str1 || str2 || str3);   
END;

Sortie:

Welcome to WayToLearnX!

 

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;

 

 

L’article 32 Exercices Corrigés PL/SQL: Principes de base est apparu en premier sur WayToLearnX.

Exercices Corrigés PL/SQL: Instruction IF-THEN-ELSE

Par : Thomas
22 mars 2024 à 17:55

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: Instruction IF-THEN-ELSE

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:

Entrée:
small_nbr = 25;
big_nbr = 5;
---------------------
Sortie:
small_nbr = 5;
big_nbr = 25;
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;
/

 

 

L’article Exercices Corrigés PL/SQL: Instruction IF-THEN-ELSE est apparu en premier sur WayToLearnX.

Exercices Corrigés PL/SQL: Types de données

Par : Thomas
21 mars 2024 à 21:11

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.

DECLARE
  nom1  CHAR(15);
  nom2   VARCHAR2(15);
BEGIN
  nom1 := 'Alex  ';
  nom2  := 'Bob  ';
 
  DBMS_OUTPUT.PUT_LINE('*' || nom1 || '*');
  DBMS_OUTPUT.PUT_LINE('*' || nom2 || '*');
END;
/

Sortie:

*Alex          *
*Bob  *

 

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;
/

Sortie:

ERROR
OUI
NON

 

 

L’article Exercices Corrigés PL/SQL: Types de données est apparu en premier sur WayToLearnX.

Exercices Corrigés PL/SQL: Fonctions de chaînes de caractères

Par : Thomas
23 mars 2024 à 02:52

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.

Table: employees

+------+---------+----------+----------+----------------+
|  id  |   nom   |  prenom  | salaire  | departement_id |
+------+---------+----------+----------+----------------+
| 1001 | Eddie   | Parker   | 6000.00  | 8              |
| 1002 | Eleanor | Deas     | 4500.00  | 8              |
| 1003 | Glen    | Powell   | 5000.00  | 6              |
| 1004 | Ali     | Fawaz    | 7800.00  | 2              |
| 1005 | Earl    | Horn     | 9000.00  | 9              |
| 1006 | Bryan   | Savoy    | 8000.00  | 3              |
+------+---------+----------+----------+----------------+
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.

Table: employees

+------+---------+----------+----------+----------------+
|  id  |   nom   |  prenom  | salaire  | departement_id |
+------+---------+----------+----------+----------------+
| 1001 | Eddie   | Parker   | 6000.00  | 8              |
| 1002 | Eleanor | Deas     | 4500.00  | 8              |
| 1003 | Glen    | Powell   | 5000.00  | 6              |
| 1004 | Ali     | Fawaz    | 7800.00  | 2              |
| 1005 | Earl    | Horn     | 9000.00  | 9              |
| 1006 | Bryan   | Savoy    | 8000.00  | 3              |
+------+---------+----------+----------+----------------+
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é.

Table: employees

+------+---------+----------+----------+----------------+
|  id  |   nom   |  prenom  | salaire  | departement_id |
+------+---------+----------+----------+----------------+
| 1001 | Eddie   | Parker   | 6000.00  | 8              |
| 1002 | Eleanor | Deas     | 4500.00  | 8              |
| 1003 | Glen    | Powell   | 5000.00  | 6              |
| 1004 | Ali     | Fawaz    | 7800.00  | 2              |
| 1005 | Earl    | Horn     | 9000.00  | 9              |
| 1006 | Bryan   | Savoy    | 8000.00  | 3              |
+------+---------+----------+----------+----------------+
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é.
Table: employees

+------+---------+----------+----------+----------------+
|  id  |   nom   |  prenom  | salaire  | departement_id |
+------+---------+----------+----------+----------------+
| 1001 | Eddie   | Parker   | 6000.00  | 8              |
| 1002 | Eleanor | Deas     | 4500.00  | 8              |
| 1003 | Glen    | Powell   | 5000.00  | 6              |
| 1004 | Ali     | Fawaz    | 7800.00  | 2              |
| 1005 | Earl    | Horn     | 9000.00  | 9              |
| 1006 | Bryan   | Savoy    | 8000.00  | 3              |
+------+---------+----------+----------+----------------+
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.

Table: employees

+------+---------+----------+----------+----------------+
|  id  |   nom   |  prenom  | salaire  | departement_id |
+------+---------+----------+----------+----------------+
| 1001 | Eddie   | Parker   | 6000.00  | 8              |
| 1002 | Eleanor | Deas     | 4500.00  | 8              |
| 1003 | Glen    | Powell   | 5000.00  | 6              |
| 1004 | Ali     | Fawaz    | 7800.00  | 2              |
| 1005 | Earl    | Horn     | 9000.00  | 9              |
| 1006 | Bryan   | Savoy    | 8000.00  | 3              |
+------+---------+----------+----------+----------------+
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.
Table: employees

+------+---------+----------+----------+----------------+
|  id  |   nom   |  prenom  | salaire  | departement_id |
+------+---------+----------+----------+----------------+
| 1001 | Eddie   | Parker   | 6000.00  | 8              |
| 1002 | Eleanor | Deas     | 4500.00  | 8              |
| 1003 | Glen    | Powell   | 5000.00  | 6              |
| 1004 | Ali     | Fawaz    | 7800.00  | 2              |
| 1005 | Earl    | Horn     | 9000.00  | 9              |
| 1006 | Bryan   | Savoy    | 8000.00  | 3              |
+------+---------+----------+----------+----------------+
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

 

 

L’article Exercices Corrigés PL/SQL: Fonctions de chaînes de caractères est apparu en premier sur WayToLearnX.

Exercices Corrigés PL/SQL: Curseurs

Par : Thomas
23 mars 2024 à 20:07

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.

Table: pays

+---------+------------+
| pays_id |    nom     |
+---------+------------+
|  1001   | Angola     |
|  1002   | Australia  |
|  1005   | Albania    |
|  1006   | Bangladesh |
|  1007   | Andorra    |
|  1003   | Bolivia    |
+---------+------------+
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é.

Table: pays

+---------+------------+
| pays_id |    nom     |
+---------+------------+
|  1001   | Angola     |
|  1002   | Australia  |
|  1005   | Albania    |
|  1006   | Bangladesh |
|  1007   | Andorra    |
|  1003   | Bolivia    |
+---------+------------+
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.
Table: employees

+------+---------+----------+----------+----------------+
|  id  |   nom   |  prenom  | salaire  | departement_id |
+------+---------+----------+----------+----------------+
| 1001 | Eddie   | Parker   | 6000.00  | 1              |
| 1002 | Eleanor | Deas     | 4500.00  | 2              |
| 1003 | Glen    | Powell   | 5000.00  | 3              |
| 1004 | Ali     | Fawaz    | 7800.00  | 4              |
| 1005 | Earl    | Horn     | 9000.00  | 5              |
| 1006 | Bryan   | Savoy    | 8000.00  | 6              |
+------+---------+----------+----------+----------------+
Table: departements

+---------+----------------+
| dep_id  |       nom      |
+---------+----------------+
|  1      | Marketing      |
|  2      | Finance        |
|  3      | HR             |
|  4      | Informatique   |
|  5      | Expéditions    |
|  6      | Administration |
+---------+----------------+
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.

Table: pays

+---------+------------+
| pays_id |    nom     |
+---------+------------+
|  1001   | Angola     |
|  1002   | Australia  |
|  1005   | Albania    |
|  1006   | Bangladesh |
|  1007   | Andorra    |
|  1003   | Bolivia    |
+---------+------------+
BEGIN
    UPDATE pays
    SET    nom = 'PAYS'
    WHERE  nom LIKE 'A%';

    dbms_output.Put_line('Nombre d\'enregistrements mis à jour: '||To_char(SQL%rowcount));
END;
/ 

Sortie:

Nombre d'enregistrements mis à jour: 4

 

 
 
6. Écrire un programme en PL/SQL pour montrer l’utilisation de SQL%FOUND afin de déterminer si l’instruction DELETE a affecté des lignes.
Table: pays

+---------+------------+
| pays_id |    nom     |
+---------+------------+
|  1001   | Angola     |
|  1002   | Australia  |
|  1005   | Albania    |
|  1006   | Bangladesh |
|  1007   | Andorra    |
|  1003   | Bolivia    |
+---------+------------+
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.

Table: pays

+---------+------------+
| pays_id |    nom     |
+---------+------------+
|  1001   | Angola     |
|  1002   | Australia  |
|  1005   | Albania    |
|  1006   | Bangladesh |
|  1007   | Andorra    |
|  1003   | Bolivia    |
+---------+------------+
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.
Table: employees

+------+---------+----------+----------+----------------+
|  id  |   nom   |  prenom  | salaire  | departement_id |
+------+---------+----------+----------+----------------+
| 1001 | Eddie   | Parker   | 6000.00  | 8              |
| 1002 | Eleanor | Deas     | 4500.00  | 8              |
| 1003 | Glen    | Powell   | 5000.00  | 6              |
| 1004 | Ali     | Fawaz    | 7800.00  | 2              |
| 1005 | Earl    | Horn     | 9000.00  | 9              |
| 1006 | Bryan   | Savoy    | 8000.00  | 3              |
+------+---------+----------+----------+----------------+
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.

Table: employees

+------+---------+----------+----------+----------------+
|  id  |   nom   |  prenom  | salaire  | departement_id |
+------+---------+----------+----------+----------------+
| 1001 | Eddie   | Parker   | 6000.00  | 8              |
| 1002 | Eleanor | Deas     | 4500.00  | 8              |
| 1003 | Glen    | Powell   | 5000.00  | 6              |
| 1004 | Ali     | Fawaz    | 7800.00  | 2              |
| 1005 | Earl    | Horn     | 9000.00  | 9              |
| 1006 | Bryan   | Savoy    | 8000.00  | 3              |
+------+---------+----------+----------+----------------+
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.
Table: employees

+------+---------+----------+----------+----------------+
|  id  |   nom   |  prenom  | salaire  | departement_id |
+------+---------+----------+----------+----------------+
| 1001 | Eddie   | Parker   | 6000.00  | 8              |
| 1002 | Eleanor | Deas     | 4500.00  | 8              |
| 1003 | Glen    | Powell   | 5000.00  | 6              |
| 1004 | Ali     | Fawaz    | 7800.00  | 2              |
| 1005 | Earl    | Horn     | 9000.00  | 9              |
| 1006 | Bryan   | Savoy    | 8000.00  | 3              |
+------+---------+----------+----------+----------------+
Table: departements

+---------+----------------+
| dep_id  |       nom      |
+---------+----------------+
|  1      | Marketing      |
|  2      | Finance        |
|  3      | HR             |
|  4      | Informatique   |
|  5      | Expéditions    |
|  6      | Administration |
+---------+----------------+
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.

Table: employees

+------+---------+----------+----------+----------------+
|  id  |   nom   |  prenom  | salaire  | departement_id |
+------+---------+----------+----------+----------------+
| 1001 | Eddie   | Parker   | 6000.00  | 8              |
| 1002 | Eleanor | Deas     | 4500.00  | 8              |
| 1003 | Glen    | Powell   | 5000.00  | 6              |
| 1004 | Ali     | Fawaz    | 7800.00  | 2              |
| 1005 | Earl    | Horn     | 9000.00  | 9              |
| 1006 | Bryan   | Savoy    | 8000.00  | 3              |
+------+---------+----------+----------+----------------+
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.
Table: employees

+------+---------+----------+----------+----------------+
|  id  |   nom   |  prenom  | salaire  | departement_id |
+------+---------+----------+----------+----------------+
| 1001 | Eddie   | Parker   | 6000.00  | 8              |
| 1002 | Eleanor | Deas     | 4500.00  | 8              |
| 1003 | Glen    | Powell   | 5000.00  | 6              |
| 1004 | Ali     | Fawaz    | 7800.00  | 2              |
| 1005 | Earl    | Horn     | 9000.00  | 9              |
| 1006 | Bryan   | Savoy    | 8000.00  | 3              |
+------+---------+----------+----------+----------------+
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

 

 

L’article Exercices Corrigés PL/SQL: Curseurs est apparu en premier sur WayToLearnX.

❌
❌