Sunteți pe pagina 1din 3

§2.

Studii de caz simple


Determinarea elementului maximal dintr-un şir de numere întregi

Se citeşte un vector cu n componente numere întregi. Se cere să se tipărească


cel mai mare element al său.
O astfel de problemă poate fi rezolvată utilizând un algoritm clasic de calcul
al maximului unui vector, însă pentru a scurta timpul de găsire a maximului este
recomandat a se folosi metode rapide cum este şi metoda "divide et impera".

Program Pascal:

Program divide_et_impera;
uses crt;
type vector=array[1..50] of integer;
var x:vector;
n,i:integer;
function divimp(p,q:integer):integer;
var mij:integer;
max1,max2:integer;
begin
if p=q then divimp:=x[p]
else
begin
mij:=(p+q) div 2;
max1:=divimp(p,mij);
max2:=divimp(mij+1,q);
if max1>max2 then divimp:=max1
else divimp:=max2;
end;
end;
begin
clrscr;
write('Introdu numarul de elemente ale sirului, n= ');
readln(n);
for i:=1 to n do
begin
write('x[',i,']= ');
readln(x[i]);
end;
writeln;
write('Elementul maxim : ',divimp(1,n));
readkey;
end.
Determinarea celui mai mare divizor comun

Sa se calculeze cel mai mare divizor comun pentru n numere utilizând metoda
divide et impera.
Program Pascal:
Program divide_et_impera;
uses crt;
type vector=array[1..50] of integer;
var x:vector;
n,i:integer;
function cmmdc(a,b:integer):longint;
begin
if a=b then cmmdc:=a
else if a>b then cmmdc:=cmmdc(a-b,b)
else cmmdc:=cmmdc(a,b-a);
end;
function divimp(p,q:integer):longint;
var mij,d1,d2:integer;
begin
if abs(q-p)<=1 then divimp:=cmmdc(x[p],x[q])
else
begin
mij:=(p+q) div 2;
d1:=divimp(p,mij);
d2:=divimp(mij+1,q);
divimp:=cmmdc(d1,d2);
end;
end;
begin
clrscr;
write('Introdu numarul de elemente, n= ');
readln(n);
for i:=1 to n do
begin
write('x[',i,']= ');
readln(x[i]);
end;
writeln;
writeln('Cel mai mare divizor comun :');
writeln('cmmdc= ',divimp(1,n));
readkey;
end.

Program C:
# include<iostream.h>
#include <conio.h>
int cmmdc(int e[30],int a,int b){
if (a==b) return e[a];
else {int x,y;
x=cmmdc(e,a,(a+b)/2);
y=cmmdc(e,(a+b)/2+1,b);
while (x!=y)
if (x>y) x=x-y; else y=y-x;
return x; }
}
void main(){
clrscr();
int e[30],n,i;
cout<<"n="; cin>>n;
for (i=1;i<=n;i++) cin>>e[i];
cout<<"cmmdc este :"<<cmmdc(e,1,n);
getch();
}

S-ar putea să vă placă și