0% ont trouvé ce document utile (0 vote)
113 vues21 pages

Introduction aux tableaux en C et PASCAL

Transféré par

Anonymous wtpasa8
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 DOC, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
113 vues21 pages

Introduction aux tableaux en C et PASCAL

Transféré par

Anonymous wtpasa8
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 DOC, PDF, TXT ou lisez en ligne sur Scribd

Chapitre 3 : Tableaux

A) Tableaux un seul indice :


1) Domaines d'utilisation :
On utilise souvent les tableaux un seul indice pour :
- calculer les statistiques de base (moyenne, cart-type,
plus grande et plus petite valeurs , ...)
- trier, rechercher un lment en particulier
- afficher les informations traites (avant ou aprs le
tri, satisfont aux conditions voulues, etc ...)

2) Dclaration :
2.a) Faon directe :
int age[15] ;
float taille[25], poids[70] ;
age est un tableau de 15 entiers. age[0], age[1], ...,
A[14] sont 15 lments du tableau age. Chacun est de
type entier.
taille est un tableau de 25 rels. Ses lments sont
taille[0], taille[1], ..., taille[24].
etc ...
La faon de dclarer directement les tableaux est simple.

2.b) Faon structure :


Dclarer les tableaux age, taille, poids, sexe d'un groupe
de 150 personnes ou moins.
1. Style de C :
#define
int
float
char
int

Chapitre 3 : Les tableaux

MAX_PERS

150

age[MAX_PERS]
taille[MAX_PERS], poids[MAX_PERS]
sexe[MAX_PERS]
nbPers ; /* le nombre effectif de

;
;
;
personnes traites */

Page 62

2. Style en PASCAL (avec typedef : dfinition de type)


La dclaration typedef permet de crer des synonymes et
de les employer dans d'autres dclarations. Cette technique
est utilise pour clarifier un programme:
typedef
typedef

int Entier
; /* Entier est synonyme int */
char * Chaine ; /* Chaine est synonyme char*

*/

Avec :
typedef int
TabEntier[MAX_PERS] ;
TabEntier est le nom du type tableau de 150 entiers.
Les dclarations des tableaux peuvent se faire comme suit :
#define

MAX_PERS

typedef
typedef
typedef

int
TabEntier[MAX_PERS] ;
float TabReel [MAX_PERS] ;
char TabCar[MAX_PERS]
;

TabEntier
TabReel
TabCar

150

age ;
taille, poids ;
sexe ;

/* tableau d'entiers */
/* tableau des rels */
/* tableau des caractres */

3. Style de C++ (utilisation de const la place de #define)


(Ce n'est plus une matire du IFT 1160)
const int

MAX_PERS = 150;

float taille[MAX_PERS], poids[MAX_PERS];


char
sexe[MAX_PERS];
etc ...

/* non valide en */
/* C standard
*/

3) Schma d'un tableau :


On reprsente un tableau comme une commode plusieurs tiroirs
dont chaque tiroir contient un seul objet de mme type :

age[0]
age[1]
age[2]
age[3]
......
......
age[14]

Chapitre 3 : Les tableaux

45

20

27

49

...

....

21

Page 63

4) Manipulations d'un tableau :


1. On cre souvent des tableaux en lisant un ou plusieurs
fichiers de donnes. La boucle while est frquente :
Exemple :
......
int n = 0 ; /* compteur */
while ( !feof(donnees) ) {
fscanf(donnees,"%f\n", &taille[n]) ;
n++ ;
}
fclose (donnees);
2. On parcoure les indices d'un tableau avec la boucle for.
notez que le premier indice est zro :
for ( i = 0 ; i < nbElement ; i++ ) .....
3. Sur l'en-tte des fonctions, on n'a pas besoin de
mentionner les bornes des tableaux un seul indice :
float moyenne ( float t[], int n )
/* Cette fonction calcule et retourne la valeur
moyenne d'un tableau t qui contient n rels */
......
void trier ( int age[], float taille[], int nbPers)
4. Le nom d'un tableau n'est pas du tout une variable. C'est
une constante de type pointeur : c'est l'adresse de son
premier lment indice 0.
float taille[10] ;
taille

est quivalent

&taille[0]

Ainsi taille = ..... ; est toujours invalide


(on affecte une variable, pas une constante).
5. En C, on peut dclarer et initialiser un tableau :
#define NB_NOTES 7
float bareme[NB_NOTES] = { 100.0, 100.0, 25.0, 35.0, 40.0,
100.0, 100.0 } ;

Chapitre 3 : Les tableaux

Page 64

Ainsi, bareme[0] vaut 100.0


bareme[1] vaut 100.0
bareme[2] vaut 25.0
etc ....

(on corrige l'intra sur 100)


(on corrige le final sur 100)
(on corrige le TP1 sur 25)

6. En C, si t est le nom d'un tableau, on a :


t + i
* (t + i)

<====>
<====>

&t[i]
t[i]

7. On peut utiliser des pointeurs pour manipuler un tableau.


Cependant, il est souhaitable d'tre d'abord capable de
manipuler les indices avant d'utiliser des pointeurs qui,
eux provoquent souvent des erreurs si on ne matrise pas
bien le concept des pointeurs.
Exemples : crire une fonction qui affiche le contenu du
tableau des tailles l'cran :
a. avec les indices (plus simples comprendre)
void afficher ( float taille[], int nbPers )
{ int i ;
for ( i = 0 ; i < nbPers ; i++ )
printf("%3d) %8.2f\n", i, taille[i]) ;
}
b. avec un pointeur (un peu plus compliqu)
void afficher ( float * P, int nbPers )
{ int i ;
for ( i = 0 ; i < nbPers ; i++ )
printf("%3d) %8.2f\n", i, *(P+i) ) ;
}
OU (encore plus compliqu) :
void afficher ( float * P, int nbPers )
{ int i ;

while ( i < nbPers )


printf("%3d) %8.2f\n", i++, *P++ ) ;

L'utilisation de pointeur est plus frquente dans le


traitement des chanes de caractres (sous forme tableau des
caractres ou pointeur vers le type caractre).

Chapitre 3 : Les tableaux

Page 65

5) Exemples et exercices :
Exemple 1 : cration des tableaux et calculs des statistiques :
On dispose du fichier texte "[Link]". Chaque ligne de ce
fichier contient les informations d'une seule personne: sa
taille et son poids.
On a 20 personnes ou moins dans le fichier.
crire un programme utilisant des tableaux et des fonctions pour
calculer et afficher les statistiques suivantes :
Pour 17 personnes lues dans le fichier:
1.

La taille
- moyenne
:
- la plus grande :
- la plus petite :

2.

Le poids
- moyen
- le plus lourd
- le plus lger

:
:
:

1.68 mtre
1.83 mtre
1.43 mtre

61.69 kgs
86.20 kgs
42.50 kgs

Solution :
/* Fichier Tableau1.C
Matire principale

*/

: tableaux un seul indice

Donnes : "[Link]" (une taille et un poids par ligne)


1.63
54.9
1.57
56.3
1.73
63.0
etc ...

#include <stdio.h>
#define MAX_PERS 20 */ 20 personnes ou moins dans le fichier */
void creer ( float taille[], float poids[], int * P )
{
FILE * aLire = fopen("[Link]", "r");
int n = 0 ;
while ( !feof(aLire) ) {
fscanf(aLire, "%f%f\n", &taille[n], &poids[n]);
n++;
}
fclose (aLire);
*P = n ;
}

Chapitre 3 : Les tableaux

Page 66

/* Cette fonction permet de calculer la valeur moyenne


/ d'un tableau t qui contient exactement n rels. */
float moyenne ( float t [], int n )
{
float somme = 0.0 ;
int

i ;

for ( i = 0 ; i < n ; i++ ) somme += t[i];


return somme / n ;
}
/* Cette fonction dtermine la plus grande et la plus
petite valeur dans un tableau T de N rels. */
void determiner ( float t[], int n, float * PG, float * PP )
{
float plusGrande = t[0] ,
plusPetite = t[0] ;
int i ;
for ( i = 1 ; i < n ; i++ ) {
if ( t[i] > plusGrande ) plusGrande = t[i] ;
if ( t[i] < plusPetite ) plusPetite = t[i] ;
}
*PG = plusGrande ;
*PP = plusPetite ;
}
void main()
{
float
taille [MAX_PERS],
poids [MAX_PERS] ;
int
nbPers
;
float grandeTaille, petiteTaille,
lourdPoids , legerPoids
;
creer (taille, poids, &nbPers) ;
printf("Pour %d personnes lues dans le fichier:\n\n", nbPers);
determiner (taille, nbPers, &grandeTaille, &petiteTaille);
printf("
printf("

1.

La taille\n");
- moyenne
: %6.2f mtre\n",
moyenne(taille, nbPers));

printf("
- la plus grande : %6.2f mtre\n", grandeTaille);
printf("
- la plus petite : %6.2f mtre\n", petiteTaille);
printf("\n\n");

Chapitre 3 : Les tableaux

Page 67

determiner (poids, nbPers, &lourdPoids, &legerPoids);


printf("

2.

Le poids\n");

printf("

- moyen
: %6.2f kgs\n",
moyenne(poids, nbPers));

printf("
printf("

- le plus lourd
- le plus lger

: %6.2f kgs\n", lourdPoids);


: %6.2f kgs\n", legerPoids);

}
Exercice 1 :
Ajouter au programme de l'exemple 1 (exemple prcdent)

1.

une fonction avec l'en-tte suivant :


void afficher ( float taille[], float poids[], int nbPers )
et un appel de cette fonction pour afficher le contenu
de ces deux tableaux l'cran .

2.

une fonction avec l'en-tte suivant :


void afficher2( float * P, float * S, int n )
et un appel de cette fonction pour afficher le contenu
des 5 premiers lments des deux tableaux taille et poids
l'cran .

Exemple 2 (tri d'un tableau) :


Soit t un tableau de n rels (par exemple). crire un bloc
d'instructions permettant de trier le tableau t selon la
mthode du tri par slection (vue au cours pralable IFT 1810) :
Solution :
int i, j, indMinimum ;
float temporaire
;
for ( i = 0 ; i < n - 1 ; i++ ) /* du premier avant dernier */
{
indMinimum = i ;
for ( j = i + 1 ; j < n ; j++ )
if (t[j] < t[indMinimum]) indMinimum = j ;
if ( indMinimum != i ) {

/* on change */

temporaire
= t[i] ;
t[i]
= t[indMinimum] ;
t[indMinimum] = temporaire ;
}

Chapitre 3 : Les tableaux

Page 68

notes :
1)
2)

on va rviser en classe cette mthode de tri ;


on apprendra une autre mthode de tri rapide.

Exemple 3 (recherche avec une sentinelle) :


Programmer l'algorithme suivant qui permet de chercher un
lment dans un tableau (tri ou non) :
Soit t un tableau de n lments (tris ou non). Soit
aChercher une valeur chercher. L'algorithme de la
recherche avec une sentinelle se prsente comme suit :
indice = -1
t[n] = aChercher
Rpter
indice = indice + 1
Jusqu' t[indice] = aChercher
Si indice < n on trouve "indice"
Sinon on ne trouve pas.
Solution :
void chercher ( int t[], int n, int aChercher, int * P )
{
int indice = -1 ;
t[n] = aChercher ;
do
indice++ ;
while (t[indice] != aChercher) ;
*P = indice ;
}
Exemple d'utilisation :
/* Chercher un numro donn dans un tableau des numros
de nbEmp employs : */
#define MAX_EMP 1250
int unNumero, numero[MAX_EMP] ;
int nbEmp, indice ;
.......
printf("Quel est le numro de l'employ recherch ? ");
scanf("%d", &unNumero);
chercher ( numero, nbEmp, unNumero, &indice) ;

Chapitre 3 : Les tableaux

Page 69

if (indice == nbEmp )
printf("Dsol! on ne le trouve pas %d\n", unNumero);
else
{
printf("Son numro
: %d\n", numero[indice]);
printf("son ge
: %d\n", age [indice]);
etc ....
}
Exercice 2 (recherche dichotomique dans un tableau tri) :
Le tableau devrait tre tri avant d'appliquer cette mthode.
Soit le bloc d'instructions suivant qui rsume la mthode de
recherche dichotomique dans un tableau tri :
#define VRAI
#define FAUX
int

1
0

indice , mini, maxi, milieu , trouve ;

trouve = FAUX ; /* on ne trouve pas encore */


mini
maxi

= 0 ;
= N - 1 ; /* on examine tout le tableau */

while ( !trouve && (mini <= maxi) ) {


milieu = ( mini + maxi ) / 2 ;
if ( aChercher < t[milieu] )
maxi = milieu - 1 ;
else
if ( aChercher > t[milieu] )
mini = milieu + 1 ;
else
trouve = VRAI ;
}
if (trouve)
else

indice = milieu ;
printf("On ne le trouve pas!\n");

Simuler le programme avec le tableau t qui contient 7 lments.


( n = 6 ). La valeur recherche est :

Chapitre 3 : Les tableaux

a)

27

b)

100

c)

50

Page 70

t[0]
t[1]
t[2]
t[3]
t[4]
t[5]
t[6]

20

27

49

79

90

100

Exercice 3 (fusion de deux tableaux tris) :


crire une fonction qui fusionne deux tableaux d'entiers ordonns
en un seul tableau ordonn. crire un programme pour tester le bon
fonctionnement de votre fonction.

6) Exemple de rvision :
On dispose du fichier texte "[Link]". Chaque ligne de ce fichier
contient les informations d'un seul employ. On y trouve :
- le poste de travail

- le numro d'employ
:
- le nombre d'heures de travail:
- le taux d'horaire
:

un caractre :
'A' pour analyste
'P' pour programmeur
'O' pour oprateur
'S' pour secrtaire
un entier
un rel
un rel

On a 250 employs ou moins dans le fichier.


Contenu du fichier :
P 2754 40.01
P 1848 40.02
S 2636 32.50
A 1750 30.03
A 2168 33.04
O 4612 42.00
etc ....

Chapitre 3 : Les tableaux

19.01
23.01
12.00
25.16
25.20
10.12

Page 71

crire un programme en C qui permet :


- de lire le fichier, de mmoriser les donnes dans 3 tableaux :
poste, numero, salHebdo (salaire hebdomadaire)
- d'offrir un menu et traiter le choix de l'usager :
. afficher la liste des employs
. trier selon les numros des employs
. rechercher un employ (recherche avec 1 sentinelle si le
tableau n'est pas encore tri et recherche dichotomique
si le tri est fait)
. calculer et afficher quelques statistiques
Une solution possible :
/* Fichier : Tableaux.C
Objectifs pdagogiques : revoir presque toutes les matires
vues au cours IFT 1810, cours
pralable au langage C.
Donnes : [Link] contenant moins de 250 employs
*/
#include <stdio.h>
#include <ctype.h> /* pour la Conversion de type (ex. toupper(...))*/
#define MAX_EMP

250

/* au maximum, 250 employs */

/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Auteur : Jean, CHOQUETTE
Date : ...... 20xx
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ But de cette fonction :
+
+ La fonction permet de calculer et de retourner le meilleur
+
+ salaire hebdomadaire d'un poste de travail donn (voulu)
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Paramtres d'entre : Le tableau des salaires hebdo.
+
+
Le nb. d'employs N
+
+
Le poste voulu : un caractre
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Appel par la fonction principale
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
float meilleur( float salHebdo[],char poste[], int n, char posteVoulu)
{ float plusGrand = 0;
int
i ;
for (i = 0 ; i < n ; i++)
if (poste[i] == posteVoulu)
if (salHebdo[i] > plusGrand) plusGrand = salHebdo[i] ;
return plusGrand ;
}

Chapitre 3 : Les tableaux

Page 72

void obtenir(char * C)
{ char leChoix ;
int valide
; /* Oui ou Non le choix est valide */
printf("Tapez :\n");
printf("
printf("
printf("
printf("
printf("

A
T
C
S
Q

pour
pour
pour
pour
pour

visualiser\n");
trier\n");
rechercher\n");
statistiques\n");
quitter\n");

do {
printf("\nVotre choix parmi A, T, C, S ou Q ");
fflush(stdin);
leChoix = toupper(getchar());
valide = (

leChoix == 'A' || leChoix == 'T' ||


leChoix == 'C' || leChoix == 'S' ||
leChoix == 'Q' );
if (!valide)
printf("votre choix est imprvu, retapez S.V.P. ");

} while (!valide);
*C = leChoix ;

/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Auteur : Lise, LALIBERTE
Date : ...... 20xx
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ But de cette fonction :
+
+ La fonction permet de lire le fichier [Link], de remplir +
+ les 3 tableaux et de compter le nb. effectif d'employs lus
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Paramtres d'entre : Aucun
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Paramtres de sortie : Les trois tableaux,
+
+
un paramtre transmis par pointeur pour +
+
le nb. effectif d'employs lus
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Appel par la fonction principale
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
void lireCreer ( char poste[], int numero[], float salHebdo[], int * P)
{ int n = 0 ; /* compteur du nombre effectif d'employs lus
dclarer et "initialiser" (style courant de C) */
float nbHr, taux ;
FILE * donnees ;
donnees = fopen("[Link]", "r");

if (donnees == NULL)
printf("Problme d'ouverture du fichier lire!\n");

Chapitre 3 : Les tableaux

Page 73

else {
while (!feof(donnees)) {
fscanf(donnees,"%c%d%f%f\n", &poste[n], &numero[n],
&nbHr, &taux);
salHebdo[n] = nbHr * taux ;
n++;
};
fclose(donnees);
*P = n ;
}
}
/* afficher "explicitement" un poste de travail
Matires pdagogiques : slection multiple avec switch */
void ecrire (char unposte)
{
switch (unposte) {
case
case
case
case

'A'
'P'
'O'
'S'

:
:
:
:

printf("
printf("
printf("
printf("

}
printf("\n");

Analyste"); break ;
Programmeur"); break ;
Oprateur"); break ;
Secrtaire");

void afficher ( char poste[], int numero[], float salHebdo[], int n )


{ const int parEcran = 20 ;
int i ;
printf("Liste d'employs :\n");
for (i = 0 ; i < n ; i++)
{
printf("%4d) %5d %7.2f", i+1, numero[i], salHebdo[i]);
ecrire(poste[i]);
if ( (i + 1) % parEcran == 0 || i == (N-1))
{
printf("\nAppuyez sur Q pour quitter ");
if ( i < N-1 ) printf(" ou Entre pour continuer ");
fflush(stdin);
if (toupper(getchar()) == 'Q') break ;
}

Chapitre 3 : Les tableaux

Page 74

void demander(int * P)
{
printf("Quelques numros existants : 4371, 1750, 2325, 3215\n");
printf("Quel est le numro de l'employ recherch ? ");
scanf("%d", P);
}
void chercherSenti (int aChercher, int numero[], int nbEmpl, int * P)
{ int indice ;
printf("\nRecherche squentielle avec une sentinelle :\n\n");
indice = - 1 ;
numero[nbEmpl] = aChercher ;
do indice++;
while ( numero[indice] != aChercher );
if (indice == nbEmpl) indice = -1 ;
*P = indice ;
}
void continuer()
{ printf("\n\nAppuyez sur Entre ");
fflush(stdin);
getchar();
}
void chercherDicho (int aChercher, int numero[], int nbEmpl,
int * P)
{ int mini, maxi, milieu ;
int trouve ; /* Oui (1) ou Non (0) on trouve le numro recherch*/
printf("\nRecherche dichotomique dans un tableau tri:\n\n");
mini = 0 ;
maxi = nbEmpl - 1 ;
trouve = 0 ; /* on ne trouve pas encore */
while ( !trouve && mini <= maxi ) {
milieu = (mini + maxi) / 2 ;
if (aChercher < numero[milieu])
maxi = milieu - 1 ;
else if (aChercher > numero[milieu])
mini = milieu + 1 ;
else
trouve = 1 ; /* on trouve! */
}
if (!trouve) *P = -1 ;
else *P = milieu ;
}

Chapitre 3 : Les tableaux

Page 75

void trier ( char poste[], int numero[], float salHebdo[],


int nbEmpl)
{ int i, j, indMin ;
int
tempoNum
;
float
tempoSal
;
char
tempoPost
;
for ( i = 0 ; i < nbEmpl - 1 ; i++) {
indMin = i ;
for (j = i + 1 ; j < nbEmpl ; j++)
if ( numero[j] < numero[indMin] ) indMin = j ;
if ( indMin != i ) {
tempoNum
= numero[i];
numero[i]
= numero[indMin];
numero[indMin] = tempoNum
;
tempoSal
salHebdo[i]
salHebdo[indMin]

= salHebdo[i] ;
= salHebdo[indMin] ;
= tempoSal
;

tempoPost
poste[i]
poste[indMin]

= poste[i]
;
= poste[indMin] ;
= tempoPost
;

}
}

void main()
{
char

poste[MAX_EMP]

int

numero[MAX_EMP]

float salHebdo[MAX_EMP]

int

nbEmpl

char choix ;
int dejaTrie = 0 ; /* Faux au dbut */
int

aChercher, indice ;

lireCreer ( poste, numero, salHebdo, &nbEmpl );


do {
obtenir (&choix);
switch (choix) {
case 'A' : afficher ( poste, numero, salHebdo, nbEmpl ); break;

Chapitre 3 : Les tableaux

Page 76

case 'S' :

printf("meilleur salaire :\n");


printf(" - des analystes : %8.2f $\n",
meilleur(salHebdo, nbEmpl, 'A'));
printf(" - des oprateurs: %8.2f $\n",
meilleur(salHebdo, nbEmpl, 'O'));
continuer();
break ;

case 'C' : demander(&aChercher);


if(dejaTrie)
chercherDicho(aChercher, numero, nbEmpl, &indice);
else
chercherSenti(aChercher, numero, nbEmpl, &indice);
if (indice >= 0)
{ printf("Yahou!, on le trouve :\n");
printf("%5d %7.2f", numero[indice],
salHebdo[indice]);
ecrire(poste[indice]);
}
else printf("Dsol, on ne trouve pas %d\n", aChercher);
continuer();
break ;
case 'T' : trier ( poste, numero, salHebdo, nbEmpl);
dejaTrie = 1 ;
break ;

}
} while (choix != 'Q');

Excution :
Tapez
- A
- T
- C
- S
- Q

:
pour
pour
pour
pour
pour

visualiser
trier
rechercher
statistiques
quitter

Votre choix parmi A, T, C, S ou Q a


Liste d'employs :
1) 2754 760.59
2) 1848 920.86
3) 2636 390.00
4) 1750 755.55
5) 2168 832.61
6) 4612 425.04
7) 2325 405.20
8) 1512 811.76
9) 2340 762.58
10) 3428 925.34
11) 3563 487.50
12) 4101 422.50

Chapitre 3 : Les tableaux

Programmeur
Programmeur
Secrtaire
Analyste
Analyste
Oprateur
Oprateur
Analyste
Analyste
Programmeur
Secrtaire
Secrtaire

Page 77

13)
14)
15)
16)
17)
18)
19)
20)

