Auteur Auteur

Les tableaux

Une variable de type tableau

Les tableaux dans un algorithme (ou programme informatique) sont des variables qui peuvent contenir plusieurs valeurs simultanément. En effet, les variables vues jusqu'ici (entiers, réels, booléens et chaînes de caractères) sont dites des variables scalaires. Il s'agit de variables qui peuvent accueillir une seule valeur à la fois. Le fait de leur affecter une nouvelle valeur écrase systématiquement l'ancienne.

Dans les tableaux on peut stocker plusieurs valeurs simultanément. En effet, un tableau est vu comme une structure organisée sous forme de cellules (ou cases). Chaque case a un numéro qui permet de l'identifier. Ce numéro est appelé indice (ou index).

En algorithmique, les tableaux peuvent contenir des valeurs du même type. On parle alors d'un tableau d'entiers, un tableau de chaînes de caractères etc...

Afin de connaitre le nombre d'éléments inclus dans un tableau on utilise la fonction longueur().

LES TABLEAUX

Bonne nouvelle ! Je vous avais annoncé qu’il y a avait en tout et pour tout quatre structures logiques dans la programmation. Eh bien, ça y est, on les a toutes passées en revue. Mauvaise nouvelle, il vous reste tout de même quelques petites choses à apprendre…

1. UTILITÉ DES TABLEAUX

Imaginons que dans un programme, nous ayons besoin simultanément de 12 valeurs (par exemple, des notes pour calculer une moyenne). Evidemment, la seule solution dont nous disposons à l’heure actuelle consiste à déclarer douze variables, appelées par exemple Notea, Noteb, Notec, etc. Bien sûr, on peut opter pour une notation un peu simplifiée, par exemple N1, N2, N3, etc.

Maiscela ne change pas fondamentalement notre problème, car arrivé au calcul, et après une succession de douze instructions « Lire » distinctes, cela donnera obligatoirement une atrocité du genre :


Moy ← (N1+N2+N3+N4+N5+N6+N7+N8+N9+N10+N11+N12)/12

Ouf ! C’est tout de même bigrement laborieux. Et pour un peu que nous soyons dans un programme de gestion avec quelques centaines ou quelques milliers de valeurs à traiter, alors là c’est le suicide direct. Cerise sur le gâteau, si en plus on est dans une situation on l’on ne peut pas savoir d’avance combien il y aura de valeurs à traiter, là on est carrément cuits.

C’est pourquoi la programmation nous permet de rassembler toutes ces variables en une seule, au sein de laquelle chaque valeur sera désignée par un numéro. En bon français, cela donnerait donc quelque chose du genre « la note numéro 1 », « la note numéro 2 », « la note numéro 8 ». C’est largement plus pratique, vous vous en doutez. Un ensemble de valeurs portant le même nom de variable et repérées par un nombre, s’appelle un tableau, ou encore une variable indicée. Le nombre qui, au sein d’un tableau, sert à repérer chaque valeur s’appelle – ô surprise – l’indice.

Chaque fois que l’on doit désigner un élément du tableau, on fait figurer le nom du tableau, suivi de l’indice de l’élément, entre parenthèses.

2. NOTATION ET UTILISATION ALGORITHMIQUE

