Você está na página 1de 12

INF01040 ‐ INTRODUÇÃO À PROGRAMAÇÃO 

Estudo Dirigido 1 – Algoritmos e Teste de Mesa 
 
 

1. Algoritmo 
 
Algoritmo  é  uma  sequência  de  passos  organizados  com  o  objetvo  de  realizar  uma 
determinada tarefa. 
 
Em toda atividade realizada no dia a dia aplicamos um algoritmo para executá‐la, 
seguindo uma ordem lógica de ações. Ao cozinhar um ovo, por exemplo, sabemos que 
devemos realizar este conjunto de ações: 
 
1. Pegar o ovo da geladeira 
2. Colocar o ovo na panela e colocar água até cobri‐lo 
3. Levar ao fogo a panela com a água e o ovo 
4. Após ferver, deixar cozinhando por 8 minutos 
5. Apagar o fogo, esfriar em água fria 
6. Descascar o ovo 
 
Intuitivamente  realizamos  estas  atividades  na  sequência  apresentada  acima.  Mas  o 
que aconteceria caso invertêssemos a ordem das ações? 
 
Descascar o ovo 
2. Apagar o fogo, esfriar o ovo em água fria 
3. Colocar o ovo na panela e colocar água até cobri‐lo  
4. Pegar o ovo da geladeira 
... 
 
Essa  nova  ordem  lógica  faz  algum  sentido?  Seria  possível  concluir  a  atividade 
proposta?  
 
Tendo isso em vista, faz‐se necessária a estruturação e a elaboração do problema de 
forma organizada, o que nos leva à importância de um pensamento lógico sequencial, 
ou  seja,  à  estruturação  da  solução  do  problema  como  uma  sequência  de  comandos 
que devem ser executados na ordem expressa. 
 
Nos exemplos acima, expressamos um algoritmo através de um pseudocódigo, isto é, 
escrevendo seu passo‐a‐passo em uma linguagem simples e de fácil interpretação. 
 
Nesta  disciplina,  trabalhamos  com  algoritmos  que  serão  posteriormente 
transformados  em  um  programa  de  computador.  Dessa  forma,  lidamos  com 
algoritmos  numéricos  (cujas  ações  envolvem  computações  feitas  pela  máquina).  Tais 
algoritmos  precisam  ser  definidos  usando  as  premissas  de  computação  usadas  pela 
máquina, ou seja, as ações usadas na resolução do problema devem ser aquelas que a 
máquina consegue executar. 
 
 
INF01040 ‐ INTRODUÇÃO À PROGRAMAÇÃO 
Estudo Dirigido 1 – Algoritmos e Teste de Mesa 
 
2. Definindo um algoritmo básico para um dado problema 
 
Para a definição de um algoritmo, devemos responder às seguintes perguntas:  
 
1) Qual o objetivo do algoritmo? Que problema ele deve resolver? 
2) Quais informações são necessárias para que o problema seja resolvido e o 
objetivo atingido? 
3) Quais informações estão disponíveis (são já conhecidas) para a  solução do 
problema? 
4) Quais  informações  precisam  ser  solicitadas  ao  usuário  do  algoritmo  para 
que ele possa ser aplicado? 
5) Quais  informações  o  algoritmo  precisa  calcular,  a  partir  daquelas 
disponíveis e/ou fornecidas pelo usuário? 
6) Quais  informações  precisam  ser  exibidas  ao  usuário  do  algoritmo  como 
resposta da sua execução? 
7) Qual  é  a  sequência  de  ações  necessária  para  atingir  o  objetivo  e  gerar  as 
informações desejadas? 
 
Vejamos um exemplo. Dado o problema: 
“Uma fábrica de peixes enlatados precisa de um aplicativo para calcular o valor que um 
cliente pagará em uma compra de sardinhas e atum. O cliente fornece a quantidade de 
sardinhas e de atuns a serem comprados (em unidades). O valor unitário de cada peixe 
varia com o mercado e é informado, para cada tipo de peixe, na hora da compra. Sobre 
cada compra, é gerado um valor de imposto que deve ser acrescentado ao valor total a 
ser pago e deve ser informado de maneira destacada. A taxa de imposto é de 15%. ” 
 
