Vous êtes sur la page 1sur 11

TP1 C++ : variables et structures de base en C++

2.2 Variables et types


2.2.1 Déclaration et initialisation de variables
1.

a) On déclare i,j et k mais cependant uniquement k est initialisé à 0. Les variables i et j ne l’étant pas,
celles-ci prennent la plus petite valeur que peut contenir un int. (0xCCCCCCCC).

Nom Valeur Type


i -858993460 int
j -858993460 int
k 0 int

b) On déclare m,n,o et on initialise n=2 et o=5. La variable m n’étant pas initialisée, celle-ci prend la plus
petite valeur que peut contenir un short.
Nom Valeur Type
m -13108 short
n 2 short
o 5 short

c) On déclare une variable de type long puis on affecte 4 à cette variable.


d) Le mot clé unsigned signifie non-signé, c’est-à-dire que ce mot clé permet de déclarer une variable
qui est uniquement supérieure ou égale à 0. Les lignes ne marchent pas puisque que l’on essaye
d’affecter des entiers négatifs dans des valeurs non signées.

2.

a) On saisit la valeur l=20. Nom Valeur Type


l 20 long
n 20 int
s 20 short
t 20 unsigned short

b) Si on saisit une valeur négative on a une erreur puisque à la ligne 21, u


est déclaré comme un entier non signé.

3.
int main()
{
unsigned short x = 50000, u = 20000;
x = x + u;
return 0;
}

Après exécution :

Nom Valeur Type


x 4464 unsigned short

Un type short est codé sur 2 octets (16bits) et peut obtenir des valeurs allant de -32768 à 32767. Cependant,
un short non signé a une taille allant de 0 à 65535. On dépasse la capacité de stockage lors de la somme de u
et x et x prend la différence de sa capacité maximale à 70000.

4.
using namespace std;

int main()
{
int x = 1;
int y = 3;
int z;

z = x / y;
cout << "z : " << z << endl;
return 0;
}
Après exécution, z vaut 0 car la division de deux entiers retourne uniquement la partie entière de cette
division (ici 0 de 0,3333).

2.2.2 Opérateurs de manipulation de bits sur les entiers

1) Le code q = 1 << 15 permet de faire de la manipulation bit à bit. On décale de 15 bits vers la gauche la
valeur de 1. On a ainsi 0x0000000000000001 (on a bien 15 zéros).

2) Avec b=n&q, b est affecté de l’opération ET bit à bit entre n et q.

3) Le code q = q << 1 permet d’affecter à q le décalage de 1 bit vers la droite de q.

2.2.3 Types réels

1) Le type float contient des valeurs réelles codées sur 32bits et le type double contient des valeurs
réelles codées sur 64bits

2) RAYON.CPP

Ce programme calcule le périmètre et l’aire d’un cercle avec un rayon donné par l’utilisateur. Puis le
programme affecte le rayon r de la division de r par une valeur donnée par l’utilisateur d. Il réalise
ensuite la racine carrée du nombre obtenue et l’affiche.
3) On effectue une division réelle entre deux réelles et on affecte le résultat de cette division dans r. On
obtient un résultat réel contrairement à une division d’entier qui nous la partie entière..
4) Sqrt(r) permet de faire la racine carrée d’un nombre. On utilise cette commande avec la libraire de
cmath.

2.2.4 Conversions entre types


1.

a) Faisons le produit de p=3 et q=4:

Nom Valeur Type


p 3 int
s 12 short
x 12.0000000 float
z 12.000000000000000 double
Les variables x et z stockent le produit de p et q en valeurs réelles respectivement sur 32 et 64bits. Les
variables p et s stockent le produit de p et q en entiers respectivement sur 32 et 16bits.
b) On peut « caster » le type de x et z en entier :
x = p * q;
(short)x;
z = p * q;
(short)z;
On obtient le même résultat en « castant » avec des shorts.

c) On caste p et q en double pour afficher le résultat de la division réelle sous forme réelle :
n = p / q;
s = p / q;
x = (double)p / (double)q;
z = (double)p / (double)q;

Résultat :

Nom Valeur Type


p 1 int
s 0 short
x 0.333333343 float
z 0.33333334326744080 double

2.

a) Le dernier affichage montre que les caractères peuvent aussi être « codées » sous forme de valeur
décimale. La correspondance entre les entiers et les caractères est écrite dans table ASCII. Le ‘A’ est 41 en
décimal.

b) c = (char)(c + 1); permet d’ajouter +1 à la décimale de ‘A’ et de « caster » le résultat sous forme de
caractère.

c = 110; permet d’afficher le caractère correspondant à la décimale 110 (soit n)


i = c; on affecte la valeur de c dans i. Ainsi les caractères peuvent être codés soit avec un caractère (par
exemple ‘A’) ou un entier allant de 0 à 127.

c) On obtient toujours B puisque l’on affiche le caractère correspondant à la valeur 42.

