Écrivez un algorithme qui fusionne deux tableaux (déjà existants) dans un trois

Écrivez un algorithme qui fusionne deux tableaux (déjà existants) dans un troisième, qui devra être trié. Attention ! On présume que les deux tableaux de départ sont préalablement triés : il est donc irrationnel de faire une simple concaténation des deux tableaux de départ, puis d'opérer un tri : comme quand on se trouve face à deux tas de papiers déjà triés et qu'on veut les réunir, il existe une méthode bien plus économique (et donc, bien plus rationnelle...) Début (...) Afini ← faux Bfini ← faux ia ← 0 ib ← 0 ic ← -1 TantQue Non(Afini) ou Non(Bfini) ic ← ic + 1 Redim C(ic) Si Afini ou A(ia)>B(ib) Alors C(ic) ← B(ib) ib ← ib + 1 Bfini ← ib > n Sinon C(ic) ← A(ia) ia ← ia + 1 Afini ← ia > m FinSi FinTantQue Fin Ecrire un module permettant de faire le tri d'un tableau T de type TAB et de taille n, avec la méthode de tri par sélection. 0)DEF Proc Tri_selection (VAR T :TAB ; n :entier) 1)Pour i de 1 à n-1 faire [pos_min←i] Pour j de i+1 à n faire Si ( T[j] < T[pos_min])Alors pos_min ← j Finsi FinPour Si ( pos_min <> i) Alors aux ←T[i] t[i]←T[Pos_min] t[pos_min]←aux Finsi FinPour 2)Fin Tri_selection Ecrire un module permettant de faire le tri d'un tableau T de type TAB(tableau d'entiers) et de taille n, avec la méthode de tri à bulles. 0) DEF Proc Tri_Bulles (VAR T :TAB , n :entier) 1) Répéter Echange ←faux Pour i de 1 à n-1 faire Si ( T[i] > T[i+1])Alors Permute(T[i], T[i+1]) Echange ← vrai FinSi FinPour n ← n-1 Jusqu'à (Echange = Faux) ou (n=1) 2) Fin Tri_Bulles Ecrire un module permettant de faire le tri d'un tableau T de type TAB(tableau d'entiers) et de taille n, avec la méthode de tri par insertion. 0) DEF Proc Tri_insertion (VAR T :TAB , n :entier) 1) Pour i de 2 à n faire TMP ←T[i] j ← i Tant que (j > 1) et (T[j-1] > TMP) faire T[j] ← T[j-1] j ← j-1 FinTantque T[j] ← TMP FinPour 2) Fin Tri_insertion Ecrire un module permettant de fusionner deux tableaux triés T1 et T2 de taille respective n1 et n2 (entre 1 et 10) dans un tableau T de taille n. Exemple : 1 2 3 4 5 6 T 1 3 7 12 20 35 50 1 2 3 4 T 2 1 5 15 18 Résultat de la fusion : 1 2 3 4 5 6 7 8 9 10 T 1 3 5 7 12 15 18 20 35 50 0) Def proc fusionner(t1 : TAB1,n1 :entier,t2: TAB2,n2 :entier,var T: TAB,var n :entier) 1) I←1 2) J←1 3) n←0 4) Tant que (i<=n1) et (j<=n2) faire Si T1[i]<=T2[j] alors n←n+1 T[n]← T1[i] I←i+1 Sinon n←n+1 T[n]← T2[j] j←j+1 Finsi Fin tant que 5) Tant que( i<=n1) faire //le tableau T2 épuisé, recopier le reste de T1 dans le tableau de fusion n←n+1 T[n]←t1[i] I←i+1 Fin tantque 6) Tant que (j<=n2) faire //le tableau T1 épuisé, recopier le reste de T2 dans le tableau de fusion n←n+1 T[n]←t2[j] j←j+1 Fin tantque 7) Fin fusionner Exercice 19 Une classe est composée de 30 élèves. Le professeur d'arabe Mr Najib veut utiliser l'ordinateur pour faire la moyenne trimestrielle et le rang de ses élèves. Sachant que la moyenne = (note1+2*note2)/3, Mr Najib veut afficher les résultats sous forme d'un tableau comportant : Nom Prénom Note 1 Note2 Moyens Rangs ………… ………… ………… ………… ………… ………… ………… ………… ………… ………… ………… ………… Exercice 19 Program TRI_SELECTION ; Uses Wincrt ; Const n = 20 ; Type Tab = Array [1.. n] of String ; Var T : Tab ; i , j , posmin : Integer ; tmp : String; Begin Writeln ('Remplir le tableau par des chaînes :'); FOR i := 1 TO n DO Readln (T[i]) ; FOR i := 1 TO n-1 DO Begin posmin := i ; FOR j := i+1 TO n DO IF T[j] < T[posmin] Then posmin := j ; IF i<> posmin Then Begin tmp := T[i] ; T[i] := T[posmin] ; T[posmin] := tmp ; End ; End ; Writeln ('Tableau trié :'); FOR i := 1 TO n DO Writeln (T[i]) ; End. Exercice 22 program tri_2_criteres; uses wincrt,ecran; const n=10; type tab=array[1..n] of string; var t:tab; i,j,pos:integer; aux:string; begin writeln('Remplir T :'); for i:=1 to n do repeat write('ch = '); readln(t[i]); until t[i]<>''; (***************************) for i:=1 to n-1 do begin pos:=i; for j:=i+1 to n do if (length(t[j])<>pos then begin aux:=t[i] ; t[i]:=t[pos]; t[pos]:=aux; end; end; (****************************) for i:=1 to n do writeln (t[i]); end. Exercice 23 Program tri_bulles_bidirectionnel; uses wincrt; type tab=array[1..25] of integer; var t:tab; n:integer; (********************************************) procedure saisir(var n:integer); begin repeat writeln('Donner un entier entre 5 et 25'); readln(n); until n in [5..25]; end; (********************************************) procedure remplir (var t:tab ; n:integer); var i:integer; begin randomize; for i:=1 to n do T[i]:=1+random(100); end; (********************************************) procedure trier (var T:tab ;n:integer); var i,j,aux:integer; permut:boolean; (**********************) begin j:=0; repeat permut:=false; j:=j+1; for i:=j to n-1 do if t[i]>t[i+1] then begin aux:=T[i]; T[i]:=T[i+1]; T[i+1]:=aux; permut:=true; end; if permut = true then begin permut:=false; for i:=n-1 downto j+1 do if t[i]=n); end; (*********************************************) procedure afficher(T:tab ; n:integer); var i:integer; begin for i:=1 to n do write(T[i],' '); end; (******************* P.P. **********************) BEGIN saisir(n); remplir(t,n); writeln('Tableau avant le tri :'); afficher(t,n); trier(t,n); writeln; writeln('Tableau après le tri :'); afficher(t,n); END. Exercice 24 Program tri_2_criteres; uses wincrt,ecran; type tch=array[1..10] of string[20]; tc=array[1..10] of char; var n:integer; t:tch; c:tc; (*********************************************) procedure saisie(var n:integer;var t:tch;var c:tc); var i:integer; begin write ('N = ');readln(n); writeln ('remplir les tableaux T et C :'); for i:=1 to n do begin write('nom = '); readln(t[i]); repeat write ('couleur = '); readln (c[i]); until c[i] in ['B','N']; end; end; (*********************************************) procedure tri(n:integer;var t:tch;var c:tc); var i:integer; permut:boolean; aux:string; tmp:char; begin repeat permut:=false; for i:=1 to n-1 do if (c[i]>c[i+1])or((c[i]=c[i+1])and(t[i]>t[i+1])) then begin aux:=t[i] ; t[i]:=t[i+1]; t[i+1]:=aux; tmp:=c[i] ; c[i]:=c[i+1]; c[i+1]:=tmp; permut:=true end; n:=n-1 until (permut=false) or (n=1); end; (**************************************************) procedure affiche (n:integer;t:tch;c:tc); var i:integer; begin for i:=1 to n do writeln(t[i],' ',c[i]); end; (*******************P.P******************************) Begin Saisie (n, (n,t,c); tri (n,t,c); affiche (n,t,c); End. Exercice 25 Program fusion_2_tab; uses wincrt; type tab1=array [1..20] of integer; tab2=array [1..40] of integer; var v1,v2:tab1; v3:tab2; n,m,c:integer; (*******************************************) procedure lecture (var taille:integer); begin repeat readln(taille); until taille in [2..20]; end; (********************************************) procedure remplir (var t:tab1; taille:integer); var i:integer; begin for i:= 1 to taille do readln(t[i]); end; (********************************************) procedure trier (taille:integer;var t:tab1); var i,tmp, min,j:integer; begin for i:=1 to taille-1 do begin min:=i; for j:=i+1 to taille do if t[j]<>min then begin tmp:=t[i]; t[i]:=t[min]; t[min]:=tmp; end; end; end; (********************************************) procedure fusionner (v1,v2:tab1; var v3:tab2; n,m:integer; var c:integer); var i,c1,c2:integer; begin c1:=1; c2:=1; c:=0; repeat c:=c+1; if v1[c1]n) or (c2>m); if c1>n then for i:=c2 to m do begin c:=c+1; v3[c]:=v2[i]; end else for i:=c1 to n do begin c:=c+1; v3[c]:=v1[i]; end; end; (********************************************) procedure afficher (t:tab2; taille:integer); var i:integer; begin writeln('Tableau fusion :'); for i:= 1 to taille do write (t[i]:4); end; (**********************P.P*********************) begin write ('Taille du tableau V1 : '); lecture (n); write ('Taille du tableau V2 : '); lecture (m); writeln ('Remplir le tableau V1 :'); remplir (v1,n); writeln ('Remplir le tableau V2 :'); remplir (v2,m); trier (n,v1); trier (m,v2); fusionner (v1,v2,v3,n,m,c); afficher (v3,c); end. uploads/Litterature/ rayene-2 1 .pdf

  • 19
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager