35
Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech Lille

Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Embed Size (px)

Citation preview

Page 1: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Algorithmique et Programmation, IMA 3Cours 4 : Vecteurs/Tableaux

Université Lille 1 - Polytech Lille

Page 2: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Vecteurs et Tableaux

Algorithmes sur les tableaux d’entiers

Algorithmes de mots

Tableaux2d - Matrices

Erreurs sur les tableaux - à la compilation et exécution

Page 3: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Vecteurs et Tableaux

Algorithmes sur les tableaux d’entiers

Algorithmes de mots

Tableaux2d - Matrices

Erreurs sur les tableaux - à la compilation et exécution

Page 4: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Vecteurs - Algo

Vecteur = suite de cases dont le contenu est de même type :

2 3 −5 −8

Déclaration (tableau de taille N fixée) :v : Vecteur[N] de (type de base)Les cases sont numérotées de 0 à N − 1 (attention sourced’erreurs !)

Accès à la case i : v[i]

Page 5: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Vecteurs - Syntaxe C

Déclaration

i n t t [ 2 3 ] ; / / t a b l e a u d ’ e n t i e r schar char tab [900 ] ; / / t a b l e a u de c h a r a c t e r e s

Utilisation :

x = t [ 1 0 ] ; / / a p p e l l i c i t ey = char tab [ 1 5 1 5 ] ; / / p l a n t a g e a l ’ e x e c u t i o nz = t [ expr compliquee ] ;i n t t [ 1 2 ] = { 0 } ; / / d e c l a r a t i o n − i n i t

Page 6: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Tableaux en C

Les tableaux que nous utilisons au semestre 5 ont une taillefixée à l’avance (à la déclaration), ce sont des tableauxstatiques.

I Comment écrire des fonctions qui fonctionnent pour destableaux de taille quelconque ? Deux possibilités :

I Utiliser des constantes symboliques à la déclaration destableaux et dans l’écriture des fonctions

I Utiliser des fonctions dans lesquelles la taille du tableauest un nouveau paramètre.

Page 7: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Vecteurs et Tableaux

Algorithmes sur les tableaux d’entiers

Algorithmes de mots

Tableaux2d - Matrices

Erreurs sur les tableaux - à la compilation et exécution

Page 8: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Accès direct

Exemple : échange de cases.

Action swap(i,j,t)D: i,j : entiers {Données}D/R: t : Vecteur[N] d’Entiers {Donnée/Résultat}L: tmp : entiertmp← t[i];t[i]← t[j];t[j]← tmp;

FActionExercice : traduire en C et modifier pour les cas« pathologiques ».

Page 9: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Swap, en C, avec constante symbolique (V1)

# def ine N 12

void swap ( i n t t [N] , i n t i , i n t j ) {i n t tmp ;i f ( i >=0 && i < N && j >=0 && j <N) {

tmp = t [ i ] ;t [ i ] = t [ j ] ;t [ j ] = tmp ;

}}

i n t main ( ) {i n t t [N ] ;. . .swap ( t , 2 , 3 ) ;

}

Page 10: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Swap, en C, V2, en passant la taille en paramètre

void swap ( i n t t [ ] , i n t i , i n t j , i n t s ize ) {i n t tmp ;i f ( i >=0 && i < s ize && j >=0 && j <s ize ) {

tmp = t [ i ] ;t [ i ] = t [ j ] ;t [ j ] = tmp ;

}}

i n t main ( ) {i n t s ize = 12; / / ou s c a n fi n t t [ s i ze ] ;. . .swap ( t ,2 ,3 , s ize ) ;

}

I Préférence pour celle-ci.

Page 11: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Parcours d’un tableau - 1

Exemple : impression de tous les éléments.

Action printtab(t)D: t : Vecteur[N] d’Entiers {Données}L: i : entier {Var d’itération}Pour i de 0 à N-1 Faire

imprimeEntier(t[i]);Fpour

FActionExercice : traduire en C

Page 12: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Parcours d’un tableau - 1 (impression) Code C

Page 13: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Parcours d’un tableau - 2

