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.

1. Chame de n o inteiro dado;<br />

2. Calcule o resto da divisão de n por 10;<br />

3. Forneça este resto como o algarismo pedido.<br />

Algumas das questões anteriores são importantes para se desenvolver o raciocínio, mas não é este tipo<br />

de questão que se pretende discutir ao longo deste livro. Estamos interessados <strong>em</strong> algoritmos para:<br />

1. Resolver probl<strong>em</strong>as mat<strong>em</strong>áticos, como algoritmos para determinar a média aritmética de vários<br />

números dados, determinar as raízes de uma equação do segundo grau, encontrar o máximo divisor comum<br />

de dois números dados, totalizar as colunas de uma tabela, etc.<br />

2. Resolver questões genéricas, como algoritmos para colocar <strong>em</strong> ord<strong>em</strong> alfabética uma relação de<br />

nomes de pessoas, atualizar o saldo de uma conta bancária na qual se fez um depósito, corrigir provas de um<br />

teste de múltipla escolha, cadastrar um novo usuário de uma locadora, etc..<br />

Na linguag<strong>em</strong> coloquial, o algoritmo para o cálculo da média pode ser escrito de forma muito simples:<br />

1. Determine a quantidade de números;<br />

2. Some os números dados;<br />

3. Divida esta soma pela quantidade de números.<br />

Qualquer pessoa que saiba contar, somar e dividir números é capaz de executar este algoritmo<br />

dispondo apenas de lápis e papel. A questão que se põe é: e se a relação contiver 13.426 números? A tal<br />

pessoa é capaz de executar, porém, quanto t<strong>em</strong>po levará para fazê-lo?<br />

Um outro aspecto a ser observado é que n<strong>em</strong> s<strong>em</strong>pre a linguag<strong>em</strong> coloquial é eficiente para se<br />

escrever<strong>em</strong> as instruções. Nessa linguag<strong>em</strong> o algoritmo para determinação das raízes de uma equação do<br />

segundo grau teria uma instrução difícil de escrever e difícil de compreender como:<br />

n. Subtraia do quadrado do segundo coeficiente o produto do número quatro pelo produto dos dois<br />

outros coeficientes.<br />

Isto pode ser parcialmente resolvido utilizando-se uma linguag<strong>em</strong> próxima da linguag<strong>em</strong> mat<strong>em</strong>ática<br />

que já foi utilizada <strong>em</strong> ex<strong>em</strong>plos da seção anterior. No caso da equação do segundo grau teríamos o seguinte<br />

algoritmo, que nos é ensinado nas últimas séries do ensino fundamental:<br />

1. Chame de a, b e c os coeficientes da equação.<br />

2. Calcule d = b² - 4ac.<br />

3. Se d < 0 forneça como resposta a mensag<strong>em</strong>: A equação não possui raízes reais.<br />

4. Se d ≥ 0<br />

4.1 Calcule x 1 = (-b + raiz(d))/2a e x 2 = (-b - raiz(d))/2a.<br />

4.2 Forneça x 1 e x 2 como raízes da equação.<br />

De maneira mais ou menos evidente, raiz(d) está representando a raiz quadrada de d e a execução<br />

deste algoritmo requer que o processador seja capaz de determinar valores de expressões aritméticas, calcular<br />

raízes quadradas, efetuar comparações e que conheça a linguag<strong>em</strong> mat<strong>em</strong>ática.<br />

Algoritmos para probl<strong>em</strong>as genéricos são mais complicados e as linguagens utilizadas anteriormente<br />

não são adequadas (para o caso da ordenação de uma relação de nomes, foram desenvolvidos vários<br />

algoritmos e ter<strong>em</strong>os oportunidade de discutir alguns deles ao longo deste livro).<br />

1.7 Ex<strong>em</strong>plos de algoritmos mat<strong>em</strong>áticos<br />

Para uma primeira discussão <strong>em</strong> termos de aprendizag<strong>em</strong> de desenvolvimento de algoritmos e<br />

utilizando a linguag<strong>em</strong> usada no ex<strong>em</strong>plo da equação do segundo grau, apresentamos a seguir alguns<br />

ex<strong>em</strong>plos de algoritmos que objetivam a solução de questões da mat<strong>em</strong>ática. Para eles supomos que o<br />

processador seja capaz de efetuar somas, subtrações e divisões decimais, de realizar comparações, de repetir<br />

a execução de um conjunto de instruções um número determinado de vezes ou enquanto uma condição seja<br />

atendida.<br />

1. No ex<strong>em</strong>plo do algoritmo para obtenção do algarismo da casa das unidades de um inteiro dado<br />

supomos que o processador seria capaz de calcular o resto de uma divisão inteira. Observando que não está<br />

suposto que o nosso processador seja capaz de determinar restos de divisões inteiras, vamos discutir um

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

Saved successfully!

Ooh no, something went wrong!