22.10.2014 Views

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

algoritmo para a determinação do quociente e do resto da divisão de dois inteiros positivos dados. Por<br />

ex<strong>em</strong>plo: se o dividendo for 30 e o divisor for 7, o algoritmo deve fornecer os valores 4 para o quociente e 2<br />

para o resto. Fomos ensinados que, para determinar o quociente, deveríamos, por tentativa, encontrar o<br />

número que multiplicado pelo divisor resultasse no maior número menor que o dividendo. No ex<strong>em</strong>plo<br />

numérico citado, poderíamos tentar o 5 e teríamos 5x7 = 35 que é maior que 30; tentaríamos o 3 obtendo<br />

3x7 = 21 que talvez seja pequeno d<strong>em</strong>ais <strong>em</strong> relação ao 30; aí tentaríamos o 4 obtendo 4x7 = 28,<br />

encontrando então o quociente 4. Um algoritmo para solucionar esta questão poderia ser:<br />

1. Chame de D1 e D2 o dividendo e o divisor dados.<br />

2. Faça I = 1.<br />

3. repita 3.1 até IxD2 > D1.<br />

3.1. Substitua I por I + 1.<br />

4. Calcule Q = I – 1.<br />

5. Calcule R = D1 - QxD2.<br />

6. Forneça R para o resto e Q para o quociente pedidos.<br />

No ex<strong>em</strong>plo numérico proposto, teríamos a seguinte tabela com os valores obtidos durante a execução<br />

do algoritmo:<br />

D1 D2 I QxI Q R<br />

30 7<br />

1 7<br />

2 14<br />

3 21<br />

4 28<br />

5 35<br />

4 2<br />

2. O algoritmo abaixo determina o menor divisor maior que 1 de um inteiro dado. A ideia é verificar<br />

se d = 2 é divisor e, não sendo, verificar se 3 ou 4 ou 5, etc, é divisor. A procura por um divisor vai até que<br />

um divisor seja encontrado. Naturalmente, utilizando o algoritmo anterior, o nosso processador agora sabe<br />

determinar o resto da divisão inteira de um inteiro x por outro inteiro y não nulo. Isto será indicado por<br />

Resto(x, y). Para encontrar um divisor de n basta encontrar um inteiro d tal que Resto(n, d) = 0.<br />

1. Chame de N o inteiro dado.<br />

2. Faça D = 2.<br />

3. Repita 3.1 enquanto Resto(N, D) ≠ 0<br />

3.1 Substitua D por D + 1<br />

4. Forneça D para o divisor procurado.<br />

3. Como se depreende facilmente da sua denominação, o máximo divisor comum (mdc) de dois<br />

números dados é o maior número que os divide. Antes o mdc só era utilizado para simplificações de frações<br />

ordinárias; atualmente ele é utilizado na determinação de chaves públicas para sist<strong>em</strong>as de criptografia RSA<br />

[Evaristo, J, 2002]. Por ex<strong>em</strong>plo, mdc(64, 56) = 8. De maneira óbvia, o algoritmo abaixo determina o mdc de<br />

dois números dados:<br />

1. Chame de x e de y os números.<br />

2. Determine D(x), o conjunto dos divisores de x.<br />

3. Determine D(y), o conjunto dos divisores de y.<br />

4. Determine I, a interseção de D(x) e D(y).<br />

5. Determine M, o maior el<strong>em</strong>ento do conjunto I.<br />

6. Forneça M como o mdc procurado.<br />

O cálculo de mdc(120, 84) com este algoritmo seria:<br />

1. x = 120, y = 84.<br />

2. D(120) = {1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 24, 30, 40, 60, 120}.<br />

3. D(84) = {1, 2, 3, 4, 6, 7, 12, 14, 21, 28, 42, 84}.<br />

4. I = {1, 2, 3, 4, 6, 12}.<br />

5. M = 12.<br />

Observe que o algoritmo anterior determina o menor divisor de um inteiro não determinando todos os

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!