Seguindo o roteiro definido acima, podemos criar o algoritmo que será implementado 
posteriormente como um aplicativo. Vejamos: 
 
1) Qual o objetivo do algoritmo? Que problema ele deve resolver? 
Ele deve calcular e exibir o valor total de uma compra de peixes, incluindo o 
imposto devido.  
 
2) Quais informações são necessárias para que o problema seja resolvido e o 
objetivo atingido? 
Número de unidades de sardinha 
Valor unitário da sardinha. 
Número de unidades de atum 
Valor unitário do atum. 
Taxa de imposto incidente 
 
3) Quais informações estão disponíveis (são já conhecidas) para a solução do 
problema? 
A taxa de imposto é conhecida e vale 15%.  
 
INF01040 ‐ INTRODUÇÃO À PROGRAMAÇÃO 
Estudo Dirigido 1 – Algoritmos e Teste de Mesa 
 
4) Quais informações precisam ser solicitadas ao usuário do algoritmo para 
que ele possa ser aplicado? 
Número de unidades de sardinha 
Valor unitário da sardinha. 
Número de unidades de atum 
Valor unitário do atum. 
 
5) Quais  informações  o  algoritmo  precisa  calcular,  a  partir  daquelas 
disponíveis e/ou fornecidas pelo usuário? 
Falta calcular:  
sub‐total para compra das sardinhas 
sub‐total para compra dos atuns 
valor total da compra sem imposto 
valor do imposto 
valor total da compra com o imposto 
 
6) Quais  informações  precisam  ser  exibidas  ao  usuário  do  algoritmo  como 
resposta da sua execução? 
valor total da compra com o imposto 
valor destinado apenas para imposto 
 
7) Qual é a sequência de ações necessária para atingir o objetivo e gerar as 
informações desejadas? 
‐ Obter dados faltantes (Número de unidades de sardinha, Valor unitário da 
sardinha, Número de unidades de atum,Valor unitário do atum) 
‐ calcular sub‐total sardinha 
‐ calcular sub‐total atuns 
‐ calcular total da compra sem imposto 
‐ calcular valor do imposto 
‐ calcular total da compra com imposto 
‐ exibir total da compra e valor cobrado como imposto 
 
 
EXERCÍCIO 1: Defina um algoritmo para o seguinte enunciado: 
 
“O Escritório de Turismo de Porto Alegre precisa de um aplicativo para ajudar o turista 
a entender melhor os preços praticados na cidade. O aplicativo deve informar o preço 
de um produto ou serviço na moeda de origem do turista e em dólares americanos. O 
turista deve informar o valor do produto ou serviço em Reais e deve informar também 
a cotação da moeda desejada. A cotação do dólar é fixada em R$3,00.” 
 
 
3. Refinando o algoritmo básico e descrevendo‐o em pseudo‐código 
 
Note  que,  embora  a  sequência  de  ações  descritas  no  passo  7  seja  clara  para  uma 
pessoa, ela usa conceitos bastante abstratos que não são diretamente executáveis por 
INF01040 ‐ INTRODUÇÃO À PROGRAMAÇÃO 
Estudo Dirigido 1 – Algoritmos e Teste de Mesa 
 
uma máquina. Para que o algoritmo seja facilmente traduzido para uma linguagem de 
programação,  precisamos  refinar  esta  versão  inicial  da  nossa  lógica  e  descrevê‐la 
usando  as  instruções  básicas  do  computador.  Neste  caso,  usaremos  instruções  para 
leitura  de  dados  (obtenção  de  informações  externas),  cálculos  aritméticos  e  exibição 
de  dados  (impressão  de  informações  na  tela).    Essas  instruções  específicas  são 
descritas em formato de pseudo‐código, conforme detalhado no material. Além disso, 
precisamos  usar  o  conceito  de  variáveis,  ou  seja,  nomes  que  “guardam”  valores  (os 
quais podem ser alterados ao longo do algoritmo). 
 
Da  mesma  forma  que  temos  um  roteiro  para  definição  da  lógica  inicial,  podemos 
também usar um roteiro para o refinamento da mesma e definição do pseudo‐código 
correspondente: 
 
