Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et...

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

    14-Sep-2018
  • Category

    Documents

  • view

    219
  • download

    0

Embed Size (px)

Transcript of Algorithmique et Programmation, IMA 3grisoni/IMA/Cours04_tableaux_vecteurs.pdf · Algorithmique et...

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

    Universit Lille 1 - Polytech Lille

  • Vecteurs et Tableaux

    Algorithmes sur les tableaux dentiers

    Algorithmes de mots

    Tableaux2d - Matrices

    Erreurs sur les tableaux - la compilation et excution

  • Vecteurs et Tableaux

    Algorithmes sur les tableaux dentiers

    Algorithmes de mots

    Tableaux2d - Matrices

    Erreurs sur les tableaux - la compilation et excution

  • Vecteurs - Algo

    Vecteur = suite de cases dont le contenu est de mme type :

    2 3 5 8

    Dclaration (tableau de taille N fixe) :v : Vecteur[N] de (type de base)Les cases sont numrotes de 0 N 1 (attention sourcederreurs !)

    Accs la case i : v[i]

  • Vecteurs - Syntaxe C

    Dclaration

    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

  • Tableaux en C

    Les tableaux que nous utilisons au semestre 5 ont une taillefixe lavance ( la dclaration), ce sont des tableauxstatiques.

    I Comment crire des fonctions qui fonctionnent pour destableaux de taille quelconque ? Deux possibilits :

    I Utiliser des constantes symboliques la dclaration destableaux et dans lcriture des fonctions

    I Utiliser des fonctions dans lesquelles la taille du tableauest un nouveau paramtre.

  • Vecteurs et Tableaux

    Algorithmes sur les tableaux dentiers

    Algorithmes de mots

    Tableaux2d - Matrices

    Erreurs sur les tableaux - la compilation et excution

  • Accs direct

    Exemple : change de cases.

    Action swap(i,j,t)D: i,j : entiers {Donnes}D/R: t : Vecteur[N] dEntiers {Donne/Rsultat}L: tmp : entiertmp t[i];t[i] t[j];t[j] tmp;

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

  • 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

  • Swap, en C, V2, en passant la taille en paramtre

    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

  • Parcours dun tableau - 1

    Exemple : impression de tous les lments.

    Action printtab(t)D: t : Vecteur[N] dEntiers {Donnes}L: i : entier {Var ditration}Pour i de 0 N-1 Faire

    imprimeEntier(t[i]);Fpour

    FActionExercice : traduire en C

  • Parcours dun tableau - 1 (impression) Code C

  • Parcours dun tableau - 2

    Exemple : copie dun tableau dans un autre.

    Action copytab(t,resu)D: t : Vecteur[N] dEntiers {Donne}D/R: resu : Vecteur[N] dEntiers {Donne/Rsultat}L: i : entier {Var ditration}Pour i de 0 N-1 Faire

    resu[i] t[i];Fpour

    FActionExercice : traduire en C

  • Parcours dun tableau - 2 (copie) Code C

  • Recherche dans un tableau - 1

    Exemple : recherche du maximum.

    Fonction maxtab(t) : entierD: t : Vecteur[N] dEntiers {Donne}L: i : entier {Var ditration}L: maxi : entier {Max temporaire}maxi = t[0];Pour i de 1 N-1 Faire

    Si maxi

  • Recherche dans un tableau - 2a

    Exemple : recherche dune valeur particulire.

    Fonction maxtab(val,t) : boolD: t : Vecteur[N] dEntiers {Donne}D: val : entier {Valeur rechercher}L: i : entier {Var ditration}Pour i de 0 N-1 Faire

    Si t[i]=val alorsRetourner (Vrai)

    FsiFpourRetourner (Faux)

    FFonctionExercice : correction, puis traduire en C.

  • Recherche dans un tableau - 2a Code C

  • Recherche dans un tableau - 2b

    Le mme sans rupture prmature du flot.

    Fonction maxtabWhile(val,t) : boolD: t : Vecteur[N] dEntiers {Donne}D: val : entier {Valeur rechercher}L: i : entier {Var ditration}i 0 ; fini FauxTq non (fini) et i

  • Recherche dans un tableau - 2b Code C

  • Encodages par tableaux

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

  • Retour sur les actions/fonctions

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

    R: tab : Vecteur[1..1000] dEntiers.....tab[42] = 7070

    FAction

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

    FProgramme

  • Vecteurs et Tableaux

    Algorithmes sur les tableaux dentiers

    Algorithmes de mots

    Tableaux2d - Matrices

    Erreurs sur les tableaux - la compilation et excution

  • Les chanes de caractres

    I Les chanes de caractres sont souvent des types de base(string en Ocaml).

    I En C, les chanes de caractres sont des tableaux decharactres avec \0 comme marqueur de fin de chane.

    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

  • Parcours de chane

    Exemple : nombre de a dans un mot.

    Fonction nba(t) : entierD: t : Vecteur[TMAX] de charactres {Donne}L: i : entier {Var ditration}L: nb : entier {nb de a temporaire}nb = 0 ; i = 0 ;Tq t[i] 6= \0 et i

  • Algos de chanes

    Dautres algorithmes classiques ( voir en TD, TP, . . . )I Un mot donn (avec sa taille) est-il un palindrme ?I Calculer la concatnation de deux mots ?I Un mot est-il un sous mot dun autre ?I Combien de fois apparat un mot donn dans un texte (mot

    plus long) ?I algorithmique du texte

  • La librairie string

    La librairie string fournit des fonctions de base sur les chanesde caractres :

    I lecture partir de lentre standardI copieI comparaison de chanesI sous-chane, concatnation, . . .

    I Voir la fin du chapitre sur les pointeurs !

  • Vecteurs et Tableaux

    Algorithmes sur les tableaux dentiers

    Algorithmes de mots

    Tableaux2d - Matrices

    Erreurs sur les tableaux - la compilation et excution

  • Matrices - Algo

    Matrice = tableau 2D

    2 3 54 13 42

    1515 77 0

    Dclaration : matrice N M (taille fixe)m : Matrice[N][M] de (type de base)

    Accs la case (imeligne, jmecolonne) : m[i][j]I Pour une ligne fixe, les cases sont numrotes de 0

    M 1 (il y a M colonnes).I Pour une colonne fixe, les cases sont numrotes de 0

    N 1 (il y a N lignes).

  • Matrices - Syntaxe C

    Dclaration

    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 paramtres modifiables en C !

  • Ex : Impression de toutes les cases dune matricecarre

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

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

    FpourFpour

    FAction

  • Ex : Impression de la diagonale dune matrice carre

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

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

    FAction

  • Ex : Recherche dun lment dans une matricerectangulaire

    Fonction ParcoursMat(t,el) :BooleenL: i,j : EntiersD: t : Matrice[N][M] dEntiersD: 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 neffectue pas tout le programme si on trouve llment.

  • Ex : Recherche dun lment dans une matricerectangulaire

    Version sans arrt prmatur du flot :

    Fonction ParcoursMatWhile(t,el) :BooleenD: idemL: i,j : EntiersL: fini : Boolenfini Faux ; i 0 ; j 0Tq (non fini) et i

  • Vecteurs et Tableaux

    Algorithmes sur les tableaux dentiers

    Algorithmes de mots

    Tableaux2d - Matrices

    Erreurs sur les tableaux - la compilation et excution

  • Erreurs classiques :I Tableau dclar et pas initialis : aucune erreur,

    impression du contenu courant de la case mmoire.I Accs en dehors du tableau : pas derreur de compilation,

    Segmentation Fault ou valeur quelconque lexcution.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.

    Vecteurs et TableauxAlgorithmes sur les tableaux d'entiersAlgorithmes de motsTableaux2d - MatricesErreurs sur les tableaux - la compilation et excution