Dans notre exemple, nous créerons donc un tableau appelé Note. Chaque note individuelle (chaque élément du tableau Note) sera donc désignée Note(0), Note(1), etc. Eh oui, attention, les indices des tableaux commencent généralement à 0, et non à 1. Un tableau doit être déclaré comme tel, en précisant le nombre et le type de valeurs qu’il contiendra (la déclaration des tableaux est susceptible de varier d'un langage à l'autre. Certains langages réclament le nombre d'éléments, d'autre le plus grand indice... C'est donc une affaire de conventions).

En nous calquant sur les choix les plus fréquents dans les langages de programmations, nous déciderons ici arbitrairement et une bonne fois pour toutes que :

  • les "cases" sont numérotées à partir de zéro, autrement dit que le plus petit indice est zéro.
  • lors de la déclaration d'un tableau, on précise la plus grande valeur de l'indice (différente, donc, du nombre de cases du tableau, puisque si on veut 12 emplacements, le plus grand indice sera 11).

Au début, ça déroute, mais vous verrez, avec le temps, on se fait à tout, même au pire.


Tableau Note(11) en Entier

On peut créer des tableaux contenant des variables de tous types : tableaux de numériques, bien sûr, mais aussi tableaux de caractères, tableaux de booléens, tableaux de tout ce qui existe dans un langage donné comme type de variables. Par contre, hormis dans quelques rares langages, on ne peut pas faire un mixage de types différents de valeurs au sein d’un même tableau.

L’énorme avantage des tableaux, c’est qu’on va pouvoir les traiter en faisant des boucles. Par exemple, pour effectuer notre calcul de moyenne, cela donnera par exemple :


Tableau Note(11) en Numérique
Variables Moy, Som en Numérique
Début
Pour i ← 0 à 11
Ecrire "Entrez la note n°", i
Lire  Note(i)
i Suivant
Som ← 0
Pour i ← 0 à 11
Som ← Som + Note(i)
i Suivant
Moy ← Som / 12
Fin

NB : On a fait deux boucles successives pour plus de lisibilité, mais on aurait tout aussi bien pu n’en écrire qu’une seule dans laquelle on aurait tout fait d’un seul coup. Remarque générale : l’indice qui sert à désigner les éléments d’un tableau peut être exprimé directement comme un nombre en clair, mais il peut être aussi une variable, ou une expression calculée.

Dans un tableau, la valeur d’un indice doit toujours : •être égale au moins à 0 (dans quelques rares langages, le premier élément d’un tableau porte l’indice 1). Mais comme je l'ai déjà écrit plus haut, nous avons choisi ici de commencer la numérotation des indices à zéro, comme c’est le cas en langage C et en Visual Basic.

Donc attention, Truc(6) est le septième élément du tableau Truc ! •être un nombre entier Quel que soit le langage, l’élément Truc(3,1416) n’existe jamais. •être inférieure ou égale au nombre d’éléments du tableau (moins 1, si l’on commence la numérotation à zéro). Si le tableau Bidule a été déclaré comme ayant 25 éléments, la présence dans une ligne, sous une forme ou sous une autre, de Bidule(32) déclenchera automatiquement une erreur.

Je le re-re-répète, si l’on est dans un langage où les indices commencent à zéro, il faut en tenir compte à la déclaration :
Tableau Note(13) en Numérique
...créera un tableau de 14 éléments, le plus petit indice étant 0 et le plus grand 13.

3. TABLEAUX DYNAMIQUES

Il arrive fréquemment que l’on ne connaisse pas à l’avance le nombre d’éléments que devra comporter un tableau. Bien sûr, une solution consisterait à déclarer un tableau gigantesque (10 000 éléments, pourquoi pas, au diable les varices) pour être sûr que « ça rentre ». Mais d’une part, on n’en sera jamais parfaitement sûr, d’autre part, en raison de l’immensité de la place mémoire réservée – et la plupart du temps non utilisée, c’est un gâchis préjudiciable à la rapidité, voire à la viabilité, de notre algorithme.

Aussi, pour parer à ce genre de situation, a-t-on la possibilité de déclarer le tableau sans préciser au départ son nombre d’éléments. Ce n’est que dans un second temps, au cours du programme, que l’on va fixer ce nombre via une instruction de redimensionnement : Redim. Notez que tant qu’on n’a pas précisé le nombre d’éléments d’un tableau, d’une manière ou d’une autre, ce tableau est inutilisable.

Exemple : on veut faire saisir des notes pour un calcul de moyenne, mais on ne sait pas combien il y aura de notes à saisir. Le début de l’algorithme sera quelque chose du genre :


Tableau Notes() en Numérique
Variable nb en Numérique
Début
Ecrire "Combien y a-t-il de notes à saisir ?"
Lire nb
Redim Notes(nb-1)
…

Cette technique n’a rien de sorcier, mais elle fait partie de l’arsenal de base de la programmation en gestion.

ENONCE DES EXERCICES

Exercice 6.1

Ecrire un algorithme qui déclare et remplisse un tableau de 7 valeurs numériques en les mettant toutes à zéro.

Exercice 6.2

Ecrire un algorithme qui déclare et remplisse un tableau contenant les six voyelles de l’alphabet latin.

Exercice 6.3

Ecrire un algorithme qui déclare un tableau de 9 notes, dont on fait ensuite saisir les valeurs par l’utilisateur.

Exercice 6.4

Que produit l’algorithme suivant ?


Tableau Nb(5) en Entier
Variable i en Entier
Début
Pour i ← 0 à 5
 Nb(i) ← i * i
i suivant
Pour i ← 0 à 5
Ecrire Nb(i)
i suivant
Fin

Peut-on simplifier cet algorithme avec le même résultat ?

Exercice 6.5

Que produit l’algorithme suivant ?


Tableau N(6) en Entier
Variables i, k en Entier
Début
N(0) ← 1
Pour k ← 1 à 6
 N(k) ← N(k-1) + 2
k Suivant
Pour i ← 0 à 6
Ecrire N(i)
i suivant
Fin

Peut-on simplifier cet algorithme avec le même résultat ?

Exercice 6.6

Que produit l’algorithme suivant ?


Tableau Suite(7) en Entier
Variable i en Entier
Début
Suite(0) ← 1
Suite(1) ← 1
Pour i ← 2 à 7
 Suite(i) ← Suite(i-1) + Suite(i-2)
i suivant
Pour i ← 0 à 7
 Ecrire Suite(i)
i suivant
Fin

Exercice 6.7

Ecrivez la fin de l’algorithme 6.3 afin que le calcul de la moyenne des notes soit effectué et affiché à l’écran.

Exercice 6.8

Ecrivez un algorithme permettant à l’utilisateur de saisir un nombre quelconque de valeurs, qui devront être stockées dans un tableau. L’utilisateur doit donc commencer par entrer le nombre de valeurs qu’il compte saisir. Il effectuera ensuite cette saisie. Enfin, une fois la saisie terminée, le programme affichera le nombre de valeurs négatives et le nombre de valeurs positives.

Exercice 6.9

Ecrivez un algorithme calculant la somme des valeurs d’un tableau (on suppose que le tableau a été préalablement saisi).

Exercice 6.10

Ecrivez un algorithme constituant un tableau, à partir de deux tableaux de même longueur préalablement saisis. Le nouveau tableau sera la somme des éléments des deux tableaux de départ. Tableau 1 :
4 8 7 9 1 5 4 6
Tableau 2 :
7 6 5 2 1 3 7 4
Tableau à constituer :
11 14 12 11 2 8 11 10

Exercice 6.11

Toujours à partir de deux tableaux précédemment saisis, écrivez un algorithme qui calcule le schtroumpf des deux tableaux. Pour calculer le schtroumpf, il faut multiplier chaque élément du tableau 1 par chaque élément du tableau 2, et additionner le tout. Par exemple si l'on a :
Tableau 1 :
4 8 7 12
Tableau 2 :
3 6

Le Schtroumpf sera : 3 * 4 + 3 * 8 + 3 * 7 + 3 * 12 + 6 * 4 + 6 * 8 + 6 * 7 + 6 * 12 = 279

Exercice 6.12

Ecrivez un algorithme qui permette la saisie d’un nombre quelconque de valeurs, sur le principe de l’ex 6.8. Toutes les valeurs doivent être ensuite augmentées de 1, et le nouveau tableau sera affiché à l’écran.

Exercice 6.13

Ecrivez un algorithme permettant, toujours sur le même principe, à l’utilisateur de saisir un nombre déterminé de valeurs. Le programme, une fois la saisie terminée, renvoie la plus grande valeur en précisant quelle position elle occupe dans le tableau. On prendra soin d’effectuer la saisie dans un premier temps, et la recherche de la plus grande valeur du tableau dans un second temps.

Exercice 6.14

Toujours et encore sur le même principe, écrivez un algorithme permettant, à l’utilisateur de saisir les notes d'une classe. Le programme, une fois la saisie terminée, renvoie le nombre de ces notes supérieures à la moyenne de la classe.

CORRIGÉS DES EXERCICES

Exercice 6.1

Tableau Truc(6) en Numérique
Variable i en Numérique
Debut
Pour i ← 0 à 6
 Truc(i) ← 0
i Suivant
Fin

Exercice 6.2

Tableau Truc(5) en Caractère
Debut
Truc(0) ← "a"
Truc(1) ← "e"
Truc(2) ← "i"
Truc(3) ← "o"
Truc(4) ← "u"
Truc(5) ← "y"
Fin

Exercice 6.3

Tableau Notes(8) en Numérique
Variable i en Numérique
Pour i ← 0 à 8
 Ecrire "Entrez la note numéro ", i + 1
 Lire Notes(i)
i Suivant
Fin

Exercice 6.4

Cet algorithme remplit un tableau avec six valeurs : 0, 1, 4, 9, 16, 25. Il les écrit ensuite à l’écran. Simplification :


Tableau Nb(5) en Numérique
Variable i en Numérique
Début
Pour i ← 0 à 5
 Nb(i) ← i * i
 Ecrire Nb(i)
i Suivant
Fin

Exercice 6.5

Cet algorithme remplit un tableau avec les sept valeurs : 1, 3, 5, 7, 9, 11, 13. Il les écrit ensuite à l’écran. Simplification :


Tableau N(6) en Numérique
Variables i, k en Numérique
Début
N(0) ← 1
Ecrire N(0)
Pour k ← 1 à 6
 N(k) ← N(k-1) + 2
 Ecrire N(k)
k Suivant
Fin

Exercice 6.6

Cet algorithme remplit un tableau de 8 valeurs : 1, 1, 2, 3, 5, 8, 13, 21

Exercice 6.7

Variable S en Numérique
Tableau Notes(8) en Numérique
Debut
s ← 0
Pour i ← 0 à 8
 Ecrire "Entrez la note n° ", i + 1
 Lire Notes(i)
 s ← s + Notes(i)
i Suivant
Ecrire "Moyenne :", s/9
Fin

Exercice 6.8

Variables Nb, Nbpos, Nbneg en Numérique
Tableau T() en Numérique
Debut
Ecrire "Entrez le nombre de valeurs :"
Lire Nb
Redim T(Nb-1)
Nbpos ← 0
Nbneg ← 0
Pour i ← 0 à Nb - 1
 Ecrire "Entrez le nombre n° ", i + 1
 Lire T(i)
 Si T(i) > 0 alors
 Nbpos ← Nbpos + 1
 Sinon
 Nbneg ← Nbneg + 1
 Finsi
i Suivant
Ecrire "Nombre de valeurs positives : ", Nbpos
Ecrire "Nombre de valeurs négatives : ", Nbneg
Fin

Exercice 6.9

Variables i, Som, N en Numérique
Tableau T() en Numérique
Debut
… (on ne programme pas la saisie du tableau, dont on suppose qu’il compte N éléments)
Redim T(N-1)
…
Som ← 0
Pour i ← 0 à N - 1
 Som ← Som + T(i)
i Suivant
Ecrire "Somme des éléments du tableau : ", Som
Fin

Exercice 6.10

Variables i, N en Numérique
Tableaux T1(), T2(), T3() en Numérique
Debut
… (on suppose que T1 et T2 comptent N éléments, et qu’ils sont déjà saisis)
Redim T3(N-1)
…
Pour i ← 0 à N - 1
 T3(i) ← T1(i) + T2(i)
i Suivant
Fin

Exercice 6.11

Variables i, j, N1, N2, S en Numérique
Tableaux T1(), T2() en Numérique
Debut
… On ne programme pas la saisie des tableaux T1 et T2.
On suppose que T1 possède N1 éléments, et que T2 en possède T2)
…
S ← 0
Pour i ← 0 à N1 – 1
 Pour j ← 0 à N2 – 1
 S ← S + T1(i) * T2(j)
 j Suivant
