Análise de Algoritmos

O conteúdo dessa aula também é de suma importância (eu falo isso em todas, né?) para termos facilidade em nossas futuras programações.

Analisar um algoritmo significa entender o funcionamento do mesmo e o seu entendimento facilita quando vamos agregar funcionalidades ao algoritmo ou encontrar erros.

Vejo que muitos programadores têm muita dificuldade de achar os erros em códigos. Isso se deve à falta de uma boa base de aprendizado de algoritmos e análise dos mesmos.

Chega de blá-blá-blá! original.gif

Primeiramente, é necessário seguir as premissas de construção de bons algoritmos, como identação. A identação é de suma importância para facilitar a análise.
Quando um algoritmo tem muitas estruturas aninhadas (umas dentro das outras) e não está identado, fica muito difícil verificar a origem de erros.

Exemplo de código sem identação:
CODE
SE (a < b) ENTÃO
REPITA
SE (a < 0.5) ENTÃO
SE (a > 0) ENTÃO
ESCREVA(a);
FIM SE
FIM SE
ATÉ (b > 10)
FIM SE

O mesmo código, identado:
CODE
SE (a < b) ENTÃO
    REPITA
        SE (a < 0.5) ENTÃO
            SE (a > 0) ENTÃO
                ESCREVA(a);
            FIM SE
        FIM SE
    ATÉ (b > 10)
FIM SE

Claro que identado fica muito mais fácil, não é mesmo?

Muitas linguagens de programação têm debuggers, ou seja, analisam e mostram o resultado do código, passo-a-passo.

Em algoritmos, a menos que utilizemos softwares para a construção dos mesmos, como o VisuAlg, não temos esse recurso e precisamos “executar mentalmente” o algoritmo, passo-a-passo.

Nada melhor do que um exemplo, certo?
CODE
INICIO
    a, b, x : inteiro;
    resultado : real;
    a := 10;
    PARA x DE 1 ATÉ 6 PASSO 1 FAÇA
        a := a + x;
    FIM PARA
    b := 200;
    b := b + a;
    resultado := b / a;
    ESCREVA(resultado);
FIM

Execução passo-a-passo:
Primeiro passo: declaração de variáveis inteiras. Após a “execução dessa linha”, criaremos os espaços que armazenarão os valores de cada uma, como se fosse a separação de espaços de memória, que acontecem na realidade.
CODE
a, b, x : inteiro;

Resultados:
CODE
a =
b =
x =

Segundo passo: declaração da variável real (que possibilita armazenar números com casas decimais).
CODE
resultado : real;

Resultados:
CODE
a =
b =
x =
resultado =

Terceiro passo: atribuição de valor à variável a.
CODE
a := 10;

Resultados:
CODE
a = 10
b =
x =
resultado =

Quarto passo: início da estrutura de repetição PARA. Nessa linha, ocorre a atribuição do primeiro valor da repetição à variável x.
CODE
PARA x DE 1 ATÉ 6 PASSO 1 FAÇA

Resultados:
CODE
a = 10
b =
x = 1
resultado =

Quinto passo: incremento de valor à variável a.
CODE
a := a + x;

Resultados:
CODE
a = 11
b =
x = 1
resultado =

Sexto passo: como a condição de parada do PARA não foi atingida, a variável x é incrementada de acordo com o valor do PASSO, ou seja, x := x + 1
CODE
PARA x DE 1 ATÉ 6 PASSO 1 FAÇA

Resultados:
CODE
a = 11
b =
x = 2
resultado =

Sétimo passo: incremento de valor à variável a.
CODE
a := a + x;

Resultados:
CODE
a = 13
b =
x = 2
resultado =

Oitavo passo: como a condição de parada do PARA não foi atingida, a variável x é incrementada de acordo com o valor do PASSO, ou seja, x := x + 1
CODE
PARA x DE 1 ATÉ 6 PASSO 1 FAÇA

Resultados:
CODE
a = 13
b =
x = 3
resultado =

Nono passo: incremento de valor à variável a.
CODE
a := a + x;

Resultados:
CODE
a = 16
b =
x = 3
resultado =

Décimo passo: como a condição de parada do PARA não foi atingida, a variável x é incrementada de acordo com o valor do PASSO, ou seja, x := x + 1
CODE
PARA x DE 1 ATÉ 6 PASSO 1 FAÇA

