Vous êtes sur la page 1sur 11

08/11/2015

Tableaux

Est un ensemble d'lments du mme type placs dans des


emplacements de mmoire qui peuvent tre rfrencs
individuellement par un indice d'un identificateur unique.

Le langage C/C++ Cela signifie que nous pouvons stocker 5 valeurs de type int dans un
tableau sans avoir dclarer 5 variables diffrentes, chacune avec
TOUHTOUH Samira un identifiant diffrent.

Ecole Nationale des Sciences Appliques dEl Jadida


samira.touhtouh@gmail.com
0 1 2 3 4

Dclaration Par consquent, afin de dclarer un tableau appel T que celui


indiqu sur le schma ci-dessus, on utilise:

Comme une variable ordinaire, un tableau doit tre dclare avant


d'tre utilise :
nom du type [lments] int T [5];

O type est un type valide (comme int, float ...), le nom est un
identifiant valide et le champ des lments (qui est toujours entre Le champ des lments entre crochets [] qui reprsente le nombre
crochets []), indique combien de ces lments, le tableau doit d'lments du tableau, doit tre une valeur constante, puisque les
contenir. tableaux sont des blocs de mmoire non-dynamique dont la taille
doit tre dtermine avant l'excution.

1
08/11/2015

Initialiser un tableau
Cette dclaration va crer un tableau comme celui-ci:

Les lments des tableaux sont automatiquement initialiss avec 0 1 2 3 4


leurs valeurs par dfaut. Ils sont remplis de zros.
16 2 77 40 12071

Dans les deux cas lorsque nous dclarons un tableau, nous avons la
possibilit d'affecter des valeurs initiales de chacun de ses lments La quantit de valeurs entre accolades {} ne doit pas tre plus grand que
en enfermant les valeurs entre accolades { }. le nombre d'lments que nous dclarons pour le tableau entre crochets [].

int T [5] = { 16, 2, 77, 40, 12071 };


Par exemple, dans l'exemple du tableau T nous avons dclar qu'il
dispose de 5 lments et dans la liste des valeurs initiales entre accolades
{} nous avons spcifi 5 valeurs, une pour chaque lment.

Accs aux valeurs dun tableau

Lorsque l'initialisation des valeurs est prvue, C++permet de laisser


les crochets [] vide. Dans ce cas, le compilateur suppose une taille En tout point d'un programme dans lequel un tableau est visible,
pour le tableau qui correspond au nombre de valeurs comprises nous pouvons accder la valeur de l'un de ses lments
entre accolades {}: individuellement comme si c'tait une variable normale, tant ainsi
en mesure de lire et modifier sa valeur.

nom[indice]
int T [] = { 16, 2, 77, 40, 12071 };

T avait 5 lments et chacun de ces lments est de type int, le nom


que nous pouvons utiliser pour dsigner chaque lment est la
Aprs cette dclaration, tableau T contient 5 entier, puisque nous suivante:
avons prvu 5 valeurs d'initialisation.

T[0] T[1] T[2] T[3] T[4]

2
08/11/2015

Le troisime lment de T est spcifi T[2], puisque le premier est T


Par exemple, pour stocker la valeur 75 dans le troisime lment de [0], le second est T [1]. Par consquent, si nous crivons T [5], On va
T, nous pourrions crire la dclaration suivante: accder la sixime lment de T et on dpassera la taille du tableau
T[2] = 75;

Pour passer la valeur du troisime lment de T une variable


appele a, nous pourrions crire: En C++, on peut dpasser la plage valide d'indices pour un tableau.
a = T[2]; Cela peut crer des problmes, puisque l'accs aux lments hors de
porte ne doit pas provoquer d'erreurs de compilation, mais peut
provoquer des erreurs d'excution.

// Exemple tableau :

Que produit cet algorithme?


Les crochets [], effectuent deux tches diffrentes:
#include <iostream>
1)spcifier la taille des tableaux quand ils sont dclars, using namespace std;

int T [] = {16, 2, 77, 40, 12071};


2) prciser lindices des lments du tableau concrtes. int n, result=0;
int main ()

