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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

divisores, como necessário neste ex<strong>em</strong>plo. Observe também que estamos supondo que o nosso processador é<br />

capaz de determinar a interseção de dois conjuntos.<br />

A mat<strong>em</strong>ática fornece uma outra forma de se calcular o mdc de dois inteiros: determina-se a<br />

decomposição <strong>em</strong> fatores primos dos dois inteiros e o mdc é o produto dos fatores primos comuns as duas<br />

decomposições com as menores multiplicidades.<br />

Para o ex<strong>em</strong>plo dado acima teríamos:<br />

120 2 84 2<br />

60 2 42 2<br />

30 2 21 3<br />

15 3 7 7<br />

5 5 1<br />

1 1<br />

o que nos dá 120 = 2 3 x3x5 e 84 = 2 2 x3x7 e, portanto, mdc(120, 84) = 2 2 x3 = 12.<br />

Vale observar que escrever este algoritmo na linguag<strong>em</strong> informal que estamos utilizando é bastante<br />

complicado.<br />

Na há dúvida que o primeiro algoritmo para o cálculo do mdc apresentado é de compreensão bastante<br />

simples. Porém, comentar<strong>em</strong>os posteriormente que ele é computacionalmente bastante ineficiente no sentido<br />

de que sua execução pode, dependendo dos valores de x e y, d<strong>em</strong>andar um t<strong>em</strong>po acima do razoável.<br />

Por incrível que possa parecer, o algoritmo mais eficiente para o cálculo do máximo divisor comum de<br />

dois números foi desenvolvido pelo mat<strong>em</strong>ático grego Euclides duzentos anos Antes de Cristo. O algoritmo<br />

de Euclides nos é apresentado nas séries intermediárias do ensino fundamental através de um esqu<strong>em</strong>a como<br />

o diagrama do ex<strong>em</strong>plo abaixo, cujo objetivo é determinar (de novo!) o máximo divisor comum de 120 e 84.<br />

1 2 3<br />

120 84 36 12<br />

O esqu<strong>em</strong>a funciona da seguinte forma: divide-se 120 por 84 obtendo-se resto 36; a partir daí,<br />

repet<strong>em</strong>-se divisões até que o resto seja zero, sendo o dividendo da divisão atual o divisor da divisão anterior<br />

e o divisor da divisão atual o resto da divisão anterior. O último divisor é o máximo divisor procurado. Como<br />

se pode ver, estas instruções escritas desta forma não são nada compreensíveis, o que faz com elas sejam<br />

transmitidas oralmente nas salas do ensino fundamental. No capítulo 4 (quatro), ter<strong>em</strong>os a oportunidade de<br />

discutir este algoritmo com detalhes e ver<strong>em</strong>os que ele é um algoritmo bastante interessante no<br />

desenvolvimento da lógica de programação.<br />

4. Discutir<strong>em</strong>os agora o algoritmo para o cálculo da média de uma relação contendo um número<br />

grande (digamos, 10 000) de números dados. No caso da equação do segundo grau, eram três os dados de<br />

entrada e, portanto, os chamamos de a, b, e c. Mas agora são 10 000 os dados de entrada! Uma solução<br />

possível é receber os números um a um, somando-os antes de receber o seguinte, conforme vimos na seção<br />

1.5.<br />

1. Chame de A o primeiro número dado.<br />

2. Faça S = A.<br />

3. Repita 9 999 vezes as instruções 3.1 e 3.2.<br />

3.1 Chame de A o próximo número dado.<br />

3.2 Substitua o valor de S por S + A.<br />

4. Calcule M = S/10 000.<br />

5. Forneça M para o valor da média.<br />

Por ex<strong>em</strong>plo, se a relação de números fosse {5, 3, 8, 11, ...} até a quarta execução de 3.1 e 3.2<br />

teríamos a seguinte tabela:<br />

A S M<br />

5 5<br />

3 8<br />

8 16<br />

11 27<br />

Está fácil perceber que após 9.999ª execução das instruções 3.1 e 3.2 a variável S conterá a soma de<br />

todos os números da relação, o que justifica a instrução 4.<br />

5. Um outro ex<strong>em</strong>plo que justifica plenamente a necessidade do conhecimento do que o processador é<br />

capaz de executar é a determinação do maior número de uma relação de números. Se o processador for um

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

Saved successfully!

Ooh no, something went wrong!