0% ont trouvé ce document utile (0 vote)
70 vues78 pages

Introduction à la Programmation C++

Le document présente une introduction à la programmation C++. Il décrit l'historique du langage C++, ses forces, et les outils nécessaires pour développer des programmes C++ comme les éditeurs de texte, compilateurs et bibliothèques.

Transféré par

Amina Ghazii
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
70 vues78 pages

Introduction à la Programmation C++

Le document présente une introduction à la programmation C++. Il décrit l'historique du langage C++, ses forces, et les outils nécessaires pour développer des programmes C++ comme les éditeurs de texte, compilateurs et bibliothèques.

Transféré par

Amina Ghazii
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Programmation C++

Ahmed ZELLOU

UM6P, Licence OID2, 2022-2023.


Plan du cours (1)

1. Introduction

2. Types, opérateurs et expressions

3. Les entrées-sorties (cout, cin, …)

4. Les structures de contrôle

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Plan du cours (2)

5. Les tableaux

6. Les fonctions

7. Les Structures

8. Programmation Orientée Objet

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Partie 1

Introduction

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Langages informatiques
l Un langage informatique est un outil permettant de
donner des ordres (instructions) à la machine
• A chaque instruction correspond une action du processeur

l Intérêt : écrire des programmes (suite consécutive


d’instructions) déstinés à effectuer une tâche donnée
• Exemple: un programme de gestion de role dans une entreprise

l Contrainte: être compréhensible par la machine

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Langage machine
l Langage binaire: l’information est exprimée et manipulée sous
forme d’une suite de bits

l Un bit (binary digit) = 0 ou 1 (2 états électriques)

l Une combinaison de 8 bits= 1 Octet è 28=256 possibilités qui permettent


de coder tous les caractères alphabétiques, numériques, et symboles tels
que ?,*,&, …

Le code ASCII (American Standard Code for Information Interchange)
donne les correspondances entre les caractères alphanumériques et
leurs représentation binaire, Ex. A= 01000001, ?=00111111
l Les opérations logiques et arithmétiques de base (addition,
multiplication, … ) sont effectuées en binaire

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Langages haut niveau
l Intérêts multiples pour le haut niveau:
• proche du langage humain «anglais» (compréhensible)
• permet une plus grande portabilité (indépendant du matériel)
• Manipulation de données et d’expressions complexes (réels,
objets, a*b/c, …)
l Nécessité d’un traducteur (compilateur/interpréteur),
exécution plus ou moins lente selon le traducteur

Code source Compilateur ou


Langage machine
en langage évolué interpréteur

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Compilateur/interpréteur
l Compilateur: traduire le programme entier une fois pour toutes
Compilateur
exemple.cpp Exemple.exe exécution
fichier source fichier exécutable
• + plus rapide à l’exécution
• + sécurité du code source
• - il faut recompiler à chaque modification

l Interpréteur: traduire au fur et à mesure les instructions du


programme à chaque exécution
Interprétation+exécution
exemple.php
fichier source
• + exécution instantanée appréciable pour les débutants
• - exécution lente par rapport à la compilation
8

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Langages de programmation:

l Plusieurs types de langages:


• Langages procéduraux
• Langages orientés objets
• frameworks

l Exemples de langages:
• Fortran, Cobol, Pascal, C, …
• C++, Java, …

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Historique de C++
l Le langage C a été conçu en 1972 dans «Bell Laboratories » par
Dennis Ritchie avec l’objectif d’écrire un système d'exploitation
(UNIX).

l En 1978, une première définition du langage C (standard


K&R-C) a été réalisée par Kernighan et Ritchie en publiant le livre
«The C Programming Language ».

l Le succès du C et l’apparition de compilateurs avec des extensions


particulières ont conduit à sa normalisation.

l Langage de base pour la prorammation structurée

10

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Historique de C++
l 1983 : Proposition du langage C++ par le
danois Bjarne Stroustrup

l Plusieurs langages de programmation se sont


inspirés du C++ : Java, PHP, C#, …

l Appelé à l’origine C with classes.

l
1985 : passage à C++

l 2020 : version 20

10

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


C++ : haut ou bas niveau ?
l C++, langage de haut niveau ?

l Un langage très puissant et particulièrement rapide.

l L'immense majorité des jeux sont développés en C++ : puissance et rapidité.

12

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Forces de C++
l Répandu

l Rapide

