Practice Session (Arrays)
L’objectif de session est de traiter une collection de problèmes sur les tableau et les matrices pour renforcer votre compréhension de leurs opérations basiques:
- Maitriser les déclarations et nature d’un tableau basique en C++.
- Utiliser efficacement la collection
vector
. - Se familiariser avec les containers de Stanford comme
Vector
etGrid
.
Overview
Raw Arrays
Section pour traiter des tableaux simples (sans la classe vector).
Array Mystery1
On considère le problème ArrayMystery où, on nous donne la fonction suivante:
void mystery(int list[], int lenght)
{
for(int i = 1; i < length; i++)
list[i] = list[i] + list[i - 1];
}
Pour chaque entrée, indiquer les valeurs du tableau après l’appel de la fonction.
1. {8}
2. {6, 3}
3. {2, 4, 6}
4. {1, 2, 3, 4}
5. {7, 3, 2, 0, 5}
Array Mystery2
On considère le problème ArrayMystery où, on nous donne la fonction suivante:
void mystery2(int list[], int lenght)
{
for(int i = 0; i< length - 1; i++)
if(i % 2 == 0)
list[i]++;
else
list[i]--;
}
Pour chaque entrée, indiquer les valeurs du tableau après l’appel de la fonction.
1. {6, 3}
2. {2, 4, 6}
3. {1, 2, 3, 4}
4. {2, 2, 2, 2, 2}
5. {7, 3, 2, 0, 5, 1}
Array Mystery3
On considère le problème ArrayMystery où on nous donne la fonction suivante:
void arrayMystery(int a[], int length)
{
for(int i=0; i < length - 1; i++)
if ( a[i] > a[ i + 1])
{
int temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
a[0]++;
}
}
Pour chaque entrée, indiquer les valeurs du tableau après l’appel de la fonction.
1. {5, 2, 5, 2}
2. {30, 10, 20 ,50, 40}
3. {99, 88, 77, 66, 55, 44}
Banish
On considère l’exercice Banish où on nous demande d’écrire une fonction banish
qui reçoit deux vecteurs d’entiers \(a_1\) et \(a_2\) et leurs longueur comme paramètre. Puis la fonction supprime toutes les occurrences de \(a_2\) du vecteur \(a_1\).
Un élément est supprimé est déplaçant tous les élément à sa droite puis un insérant un 0 à la place vacante.
Par exemple
int a1[] = {42, 3, 9, 42, 42, 0, 42, 9, 42, 42, 17, 8, 2222, 4, 9, 0, 1};
int a2[] = {42, 2222, 9};
banish(a1, 17, a2, 3);
Après l'appel le vecteur $$a_1$$ sera:
```shell
a_1 = {3, 0, 17, 8, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
Vectors
Collection Mystery1
Dans le problème Collection Mystery1, on considère la fonction utilisant la classe Vector
void collectionMystery1(Vector<int> & list)
{
for(int i=0; i< list.size(); i++)
{
int n = list[i];
list.remove(i);
if( n % 2 == 0)
list.add(i);
}
}
Quel sera l’état de chaque vecteur listé après l’appel de cette fonction.
1. {5, 2, 5, 2}
2. {3, 5, 8, 9, 2}
3. {0, 1, 4, 3, 1, 3}
Cumulative
Dans le problème Cumulative, votre tache est d’écrire une fonction cumulative
qui reçoit une reference à un Vector d’entiers qui le modifie en cumulant la somme des éléments visités.
Par exemple si on reçoit le tableau
{1, 1, 2, 3, 5}====> {1, 2, 4, 7, 12}
Histogram
Le but du problème Histogram est d’écrire une fonction histogram
qui accepte une référence d’un tableau d’entiers. Ce tableau contient les notes qui sont dans la rangée \([0-49]\).
Cette fonction doit afficher un histogramme groupé par \(10\). Par exemple pour le tableau \(\{48, 20, 31, 49, 35, 45, 33, 26, 48, 32, 19\}\), la fonction doit afficher
0's : {}
10's : {19}
20's : {20, 26}
30's : {31, 35, 33, 32}
40's : {48, 49, 45, 48}
Grids
CrossSum
Dans le problème Cross Sum, on nous demande d’écrire une fonction
nommée crossSum
qui reçoit une rérérence sur un grille et deux indices
row et col. Cette fonction doit renvoyer la somme de la ligne row et
la colonne col ( sans répétition).
Par exemple, pour la matrice
G = ((1,2,3),
(4,5,6),
(7,8,9))
et les valeurs row=1
, col=1
, la fonction doit renvoyer 2+5+8+4+6
Flatten
Le but de l’exercice Flatten et de contruire un vecteur à partir d’une matrice (Grid).Ainsi, on vous demande d’écrire une fonction flatten
qui reçoit une référence sur une Grille G et construit un Vector
en regroupant les éléments de \(G\) ligne par ligne.
Par exemple pour l’appel de la fonciton sur la matrice suivante:
\[\begin{pmatrix} 3 & 8 & 12\\ 2 & 9 & 17\\ 43 & -8 & 46\\ 203 & 14 & 97 \end{pmatrix}\]renvoie le vecteur \(V=(3, 8, 12, 2, 9, 17, 43, -8, 46, 203, 14, 97)\).
Swap
Pour l’exercice Swap, on vous demande d’écrire une fonction mirror
qui accepte une référence sur un Grid $G$ qui est carré et qui la permute dans le sens de la diagonale principale.
multTable
L’exercice mult Table vous demande d’écrire une fonction multTable
qui reçoit une référence sur une grille \(G\) et un entier max et qui remplie cette grille par les éléments de la table de multiplication.
Par exemple pour l’appel de la fonction avec \(max=5\), on aura la grille suivante:
col 0 1 2 3 4
row
0 { {0, 0, 0, 0, 0},
1 {0, 1, 2, 3, 4},
2 {0, 2, 4, 6, 8},
3 {0, 3, 6, 9, 12},
4 {0, 4, 8, 12, 16} }