Avec des exercices corrigés en C++, vous pratiquerez divers concepts du langage C++. Vous commencerez par des exercices C++ de base à des exercices plus avancés. La solution est fournie pour chaque exercice. Vous devez essayer de résoudre chaque problème par vous-même avant de vérifier la solution. Si vous avez des questions concernant chaque problème, nous vous encourageons à les poster sur notre forum.
Exercice 1:
Écrire un programme C++ pour trouver le nombre total de minutes entre deux heures données (formatées avec deux points et am ou pm).
Exemple:
Entrez l'heure de début (format HH:MM AM/PM): 11:45 AM
Entrez l'heure de fin (format HH:MM AM/PM): 1:15 PM
Le nombre total de minutes entre les deux heures est: 90
Solution:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
// Fonction pour convertir une heure 12h en minutes depuis minuit
int convertToMinutes(const string& time) {
int hours, minutes;
char colon;
string am_pm;
// Extraire les heures, minutes et le suffixe AM/PM
stringstream ss(time);
ss >> hours >> colon >> minutes >> am_pm;
// Si c'est PM et que ce n'est pas 12 PM, ajouter 12 heures
if (am_pm == "PM" && hours != 12) {
hours += 12;
}
// Si c'est AM et que c'est 12 AM, on met les heures à 0
if (am_pm == "AM" && hours == 12) {
hours = 0;
}
// Retourne le total des minutes depuis minuit
return hours * 60 + minutes;
}
// Fonction pour calculer la différence en minutes entre deux heures données
int minutesBetween(const string& startTime, const string& endTime) {
int startMinutes = convertToMinutes(startTime);
int endMinutes = convertToMinutes(endTime);
// Calculer la différence
int diff = endMinutes - startMinutes;
// Si la différence est négative, cela signifie que l'heure de
// fin est le jour suivant
if (diff < 0) {
diff += 24 * 60;
}
return diff;
}
int main() {
string startTime, endTime;
// Lire les heures de départ et de fin
cout << "Entrez l'heure de début (format HH:MM AM/PM): ";
getline(cin, startTime);
cout << "Entrez l'heure de fin (format HH:MM AM/PM): ";
getline(cin, endTime);
// Calculer la différence en minutes
int totalMinutes = minutesBetween(startTime, endTime);
// Afficher le résultat
cout << "Le nombre total de minutes entre les deux heures est: " << totalMinutes << endl;
return 0;
}
Sortie:
Entrez l'heure de début (format HH:MM AM/PM): 11:45 AM
Entrez l'heure de fin (format HH:MM AM/PM): 1:15 PM
Le nombre total de minutes entre les deux heures est: 90
Explication:
La fonction convertToMinutes convertit une heure donnée au format 12 heures (AM/PM) en minutes depuis minuit.
La fonction minutesBetween calcule la différence en minutes entre deux heures.
Le programme demande à l'utilisateur de saisir deux heures, puis il affiche le nombre total de minutes entre ces deux heures.
Exercice 2:
Écrire un programme C++ qui accepte deux valeurs entières comprises entre 20 et 50 et qui renvoie True s'il y a un chiffre commun dans les deux nombres.
Exemple:
Entrez le premier nombre (entre 20 et 50): 34
Entrez le deuxième nombre (entre 20 et 50): 43
True: Il y a un chiffre commun.
Solution:
#include <iostream>
using namespace std;
// Fonction pour vérifier s'il y a un chiffre commun entre deux nombres
bool hasCommonDigit(int n1, int n2) {
// Extraire les chiffres des deux nombres
int n1_tens = n1 / 10; // Chiffre des dizaines de n1
int n1_units = n1 % 10; // Chiffre des unités de n1
int n2_tens = n2 / 10; // Chiffre des dizaines de n2
int n2_units = n2 % 10; // Chiffre des unités de n2
// Vérifier s'il y a un chiffre commun
if (n1_tens == n2_tens || n1_tens == n2_units ||
n1_units == n2_tens || n1_units == n2_units) {
return true;
}
return false;
}
int main() {
int n1, n2;
// Lire deux entiers entre 20 et 50
cout << "Entrez le premier nombre (entre 20 et 50): ";
cin >> n1;
cout << "Entrez le deuxième nombre (entre 20 et 50): ";
cin >> n2;
// Vérifier si les nombres sont dans la plage autorisée
if ((n1 < 20 || n1 > 50) || (n2 < 20 || n2 > 50)) {
cout <<"Les nombres doivent être compris entre 20 et 50."<< endl;
// Fin du programme si les nombres ne sont pas valides
return 1;
}
// Appel de la fonction pour vérifier s'il y a un chiffre commun
if (hasCommonDigit(n1, n2)) {
cout <<"True: Il y a un chiffre commun."<< endl;
} else {
cout <<"False: Il n'y a pas de chiffre commun."<< endl;
}
return 0;
}
Sortie:
Entrez le premier nombre (entre 20 et 50): 34
Entrez le deuxième nombre (entre 20 et 50): 43
True: Il y a un chiffre commun.
Explication:
hasCommonDigit(): Cette fonction extrait les chiffres des dizaines et des unités des deux nombres et vérifie s'il existe un chiffre commun.
Vérification de la plage: Avant de faire les comparaisons, le programme vérifie si les deux entiers sont bien compris entre 20 et 50.
Affichage du résultat: Si un chiffre commun est trouvé, le programme affiche True, sinon il affiche False.
Exercice 3:
Écrire un programme C++ pour calculer le modulo de deux nombres sans utiliser l'opérateur de modulo intégré.
Exemple:
Entrez le dividende: 17
Entrez le diviseur: 5
Le résultat de 2 modulo 5 est: 2
Solution:
#include <iostream>
using namespace std;
// Fonction pour calculer le modulo sans utiliser l'opérateur %
int calculateModulo(int dividend, int divisor) {
// S'assurer que le diviseur n'est pas nul
if (divisor == 0) {
cout << "Erreur: Division par zéro." << endl;
return -1; // Renvoie -1 pour indiquer une erreur
}
// Effectuer la soustraction répétée jusqu'à ce que le dividende
// soit inférieur au diviseur
while (dividend >= divisor) {
dividend -= divisor;
}
// Le dividende restant est le reste (modulo)
return dividend;
}
int main() {
int dividend, divisor;
// Lire le dividende et le diviseur
cout << "Entrez le dividende: ";
cin >> dividend;
cout << "Entrez le diviseur: ";
cin >> divisor;
// Calculer le modulo
int result = calculateModulo(dividend, divisor);
// Si le diviseur n'était pas zéro, afficher le résultat
if (result != -1) {
cout <<"Le résultat de "<< dividend <<" modulo "<< divisor <<" est: "<< result << endl;
}
return 0;
}
Sortie:
Entrez le dividende: 17
Entrez le diviseur: 5
Le résultat de 2 modulo 5 est: 2
Explication:
Dans la fonction calculateModulo():
La fonction prend deux entiers: le dividende et le diviseur.
Elle soustrait le diviseur du dividende jusqu'à ce que le dividende devienne plus petit que le diviseur. Le nombre restant est le résultat du modulo.
Si le diviseur est 0, il y a une vérification pour éviter la division par zéro et un message d'erreur est affiché.
Exercice 4:
Ecrivez un programme C++ pour calculer la somme des 50 premiers nombres premiers.
Exemple:
La somme des 50 premiers nombres premiers est: 3282
Solution:
#include <iostream>
using namespace std;
// Fonction pour vérifier si un nombre est premier
bool estPremier(int num) {
if (num <= 1) return false;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) return false;
}
return true;
}
int main() {
// Compteur pour le nombre de nombres premiers trouvés
int count = 0;
// Somme des nombres premiers
int sum = 0;
// Premier nombre à tester(2 est le premier nombre premier)
int num = 2;
// Boucle jusqu'à ce qu'on trouve les 50 premiers nombres
// premiers
while (count < 50) {
if (estPremier(num)) {
// Ajouter le nombre premier à la somme
sum += num;
// Incrémenter le compteur de nombres premiers
count++;
}
num++; // Passer au nombre suivant
}
// Afficher la somme des 50 premiers nombres premiers
cout <<"La somme des 50 premiers nombres premiers est: "<< sum << endl;
return 0;
}
Sortie:
La somme des 50 premiers nombres premiers est: 3282
Explication:
Fonction isPrime: Cette fonction vérifie si un nombre est premier. Elle utilise une approche efficace qui vérifie uniquement les diviseurs jusqu'à la racine carrée du nombre.
Boucle principale: Le programme teste les nombres, en partant de 2, et utilise la fonction isPrime pour vérifier si le nombre est premier. Lorsqu'un nombre premier est trouvé, il est ajouté à la somme, et un compteur est incrémenté jusqu'à ce que 50 nombres premiers aient été trouvés.
Affichage du résultat: Le programme affiche ensuite la somme des 50 premiers nombres premiers.
Exercice 5:
Écrivez un programme C++ pour convertir un nombre donné en heures et en minutes. Séparez le nombre d'heures et de minutes par deux points.
Exemple:
Entrez le nombre total de minutes : 130
2:10
Solution:
#include <iostream>
using namespace std;
int main() {
int totalMinutes, hours, minutes;
// Lire le nombre total de minutes
cout << "Entrez le nombre total de minutes: ";
cin >> totalMinutes;
// Calculer le nombre d'heures et de minutes
// Diviser par 60 pour obtenir les heures
hours = totalMinutes / 60;
// Le reste donne les minutes
minutes = totalMinutes % 60;
// Afficher le résultat au format "heures:minutes"
cout << hours <<":"<< (minutes < 10 ? "0" : "") << minutes << endl;
return 0;
}
Sortie:
Entrez le nombre total de minutes : 130
2:10
Explication:
Conversion en heures et minutes:
Les heures sont calculées en divisant le nombre total de minutes par 60.
Les minutes sont obtenues en prenant le reste de la division du nombre total de minutes par 60 (grâce à l'opérateur %).
Exercice 6:
Écrire un programme C++ pour additionner tous les entiers positifs dans une phrase.
Exemple:
Entrez une phrase: J'ai 10 pommes et 20 oranges.
La somme des entiers positifs dans la phrase est: 30
Solution:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int sumOfIntegersInString(const string& phrase) {
int sum = 0;
stringstream ss(phrase);
string mot;
// Lire chaque "mot" de la phrase
while (ss >> mot) {
bool isNumber = true;
// Vérifier si chaque caractère est un chiffre
for (char c : mot) {
if (!isdigit(c)) {
isNumber = false;
break;
}
}
// Si c'est un nombre, le convertir en entier et l'ajouter à
// la somme
if (isNumber) {
sum += stoi(mot);
}
}
return sum;
}
int main() {
string phrase;
// Lire une phrase
cout << "Entrez une phrase: ";
getline(cin, phrase);
// Calculer la somme des entiers positifs
int result = sumOfIntegersInString(phrase);
// Afficher le résultat
cout <<"La somme des entiers positifs dans la phrase est: "<< result << endl;
return 0;
}
Sortie:
Entrez une phrase: J'ai 10 pommes et 20 oranges.
La somme des entiers positifs dans la phrase est: 30
Explication:
Dans la fonction sumOfIntegersInString():
La fonction parcourt chaque mot de la phrase en utilisant un stringstream.
Pour chaque mot, elle vérifie si tous les caractères sont des chiffres à l'aide de la fonction isdigit().
Si un mot est constitué uniquement de chiffres, il est converti en entier avec stoi et ajouté à la somme.
Exercice 7:
Écrire un programme C++ qui permute deux variables sans utiliser une troisième variable.
Exemple:
Entrez la valeur de a: 1
Entrez la valeur de b: 2
Avant la permutation: a = 1, b = 2
Après la permutation: a = 2, b = 1
Solution:
#include <iostream>
using namespace std;
int main() {
int a, b;
// Lire les valeurs de a et b
cout << "Entrez la valeur de a: ";
cin >> a;
cout << "Entrez la valeur de b: ";
cin >> b;
// Afficher les valeurs initiales
cout <<"Avant la permutation: a = "<< a <<", b = "<< b << endl;
// Permutation sans utiliser de troisième variable
a = a + b; // a contient maintenant la somme de a et b
b = a - b; // b devient la valeur initiale de a
a = a - b; // a devient la valeur initiale de b
// Afficher les valeurs après la permutation
cout <<"Après la permutation: a = "<< a <<", b = "<< b << endl;
return 0;
}
Sortie:
Entrez la valeur de a: 1
Entrez la valeur de b: 2
Avant la permutation: a = 1, b = 2
Après la permutation: a = 2, b = 1
Explication:
En utilisant des opérations arithmétiques (addition et soustraction):
Étape 1: a = a + b rend a la somme de a et b.
Étape 2: b = a - b met dans b la valeur initiale de a.
Étape 3: a = a - b met dans a la valeur initiale de b.
Exercice 8:
Écrire un programme C++ pour calculer la somme de tous les nombres pairs et impairs dans un tableau.
Exemple:
Entrez 10 nombres:
1
2
3
4
5
6
7
8
9
0
La somme des nombres pairs est: 20
La somme des nombres impairs est: 25
Solution:
#include <iostream>
using namespace std;
int main() {
const int size = 10; // Taille du tableau
int numbers[size]; // Déclaration du tableau
int somPair = 0; // Somme des nombres pairs
int somImp = 0; // Somme des nombres impairs
// Lire les éléments du tableau
cout <<"Entrez "<< size <<" nombres: "<< endl;
for (int i = 0; i < size; i++) {
cin >> numbers[i];
}
// Calculer les sommes des nombres pairs et impairs
for (int i = 0; i < size; i++) {
if (numbers[i] % 2 == 0) {
// Ajouter à la somme des nombres pairs
somPair += numbers[i];
} else {
// Ajouter à la somme des nombres impairs
somImp += numbers[i];
}
}
// Afficher les résultats
cout <<"La somme des nombres pairs est: "<< somPair << endl;
cout <<"La somme des nombres impairs est: "<< somImp << endl;
return 0;
}
Sortie:
Entrez 10 nombres:
1
2
3
4
5
6
7
8
9
0
La somme des nombres pairs est: 20
La somme des nombres impairs est: 25
Explication:
Le programme déclare un tableau de taille fixe (size = 10) pour stocker les nombres. Il demande à l'utilisateur d'entrer 10 nombres. Le programme parcourt chaque nombre dans le tableau. S'il est pair (vérifié par numbers[i] % 2 == 0), il est ajouté à somPair. S'il est impair, il est ajouté à somImp. Après la boucle, le programme affiche la somme des nombres pairs et la somme des nombres impairs.
Exercice 9:
Écrire un programme C++ pour calculer le quotient et le reste.
Exemple:
Entrez le dividende: 17
Entrez le diviseur: 5
Le quotient de 17 divisé par 5 est: 3
Le reste de 17 divisé par 5 est: 2
Solution:
#include <iostream>
using namespace std;
int main() {
int dividend, divisor;
// Lire le dividende et le diviseur
cout << "Entrez le dividende: ";
cin >> dividend;
cout << "Entrez le diviseur: ";
cin >> divisor;
// Vérifier si le diviseur n'est pas zéro
if (divisor == 0) {
cout <<"Erreur: Division par zéro n'est pas autorisée."<< endl;
return 1; // Fin du programme si le diviseur est zéro
}
// Calculer le quotient et le reste
int quotient = dividend / divisor; // Division entière
int remainder = dividend % divisor; // Reste de la division
// Afficher le résultat
cout <<"Le quotient de "<< dividend <<" divisé par "<< divisor <<" est: "<< quotient << endl;
cout <<"Le reste de "<< dividend <<" divisé par "<< divisor <<" est: "<< remainder << endl;
return 0;
}
Sortie:
Entrez le dividende: 17
Entrez le diviseur: 5
Le quotient de 17 divisé par 5 est: 3
Le reste de 17 divisé par 5 est: 2
Explication:
Le programme demande à l'utilisateur d'entrer le dividende et le diviseur. Il vérifie si le diviseur est zéro pour éviter une erreur de division par zéro. Le quotient est calculé en utilisant la division entière (/). Le reste est calculé en utilisant l'opérateur de modulo (%). Enfin, le programme affiche le quotient et le reste.
Éditeur de code C++: Testez votre code en ligne!
QCM sur C++ – Partie 1QCM sur C++ avec des réponses pour la préparation des concours, des tests en ligne, examens et aux certifications. Ces questions et réponses sur C++…Lire plus