l Portable

l Multi-paradigmes : procédurale, objet et générique

l Plusieurs bibliothèques : 3D, réseaux, audio, fenêtrés, etc.

Sa complexité

12

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Les outils nécessaires
Un éditeur de texte

Un compilateur
Plutôt un IDE

La bibliothèque

13

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Choisissez votre IDE
Code::Blocks. Gratuit, multiplatforme

Visual C++. (windows, payant)

XCode(Mac OS X)

Dev C++ (gratuit)

Eclipse (professionnel)

https://www.onlinegdb.com/online_c++_compiler

A la main (Linux)

13

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Exemple d’une fenêtre Code Block

14

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Composantes d’un programme C++

Exemple : #include <iostream>


using namespace std;

int main()
{
cout << "Hello world!" << endl;
return 0;
}

15

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Remarques sur ce premier programme
l #include<iostream> informe le compilateur d’inclure les appels
d’entrées-sorties dont la fonction cout

l La fonction main est la fonction principale, obligatoire.

l L’appel cout permet d’afficher : Hello world et endl ordonne le


passage à la ligne suivante

l En C++, toute instruction simple est terminée par un point-virgule ;

l Un commentaire en C++ est compris entre // et la fin de la ligne ou bien


entre /* et */

16

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Partie 2

Variables, types, opérateurs et


expressions

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Les variables
l Les variables servent à stocker les valeurs des données
utilisées pendant l’exécution d’un programme

l Les variables doivent être déclarées avant d’être utilisées, elles


doivent être caractérisées par :
• un nom (Identificateur)
• un type (entier, réel, …)

l Doivent être différents des mots réservés du langage : auto


break case char …..

18

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Types Entier
4 variantes d’entiers :
l char : caractères (entier sur 1 octet : - 128 à 127)
l short ou short int : entier court (entier sur 2 octets : - 32768 à 32767)
l int : entier standard (entier sur 2 ou 4 octets )
l long ou long int : entier long (4 octets : - 2147483648 à 2147483648)

Si on ajoute le préfixe unsigned à la définition d'un type de variables


entières, alors la plage des valeurs change:
l unsigned char : 0 à 255
l unsigned short : 0 à 65535
l unsigned int : dépend du codage (sur 2 ou 4 octets)
l unsigned long : 0 à 4294967295

Remarque : Une variable du type char peut subir les mêmes opérations que les
variables du type short, int ou long

21

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Types Réel
Trois variantes de réels :
l float : réel simple précision codé sur 4 octets de
-3.4*1038 à 3.4*1038
l double : réel double précision codé sur 8 octets de
-1.7*10308 à 1.7*10308
l long double : réel très grande précision codé sur 10
octets de -3.4*104932 à 3.4*104932
l String : chaine ou mot ou phrase

