Vous êtes sur la page 1sur 17

T ,1bl, .111:-s <l 1 du n c n : .

: 10 11
Tablea ux a 1 dimensio n
T ableaux .-l tlcu"' d1111 rns 1011s
• l bl ca u x à d e ux d1mcn s1011:.
rv1v 111p11 l.it1o n -. 1 lcmr11t,1 ,re~ d e t ,1 bl P,1ux
c lc m c nt.:m cs; de t .1 1.Jl ca u >'
Ap p hc.i t1 o n ,1ll La n g,1gc C
Lf-. cli,1 111 c-. d,, c,1t,1c t c rcs
pphca tion au L.rng.Jgc- C

David Célestin FAYE

UFR SAT/UGB
david-cel estin .fa ye©ugb.edu .sn

17 février 2020

t6 t6
O av, d Cc lc s t 111 FAYE D a vid C e lestm FAYE

~ dfum ta olea l!,. - · 41

0 Un tableau est une collection ordonnée de variables (appelées La déclaration d'un tableau s'effectue en donnant :
composantes du tableau ) ayant toutes le mêmê type . On
o son nom {identificateur de la variable tableau)
accède à chacune de ces variables individuellement à l'aide
d'un indice. 0 le domaine de variation de l'indice délimité par une borne
inférieure correspondant à l'indice minimal et la borne
o indice=valeur ordinale, c 'est à dire ayant un domaine de
supérieure correspondant à l'indice maximal.
valeurs finies et ordonnées. L' indice doit être de type scalaire.
o le type de ses composantes
;:, Chaque composante du tableau est référencée au moyen d'un
indice qui indique la position relative de la composante dans la • Syntaxe de définition :
suite et qui permet donc d'accéder à la composante.
Var <Nom_tab> Tableau[<indmin> . . <indmax >] de
o Un tableau T est donc défini par le type des indices et par le <type des composants>;
type des composantes.
o Les tableaux à une dimension, c'est-à-dire à un type d'indices, Exemple
appelés encore e n termes mathématiques vecteurs, sont
composés d'un ensembl e homogèn e d'éléments de même var tab_entier Tableau[l . . 10] de entier ;
type.
6 \\\
1 râti a''un tabléau. ..,..

