TD2C 2023

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 2

Université Cadi Ayyad Année universitaire : 2022 – 2023

ENSA de Marrakech

Langage C/C++
TD n°2.

Exercice 0:
1) Quelles différences il-y-t-il entre les deux constantes MAX1 et MAX2 définies de la façon suivante ?
– #define MAX1 100
– static const int MAX2 = 100
Essayer d’accéder à l’adresse (pointeur) de MAX1 (int *p1=&MAX1) et à l’adresse de MAX2
(int *p2=&MAX2). Que se passe-t-il ?
2) Tester la Macro et la fonction inline du cours et démontrer pourquoi on a un effet de bord pour la macro.

Exercice 1 :
Ecrire un programme qui permet la saisie d’un tableau d’entiers, l’affiche et le trie. Le tri sera fait de cette
façon :-Mettre le plus petit entier en première position du tableau. On opère par comparaison deux à deux
entre le premier élément du tableau et un élément d’indice i du tableau. On échange les deux éléments
lorsque ceux-ci ne sont pas dans un ordre correct.

Exercice 2: Plusieurs fonctions un même nom, bizarre bizarre!! Sur papier


Soient les déclarations (C++) suivantes :
int fct (int) ; // fonction I
int fct (float) ; // fonction II
void fct (int, float) ; // fonction III
void fct (float, int) ; // fonction IV
int n, p ; float x, y ; char c ; double z ;
Les appels suivants sont-ils corrects et, si oui, quelles seront les fonctions effectivement appelées et les
conversions éventuellement mises en place ?
a. fct (n) ;
b. fct (x) ;
c. fct (n, x) ;
d. fct (x, n) ;
e. fct (c) ;
f. fct (n, p) ;
g. fct (n, c) ;
h. fct (n, z) ;
i. fct (z, z) ;

Exercice 3: En ligne!!! Avantage C++


1. Ecrire un programme C avec une macro qui calcule le carré d'un nombre entier x?
2. Testez ce programme pour a=2; et calculez carre(a) et carre(a+3)? obtenez-vous le résultat
escompté?
3. Ecrire un programme C++ avec une fonction carre() qui calcule le carré d'un nombre entier ?Pour
pouvoir utiliser l'avantage des macros en C++ on utilise le mot clé inline devant la fonction carre (). cela fait
qu'à la compilation chaque fois que le compilateur rencontre un appel à la fonction carre() il le remplace par
le code de la dite fonction. Faites le test de la question 2). Avez-vous eu le même problème? Conclure.

Exercice4: Arguments par défaut


Recopiez et sauvegarder le programme suivant:
#include <iostream>
void fct(int, int = 15); // prototype
int main()
{
int n = 10, p = 20;
fct(n,p); // appel normal
fct(n); // appel avec un seul argument
system(''Pause'');
return 0;
}
void fct( int a, int b)
{
cout << "Argument 1 : " << a;
cout << "Argument 2 : " << b << endl;
}
conclure?

Remplacer le prototype par : void fct( int = 15, int); conclure?

EXERCICE 5 : votre première classe !


1) Ecrivez une classe Vecteur3D comportant :
– trois données membre de type double x,y,z (privées)
– deux fonctions membres d’affichage :
– void affiche() affichant le vecteur.
– void affiche(const char* chaine) affichant chaine avant l’affichage du vecteur.
– deux constructeurs à définir en dehors de la classe:
* l’un sans argument, initialisant chaque composante à 0.
* l’autre, avec trois arguments correspondant aux coordonnées du vecteur.
Modifiez ensuite le code pour que les constructeurs soit des fonctions en ligne (inline).
2) Rajouter les fonctions suivantes à la classe Vecteur3D :
* Des fonctions permettant d’accéder aux coordonnées d’un vecteur :
– int abscisse( ) pour x,
– int ordonnee( ) pour y et
– int cote( ) pour z.
* Des fonctions permettant de modifier les coordonnées d’un vecteur :
– void fixer_abscisse(int nouvelle_abscisse) pour x,
– void fixer_ordonnée(int nouvelle_ordonnée) pour y et
– void fixer_cote(int nouvelle_ordonnée) pour z.
* bool coincide(Vecteur3D v) qui renvoie true si v et l’objet courant ont les mêmes coordonnées, false sinon.

EXERCICE 6 :
Rajouter les fonctions suivantes à la classe Vecteur3D :
– double produit_scalaire(Vecteur3D v) qui calcule le produit scalaire de v avec l’objet courant.
– Vecteur3D somme(Vecteur3D v) qui calcule le vecteur somme de v avec l’objet courant.

EXERCICE 7: classe dynamique!


Écrivez une classe nommée pile_entier permettant de gérer une pile d’entiers. Ces derniers seront conservés
dans un tableau d’entiers alloué dynamiquement. La classe comportera les fonctions membres suivantes

– pile_entier (int n) : constructeur allouant dynamiquement un emplacement de n entiers,


– pile_entier () : constructeur allouant dynamiquement un emplacement de 20 entiers,
– pile_entier (pile_entier &pile const) : constructeur de copie créant une copie de la pile d’entier pile,
– ~pile_entier () : destructeur
– void empile (int p) : empile l’entier p sur la pile,
– int depile () : fournit la valeur de l’entier en haut de la pile et le supprime de la pile,
– int pleine () : renvoie 1 si la pile est pleine (nombre d’entiers dans la pile = taille du tableau) et 0 sinon,
– int vide () : renvoie 1 si la pile est vide et 0 sinon.

Vous aimerez peut-être aussi

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy