Pierre-Louis CAYREL 2008-2009 Prépa HEC 2 disponible sur www.cayrel.net Lycée Lavoisier Feuille n 3 Tableaux Exercice 1 On déclare un tableau T d entiers indicés de 1 à 100. 1. Écrire un programme qui demande les 100 valeurs à l utilisateur. 2. Compléter le programme pour que soit affichées les valeurs minimales et maximales du tableau. 3. Compléter le programme écrit en 1 pour qu il détermine la première position d un nombre x (donné par l utilisateur) dans le tableau. Si celui-ci n est pas présent, on affiche nombre absent. Exercice 2 Écrire la fonction ecrire_tab qui initialise au clavier un tableau de nombres entiers définis par la déclaration suivante : ttab = ARRAY [1..n] OF integer; Exercice 3 Écrire la procédure ini_alea qui initialise de façon aléatoire un tableau avec des nombres entiers compris entre 0 et 100 (exclus). Exercice 4 Écrire la procédure recitation qui permet d afficher à l écran, de façon lisible, tous les éléments du tableau. Exercice 5 Écrire une procédure qui initialise une matrice (n, p) ou un déterminant (n, n). On utilisera la structure de données suivantes pour une matrice (n, p) : tmat_np = ARRAY [1..n,1..p] OF real; Exercice 6 Écrire une fonction qui effectue la multiplication d une matrice (m lignes, l colonnes) par une matrice (l lignes, n colonnes) et range les résultats dans une troisième matrice (m lignes, n colonnes). On rappelle la relation : mat m n[i, j] = l mat m l[i, k] mat l n[k, j]. k=1 Exercice 7 Écrire la fonction nb_occ qui rende le nombre d occurence d un élément donné dans une liste rangée dans un tableau. Exercice 8 Écrire la fonction mini qui rende le plus petit des éléments d un tableau. Exercice 9 Écrire la procédure qui initialise un tableau de longueur n avec les n premiers nombres premiers. Exercice 10 Écrire une fonction permettant de voir si un tableau est un palindrome. 1
Pierre-Louis CAYREL 2008-2009 Prépa HEC 2 disponible sur www.cayrel.net Lycée Lavoisier Feuille n 3 Tableaux Correction 1 1. VAR T : ARRAY[1..100] OF integer; 2. VAR T : ARRAY[1..100] OF integer; i,min,max : integer; min := T[1]; max := T[1]; FOR i := 2 TO 100 DO IF T[i] < min THEN min := T[i]; IF T[i] > max THEN max := T[i]; WriteLn( Le minimum est,min); WriteLn( Le maximum est,max); 3. VAR T : ARRAY[1..100] OF integer; i,min,max : integer; WriteLn( valeur cherchee? ); 1
ReadLn(x); i := 0; REPEAT i := i+1; UNTIL (T[i] = x) OR (i = 100); IF T[j] = x THEN Write( 2ere apparition en,i) ELSE Write( nombre absent ); Correction 2 procedure ecrire_tab (VAR tab : ttab); VAR readln (tab[i]) Correction 3 procedure ini_alea (VAR tab : ttab); VAR Randomize; tab[i] := random(100) Correction 4 procedure recitation (tab : ttab); VAR WriteLn (tab[i]) Correction 5 procedure remplissage (VAR mat : tmat_np); VAR i,j,a : integer; FOR j := 1 TO p DO mat[i,j] := a; Correction 6 2
procedure produit_mat (mat1 : tmat_ml, mat2 : tmat_ln; VAR mat3 : tmat_mn); VAR i,j : integer; FUNCTION somme (a,b : integer) : real; VAR k : integer; res := real; res := 0; FOR k := 1 TO l DO res := res + mat1[a,k]*mat2[k,b]; somme := res; FOR j := 1 TO p DO mat3[i,j] := somme(i,j); Correction 7 FUNCTION nb_occur (nombre : real, liste : ttab) : integer; VAR i,compteur : integer; compteur := 0; IF liste[i] = nombre THEN compteur := compteur + 1; nb_occur := compteur; Correction 8 FUNCTION mini (tab : ttab) : real; VAR min : real; min := tab[1]; IF tab[i] < min THEN min := tab[i]; mini := min; Correction 9 CONST n=; TYPE ttab = ARRAY [1..n] OF integer; PROCEDURE tableau_premier (VAR tab : ttab); VAR i,nbre : integer; 3
FUNCTION premier (x : integer) : boolean; VAR k : integer; prem : boolean; prem := true; k := 1; WHILE (k < i) and prem DO IF x mod tab[k] = 0 THEN prem := false ELSE k := k + 1; premier := prem tab[1] := 2; i := 2; nbre := 3; WHILE i <= n DO IF premier(nbre) THEN tab[i] := nbre; i := i + 1 nbre := nbre + 2; Correction 10 FUNCTION palindrome (tab : ttab) : boolean; FUNCTION miroir(tab1 : ttab) : ttab; VAR tableau : ttab; tableau[i] := tab1[n-i+1]; miroir := tableau; palindrome := (tab1 = miroir(tab1)); 4