a1-1.docx
TRANSCRIPT
-
8/18/2019 a1-1.docx
1/6
-
8/18/2019 a1-1.docx
2/6
0l)oritmul lui Euclid cmmdc a două numere
0l)oritmul lui Euclid este o metodă eficientă de calcul al celui mai mare divi&or comun *. El este denumit după
matematicianul )rec Euclid' care la inventat. 4n avanta( important al al)oritmului lui Euclid este că el poate
)ăsi * eficient fără să tre5uiască să calcule&e factorii primi ai numerelor.
Euclid a o5servat că * al două numere a iș + rămîne acela i dacă se scade numărul mai mic din cel mai mareș
demonstra i,. resupunînd căț a este numărul mai mare' scă&înd în mod repetat pe + dina' în a va rămîne restul
împăr irii luiț a la +. 6e&ultă că *(a, +) este totuna cu *(+, a % +). 0l)oritmul care re&ultă este
următorul: luăm restul împăr irii luiț a la +' apoi restul împăr irii luiț + la rest' i a a mai departe' pînă ce o5 inem un restș ș ț&ero. * este numărul rămas' cel diferit de &ero.
77D cu al)oritmul lui Euclid
Exemplu
Să calculăm *(22, 10). alculăm 22 % 10 = -2. De aceea va
tre5ui să calculăm *(10, -2). 8n continuare calculăm 10 % -2 = 21.
Deci' vom calcula *(-2, 21). alculăm -2 % 21 = 0. Deoarece restul
este &ero * va fi ultimul număr nenul' adica 21.
Schema logică i programulș
9ată al)oritmul scris ca scemă lo)ică i implementarea sa în lim5a(ul :ș
#include
int main() {
int a, +, r;
scan( "%d%d", 'a, '+ );
while ( + > 0 ) {
r = a % +;
a = +;
+ = r;
print( "%d", a );
return 0;
%otă: remarca i căț nu este nevoie să interscim5ăm varia5ilele dacă a este ini ial mai mic caț +. După prima execu ieț
a 5uclei while ele se vor interscim5a în mod natural.
Exerci iuț
Doi prieteni' un iepure i o 5roscu ă (oacă un (oc: pornesc de la o linie de start i încep să sară. ;roascaș ț ș
sare n centimetri' iar iepurele m centimetri. ine este mai în spate vine la rînd să sară.
-
8/18/2019 a1-1.docx
3/6
ava(: să se pave&e un dreptun)i cu pătrate maximale. Se citesc a iș + numere naturale'
dimensiunile laturilor dreptun)iului' să se afi e&e latura pătratelor cele mai mari cu care putem acoperiș
dreptun)iul' precum i numărul lor. Exemple: dacăș a este 3 iș + este # vom afi aș 1 iș 12 cel mai mare
pătrat cu care putem acoperi dreptun)iul are latură 1 i avem nevoie deș 12 astfel de pătrate
dacă a este / iș + este vom afi aș 2 iș 12 dacă a este 12 iș + este 20 vom afi aș - iș 1.
?include @iostreamA
usin) namespace std
int main B
int a' 5' r
float nr'nr1
cinAAaAA5
nr=a*5
Cile 5 A " B
r = a 5
a = 5
5 = r
nr1=nrFaFa
cout@@a@@G G@@nr1
return "
ifră: se cite te un număr ș n' să se spună dacă este format dintro sin)ură cifră' repetată.
Exemple: este un astfel de număr' 2-2- nu este' este' este.
?include @iostreamA
usin) namespace std
int main
-
8/18/2019 a1-1.docx
4/6
B
int x
5ool e)ale
cout@@GDati valoarea lui x= GcinAAx
int x1=x
e)ale=true FF pp ca cifrele numarului x sunt e)ale
Cilex1A=1"HHe)ale,=false
B
ifx11",=x1F1"1"e)ale=false
x1=x1F1"
ife)ale==truecout@@GD0 ,G
else cout@@G%4 ,G
return "
Irdonare: se citesc patru numere' a' +' c iș d. Să se afi e&e în ordine crescătoare. Jolosi iș ț
interscim5ări de varia5ile' precum a i vă&ut mai sus' în lec ie.ț ț
?include @iostreamA
usin) namespace std
int main B
int a' 5' c' d'aux
cinAAaAA5AAcAAd
if a A 5 B
-
8/18/2019 a1-1.docx
5/6
-
8/18/2019 a1-1.docx
6/6
return "
ro5lemă de lo)ică: un re)e ar fi tre5uit să primească &ece fi icuri ce este acela un fi ic de monede a cîte &eceș ș
)rame fiecare monedă. Din nefericire unul din fi icuri con ine &ece monede a cîte K )rame fiecare monedă' în locș ț
de &ece. Dispunem de un cîntar cu eroare mai mică de un )ram i avem voie să facem o sin)ură cîntărire. umș
vom proceda pentru a descoperi fi icul cu monede mai u oareș ș