Vous êtes sur la page 1sur 4

USDB - Faculté des sciences ALGO II - 2018/2019

Département de Math-Info L1 – S 2

Solution TP N° 6
Exercice 1 :
Program Exo1 ;
uses wincrt;
Var n, i : integer; x, s : real;
Function Puiss(x : real; k : integer) : real ;
Var i : integer; p: real;
Begin
P :=1 ;
For i:=1 to k do
P:=P*x;
Puiss := P;
End ;
Function Fact(d : integer; f : integer) : integer ;
Var p, i : integer ;
Begin
P :=1 ;
For i:=d downto f do
P:=P*i;
Fact := P;
End ;

Begin
Repeat Write('Donner un entier n >1 : ') ; readln(n) ; Until (n >1) ;
Repeat Write('Donner un réel x différent de 0 : ') ; readln(x) ; Until (x <>0) ;
S :=0 ;
If(n mod 2 =0) then
For i := 1 to n DIV 2 do
S:=S - Puiss(x, 2*i)/ Fact(2*i, 1)
Else
For i := 1 to n-1 do
S:=S+ i*x / Fact(n, n-i);

Writeln('S=', S:6:2);
End.

Exercice 2:
Program somme_tableau ;
uses wincrt;
Type tab= array[1..50] of real;
Var V : tab; i, k, n, l, p, q : integer;
{**************************réponse 1*******************************}
Function somme(V : tab ; d : integer ; f : integer) : real ;
Var S : real; I : integer;
Begin
S:=0;
for i:=d to f do
S:=S+V[i];
Somme :=S ;
End ;

1
USDB - Faculté des sciences ALGO II - 2018/2019
Département de Math-Info L1 – S 2
Begin
repeat
write('Donner n entre 1 et 50 : '); readln(n) ;
Until(n>0) and (n<51) ;

For i :=1 to n do begin


write('Donner V[', i, '] : '); readln(V[i]);
end ;

{*****************************réponse 2.1***************************}
writeln('la somme de tous les éléments de V est : ', somme(V,1, n):6:2);

{*****************************réponse2.2*****************************}
Repeat
write('Donner k entre 1 et ', n, ' : '); readln(k) ;
Until (k>0) and (k<n) ;
writeln('la somme des ', k, ' premiers éléments de V est : ', somme(V, 1, k):6:2);

{****************************réponse 2.3*****************************}
Repeat
write('Donner p entre 1 et ', n, ' : '); readln(p) ;
Until(p>0) and (p<=n) ;
writeln('la somme des éléments du tableau V à partir de la position ', p , ' est : ', somme(V, p, n):6:2);
end.

Exercice 3 :
Program exo4;
uses wincrt;
Type Tab = array [1..20, 1..20] of integer;
Var
A, B, C : tab;
i, j, k, n, m, l : integer;
{a}
Procedure Lecture (var M : tab ; n : integer ; idf : char) ;
Var i , j : integer;
Begin
for i:=1 to n do
for j:=1 to n do begin
write('donner ', idf, '[', i, ', ', j, '] : '); readln(M[i,j]);
end;
End;

{b}
Procedure Affichage (M : tab; n : integer; idf : char) ;
Var i , j : integer;
Begin
for i:=1 to n do BEGIN
for j:= 1 to N do
write(idf, '[', i, ',', j, ']=', M[i,j], ' , ');
Writeln;
end;
End;
2
USDB - Faculté des sciences ALGO II - 2018/2019
Département de Math-Info L1 – S 2
{c}
Function Prod (A : tab; q: integer; B : tab; r: integer; n: integer): integer;
Var
k, S : integer;
Begin
S :=0;
for k:=1 to n do
S := S + A[q,k]*B[k,r];

Prod := S;
End;
{d}
begin
{1 : lecture de la dimension des matrices}
repeat
write('donner le nombre de lignes de A entre 1 et 20 : '); readln(n);
until (n>0) and (n<=20);

{lecture de A, et B}
Lecture(A, n, 'A') ;
Lecture(B, n, 'B') ;

{2 : effectuer la multiplication de A et B dans C}


for i:=1 to n do
for j:= 1 to n do
C[i, j] := Prod (A, i, B, j, n);

{3 : affichage de C}
Writeln('Voici la matrice C (produit matricielle entre A et B) :');
Affichage(C, n, 'C');

end.

Exercice 4 :
program intersection ;
uses wincrt;
type chaine = string[100];
Var
ch1, ch2, ch3 : chaine;
anag : boolean;
i, j, k, n1, n2 : integer;
{I}
Function NB_Occ (ch : chaine; n : integer; c : char) : integer ;
Var
cpt , i : integer ;
Begin
cpt :=0;
for i:=1 to n do
if (ch[i]=c) then cpt := cpt+1 ;

NB_Occ :=cpt ;
End ;

3
USDB - Faculté des sciences ALGO II - 2018/2019
Département de Math-Info L1 – S 2
{II}
Begin
{1: lecture des deux chaines et calcul de leurs tailles}
Write ('donner ch1 et ch2 : '); readln(ch1); readln(ch2);
n1:=Length (ch1) ; n2 :=Length(ch2) ;

{2) a) : Vérifier si ch1 et ch2 sont anagrammes ou non}


If (n1<>n2) then writeln('ch1 et ch2 ne sont pas anagrammes')
Else begin
Anag :=true ; i :=1 ;
While (i<=n1) and (anag=true) do
If (NB_Occ(ch1,n2,ch1[j])<>NB_Occ(ch2,n2,ch1[j])) then anag:=false
Else i:=i+1;
End;

If(anag=true) then writeln('ch1 et ch2 sont anagrammes')


Else writeln('ch1 et ch2 ne sont pas anagrammes') ;

{2) b) : afficher ch3 formé par intersection de ch1 avec ch2}


for j :=1 to n1 do
begin
{si le caractère de ch1, existe dans ch2 et n’existe pas encore dans ch3 alors l’ajouter dans ch3}
if (NB_Occ(ch2,n2,ch1[j])>0) and (NB_Occ(ch3, length(ch3) ,ch1[j])=0) then
ch3 := ch3 + ch1[j];
end;

write ('ch3=', ch3) ;


End.

Vous aimerez peut-être aussi