8) Definir uma variável para cada valor manipulado pelo algoritmo. O nome 
da variável deve indicar a informação que ela guarda. 
9) Traduzir  todos  os  passos  que  envolvem  “obtenção  de  dados”    em 
comandos de leitura de dados 
10) Traduzir  todos  os  passos  que  envolvem  “cálculos”  em  comandos  básicos 
(expressões aritméticas e comandos de atribuição) 
11)  Traduzir  todos  os  passos  que  envolvem  “exibição  de  dados”    em 
comandos de saída de dados 
 
Assim,  seguindo  este  roteiro,  podemos  definir  as  seguintes  variáveis  para  armazenar 
os valores manipulados pelo algoritmo descrito no item 7 da Seção 2: 
  
numSardinhas:  Número de unidades de sardinha 
valorUnitarioSardinha: Valor unitário da sardinha. 
numAtuns: Número de unidades de atum 
valorUnitarioAtum: Valor unitário do atum 
subTotalSardinhas: sub‐total para compra das sardinhas 
subTotalAtuns: sub‐total para compra dos atuns 
totalAPagar: valor total da compra  
valorImposto: valor do imposto sobre a compra 
totalComImposto: valor total da compra com o imposto 
 
Logo, temos o seguinte pseudocódigo (com comentários entre chaves) correspondente 
à lógica definida no algoritmo básico:   
INF01040 ‐ INTRODUÇÃO À PROGRAMAÇÃO 
Estudo Dirigido 1 – Algoritmos e Teste de Mesa 
 
 
  {Algoritmo para aplicativo PeixeApp – versão 1} 
INICIO 
1. {  Obtém informações do usuário } 
2. Lê numSardinhas;  { ou seja, lê um valor digitado pelo usuário e o guarda   
                                 sob o nome numSardinhas}  
3. Lê valorUnitarioSardinhas; 
4. Lê numAtuns; 
5. Lê valorUnitarioAtuns; 
 
6. { calcula totais parciais } 
7. subTotalSardinhas = numSardinhas * valorUnitarioSardinhas; 
8. subTotalAtuns = numAtuns * valorUnitarioAtuns; 
9. totalAPagar = subTotalSardinhas + subTotalAtuns; 
 
10. { calcula valor do imposto }  
11. valorImposto = totalAPagar * (15/100); 
 
12. { calcula valor total da compra } 
13. totalAPagar = totalAPagar + valorImposto; 
 
14. { Exibe resultados } 
15. Imprime totalComImposto; 
16. Imprime valorImposto; 
FIM 
 
Note que há diversas possibilidades de expressar este pseudo‐código sem alterar sua 
lógica fundamental. Veja alguns exemplos na Figura 1. Todos esses pseudo‐códigos são 
equivalentes  do  ponto  de  vista  lógico  e  devem  gerar  os  mesmos  resultados,  embora 
usem os comandos básicos e as variáveis de maneiras distintas.  
 
 
INF01040 ‐ INTRODUÇÃO À PROGRAMAÇÃO 
Estudo Dirigido 1 – Algoritmos e Teste de Mesa 
 

 
(a) Uso de mais variáveis com expressão aritmética alternativa 
 

 
(b) uso de variáveis diferentes 
 
INF01040 ‐ INTRODUÇÃO À PROGRAMAÇÃO 
Estudo Dirigido 1 – Algoritmos e Teste de Mesa 
 

 
(c) impressão do resultado de uma expressão aritmética 
 
    Figura 1: Variações possíveis (corretas) do pseudo‐código 
 
 
No  entanto,  se  houver  uma  mudança  na  ORDEM  ou  no  USO  dos  comandos,  como 
mostrado nos exemplos da Figura 2, a lógica fundamental do algoritmo muda e ele vai 
gerar resultados diferentes do esperado.  
 