i Suivant
Ecrire "Le schtroumpf est : ", S
Fin

Exercice 6.12

Variables Nb, i en Numérique
Tableau T() en Numérique
Debut
Ecrire "Entrez le nombre de valeurs : "
Lire Nb
Redim T(Nb-1)
Pour i ← 0 à Nb - 1
 Ecrire "Entrez le nombre n° ", i + 1
 Lire T(i)
i Suivant
Ecrire "Nouveau tableau : "
Pour i ← 0 à Nb – 1
 T(i) ← T(i) + 1
 Ecrire T(i)
i Suivant
Fin

Exercice 6.13

Variables Nb, Posmaxi en Numérique
Tableau T() en Numérique
Ecrire "Entrez le nombre de valeurs :"
Lire Nb
Redim T(Nb-1)
Pour i ← 0 à Nb - 1
 Ecrire "Entrez le nombre n° ", i + 1
 Lire T(i)
i Suivant
Posmaxi ← 0
Pour i ← 0 à Nb - 1
 Si T(i) > T(Posmaxi) alors
 Posmaxi ← i
 Finsi
i Suivant
Ecrire "Element le plus grand : ", T(Posmaxi)
Ecrire "Position de cet élément : ", Posmaxi
Fin

Exercice 6.14

Variables Nb, i, Som, Moy, Nbsup en Numérique
Tableau T() en Numérique
Debut
Ecrire "Entrez le nombre de notes à saisir : "
Lire Nb
Redim T(Nb-1)
Pour i ← 0 à Nb - 1
 Ecrire "Entrez le nombre n° ", i + 1
 Lire T(i)
i Suivant
Som ← 0
Pour i ← 0 à Nb - 1
 Som ← Som + T(i)
i Suivant
Moy ← Som / Nb
NbSup ← 0
Pour i ← 0 à Nb - 1
 Si T(i) > Moy Alors
 NbSup ← NbSup + 1
 FinSi
i Suivant
Ecrire NbSup, " élèves dépassent la moyenne de la classe"
Fin