Diferenças entre edições de "Máximo divisor comum"

De GNU Octave
Ir para: navegação, pesquisa
(Criou nova página com 'O Octave já tem uma função que nos calcula o máximo divisor comum, designada gcd. No entanto, vamos escrever uma nova função baseada no [http://pt.wikipedia.org/wik...')
 
Linha 1: Linha 1:
 
O Octave já tem uma função que nos calcula o máximo divisor comum, designada gcd. No entanto, vamos escrever uma nova função baseada no [http://pt.wikipedia.org/wiki/Algoritmo_de_Euclides Algortimo de Euclides].
 
O Octave já tem uma função que nos calcula o máximo divisor comum, designada gcd. No entanto, vamos escrever uma nova função baseada no [http://pt.wikipedia.org/wiki/Algoritmo_de_Euclides Algortimo de Euclides].
  
Raciocínio:
+
Veja na animação disponível na Wikipédia que o algoritmo consiste em subtrair ao maior o menor, e assim sucessivamente, até que ambos sejam iguais.
 +
 
 +
Primeira versão
  
 
<syntaxhighlight>
 
<syntaxhighlight>
Linha 44: Linha 46:
 
endwhile
 
endwhile
 
disp(a)
 
disp(a)
 +
</syntaxhighlight>
 +
 +
Como é pedida uma função, vamos ter que usar a sintaxe própria das funções.
 +
Vamos dar-lhe o nome mdc, que não está a ser utilizado. A função tem que ser guardada num arquivo mdc.m.
 +
 +
<syntaxhighlight>
 +
function s = mdc(a, b)
 +
% mdc(a,b)
 +
% Calcula o máximo divisor comum de dois números
 +
% O cálculo é efetuado segundo o algoritmo de Euclides
 +
while (a!=b)
 +
if (a>b)
 +
a=a-b;
 +
else
 +
b=b-a;
 +
endif
 +
endwhile
 +
s = a;
 +
</syntaxhighlight>
 +
 +
Ao invocar a função, passam-se os argumentos.
 +
 +
<syntaxhighlight>
 +
>>> mdc(24,36)
 +
ans =  12
 +
>>> mdc(18, mdc(24,36))
 +
ans =  6
 +
>>>
 
</syntaxhighlight>
 
</syntaxhighlight>

Revisão das 17h45min de 14 de janeiro de 2013

O Octave já tem uma função que nos calcula o máximo divisor comum, designada gcd. No entanto, vamos escrever uma nova função baseada no Algortimo de Euclides.

Veja na animação disponível na Wikipédia que o algoritmo consiste em subtrair ao maior o menor, e assim sucessivamente, até que ambos sejam iguais.

Primeira versão

a = 252
b = 105
while (a!=b)
	if (a>b)
		a=a-b
	else
		b=b-a
	endif
endwhile
disp(a)

Execução

>>> euclides
a =  252
b =  105
a =  147
a =  42
b =  63
b =  21
a =  21
 21
>>>

Script completa

a = input('a?');
b = input('b?');
while (a!=b)
	if (a>b)
		a=a-b;
	else
		b=b-a;
	endif
endwhile
disp(a)

Como é pedida uma função, vamos ter que usar a sintaxe própria das funções. Vamos dar-lhe o nome mdc, que não está a ser utilizado. A função tem que ser guardada num arquivo mdc.m.

function s = mdc(a, b)
% mdc(a,b) 
%	Calcula o máximo divisor comum de dois números
% 	O cálculo é efetuado segundo o algoritmo de Euclides
while (a!=b)
	if (a>b)
		a=a-b;
	else
		b=b-a;
	endif
endwhile
s = a;

Ao invocar a função, passam-se os argumentos.

>>> mdc(24,36)
ans =  12
>>> mdc(18, mdc(24,36))
ans =  6
>>>