3.
#include <iostream>
using namespace std;

int main()
{
int note1 = 0, note2 = 0, note3 = 0;
float moyenne=0;

cout << "Entrez vos trois notes successivements :" << endl;
cin >> note1 >> note2 >> note3;

moyenne = (((float)note1 + (float)note2 + (float)note3) / 3);


cout << "La moyenne est de " << moyenne << endl;
return 0;
}
Pour avoir une moyenne réelle on « cast » les types de note1,note2,note3.

Remarque :

- on peut simplifier la conversion de moyenne en utilisant float comme une fonction : moyenne =
(float(note1 + note2 + note3)) / 3;

- On peut aussi directement diviser par 3.0 : moyenne = (note1 + note2 + note3) / 3.0;

2.3 Structure de choix


2.3.1 Découverte de la structure if else

1) Un bloc d’instruction est délimité entre des accolades {} et contient un ensemble d’instructions. On
l’utilise généralement après des conditions (if, else), des boucles (for,while,dowhile), des fonctions,
des classes …
2) Si l’on supprime les accolades du if, seule la première ligne est exécutée. S’il y a plusieurs lignes, il y a
une erreur de syntaxe. Les garder rend le code plus lisible et évite de faire des erreurs.
3) De même que pour le if, on peut enlever les accolades uniquement pour une ligne. Les garder rend le
code plus lisible et évite de faire des erreurs.
4) Voir 5)
5)
#include <iostream>
using namespace std;

int main()
{
float note;
cout<<"Entrez votre moyenne générale :";
cin>>note;
if (note<6)
{
cout<<"Vous n'avez pas votre place ici !"<<endl;
cout << " Vous devez vous réorienter " << endl;
}
else
{
if (note<12)
cout<<"Vous êtes admis à redoubler"<<endl;
else
{
cout << "Vous êtes admis en année supérieure" << endl;
cout << " Félicitations " << endl;
}
}
return 0;
}

6)
#include <iostream>
using namespace std;

int main()
{
float note;
cout<<"Entrez votre moyenne générale :";
cin>>note;
if (note<6)
{
cout<<"Vous n'avez pas votre place ici !"<<endl;
cout << " Vous devez vous réorienter " << endl;
}

if ((note < 12) && (note>=6))


{
cout << "Vous êtes admis à redoubler" << endl;
}

if(note>=12)
{
cout << "Vous êtes admis en année supérieure" << endl;
cout << " Félicitations " << endl;
}
return 0;
}

7)
#include <iostream>
using namespace std;

int main()
{
float note;
cout << "Entrez votre moyenne générale :";
cin >> note;
if (note<6)
{
cout << "Vous n'avez pas votre place ici !" << endl;
}
else
{
if ((note<12) && (note>10))
cout << "Vous pouvez passer une epreuve de rattrapage" <<
endl;
else
{
cout << "Vous êtes admis en année supérieure" << endl;
}
}
return 0;
}

2.3.2 Écriture de programmes


1) Valeur absolue
Nous devons inverser une valeur strictement inférieure à 0.
#include <iostream>
using namespace std;

int main()
{
int nombre;
cout << "Entrez votre nombre :";
cin >> nombre;

if (nombre<0)
nombre = -nombre;

cout << "La valeur abs de votre nombre est :"<<nombre<<endl;


return 0;
}

2)
#include <iostream>
using namespace std;

int main()
{
float nb1,nb2;
char op;

cout << "Entrez votre premier nombre :";


cin >> nb1;
cout << "Entrez votre deuxieme nombre :";
cin >> nb2;
cout << "Entrez le symbole de l'operation:";
cin >> op;

if (op=='+')
cout << "Le resultat est :"<<nb1+nb2;
if (op == '-')
cout << "Le resultat est :" << nb1 - nb2;
if (op == '*')
cout << "Le resultat est :" << nb1 * nb2;
if (op == '/')
{
if (nb2 == 0)
cout << "Division par 0 impossible";
else
cout << "Le resultat est :" << nb1 / nb2;
}
return 0;
}

1.4 Structures de boucles


1.4.1 Table de multiplications
#include <iostream>
using namespace std;

int main()
{
int nb_user;
cout << "Entrez votre nombre compris entre 0 et 9:";
cin >> nb_user;

if ((nb_user >= 1) && (nb_user <= 9))


{
for (int i = 1; i < 11; i++)
{
cout << nb_user << "*"<<i<<"="<<i * nb_user << endl;
}
}
else
cout << "Votre nombre n'est pas entre 0 et 9" << endl;
return 0;
}

1.4.2 Fonction puissance


1.Algorithme

Début
nb_user,puissance; i : entiers
resultat : 1 reel

Ecrire «Entrez un nombre :"


Lire nb_user
Ecrire "Entrez la puissance a laquelle vous voulez l'elever :"
cin >> puissance;