Exemple : copie d’un tableau dans un autre.

Action copytab(t,resu)D: t : Vecteur[N] d’Entiers {Donnée}D/R: resu : Vecteur[N] d’Entiers {Donnée/Résultat}L: i : entier {Var d’itération}Pour i de 0 à N-1 Faire

resu[i]← t[i];Fpour

FActionExercice : traduire en C

Page 14: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Parcours d’un tableau - 2 (copie) Code C

Page 15: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Recherche dans un tableau - 1

Exemple : recherche du maximum.

Fonction maxtab(t) : entierD: t : Vecteur[N] d’Entiers {Donnée}L: i : entier {Var d’itération}L: maxi : entier {Max temporaire}maxi = t[0];Pour i de 1 à N-1 Faire

Si maxi<t[i] alorsmaxi← t[i]

FsiFpourRetourner (maxi)

FFonctionI Correction de ce programme ?

Page 16: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Recherche dans un tableau - 2a

Exemple : recherche d’une valeur particulière.

Fonction maxtab(val,t) : boolD: t : Vecteur[N] d’Entiers {Donnée}D: val : entier {Valeur à rechercher}L: i : entier {Var d’itération}Pour i de 0 à N-1 Faire

Si t[i]=val alorsRetourner (Vrai)

FsiFpourRetourner (Faux)

FFonctionExercice : correction, puis traduire en C.

Page 17: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Recherche dans un tableau - 2a Code C

Page 18: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Recherche dans un tableau - 2b

Le même sans rupture prématurée du flot.

Fonction maxtabWhile(val,t) : boolD: t : Vecteur[N] d’Entiers {Donnée}D: val : entier {Valeur à rechercher}L: i : entier {Var d’itération}i← 0 ; fini← FauxTq non (fini) et i<N faire

Si t[i]=val alorsfini← Vrai

Fsii← i+1

FtqRetourner fini

FFonctionExercice : correction, puis traduire en C.

Page 19: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Recherche dans un tableau - 2b Code C

Page 20: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Encodages par tableaux

Les tableaux peuvent aussi servir à encoder :I des ensembles (cf TD)I des arbres

Page 21: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Retour sur les actions/fonctions

I Et si je veux retourner un tableau ?Important Les tableaux sont des paramètres modifiables en C !Action calculetab(tab)

R: tab : Vecteur[1..1000] d’Entiers.....tab[42] = 7070

FAction

Programme MainL: t : Vecteur[1..1000] d’Entierscalculetab(t)Imprime(t[42])Retourner 0

FProgramme

Page 22: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Vecteurs et Tableaux

Algorithmes sur les tableaux d’entiers

Algorithmes de mots

Tableaux2d - Matrices

Erreurs sur les tableaux - à la compilation et exécution

Page 23: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Les chaînes de caractères

I Les chaînes de caractères sont souvent des types de base(string en Ocaml).

I En C, les chaînes de caractères sont des tableaux decharactères avec \0 comme marqueur de fin de chaîne.

′t′ ′o′ ′t′ ′o′ ′\0′

Syntaxe C :

char ch [ 1 2 ] = { ’ t ’ , ’ o ’ , ’ t ’ , ’ o ’ } ;char ch2 [100 ] = " t o t o " ;char ch3 [ ] = " t o t o " ; / / c h 3 a u r a 5 c a s e s

char a = ch3 [ 2 ] ; / / a e s t ’ t ’

Page 24: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Parcours de chaîne

Exemple : nombre de ’a’ dans un mot.

Fonction nba(t) : entierD: t : Vecteur[TMAX] de charactères {Donnée}L: i : entier {Var d’itération}L: nb : entier {nb de ’a’ temporaire}nb = 0 ; i = 0 ;Tq t[i] 6= ‘\0‘ et i <TMAX faire

Si t[i]=’a’ alorsnb← nb+1

Fsii← i+1 {ne pas oublier !}

FtqRetourner (nb)

FFonctionI Invariant de la boucle ?

Page 25: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Algos de chaînes