Une variante de type chaine de caractères (#include <string>)

22

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Déclaration des variables
l

Exemples:

float x = 3.14 ;
String nom;
int i (3);

23

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Déclaration des constantes
l
Une constante const conserve sa valeur pendant toute l’exécution d’un
programme

l Une Variable non modifiable

float const pi(3.14);

24

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Opérateurs en C++
l Le langage C++ est riche en opérateurs. Outre les opérateurs
standards, il comporte des opérateurs originaux d’affectation,
d’incrémentation et de manipulation de bits

l On distingue les opérateurs suivants :

• les opérateurs arithmétiques : *, /, +, -, %


• les opérateurs d’affectation : =, +=, -=, *=, /=, %=
• les opérateurs logiques : &&, ||, !
• les opérateurs de comparaison : ==, !=, <, >, <=, >=
• les opérateurs d’incrémentation et de décrémentation : + +, - -

Attention à la priorité des opérateurs.

30

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Priorités des opérateurs

Catégorie Opérateurs Associativité


référence () [] -> . ®
unaire + - ++ -- ! ~ * & (cast) sizeof ¬
arithmétique * / % ®
arithmétique + - ®
décalage << >> ®
relationnel < <= > >= ®
relationnel == != ®
manip. de bits & ®
manip. de bits ^ ®
manip. de bits ú ®
logique && ®
logique úú ®
conditionnel ?: ®
affectation = += -= *= /= %= ¬
&= ^= ú = <<= >>= ¬
séquentiel , ®
48

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Les instructions de lecture et d’écriture
l
Affichage : cout
int i (3);
cout << "La valeur de i est " << i << endl;

l Lecture : cin
int i(0);
cout << "Donnez une valeur pour i :";
cin >> i;
cout << "La valeur de i est " << i << endl;

l Retour à la ligne : endl

50

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Les instructions de lecture et d’écriture
l
Pour les chaines
#include <string>
string nomUser("Anonyme");
cout << "Quel est votre nom ? :";
Cin >> nomUser;
cout << "Le nom est :" << nomUser << endl;

l Les chaines traitent mal les espaces : remplacer cin par getline()
getline(cin, nomUser);
cin.ignore()//il faut toujours la mettre

50

POO, Partie 1 : Programmation C++ @ A.ZELLOU, Licence OID, UM6P


Chapitre 4

Structures de contrôle

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Structures de contrôle
l Les structures de contrôle définissent la façon avec laquelle les
instructions sont effectuées. Elles conditionnent l'exécution
d'instructions à la valeur d'une expression

l On distingue :
• Les structures alternatives (tests) : permettent d’effectuer des choix
càd de se comporter différemment suivant les circonstances (valeur
d'une expression). En C++, on dispose des instructions : if…if/else et
switch.

• Les structures répétitives (boucles) : permettent de répéter


plusieurs fois un ensemble donné d’instructions. En C++, on dispose des
instructions : while, do{…}while et for.

62

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


L’instruction if…else
l Syntaxe : If (expression)
bloc-instruction1
else
bloc-instruction2

• bloc-instruction peut être une seule instruction terminée par un point-


virgule ou une suite d’instructions délimitées par des accolades { }

• expression est évaluée, si elle est vraie (valeur différente de 0), alors
bloc-instruction1 est exécuté. Si elle est fausse (valeur 0) alors bloc-
instruction2 est exécuté

l La partie else est facultative. S’il n’y a pas de traitement à réaliser


quand la condition est fausse, on utilisera simplement la forme :
If (expression) bloc-instruction1

63

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


if…else : exemples

• float a, b, max;
if (a > b)
max = a;
else
max = b;

• int a;
if ((a%2)==0)
cout <<a << "est paire";
else
cout << a <<" est impaire ";

64

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


if…else : Exercice
Lisez un entire et affichez sa valeur absolue.

64

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Imbrication des instructions if
l On peut imbriquer plusieurs instructions if…else

l Ceci peut conduire à des confusions, par exemple :


• if (N>0)
if (A>B)
MAX=A;
else MAX=B; (interprétation 1 : si N=0 alors MAX prend la valeur B)

• if (N>0)
if (A>B)
MAX=A;
else MAX=B; (interprétation 2 : si N=0 MAX ne change pas)

l En C++ un else est toujours associé au dernier if qui ne possède pas


une partie else (c’est l’interprétation 2 qui est juste)

65

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Imbrication des instructions if
l Conseil : pour éviter toute ambiguïté ou pour forcer une certaine
interprétation dans l’imbrication des if, il vaut mieux utiliser les
accolades
l if(a<=0)
{if(a==0)
cout <<"a est nul ";
else
cout << " a est strictement négatif ";
}
else
cout <<" a est strictement positif " ;

l Pour forcer l’interprétation 1: if (N>0)


{ if (A>B)
MAX=A;
}
else MAX=B;
66

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Imbrication if : Exercice

Ecrivez un programme qui calcule les


solutions réelles d'une équation du second
degré ax 2+bx+c = 0 en discutant sa formule.

64

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


L’instruction d’aiguillage switch :
l Permet de choisir des instructions à exécuter selon la valeur d’une
expression qui doit être de type entier

l La syntaxe est :
switch (expression) {
case expression_constante1 : instructions_1; break;
case expression_constante2 : instructions_2; break;

case expression_constante n : instructions_n; break;
default : instructions;
}
l
expression_constante doit être une expression constante entière
l
Instructions i peut être une instruction simple ou composée
l break et default sont optionnels mais recommandés

67

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Fonctionnement de switch
l expression est évaluée

l si sa valeur est égale à une expression_constante i, on se branche à


ce cas et on exécute les instructions_i qui lui correspondent

• On exécute aussi les instructions des cas suivants jusqu’à la fin du bloc
ou jusqu’à une instruction break (qui fait sortir de la structure switch)

l si la valeur de l'expression n'est égale à aucune des expressions


constantes
• Si default existe, alors on exécute les instructions qui le suivent
• Sinon aucune instruction n’est exécutée

68

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Switch : exemple
main( )
{ char var;
switch (var) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
case 'y’: cout << "voyelle"; break ;
default : cout << "consonne";
}
}

69

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Switch : Exercice

Lisez un caractère, puis vérifier si c’est une


voyelle ou une consonne.

64

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Les boucles while et do .. while
while (condition) do
{ {
instructions instructions

} } while (condition);

l la condition est évaluée à chaque itération. Les instructions (corps de la boucle)


sont exécutés tant que la condition est vraie, on sort de la boucle dès que la
condition devient fausse

l dans la boucle while le test de continuation s'effectue avant d'entamer le corps


de boucle qui, de ce fait, peut ne jamais s'exécuter

l par contre, dans la boucle do-while ce test est effectué après le corps de
boucle, lequel sera alors exécuté au moins une fois

70

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Boucle while : exemple
Un programme qui détermine le premier nombre entier N
tel que la somme de 1 à N dépasse strictement 100

main( )
{ int i, som;
i =0; som= 0;
while (som <=100)
{ i++;
som+=i;
}
cout <<" La valeur cherchée est N = ”<< i;
}

71

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Boucle do .. while : exemple
Contrôle de saisie d'une note saisie au clavier jusqu’à ce
que la valeur entrée soit valable

main()
{ int N;
do {
cout << " Entrez une note comprise entre 0 et 20 :";
cin >> N;
} while (N < 0 || N > 20);
}

72

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


while : Exercice

Ecrivez un programme qui lit N nombres


entiers au clavier et qui affiche leur somme,
leur produit et leur moyenne.

Choisissez un type approprié pour les valeurs à


afficher. Le nombre N est à entrer au clavier.

64

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


La boucle for
for (expr1 ; expr2 ; expr3)
{
instructions
}
l L'expression expr1 est évaluée une seule fois au début de l'exécution de la
boucle. Elle effectue l’initialisation des données de la boucle

l L'expression expr2 est évaluée et testée avant chaque passage dans la


boucle. Elle constitue le test de continuation de la boucle.

l L'expression expr3 est évaluée après chaque passage. Elle est utilisée
pour réinitialiser les données de la boucle.

73

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Boucle for : remarques
for (expr1 ; expr2 ; expr3) équivaut à :
{ expr1;
instructions while(expr2)
} { instructions
expr3;
}

l En pratique, expr1 et expr3 contiennent souvent plusieurs


initialisations ou réinitialisations, séparées par des virgules

74

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Boucle for : exemple
Calcul de x à la puissance n où x est un réel non nul et n
un entier positif ou nul
main ( )
{ float x, puiss=1;
int n, i;
{ cout << " Entrez respectivement les valeurs de x et n :";
cin >> x >> n;
for ( i=1; i<=n; i++)
puiss*=x;
cout << x << " à la puissance " << n << " est égal à : " << puiss;
}
}

75

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


L’instruction break
l L’instruction break peut être utilisée dans une boucle (for, while, ou do .. while).
Elle permet d’arrêter le déroulement de la boucle et le passage à la première
instruction qui la suit

l En cas de boucles imbriquées, break ne met fin qu’ à la boucle la plus interne
l {int i,j;
for(i=0;i<4;i++)
for (j=0;j<4;j++)
{ if(j==1) break;
cout << i ","j << j << endl;
}
} résultat: i=0,j=0
i=1,j=0
i=2,j=0
i=3,j=0

76

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


for : Exercice

Calculez la factorielle N! = 1*2*3*...*(N-1)*N


d'un entier naturel N en respectant que 0!=1.

64

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Chapitre 5

Les tableaux

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Tableaux
l Un tableau est une variable structurée composée d’un nombre de
variables simples de même type désignées par un seul identificateur

l Ces variables simples sont appelées éléments ou composantes du


tableau, elles sont stockées en mémoire à des emplacements
contigus (l’un après l’autre)

l Le type des éléments du tableau peut être :


• simple : char, int, float, double, …
• pointeur ou structure

l On peut définir des tableaux :


• à une dimension (tableau unidimensionnel ou vecteur)
• à plusieurs dimensions (tableau multidimensionnel )

79

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Déclaration des tableaux
l La déclaration d'un tableau à une dimension s'effectue en précisant le
type de ses éléments et sa dimension (le nombre de ses éléments) :

• Syntaxe : Type identificateur[dimension];


• Exemple : float notes[30];

l La déclaration d’un tableau permet de lui réserver un espace mémoire


dont la taille (en octets) est égal à : dimension * taille du type

l ainsi pour :
• short A[100]; // on réserve 200 octets (100* 2octets)
• char mot[10]; // on réserve 10 octets (10* 1octet)

80

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Initialisation à la déclaration
l On peut initialiser les éléments d’un tableau lors de la déclaration, en
indiquant la liste des valeurs respectives entre accolades. Ex:
• int A[5] = {1, 2, 3, 4, 5};
l Si la liste ne contient pas assez de valeurs pour toutes les
composantes, les composantes restantes sont initialisées par zéro
• Ex: short T[10] = {1, 2, 3, 4, 5};
l La liste ne doit pas contenir plus de valeurs que la dimension du
tableau. Ex: short T[3] = {1, 2, 3, 4, 5};è Erreur

l Il est possible de ne pas indiquer la dimension explicitement lors de


l'initialisation. Dans ce cas elle est égale au nombre de valeurs de la
liste. Ex: short T[ ] = {1, 2, 3, 4, 5};è tableau de 5 éléments

81

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Accès aux composantes d’un tableau
l L'accès à un élément du tableau se fait au moyen de l'indice. Par
exemple, T[i] donne la valeur de l'élément i du tableau T

l L’indice du premier élément du tableau est 0. L’indice


du dernier élément est égal à la dimension-1

Ex: int T[ 5] = {9, 8, 7, 6, 5};è


T[0]=9, T[1]=8, T[2]=7, T[3]=6, T[4]=5
Remarques:
l On ne peut pas saisir, afficher ou traiter un tableau en entier, ainsi on ne peut
pas écrire cin >> T ou cout << T

l On traite les tableaux élément par élément de façon répétitive en utilisant


des boucles

82

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Tableaux : saisie et affichage
l Saisie des éléments d’un tableau T d’entiers de taille n :

for(i=0;i<n;i++)
{ cout << "Entrez l'élément ",<< i + 1;
cin >> T[i];
}

l Affichage des éléments d’un tableau T de taille n :

for(i=0;i<n;i++)
cout << T[i] << endl;

83

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Tableaux : exemple
l Calcul du nombre d'étudiants ayant une note supérieure à 10 :

main ( )
{ float notes[30];
int nbre,i;
for(i=0;i<30;i++)
{ cout << "Entrez la note de l’élément” << i;
cin >> notes[i];
}
nbre=0;
for (i=0; i<30; i++)
if (notes[i]>10) nbre+=1;
cout << " le nombre de notes > à 10 est égal à : <<", nbre;

}
84

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Tableaux : Exercice

Lisez un tableau de réels.


• Calculez la somme, le produit et la moyenne
des éléments.
• Cherchez la valeur maximale.
• Cherchez la position (indice) de la valeur
maximale.

64

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Tableaux à plusieurs dimensions
On peut définir un tableau à n dimensions de la façon suivante:

l Type Nom_du_Tableau[D1][D2]…[Dn]; où Di est le nombre


d’éléments dans la dimension i

l Exemple : pour stocker les notes de 20 étudiants en 5 modules


dans deux examens, on peut déclarer un tableau :

float notes[20][5][2];

(notes[i][j][k] est la note de l’examen k dans le module j pour


l’étudiant i)

85

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Tableaux à deux dimensions (Matrices)
l Syntaxe : Type nom_du_Tableau[nombre_ligne][nombre_colonne];
l Ex: short A[2][3]; On peut représenter le tableau A de la manière
suivante :
A[0][0] A[0][1] A[0][2]
A[1][0] A[1][1] A[1][2]

l Un tableau à deux dimensions A[n][m] est à interpréter comme un


tableau unidimensionnel de dimension n dont chaque composante
A[i] est un tableau unidimensionnel de dimension m.

l Un tableau à deux dimensions A[n][m] contient n* m composantes.


Ainsi lors de la déclaration, on lui réserve un espace mémoire dont la
taille (en octets) est égal à : n*m* taille du type

86

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Initialisation à la déclaration d’une Matrice
l L’initialisation lors de la déclaration se fait en indiquant la liste des
valeurs respectives entre accolades ligne par ligne

l Exemple :
• float A[3][4] = {{-1.5, 2.1, 3.4, 0}, {8e-3, 7e-5,1, 2.7 }, {3.1, 0, 2.5E4, -1.3E2}};

A[0][0]=-1.5 , A[0][1]=2.1, A[0][2]=3.4, A[0][3]=0


A[1][0]=8e-3 , A[1][1]=7e-5, A[1][2]=1, A[1][3]=2.7
A[2][0]=3.1 , A[2][1]=0, A[2][2]=2.5E4, A[2][3]=-1.3E2

l On peut ne pas indiquer toutes les valeurs: Les composantes


manquantes seront initialisées par zéro

l Comme pour les tableaux unidimensionnels, il est défendu d'indiquer


trop de valeurs pour une matrice

87

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Matrices : saisie et affichage
l Saisie des éléments d’une matrice d’entiers A[n][m] :

for(i=0;i<n;i++)
for(j=0;j<m;j++)
{ cout << "Entrez la valeur de A[<<"<<i<<"]["<<j<<"] :";
cin >> A[i][j];
}

l Affichage des éléments d’une matrice d’entiers A[n][m] :

for(i=0;i<n;i++)
{ for(j=0;j<m;j++)
cout << A[i][j];
cout << endl;
}

88

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Matrices : Exercice

Lisez deux matrices carrées.


• Calculez leurs sommes et leurs produits.
• Devoir : calculez le déterminant d’une
matrice.

64

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Chapitre 6

Les fonctions

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


La programmation modulaire
l Certains problèmes conduisent à des programmes longs, difficiles à écrire et à
comprendre. On les découpe en des parties appelées sous- -programmes ou
modules
l Les modules sont des groupes d'instructions qui fournissent une solution à des
parties bien définies d'un problème plus complexe. Ils ont plusieurs intérêts :

• permettent de "factoriser" les programmes, càd de mettre en commun


les parties qui se répètent
• permettent une structuration et une meilleure lisibilité des programmes
• facilitent la maintenance du code (il suffit de modifier une seule fois)
• peuvent éventuellement être réutilisées dans d'autres programmes

l La structuration de programmes en sous-programmes se fait en C++ à l'aide des


fonctions

113

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Fonctions
l On définit une fonction en dehors de la fonction principale main ( ) par :
type nom_fonction (type1 arg1,…, typeN argN)
{
instructions constituant le corps de la fonction
return (expression)
}
l Dans la première ligne (appelée en-tête de la fonction) :
• type est le type du résultat retourné. Si la fonction n’a pas de résultat à
retourner, elle est de type void.
• le choix d'un nom de fonction doit respecter les mêmes règles que celles
adoptées pour les noms de variables.
• entre parenthèses, on spécifie les arguments de la fonction et leurs
types. Si une fonction n'a pas de paramètres, on peut déclarer la liste
des paramètres comme (void) ou simplement comme ()
l Pour fournir un résultat en quittant une fonction, on dispose de la commande
return.
114

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Fonctions : exemples
l Une fonction qui calcule la somme l Une fonction qui renvoie un
de deux réels x et y : entier saisi au clavier
double Som(double x, double y ) int RenvoieEntier( void )
{
{
int n;
return (x+y); cout << " Entrez n :";
} cin >> n;
return n;
l Une fonction qui affiche la somme de }
l Une fonction qui affiche les
deux réels x et y : éléments d’un tableau d’entiers
void AfficheSom(double x, double y) void AfficheTab(int T[ ], int n)
{ { int i;
cout << x+y ; for(i=0;i<n;i++)
cout << T[i];
}
}

115

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Appel d’une fonction
l L‘appel d'une fonction se fait par simple écriture de son nom avec la liste
des paramètres : nom_fonction (para1,…, paraN)
l Lors de l'appel d'une fonction, les paramètres sont appelés paramètres
effectifs : ils contiennent les valeurs pour effectuer le traitement. Lors de la
définition, les paramètres sont appelés paramètres formels.
l L'ordre et les types des paramètres effectifs doivent correspondre à ceux
des paramètres formels
l Exemple d’appels:
main( )
{ double z;
int A[5] = {1, 2, 3, 4, 5};
z=Som(2.5, 7.3);
AfficheTab(A,5);
}

116

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Déclaration des fonctions
l Il est nécessaire pour le compilateur de connaître la définition d'une
fonction au moment où elle est appelée. Si une fonction est définie
après son premier appel (en particulier si elle définie après main ),
elle doit être déclarée auparavant.

l La déclaration d'une fonction se fait par son prototype qui indique


les types de ses paramètres et celui de la fonction :
type nom_fonction (type1,…, typeN)

l Il est interdit en C++ de définir des fonctions à l'intérieur d'autres


fonctions. En particulier, on doit définir les fonctions soit avant, soit
après la fonction principale main.

117

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Déclaration des fonctions : exemple
#include<stdio.h>
float ValeurAbsolue(float); //prototype de la fonction ValeurAbsolue
main( )
{ float x=-5.7,y;
y= ValeurAbsolue(x);
cout << "La valeur absolue de" << x << "est : " << y;
}
//Définition de la fonction ValeurAbsolue
float ValeurAbsolue(float a)
{
if (a<0) a=-a;
return a;
}

118

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Récursivité
l Une fonction qui fait appel à elle-même est une fonction récursive

l Toute fonction récursive doit posséder un cas limite (cas trivial) qui
arrête la récursivité

l Exemple : Calcul du factorielle


int fact (int n )
{ if (n==0) /*cas trivial*/
return (1);
else
return (n* fact(n-1) );
}
Remarque : l’ordre de calcul est l’ordre inverse de l’appel de la fonction
126

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Fonctions récursives : exercice
l Ecrivez une fonction récursive (puis itérative) qui calcule le terme n
de la suite de Fibonacci définie par : U(0)=U(1)=1
U(n)=U(n-1)+U(n-2)

int Fib (int n)


{
if (n==0 || n==1)
return (1);
else
return ( Fib(n-1)+Fib(n-2));

127

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Fonctions récursives : exercice (suite)
l Une fonction itérative pour le calcul de la suite de Fibonacci :

int Fib (int n)


{ int i, AvantDernier, Dernier, Nouveau;
if (n==0 || n==1) return (1);
AvantDernier=1; Dernier =1;
for (i=2; i<=n; i++)
{ Nouveau= Dernier+ AvantDernier;
AvantDernier = Dernier;
Dernier = Nouveau;
}
return (Nouveau);
}
Remarque: la solution récursive est plus facile à écrire

128

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Chapitre 7

Les Structures

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Définition d’une Structure
Permet d’utiliser des types combinés dans un programme.
Une collection de variables de types différents avec un même nom.

Exemple : une date est struct ADate {


int month int month;
int day int day;
int year int year;
};
L’accès aux composants de la structure est réalisé via le (.)
struct ADate date;
struct Person
{ date.month = 2;
char name[50]; date.day = 4;
date.year = 2021;
int age;
float salary;
};
138

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Structure : Exercice 1
Créer une structure NombreRationnel à deux
composants : un numérateur et un dénominateur.

écrivez une fonction qui prends en paramètres deux


nombres rationnels et qui retourne leurs produits sous
forme d'un nombre rationnel.

Améliorer le programme en déclaration deux fonctions


: lire et afficher

64

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Tableau de Structures
Déclaration du tableau Constant

#define NFRIENDS 50

Date birthdays[NFRIENDS];

bool check_birthday(Date today)


L’indice du tableau
{
int i;
L’élément de la structure
for (i = 0; i < NFRIENDS; i++) {
if ((today.month == birthdays[i].month) &&
(today.day == birthdays[i].day))
return (true);

return (false); Que fait le programme ?


}

138

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Structure : Devoir
1.Créer une structure Matière avec numéro, coefficient et désignation.
2.Créer une structure Date avec jour, mois et année.
3.Créer une structure Etudiant avec numéro, nom, prénom, date de naissance un
tableau à deux colonnes (matières et notes) et une moyenne.
4.Ecrivez une fonction read qui permet de lire un étudiant.
5.Ecrivez une fonction write qui permet d'afficher un étudiant.
6.Mettez dans la fonction main
1. La déclaration d'un tableau de plusieurs étudiants.
2. La lecture d'un nombre d'étudiants fournit par l'utilisateur (appelez la
fonction read).
3. Calculez la moyenne de chaque étudiant.
4. Affichez le majorant dans chaque matière.
5. Affichez le majorant de la classe.
6. Affichez la relevé liste des relevés des notes des étudiants.

64

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P


Fin

POO, Partie 1 : Programmation Structurée @ A.ZELLOU, Licence OID, UM6P

Vous aimerez peut-être aussi