Cet atelier peut être réalisé en autonomie comme en atelier avec un enseignant.
Il n'y a pas d'obligation d'avoir suivi l'atelier précédent en présentiel pour pouvoir participer à cet atelier en présentiel.
# 🛠️ Atelier 4 – Tableaux
Pour les exercices suivants, on considérera que l’on dispose des fonctions suivantes, sans retour, qui prennent en paramètre un tableau et son nombre de cases et qui demande à l'utilisateur de remplir ce tableau :
```pseudo
// Fonction de saisie 1D
Fonction Saisie(tab : Entier[], nbCases : Entier) : Vide
{
Entier i;
Pour (i ← 0; i < nbCases; i++)
{
Ecrire("Entrez la valeur n°", i + 1, " : ");
Lire(tab[i]);
}
}
// Fonction de saisie 2D
Fonction Saisie(tab : Entier[][], nbLignes : Entier, nbColonnes : Entier) : Vide
{
Entier i, j;
Pour (i ← 0; i < nbLignes; i++)
{
Pour (j ← 0; j < nbColonnes; j++)
{
Ecrire("Entrez la valeur de la case [", i, "][", j, "] : ");
Lire(tab[i][j]);
}
}
}
```
### Question 1
Écrire un algorithme qui demande à l'utilisateur **combien de valeurs** il souhaite saisir, qui **remplit** un tableau avec ces valeurs, puis qui **indique** si le tableau est trié **dans l'ordre croissant**.
>[!tip]- Corrigé
>```pseudo
>// Algorithme TableauTrieCroissant
>Programme ()
>{
> Entier n, i;
> Lire(n);
> Entier t[n];
>
> // Saisie des n valeurs
> Saisie(t, n);
>
> // Vérification de l'ordre croissant (non strict : t[i-1] <= t[i])
> Booleen croissant;
> croissant ← Vrai;
> Pour (i ← 1; i < n; i++)
> {
> Si t[i - 1] > t[i]
> {
> croissant ← Faux;
> }
> }
>
> Si croissant
> {
> Ecrire("Les éléments du tableau sont triés dans l'ordre croissant.");
> }
> Sinon
> {
> Ecrire("Les éléments du tableau NE sont PAS triés dans l'ordre croissant.");
> }
>}
>```
> **Astuce**
> Remplacez `>` par `>=` si vous souhaitez **un tri strictement croissant** (interdire les égalités).
### Question 2
Déclarer un **tableau 2D**, demander à l'utilisateur le **nombre de lignes** et de **colonnes**, le **remplir**, puis **afficher la plus grande valeur** (première occurrence en cas d'égalité) **et sa position** dans le tableau.
>[!tip]- Corrigé
>```pseudo
>// Algorithme Max2D_et_Position
>Programme ()
>{
> Entier L, C, i, j;
> Lire(L);
> Lire(C);
> Entier m[L][C];
>
> // Saisie de la matrice
> Saisie(m, L, C);
>
> // Recherche du maximum (1ère occurrence)
> Entier maxVal, posI, posJ;
> maxVal ← m[0][0];
> posI ← 0;
> posJ ← 0;
>
> Pour (i ← 0; i < L; i++)
> {
> Pour (j ← 0; j < C; j++)
> {
> Si m[i][j] > maxVal
> {
> maxVal ← m[i][j];
> posI ← i;
> posJ ← j;
> }
> }
> }
> Ecrire("Max = ", maxVal, " en position [", posI, "][", posJ, "]");
>}
>```
> **Convention d’indices**
> Les indices utilisés ici sont **0-based** (la première ligne est `0`, la première colonne est `0`).
### Question 3
Calculer le **SomProd** de deux tableaux dont la **taille** et le **contenu** sont saisis par l'utilisateur.
Le **SomProd** est défini par :
SomProd(A, B) = Σᵢ Σⱼ A[i] × B[j]
> [!tip] Exemple
> Si A = [3, 6] et B = [4, 8, 7, 12], alors
> SomProd = 3×4 + 3×8 + 3×7 + 3×12 + 6×4 + 6×8 + 6×7 + 6×12 = **279**.
>[!tip]- Corrigé
>```pseudo
>// Algorithme SomProdDeuxTableaux
>Programme ()
>{
> Entier n1, n2, i, j;
> Lire(n1);
> Entier A[n1];
> Saisie(A, n1);
>
> Lire(n2);
> Entier B[n2];
> Saisie(B, n2);
>
> Entier som;
> som ← 0;
>
> Pour (i ← 0; i < n1; i++)
> {
> Pour (j ← 0; j < n2; j++)
> {
> som ← som + A[i] * B[j];
> }
> }
> Ecrire("SomProd = ", som);
>}
>```
## 🗓️ Historique
> **Dernière mise à jour :** `26 octobre 2025`
> **Rédigé par :** [[Julien DUQUENNOY]]