Exercice 1 :
program ex1_ds3;
uses wincrt;
var
a,b:longint;
procedure saisie(var a,b:longint);
begin repeat
write('Donner a suivie de b ');
readln(a,b);
until (a>2) and (a<b) and(b<50000);
end;
function premier(n:integer):boolean;
var
test:boolean;
i:integer;
begin i:=1;
repeat i:=i+1;
if n mod i=0 then test:=false else test:=true;
until (test=false) or (i=n div 2);
premier:=test;
end;
function puiss(x,y:integer):longint;
var i:integer;
p:longint;
begin p:=1;
for i:=1 to y do p:=p*x;
puiss:=p;
end;
procedure affiche ; var
i,n:integer;
test:boolean;
begin
for i:= a to b do begin
n:=0;
Correction DS3
2011
repeat n:=n+1;
if (i=puiss(2,n)-1) and (premier(n)) then test:=true else test:=false;
until (test)or(puiss(2,n)-1>i);
if test then writeln(i,' = 2^',n,' - 1 ');
end;
end;
begin saisie(a,b);
affiche;
end.
Exercice 2 :
program ex2_ds3;
uses wincrt;
var x,un,i:integer;
procedure saisie (var x:integer);
begin repeat
writeln ('saisir l''entier x');
readln (x);
until (x>2);
end;
procedure calcul (var Un,i:integer;x:integer);
var
U0,U1:integer;
begin U0:=2;
U1:=3;
i:=2;
repeat
Un:=U1+2*U0;
U0:=U1;
U1:=Un;
i:=i+1;
until U1>= x;
if u1=x then writeln(x,' est un terme de la suite Un au rang ',i) else writeln(x,' n''est pas un terme de la suite Un ') ;
end;
begin saisie(x);
calcul(un,i,x);
end.
Exercice 3 :
Program ex3_ds3;
Uses Wincrt;
Var
Pas:Real;
Function Valeur_X (Pas:Real):Real;
Var
X, T, Xmax, Tmin:real;
Begin
Xmax:=0; Tmin:=6.75;
Repeat X:=X+Pas;
T:=Sqrt(sqr(X)+81)/3+(15-X)/4;
If Tmin > T Then Begin Xmax:=X;
Tmin:=T;
End;
Until (X>=15);
Valeur_X:=Xmax;
End;
BEGIN
Write ('Donner le pas : '); Readln (Pas);
Write ('La valeur maximale de x est : ', Valeur_X (Pas));
END.
Problème :
program matrice_tri_minmax_pgcdppcm;
uses wincrt;
type
mat=array[1..10,1..10]of integer;
tab=array[1..10] of integer;
var
m:mat; t:tab; var i,n:integer;
procedure saisie(var m:mat; var n:integer);
var
i,j:integer;
begin repeat
write('Donner la taille de la matrice ');
readln(n) ; until n in [4..8] ; for i:= 1 to n do for j:= 1 to n do begin
write('m[',i,'][',j,']=');
readln(m[i][j]);
end;
end;
function puissance(x,y:integer):integer;
var
i,p:integer;
begin p:=1;
for i:=1 to y do p:=p*x;
puissance:=p;
end;
procedure creer_t(var t:tab);
var i,j,s:integer; begin for i:= 1 to n do
begin s:=0;
for j:= n downto 1 do
s:=s+m[i][j]*puissance(2,n-j);
t[i]:=s;
end;
for i:= 1 to n do write(t[i],' ');
end;
Procedure Tri_insertion( var t : tab);
var i, j, k : integer;
begin
for i:=2 to n do begin
k := t[i]; (* k est la valeur à insérer dans l'endroit approprié du tableau *)
(* On décale toutes les valeurs du tableau < k à droite pour vider une place pour k *)
j := i - 1;
while (j >= 1) and (t[j] < k) do begin
t[j + 1] := t[j];
j := j - 1;
end;
(* finalement la valeur k est insérée à son emplacement adéquat *)
t[j + 1] := k;
end;
end;
function ppcm(a,b:integer):integer;
var
min,max:integer;
begin if a>b then begin max:=a;
min:=b;
end else begin min:=a;
max:=b;
end;
while (max mod min <>0) do max:=max+a+b-min;
ppcm:=max;
end;
function pgcd(a,b:integer):integer;
begin
while (a mod b<>0) and (b mod a <>0) do begin
if (a>b) then a:=a mod b else
b:=b mod a;
end;
if (a mod b = 0) then pgcd:=b
else pgcd:=a;
end;
function min:integer;
var
i,m:integer;
begin m:=t[1];
for i:=1 to n do
if t[i]<m then m:=t[i];
min:=m;
end;
function max:integer;
var
i,m:integer;
begin m:=t[1];
for i:=1 to n do if t[i]>m then m:=t[i];
max:=m;
end;
begin saisie(m,n);
writeln('Le tableau t sera de cette forme ');
creer_t(t);
writeln;
tri_insertion(t);
for i:=1 to n do write(t[i],' ');
writeln;
writeln('Min= ',min);
writeln('Max= ',max);
writeln('PGCD(min,max)= ',pgcd(min,max));
writeln('PPCM(min,max)= ',ppcm(min,max));
end.