Dans mon école, nous sommes en train de voir le C++. Même si ce langage ne me passionne pas des masses, je vais essayer de vous synthétiser les côtés pratiques du langage que j’apprends durant les cours. L’approche pratique signifie que je rentrerai rarement dans la théorie, sauf s’il faut expliquer quelque chose de précis dans le but d’un programme.
Je trouve que les cours de programmation en général sont trop « correct », on nous montre tout ce qui est possible de faire au lieu de nous apprendre une méthode unique, ce qui à mon sens est une erreur.
Pour le premier cours, je vais surtout vous montrer la syntaxe du langage C++. Je vous encourage vivement à essayer de reproduire les exercices sans les recopier. Cela vous aidera à mieux appréhender le langage.
Pour rappel, ces cours sont liés aux cours que je reçois dans mon école, condenser 4h de cours en un article ça implique que je ne choisisse pas les thèmes abordés.
Introduction au langage
Nous allons faire un petit tour sommaire du langage. Le C++ sert dans tous les OS, il est utilisé pour faire des applications logicielles et est orienté objet. Le C++ n’a rien à voir avec le C.
Les différents type de variables primitives
- int : pour les entiers ;
- long : pour les entiers longs ;
- short : pour les entiers courts ;
- float : chiffres à virgules ;
- double : chiffres longs à virgules ;
- char : caractères ;
- bool : booléen.
Je parlerai des variables pointées et de la mémoire un peu plus tard durant ce cours, car cela traite d’une partie plus complexe.
La directive « auto » permet de définir n’importe quelle variable et de la typer automatiquement.
Les opérateurs conditionnels
- do … while (…) ;
- switch : case … ;
- if (…) …, else if (…) …, else … ;
- while (…) … ;
Ces opérateurs conditionnels sont communs à de nombreux langages, ils ne nécessitent pas forcément d’exemples.
Les librairies
Le C++ peut inclure des libraires statiques (elles sont incluses dans le programme) et des libraires dynamiques (elles sont fournies par le système d’exploitation) comme par exemple les .dll sous Windows.
#include
Les fichiers requis par #include permettent de récupérer le code du fichier vers lequel on pointe, il est inclus dans le programme. Il concerne uniquement les variables.
#define
Permet de définir des variables globales et de les redéfinir au besoin.
namespace
Même chose que include, cependant il sert à inclure des fonctions.
Exercices à réaliser
Ces exercices « ne servent à rien » à proprement parler, si ce n’est vous donner les pré-requis de la syntaxe et des différentes fonctions de base. Ils vous obligeront aussi à faire quelques recherches sur internet concernant les différentes librairies à utiliser.
Exercice C++ : Syntaxes basiques
L’exercice est simple.
- Créer deux variables, a et b ;
- Ces deux variables recevront un entier (int) via la console ;
- Mettre ces deux variables dans un tableau ;
- Parcourir le tableau pour afficher les valeurs dans la console.
Exercice C++ : Tableau de Pythagore
Créer un tableau de Pythagore dans la console.
Astuce : on peut utiliser deux boucles FOR.
Exercice C++ : Nombre mystère
- Choisissez un intervalle donné ;
- Créer une variable avec un nombre aléatoire compris entre vos deux intervalles ;
- Créer une récupération de l’utilisateur pour vérifier le nombre, et indiquez si c’est plus ou moins ;
- Si l’utilisateur trouve le bon nombre, on quitte le programme.
Astuce : utiliser une boucle do … while(…) est une bonne idée.
Exercice C++ : Créer une dichotomie
La dichotomie est un procédé mathématique qui permet d’obtenir le plus rapidement possible un entier a compris entre x et y sans savoir quel est l’entier a.
- En paramètre d’une méthode, passez deux paramètres pour les intervalles minimum et maximum ;
- Attribuer à une variable un nombre que l’on ne connait pas compris entre les deux intervalles ;
- Utiliser la dichotomie pour trouver le nombre que l’on ne connait pas.
Rappel dichotomie
On divise le total des intervalles en deux. Si ce total est supérieur à l’entier a, mon intervalle max devient la somme de mes intervalles. S’il est inférieur, c’est mon intervalle min qui prend cette valeur.
Bonne chance !
Code complet du premier cours
Voici le code complet et commenté du premier cours. Si vous avez des questions ou des remarques, je vous laisse me les poser en commentaires.
Télécharger le code
/*
* File: main.cpp
* Author: sacha
*
* Created on 8 octobre 2015, 16:34
*/
#include <iostream>
#include <cstdlib>
using namespace std;
/**
* Exemple boucle FOR
*
* - saisie de nombre
* - utilisation d'un tableau fixe
* - récupération de la taille d'un tableau fixed
* - parcours du tableau
*
*/
void exampleFor() {
// déclaration des variables
int a;
int b;
// récupération des valeurs
cout << "a = ";
cin >> a;
cout << "b = ";
cin >> b;
// structuration du tableau
int tab[2] = { a, b };
// récupération de la taille du tableau
int tabSize = sizeof(tab) / 4;
cout << tabSize;
// parcours du tableau
for (int i = 0; i < tabSize; i++) {
cout << "i = " << i << " - " << tab << "\n";
}
}
/**
* Multiplication et doubles FOR : Tableau de Pythagore
*
* - double for
* - utilisation des caractères spéciaux
*
*/
void examplePythagore() {
// premier FOR
for (int i = 1; i <= 10; i++) {
// second FOR
for (int j = 1; j <= 10; j++) {
// execute l'opération et ajoute une tabulation
cout << i * j << "\t";
}
// saute une ligne
cout << "\n" << endl;
}
}
/**
* Nombre mystèxe à trouver
*
* - utilisation de la fonction rand
* - génération aléatoire d'un nombre
* - tentatives pour trouver le nombre dans un intervale donné
*
*/
void exampleRand() {
// choisi un nouveau nombre aléatoire
srand ( time(NULL) );
int numberToFind = rand() % 100 + 1;
int c;
// on affiche le nombre à trouver
cout << "Find the random num : " << numberToFind << "\n";
do {
// on récupère la saisie opération
cin >> c;
// on traite la donnée
if (c > numberToFind) {
cout << "Less !" << endl;
}
else if (c < numberToFind) {
cout << "More !" << endl;
}
}
while (c != numberToFind);
// fin du programme avec succès
cout << "Done !";
}
/**
* Example d'une dichotomie
*
* - utilisation de la fonction rand()
* - utilisation du while
*
* @param xMin
* Intervalle de départ (minimum)
* @param xMax
* Intervalle de fin (maximum)
*/
void exampleDichotomy(int xMin, int xMax) {
// on défini un nouveau nombre aléatoire jusqu'au nombre max
srand ( time(NULL) );
int numberToFind = rand() % xMax + 1;
// verbose : utilise pour débogguer le programme
cout << "Started on : " << "[ " << xMin << " , " << xMax << " ] for " << numberToFind << endl;
int attempt;
int attemptedTimes = 0;
// on lance la dichotomie
while ( attempt != numberToFind) {
// on divise le nombre par deux
attempt = (xMin + xMax) / 2;
// on traite l'information en redéfinissant l'intervale
if (numberToFind > attempt) {
xMin = attempt;
}
else if (numberToFind < attempt) {
xMax = attempt;
}
// verbose : utile pour le debug
cout << "[ " << xMin << " , " << xMax << " ]"<< endl;
attemptedTimes++;
}
// fin de la dichotomie
cout << "Find number in : " << attemptedTimes;
}
/**
* Départ du programme
*
* @return 0
*/
int main () {
// décommenter les fonctions pour les lancer
//exampleFor();
//examplePythagore();
exampleRand();
//exampleDichotomy(0, 100);
return 0;
}