4371
3629
2630
3215
3529
1538
4119
4121

645.85
967.21
606.42
807.82
454.52
929.19
879.70
648.59

Programmeur
Programmeur
Programmeur
Programmeur
Oprateur
Programmeur
Analyste
Programmeur

Appuyez sur Q pour quitter ou Entre pour continuer


21) 1023 857.11 Analyste
22) 1868 390.00 Secrtaire
23) 1944 390.00 Secrtaire
24) 1430 610.19 Programmeur
25) 3727 892.56 Programmeur
26) 4613 451.50 Oprateur
27) 3628 452.36 Oprateur
28) 4368 453.22 Oprateur
29) 2047 487.50 Secrtaire
30) 2565 422.50 Secrtaire
31) 3026 855.40 Programmeur
32) 4342 847.79 Analyste
33) 2451 822.76 Analyste
34) 1741 436.65 Oprateur
35) 1957 422.50 Secrtaire
36) 1327 853.75 Analyste
37) 1631 487.50 Secrtaire
38) 1644 390.00 Secrtaire
39) 2028 462.25 Oprateur
40) 2021 422.50 Secrtaire
Appuyez sur Q pour quitter
Tapez
- A
- T
- C
- S
- Q

:
pour
pour
pour
pour
pour

ou Entre pour continuer q

