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.
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