INF01040 ‐ INTRODUÇÃO À PROGRAMAÇÃO 
Estudo Dirigido 1 – Algoritmos e Teste de Mesa 
 

 
(a) uso de variáveis não inicializadas (não possuem valor válido no momento do 
uso) 
 

 
(b) leitura de variáveis que deveriam ser calculadas pelo algoritmo 
Figura 2: Exemplos de pseudo‐código INCORRETOS (não geram o resultado esperado) 
INF01040 ‐ INTRODUÇÃO À PROGRAMAÇÃO 
Estudo Dirigido 1 – Algoritmos e Teste de Mesa 
 
 
EXERCÍCIO  2:  Escreva  o  pseudo‐código  para  o  algoritmo  que  você  elaborou  no 
Exercício 1. 
 
 
3. Como saber se meu algoritmo está correto? 
 
Para verificar que o pseudo‐código implementado corresponde à lógica correta e que 
fornecerá, quando executado, o resultado correto, precisamos simular a sua execução 
com valores concretos. A esta simulação, dá‐se o nome de teste de mesa. O teste de 
mesa consiste em:  
12. escolher um valor específico (valor de teste) para cada dado que o 
algoritmo solicita ao usuário 
13. “executar”  cada  linha  do  pseudo‐código,  seguindo  a  semântica 
exata  definida  para  cada  comando  e  usando  os  valores  de  teste 
escolhidos 
14. Atualizar (anotar) os valores assumidos por cada variável definida 
no algoritmo após a execução de cada comando. 
15. Repetir o teste de mesa para outros valores de entrada. 
 
Para  executar  um  teste  de  mesa,  é  interessante  montar  uma  tabela  com  todas  as 
variáveis  envolvidas  no  algoritmo,  para  acompanhar  a  alteração  dos  seus  valores  ao 
longo  da  execução.  A  Tabela  1  abaixo  corresponde  ao  pseudo‐código  do  algoritmo 
usado na aplicação da peixaria: 
 
Tabela 1: Teste de mesa do PeixeApp 
Variável  Valor 
  Início  L2  L3  L4  L5  L7  L8  L9  L11  L13  L15‐
L16 
numSardinhas  ????                     
ValorUnitario  ????                     
Sardinha 
numAtuns  ????                     
valorUnitario  ????                     
Atum 
subTotal  ????                     
Sardinhas 
subTotalAtuns  ????                     
totalAPagar  ????                     
valorImposto  ????                     
Saída (tela)    ‐                      
 
As  linhas  da  tabela  representam  as  variáveis  usadas  no  pseudo‐código.  As  colunas 
indicam o valor assumido por cada variável em cada passo do algoritmo (cada passo é 
indicado pelo número da linha no pseudo‐código). A última linha da tabela representa 
o que seria mostrado para o usuário (na tela do computador) a cada passo.  
INF01040 ‐ INTRODUÇÃO À PROGRAMAÇÃO 
Estudo Dirigido 1 – Algoritmos e Teste de Mesa 
 
A  execução  do  teste  de  mesa  inicia‐se  pelo  comando  INICIO  (linha  0)  do 
pseudo‐código e prossegue até que seja executado o comando FIM (linha 17).  
Note que no ponto de início do algoritmo (linha 0 do pseudo‐código), os valores 
de  todas  as  variáveis  são  indefinidos,  pois  nenhuma  delas  foi  inicializada  (recebeu 
algum valor). Da mesma forma, o valor de uma variável permanece indefinido até que 
aquela variável seja utilizada em um comando de leitura ou do lado esquerdo de um 
comando de atribuição (=) no pseudo‐código.  
Assim,  para  realizarmos  o  teste  de  mesa  do  algoritmo  que  estamos  usando 
como  exemplo,  precisamos  definir  quatro  valores  de  entrada:  a  quantidade  de 
sardinha,  o  valor  unitário  da  sardinha,  a  quantidade  de  atum  e  o  valor  unitário  do 
atum.  
Que  valores  escolhemos?  No  primeiro  teste  de  mesa,  escolhemos  um  valor 
típico dentro de um intervalo “esperado”.  Por exemplo, podemos escolher para este 
exemplo os seguintes valores, respectivamente:  9, 15.50, 10 e 237. 
A Tabela 1 acima mostra os valores das variáveis quando iniciamos o teste de 
mesa,  ou  seja,  quando  executamos  o  comando  Início.  As  Tabelas  2  até  5  mostram  a 
execução passo‐a‐passo do algoritmo e a evolução das variáveis a cada passo. 
 
