TPC N°2
TPC N°2
TPC N°2
Classe : L2IT
Date : 03/11/2023
Enseignant : M. LOYA
TP n°2 de C++
Le TP comporte huit pages
Objectif : Comprendre les extensions procédurales de C++ (entrées/sorties, nouveaux opérateurs, nouveaux types,
fonctions, …)
Exercice 1 : Utiliser la bibliothèque C++ iostream (cout et cin) pour gérer les entrées-sorties
Quelle est la sortie du code C++ suivant ?
#include <iostream>
int main(int argc, char const *argv[]) [ ] Bienvenue au cours de C++
{ [ ] Erreur lors de la compilation
cout << "Bienvenue au cours de C++"; [ ] Erreur d’exécution
return 0; [ ] Faute de segmentation
}
Exercice 2 : Utiliser la bibliothèque C++ iostream (cout et cin) pour gérer les entrées-sorties
Ecrire un programme C++ qui demande un nombre x et:
1. affiche le carré et la racine carré de x;
2. affiche le périmètre et l’aire du cercle de rayon x;
3. affiche la longueur de la diagonale d’un carré de côté x.
Exemple d’exécution :
Entrer un nombre x : 4
Le carre de 4 est: 16
La racine carre de 4 est: 2
Le perimetre du cercle de rayon 4 est: 25.1429
L'aire du cercle de rayon 4 est: 50.2857
La longueur de la diagonale d'un carre de cote 4 est: 5.65685
Indication : PI= 22/7
1
cout << uppercase << 63 << endl;
cout << "On repasse en base 10 pour afficher 63: ";
cout << dec << 63 << endl;
cout << "Avec le signe: ";
cout << showpos << 63 << endl;
cout << "On affiche un flottant sur 15 caractères minimum, ";
cout << "en remplissant les vides avec des *:";
cout << setfill(‘*’) << setw(15) << 3.151592 << endl;
cout << "On recommence avec un alignement à gauche";
cout << "sans le signe: ";
cout << left << noshowpos << setw(15) << 3.151592 << endl;
return 0;
}
[ ]1 [ ] 0 [ ]1 [ ] Erreur de compilation.
11 22 22
2
Exercice 7 : Utiliser des opérateurs new et delete
1° En C++, l’opérateur new permet de :
[ ] créer un objet alloué dynamiquement [ ] définir une nouvelle classe
[ ] définir un nouveau type alloué dynamiquement [ ] d’initialiser un nouveau type
3° Écrire le programme suivant, en ne faisant appel qu'aux nouvelles possibilités du langage C++ :
#include <stdio.h>
#include <malloc.h>
#define NbrValeurs 25
int main(){
float *Valeurs, Somme=0.0;
int i;
/*réservation d’un espace mémoire pour les valeurs*/
Valeurs = (float*)malloc(sizeof(float) * NbrValeurs);
for(i=0;i<NbrValeurs;i++)
{
printf("donner la moyenne N°%d\n",i);
scanf("%f",&Valeurs[i]);
Somme= Somme + Valeurs[i];
}
printf("La somme de ces %d réels=%f",NbrValeurs,Somme);
free(Valeurs) ;
return 0;
}
4° Lesquelles des instructions suivantes sont valables pour allouer de la mémoire dynamiquement pour un entier en C++ ?
[ ] int *ptr = new int(100); [ ] int *ptr; ptr=new int; *ptr=100; [ ] int *ptr=NULL; ptr=new int; *ptr=100;
[ ] Toutes les réponses sont vraies
Exercice 8
1° Quel type de base ne fait pas partie du standard C++ ?
[ ] bool [ ] int [ ] double [ ] real [ ] wchar_t
2° Lequel des types suivants n’est pas présent en C mais présent en C++ ?
[ ] void [ ] bool [ ] float [ ] int
2° Quel fichier d’en-tête est utilisé pour inclure les fonctions de string dans C++?
[ ] #include <string.cpp> [ ] #include <string.h> [ ] #include <string> [ ] #include <cstring
3
Exercice 11 : manipuler les chaînes de caractères
Ecrire un programme en C++ qui affiche la conjugaison au présent de l’indicatif d’un verbe du 1er groupe. On utilisera :
− Les tableaux dynamiques vector
− Les tableaux statiques array
On testera les trois manières de parcourir un tableau : Par indice -Par itérateur-Par élément
Déclarent le tableau t :
Allouent le tableau t :
Initialisent le tableau t :
bool contientNegatif(vector<int> t) {
(2) Si ce n’est déjà fait, réécrivez la fonction précédente en utilisant une boucle for each (parcours par les éléments) :
bool contientNegatif(vector<int> t) {
5
Exercice 17 : Comprendre les fonctions à paramètres à valeur par défaut
Quelle est la sortie du code C++ suivant?
#include<iostream>
using namespace std; [ ] 2
int fon(int a = 0, int b = 0, int c) [ ] 0
{ return (a + b + c); } [ ] Erreur de compilation.
int main() [ ] Aucune de ces réponses n’est vraie.
{ cout << fon(2);
return 0;
}
6
4) Ces fonctions sont d’un intérêt limité dans la mesure où elles ne fonctionnent que pour des variables de type int.
Programmer une version générique de …Permuter3(…). Vérifier que la fonction fonctionne correctement dans les
cas de figure suivants :
▪ des entiers (int),
▪ des caractères (char),
▪ des nombres réels (double),
Exercice 24
On veut écrire un programme pour aider à la gestion de la billetterie des différentes salles d’un complexe
cinématographique.
Chaque salle de projection dispose d’un certain nombre de places (nbPlaces). Le nombre de places maximum que peut
avoir une salle est CAPSAL= 200.
Les places dans une salle peuvent être vendues selon deux tarifs :
) Le tarif normal (pu) qui dépend du film projeté et de la qualité de la salle.
) Le tarif réduit (pour les familles nombreuses, chômeurs, étudiants, …) qui offre un taux de réduction (TAUXRED)
de 20% par rapport au tarif plein.
Une salle de projection est caractérisée, lors d’une séance, par les informations suivantes :
• Le titre du film projeté (film), chaîne de caractères de caractères ;
• Le nombre de places (nbPlaces) de la salle de projection ;
• Le tarif normal (pu) d’une place de la salle de projection ;
• Le nombre de places vendues au tarif normal (nbPlacesNormal) au cours de la séance ;
• Le nombre de places vendues au tarif réduit (nbPlacesReduit) au cours de la séance ;
On souhaite écrire la fonction principale assurant la gestion d’une salle de projection selon le menu suivant :
Votre choix :
Travail à faire
1°) Créer un projet C++, nommé "sallecinema", à enregistrer dans le dossier " sallecinema" à créer.
2°) Enregistrer le fichier principal sous le nom "main.cpp"
3°) Ajouter au projet le fichier d'entête "salle.h". Dans le fichier :
a) Définir le taux de réduction (TAUXRED) des places, fixé 0.20
b) Définir la capacité maximale (CAPSAL) des salles du complexe, fixée à 200 places
c) Proposer une structure de données en C++ pour représenter les salles de projection.
d) Déclarer dans la structure les fonctions suivantes :
affichSalle() qui prend en paramètre la référence constante d’une salle et affiche les propriétés de la salle.
7
initSalle() qui prend en paramètre la référence d’une salle, puis renseigne (ie lit), le titre du film joué, le nombre
de places de la salle(compris 1 et CAPSAL), le tarif normal d’une place et met à zéro le nombre de places vendues
au tarif normal, le nombre de vendues au tarif réduit et le chiffre d’affaires de la salle.
nbPlacesDisponibles() qui prend en paramètre la référence constante d’une salle de projection et renvoie le
nombre de places disponibles dans la salle.
vendrePlaces() qui, à partir de la référence d’une salle, du nombre de places à acheter et du mode de tarification
(réduction ou non, donc de type bool ; généralement, il n’y a pas de réduction ):
▪ vérifie qu’il y a des places disponibles ;
▪ S’il y a de la place :
• met à jour, en fonction du mode de tarification, le nombre de places vendues à tarif normal ou le
nombre de places vendues à tarif réduit ;
• détermine et afficher le montant de la vente ;
▪ S’il n’y a pas de place, la vente n’est pas effectuée.
tauxRempl() qui prend la référence constante d’une salle et retourne son taux de remplissage sous de pourcentage.
chiffreAffaire() qui prend la référence constante d’une salle et retourne le chiffre d’affaires produit par la salle
au cours de cette séance.
e) Déclarer la fonction menu() permettant le menu et de retourner le choix de l’utilisateur
4°) Ajouter au projet le fichier de définition salle.cpp". Y inclure le fichier "salle.h" et définir les fonctions ci-dessus.
5°) Ouvrir le fichier principal "main.cpp". Y inclure le fichier "salle.h" et écrire la fonction principale permettant d’itérer
sur le menu ci-dessus en appelant convenablement les fonctions définies ci-dessus
Exercice 25
Quel est la sortie du code suivant en C++ ?
#include <iostream>
using namespace std; [ ] abcd [ ] Avertissement
int main() [ ] Erreur : la chaîne de caractères dans le tableau est trop longue.
{ char tab[4] = "abcd"; [ ] Aucune de ces réponses n’est vraie.
cout << tab;
return 0;
}