Chapitre 2 : Les tableaux - PowerPoint PPT Presentation

1 / 80
About This Presentation
Title:

Chapitre 2 : Les tableaux

Description:

Chapitre 2 : Les tableaux – PowerPoint PPT presentation

Number of Views:150
Avg rating:3.0/5.0
Slides: 81
Provided by: abdelmaji4
Category:

less

Transcript and Presenter's Notes

Title: Chapitre 2 : Les tableaux


1
Chapitre 2 Les tableaux
  • Demi Module dInformatique
  • Filières SMP-SMC
  • Semestre 2, 2006

2
Sommaire
  • Notion de tableau
  • Déclaration dun tableau
  • Initialisation dun tableau
  • Propriétés daccès aux éléments dun tableau
  • Propriétés de la taille dun tableau
  • Les tableaux à plusieurs dimensions
  • Exercices corrigés

3
Notion de tableau
4
Définition
  • Un tableau est une structure de données formée
    dun nombre de variables ayant le même nom et le
    même type.
  • Un tableau représente le contenu dune suite
    déléments comme une variable simple représente
    le contenu dun élément simple.
  • Un tableau est composé déléments de même type et
    chaque élément dun tableau est référencé par un
    indice unique.

5
Définition (suite)
  • Les éléments dun tableau sont rangés dans la
    mémoire à des emplacements contigus (lun après
    lautre).

Un élément
Un indice
Représentation dun tableau en mémoire
6
Pourquoi les tableaux ?
  • On utilise les tableaux, par exemple pour
  • Stocker les termes dune suite.
  • Stocker les composantes dun vecteur.
  • Stocker les coefficients dune matrice.
  • Stocker les coefficients dun polynôme.
  • Stocker les caractères dune chaîne de
    caractères.
  • Etc.

7
Déclaration d'un tableau
8
Définition
  • Pour déclarer un tableau en C, il faut utiliser
    lopérateur entre crochets qui se note .
  • La syntaxe générale de déclaration dun tableau
    est la suivante
  • Type_éléments Nom_tableauNombre_éléments
  • Type_éléments ? représente le type des éléments
    du tableau.
  • Nom_tableau ? cest le nom du tableau.
  • Nombre_éléments ? cest le nombre déléments du
    tableau.

9
Exemple
  • Déclarer un tableau de 5 entiers, un tableau de
    20 caractères, un tableau de 100 nombres réels en
    simple précision et un tableau de 100 nombres
    réels en double précision.
  • Solution
  • int t5
  • char a20
  • float x100
  • double y100

10
Remarque
  • On peut factoriser par le type identique lors de
    la déclaration de plusieurs tableaux de même
    type. Par exemple, on peut faire les déclarations
    suivantes
  • int a10, b20
  • float x100, y100

11
Exercice corrigé
  • Que déclare-t-on par les instructions suivantes
  • int a, b100
  • char c15, d10
  • float x10, z20
  • Solution
  • a est une variable simple de type int.
  • b est un tableau de 100 entiers.
  • c est un tableau de 15 caractères.

12
Exercice corrigé
  • d est un tableau de 10 caractères.
  • x est un tableau de 10 nombres réels en simple
    précision.
  • y est un tableau de 20 nombres réels en simple
    précision.

13
Initialisation d'un tableau lors de la déclaration
14
Syntaxe dinitialisation
  • On peut initialiser un tableau lors de sa
    déclaration.
  • Pour cela, il faut écrire les valeurs de ses
    éléments entre les symboles et de la manière
    suivante
  • Type_élém Nom_tabTaille val1, val2, ,
    valn
  • Ou
  • Type_élém Nom_tab val1, val2, , valn

15
Syntaxe dinitialisation
  • La deuxième forme montre quon peut omettre le
    nombre des éléments dun tableau.
  • Dans ce cas, le nombre des éléments du tableau
    sera défini comme le nombre des valeurs dans la
    séquence entre les accolades.

16
Exercice corrigé
  • Indiquer les éléments de chacun des tableaux
    suivants, ainsi que leur nombre
  • int tab15 2, 3, 5, 7, 11
  • int tab2 0, 2, 4, 6, 8
  • int tab3100 1

17
Solution
  • tab1 ? 5 éléments 2, 3, 5, 7 et 11
  • tab2 ? 5 éléments 0, 2, 4, 6 et 8
  • tab3 ? 100 éléments le premier élément est 1
    et les autres sont tous des 0

18
Exercice corrigé
  • Découvrir les erreurs dans les déclarations
    suivantes
  • int 5 2, 3, 5, 7, 11
  • int a3 10, 20, 40, 60, 80
  • int s-4
  • int t4.7