D’autres algorithmes classiques (à voir en TD, TP, . . . )I Un mot donné (avec sa taille) est-il un palindrôme ?I Calculer la concaténation de deux mots ?I Un mot est-il un sous mot d’un autre ?I Combien de fois apparaît un mot donné dans un texte (mot

plus long) ?I algorithmique du texte

Page 26: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

La librairie string

La librairie string fournit des fonctions de base sur les chaînesde caractères :

I lecture à partir de l’entrée standardI copieI comparaison de chaînesI sous-chaîne, concaténation, . . .

I Voir à la fin du chapitre sur les pointeurs !

Page 27: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Vecteurs et Tableaux

Algorithmes sur les tableaux d’entiers

Algorithmes de mots

Tableaux2d - Matrices

Erreurs sur les tableaux - à la compilation et exécution

Page 28: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Matrices - Algo

Matrice = tableau 2D

2 3 −54 −13 42

1515 −77 0

Déclaration : matrice N ×M (taille fixée)m : Matrice[N][M] de (type de base)

Accès à la case (imeligne, jmecolonne) : m[i][j]I Pour une ligne fixée, les cases sont numérotées de 0 à

M − 1 (il y a M colonnes).I Pour une colonne fixée, les cases sont numérotées de 0 à

N − 1 (il y a N lignes).

Page 29: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Matrices - Syntaxe C

Déclaration

i n t t [ 2 3 ] [ 4 2 ] ; / / m a t r i c e s d ’ e n t i e r schar char tab [ 9 0 0 ] [ 1 2 ] ; / / m a t r i c e de c h a r a c t e r e s

Utilisation :

x = t [ 1 0 ] [ 1 0 ] ; / / a p p e lz = t [ expr compliquee ] [ exp2 ] ;

Important Les matrices sont des paramètres modifiables en C !

Page 30: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Ex : Impression de toutes les cases d’une matricecarrée

Action ParcoursMat(t)L: i,j : EntiersD: t : Matrice[N][N] d’EntiersPour i de 0 à N-1 Faire

Pour j de 0 à N-1 FaireImprimer(t[i][j])

FpourFpour

FAction

Page 31: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Ex : Impression de la diagonale d’une matrice carrée

Action ParcoursMat(t)L: i,j : EntiersD: t : Matrice[N][N] d’EntiersPour i de 0 à N-1 Faire

Imprimer (t[i][i]) ;Fpour

FAction

Page 32: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Ex : Recherche d’un élément dans une matricerectangulaire

Fonction ParcoursMat(t,el) :BooleenL: i,j : EntiersD: t : Matrice[N][M] d’EntiersD: el : EntierPour i de 0 à N-1 Faire

Pour j de 0 à M-1 FaireSi (t[i][j]=el) alors

Retourner VraiFsi

FpourFpourRetourner Faux

FFonctionI On n’effectue pas tout le programme si on trouve l’élément.

Page 33: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Ex : Recherche d’un élément dans une matricerectangulaire

Version sans arrêt prématuré du flot :

Fonction ParcoursMatWhile(t,el) :BooleenD: idemL: i,j : EntiersL: fini : Booléenfini← Faux ; i← 0 ; j← 0Tq (non fini) et i<N faire

Tq (non fini) et j<M faireSi (t[i][j]=el) alors

fini← VraiFsi

FtqFtqRetourner fini

FFonction

Page 34: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Vecteurs et Tableaux

Algorithmes sur les tableaux d’entiers

Algorithmes de mots

Tableaux2d - Matrices

Erreurs sur les tableaux - à la compilation et exécution

Page 35: Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et Programmation, IMA 3 Cours 4 : Vecteurs/Tableaux Université Lille 1 - Polytech

Erreurs classiques :I Tableau déclaré et pas initialisé : aucune erreur,

impression du contenu courant de la case mémoire.I Accès en dehors du tableau : pas d’erreur de compilation,

Segmentation Fault ou valeur quelconque à l’exécution.I Copie de tableau non case par case :

int t[12]={0};int g[12];g=t;

Erreur à la compilation :tab.c:46:4: error: array type ’int [12]’ is not assignable

g=t;~^

1 error generated.