23.04.2015 Views

Enoncé du TD et TP sur les tableaux bi-dimensionnels - IUT

Enoncé du TD et TP sur les tableaux bi-dimensionnels - IUT

Enoncé du TD et TP sur les tableaux bi-dimensionnels - IUT

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Cours 6. Les <strong>tableaux</strong> <strong>bi</strong>-<strong>dimensionnels</strong><br />

Définition<br />

Un tableau <strong>bi</strong>dimensionnel est une structure de taille fixée perm<strong>et</strong>tant d'accèder de manière<br />

indépendante à un ensemble de valeurs de même type, valeurs repérées par deux coordonnées.<br />

Déclaration<br />

Tableau Nom (nbre de_colonnes, nbre_de_lignes ) en type des éléments<br />

exemple:<br />

Tableau Note(12,10) en Entier<br />

effectue la déclaration d'un tableau <strong>bi</strong>-dimensionnel de 13 colonnes <strong>et</strong> 10 lignes.<br />

On peut alors accèder de l'élément Note (0,0) à l'élément Note (13,11)<br />

Exemple:<br />

Tableau Note(12,10) en Entiers<br />

Variab<strong>les</strong> i, j, Moy, Som en Entiers<br />

Début<br />

Pour j ← 0 à 11<br />

Pour i ← 0 à 13<br />

Ecrire ("Entrez la note n°", i,j)<br />

Lire Note(i,j)<br />

i Suivant<br />

j Suivant<br />

Som ← 0<br />

Pour j ← 0 à 11<br />

Pour i ← 0 à 13<br />

Som ← Som + Note(i)<br />

i Suivant<br />

j Suivant<br />

Moy ← Som / (13*10)<br />

Fin<br />

Page 1/6 - LP VI – Contrôle In<strong>du</strong>striel – Cours 6 – Les <strong>tableaux</strong> <strong>bi</strong>-<strong>dimensionnels</strong>


Exercice 1:<br />

Quel résultat pro<strong>du</strong>ira c<strong>et</strong> algorithme ?<br />

Tableau X(1, 2) en Entier<br />

Variab<strong>les</strong> i, j, val en Entier<br />

Début<br />

Val ← 1<br />

Pour i ← 0 à 1<br />

Pour j ← 0 à 2<br />

X(i, j) ← Val<br />

Val ← Val + 1<br />

j Suivant<br />

i Suivant<br />

Pour i ← 0 à 1<br />

Pour j ← 0 à 2<br />

Ecrire X(i, j)<br />

j Suivant<br />

i Suivant<br />

Fin<br />

Exercice 2:<br />

Quel résultat pro<strong>du</strong>ira c<strong>et</strong> algorithme ?<br />

Tableau X(1, 2) en Entier<br />

Variab<strong>les</strong> i, j, val en Entier<br />

Début<br />

Val ← 1<br />

Pour j ← 0 à 2<br />

Pour i ← 0 à 1<br />

X(i, j) ← Val<br />

Val ← Val + 1<br />

i Suivant<br />

j Suivant<br />

Pour i ← 0 à 1<br />

Pour j ← 0 à 2<br />

Ecrire X(i, j)<br />

j Suivant<br />

i Suivant<br />

Fin<br />

Exercice 3:<br />

Quel résultat pro<strong>du</strong>ira c<strong>et</strong> algorithme ?<br />

Tableau T(3, 1) en Entier<br />

Variab<strong>les</strong> k, m, en Entier<br />

Début<br />

Pour k ← 0 à 3<br />

Pour m ← 0 à 1<br />

T(k, m) ← k + m<br />

m Suivant<br />

k Suivant<br />

Page 2/6 - LP VI – Contrôle In<strong>du</strong>striel – Cours 6 – Les <strong>tableaux</strong> <strong>bi</strong>-<strong>dimensionnels</strong>


Pour k ← 0 à 3<br />

Pour m ← 0 à 1<br />

Ecrire T(k, m)<br />

m Suivant<br />

k Suivant<br />

Fin<br />

Exercice 4:<br />

Ecrire un algorithme qui remplit un tableau de 3 lignes <strong>et</strong> 2 colonnes avec des entiers compris entre<br />

0 <strong>et</strong> 9. La saisie de chaque valeur doit être réitérée si l'entier saisi n'est pas un nombre. L'algorithme<br />

doit calculer <strong>et</strong> afficher le max <strong>du</strong> tableau. L'algorithme doit également déterminer l'entier dont le<br />

nombre d'apparitions est le plus élevé. Si le nombre d'apparitions le plus élevé correspond à deux<br />

entiers différents, le programme affiche l'entier le plus faible.<br />

Exemple:<br />

8 2<br />

2 5<br />

1 3<br />

Le programme doit afficher que la valeur 8 est la plus grande <strong>et</strong> que la valeur 2 est la plus présente<br />

dans le tableau.<br />

<strong>TP</strong> Gestion de données dans une feuille d'un tableur<br />

L'objectif de ce <strong>TP</strong> est de manipuler des <strong>tableaux</strong> 2D (appelés source <strong>et</strong> destination) ainsi que la<br />