Tabela 2: Teste de mesa do PeixeApp – valor das variáveis após a execução das linhas 2 
a 5 do pseudo‐código (inicialização de variáveis, uma por vez) 
Variável  Valor 
  Início  L2  L3  L4  L5  L7  L8  L9  L11  L13  L15‐
L16 
numSardinhas  ????  9  9 9 9    
ValorUnitario  ????  ????  15.5 15.5 15.5    
Sardinha 
numAtuns  ????  ????  ???? 10 10    
valorUnitario  ????  ????  ???? ???? 237    
Atum 
subTotal  ????  ????  ???? ???? ????    
Sardinhas 
subTotalAtuns  ????  ????  ???? ???? ????    
totalAPagar  ????  ????  ???? ???? ????    
valorImposto  ????  ????  ???? ???? ????    
Saída (tela)    ‐ ‐  ‐ ‐ ‐    
 
Note que, após a inicialização, ou seja, após a variável receber um valor por leitura ou 
atribuição, este valor permanece associado à variável até que esta variável seja usada 
em um outro comando de leitura ou do lado esquerdo de um comando de atribuição.  
 
 
 
 
 
 
 
 
INF01040 ‐ INTRODUÇÃO À PROGRAMAÇÃO 
Estudo Dirigido 1 – Algoritmos e Teste de Mesa 
 
Tabela 3: Teste de mesa do PeixeApp – valor das variáveis após a execução das linhas 7 
a 11 do pseudo‐código (cálculo dos totais parciais) 
Variável  Valor 
  Início  L2  L3  L4  L5  L7  L8  L9  L11  L13  L15  L16 
numSardinhas  ????  9  9  9 9 9 9 9 9       
ValorUnitario  ????  ???  15. 15. 15.5 15.5 15.5 15.5 15.5       
Sardinha  5  5 
numAtuns  ????  ???  ???  10 10 10 10 10 10       
valorUnitario  ????  ???  ???  ??? 237 237 237 237 237       
Atum 
subTotal  ????  ???  ???  ??? ???? 139.5 139.5 139.5 139.5   
Sardinhas 
subTotalAtuns  ????  ???  ???  ??? ???? ???? 2370 2370 2370   
totalAPagar  ????  ???  ???  ??? ???? ???? ???? 2509.5 2509.5   
valorImposto  ????  ???  ???  ??? ???? ???? ???? ???? 376.4   
Saída (tela)    ‐   ‐  ‐  ‐ ‐ ‐ ‐ ‐ ‐  
 
Note  que,  para  o  cálculo  dos  sub‐totais,  olhamos  as  linhas  correspondentes  às 
variáveis  usadas  na  expressão  aritmética  (lado  direito  do  comando  de  atribuição)  e 
buscamos  o  valor  contido  na  coluna  correspondente  ao  passo  do  algoritmo  que 
contém a expressão aritmética (células marcadas em verde na Tabela 3). 
 
 
Tabela 4: Teste de mesa do PeixeApp – valor das variáveis após a execução da linha 13 
do pseudo‐código (cálculo do total a pagar com imposto) 
Variável  Valor 
  Início  L2  L3  L4  L5  L7  L8  L9  L11  L13  L15 L16
numSardinhas  ????  9  9  9 9 9 9 9 9  9     
ValorUnitario  ????  ???  15. 15. 15.5 15.5 15.5 15.5 15.5  15.5     
Sardinha  5  5 
numAtuns  ????  ???  ???  10 10 10 10 10 10  10     
valorUnitario  ????  ???  ???  ??? 237 237 237 237 237  237     
Atum 
subTotal  ????  ???  ???  ??? ???? 139.5 139.5 139.5 139.5  139.5 
Sardinhas 
subTotalAtuns  ????  ???  ???  ??? ???? ???? 2370 2370 2370  2370 
totalAPagar  ????  ???  ???  ??? ???? ???? ???? 2509.5 2509.5  2885.9 
valorImposto  ????  ???  ???  ??? ???? ???? ???? ???? 376.4  376.4 
Saída (tela)    ‐   ‐  ‐  ‐ ‐ ‐ ‐ ‐ ‐ ‐ 
 