visualiser
trier
rechercher
statistiques
quitter

Votre choix parmi A, T, C, S ou Q s


meilleur salaire :
- des analystes :
- des oprateurs:

1217.20 $
760.59 $

Appuyez sur Entre


Tapez
- A
- T
- C
- S
- Q

:
pour
pour
pour
pour
pour

visualiser
trier
rechercher
statistiques
quitter

Votre choix parmi A, T, C, S ou Q c

Chapitre 3 : Les tableaux

Page 78

Quelques numros existants : 4371, 1750, 2325, 3215


Quel est le numro de l'employ recherch ? 2325
Recherche squentielle avec une sentinelle :
Yahou!, on le trouve :
2325 405.20 Oprateur
Appuyez sur Entre
Tapez
- A
- T
- C
- S
- Q

:
pour
pour
pour
pour
pour

visualiser
trier
rechercher
statistiques
quitter

Votre choix parmi A, T, C, S ou Q c


Quelques numros existants : 4371, 1750, 2325, 3215
Quel est le numro de l'employ recherch ? 5555
Recherche squentielle avec une sentinelle :
Dsol, on ne trouve pas 5555
Appuyez sur Entre
Tapez
- A
- T
- C
- S
- Q

:
pour
pour
pour
pour
pour

visualiser
trier
rechercher
statistiques
quitter

