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á!
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
Comentários:
dupa31 disse:
shumi disse:
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:
PS: ainda estou em curso. rsrsrs
dupa31 disse:
Ver o restante dos comentários no fórum (e aproveitar pra comentar também !).