The+Talent+Code
The+Talent+Code
The+Talent+Code
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?