19
Solution
  • 1 ? le nom du tableau manque.
  • 2 ? le nombre des valeurs dans la séquence
    dinitialisation dépasse le nombre des éléments
    indiqué entre et .
  • 3 ? le nombre des éléments dun tableau ne peut
    être négatif (ou égal à 0).
  • 4 ? le nombre des éléments dun tableau ne peut
    être un nombre réel.

20
Propriétés daccès aux éléments dun tableau
  • Soit X un tableau de N éléments dun certain type
    T
  • Xi désigne lélément dindice i dans le tableau
    X.
  • Les indices du tableau X vont de 0 à N-1.
  • Par exemple int X4 déclare un tableau de 4
    entiers. Son premier élément est X0 et son
    dernier élément est X3.

21
Propriétés daccès aux éléments dun tableau
  • Xi est considéré comme une variable simple de
    type T. On peut lui appliquer toutes les
    opérations possibles sur le type T.
  • Exemples int X4 On peut écrire
  • X1 3 / affectation de 3 à X1/
  • scanf("d", X2) / je lis X2 /

22
Propriétés daccès aux éléments dun tableau
  • printf("d", X0) / jaffiche X0 /
  • X3 / jincrémente la valeur de X3 /
  • X0-- / je décrémente la valeur de X0 /
  • A sqrt(X2) / je calcule la racine carrée de
    X2 /

23
Propriétés daccès aux éléments dun tableau
  • Le langage C neffectue aucun contrôle sur les
    bornes dun tableau.
  • Exemple int X4 déclare un tableau de 4
    entiers qui sont X0, X1, X2 et X3. Si on
    écrit X7 13 le compilateur ne va pas
    signaler une erreur, tout simplement, il va
    mettre 13 dans la quatrième case après le
    dernier élément de X. Ce qui risque de modifier
    une valeur qui pourrait déjà se trouver à cet
    endroit.

24
Propriétés daccès aux éléments dun tableau
  • On ne peut pas affecter un tableau à un autre
    (laffectation globale de tableau est interdite
    en C).
  • Cela signifie que si int A5, B5 il ne faut
    pas écrire B A
  • Pour recopier un tableau dans un autre, il faut
    leffectuer élément par élément (par une boucle
    for par exemple) for(i 0 i lt N i) Bi
    Ai

25
Exercice
  • On veut affecter le tableau a au tableau b.
    quelles sont les erreurs dans le programme
    suivant
  • int a5 1, 2, 3, 4, 5
  • int b5, i
  • b a
  • for(i 0 i lt 5 i) bi ai

26
Exercice
  • Correction
  • b a / Faux car laffectation globale entre
    les tableaux est impossible en C /
  • for(i 0 i lt 5 i) bi ai
  • / Cest vrai, mais il y a une petite erreur la
    condition darrêt dans la boucle for est i lt 5 et
    non i lt 5, car le dernier élément de b est 4 et
    non 5. Il faut donc écrire /
  • for(i 0 i lt 5 i) bi ai

27
Exercices corrigés
28
Énoncés des exercices
  • Écrire un programme qui déclare un tableau de 100
    entiers et qui linitialise par les nombres de 1
    à 100 (dans lordre).
  • Écrire un programme qui permet de saisir 20
    nombres réels en simple précision et les stocker
    dans un tableau.
  • Écrire un programme qui permet de ranger les
    éléments 2, 3, 5, 7, 11, 13, 17 et 19 dans un
    tableau et de les afficher sur une seule ligne.

29
Énoncés des exercices
  • Quaffiche ce programme ?
  • includeltstdio.hgt
  • main()
  • int a 3, 8, 15, 21, 30, 41 int i
  • for(i 0 i lt 5 i 2)
  • printf("d d\n", ai, ai1)
  • for(i 0 i lt 5 i 2)
  • if(ai 2 0)
  • printf("d ", ai)

30
Solutions des exercices
  • Exercice 1
  • includeltstdio.hgt
  • main( )
  • int a100
  • int i
  • for(i 0 i lt 100 i)
  • ai i 1

31
Solutions des exercices
  • Exercice 2
  • includeltstdio.hgt
  • main( )
  • float a20
  • int i
  • for(i 0 i lt 20 i)
  • printf("ad ", i)
  • scanf("f", ai)

32
Solutions des exercices
  • Exercice 3
  • includeltstdio.hgt
  • main()
  • int Tab 2, 3, 5, 7, 11, 13, 17, 19
  • int i
  • for(i 0 i lt 8 i)
  • printf("d\t", Tabi)