constitution de l'histogramme des valeurs de chacun de ces <strong>tableaux</strong>.<br />

A/ : Ouverture <strong>du</strong> classeur <strong>TP</strong>INFO_2 <strong>et</strong> de la feuille de travail<br />

1 / Ouvrir le classeur “tp_tab2D_exemple.ods” présent dans le répertoire commun.<br />

2/ Ouvrir la seuille “<strong>TP</strong>1_tab2D” . C'est dans c<strong>et</strong>te feuille que nous allons travailler<br />

3/ Enregistrer le classeur dans votre répertoire de travail sous le nom « <strong>TP</strong>INFO_2 » (Fichier-Enregistrer)<br />

B/ : Lecture-Ecriture de données dans la feuille « <strong>TP</strong>2a »<br />

1/ Ouvrir la fenêtre de programmation en « Basic Obj<strong>et</strong> » :<br />

Sélectionner Outils – Macro – Macro..... puis dans la liste « macro de » , sélectionner « Standard » dans<br />

votre classeur « <strong>TP</strong>INFO_2.sxc » - Sélectionner le mo<strong>du</strong>le 1.<br />

La fenêtre de programmation en Basic apparaît avec des lignes déjà écrites.<br />

Pour manipuler des données dans une feuille, le tableur doit connaître l'arborescence qui con<strong>du</strong>it <strong>du</strong><br />

classeur à la case élémentaire (Cellule). Une case peut être repérée par une l<strong>et</strong>tre <strong>et</strong> un chiffre (ex.<br />

B3 ), un groupe rectangulaire de cases par deux cases en diagonale ( ex A1 : C12 ).<br />

Page 3/6 - LP VI – Contrôle In<strong>du</strong>striel – Cours 6 – Les <strong>tableaux</strong> <strong>bi</strong>-<strong>dimensionnels</strong>


Les variab<strong>les</strong> globa<strong>les</strong> de type « Obj<strong>et</strong> » sont utilisées avec l’option « explicit » soit :<br />

Option explicit<br />

Dim MonClasseur As Object<br />

Dim MesFeuil<strong>les</strong> As Object<br />

Dim MaFeuilleEnCours<br />

REM *** Tableau source<br />

Dim MesCases_source As Object<br />

Dim UneCase_source As Object<br />

REM *** Tableau destination<br />

Dim MesCases_destination As Object<br />

Dim UneCase_destination As Object<br />

REM *** Histogramme<br />

Dim MesCases_histogramme As Object<br />

Dim UneCase_histogramme As Object<br />

Un classeur est un obj<strong>et</strong> qui contient plusieurs feuil<strong>les</strong> identifiées par leur nom ( par ex. <strong>TP</strong>2a ) ou<br />

par un numéro. Chaque feuille contient des cellu<strong>les</strong> identifiab<strong>les</strong> par zone (par ex. "a2:d11") ou<br />

indivi<strong>du</strong>ellement (par ex 0,0 qui correspond à la case A2 )<br />

Le sous-programme suivant perm<strong>et</strong> d'associer des données de la feuille , à savoir <strong>les</strong> 3 <strong>tableaux</strong>, aux<br />

variab<strong>les</strong> globa<strong>les</strong><br />

Sub DefEspaceTravail<br />

REM *** on prend le classeur actuel<br />

MonClasseur = ThisComponent<br />

REM *** on considère la feuille "<strong>TP</strong>1_tab2D"<br />

MesFeuil<strong>les</strong> = MonClasseur.She<strong>et</strong>s<br />

MaFeuilleEnCours = MesFeuil<strong>les</strong>.g<strong>et</strong>ByName("<strong>TP</strong>1_tab2D")<br />

REM *** Tableau Source<br />

REM *** selection de la zone de cellu<strong>les</strong> considérées a2:d11<br />

MesCases_source = MaFeuilleEnCours.g<strong>et</strong>CellRangeByName("a2:d11")<br />

REM *** Tableau Destination<br />

REM *** selection de la zone de cellu<strong>les</strong> considérées f2:i11<br />

MesCases_destination = MaFeuilleEnCours.g<strong>et</strong>CellRangeByName("f2:i11")<br />

REM *** Tableau Histogramme<br />

REM *** selection de la zone de cellu<strong>les</strong> considérées a14:j15<br />

MesCases_histogramme = MaFeuilleEnCours.g<strong>et</strong>CellRangeByName("a14:j15")<br />

end sub<br />

Le sous-programme suivant perm<strong>et</strong> d'initialiser <strong>les</strong> 3 <strong>tableaux</strong> avec des valeurs dépendant des<br />

coordonnées des cellu<strong>les</strong>.<br />

Page 4/6 - LP VI – Contrôle In<strong>du</strong>striel – Cours 6 – Les <strong>tableaux</strong> <strong>bi</strong>-<strong>dimensionnels</strong>


Sub Res<strong>et</strong>_tableau<br />

REM *** définition des variab<strong>les</strong> loca<strong>les</strong> à la procé<strong>du</strong>re<br />

REM *** indice des bouc<strong>les</strong><br />