u 1) :1ti !, c<·l ux<:rnpli :, le: t : 11,l r: :iu lluo l 1i l':!> l 11n v<:< tr·11r de tOO
.J 1 ., , t,ul 1,111· TAl\1.1•: A\I ,1 '1'!, I p.,~ 11
111w i,1111111111• dyn :i1 11 iq11 u 11 C<J tllp u: ,:i nl<::, qt1 i 111 : p1•1tvc nl pr<:ndr t: ciur• lw, v;il n11r~ Vr ,u. ~ e t
m., i:- 11 , 1,11iq 11 1· 11 , 1 '1••,t ,\ dit <' 11111' t,1111< 11111• (111i 111' drn 11 p.c· p :if> 1: tti rx . l.<1 1,;i l,l i::i 11 1: r n q11M1 <: y rcprl:r:cntr: 11n vr:<..t1;11r cl c ?.(1
de t.11lk .111 1,,111 , d1' l'<',t'<11t k1 11 d11 p1 op.1,111111w . l':i , co mpc>f::tntcr,, ch.,<11 nl' (:t ,int de typ <: r: ntiN f'l indid:c par une
11•n:-1'q11 l'nt, k 1H,n il111· d ' 0l0nw11t :, d'1111 t.1hl1•;111 doit !lt r0 li xl• ;\ lc·t t re m:ij11c:c11l r .
p1i1' 11 ch- m.ini1' 1<' d0ti11 itiw 11,,, d (' ~., d<- liniti on. c.1 So 11 vnnt, on rn p rfr,<: 111.<: l:1 :,t n1 r. t 11 rr: d ' 11 n t :il>l n;:i u m oyenn ant la
v Sv1t p.11 r ,emplt- I' (•, t, .,it dr p, ,,1-?,1,11nmr f,11 iv. 1111 d di 11it ion d ',m typ e <!Il (:cr iva nt :

lllO: ï'YPI·: < l<1 0 11t. lrl c n t. 0 11 r cl o t.y p o > TAllU;; ,\U 1<t. ypo 1nd ox > I Dt·:
T Ytl>: D11n < typ o c omp ooan t> ;
Alpht:1bot.
1) r t c ns11it c e n déd :'l rcr:1 les vc1 ri a bl cs d e cc typ e ta b lea u e n
(:c ri va 11 t :
\!AR !{0 v l ù : TA~LEA ll l Di 111 l ll O 1100 l 00 11 :
F.t' Qqu~, n c y : TA l\l.1': All I AJplmbot. J d11 l 1 llt. ill l'
VAR < l i~ t o va rL a bl o >: < l donttf i ca t our d e type>
So it po ur l'exe mpl e c i-d essou s :

dJun.·tableau · 7 IV
0 Dans la mé moire ce ntra le, les é lé m e nts d'un tabl ea u sont
CONST Ma.xElement s = 100 ; stockés de faço n lin éaire , dans des zones contiguës .
TYPE Dim = 1 .. MaxElements; v Un e variable T de type tableau à une dimension peut ê tre
Alphabet = ' A' . . ' Z'; représenté comme suit ·
TBoo le = TABLEAU [ Dirn DE Booleen;
TFre quency = TABLEAU [Alphabet] DE entier;
10 0 1 1 4 6 25
VAR Bool e : TBo ole ;
Frequenc y: TFrequency;
Remarques
J S, les variables I et J prenn e nt respectivement leurs valeurs 0
Quand on ne connaît pas à l'avance le nombre d 'élem en ts
dan s les intervalles Dim et Alphabet , alors Boole [ I ] et exactement , il faut majorer ce nombre, quitte à n' utiliser
Fre que n cy [ J ] d ésigne nt res pectivement les composantes qu'une partie du tableau .
situ ees a la 1-iem e place dans le tableau Boole et à la J- ième 0 Il est préférable de définir un TYPE t abl eau réutilisable, plutôt
place dans le tabl eau Frequ ency . Donc , pour accéder à une que de déclarer à chaque fois, en VAR , le tableau en entier.
composante d ' un vecte ur, il suffit de préci ser son indice . u De même , l' utilisa tion judicieuse des constan tes permet de
modifier aisément le programme et limite les sources d'erreurs.
0 Il est interdit de mettre une vari able dans l'i ntervalle de
défi nition du ta blea u.
Tc1bka11x .i 1 dirnc11~io11
Tableaux à deu x dim ensions
t·J\anipul<1tions clcmcntt1ire~ <k t;1bkt111x
AnplicJtion ,111 Lrn;::_,1gc C
Les ch<1i11•:~ de c.~1,1ctur.~

~lan 9 Un tableau à deux dimensions, c'est-à-dire à deux types


d'indices, est un tableau dont le type des composantes est un
type tableau de dimension un , donc, un vecteur. En termes
mathématiques, un tableau à deux dimensions est appelé une
matrice.
o La définition d'un tableau à deux dimensions peut s'effectuer
de la manière suivante :

TYPE <identificateur>= TABLEAU[! .. M, 1 .. N] DE


< type-composantes >;

Où < type-composantes > peut être un type quelconque ,


sauf le type tableau .
o Ainsi par exemple, en termes mathématiques , une matrice
réelle Mat d'ordre N x M est représentée par un tableau de
M vecteurs composés chacun de N nombres réels .
D avid Cclcst1n FAYE

. -~ ,.·.._· 12 111

CO NST MaxLine = 10; {nombre maximal de lignes} o Un tel tableau sera représenté sous la forme indiquée par la

TYPE
MaxColumn = 20; {nombre maximal de colonnes}

TLine = O.. MaxLine;


figure ci-apres : 1 2

~, ---- - -
MaxColumn

TColumn = O .. MaxColumn; ...


Matrix = TABLEAU [ TLine, TColumn] DE reel;
~ Mal{l.cJ
Maxline
VAR Mat : Matrix;

o Si les variables L et C prennent respectivement leurs valeurs 0 Donc, pour accéder à une composante d ' une matrice , il est
nécessaire de préciser deux indices, à savoir d 'abord l'indice de
dans les intervalles TLine et TColumn, alors Mat [L, C] ou bien
Mat [L] [C] désigne la composa nte de la matrice située à ligne , puis l' indice de colonne .
Remarques:
la L-i ème place dans la C-ième colonne, respectivement à la
v Dimension du tableau ci-dessus : 2 (matrice)
C-ième place dans la L- ieme ligne (voir figure).
v Nombre de cases disponibles : Ma.."'<Li ne x Ma.."'<:Column
0 Par convention , no us allons ind iqu er souvent par L l' indice de -> le tableau Mat es t bidime nsionnel ==:- tous les Mat ,; sont des
parcours des lign es et par C l' ind ice de parcours des colonnes variables (i = 1 ... M, j = 1 ... N) de mème type
-i Accès au contenu d ' un e case : Mat ,;
d ' une matrice .
Définition - .
~,
T.Jbka u :-: .i 1 dillll'rl~Îün
- - . : .. ~c--""'"=-== ===~~!!!t!!! 13 1V T,1bk,1t1 :-: d deux di111cn~io11.;
Manipulations élémentaires de tableaux
Application au L111 ~;.1g0 C
Les chaines de G.ir.:ictc:•rcs
Déclarations de tableaux :
0 Cas le plus classique
type LISTE= tableau [1 .. 100] de reel ·
TABLEAU= tableau [1 .. 10,1 .. 20] de entie;
CHAINE= tableau [1 .. 80] de caractere ;

0 Cas plus complexes


type POINT= tableau [1 . . 50,1 .. 50,1 . . 50] de reel
MATRICE= tableau [1 .. M,1 .. N] de reel ·
SYMPTOME= (FIEVRE, DELIRE, NAUSEE) ; '
MALADE= tableau [symptome] de booleen ;
CODE = 0 .. 99 ;
CODAGE= tableau [1 .. N_VILLE] de code ;
! ·'
t6
David Celest111 FAYE

am ul.a'tions •élémentaires de tableaux 15 1 aff_i~hage 'èJ' un tableau 16 1

GJ Créer un tableau équivaut à attribuer une valeur à chacune de


ses composantes.
0 La création peut se faire soit par une affectation, soit par une
saisie des valeurs .
o Les langages de programmation usuels n'offrent en général
qu'un ensemble très réduit de primitives de base définies sur le 0 Affectation
T[l] ~ 2; T[2] ~ O; ... T[20] ~ 8;
type tableau.
Ql Saisie
o Ainsi est-il presque toujours nécessaire de manipuler les
pour i~ 1 à 20 faire
tableaux en décrivant les fonctions que l'on veut réaliser en
\ Lire(t[i]);
termes de composantes. fin
c, Les exemples suivants montrent comment il est possible de Q> L' Affichage consiste parcourir le tableau à l'aide d'une boucle
réaliser des opérations qui concernent toutes ou une partie des et à afficher ses différentes composantes
composantes d'un ou de plusieurs tableaux.
:o affictfàge~d~1::1r:t tableau 17 11 I mmmu,J[m'r\t11Îlimum
-~ d'un tableau
~· ..
18 I
11
Le programme suivant permet de remplir 11 un tableau à l'aide
d'une boucle Repeat-Until.
Algorithm Mon _ tableau ; La recherche du maximum (minimum) consiste à mettre dans la
Const Taille_max=lO ; variable max (min) le premier élément du tableau T, de parcourir
Type TAB=tableau(l..Taille_max] de entier; ensuite le reste du tableau et de mettre à jour cette variab le max
Var Tableau :TAB ; (min) si l'élément en cours d'examen est supérieur (inférieur) au
indice : entier; max (min) courant : pour le maximum on a :
début max+-- T [l ];
pour indice +-- 1 à Taille max faire pour i +-- to Taill e_ max faire
1 Tabl eau [indice] +-- O; si T [i] > max alors
fin 1 max +-- T[i] ;
indice +-- l ; répéter fin
Ecrire( 11 entrez le N° 11 ,indice, 11 .. Il) .' fin
Lire(Tableau[indice]); Ecrireln('Le maximum de T :', max) ;
i ndice +-- indi ce+ l ; et pour le minimum on a :
jusqu 'à indice> T aill e max :;
fin

Mi;;imi.Jm:·d'ûn tableau 19 Il sê9u~~tiellè qfù:~'-élément dans un tableau 20 1

La recherche séquentielle d ' un élément a dans un vecteur T consiste


à parcourir ce dernier et de trouver un indice i tel que T [i] =a.
min +-- T[ l ]; i +-- l ;
pour i +-- to T aill e m ax faire tant que (i <= n ) et (T [i] <> a) faire
1 if- i + 1;
si T[i] < min alors
fin
min +-- T[i];
1

si (i>n) alors
fin
1 ecrire(a , 11 n"appartient pas à T 11 )
fin
sinon
Ecrireln('Le minimum de T :', min); 1 ecrire(a, 11 appartient à T 11 ) ;
fin
On peut aussi utiliser une variable booléenne trouve qui va contenir
le résultat de la recherche :
Recherdfe séquentielle d'un élément dans un tableau 21 Il L a.~unfftJ.i,btœii·m•;J.;,;a;;;:;.,•.,.i,jrlJ~
,;; Soit un tableau au départ contenant les éléments
(x1 , x2 , . . . , Xn)
i +- l ;
trouve +- faux
tant que (i <= n) et (trouv e= false) faire
\xi \xz \ N
1 2
trouve+- (t[i] = a);
\ i+-i+l ;
fin o On recherche la présence de l'élément x dans ce t ableau . On
si trouve alors divise le tableau en 2 parties égales :
1 ecrire(a , 11 n"appartient pas à T 11 )
sinon
1 ecrire(a, 11 appartient à T 11 ) ;
\xi \xz \
2 N

o La bonne idée est de comparer l'élément recherché avec


l'élément situé au milieu du tableau :

cr:M.f414@rf$@i-lu•t••'''·"·;◄.1,11fo@\i•·l••t•i,;,;,-
o si l'élément recherché est plus petit et s'il est présent il ne
·- ~ ~--iU·•·R,N1i,iiifiMjii•1i•t•i,;,;,_
Dans ce qui suit gauche, droite : délimitent la zone du tableau à
peut être que dans la partie gauche. Dans ce cas, on continue l'intérieur de laquelle on veut rechercher x
la recherche dans la première moitié du tableau; VARIABLES gauche,droite,milieu : entier·
début '
partie gauche partie .lrolU .. .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. ..
' {
gauche+- l ; draite +- n; trauve +- fau x
Xn
tant q_u e (gauche <= draite) ET non TrO'tlve faire
, 2 N r,:ilieu +-(gauche+ draite ) DIV 2;
si (x = t[milieu]) alors
0 On recherche la présence de l'élément x dans ce tableau. On 1 trO'tlve +- vra-i
divise le tableau en 2 parties On divise à nouveau la partie sinon
gauche en deux parties égales avec un nouveau milieu si (x < t[milieu]) alors
x < milieu \ x > milieu
1 draite +- milieu - l ·

-j♦
sinon '
\ x1 \ x2 \• • • • • ·\ l 1
fin
gauche +- milieu + l ·
'
1 2 milieu.
fin
o s'il est plus grand, on continue dans la seconde moitié du fin
tableau; si trouve alors

j
1 ecrire(x,' appartient à T')
<l On s'arrête si l'élément recherché a été trouvé ou si on ne peut
sinon
plus diviser le tableau . 1 ecrire(x, ' n"appartient à T');
fin
--
SU Rf~ression d'un élément 26 /
Nous nous proposons d'écrire un programme qui détermine si l'un
au moins des éléments de la matrice Mat d'ordre N x M est égal à
a (élément recherché) . Voici un extrait de ce programme (la Insertion d'un élément x à une place donnée k
matrice Mat a été définie avant) :
n f- n + 1 i f- n ;
trouve f-- fau1:: tant que i>=k faire
l +-- 1:
tant que (/ <= 11 ) et non trouve faire / :r~+i 1~; t[iJ;
C ~ 1: fin
tant que (c <= m) et non trouve faire t[k] x; f-
trO'ln:e +-- (.M at[l , e] = a) ; Suppression de l'élément situé à la place donnée k
1 e+--c+ l:
fin i +- k;
l +- l + 1; tant que i<n faire
fin t[i] f- t[i + lj;
si trouve alors 1 i f- i + l;
1 ecrire(a,' appartient à Mat') fin
smon nf-n-1
1 ecrire(a, ' n"appartient à Mat');
fin

-
ecteur: . - ·_ 27 1

Variable
c Soit un vecteur d'entiers, dont les éléments sont ordonnés. Son VAR n, i, lmax, m, le : entier;
mode est la valeur de l'élément qui y figure le plus grand v : TABLEAU [l .. nmax) DE entier;
nombre de fois . Exemple début
(1 3 3 6 7 7 7 11 13 13) i f- 1 ; l max f- 1 ; m f- 1; le+-- l ;
o Le mode de ce vecteur est la valeur 7, qui figure trois fois. tant que i<n faire
Nous allons écrire un progmmme qui prend en entrée un i+-'i+l
vecteur ordonné et qui livre le mode du vecteur en sortie. si V[i] = V[i - lj alors
le f- le+ 1
o il faut disposer des valeurs suivantes : si le > max alors
._, n est le nombre d 'éléments dans le vecteur v, lmax _+- le;
v i est le nombre d' élements qui ont déjà été considérés, 1 Tn f- Z
,., lmaj, est la longueur de la plus longue chaîne en v [l .. i], fin
,., m est l 'index en v d'un élém ent dans la chaîne de longueur sinon
lmax : 1 le +- l
v[rn] = mode(v [l ..i]), fin
u l e est la longu eur de la chaîne courante fin
Variables 1,J,k ent1Pr , Tl , r 2. f3 f AB ,
dé but
1 ' 1. / ~ J' k ,._ 0:
.> So,~nt d~1\- hblf 3H~ t11r-, pi'r ord ri- no,s.s.ant Tl "'\ T? tant que ( /, , tn,1/r 1J E n1 ,., , trJ.,Utè2)) fai re
P0>~.1nt rr1tpt'("-t1v('tm,.n\ ,:>l 111 n1 rlrmeont!io <>\ ta11le2 si ( 11 , /'2 f J;) alors
t lrmt>-rtt , 1 k • k • 1. r1rk; L TI r,
sinon
"' on Vf"lH foM<')nJ'\(:t, Ir· 1 ;,hl, ~IJ>' 11 , t T'.) "'" un tro1s.1i:.mo tabl<>a u k, k , 1. JL- , .... 1
Î ·• d t \ ,,1 i 11 ' ( \..~ 111 < 1 ◄ t :n l l , ? ) <lt>m"nt s. tni.3 pa r fin
r>fd P oo,· · :\ttl fin
r>(ll' <-" 1t:t \:::t nc•11 · atlon · ch~1 · 1t \tCJl'ttO mpt r ur~ J , , I',
si , t,11/11 1) alors
ta nt que IJ l1iillr'2J fdire
Pf)m <1t•, vc m ,•nt 11 1 ) , t 1 ~1 011 T3 r :.l Ir I cthl, ,tu
11 •r 1 ~ - f'N t
A• A , 1, n fl,·1. r21 I ,. J ... l
Ot • , ~" • . u L1l\l r .,11 t rtr ti'>• oh:,nt d, la fu-,1 o n lJn , i<tr J1 t d • f1r1
., ; <~.-.thm, · ~, ., 1, ·,mv.u1t 'lft'10f1
t , 111 ( QIW 1 twllf' 1 ) (dire
J , A , 1, / 1 Al /'J 1
rm
fm
fm

, __ .

~~l~au _ __ __ 3.?
.......................
~...-~---.~. 4--·-·<
, . . . . . . . . . . ~ ....... u •

,- - ~ 4 · ---·"'·

- - 31 " Ur r Jblr..m ,..._r un r.w.1:mblt· t,o, d •lf:mt:m-: J • -ntmc c. po:-


<:tr.,r.J,~ . r:n m~m 1 ,1rr. .-i dl;". ~drf-4':~ conta~u\.~.
, ._ ,, 114;c .,, ,, , ,,,,, '1 un t.blt:.1 u , unt: j,rr1t:11 . ùn

t •?> .. t
Q !.C r. r. Ll } • .

• t t
t
C

t 1:b. , ,u
1... h:
!
(. :lie~. h1

~ l'!'P< ~ ..tUh; ...


~• l :>t le - ·

. .. , ,t -> f' .,ti,u,C• • .., ,~.,,ïr.;,p ., , «: }ft:$.Uv~->

.., f q,.,, "' .. ..; .,,.,c;-u r ç ..,, i-: 11~••«:


0 On accède à un élément du tableau en lui appliquant
l'opérateur [] . Exemple
X = t [i] ; Le programme suivant imprime les éléments du tableau tab :
t[i+j] = k ;
#defin e N 10
Q Les index des éléments d ' un tableau vont toujours de O à main ()
nombre-éléments -1 . {
iut tab (N];
"1> La taille du tableau doit être connue statiquement par le int i;
compilateur.
for ( i = 0; i < N; i ++)
o Il n' y a pas de contrôle de débordement sur les indices ;
printf("tab(%d] = %d\n",i,tab[i]);
o Impossible donc d'écrire }

int t [n] ;
où n serait variable

tableau 35 t1 bleau ·. :.•- ~~ 36

o définition de nouveaux de types grâce au mot réservé typedef. Exemple


typedef type_existant identificateur;
do ubl e x, table[TAILLE] .
o définition d'un type tab qui soit un tableau de nb_elements i nt i .
'
éléments d ' un certain type de base :
typedef type_de_base tab[nb_elements]; X = table (5];

o le type de base d'un tableau est quelconque for (i = O; i<TAILLE i++)


table [i] = . . .
personne liste[TAILLE];
enum{bleu, blanc , rouge} couleur[20]; personne jean, liste[TAILLE];
o Définition de types liste[i] . salaire = 20000
jean . nom [0] = 'D' ;
typedef double type_table(7];
typedef personne type _liste[TAILLE] .
Typedef enum {bleu, blanc, rouge} type_couleur[20];
(.} éléments d'un tableau rangés dans des zones consécutives .
Q Un tableau correspond à un pointeur vers son premier élément
, il est donc assimilé à l'adresse de son premier élément .
int t [100) ; #d efin e N 10
int *X ; main ()
{
i nt tabl [N] , tab2 [N];
int i ;

x = kt [0] ; for ( i = 0; i < N; i ++)


tab1 [i] = tab2 [i];
0 Ce pointeur est constant=} aucune opération globale n'est }

autorisée sur un tableau hormis l'initialisation. pas de test


d 'égalité de deux tableaux (avec== ), ni d'affectation(=)
Q) le nom d ' un tableau n'est pas une lvalue

tableau à la déclaration 39

G> tableau
~
de caractères
_ , initialisé par une liste de car ., 0 u par une
o t yp e nomtableau[N] {const1,const2, ... ,constN}; chaine de car. litterale. '\0 'ajouté à la fin de /a chaine.
Exemple
Exemple
#def i ne N 8
# à(: : :ne N 4 char tab [N] " exemple";
1.nt tab [ N) {1, 2, 3, 4} ;
main() {
ma i n () { int i ;
f or ( i = 0; i < N; i ++)
f 0r ( i = 0 ; i < N ; i++) printf("tab[Xd) = Xc\n",i , tab[i] );
p rintf ( " tab [ %d) = %d \ n " ,i , tab[i]) ; }
}
0 on peut ne pas indiquer la taille du tableau
nbre constantes < N =;, seuls les premiers éléments initialisés.
Les autres éléments mis à zéro si le tabl eau est une variable int t[] = {1, 2, 3, 4, 5}
globale ou une locale de cl asse s tat ic . char tab [] = "exemple" ;

• nbre constantes > N =} un e erreur est signalée alloue un tableau avec 5 comp osa ntes in it ia lisé avec les valeurs
indiquées
Q> tableau à deux dimensions :
type nomdutableau[nombrelignes] [nombrecolonnes]
Exemple
0 On accède à un élément : tableau [i] [j J .
Ainsi le programme suivant imprime le nombre de caractères du
tableau tab, ici 8 . G initialiser un tableau à plusieurs dimensions à la compilation :
Exemple
char tab [] = "ex emple";
main() { #define M 2
int i; #define N 3
printf("Nombre de caracteres du tableau int tab [M] [N] {{l, 2, 3} , {4, 5, 6}} ;
Ï,d\n",
sizeof (tab)/ sizeo f ( c h a r )); main() {
} int i, j;
for ( i = 0 ; i < M; i + +) {
Regles pour les initialisations de tableaux : for _(j = O; j < N; j++)
pr in t f ( "t ab [Ï. d] [Ï. d] =Ï,d \ n" , i , j , t ab [ i] [ j] ) ;
0 avec [], la taille est calculée automatiquement, }

0 sinon, les initialiseurs manquants sont mis à O. }

tab est un tableau de taille 2 (deux lignes) dont chaque entrée


est un tableau de taille 3 et dont les éléments sont des entiers
int .

Tablea ux â 1 d imension
argument,"' . 43 Tableau x à deu x dim ensions
Manipulations élé me nta ires de tabl ea ux
Application au Langage C
Les chaines de caractères

Exemple
void initialisation( d o ubl e t[], int n){
:l. L ti ;
f 0r (i = 0; i < n; i++)
t(i] = 1;
}

int ta ille = 100


double table[taille];
initialisation ( table,taille)
. ~ ~table[0] transmise à initialisation<=> transm,ss,on par
valeur de l'adresse . <=> transmission par adresse du tableau
,,. NB : Transmission par valeur pour les structures et
unions et transmission par adresse pour les tableaux

\) Déclaration et initialisation
t1'
1 - . .. initialisation -
1 n'existe pas e type spécial chaîne ou string en C.
Q Une chaîne de caractères est un tab leau ( à une dimension ) de
caractères terminé par le caractère NUL (' \0' , entier 0) . Ql Le ca ract ère NUL est au t omatiq uement mis en fi n de c haîne
0 dans les cas su ivants :

Q
l~l~\;\~\~\~\~ 1\ \a\gl
Comme un tableau ordinaire
1
o init ialisatio n pa r consta nte
o lect ure pa r s c anf
0 fonct ions standa rds
char car, chaine[l00];
char salut[l0] = {'b' , 'o', 'n' , 'j', 'o', 'u', 'r'} '21 Lors de l'in it ial isation avec [], l' ord inateur réserve
automat iquement le nombre d 'octects nécessa ire , i.e le nombre
car = salut [3] de caractères +1 .
Ql Le nom d ' une chaîne est le représentant de l'adresse du
Q Initialisation simplifiée premier caractère de la chaîne
char salut [10] ="bonjour" ; 0 La bibliothèque <string. h> contient des fonctions de
manipulation de chaînes de caractères.
car = salut [3] ;
Q Le caractère NUL est automatiquement mis en fin de chaîne
dans les cas suivants :
:, initialisation par constante
0 lecture par scanf

.;:, fonctions standards


--~----'"- J_,p.....-r- ,-l ô 1•·~ -,..,,ç't'" - - - - - - - - - .. -

- ~ ~ ç ~r:1ictères constantes 47 car:a_~tères constantes 48


o chaînes de caractères constantes indiquées entre gùillemets .
Chaîne vide : 1111
o possibilité de mettre des séquences d'échappement
11
texte \n sur \n 3 lignes . 11 REMARQUES
II
Gi Le symbole peut être représenté à l'intérieur d'une chaîne Pour la mémorisation de la chaîne de caractères 11 Bonj our 11 , C a
par la séquence d'échappement ·· : besoin de huit ( ! !) octets.
Affichage de \ 11 guillemets\ 11 \n
o Plusieurs chaînes de caractères constantes qui sont séparées X' est un caractère constant, qui a une valeur numérique :
par des signes d'espacement ( espaces, tabulateurs ou P.ex : 'x' a la valeur 120 dans le code ASCII.
interl ignes) dans le texte du programme seront réunies en une 11x11
est un tableau de caractères qui contient deux caractères :
seule chaîne constante lors de la compilation : Exemple la lettre 'x' et le caractère NUL '\0'
11
un 11 11 deux 11 'X ' est codé dans un octet
11 IIXII
trois 11 est codé dans deux octets
Sera évalué comme 11 un deux trois 11
REMARQUES
Pour la mémorisation de la chaîne de caractères 11 Bonj our 11 , C a
besoin de huit ( ! !) octets.
'x' est un caractère constant, qui a une valeur numérique :
P.ex : 'x' a la valeur 120 dans le code ASCII.
• •
o r n existe pas e type spécial chaîne ou string e_n C. .
Q Une chaîne de caractères est un tableau ( à une d1~ens1on ) de t automat iquement mis en fin de chaîne
caractères terminé par le caractère NUL (' \0', entier 0) · 0 Le caractère NUL es
dans les cas s ui vants :
1b io in I j Io i "\' ) \0 i i 1 0 initia lisation par con
st a nte
0 1 1 12 3 4 1 5 6 1 7 1 8 1 9 o lecture par scanf
o Comme un tableau ordinaire a, fonct ions standards
char car, chaine[100]; Q Lors de l'initial isation avec [], l' ord inateur réserve
char salut[10] = {'b', 'o', 'n', 'j' , ' o', 'u', 'r ' }
automatiquement le nombre d ' octects nécessaire, i.e le nombre

car salut [3] de caractères +1 .


0 Le nom d'une chaîne est le représentant de l'adresse du
o Initialisation simplifiée premier caractère de la chaîne
char salut[10]="bonjour"; 0 La bibliothèque <string . h> contient des fonctions de
manipulation de chaînes de caractères.
car = salut[3];
~ Le ca ractè re NUL est automatiquement mis en fin de chaîne
dans les cas suivants :
J initial isation par constante

::i lectu re par scanf

J fonctions standards

ca~;actères constantes ==== 48


~ c na'i nes de ca ractères constantes indiquées entre guillemets.
Chaîne vid e : 11 11
G possibilité de mettre des séquences d ' échappement
11
texte \ n sur \n 3 lignes. 11 REMARQUES
o Le symbole II peut être représenté à l'intérieur d'une chaîne Pour la mémorisation de la chaîne de caractères 11 Bonj our 11 , C a
par la séquence d'échappement ·· : besoin de huit ( ! !) octets.
Affichage de \ 11 guillemets\ 11 \ n
o Plusieurs chaînes de caractères constantes qui sont séparées 'X ' est un caractère constant, qui a une valeur numérique :
par des signes d'espacement ( espaces, tabulateurs ou P.ex : 'x' a la valeur 120 dans le code ASCII.
IIXII
interlignes) dans le texte du programme seront réunies en une est un tableau de caractères qui contient deux caractè res :
1
seule chaîne constante lors de la compilation : Exemple la lettre 'x' et le caractère NUL : '\0' 1
uun n udeuxn ' X' est codé dans un octet
11
trois 11 nxn
Sera éval ué comme 11
un deux trois 11
est codé dans deux octets l
REMARQUES
Pour la mémorisation de la chaîne de caractères 11 Bonjour 11 , C a
besoin de huit ( ! !) octets.
' x' est un caractère constant, qui a une valeur numérique :
P.ex : 'x' a la valeur 120 dans le code ASCII.
1
;:~s~dio.h> Lecture de chaîne
7
dè ~ string.h> 54

Fonction gets
o gets est idéal pour lire une ou plusieurs lignes de texte (p .ex.
des phrases) terminées par un retour à la ligne. 0 <n> représente un nombre du type int. Les symboles <s> et
0 Syntaxe : gets ( <Chaîne> ) <t> peuvent être remplacés par :
Q gets lit une ligne de caractères de stdin et la copie à G une chaîne de caractères constante
l'adresse indiquée par <Chaîne>. Le retour à la ligne finale est 0 le nom d'une variable déclarée comme tableau de char
remplacé par le symbole de fin de chaîne '\0' . o un pointeur sur char (voir chapitre sur les pointeurs)
a Contrairement à scanf O, elle permet l'entrée de chaînes strlen( <s>) fournit la longueur de la chaîne <s> sans
contenant des espaces et des tabulations. compter le '\0' final
Exemple strcpy(<s>, <t>)
copie <t> vers <s> .
int MAX_LINE = 1000;
c~ a r LIGNE[MAX_LINE];
gets (LIGNE);

~ sfr:ing.h> 55

o strcat ( <s>, <t>) : ajoute <t> à la fin de <s> . Elle retourne


<.> strcpy( <s>, <t>) remplit le tableau alloué <s> avec le un pointeur sur la première chaîne (la seconde pouvant être
contenu de <t> (y compris '\0') . <s> doit être allouée avec constante) . Il faut la place nécessaire à la fin de <s>
une taille suffisante(cf. allocation dynamique). G strcmp( <s>, <t>) : compare <s> et <t>
Elle retourne un pointeur sur la première chaîne (la seconde lexicographiquement :
pouvant être constante) o < 0 si <s> précède <t> ( s <t ) ( alphabétiquement inférieure )
Exemple 0 = 0 si <s> est égal à <t> (s=t)
A ne pas faire 1 ! o > 'o si <s> suit <t> . (s>t)
char mo t 1 [ 10] ; Exemple(ne pas faire!!)
ch ar mot2 [ 10] = "toto"; char motl [10] = "toto";
motl = mo t2; c h ar mot2 [10] = "tata";
if (motl == mot2)
l'affectation motl = mot2 ne remplit pas la chaîne motl avec printf("igaliti\n") ;
le contenu de mot2, mais affecte le pointeur motl avec la
valeur mot2 . Le test (mot 1 == mot2) compare les pointeu rs moti et mot 2,
pas les contenus en tant que chaîne de caractères.
strncmp(<s>, <t>,<n>)
compare les chaînes pointées par <s> et <t> en ne considérant a, Comme le nom d'une chaîne de caractères représente une
que les <n> premiers caractères de <s> . adresse fixe en mémoire, on ne peut pas « affecter » une autre
Sachant que l'ordre sur chaque caractère suit le code ASCII chaîne au nom d'un tableau . Il faut bien copier la chaîne
( comparaison de la représentation entière du caractère) caractère par caractère ou utiliser la fonct ion strcpy
'4' < 'A' < 'H' < 'b' < 'z' respectivement strncpy :
strncpy(<s>, <t>, <n>) A = "Bonjour"; I* INCORRECT *I
copie au plus <n> caractères de <t> vers <s> strcpy(A,"Bonjour") f* CORRECT *f
Cependant, elle n'introduit pas de '\0' si absent dans les <n>
caractères de <t> .
o La fonction strcmp est dépendante du code de caractères et
strncat(<s>, <t>, <n>) peut fournir différents résultats sur d ifférentes mach ines .
ajoute au plus <n> caractères de <t> à la fin de <s> où <n>
est un nombre de typ e int

K str:ing~h> 60

o char* strdup(char *mot) o char *strchr(const char *chaine , int car ) ;


~ alloue une chaîne de caractères de la taille de mot (à l'aide de Recherche d'un caractère : donne l'adres:s€ dans chaine ae la
malloc) première occurrence de car, NULL s'il n' appara it p,as
" la remplit avec le contenu de mot
o retourne un pointeur sur cette chaîne (ou le pointeur NULL si if(strchr("aeiouy", car))
mémoire insuffisante) : printf("VOYELLE !") ;
tres pratique : allocation et affectation d'une copie o char *strrchr(const char *chaine, int car) ;
o strlwr (chaine) Recherche d'un caractère : donne l'adresse dans cha ine de la
Convertit toutes les majuscules en minuscules sans changer les dernière occurrence de car, NULL s'il n 'apparaît pas
autres cara ctères.
printf("Nom de base : ï.s\n", strrchr ( nom-de-fichier, ' /')+1);
~ strupr (chai ne )
Convertit toutes les minuscules en majuscules sans changer les G char*strstr(const char *chaine , co nst char *motif)
autres caractères. Recherche d'une chaîne : donne l'adresse dans chaine du
Les fonctions toupper () et tolower () retournent le caractère premier caractère de la première occurrence de motif, NULL s'il
n'apparaît pas
~ ~ ramétre en majuscules ou en minuscules.
fonctionslde ~itring.h> ~ = ~= = 61 di ~<stdlib.h>
C 1 ~
6.'

char chaine[50] = "abracarabra";


p = strchr(chaine , 'r'); Conversion de chaînes de caractères en nombres

chaine a b \ r \ a c a r \ a \b \r a \ \0 o atoi(<s>)
p~ retourne la valeur numérique représentée par <s> comme int

char chaine[50] = "abracarabra";


q = strrchr(chaine , 'r'); int atoi (chars[]) /* a(scii) to i(nteger) *I{
int n = 0, i ;
chaine a b r a c a r a \ b \ r \ a \ \0
for (i=O; s[i] >= '0' && s[i]<= '9'; i++)
q ŒJ /* s[i] est converti implicitement en int */
char chaine [50] = "abracarabra"; n = 10*n + s[i] - '0';
r = strstr (chaine, "bra"); return n;
}
chaine \ a \ b \ r \ a \ c \ a \ r \ a \ b \ r a \ \0
r~
NB : fonctions non disponible dans tous les environnements
de programmation.

oncti9ns~çl~~~ tdlib.h> 63 -~rful ~stalib.h> 64


Conversion de nombres en chaînes de caractères
Conversion de chaînes de caractères en nombres

o atol(<s>) itoa (<n_int > , <s>, <b >)


retourne la valeur numérique représentée par <s> comme long ltoa (<n_long>, <s>, <b>)
o atof(<s>) ultoa (<n_uns_long> , <s>, <b>)
retourne la valeur numérique représentée par <s> comme
double ( ! ) où <s> peut être : Chacune de ces trois procédures convertit son premier argument en
Q une chaîne de caractères constante ; une chaîne de caractères qui sera ensuite attribuée à <s >. La
o le nom d'une variable déclarée comme tableau de char; conversion se fait dans la base <b>.
a un pointeur sur char .
<n int> est un nombre du type int
Remarques : <n long> est un nombre du type long
o les espaces en début de chaîne sont ignorés <n uns long> est un nombre du type unsigned long
~ la conversion s' arrête au premier caractère non convertible <s> est une chaîne de caractères
Q Il n'y a pas de contrôle du domaine de la cible longueur maximale de la chaîne : 17 resp. 33 byte
<b> est la base pour la conversion (2 ... 36)
Q pour une chaîne non convertible les fonctions retournent zéro
o servent à classifier et à convertir des caractères.
o nationaux (é, è, a, ü, ls, ç, ... ) pas considérés.
QJ fournissent un résultat du type int différent de zéro si la
condition respective est remplie, sinon zéro. ' Fonctions de conversion

G fournissent une valeur du type int qui peut être représentée


La fonction : retourne une valeur différente de zéro,
comme caractère ; la valeur originale de <c> reste inchangée :
isupper(<c>) si <c> est une majuscule ('A' . . . 'z')
islower(<c>) si <c> est une minuscule ('a' .. . 'z') 0 tolower ( <c>) retourne <c> converti en minuscule si <c> est
isdigit(<c>) si <c> est un chiffre décimal ( 'O' ... '9') une majuscule
isalpha(<c>) SI islower(<c>) ou isupper(<c>)
o toupper( <c>) retourne <c> converti en majuscule si <c> est
isalnum(<c>) SI isalpha(<c>) ou isdigit(<c>)
une minuscule
isxdigit(<c>) SI <c> est un chiffre hexadécimal

( '0 ' .. . ' 9' ou 'A' .. . 'F' ou 'a' . . . 'f ')


isspace(<c>) si <c> est un signe d'espacement
(' ' , ' \ t ' , ' \n' , ' \r' , '\f ' )

Tableaux a 1 dimension
Tableaux a 1 d11nens1on
Tableaux a de ux dimensions
Tabl eaux à deux dimension s
Manipulations élémentaires de tableaux
Manipulations elementaires de tableau x Application au Langage C
Application au Langage C Les chaines de caractères
Les chaines de caractères

Concepts fondamentaux de /'informatique, Introduction à /'analyse d 'algorithmes,

Fundamentals of A lgorithmics, Éléments d 'algorithmique,

Types de données et Algorithmes.


•r: : n ,,dvcrî0n a /'algorithm ique,

David Cd~~tin FAVE


•Mi:> 'Ld'Hli-\2W

Vous aimerez peut-être aussi