Votre choix parmi A, T, C, S ou Q t


Tapez
- A
- T
- C
- S
- Q

:
pour
pour
pour
pour
pour

visualiser
trier
rechercher
statistiques
quitter

Votre choix parmi A, T, C, S ou Q c


Quelques numros existants : 4371, 1750, 2325, 3215
Quel est le numro de l'employ recherch ? 3215
Recherche dichotomique dans un tableau tri:
Yahou!, on le trouve :
3215 807.82 Programmeur

Chapitre 3 : Les tableaux

Page 79

Appuyez sur Entre


Tapez
- A
- T
- C
- S
- Q

:
pour
pour
pour
pour
pour

visualiser
trier
rechercher
statistiques
quitter

Votre choix parmi A, T, C, S ou Q c


Quelques numros existants : 4371, 1750, 2325, 3215
Quel est le numro de l'employ recherch ? 6789
Recherche dichotomique dans un tableau tri:
Dsol, on ne trouve pas 6789
Appuyez sur Entre
Tapez
- A
- T
- C
- S
- Q

:
pour
pour
pour
pour
pour

visualiser
trier
rechercher
statistiques
quitter

Votre choix parmi A, T, C, S ou Q q

7) Tableau dynamique :
Si les donnes dpassent 64 kilo-octets, il est prfrable d'utiliser
un tableau dynamique o les donnes seront mmorises en zone de
mmoire dynamique.
Seules la dclaration et la demande d'allocation d'espace de mmoire
sont diffrentes :
const int MAX_EMP = 5000;
float * salHebdo ;
salHebdo = (float *) malloc (sizeof(float) * MAX_EMP);
Une fois que le tableau a t dclar et que l'espace de mmoire
dynamique a t allou, il suffit d'utiliser des indices pour
manipuler ce tableau dynamique :
salHebdo[23] dsigne le salaire hebdomadaire du 24 ime employ, etc.