33
Solutions des exercices
  • Exercice 4. Le programme va afficher
  • 3 8
  • 15 21
  • 30 41
  • 30

34
Propriétés de la taille dun tableau
  • La taille dun tableau est le nombre de ses
    éléments.
  • Elle doit être de type int (ou dun type
    compatible au type int).
  • Elle est définie soit par
  • Une constante numérique

35
Propriétés de la taille dun tableau
  • Une constante définie par le macro define
  • Une constante symbolique définie par le mot clé
    const
  • Une expression symbolique

36
Exemple
  • Quelle est la taille des tableaux suivants
  • define N 10
  • const int K 5
  • int a15
  • int bN
  • char cK
  • float d2 N
  • double eN K 1

15, constante numérique
10, constante define N
5, constante symbolique
20, expression symbolique
16, expression symbolique
37
Remarque
  • La taille dun tableau ne peut être définie comme
    le nom dune variable.
  • Ainsi, les déclarations de tab1 et tab2 sont
    incorrectes
  • int N
  • int tab1N
  • int K 10
  • double tab2K

Incorrectes il ne faut pas utiliser les noms de
variables dans la taille dun tableau
38
Section B
les tableaux à plusieurs dimensions
Section A
39
Définition
  • Un tableau à plusieurs dimensions est défini
    comme un tableau de tableaux.
  • Jusquà ce moment nous navons étudier que les
    tableaux à une seule dimension.
  • Nous pouvons aussi définir des tableaux de
    dimensions 2, 3, etc.
  • Pour un tableau de dimensions k, il faut donner
    la taille pour chaque dimension (k valeurs).

40
Exemple
  • Déclarer
  • Un tableau dentiers de dimension 2 de taille (4,
    5)
  • Un tableau de caractères de dimension 2 de taille
    (10, 10)
  • Un tableau de doubles de dimension 3 de taille
    (5, 7, 7)

41
Solution
  • int tab145
  • char tab21010
  • double tab3577

42
Exercices corrigés
43
Énoncés des exercices
  • Écrire un programme qui demande la saisie dune
    matrice carrée A dordre 3 à coefficients entiers
    et qui laffiche ensuite, ligne par ligne.
  • Écrire un programme qui saisit deux matrices
    carrées dordre 4, calcule leur somme et leur
    produit et affiche les résultats.
  • Écrire un programme qui saisit une matrice A
    dordre (M, N), un vecteur dordre N, calcule le
    produit scalaire de A par V et affiche le
    résultat.