{
for ( n=0 ; n<5 ; n++ )
int T[5]; // dclaration dun nouveau tableau. {
T[2] = 75; // accder un lment du tableau. result += T[n];
}
cout << result;
return 0;
}

3
08/11/2015

Les tableaux multidimensionnels


T reprsente un rseau bidimensionnel de 3 par 5 lments de type
Les tableaux multidimensionnels peuvent tre dcrits comme "des int. La faon de dclarer ce tableau en C++ est:
tableaux de tableaux". Par exemple, un rseau bidimensionnel peut
tre imagin comme un tableau bidimensionnel compos
int T [3][5];
d'lments, chacun d'eux d'un mme type de donnes uniforme.

0 1 2 3 4

0
1 Le moyen pour rfrencer le deuxime lment verticalement et le
2 quatrime lment est :

T [1][3];

Exemple :
Exemple 2
crire un programme qui lit 10 nombres entiers dans un tableau avant
den rechercher le plus grand et le plus petit : Soit le tableau t dclar ainsi :
float t[3] [4] ;

crire les (seules) instructions permettant de calculer, dans une


variable nomme som, la somme des lments de t :

4
08/11/2015

Les fonctions
Type est le type des donnes retournes par la fonction de donnes.

Utilisation des fonctions pour une programmation structure en C++. Nom est l'identifiant par lequel il sera possible d'appeler la fonction.

Une fonction est un groupe d'instructions qui est excute quand il est paramtres: Chaque paramtre est constitu d'un spcificateur de type de
appel un certain point du programme. donnes, suivi par un identifiant, comme toute dclaration de variables
rgulire (par exemple: int x). Il agit au sein de la fonction comme une
variable locale.
type nom de la fonction (parameter1, parameter2, ...)
{
instructions Instructions, est le corps de la fonction. Il s'agit d'un bloc d'instructions
} entre accolades {}.

Exemple :

#include <iostream> La fonction principale commence par dclarer la variable z de type int. Il
using namespace std; fait ensuite un appel une fonction appele addition.

int addition (int a, int b)


{
int r;
r=a+b;
return (r);
} La relation entre paramtres et arguments :
int main ()
{ Dans la fonction principale nous avons appel la fonction addition qui passe
int z; deux valeurs: 5 et 3, qui correspondent l'int a et lint b, paramtres
z = addition (5,3); dclars pour la fonction addition. 5 et 3 sont les arguments de la fonction.
cout << "The result is " << z;
return 0;
}

5
08/11/2015

La fonction addition dclare une autre variable locale (int r), et au moyen #include <iostream>
de l'expression r = a + b, il attribue r le rsultat de a plus b. using namespace std;
int addition (int a, int b)
{
int r;
r=a+b; Variables locales
return (r);
}
int main ()
L'appel une fonction (addition (5,3)) est remplac par la valeur qu'elle {
retourne (8). int z;
z = addition (5,3);
cout << "The result is " << z;
cout << "The result is " << z; return 0;
}

Exemple :
Dans la fonction principale => plusieurs appels la fonction soustraction.
#include <iostream>
using namespace std;

int soustraction (int a, int b)


Des mthodes diffrentes d'appel de fonction.
{
int r;
r=a-b;
return (r);
} Il faut tenir compte que l'appel d'une fonction peut tre remplace par la
int main ()
valeur retourner par la fonction.
{
int x=5, y=3, z;
z = soustraction(7,2); z = soustraction (7,2);
cout << "Le premier rsultats est : " << z << '\n';
cout << " Le deuxime rsultat est : " << soustraction (7,2) << '\n'; cout << "The first result is " << z;
cout << "Le troisime rsultat est :" << soustraction (x,y) << '\n';
z= 4 + soustraction(x,y);
cout << " Le quatrime rsultat est :" << z << '\n'; aussi
return 0;
}

cout << "The second result is " << soustraction (7,2);

6
08/11/2015

Fonction sans valeur retourner : lutilisation de VOID


cout << Troisime rsultat " << soustraction (x,y);

