Diferenças entre edições de "Máximo divisor comum"
De GNU Octave
(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]. | ||
− | + | 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 >>>