Verificação Manual de
Algoritmos e Modularização
Bruno Cartaxo
http://sites.google.com/site/brunocartaxo
[email protected]
Tópicos a serem discutidos na disciplina
•
Introdução a computadores e algoritmos
•
Tipos de dados, operadores, variáveis, E/S
•
Verificação manual de algoritmos e modularização
•
Estruturas de decisão: comandos SE e CASO
•
Estruturas de repetição: comandos ENQUANTO e PARA
•
Vetores
•
Introdução à Java
•
Trabalhando com strings em Java
•
Estruturas de decisão em Java
•
Estruturas de repetição em Java
Roteiro para construção de algoritmos
1. ENTENDA O PROBLEMA
• Etapa mais importante. Erros nesta fase podem levar a construção de soluções erradas ou soluções corretas para o problema errado.
2. Identifique no problema as saídas do algoritmo
• Atente o que deve ser calculado, impresso e processado.
3. Identifique no problema as entradas do algoritmo
• Atente para o que deve ser lido, obtido do usuário.
4. Identifique qual o processamento necessário
• Atente para os cálculos necessários, sempre a partir dos valores de entrada, para chegar aos de saída.
5. Separe as etapas de entrada de dados, processamento e saída de dados dentro do algoritmo.
Verificação manual de algoritmos
•
Após a construção de um algoritmo
pode-se verificar se o mesmo
realmente é uma solução
para o problema.
•
Forma
“braçal” denominada “
teste de mesa
” ou “
método chinês
”.
•
Consiste na
simulação manual da execução do algoritmo
,
comando após
comando
, atentando para as entradas e saídas de dados e verificando o
comportamento das variáveis.
•
Equivale a colocar-se no papel do computador
, anotando o que a máquina
Exemplo 1
Calcular a
média de dois números
reais
•
Solução
• Entradas: dois números reais
• Saída: a média dos números
• Cálculo necessário: somar os números e dividir o resultado por dois.
Variáveis
num1, num2, soma, media : real;
Início
ler num1; ler num2;
Exemplo 1
•
Verificando se o algoritmo está correto
• Inicialmente anotamos as variáveis do algoritmo, e, ao lado, o valor nela armazenado.
• Supondo que, na primeira leitura, o usuário forneça o valor 8.
• Supondo que, na segunda leitura, o usuário forneça o valor 7.
• Em seguida o computador calcula a soma.
• Por último o computador calcula a média na atribuição seguinte.
• O valor 7.5 será impresso, indicando a média dos números 8 e 7 corretamente.
Exemplo 2
•
Indique os valores impressos pelo algoritmo a seguir
Variáveis
A, B, C, D : inteiro;
Início
A <- 10; B <- 20; D <- A + A; C <- A + B; A <- B + C; D <- D + 1; escrever A; escrever B; escrever C; escrever D;
Exemplo 2
A ? B ? C ? D ? A 10 B ? C ? D ? A 10 B 20 C ? D ? A 10 B 20 C ? D 20 A 10 B 20 C 30 D 20 A 50 B 20 C 30 D 20 A 50 B 20 C 30 D 21 VariáveisA, B, C, D : inteiro;
Início
A <- 10; B <- 20; D <- A + A; C <- A + B; A <- B + C; D <- D + 1; escrever A; escrever B; escrever C; escrever D;
Exemplo 3
Ler o preço de um par de sapatos numa loja e escrevê-lo com um
desconto de X%
Variáveis
preco, desconto, valor_a_descontar, preco_final : real;
Início
ler preco; ler desconto;
valor_a_descontar <- ( preco * desconto ) / 100; preco_final <- preco –valor_a_descontar;
escrever preco_final;
Exemplo 3
•
Supondo que o usuário informe o preço de R$50,00 e o desconto de
20%, como fica o teste de mesa?
preco 50
desconto ? v_desconto ? preco_final ?
preco 50 desconto 20
v_desconto ? preco_final ? preco 50
desconto 20 v_desconto 10
preco_final ?
preco 50 desconto 20 v_desconto 10 preco_final 40
Variáveis
preco, desconto, valor_a_descontar, preco_final : real;
Início
ler preco; ler desconto;
valor_a_descontar <- ( preco * desconto ) / 100; preco_final <- preco –valor_a_descontar;
escrever preco_final;
Exemplo 4
Ler o nome e a qualidade de uma pessoa, e exibir a mensagem
“<Nome> é uma pessoa que tem <qualidade>”.
•
Solução
• Exemplo simples de composição de frases em algoritmos.
• Para as entradas Maria e coragem, a saída seria “Maria é uma pessoa de coragem”.
Exemplo 4
• O algoritmo fica assim...
Variáveis
nome, qualidade : cadeia;
Início
ler nome; ler qualidade;
escrever nome, “ é uma pessoa que tem “, qualidade;
Fim
nome ? qualidade ?
nome “Maria” qualidade ?
nome “Maria”
Modularização de algoritmos
•
A medida que abordamos
problemas mais complexos
, os algoritmos também
apresentarão uma maior complexidade.
•
A complexidade não está relacionada a quantidade de comandos existentes, e
sim às diversas combinações possíveis dos comandos existentes
.
• Os comandos que possuímos são poucos, mas podemos realizar diversas combinações com os mesmos.
•
A complexidade de um problema pode dificultar a construção do algoritmo
de
sua solução
Modularização de algoritmos
•
Modularização
consiste em
dividir um algoritmo em etapas
, fazendo com que
cada etapa seja parte da solução de um problema maior.
• Se um subproblema ainda parecer muito complexo, podemos tentar dividi-lo em partes ainda menores, para facilitar sua solução, e assim sucessivamente.
• “Dividir para conquistar”
•
Nós temos dificuldade de resolver problemas quando os mesmos possuem uma
grande quantidade de elementos inseridos.
Modularização de algoritmos
•
A
sintaxe
de criação de módulos é:
•
Para utilizar um módulo
dentro de nosso algoritmo, basta inserirmos em algum
ponto do algoritmo uma chamada ao módulo:
• <nome_módulo>;
Módulo <nome_módulo>;
[[
<comando1>; <comando2>; <comando3>; ...
<comandoN>;
Exemplo 1
•
Numa loja de materiais de construção, um azulejo estampado custa
R$2,50. Faça um algoritmo para ler o comprimento e altura de uma
parede (em metros), e depois escrever o valor gasto com a compra de
azulejos. Considere que um metro quadrado é formado por 9
azulejos.
•
Solução
• A saída é o valor total gasto com azulejos.
• O computador precisa saber o comprimento e a altura da parede.
Exemplo 1
•
Multiplicando a altura pelo comprimento, teremos a área da parede
(considerando uma parede retangular);
•
Multiplicando a área pelo número 9, teremos a quantidade de
azulejos necessários para preencher esta área;
•
Uma vez que um azulejo custa R$2,50 (um valor constante), podemos
multiplicar a quantidade de azulejos por 2,5 para chegar ao total
Exemplo 1
• Pensando em termos de algoritmo, podemos imaginar três etapas:
Variáveis
? ? ?; Início
Exemplo 1
• Detalhando a última etapa, criamos um módulo para escrever o gasto.
Variáveis
gasto_azulejos: real; Início
“Obter as dimensões da parede”; “Calcular o valor gasto com azulejos”; ESCREVER_GASTO;
Fim.
Módulo ESCREVER_GASTO; [[
Exemplo 1
• Detalhando a primeira etapa, criamos um módulo para ler as dimensões da parede.
Variáveis
gasto_azulejos, comprimento, altura: real; Início
LER_DIMENSOES;
“Calcular o valor gasto com azulejos”; ESCREVER_GASTO;
Fim.
Módulo LER_DIMENSOES; [[
escrever “Entre com o comprimento da parede”; ler comprimento;
escrever “Entre com a altura da parede”; ler altura;
]];
Exemplo 1
• Detalhando o cálculo do valor gasto. Variáveis
gasto_azulejos, comprimento, altura, area, azulejos: real; Início
LER_DIMENSOES;
CALCULAR_VALOR_GASTO; ESCREVER_GASTO;
Fim.
Módulo CALCULAR_VALOR_GASTO; [[
area <- comprimento * altura; azulejos <- area * 9;
gasto_azulejos <- azulejos * 2.5; ]];
Módulo LER_DIMENSOES; [[...]];
Relembrando alguns conceitos
•
Nomes de variáveis e módulos seguem as regras de um identificador.
•
Início e fim de cada módulo ficam delimitados pelos colchetes duplos.
•
As definições de módulos só são executadas se chamadas de dentro do
corpo do algoritmo
• A execução do algoritmo fica restrita ao que está contido entre as palavras-chave início e fim.