python

Le langage C++

C++ a été créé en 1983 par Bjarne Stroustrup. Il est basé sur le langage C. La version C++20 est sortie en décembre 2020.

C++ est un langage de programmation compilé, portable, de moyen niveau et reconnu pour sa rapidité d'exécution. Il est sensible à la casse. Il a un typage statique nomminatif. Il est multi-paradigme et connu pour la programmation orientée objet.

C++ est populaire et a de nombreuses bibliothèques. Il est par exemple utilisé pour le développement de logiciels, de jeux, de systèmes embarqués.

Commencer

Prérequis avant de commencer

Dans ce chapitre, nous allons voir comment installer l'IDE, tester notre première programme et écrire des commentaires.

Environnement

Mon environnement de développement

IDE Code::Blocks sous Windows 10
Lien pour installer Code::Blocks (Attention, choisir codeblocks-xxxmingw-setup.exe)
Pour créer un projet: File\New\Project\Console application\C++ nom du projet puis options par défaut → main.cpp

Mon premier programme

Hello world

La directive #include <iostream> permet de charger la bibliothèque standard iostream pour lire et écrire des messages à l'écran.
La directive #include <string> permet de charger la bibliothèque standard iostream pour lire et écrire des messages à l'écran.
La commande namespace std permet de définir l'espace de nom standard.
La fonction int main() { mon_code } définit la fonction principale du programme.
L'objet cout permet d'afficher un message à l'écran.
Le manipulateur endl effectue un retour à la ligne.
L'instruction return 0 indique que le code s'est terminé sans erreur.

  • 
    1 #include <iostream>
    2 using namespace std;
    3 int main()
    4 {
    5 cout << "Hello world!" << endl;	
    6 return 0;
    7 }
    
output
  • 
    Hello world!
    

Les commentaires

Il y a deux moyens pour rajouter des commentaires.

  • 
    1 // Une ligne de commentaires
    2 /*
    3 Commentaire
    4 sur plusieurs lignes
    5 */
    

Remarque

Pour la suite, seul le core de la fonction principale, sans le return, sera affiché dans les codes exemples.

Les variables

Pour déclarer une variable on renseigne son type suivi de son nom et de sa valeur entre parenthèses

Les nombres

Les nombres peuvent être principalement de type int, unsigned int, float et double.

Le type double apporte plus de précision ou sert pour les grands nombres.
Il est possible de faire les opérations usuelles addition, soustraction, multiplication, division et modulo.
Les signes ++ et -- permettent d'incrémenter et de décrémenter de 1.
Les signes +=, -=, *= et /= permettent de faire une opération sur un nombre.
Au début du code, on ajoute la directive #include <cmath> pour avoir accès aux fonctions mathématiques telles que pow, sin, exp ou floor.

  • 
    1  int age(44);
    2  unsigned int carre(4);
    3  float prix(99.99);
    4  double pi(3.14159);
    5  cout << "Il a " << age << " ans." << endl;
    6  int a(2), b(3), c(4), res;
    7  res = (a + b - c) * c / a % b;
    8  cout << "Resultat = " << res << endl;
    11  cout << "age = " << --age << endl;
    12  age+=1;
    13  cout << "age = " << age << endl;
    14  cout << "4^0.5 = " << sqrt(4)<< endl;
    15  cout << "2^3 = " << pow(2,3)<< endl;
    16  cout << "sin(pi/2) = " << sin(pi/2) << endl;
    17  cout << "cos(pi) = " << cos(pi) << endl;
    18  cout << "tan(0) = " << tan(0) << endl;
    19  cout << "exp(10) = " << exp(10) << endl;
    20  cout << "log(100) = " << log10(100) << endl;
    22  cout << "abs(-2) = " << fabs(-2) << endl;
    23  cout << floor(pi) << " < pi < " << ceil(pi) << endl;
    
output
  • 				
    Il a 44 ans.
    Resultat = 2
    age = 43
    age = 44
    

Le texte

Le texte peut être de type char ou string

Au début du code, on ajoute l'en-tête standard <string> pour traiter les chaines de caractères avec la directive #include <string>

  • 
    1 char lettre('a');
    2 string message("Bonjour tout le monde!");
    3 cout << "La lettre \"" << lettre << "\" n'est pas dans le message \"" << message << "\"." << endl;
    
output
  • 				
    La lettre "a" n'est pas dans le message "Bonjour tout le monde!".
    

Les booléens

Un booléen peut prendre la valeur true (renvoie 1) ou false (renvoie 0)

  • 
    1 bool choix(true);
    2 cout << "Le booleen true vaut " << choix << "." << endl;
    
output
  • 				
    Le booleen true vaut 1.
    

L'affectation

Le caractère = permet d'affecter une valeur à une variable.

Pour les nombres et les booléens, il est possible de changer la valeur d'une variable.
Le terme const permet de définit une constante. Elle ne peut pas être modifiée.

  • 
    1 int temp (21.5);
    2 temp = 22.5;
    3 cout << "Maintenant, il fait " << temp << " degres." << endl;
    4 string message2;
    5 message2 = message;
    6 cout << "La lettre \"" << lettre << "\" n'est pas non plus dans le message2 \"" << message2 << "\"." << endl;
    7 float const phi(1.618);
    8 cout << "valeur de phi?" << endl;
    9 cout << "Le nombre d'or vaut " << phi << endl;
    
output
  • 				
    Maintenant, il fait 22 degrés.
    La lettre "a" n'est pas non plus dans le message2 "Bonjour tout le monde!".
    Le nombre d'or vaut 1.618
    

Les références

Une référence est une sorte d'alias.

Le caractère & permet de créer une référence à une variable.
La variable et la référence sont donc liées à la même case mémoire.

  • 
    1 int age(44);
    2 int& reference_age(age);
    3 cout << "Il a " << reference_age << " ans." << endl;
    
output
  • 				
    Il a 44 ans.
    

Input utilisateur

L'objet cin et la fonction getline

L'objet cin permet à l'utilisateur de saisir une valeur et de l'affecter à une variable.
La fonction getline permet de lire une chaine de caractère séparée par des espaces

  • 
    1 int note(0);
    2 cout << "Rentrer une note sur 20: ";
    3 cin >> note;
    4 cout << "Il a " << note << " sur 20." << endl;
    5 cin.ignore();
    6 cout << "Comment t'appelles tu?" << endl;
    7 string nom_complet("");
    8 getline(cin, nom_complet);
    9 cout << "Bonjour " << nom_complet << "."<< endl;
    
output
  • 				
    Rentrer une note sur 20: 12
    Il a 12 sur 20.
    Comment t'appelles tu?
    nico tm
    Bonjour nico tm.
    

Les conditions

Une structure conditionnelle est basée sur un test conditionnel et sur les instructions if ou switch.

Le test conditionnel

Les opérateur de comparaison ==, >, >=, <, <= et != servent à faire le test conditionnel qui est placé entre parenthèses.

Le test renvoie 1 pour vrai et 0 pour faux.
Il en va de même pour une variable bouleenne qui renvoie 1 si true et 0 si faux.
Les opérateurs logiques and ou &&, or ou || et not ou ! permettent de combiner les conditions.

  • 
    1 cout << (1 == 1) << endl;
    2 cout << (1 != 1) << endl;
    
output
  • 				
    1
    0
    

L'instruction if

if, else if, else

La structure conditionnelle if s'écrit if (condition) {instructions} else if (condition) {instructions} else {instructions}

  • 
    1 age = 25;
    2 cout << "age = " << age << endl;
    3 if (age < 18){cout << "mineur" << endl;}
    4 else if (age == 18){cout << "majorite" << endl;}
    5 else if (age < 30){cout << "jeune" << endl;}
    6 else{cout << "vieux" << endl;}
    
output
  • 					
    jeune
    
  • 
    1 choix = true;
    2 if (choix){cout << "go" << endl;}
    3 else if (!choix){cout << "no go" << endl;}
    
output
  • 				
    go
    
  • 
    1 choix = true;
    2 age = 18;
    3 if (choix and age == 18){cout << "vote" << endl;}
    
output
  • 				
    vote
    

L'intruction switch

La structure conditionnelle switch s'écrit switch(variable) {case valeur1: instructions; break; ...}

Elle peut s'utiliser avec int, unsigned int et char.

  • 
    1 int score(2);
    2 switch(score){
    3 case 0: cout << "nul" << endl; break;
    4 case 1: cout << "moyen" << endl; break;
    5 case 2: cout << "parfait" << endl; break;
    6 }
    
output
  • 		
    parfait
    

Les boucles

Les boucles for, while et do while

La boucle for

Elle est effectuée un nombre prédéfini de fois.

Elle s'écrit for (initialisation; condition; incrementation) {instructions}

  • 
    1 int i(0);
    2 for (i = 0 ; i < 3 ; i++) {cout << i << endl;}
    
output
  • 		
    0
    1
    2
    

La boucle while

Elle est effectuée un nombre indéfini de fois.

