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)
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!
{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
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
Aucun commentaire:
Enregistrer un commentaire