i <-- 0;
Tantque (i<absolue(puissance) ET puissance != 0) //utilisation de abs
resultat <-- nb_user * resultat
i<-- i+1
Fin Tant que

Si (puissance == 0) Alors
resultat <-- 1
Sinon
Si puissance<0 alors
resultat <-- (1 / resultat)
Fin Si
Fin SI

Ecrire (nb_user, " a la puissance " , puissance , " est " , resultat)
Fin

2. TESTS

Pour nb_user = 2 et puissance=2 : 2 a la puissance 2 est 4

Pour nb_user = 2 et puissance=-2 : 2 a la puissance -2 est 0,25

Pour nb_user = -2 et puissance=2 : -2 a la puissance 2 est 4

Pour nb_user = -2 et puissance=-2 : -2 a la puissance -2 est -0,25

Pour nb_user = 0 et puissance=0 : 0 a la puissance 0 est 1

Pour nb_user = -2 et puissance=3 : -2 a la puissance 3 est -8

3.
Fichier .hpp avec les déclarations
float puissance_for(int nb_user, int puissance);
float puissance_while(int nb_user, int puissance);

float puissance_dowhile(int nb_user, int puissance);

Fichier .cpp avec les fonctions puissances for et while


#include"functions.hpp"

float puissance_for(int nb_user, int puissance)


{
float resultat = 1; //on initialise à 1

if (puissance<0) {
for (int i = 0; i < -puissance; i++) {
resultat = nb_user * resultat;
}
resultat = (1 / resultat);
}
else {
for (int i = 0; i < (puissance); i++) {
resultat = nb_user * resultat;
}
}

return resultat;
}

float puissance_while(int nb_user, int puissance)


{
float resultat = 1; //on initialise à 1 car puissance 0 donne 1

if (puissance<0) {
int i = 0;
while(i < -puissance)
{
resultat = nb_user * resultat;
i++;
}
resultat = (1 / resultat);
}
else {
int i = 0;
while (i < puissance)
{
resultat = nb_user * resultat;
i++;
}
resultat = (1 / resultat);
}
return resultat;
}

Main
#include <iostream>

using namespace std;

int main()
{
int nb_user;
int puissance;
float resultat = 1; //on initialise à 1
cout << "Entrez un nombre :";
cin >> nb_user;
cout << "Entrez la puissance a laquelle vous voulez l'elever :";
cin >> puissance;

resultat = puissance_for(nb_user, puissance);

cout << nb_user << " a la puissance " << puissance << " est " << resultat << endl;
system("pause");
return 0;
}

3) Tests :

Nom Valeur Type Nom Valeur Type Nom Valeur Type


nb_user 2 int nb_user 2 int nb_user 2 int
puissance 2 int puissance -2 int puissance 0 int
resultat 4.00000000 float resultat 0.250000000 float resultat 1.00000000 float

Nom Valeur Type


Nom Valeur Type Nom Valeur Type
nb_user -2 int
nb_user -2 int nb_user -2 int
puissance -3 int
puissance 2 int puissance 3 int
resultat -0.125000000 float
resultat 4.00000000 float resultat -8.00000000 float

2.5 ALLER PLUS LOIN ...


2.5.1 Variables et types
Ampérage :

#include <iostream>
#include"functions.hpp"
#include<math.h>

using namespace std;

int main()
{
double I, Q, n, t=1;
const double qe = -1.6e-19;

cout << "Entrez l'intensité du courant I : ";


cin >> I;

Q = I*t;
n = Q/abs(qe);

cout << "La quantité Q pour t=1s ests " << Q << endl;
cout << "La quantité n pour " << Q << " est "<< n <<endl;
system("pause");
return 0;
}

Traduction d’algorithmes

#include <iostream>
#include"functions.hpp"
#include<cmath>

using namespace std;

int main()
{
float x, y, r, theta;
unsigned int c;

do
{
cout << "Voulez-vous convertir de cartesien vers polaire (1) ou polaire vers
cartésien (2) ? (0) pour quitter:";
cin >> c;

if (c == 1) {
cout << "x :"<<endl;
cin >> x;
cout << "y :"<<endl;
cin >> y;

r = sqrt((x*x) + sqrt(y*y));
theta = acos(x / r);

cout << "r :" << r <<endl;


cout << "theta :" << theta << endl;
}
else
{
cout << "r :" << endl;
cin >> r;
cout << "theta :" << endl;
cin >> theta;

x = r*cos(theta);
y = r*sin(theta);

cout << "x :" << x << endl;


cout << "y :" << y << endl;
}
} while (c!=0);
return 0;
}

using namespace std;

int main()
{
char a=0;

cout << "Table ASSCII :" << endl;


for (int i = 32; i < 128; i++)
{
a = i;
cout << "Pour "<<i<<" : "<<(char)i << endl;
}
system("pause");
}

Vous aimerez peut-être aussi