44
Solutions des exercices
  • Exercice 1
  • includeltstdio.hgt
  • define N 3
  • main()
  • int tabNN
  • int i, j
  • printf("saisie des coefficients de la matrice
    \n")
  • for(i 0 i lt N i)
  • for(j 0 j lt N j)

45
Solutions des exercices
  • printf("tabdd ", i, j)
  • scanf("d", tabij)
  • printf("Affichage des coefficients de la
    matrice \n")
  • for(i 0 i lt N i)
  • for(j 0 j lt N j)
  • printf("d\t", tabij)
  • printf("\n")
  • getch()

46
Solutions des exercices
  • Exercice 2
  • includeltstdio.hgt
  • define N 4
  • main()
  • int aNN, bNN, sNN, pNN
  • int i, j, k
  • printf("Saisie de la matrice a \n")

47
Solutions des exercices
  • for(i 0 i lt N i)
  • for(j 0 j lt N j)
  • printf("add ", i, j)
  • scanf("d", aij)
  • printf("Saisie de la matrice b \n")
  • for(i 0 i lt N i)
  • for(j 0 j lt N j)

48
Solutions des exercices
  • printf("bdd ", i, j)
  • scanf("d", bij)
  • printf("Calcul de s a b \n")
  • for(i 0 i lt N i)
  • for(j 0 j lt N j)
  • sij aij bij
  • printf("d\t", sij)
  • printf("\n")

49
Solutions des exercices
  • printf("Calcul de p a b \n")
  • for(i 0 i lt N i)
  • for(j 0 j lt N j)
  • pij 0
  • for(k 0 k lt N k)
  • pij pij aik bkj
  • printf("d\t", pij)
  • printf("\n")
  • getch()

50
Solutions des exercices
  • Exercice 3
  • includeltstdio.hgt
  • define M 4
  • define N 3
  • main()
  • int AMN, VN, RM
  • int i, j
  • printf("Saisie de la matrice A \n")
  • for(i 0 i lt M i)
  • for(j 0 j lt N j)

51
Solutions des exercices
  • printf("Add ", i, j)
  • scanf("d", Aij)
  • printf("Saisie du vecteur V \n")
  • for(i 0 i lt N i)
  • printf("Vd ", i)
  • scanf("d", Vi)

52
Solutions des exercices
  • printf("Calcul de R A V \n")
  • for(i 0 i lt M i)
  • Ri 0
  • for(j 0 j lt N j)
  • Ri Aij Vj
  • printf("d\n", Ri)
  • getch()

53
Les chaînes de caractères
54
Définition
  • Une chaîne de caractères est un tableau de
    caractères.
  • Voici un exemple qui déclare une chaîne de
    caractères contenant au maximum 19 caractères
    char ch19
  • On utilise les chaînes de caractères pour traiter
    les textes.

55
Initialisation des chaînes de caractères
  • Lors de la déclaration
  • Caractères par caractères
  • char ch23 'b', 'o', 'n', 'j', 'o', 'u', 'r',
    ',', ' ', 't', 'o', 'u', 't', 'l', 'e', 'm', 'o',
    'n', 'd', 'e', '!' ? très lourde!
  • Globalement
  • char ch23 "bonjour, tout le monde!"
  • ? très pratique!

56
Lecture dune chaîne de caractères
  • En utilisant les fonctions standards de lecture
  • scanf (si la chaîne ne contient pas un caractère
    séparateur!)
  • char ch23
  • scanf("s", ch)
  • gets (très pratique!)
  • char ch23
  • gets(ch)

57
affichage dune chaîne de caractères
  • En utilisant les fonctions standards daffichage
  • printf
  • char ch23 "Bonjour, tout le monde!"
  • printf("ch s", ch)
  • puts
  • char ch23 "Bonjour, tout le monde!"
  • puts(ch)

58
Remarque
  • Toute chaîne de caractères se termine par le
    caractère nul noté '\0' (Attention ce nest pas
    le nombre zéro, ni le caractère zéro).
  • Ainsi, si ch est la chaîne de caractères déclarée
    par char ch10 "Bonjour" alors ch sera
    représentée en mémoire par

ch
59
Fonctions liées aux chaînes de caractères
  • Ces fonctions sont définies dans la librairie de
    base du langage C ltstring.hgt.
  • Voici quelques unes de ces fonctions
  • strlen(ch) donne la longueur réelle de la
    chaîne de caractères contenue dans ch.
  • strcpy(ch2, ch1) copie la chaîne ch1 dans la
    chaîne ch2. Cette fonction retourne ch2.
  • strcat(ch2, ch1) rajoute la chaîne ch1 à la fin
    de la chaîne ch2. Cette fonction retourne ch2.

60
Fonctions liées aux chaînes de caractères
  • strncpy(ch2, ch1, n) comme strcpy, mais ne
    copie quau plus n caractères.
  • strcmp(ch1, ch2) compare les chaînes ch1 et ch2
    en utilisant lordre alphabétique. Elle renvoie
    un nombre négatif si ch1 lt ch2, un nombre positif
    si ch1 gt ch2 et zéro si ch1 ch2.

61
Exercice corrigé 1
  • Écrire un programme qui lit un verbe de deuxième
    groupe (comme finir) et le conjugue à
    limpératif. Voici un exemple de laffichage
    souhaité
  • Donner le verbe finir
  • Conjugaison de finir
  • Tu finis
  • Nous finissons
  • Vous finissez

62
Solution
  • includeltstdio.hgt
  • includeltstring.hgt
  • main()
  • char verbe10
  • int L
  • char radical9 ""
  • printf("Donner le verbe ")
  • gets(verbe)

63
Solution
  • printf("Conjugaison de s \n", verbe)
  • L strlen(verbe)
  • strncpy(radical, verbe, L - 1)
  • printf("Tu s", radical)
  • printf("s\n")
  • printf("Nous s", radical)
  • printf("ssons\n")
  • printf("Vous s", radical)
  • printf("ssez\n")
  • getch()

64
Exercice corrigé 2
  • Écrire un programme qui
  • saisit une chaîne de caractères de longueur
    maximale 20.
  • Affiche cette chaîne.
  • Calcule sa longueur effective (sans utiliser la
    fonction strlen).
  • Renverse la chaîne dorigine.

65
Exercice corrigé 2
  • Voici un exemple dexécution
  • Donner la chaine mais
  • Affichage de la chaine mais
  • Longueur de la chaine 4
  • La chaine renversee siam

66
Solution
  • includeltstdio.hgt
  • main()
  • char ch20
  • int i, L
  • char c
  • printf("Donner la chaine ")
  • gets(ch)
  • printf("Affichage de la chaine ")

67
Solution
  • puts(ch)
  • i 0
  • while(chi ! '\0')
  • i
  • L i
  • printf("La longueur de la chaine d\n", L)

68
Solution
  • for(i 0 i lt L / 2 i)
  • c chi
  • chi chL - i - 1
  • chL - i - 1 c
  • printf("La chaine renverse ")
  • puts(ch)
  • getch()

69
Les fonctions de traitement des caractères
70
Les fonctions
  • Pour utiliser ces fonctions, il faut inclure le
    fichier den-tête ltctype.hgt par un macro
    include.
  • Toutes ces fonctions prennent en paramètre un
    seul caractère.

71
Les fonctions de test de caractères
  • Considérons une variable nommée car de type char.
  • islower(car) si car est une lettre minuscule
    ('a' à 'z'), cette fonction retourne un entier
    non nul sinon, elle renvoie 0.
  • isupper(car) si car est une lettre majuscule
    ('A' à 'Z'), cette fonction retourne un entier
    non nul sinon, elle renvoie 0.
  • isdigit(car) si car est un chiffre ('0' à '9'),
    cette fonction retourne un entier non nul sinon,
    elle renvoie 0.

72
Les fonctions de test de caractères
  • isalpha(car) si car est une lettre (minuscule
    ou majuscule), cette fonction retourne un entier
    non nul sinon, elle renvoie 0.
  • isalnum(car) si car est une lettre (minuscule
    ou majuscule) ou un chiffre, cette fonction
    retourne un entier non nul sinon, elle renvoie
    0.
  • iscntrl(car) si car est un caractère de
    contrôle, cette fonction retourne un entier non
    nul sinon, elle renvoie 0 (les caractères de
    contrôle ont les codes de 0 à 21 et 127).

73
Les fonctions de test de caractères
  • isgraph(car) si car est un caractère imprimable
    (par opposition à un caractère non imprimable,
    comme un caractère de contrôle, un caractère
    espace, le caractère tabulation, etc.), cette
    fonction retourne un entier non nul sinon, elle
    renvoie 0 (les caractères imprimables ont leurs
    codes de 32 à 126).

74
Les fonctions de test de caractères
  • isprint(car) si car est un caractère imprimable
    (le caractère espace inclus), cette fonction
    retourne un entier non nul sinon, elle renvoie
    0.
  • ispunct(car) si car est un caractère imprimable
    (à lexception du caractère espace, des lettres
    minuscules, des lettres majuscules et des
    chiffres), cette fonction retourne un entier non
    nul sinon elle renvoie 0.

75
Les fonctions de test de caractères
  • isspace(car) si car est un caractère blanc
    (comme le caractère espace, le caractère nouvelle
    ligne, le caractère retour à la ligne, le
    caractère arrière), cette fonction retourne un
    entier non nul sinon, elle renvoie 0.
  • isxdigit(car) si car est un chiffre ou un
    caractère hexadécimal (lettre de 'a' à 'f' ou de
    'A' à 'F').

76
Exercices corrigés
  • Exercice 1 écrire un programme qui lit un
    caractère et qui affiche sa catégorie lettre
    minuscule, lettre majuscule, chiffre ou autre.
  • Exercice 2 écrire un programme qui lit une
    chaîne de caractères de longueur maximale 10 et
    qui vérifie que cette chaîne peut représenter un
    nombre hexadécimal.

77
Solution
  • Exercice 1
  • includeltstdio.hgt
  • includeltctype.hgt
  • main()
  • char c
  • printf("Tapez un caractere S.V.P ")
  • scanf("c", c)
  • if(isupper(c))
  • printf("Merci, vous avez tape une lettre
    majuscule")

78
Solution
  • else
  • if(islower(c))
  • printf("Merci, vous avez tape une lettre
    minuscule")
  • else
  • if(isdigit(c))
  • printf("Merci, vous avez tape un chiffre")
  • else
  • printf("Merci, vous avez tape autre chose")
  • getch()

79
Solution
  • Exercice 2
  • includeltstdio.hgt
  • includeltctype.hgt
  • main()
  • char ch10
  • int i
  • int ok 1
  • printf("Entrez la chaine ")
  • gets(ch)
  • i 0

80
Solution
  • while((chi ! '\0') ok)
  • if(isxdigit(chi)) i
  • else ok 0
  • if(ok) printf("Oui")
  • else printf("Non")
  • getch()
Write a Comment
User Comments (0)
About PowerShow.com