Resultados:
CODE
a = 16
b =
x = 4
resultado =

Décimo primeiro passo: incremento de valor à variável a.
CODE
a := a + x;

Resultados:
CODE
a = 20
b =
x = 4
resultado =

Décimo segundo passo: como a condição de parada do PARA não foi atingida, a variável x é incrementada de acordo com o valor do PASSO, ou seja, x := x + 1
CODE
PARA x DE 1 ATÉ 6 PASSO 1 FAÇA

Resultados:
CODE
a = 20
b =
x = 5
resultado =

Décimo terceiro passo: incremento de valor à variável a.
CODE
a := a + x;

Resultados:
CODE
a = 25
b =
x = 5
resultado =

Décimo quarto passo: como a condição de parada do PARA não foi atingida, a variável x é incrementada de acordo com o valor do PASSO, ou seja, x := x + 1
CODE
PARA x DE 1 ATÉ 6 PASSO 1 FAÇA

Resultados:
CODE
a = 25
b =
x = 6
resultado =

Décimo quinto passo: nesse momento, x = 6, o que quer dizer que atingimos a condição de parada do PARA e que seu conteúdo não deve ser executado novamente. Assim, a execução passa à linha após o FIM PARA.
CODE
b := 200;

Resultados:
CODE
a = 25
b = 200
x = 6
resultado =

Décimo sexto passo: Soma do valor de b e a e atribuição à variável b.
CODE
b := b + a;

Resultados:
CODE
a = 25
b = 225
x = 6
resultado =

Décimo sétimo passo: Divisão do valor de b pelo valor de a e atribuição do valor em resultado.
CODE
resultado := b / a;

Resultados:
CODE
a = 25
b = 225
x = 6
resultado = 9

Décimo oitavo passo: exibição do valor da variável resultado.
CODE
ESCREVA(resultado);

Resultado:
CODE
9


Claro que este foi um exemplo didático e que não precisaria de grandes análises para nada, mas quando o algoritmo (ou programa) torna-se grande e complexo, com uso de procedimentos, funções, recursividade, etc, a análise e o debugger tornam-se essenciais.

O nosso conteúdo de algoritmo está chegando ao fim.

Espero que tenham gostado e que nos passem sugestões de melhorias, novas aulas, etc.
Estou totalmente aberto às críticas, sugestões, elogios, etc.

Exercícios

1. Utilizando o algoritmo abaixo, faça um debug e mostre o resultado (que sairá na tela), utilizando 67 como entrada pelo teclado.
CODE
INICIO
    num : inteiro;
    ESCREVA("Digite um número inteiro: ");
    LEIA(num);
    REPITA
        SE (num mod 7 = 0) ENTÃO
            ESCREVA(num + ", ");
        FIM SE
        num := num – 1;
    ATÉ (num < 7)
FIM



Autor: Mestre tmferreira

Você gostou? Comente no fórum!

Comentários:

dupa31 disse:

seta.gif Confesso que nem sei por onde começar esse trem, cara está ficando cada vez mais estreito !

shumi disse:

Vai dupa!
Força é a última aula de algoritimo!!!!


\\ o tmferreira está viajando a trabalho e só acessara o fórum sexta-feira agora!

Abraços

tmferreira disse:

Qual a dúvida, dupa?

PS: ainda estou em curso. rsrsrs

dupa31 disse:

Só uma perguntinha, não está tendo mais aula ? cap.gif

Ver o restante dos comentários no fórum (e aproveitar pra comentar também !).

Mais recentes em Outras Linguagens

Desafio
Por grilo - Sera que alguem pode me ajudar a fazer esse desafio...
Não consigo.
Por 2pac - Não consigo ver as aulas da 4 a 9 aula vai direto da...
Tudo sobre manipulação de strings e caracteres
Por fernando777 - Muito completo...
Criando bibliotecas no c
Por fernando777 - Criando bibliotecas no c - - a criação de bibliotecas...
Operador sizeof no c
Por fernando777 - Operador sizeof - - o operador sizeof mostra quanto...

Ver mais Artigos de Outras Linguagens.

Ver e retirar outras dúvidas no fórum Webly.

Alguns Direitos Reservados | RSS | O Fórum

Webly Portal e Fóruns - Internet + Humana | Design by ArthurHenrique.com