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]]