Chapitre 3 : Les tableaux

Page 80

B) Les tableaux deux indices en C :


La plupart des applications des tableaux 2 indices sont en
calcul matriciel (mathmatiques). Pour le cours IFT 1160, nous
nous limitons un exemple simple : gestion des notes du cours
IFT 1160.

1) Dclaration du tableau des notes :


On peut dclarer un seul tableau 2 indices pour les notes o :
note [23] [0] vaut

82.7

signifie que la premire note (indice 0) du 24 ime tudiant


(indice 23) vaut 82.7.
Le premier indice dsigne le rang de l'tudiant ( la note de qui ? )
Le deuxime indice dsigne la catgorie de note ( pour quelle note ? ).
#define

MAX_ETUD 100 /* 100 tudiants ou moins */

#define

NB_NOTES

7 /*

7 notes (intra, final, tp1, tp2, tp3,


tps et globale)
*/

float note [MAX_ETUD] [NB_NOTES] ;

2) Manipulation :
1.

On utilise aussi la boucle for.

2.

On crit : note [12] [3], on n'crit pas note [12, 3].

3.

Sur l'en-tte d'une fonction, il faut donner au moins la


deuxime borne :
void afficher ( float note [] [NB_NOTES], int nbEtud)

3) Exemple :
crire une fonction et 2 appels de cette fonction pour afficher
l'cran :
- la moyenne d'intra
- la moyenne du final

Chapitre 3 : Les tableaux

(indice 0)
(indice 1)

Page 81

Solution :
float moyenne ( float note[] [NB_NOTES], int nbEtud, int catVoulu )
{ float somme = 0.0 ;
int
i
;
for ( i = 0 ; i < nbEtud ; i++ )
somme += note [i] [catVoulu] ;
return somme / nbEtud ;

Appels :
printf("La moyenne d'intra : %6.2f\n",
printf("La moyenne du final : %6.2f\n",

moyenne(note, nbEtud, 0) );
moyenne(note, nbEtud, 1) );

Exercices :
Exercice 1 (pour les tudiants en sciences mathmatiques) :
crire un programme qui comporte des fonctions pour tester les
calculs matriciels :
-

l'addition de deux matrices


la multiplication de deux matrices
la transposition d'une matrice
etc ...

Exercice 2 (carr magique) :


crire un programme permettant de fabriquer et d'afficher les
carrs magiques d'ordre impair entre 3 et 15.
Exemple :
Carr magique d'ordre 3 :
8
3
4

1
5
9

6
7
2

(La solution sera donne si l'exercice vous intresse).

Chapitre 3 : Les tableaux

Page 82

Vous aimerez peut-être aussi