Note  que,  neste  último  passo,  a  variável  totalAPagar  teve  seu  valor  ALTERADO,  ou 
seja, o valor que a variável guardava no passo anterior (2509.5) foi somado ao valor do 
imposto  (376.4)  e  ARMAZENADO  NOVAMENTE  na  mesma  variável.  Com  isso,  o  valor 
anterior é SUBSTITUÍDO pelo novo valor após a execução do comando de atribuição. 
 
 
 
INF01040 ‐ INTRODUÇÃO À PROGRAMAÇÃO 
Estudo Dirigido 1 – Algoritmos e Teste de Mesa 
 
Tabela 5: Teste de mesa do PeixeApp – valor das variáveis após a execução das linhas 
15 e 16 do pseudo‐código (exibição dos resultados) 
Variável  Valor 
  Início  L2  L3  L4  L5  L7  L8  L9  L11  L13  L15  L16 
numSardinhas  ????  9  9  9 9 9 9 9 9  9  9 9
ValorUnitario  ????  ???  15. 15. 15.5 15.5 15.5 15.5 15.5  15.5  15.5 15.5
Sardinha  5  5 
numAtuns  ????  ???  ???  10 10 10 10 10 10  10  10 10
valorUnitario  ????  ???  ???  ??? 237 237 237 237 237  237  237 237
Atum 
subTotal  ????  ???  ???  ??? ???? 139.5 139.5 139.5 139.5  139.5  139.5 139.5
Sardinhas 
subTotalAtuns  ????  ???  ???  ??? ???? ???? 2370 2370 2370  2370  2370 2370
totalAPagar  ????  ???  ???  ??? ???? ???? ???? 2509.5 2509.5  2885. 2885.9 2885.
9  9 
valorImposto  ????  ???  ???  ??? ???? ???? ???? ???? 376.4  376.4  376.4 376.4
Saída (tela)    ‐   ‐  ‐  ‐ ‐ ‐ ‐ ‐ ‐ ‐  2885.9 376.4
 
Os valores exibido para o usuário nos passos 15 e 16 são os valores contidos naquele 
momento nas variáveis usadas no comando Imprime.  
  
EXERCÍCIO 3: Execute um teste de mesa para o pseudo‐código mostrado na Figura 1 
(a)  e  compare  os  resultados  desta  execução  com  o  teste  de  mesa  mostrado  nas 
Tabelas 2 a 5. Use os mesmos valores de entrada e lembre‐se de ter, na tabela, uma 
linha  para  cada  variável  usada  no  algoritmo.  Descreva  esta  comparação:  o  que  você 
esperava como resultado? O que de fato aconteceu? Por que? 
 
EXERCÍCIO 4: Execute um teste de mesa para o pseudo‐código mostrado na Figura 2 
(a) e compare os resultados desta execução com o teste de mesa mostrado nas tabelas 
2 a 5. Use os mesmos valores de entrada e lembre‐se de ter, na tabela, uma linha para 
cada  variável  usada  no  algoritmo.  Descreva  esta  comparação:  o  que  você  esperava 
como resultado? O que de fato aconteceu? Por que? 
 
EXERCÍCIO 5:  Execute um teste de mesa para o pseudo‐código mostrado na Figura 1 
(a)  mas usando os seguintes valores de entrada:  
numSardinhas = 2 
valorUnitarioSardinha = ‐3,0 
numAtuns = 10 
valorUnitarioAtum = 35,00 
 
O que você esperava como resultado? O que de fato aconteceu? Por que? 
 
 EXERCÍCIO  6:    Faça  o  teste  de  mesa  para  o  algoritmo  que  você  desenvolveu  para  o 
Escritório  de  Turismo.  Execute  pelo  menos  três  execuções  do  algoritmo:  pelo  menos 
duas  com  valores  típicos  esperados  e  pelo  menos  uma  com  valores  não  típicos 
(“inválidos”).  Baseado  neste  teste  de  mesa,  o  que  você  pode  concluir  sobre  seu 
algoritmo, ele está correto?