quarta-feira, 20 de agosto de 2008

Uma abordagem para a resolução das raízes de uma equação de 2º grau

Algoritmo expresso em forma textual de uma seqüência imperativa de comandos:

1) Obter coeficientes a, b, c;
2) Coeficiente a = 0 ?
    2.1) Então: preparar Resposta = "equação inválida";
    2.2) Senão:
        2.2.1) Calcular delta = b^2 - 4*a*c;
        2.2.2) Valor de delta < 0 ?
            2.2.2.1) Então: preparar Resposta = "inexistência de solução Real";
            2.2.2.2) Senão: valor de delta = 0 ?
                2.2.2.2.1) Então:
                    2.2.2.2.1.1) Calcular x = - b / 2 * a;
                    2.2.2.2.1.2) Preparar Resposta = "X = " + ConverterParaTexto( x );
                2.2.2.2.2) Senão:
                    2.2.2.2.2.1) Calcular x1 = ( - b + RaizQuadrada( delta ) ) / 2 * a;
                    2.2.2.2.2.2) Calcular x2 = ( - b - RaizQuadrada( delta ) ) / 2 * a;
                    2.2.2.2.2.3) Preparar Resposta = "    X1 = " +
                                                        ConverterParaTexto( x1 ) + 
                                                    "    X2 = " +
                                                        ConverterParaTexto( x2 );
3) Apresentar Resposta;

 

Considerações:

1) o conceito de biblioteca de funções, previamente implementadas na maioria das linguagens de programação de alto nível, permite a abstração de certas operações elementares e corriqueiras, como exemplo a linguagem de programação C Ansi oferece:

  • obtenção de raiz quadrada:  sqrt( valor );
  • conversão/concatenação de dados diversos para texto: sprintf( buffer, "formatação", variáveis );

2) as operações aritméticas básicas são normalmente representadas pelos símbolos: + - * /

3) o operador de exponenciação ou potenciação vai depender da linguagem de programação: ** ou ^ são os casos mais usuais, porém tomando a linguagem de programação C Ansi como exemplo, existe a função de biblioteca pow(a, n) para calcular a elevado a n;

4) também é comum a necessidade de concatenção de textos, variando muito entre as linguagens de programação, mas podendo ser representada pelo operador + ou & ou até mesmo por funções de biblioteca; no caso da linguagem C Ansi podemos usar a mesma função sprintf() mencionada acima;

5) ao fazer uso de operadores relacionais >, < e = devemos tomar cuidado para não confundir o teste de igualdade com a operação de atribuição:

Atribuição Teste de igualdade Linguagem
delta = pow(b,2) - 4 * a * c if ( delta == 0 ) C ansi, C++
delta := b ** 2 - 4 * a * c if ( delta = 0 ) Pascal, Delphi

6) por último, uma consulta ao dicionário Michaelis (http://michaelis.uol.com.br/moderno/portugues/index.php?lingua=portugues-portugues&palavra=dentear) nos apresenta o verbo: "dentear (den.te.ar) (dente+ear) vtd 1 Formar dentes em. 2 Recortar, chanfrar. Var: dentelar.". Reparar que o algoritmo acima apresentado em forma textual, assim como a escrita de comandos na maioria das linguagens de programação de alto nível, devem usar este recurso para facilitar a leitura dinâmica dos mesmos e agilizar a compreensão do raciocínio, assim como acelerar e manter um controle sobre o fluxo de execução das instruções; ou seja, um hábito a ser desenvolvido.

 

Até a próxima.

 

Nenhum comentário: