program algorithmesDeTri; uses crt; const Taille_Max = 100; type suiteEntiers = record nbElements:integer; elements : array[1..Taille_Max] of integer; end; var s:suiteEntiers; {pour memoriser les elements } choix:integer; {pour le menu} fin:boolean; {pour arreter le programme} procedure lireSuite(var s:suiteEntiers); var i:integer; begin repeat write('Nombre d''elements de la suite ? '); readln(s.nbElements); until ((s.nbElements>=0) and (s.nbElements<=Taille_Max)); for i:=1 to s.nbElements do begin write('element[',i,'] ? ');readln(s.elements[i]); end; end; procedure afficherSuite(s:suiteEntiers); var i:integer; begin write('{'); for i:=1 to s.nbElements do write(s.elements[i],' '); writeln('}'); end; procedure triInsertionDicho(var s:suiteEntiers); var x, i, pos:integer; function rechercherPosRec(x:integer;debut,fin:integer;s:suiteEntiers):integer; var milieu:integer; begin if (debut<=fin) then begin milieu:=(debut+fin) div 2; if (x=s.elements[milieu]) then rechercherPosRec:=milieu else if (xmilieu) then begin while (j<=fin) do begin s2.elements[k]:=s1.elements[j]; k:=k+1;j:=j+1; end end else begin while(i<=milieu) do begin s2.elements[k]:=s1.elements[i]; k:=k+1;i:=i+1; end; end; end; begin if(debut pour tri insertion dichotomique'); writeln('Tapez <2> pour tri a bulles'); writeln('Tapez <3> pour tri fusion'); writeln('Tapez <4> pour tri rapide'); writeln('Tapez <5> pour quitter le programme'); write('Votre choix? ');readln(choix); end; begin fin:=false; repeat clrscr; menu(choix); case choix of 1: begin lireSuite(s); triInsertionDicho(s); writeln('La suite triee est : '); afficherSuite(s); readln; end; 2: begin lireSuite(s); triBulles(s); writeln('La suite triee est : '); afficherSuite(s); readln; end; 3: begin lireSuite(s); triFusion(1,s.nbElements,s); writeln('La suite triee est : '); afficherSuite(s); readln; end; 4: begin lireSuite(s); triRapide(1,s.nbElements,s); writeln('La suite triee est : '); afficherSuite(s); readln; end; 5: fin:=true; end; until fin; end.