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:
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:
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?
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.
a, b, x : inteiro;
Resultados:
a = b = x =
Segundo passo: declaração da variável real (que possibilita armazenar números com casas decimais).
resultado : real;
Resultados:
a = b = x = resultado =
Terceiro passo: atribuição de valor à variável a.
a := 10;
Resultados:
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.
PARA x DE 1 ATÉ 6 PASSO 1 FAÇA
Resultados:
a = 10 b = x = 1 resultado =
Quinto passo: incremento de valor à variável a.
a := a + x;
Resultados:
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
PARA x DE 1 ATÉ 6 PASSO 1 FAÇA
Resultados:
a = 11 b = x = 2 resultado =
Sétimo passo: incremento de valor à variável a.
a := a + x;
Resultados:
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
PARA x DE 1 ATÉ 6 PASSO 1 FAÇA
Resultados:
a = 13 b = x = 3 resultado =
Nono passo: incremento de valor à variável a.
a := a + x;
Resultados:
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
PARA x DE 1 ATÉ 6 PASSO 1 FAÇA
Resultados:
a = 16 b = x = 4 resultado =
Décimo primeiro passo: incremento de valor à variável a.
a := a + x;
Resultados:
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
PARA x DE 1 ATÉ 6 PASSO 1 FAÇA
Resultados:
a = 20 b = x = 5 resultado =
Décimo terceiro passo: incremento de valor à variável a.
a := a + x;
Resultados:
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
PARA x DE 1 ATÉ 6 PASSO 1 FAÇA
Resultados:
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.
b := 200;
Resultados:
a = 25 b = 200 x = 6 resultado =
Décimo sexto passo: Soma do valor de b e a e atribuição à variável b.
b := b + a;
Resultados:
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.
resultado := b / a;
Resultados:
a = 25 b = 225 x = 6 resultado = 9
Décimo oitavo passo: exibição do valor da variável resultado.
ESCREVA(resultado);
Resultado:
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.
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)
FIMAutor: Mestre tmferreira

Entrar
Cadastre-se
Ajuda
Responder


Quote

