Académique Documents
Professionnel Documents
Culture Documents
mation
1.1 Informatique
– Définition de l’informatique :
– Ordinateur :
– quelles sont les données d’entrée à partir desquelles faire les calculs
– quelles sont les données résultat voulues en sortie
– résoudre le problème : savoir quels calculs faire pour obtenir les don-
nées résultat à partir des données d’entrée
– langage plus proche du langage humain mais avec une syntaxe précise
– transformé en langage machine grâce à un compilateur
3. Une fois le programme écrit (dans un fichier .cpp), il faut le compiler puis
l’exécuter.
– valeur littérale
– valeur stockée dans une variable
– valeur résultat d’un calcul : expression
– opérateurs
– fonctions
Opérateur C++
multiplication expr * expr
division expr / expr
reste euclidien (modulo) expr % expr
addition expr + expr
soustraction expr - expr
moins unaire - expr
– Les opérateurs dans une même case ont la même priorité, les cases sont
classés par ordre de priorité décroissant : a+b*c signifie a+(b*c)
– Ces opérateurs sont associatifs à gauche : a+b+c signifie (a+b)+c
– Des parenthèses peuvent être utilisées pour forcer l’ordre d’évaluation
!! La division entre deux entiers renvoie le quotient entier de la division eu-
clidienne : 23 / 3 → 7, et 23 % 3 → 2
instruction1 ;
instruction2 ;
...
– garder en mémoire une valeur que l’on veut utiliser plusieurs fois
– calculer une valeur en plusieurs étapes (en permettant de garder en
mémoire le résultat de l’étape précédente)
– stocker en mémoire les valeurs rentrées par l’utilisateur
– découper un calcul compliqué
– exemple :
variable = valeur ;
2 ← 1
1. la valeur (une expression) est calculée
2. le résultat est rangé dans la variable
!! ne pas lire la valeur d’une variable non initialisée (c.-à-d. dans laquelle on
n’a pas mis de valeur)
double x = 10.2; int val1 = 10;
double y = -1.25; int val2;
double d; val2 = val1;
d = sqrt(x*x+y*y); val1 = -10;
val2 = val2+1;
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
cout<<"cos(Pi) = "<<cos(Pi)<<endl;
Pi = 6.14; //Erreur : interdit
cout<<"sin(Pi) = "<<sin(Pi)<<endl;
}
– cin>>variable;
– la plus vieille valeur de la mémoire de cin est rangée dans la variable
puis enlevée de cin
– s’il n’y a pas de valeur, le programme attend que l’utilisateur en rentre
une
int n;
cout<<"entrez la dimension : "
cin>>n;
double x,y;
cout<<"entrez x et y : ";
cin>>x>>y;
cout<<"la norme L"<<n<<" vaut : ";
cout<<pow(pow(x,n)+pow(y,n),1.0/n)<<endl;
– déterminer les actions et les calculs à faire pour obtenir les données
résultats à partir des données de départ
→ algorithme (dans langage algorithmique)
– Traduction en C++
int main()
{
//lire le prix HT et le taux de la taxe
double prixHT;
double tauxTaxe;
cout<<"entrez le prix HT et le taux de la taxe : ";
cin>>prixHT>>tauxTaxe;
//calculer la taxe, le prix TTC et les afficher
double taxe = prixHT * tauxTaxe;
double prixTTC = prixHT + taxe;
cout<<"Avec un prix HT de "<<prixHT;
cout<<" et un taux de taxe de "<<tauxTaxe<<"\n";
cout<<"La taxe vaut "<<taxe;
cout<<" et le prix TTC vaut "<<prixTTC<<endl;
}
– des comparaisons
– des opérations logiques
== a == b a=b égal à
!= a != b a 6= b différent de
< a < b a<b strictement inférieur à
<= a <= b a≤b inférieur ou égal à
> a > b a>b strictement supérieur à
>= a >= b a≥b supérieur ou égal à
a b non a a et b a ou b
Vrai Vrai Faux Vrai Vrai
Vrai Faux Faux Vrai
Faux Vrai Vrai Faux Vrai
Faux Faux Faux Faux
évaluation en court-circuit
a b a et b a ou b
Vrai Vrai a b a
Vrai Faux a b a
Faux Vrai a a b
Faux Faux a a b
[vrai]
condition
si condition
alors instructions
si vrai [faux]
instructions si condition vraie
if (condition)
{
//instructions si condition vraie
}
int main()
{
int x;
cout<<"entrez une valeur : ";
cin>>x;
if (x<0)
{
cout<<"x est négatif"<<"\n";
x = -x;
cout<<"et je l’ai rendu positif"<<"\n";
}
cout<<"maintenant x="<<x<<endl;
}
si condition condition
[vrai] [faux]
alors
instructions si condition vraie instructions instructions
si vrai si faux
sinon
instructions si condition fausse
if (condition)
{
//instructions si condition vraie
}
else
{
//instructions si condition fausse
}
int main()
{
int x;
cout<<"entrez une valeur : ";
cin>>x;
if (x>=0)
{
cout<<"x est positif"<<endl;
}
else
{
cout<<"x est négatif"<<endl;
}
}
//!!! Maladroit
if (x<0)
{ cout<<"x est négatif"<<endl; }
if (x>=0 && x<10)
{ cout<<"x est entre 0 et 10"<<endl; }
if (x>=10)
{ cout<<"x est supérieur à 10"<<endl; }
// Correct
if (x<0)
{
cout<<"x est négatif"<<endl;
}
else //on sait que x>=0
{
if (x<10)
{
cout<<"x est entre 0 et 10"<<endl;
}
else
{
cout<<"x est supérieur à 10"<<endl;
}
}
if (x<0)
{
cout<<"x est négatif"<<endl;
}
else if (x<10)
{
cout<<"x est entre 0 et 10"<<endl;
}
else
{
cout<<"x est supérieur à 10"<<endl;
}
bool estUnGarcon;
char reponse;
cout<<"est-vous un (g)arcon ou une (f)ille : ";
cin>>reponse;
if (reponse==’g’)
{
cout<<"vous êtes un garcon"<<endl;
estUnGarcon = true;
}
else
{
cout<<"vous êtes une fille"<<endl;
estUnGarcon = false;
}
int n;
cout<<"nombre d’affichages : ";
cin>>n;
for (int i=1 ; i<=n ; i++)
{
cout<<"coucou "<<i<<" fois"<<endl;
}
– saisir la valeur
– tant que la valeur est négative faire
saisir la valeur
– Soit en C++ :
– schéma de Syracuse :
int n; ...
while (n>1)
{
if (n%2==1) //n impair
{
n = 3*n+1;
}
else //n pair
{
n = n/2;
}
}
– Plutôt que de taper une tonne de code compliqué pour faire quelque chose
de compliqué :
double x1,y1,x2,y2,x3,y3;
cout<<"premier sommet : "; cin>>x1>>y1;
cout<<"deuxième sommet : "; cin>>x2>>y2;
cout<<"troisième sommet : "; cin>>x3>>y3;
double longueur12 = sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
double longueur13 = sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));
double longueur23 = sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
if (longueur12==longueur13 && longueur12==longueur23)
{
cout<<"le triangle est équilatéral"<<endl;
}
else
{
cout<<"le triangle n’est pas équilatéral"<<endl;
}
– fonction distance
renvoie un réel
paramètres : x1, y1, x2, y2 : réels, par valeur, coordonnées de deux
points
p
l = (x2 − x1)2 + (y2 − y1)2
renvoyer l
– Soit en C++
– Alors :
double x1,y1,x2,y2,x3,y3;
cout<<"premier sommet : "; cin>>x1>>y1;
cout<<"deuxième sommet : "; cin>>x2>>y2;
cout<<"troisième sommet : "; cin>>x3>>y3;
double longueur12 = distance(x1,y1,x2,y2);
double longueur13 = distance(x1,y1,x3,y3);
double longueur23 = distance(x2,y2,x3,y3);
if (longueur12==longueur13 && longueur12==longueur23)
{
cout<<"le triangle est équilatéral"<<endl;
}
else
{
cout<<"le triangle n’est pas équilatéral"<<endl;
}
– en C++
double xt1,yt1,xt2,yt2,xt3,yt3;
cout<<"premier sommet : "; cin>>xt1>>yt1;
cout<<"deuxième sommet : "; cin>>xt2>>yt2;
cout<<"troisième sommet : "; cin>>xt3>>yt3;
if (triangleEstEquilateral(xt1,yt1,xt2,yt2,xt3,yt3))
{
cout<<"le triangle est équilatéral"<<endl;
}
else
{
cout<<"le triangle n’est pas équilatéral"<<endl;
}
– procédure afficherPersonne
– paramètres : le nom nom de la personne, chaîne de caractères
et son genre genre, caractère (’f’ pour femme, ’h’ pour homme)
si genre=’f’ afficher Mme sinon afficher M.
afficher nom
– Soit en C++
int main()
{
lettreReduction("Dupont",’f’,50);
cout<<endl;
lettreReduction("Dupond",’h’,25);
cout<<endl;
}
int main()
{
int valeurtest = 3;
cout<<valeurtest<<endl; //affiche 3
reinitialiserValeur(valeurtest);
cout<<valeurtest<<endl; //Surprise !!! affiche 3
}
int main()
{
int valeurtest = 3;
cout<<valeurtest<<endl; //affiche 3
reinitialiserValeur(valeurtest);
cout<<valeurtest<<endl; //OK affiche -1
}
– En général : plutôt faire une fonction qui renvoie une valeur qu’une procé-
dure qui modifie un paramètre
– Dans l’exemple suivant les fonctions et procédures sont écrites dans l’ordre
algorithmique, les mettre par ordre d’utilisation dans le fichier C++
variable v1 = f (v0)
variable v2 = f (v1)
...
variable vn = f (vn−1)
initialiser v à v0
pour i variant de 1 à n faire
– valeur initiale : p0 = x0 = 1
– mise à jour : xi = xi−1 × x, soit pi = pi−1 × x
– valeurs initiales :
– p0 = x0 = 1
– SommeP0 = p0
– mises à jour :
– pi = pi−1 × x
– SommePi = SommePi−1 + pi
initialiser v à v0
tant que v ne vérifie pas C faire
– x0 = racine entière de x
1 a
– xn = (xn−1 + )
2 xn−1
void testESPoint()
{
double xtest,ytest;
cout<<"entrez un point : ";
lirePoint(xtest,ytest);
cout<<"le point entré est : ";
afficherPoint(xtest,ytest);
cout<<endl;
}
int main()
{
testESPoint();
}
– par exemple :
struct point
{
double x,y;
};
point p;
cout<<"entrez les coordonnées du point : ";
cin>>p.x>>p.y;
cout<<"vous avez entré x="<<p.x<<" y="<<p.y<<endl;
x 1.1 x -2.1
p1 p2
y -2.2 y 3.1
point p1,p2;
cin>>p1.x>>p1.y; //cin>>p1 : erreur
p2 = p1;
void testESPoint2()
{
point ptest;
cout<<"entrez un point : ";
lirePoint(ptest);
cout<<"le point entre est : ";
afficherPoint(ptest);
cout<<endl;
}
struct personne {
string nom;
int age;
double poids;
};
– afficher mi pour i = 1 à n
n
X mi
– calculer la moyenne : m̄ =
1
n
– Soit en C++ :
variables séparées t5 t1
t3
rangées n'importe où
t2 t4
tableau = variables t
rangées et numérotées
t[0] t[1] t[2] t[3] t[4]
→ on peut écrire des algorithmes avec ti où i est un numéro que l’on peut
faire varier
– la taille d’un tableau est son nombre de cases
void programme()
{
mesures m;
int n;
cout<<"nombre de mesures : ";
cin>>n;
while (n>NBMESURESMAX)
{
cout<<"nombre de mesures : ";
cin>>n;
}
– const mesure& m
– mesure& m
– Remarque : le & est facultatif si on n’utilise pas array (on perd alors
l’information sur la taille maximale du tableau)
void programme()
{
mesures mes;
int n;
saisirMesures(mes,n);
afficherMesures(mes,n);
cout<<"moyenne : "<<moyenne(mes,n)<<endl;
}
array<int,30> t;
print(t);
int t[30];
print(t);
struct mesures
{
tableauMesures m;
int n;
};
void programme()
{
mesures mes;
saisirMesures(mes)
afficherMesures(mes)
cout<<"la moyenne des mesures est : "<<moyenne(mes)<<endl;
}
– afficher mi pour i = 1 à n
n
X mi
– calculer la moyenne : m̄ =
1
n
– Soit en C++ :
variables séparées t5 t1
t3
rangées n'importe où
t2 t4
tableau = variables t
rangées et numérotées
t[0] t[1] t[2] t[3] t[4]
→ on peut écrire des algorithmes avec ti où i est un numéro que l’on peut
faire varier
– la taille d’un tableau est son nombre de cases
– bibliothèque <vector>
– type vector
– Les cases valent 0 par défaut, pour qu’elles valent une valeur :
mesures m(n, valeur);
#include<iostream>
#include<vector>
using namespace std;
void programme()
{
int n;
cout<<"nombre de mesures : ";
cin>>n;
mesures m(n);
– const mesure& m
– mesure& m
mesures mesuresSaisies()
{
int n;
cout<<"nombre de mesures : ";
cin>>n;
mesures m(n);
cout<<"rentrez les mesures : "<<endl;
for (int i=0; i<m.size(); i++)
{
cout<<"mesure "<<i<<" : ";
cin>>m[i];
}
return m;
}
void programme()
{
mesures mes = mesuresSaisies();
afficherMesures(mes);
cout<<"moyenne : "<<moyenne(mes)<<endl;
}
vector<int> t;
print(t);
– si e = valeur
– present = vrai
– si ei = valeur
– present = vrai
– i = position suivante
– si ei = valeur
– present = vrai
– sinon
– i = position suivante
– i = position suivante
– si i est dans l’ensemble : la boucle s’est arrêtée parce qu’on est sur un
élément ei = valeur → la valeur est présente
– si i est hors de l’ensemble : la boucle a parcouru tous les éléments
qui ne valaient pas valeur et s’est arrêtée parce qu’on est sorti de l’en-
semble
– sinon
– en C++ :
using tableau = array<array<type_element,TMAX2>,TMAX1>;
!! la deuxième taille est donnée avant la première
– à l’ancienne :
using tableau = type_element[TMAX1][TMAX2];
– à l’ancienne façon C :
typedef type_element tableau[TMAX1][TMAX2];
– On déclare des variables, on passe des paramètres comme pour les ta-
bleaux à une dimension
void testES()
{
coefficients c;
int nbLignes, nbColonnes;
lireMatrice(c, nbLignes, nbColonnes);
afficherMatrice(c, nbLignes, nbColonnes);
}
void lireMatrice(matrice& m)
{
cout<<"nombre de lignes et de colonnes : ";
cin>>m.nbLignes>>m.nbColonnes;
for (int i=0; i<m.nbLignes; i++)
{
cout<<"coefficients ligne "<<i<<" : ";
for (int j=0; j<m.nbColonnes; j++)
{
cin>>m.c[i][j];
}
}
}
void testES()
{
matrice m;
lireMatrice(m);
afficherMatrice(m);
}
int t[30][20];
print(t);
t[indice1][indice2]
– où 0≤indice1<taille1 et 0≤indice2<taille2
– C’est le problème qui décide à quoi correspond chaque dimension et le
sens de numérotation
– taille1 = m.size()
– taille2 = m[0].size()
matrice matriceLue()
{
cout<<"nombre de lignes et de colonnes : ";
cin>>nbLignes>>nbColonnes;
matrice m(nbLignes, vector<double>(nbColonnes));
for (int i=0; i<nbLignes; i++)
{
cout<<"coefficients ligne "<<i<<" : ";
for (int j=0; j<nbColonnes; j++)
{
cin>>m[i][j];
}
}
matrice m;
}
void testES()
{
matrice m = matriceLue();
afficherMatrice(m);
}
t.resize(taille1);
void afficherTableMult(int n)
{
cout<<table de multiplication de "<<n<<" : "<<endl;
for (int i=1; i<=12 ; i++)
{
cout<<i<<" * "<<n<<" = "<<i*n<<endl;
}
}
– On veut l’écrire dans un fichier pour pouvoir la lire plus tard, l’imprimer
...
– Pour utiliser les fichiers dans un programme : bibliothèque <fstream>
void test()
{
string nomfic;
cout<<"nom du fichier où lire les valeurs : ";
cin>>nomfic;
ifstream f; //déclaration variable fichier
f.open(nomfic); //ouverture du fichier
int nbmoyennes;
f>>nbmoyennes;
double moyenne;
for (int i=1; i<=nbmoyennes; i++)
{
lireEtCalculerMoyenne(f,moyenne);
cout<<"moyenne "<<i<<" = "<<moyenne<<endl;
}
f.close(); fermeture du fichier
}
void ecrirePointsHasard(int n,
double gauche, double droit,
double bas, double haut,
ofstream& f)
{
point p;
f<<n<<’ ’;
for (int i=1; i<=n; i++)
{
p.x = aleat(gauche, droit);
p.y = aleat(bas,haut);
ecrirePoint(p,f);
f<<’ ’;
}
f<<endl;
}
listePoints pointsLus(ifstream& f) {
int n; f>>n;
listePoints lp(n);
for (int i=0; i<n; i++)
{ lirePoint(lp[i],f); }
return lp;
}