Dans la dernire expression, les paramtres de soustraction sont des Pour dclarer une fonction
variables au lieu de constantes. Les valeurs transmises la fonction nom du type (parameter1, parameter2, ...) {instructions}
soustraction sont les valeurs de x et y, qui sont de 5 et 3 respectivement, ce
qui donne comme rsultat 2.
La dclaration commence par un type, qui est le type de la fonction elle-
mme (par exemple, le type de la donne qui sera renvoy par la fonction).
z = 4 + soustraction (x,y);
Si on veut pas retourner de valeur?

Pour afficher un message lcran. Nous n'avons pas besoin de retourner


de valeur. Dans ce cas, nous devrions utiliser le type void pour la fonction.
Il s'agit d'un prescripteur spcial qui indique l'absence de Type.

Exemple :
Void peut galement tre utilis dans la liste des paramtres de la fonction
permettant de spcifier que nous voulons que la fonction prenne pas de
#include <iostream> paramtres rels.
using namespace std;
Exemple, la fonction Message aurait t dclar comme:
void message ()
{
void message (void)
cout << Je suis une fonction!";
{
}
cout << Je suis une fonction!";
int main () }
{
message ();
return 0; En C + +, une liste de paramtres peut tre simplement laiss vide si nous
} voulons une fonction sans paramtres;

Lutilisation des parenthses est obligatoire dans le cas des fonctions.

7
08/11/2015

Exemple :
dclarer la fonction avant son utilisation dans main, de
Quelle modification faut-il apporter au programme suivant pour quil prfrence au dbut :
devienne correct :
#include <iostream>
#include <iostream> using namespace std ;
using namespace std ; main()
main() { int fct (int) ; // dclaration de fct ; on pourrait crire int fct (int x)
{ int n, p=5 ;
int n, p=5 ;
n = fct (p) ;
n = fct (p) ;
cout << "p = " << p << " n = " << n ;
cout << "p = " << p << " n = " << n ;
} }
int fct (int r) int fct (int r)
{ return 2*r ; { return 2*r ;
} }

Exemple 2 :
placer la dfinition de la fonction avant celle de la fonction main : Quels rsultats fournira ce programme :

#include <iostream>
using namespace std ;
int n=10, q=2 ;
#include <iostream> main()
{
using namespace std ; int fct (int) ;
void f (void) ;
int n=0, p=5 ;
n = fct(p) ;
int fct (int r) cout << "A : dans main, n = " << n << " p = " << p
<< " q = " << q << "\n" ;
{ return 2*r ; }
f() ;

} int fct (int p)


{
main() int q ;
q =2*p +n;
{ int n, p=5 ; cout << "B : dans fct, n = " << n << " p = " << p
<< " q = " << q << "\n" ;
n = fct (p) ; }
return q ;

cout << "p = " << p << " n = " << n ; void f (void)
{
} int p = q * n ;
cout << "C : dans f, n = " << n << " p = " << p
<< " q = " << q << "\n" ;
}

8
08/11/2015

Arguments passs par valeur et par rfrence


Ce que nous avons fait dans ce cas tait d'appeler fonctionner
Dans toutes les fonctions que nous avons vus, les arguments passs plus passer les valeurs de x et y, soit 5 et 3 respectivement, mais pas
aux fonctions ont t passs par valeur. les variables x et y eux-mmes.

Cela signifie que lorsque vous appelez une fonction avec des
paramtres, ce que nous avons passs la fonction taient des
copies de leurs valeurs, mais jamais les variables elles-mmes.

Par exemple, supposons que nous avons appel notre premier ajout De cette faon, lorsque la fonction est appele outre, la valeur de ses
de fonction en utilisant le code suivant: variables locales a et b devenir 5 et 3 respectivement, mais toute
modification de A ou B au sein de la fonction ajout n'aura aucun
int x=5, y=3, z; effet sur les valeurs de x et y extrieures , parce que les variables x et
y ne sont pas eux-mmes passs la fonction, mais seulement des
z = addition ( x , y );
copies de leurs valeurs au moment de la fonction a t appele.

