Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
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