Dim i,j as integer<br />

REM *** nombre de colonnes <strong>et</strong> de lignes des différents <strong>tableaux</strong><br />

Dim nCols, nLignes as integer<br />

REM **** définition de l'espace de travail<br />

DefEspaceTravail<br />

REM *** initialisation <strong>du</strong> tableau source<br />

REM ***Calcul <strong>du</strong> nombre de colonnes <strong>du</strong> tableau source<br />

nCols = MesCases_source.Columns.Count<br />

REM *** Calcul <strong>du</strong> nombre de lignes <strong>du</strong> tableau source<br />

nLignes = MesCases_source.Rows.Count<br />

REM *** parcours <strong>du</strong> tableau<br />

For j = 0 To nLignes - 1<br />

For i = 0 To nCols - 1<br />

UneCase_source = MesCases_source.g<strong>et</strong>CellByPosition(i,j)<br />

UneCase_source.Value = j* nCols + i<br />

Next i<br />

Next j<br />

REM *** initialisation <strong>du</strong> tableau destination<br />

REM ***Calcul <strong>du</strong> nombre de colonnes <strong>du</strong> tableau source<br />

nCols = MesCases_destination.Columns.Count<br />

REM *** Calcul <strong>du</strong> nombre de lignes <strong>du</strong> tableau source<br />

nLignes = MesCases_destination.Rows.Count<br />

REM *** parcours <strong>du</strong> tableau<br />

For j = 0 To nLignes - 1<br />

For i = 0 To nCols - 1<br />

UneCase_destination = MesCases_destination.g<strong>et</strong>CellByPosition(i,j)<br />

UneCase_destination.Value = 0<br />

Next i<br />

Next j<br />

REM *** initialisation de l'histogramme<br />

REM ***Calcul <strong>du</strong> nombre de colonnes de l'histogramme<br />

nCols = MesCases_histogramme.Columns.Count<br />

REM *** parcours <strong>du</strong> tableau<br />

For i = 0 To nCols - 1<br />

UneCase_histogramme = MesCases_histogramme.g<strong>et</strong>CellByPosition(i,0)<br />

UneCase_histogramme.Value = i<br />

UneCase_histogramme = MesCases_histogramme.g<strong>et</strong>CellByPosition(i,1)<br />

UneCase_histogramme.Value = 0<br />

end sub<br />

Next i<br />

Page 5/6 - LP VI – Contrôle In<strong>du</strong>striel – Cours 6 – Les <strong>tableaux</strong> <strong>bi</strong>-<strong>dimensionnels</strong>


Ce sous-programme est associé au bouton intitulé “initialisation” de la feuille courante.<br />

Travail à faire:<br />

Bouton RAZ<br />

Ecrire un sous-programme dans le mo<strong>du</strong>le1 qui remplit le tableau source avec des valeurs<br />

comprises entre 0 <strong>et</strong> 9 <strong>et</strong> dépendantes des coordonnées des cellu<strong>les</strong>. Pour cela, il faut utiliser<br />

l'instruction x mod y qui calcule le mo<strong>du</strong>lo de x par rapport à y.<br />

Bouton Saisie<br />

Ecrire un sous-programme dans le mo<strong>du</strong>le1 qui vérifie que <strong>les</strong> valeurs <strong>du</strong> tableau source sont<br />

comprises entre 0 <strong>et</strong> 9. Quand c<strong>et</strong>te condition n'est pas respectée, le programme saisit une nouvelle<br />

valeur avec la fonction inputbox.<br />

Bouton Copie Src->Dest<br />

Bouton Saisie<br />

Ecrire un sous-programme dans le mo<strong>du</strong>le1 qui recopie le contenu <strong>du</strong> tableau source vers le tableau<br />

destination.<br />

Bouton Max<br />

Ecrire un sous-programme dans le mo<strong>du</strong>le1 qui calcule <strong>et</strong> affiche la valeur max <strong>du</strong> tableau source.<br />

Bouton Seuillage<br />

Ecrire un sous-programme dans le mo<strong>du</strong>le1 qui saisit un seuil compris entre 0 <strong>et</strong> 9. Le programme<br />

recopie alors le tableau source vers le tableau destination avec la règle suivante:<br />

Si la source > seuil alors affecter la destination à 100 sinon affecter la destination à 0.<br />

Bouton Histogramme<br />

Ecrire un sous-programme dans le mo<strong>du</strong>le1 qui construit l'histogramme des valeurs <strong>du</strong> tableau<br />

source, <strong>et</strong> ce pour <strong>les</strong> valeurs comprises entre 0 <strong>et</strong> 9. Le programme doit ensuite r<strong>et</strong>rouver la valeur<br />

<strong>du</strong> tableau source avec le nombre d'apparitions le plus élevé. Si le nombre d'apparitions le plus<br />

élevé correspond à deux valeurs différentes, le programme affiche la valeur le plus faible.<br />

Page 6/6 - LP VI – Contrôle In<strong>du</strong>striel – Cours 6 – Les <strong>tableaux</strong> <strong>bi</strong>-<strong>dimensionnels</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!