Cours Algorithme : Les tableaux Statiques - Déclaration - Remplissage - Affichage

Ensemble de données du même type
 
Exemple de problème : 
 
Saisir une suite de nombres, puis afficher cette suite après avoir divisé tous les nombres par la valeur maximale de la suite.

Nécessité de conserver les nombres en mémoire

Variable contenant une valeur

val 132

variable contenant une collection de valeurs du même type

val  132 52   -57  -8902   -841  8100  –641
 
Remarque : appeler cette variable tabVal plutôt que val
 
Les tableaux
 
Structure de données permettant d'effectuer un même traitement sur des données de même nature 

tableau à une dimension  

tableau à deux dimensions
 
Exemples d'applications
 
  • Ensemble de valeurs entières, réelles, booléennes,....
  • Ensemble de noms (type chaîne)
  • Ensemble de caractères (type caractère)
  • Ensemble d'adresses (type Adresse : nom, adresse, num téléphone)
  • Ensemble d'ouvrages
 
Traitements opérant sur des tableaux
 
On veut pouvoir :
 
  • créer des tableaux
  • ranger des valeurs dans un tableau
  • récupérer, consulter des valeurs rangées dans un tableau
  • rechercher si une valeur est dans un tableau
  • mettre à jour des valeurs dans un tableau
  • modifier la façon dont les valeurs sont rangées dans un tableau (par exemple : les trier de différentes manières)
  • effectuer des opérations entre tableaux : comparaison de tableaux, multiplication,...
  • ...

Définition du type
 
  
Remarques :
 
• Indices : en général, démarrage à 1, mais en C++, démarrage à 0
• Nombre d’octets occupés : dépend du type des valeurs enregistrées
 
Déclaration d'un tableau
 
Exemple : déclaration d'un tableau pouvant contenir jusqu'à 35 entiers


 
Autre exemple : déclaration d'un tableau qui contiendra les fréquences des températures comprises entre –40°C et 50°C
 
variable températures : tableau [-40, 50] de réels //Les éléments sont  numérotés de -40 à 50
  
Définition d'un type tableau
 
type <Nom> = <description>

Exemple :  déclaration d'un nouveau type Mot, tableau de 10 caractères
type  Mot = tableau [1, 10 ] de caractères
variables nom, verbe : Mot
 
Utilisation d’un tableau : par les indices
 
• Accès en lecture :

        - afficher(tabl[4]) {le contenu du tableau à l’indice 4 est affiché à l’ écran}

• Accès en écriture :

        - tabl[3]  ←18 {la valeur 18 est placée dans le tableau à l’indice 3}

        - saisir(tabl[5]) {la valeur entrée par l’utilisateur est enregistrée dans le tableau à l’indice 5}

        - attention!

 
Tableaux à deux dimensions

tableau à 2 lignes et 7 colonnes

• Déclaration



Tableaux à deux dimensions (suite)


• Accès en lecture :

        - afficher(points[1,7])   {la valeur contenue en ligne 1 colonne 7 est affichée à l’écran}

• Accès en écriture :

        - points[2,4]  ← 36
        - saisir(points[2,4])  {la valeur fournie est enregistrée en ligne 2, colonne 4}

Saisir les valeurs d'un tableau 1D
 
Algorithme SaisieTableau
{remplit un tableau avec nbVal valeurs entières }
constantes  (TailleMAX : entier) ← 100
variables     nbVal, ind : entier
                  nombres : tableau [1, TailleMAX] d'entiers
début
     afficher ("Combien de valeurs sont à saisir?")
     saisir (nbVal)
     si nbVal > TailleMAX
          alors  {refuser la saisie : la capacité du tableau est dépassée}
               afficher ("trop de valeurs à saisir")
          sinon  pour ind ← 1 à nbVal faire  
                         afficher ("Donner une valeur")
                         {valeur à ranger dans la indème case du tableau}
                         saisir (nombres[ind])
                    fpour
     fsi
fin
 
Saisie avec « Drapeau »
 
Algorithme SaisieTableauAvecDrapeau
{remplit un tableau tant qu'il y a des caractères à ranger, dernier caractère : '\'}
constantes    (TailleMAX : entier) ← 100
                      (DRAPEAU : caractère) ← '\'
variables       nbLettres : entier {nombre de caractères rangés dans lettres}
                                       lettres : tableau [1, TailleMAX] de caractères
                                       unCar : caractère
début
    nbLettres ← 0

{saisie du premier caractère à ranger dans Lettres}
afficher (« Tapez un caractère, ou ", DRAPEAU,  "pour arrêter la saisie. ")
saisir (unCar )
{rangement du caractère saisi s’il est bon et saisie des caractères suivants}
tant que unCar ≠ DRAPEAU et nbLettres < TailleMAX faire
       nbLettres ← nbLettres + 1
       lettres[nbLettres ] ← unCar {caractère rangé dans la nbLettresème case du tableau}
       afficher (" Tapez un autre caractère, ou ", DRAPEAU,  "pour arrêter la saisie."
       saisir (unCar )  {saisie du caractère suivant}
ftq

{test de sortie de boucle}
       si  unCar = DRAPEAU
              alors afficher ("Valeurs saisies intégralement.")
              sinon afficher ("Trop de caractères à saisir, plus de place ! ")
       fsi
fin
 
Remarque : si unCar est différent de DRAPEAU, on est certainement sorti de la boucle parceque nbLettres est égal à TailleMAX.
 
Attention !
 
• Le drapeau ne doit PAS être rangé dans le tableau
• Le test de sortie ne peut pas être remplacé par
si nbLettres = TailleMAX
alors afficher ("Trop de caractères à saisir,
plus de place ! ")
sinon afficher ("Valeurs saisies intégralement.")
fsi
• Ne pas confondre
- taille maximale : TailleMAX (une constante)
- taille effective : nbLettres (une variable)

Affichage d’un tableau

Algorithme SaisitEtAffiche
{saisit et affiche un tableau de caractères}
constantes  {voir transparents précédents}
variables    {voir transparents précédents}
début
   {saisie du tableau : voir transparents précédents}
   {affichage}
   afficher ("Voici les", nbLettres, "caractères saisis dans le tableau :")
   pour cpt Å 1 à nbLettres faire
         afficher (lettres[cpt]) //ATTENTION exécuter la boucle seulement nbLettres fois!
   fpour
fin

Saisir les valeurs d'un tableau 2D

Algorithme SaisieTableau2D
{remplit un tableau à 2 dimensions }
constantes  (TailleMAX : entier) ← 100
variables    nbLignes, nbColonnes, indL, indC : entiers
                   nombres : tableau [1, TailleMAX ; 1, TailleMAX] d'entiers
début
   afficher ("Combien de lignes?") ;  saisir (nbLignes)
   afficher ("Combien de colonnes?") ;  saisir (nbColonnes)
   si nbLignes > TailleMAX ou nbColonnes > TailleMAX
      alors   afficher ("trop de valeurs à saisir")
      sinon  pour indL ← 1 à nbLignes faire  
                     pour indC ← 1 à nbColonnes faire
                        afficher ("Ligne" , inL, "colonne", indC, " : ")
                        saisir (nombres[indL indC])
                     fpour
               fpour
   fsi
fin

Article plus récent Article plus ancien

Leave a Reply