Elle s'écrit while (condition) {instructions}

  • 
    1 int choix_menu(1);
    2 while (choix_menu != 2) {
    3 cout << "Menu" << endl << "1 pour continuer" << endl << "2 pour quitter" << endl;
    4 cin >> choix_menu;
    5 cout << "Bye" << endl;
    
output
  • 		
    Menu
    1 pour continuer
    2 pour quitter
    2
    Bye
    

La boucle do while

Elle est effectuée au moins une fois.

Elle s'écrit do {instructions} while (condition)

  • 
    1 choix_menu = 0;
    2 do {
    3 cout << "Menu" << endl << "1 pour continuer" << endl << "2 pour quitter" << endl;
    4 cin >> choix_menu;
    5 } while (choix_menu != 2)
    6 cout << "Bye" << endl;
    
output
  • 		
    Menu
    1 pour continuer
    2 pour quitter
    2
    Bye
    

Les fonctions

Une fonction permet d'effectuer une tâche.

Exemple d'utilisation

Une fonction s'écrit type_valeur_retour nom_fonction (arguments){instructions}

La fonction à appeler calcule_carre se trouve avant la fonction main.
La fonction say_hello de type valeur void ne renvoie rien.

  • 
    1 #include <iostream>
    2 using namespace std;
    3
    4 int calcule_carre(int x){
    5 {
    6    int res(x * x);
    7    return res;
    8 }
    9
    10 void say_hello(string name)
    11 {cout << "hello " << name;}
    12
    13 int main()
    14 {
    15 int x(2), res(0);
    16 res = calcule_carre(x);
    17 cout << x << " au carre = " << res << endl;
    18 say_hello ("nico");
    19 return 0;
    20 }
    
output
  • 	
    2 au carre = 4
    hello nico
    

Les tableaux

Un tableau permet de stocker des données du même

Les tableaux statiques

Leur taille est fixée à l'avance

Un tableau s'écrit type_valeur nom [nb_cases] avec nb_cases fixe.
D'ailleurs, il est fortement conseillé que nb_cases soit une constante.

  • 
    1 int const nb_scores(3);
    2 double scores[nb_scores];
    3 scores[0] = 12;
    4 scores[1] = 14;
    5 scores[2] = 16;
    6 cout << "scores = " << scores << endl;
    7 for (i =  0; i < 3 ; i++){cout << scores[i] << endl;}
    
output
  • 	
    12
    14
    16
    

Pour définir la fonction moyenne avec le tableau scores en argument, il faut aussi passer nb_scores en argument.

  • 
    1 // fonction moyenne
    2 double moyenne(double scores[], int nb_scores)
    3 {
    4     double moyenne(0);
    5     for(int i(0); i < 3 ; i++){moyenne += scores[i]}
    6     moyenne /= nb_scores;
    7     return moyenne;
    8 }
    9 // dans le main
    10 double ma_moyenne(0);
    11 ma_moyenne = moyenne(scores, nb_scores);
    12 cout << "moyenne = " << ma_moyenne << endl;
    
output
  • 	
    moyenne = 14
    

Les vecteurs

Les vecteurs sont comme des tableaux mais avec une taille variable.

Un vecteur s'écrit vector nom(nb_cases, valeur)
Au début du code, on ajoute la directive #include <vector> pour avoir accès aux vecteurs.
La fonction push_back permet d'ajouter une case à la fin.
La fonction pop_back permet de supprimer la dernière case.
La fonction erase permet de supprimer des cases.
La fonction size renvoie la taille du vecteur.

  • 
    1 vector temperature(3, 0);
    2 temperature[1] = 18.6;
    3 temperature[2] = 20.2;
    4 temperature.push_back(16.4);
    5 temperature.pop_back();
    7 temperature.erase(temperature.begin());
    6 for(i=0; i8 
    9 
    
output
  • 
    18.6
    20.2
    

La fonction moyenne_temp reçoit le vecteur temperature en argument avec const& pour le passage en référence constante.

  • 
    1 // fonction calcule_moyenne_temp
    2 double calcule_moyenne_temp(vector<double> const& temperature)
    3 {
    4     double moyenne_temp(0);
    5     for(int i(0); i < temperature.size() ; i++){moyenne_temp += temperature[i];}
    6     moyenne_temp /= temperature.size();
    7     return moyenne_temp;
    8 }
    9 // dans le main
    10 double moyenne_temp(0);
    11 moyenne_temp = calcule_moyenne_temp(temperature);
    12 cout << "moyenne_temp = " << moyenne_temp << endl;
    
output
  • 
    moyenne_temp = 19.4
    

logo nicot3m © 2023 nicot3m - Site web réalisé par Nicolas Habrias - Tous droits réservés - Contact: nicot3m@gmail.com