Mais il pourrait y avoir certains cas o vous avez besoin de manipuler Dcouper son projet
de l'intrieur en fonction de la valeur d'une variable externe. Pour ce
faire, nous pouvons utiliser des arguments passs par rfrence, comme Lutilisation dun seul fichier pour un programme peut rendre la
dans la fonction double de l'exemple suivant: lisibilit du programme mdiocre.
#include <iostream>
using namespace std; Mme si l'on dcoupe bien son projet en fonctions, ce dernier est
void duplicate (int& a, int&b, int& c) difficile relire si tout est contenu dans le mme fichier.
{
a*=2;
b*=2;
La notion de porte
c*=2;
} La porte d'une variable ou d'une fonction est la partie du
int main ( ) programme o cette dernire est utilisable.
{
int x=1, y=3, z=7;
duplicate (x, y, z); -Porte au niveau d'un bloc;
cout << "x=" << x << ", y=" << y << ", z=" << z;
return 0; -Porte au niveau d'un fichier.
}

9
08/11/2015

Au niveau d'un fichier


Au niveau d'un bloc Une porte au niveau d'un fichier signifie qu'une variable n'est utilisable, visible,
que de sa dclaration jusqu' la fin du fichier dans lequel elle est dclare.
Une porte au niveau d'un bloc signifie qu'une variable n'est
utilisable, visible que de sa dclaration jusqu' la fin du bloc dans Pour obtenir une variable ayant une porte au niveau d'un fichier, il est
ncessaire de la dclarer en dehors de tout bloc, par exemple :
lequel elle est dclare.
#include <iostream>
#include <stdio.h> using namespace std;
int main(void) {
int nombre = 3;
{ int nombre = 3;
cout<<nombre; } int triple(void) {
return nombre * 3;
}
/* Incorrect ! */
cout<<nombre; int main(void) {
return 0; } nombre = triple();
cout<<nombre;
return 0;
Dans ce code, la variable nombre est dclare dans un sous-bloc. Sa }
porte est donc limite ce dernier et elle ne peut pas tre utilise Dans ce code, la variable nombre a une porte au niveau du fichier et peut par
en dehors. consquent tre aussi bien utilise dans la fonction triple que dans la
fonction main.

La notion de masquage #include <stdio.h>

Dans le cas de lutilisation de plusieurs variables, leurs portes int nombre = 10;
dpend de comment elles sont utilises?. Si elles sont utilises dans int main(void) {
un mme bloc, le compilateur retournera une erreur. int nombre = 20;
Cout<<nombre;
int main(void) return 0;
{ int nombre = 10; }
int nombre = 20;
return 0;
}

Si elles ont des portes diffrentes, alors celle ayant la porte la plus
faible sera privilgie, on dit qu'elle masque celle(s) de porte plus
leve. Dans l'exemple qui suit, c'est la variable du bloc de la
fonction main qui sera affiche.

10
08/11/2015

Diviser le projet C/C++ en plusieurs fichier


la fonction addition est dfinie dans le fichier fonctions
la fonction addition est dclare dans le fichier main.
La fonction addition a t plac dans le mme fichier que la fonction le mot cl extern est facultatif devant un prototype.
main.
Le cas des variables
En c et c++, nous avons la possibilit de les placer dans un autre
fichier. ( dcouper un projet). La mme mthode peut tre applique aux variables, mais
uniquement celle ayant une porte au niveau d'un fichier.
On peut les rpartir dans deux fichiers distincts :
Une dclaration de variable sera prcde du mot cl extern alors
que la dfinition non.
Dans le fichier main il faut inclure le prototype de la fonction addition
en le prcdant du mot cl extern. Seule la dfinition peut comporter une initialisation.

/* Fichier autre.c */
int nombre = 10; /* une dfinition */
extern int valeur; /* une dclaration */

Fichier fonction.c */

static int nombre = 10;

/* Fichier main.c */

#include <stdio.h>
static int nombre = 20;
int main(void) {
printf("%d\n", nombre);
return 0;
}

11

Vous aimerez peut-être aussi