CONTEUDO

Título : B1.1 - Algoritmos
Conteúdo :
 B1.1 - Algoritmos

ü     Conceitos básicos
ü     Algoritmos


Um Algoritmo é uma seqüência de instruções limitadas, ordenadas de forma lógica para a resolução de uma determinada tarefa ou um problema.
Tudo que fazemos intencionalmente existe um algoritmo, fazemos instintivamente pois conforme vamos crescendo e aprendendo novas instruções ao se incorporando ao nosso repertório. O ser humano desde o inicio de sua existência tem procurado meios para solucionar seus problemas.
Algumas outras definições sobre algoritmos:
“Algoritmo é a descrição de uma seqüência de passos que deve ser seguida para a realização de uma tarefa” ,[Ascencio, 1999].
“Algoritmo é uma seqüência finita de instruções ou operações cuja execução, em tempo finito, resolve um problema computacional, qualquer que seja sua instância”, [Salvetti, 1999].

ü     Programas

Os programas de computadores os algoritmos escritos numa linguagem de computador. Existem diversas linguagens de programação, tais como Java, C, C++, (Pascal Delphi) Essas linguagens são interpretados e executados por uma máquina, no caso um computador. É importante ressaltar que o computador executa exatamente os comandos escritos nas linguagens de programação. Assim um comando colocado em lugar errado levará ao erro na execução do programa. Outro fator de erros é a desobediências nas regras de escrita, impedindo a execução do programa.


ü     Lógica de programação

A lógica em programação, é a técnica de encadear pensamentos para atingir um determinado objetivo.
O objetivo principal da Lógica de Programação é demonstrar técnicas para resolução de problemas e consequentemente automatização de tarefas.
ü     Representação da lógica
Para desenvolver um programa é preciso ter um bom raciocino lógico, para representarmos está lógica utilizamos as simbologias dos algoritmos. Na linguagem computacional temos três tipos de algoritmos mais utilizados, são eles: descrição narrativa, fluxograma e pseudocódigo ou portugol, que descreveremos a seguir.
ü     Regras para construção do Algoritmo
 As regras para escrever um algoritmo não são complexas, basta ser simples e objetiva. Para isso descreva a seqüência de instruções seguindo as dicas abaixo:
·         Use um verbo por frase, seja objetivo.
·         O teu algoritmo dever se simples o suficiente de tal maneira que uma pessoa que não trabalha com informática entenda.
·         Não use frases rebuscadas e confusas, seja simples e claro no seu objetivo.
·         Não use palavras que deixe margem de dúvidas.

ü     Fases de um Algoritmo
Importante: Um mal desenvolvedor de algoritmos dificilmente será um bom programador. Portanto, antes de ficar diante do computador para desenvolver um programa é preciso definir as metas.
Por isso, diante de um problema deve-se seguir alguns passos importantes:
1                   Faça uma leitura de todo o problema até o final, a fim de formar a primeira impressão. A seguir, releia o problema e faça anotações sobre os pontos principais.
2                   Verifique se o problema foi bem entendido. Questione, se preciso, ao autor da especificação sobre suas dúvidas. Releia o problema quantas vezes for preciso para tentar entendê-lo.
3                   Extraia do problema todas as suas saídas.
4                   Extraia do problema todas as suas entradas.
5                   Identifique qual é o processamento principal.
6                   Verifique se será necessário algum valor intermediário que auxilie a transformação das entradas em saídas. Esta etapa pode parecer obscura no início, mas com certeza no desenrolar do algoritmo, estes valores aparecerão naturalmente.
7                   Teste cada passo do algoritmo, com todos os seus caminhos para verificar se o processamento está gerando os resultados esperados. Crie valores de teste para submeter ao algoritmo.
8                   Reveja o algoritmo, checando as boas normas de criação.

No dia-a-dia executamos vários tipos de algoritmos, por exemplo imagine a seguinte situação: O objetivo é levantar às 6:00h e sair para trabalhar.
Passo1 – desligar o despertador
Passo 2 – levantar.
Passo 3 – escovar os dentes
Passo 4- trocar de roupa
Passo 5- tomar café
Passo 6-sair de casa.

Exercício resolvido:

Faça um Algoritmo não computacional cujo objetivo é usar um telefone público.

1.    Tirar o fone do gancho;
2.    Ouvir o sinal de linha;
3.    Introduzir o cartão;
4.    Teclar o número desejado;
5.    Se der o sinal de chamar
5.1           Conversar;
5.2           Desligar;
5.3           Retirar o cartão;
6.    Senão
6.1           Colocar o fone no gancho
6.2           Repetir
Da mesma maneira como ordenamos nossos pensamentos devemos ordenar nossa forma de programarmos. O computador irá executar exatamente aquilo que desenvolvermos.
Por exemplo, quais passos para para somar 2 números?
Eu peço os dois números, faço a soma e dou o resultado, mas temos que ficar atentos a três passos básicos (figura 1):

Figura 1 – passos iniciais para a construção de algoritmo

Figura 2 Analogia com o ser humano




ü     Tipos de algoritmos

Descrição Narrativa
A descrição narrativa consiste em entender o problema proposto e escrever sua solução através da linguagem natural, ou seja, a língua portuguesa.
Vantagens
Desvantagens
Não é necessário aprender nenhum conceito novo. Basta escrever da maneira como se fala.

Esta linguagem da margem para vários tipos de interpretação. Portanto, se você não for claro o suficiente isto poderá trazer dificultar a transição desse algoritmo para a programação



Fluxograma
Através de um conjunto de símbolos (tabela abaixo): você define os passos para a solução do problema apresentado.

Função: Inicio e Fim do algoritmo
Função: indica cálculo e atribuições de valores
Função: indica a entrada de dados
Função: indica uma decisão com possibilidades de desvios.
Função: indica saída de dados
Função: indica o fluxo de dados. Serve também para conectar os blocos ou símbolos existentes.


Vantagens
Desvantagens
O entendimento é bem mais simples
É necessário que se tenha conhecimento dos símbolos.
Modificações e edições difíceis

Pseudocódigo ou Portugol
Esta estrutura é escrita em português, muito próxima à linguagem natural, utilizando regras predefinidas para escrevê-la. Utilizando o enunciado acima, somar dois números.
Algoritmo soma_números; Variáveis
num1,num2,soma: inteiro; Inicio
Escreva (“Digite dois números” )
Leia num1, num2;
Soma¬num1+num2;
Escreva (“Soma”,Soma )
Fim.
Vantagens
Desvantagens
O entendimento é bem mais simples
É necessário que se tenha conhecimento de pseudocódigo, que veremos mais adiante.

ü     Tipos de informações;

Podemos classificar os tipos de informações a serem processadas, a grosso modo, em dados e instruções.
Dados
São as informações a serem processadas por um computador.

Instruções
São os comandos que orientam o processamento feito por um computador
ü     Tipos Primitivos de Dados

Os algoritmos e as linguagens trabalham com dados. Estes dados são classificados em tipos. Uma comparação pode ser feita com os diversos tipos de pesos e medidas existentes ( kg, km, ml, cm, etc.)
 Em algumas linguagens existem os seguintes alguns tipos pré-definidos:
         Números Inteiros (int)
         Números Reais (float, double)
         Caracteres (char)
         Lógicos e booleanos
         Vazio (void)
         String (cadeia de caracteres)

Analisando individualmente cada um dos tipos:

ü      Números Inteiros
         Toda e qualquer informação numérica que pertença ao conjunto dos  números inteiros (negativa, nula ou positiva). Ex: 1; 2; 44; 100; 0; -15; -99
ü      Números Reais
         Toda e qualquer informação numérica que pertença ao conjunto dos números reais (negativa, nula ou positiva). Ex:0.12; 3.14159; 0.000; -1.23
ü      Caracteres (char)
          Toda e qualquer informação composta por um conjunto de caracteres alfanuméricos:
ü      numéricos (‘0’.. .’9’);
ü      alfabéticos (‘A’.. .’Z’, ‘a’.. .’z’);
ü      especiais (por exemplo, ‘#’, ‘?’,’ !’, ‘@’)
         São identificados por estarem entre apóstrofes

ü      Lógicos
         Toda e qualquer informação que pode assumir apenas duas situações:
ü      Tipo Valores booleano V ou F

Exercícios Resolvidos
1) Indique com um X quais dados são do tipo inteiro.
( ) ‘1’               ( ) falso                      (X) 34                         ( ) ‘-900’
( ) ‘A’               (X) 0                           (X) –456                    ( ) ’0’
( ) -1.86          ( ) ‘Casa 2000’         ( ) verdadeiro            (X) 1000

2) Indique com um X quais dados são do tipo real.
( ) ‘675’          (X) -1.86                    ( ) ‘Cinco’                  ( ) ‘-9.12’
( ) 675            ( ) falso                      (X) -99.8                    ( ) ’0.87’
( ) ‘A’               (X) 45.8976               ( ) verdadeiro            ( ) –678


ü     Variáveis, constantes, operadores;


Constantes
         Um dado é constante quando não sofre nenhuma variação, seu valor é constante do início ao fim da execução do programa, assim como é constante para execuções diferentes.
        #definido PI =3.141617 ;( NUNCA MUDA)

Variáveis
         As informações no computador são armazenadas temporariamente em sua memória principal.
         Imagine que esta memória é um grande arquivo com várias gavetas,  contendo diferentes informações.
         Para encontrar o conteúdo procurado nas gavetas é preciso identificar com uma etiqueta (nome da variável)

O computador, para poder trabalhar com as informações, precisa saber onde  na memória, o dado está localizado. Portanto, cada caixa ou posição de memória, possui um endereço, ou seja, um número representado através da notação hexadecimal que indica o endereço de memória onde está armazenada a informação.

Tabela 1 - Exemplo de alocação da memória
Endereço Físico
Informação
7000: B128
‘ABC’
2000: 0007
‘D
8900: 138D
12395


Sendo os endereços lógicos “caixas”, que num dado momento guardam algum tipo de informação é importante saber que esses dados não permanecem por muito tempo, ou seja, não são permanentes. No exemplo acima os dados podem ser diversos, a caixa com o endereço 7000: B128 recebeu o texto: ABC, mas em outro momento ele pode receber uma outra frase qualquer. Com isto queremos dizer que o conteúdo destas caixas (endereços lógicos) podem mudar a qualquer momento e sofrer alterações em seus conteúdos. Daí vem o nome utilizado para esta representação: variáveis, pois variam durante cada execução do programa.
Quando definimos uma variável como sendo do tipo caracater ou string (ou cadeia de caracteres) não estamos alocando 1 posição de memória apenas ( uma caixa, pela analogia inicial ), mas na verdade, estamos alocando até 255 caixas, uma para cada caracter da STRING (cadeia). Com relação a cadeias podemos utilizar o valor entre aspas “.

Os nomes das variáveis são atribuídos pelo usuário e obedecem a certas regras.

Variáveis - nomenclaturas
          O primeiro caractere deve ser uma letra.
         Os nomes podem ser formados por letras,dígitos e o caractere sublinhado ( underline).
          Podem ter qualquer comprimento

No exemplo da tabela 1, atribuímos a variável “Codigo” o valor “ABC”, obtendo na memória a seguinte configuração:

Código
1
2
3
4
...
...
...
...
...
255
‘A’
‘B’
‘C’











ü      Variáveis - declaração
          Criar uma variável significa reservar uma gaveta na memória do computador atribuindo-lhe um nome e escolher o tipo de dado que esta gaveta armazenará.
Forma:

Var (ou variável)
  <nome da variavel1>, <nome da variavel2>,...<nome da variaveln>: <tipo>
  <nome da variaveln1>, <nome da variaveln2>,...<nome da variavelnn>: <tipo>
.
.
.
Exemplo:

Var
            Nome, Código: Cadeia
            Contador, idade:inteiro

Exercícios Resolvidos
1) Crie nomes para as variáveis e determine os possíveis tipos de dados:
        Cargo do funcionário
        Salário
        Valor do aluguel
        Telefone
        Endereço
        Nome do cantor
        Idade
        RG
        CNPJ
         título do CD

Resposta
Por exemplo
Cargo do funcionário
CFunc ou Cargo_Func...
Cadeia
Salário
Salário....
Real
Valor do aluguel
VAluguel ou Valor_Aluguel...
Real
Telefone
Tel ou fone ou Telefone...
Cadeia ou Inteiro
Endereço
End ou Endereço ...
Cadeia
Nome do cantor
Cantor ou N_Cantor ...
Cadeia
Idade
Idade
Inteiro
RG
RG
Cadeia ou Inteiro
CNPJ
CNPJ
Cadeia ou Inteiro
 título do CD
Titulo ou Tit_Cd ...
Cadeia

2) Assinale os nomes corretos:
dia/mês

CEP
X
Rua
X
B52
X
P{O}

O&O

 AB*C

 ASDRUBAL
X
 UYT
X
 KM/L

 #55

 “ALUNO”

 AH!

 U2
X
 (tê)




Operadores

Operador de atribuição (¬)

O operador de atribuição é utilizado para colocar um valor na variável.
Forma:

<variável> ¬ valor

Por questão de notação podemos utilizar  <-  para expressar o símbolo ¬.

Exemplo:

Var
Nome:Cadeia
Idade:inteiro
Inicio
Nome<-“Aderbal Schmydt”
Idade<-19
Fim

Estudando detalhadamente cada passo do computador

Var  (O computador entende que entrará em processo de reserva de memória)
Nome:Cadeia (reserva o espaço chamado Nome para o tipo String)


Nome








1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
...
255






l















Idade:inteiro(reserva o espaço chamado idade para o tipo Inteiro)


Idade
1
2
3
4





Inicio (inicio do processamento)
Nome<-“Aderbal Schmydt” (o Valor “Aderbal Schmydt” será armazenado no espaço chamado Nome)


Nome








1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
...
255
‘A’
‘d’
‘e’
‘r’
‘b’
‘a’
l

‘S’
‘c’
‘h’
‘m’
‘y’
‘d’
‘t’








Idade<-19 (o Valor 19 será armazenado no espaço chamado idade)


Idade
1
2
3
4
19





Fim (fim do processamento)

Operadores Aritméticos.
Operador
Referência do operador
+
Adição
-
Subtração
*
Multiplicação
/
Divisão
DIV
Quociente
MOD
Resto da divisão
**
Exponenciação

Operadores Relacionais

Operador
Referência do operador
=
Igual
<>
Diferente
>=
Maior ou igual
<=
Menor ou igual
>
Maior
<
Menor

Operadores Lógicos
Operador
Referência do operador
AND
E
OR
OU
NOT
NÃO
XOR
NÃO OU

 Operador  E (AND):
VERDADEIRO
AND
VERDADEIRO
®
VERDADEIRO
VERDADEIRO
AND
FALSO
®
FALSO
FALSO
AND
VERDADEIRO
®
FALSO
FALSO
AND
FALSO
®
FALSO

Operador Ou (OR):
VERDADEIRO
OR
VERDADEIRO
®
VERDADEIRO
VERDADEIRO
OR
FALSO
®
VERDADEIRO
FALSO
OR
VERDADEIRO
®
VERDADEIRO
FALSO
OR
FALSO
®
FALSO

Operador NOT:

NOT VERDADEIRO
®
FALSO
NOT FALSO
®
VERDADEIRO

Operador XOR:
VERDADEIRO
XOR
VERDADEIRO
®
FALSO
VERDADEIRO
XOR
FALSO
®
VERDADEIRO
FALSO
XOR
VERDADEIRO
®
VERDADEIRO
FALSO
XOR
FALSO
®
FALSO

PRIORIDADE NA AVALIAÇÃO DE EXPRESSÕES
Parênteses e funções (resolvidos da esquerda para a direita)
Multiplicação (*), Divisão ( / e div ) e Resto ( Mod )

(resolvidos da esquerda para a direita)
soma e subtração
Operadores relacionais: >, <,<=,>=,=,<> (diferente)

Operador Lógico Não

Operador Lógico E

Operador Lógico Ou


Linearização :
         Fórmula matemática:

         Fórmula aceita pelo computador:
        area=(base*altura)/2

Exercícios Resolvidos
1) Dadas às expressões abaixo mostre os resultados:
a)     3 / 5
R: 0.6
b)     4 DIV 3
R:1
c)      4 MOD 1
R:0
d)     ( 400 DIV 10 ) MOD 4
R:0
e)     7**2 + 5*2
R:59
f)       5 *9+25
R:70
g)     6,5* 5,0 +(3*3)
R:41.5
h)     2/5+2.3
R:2.7
i)        49,0/7+4
R:11
j)        3/6,0-7
R:-6,5

2) Qual o resultado de cada expressão abaixo:

a)     2>3
F
b)     ( 6<8)OR (3>7)
V
c)       ((( 10 DIV 2 ) MOD 6 )> 5)XOR (3<( 2 MOD 2 ))
F
d)      NOT (2<3)
F


3) Sabendo que A=3, B=7 e C=4, informe se as expressões abaixo são verdadeiras ou falsas.
a)     (A+C)>B                    (F)
b)     B>=(A+2)                  (V)
c)      C=(B–A)                    (V)
d)     (B+A)<=C                 (F)
e)     (C+A)>B                    (F)


4) Sabendo que A=5, B=4 e C=3 e D=6, informe se as expressões abaixo são verdadeiras ou falsas.
a)     (A > C) AND (C<=D)                                  (V)
b)     (A+B) > 10 OR (A+B) = (C+D)                  (V)
c)      (A>=C) AND (D>=C)                                  (V)


ü     Estrutura Seqüencial
É um conjunto de instruções / comandos que serão executadas na ordem em que foram escritas, ou seja, esses comandos serão executados numa seqüência linear de cima para baixo. Eles podem aparecer em qualquer estrutura de controle, agrupados ou não por blocos.

comando 1;
comando 2;
início comando 3 ...
meio comando 3 ...
fim comando 3 ; ...
 comando n;


Em termos de fluxogramas, a estrutura sequêncial é caracterizada por um único fluxo de execução (um único caminho orientado) no diagrama. Em pseudocódigos, a estrutura sequencial caracteriza-se por um conjunto de comandos dispostos ordenadamente.
figura 3 - trecho de uma estrutura sequencial


Instrução Primitiva de Saída de Dados

As instruções primitivas de saída de dados são o meio pelo qual informações contidas na memória dos computadores são colocadas nos dispositivos de saída, para que o usuário possa visualizá-las. Há duas sintaxes possíveis para esta instrução:
Sintaxe:

Escreva(<lista_de_variáveis>);
Escreva("Texto");

Muitas literaturas utilizam a instrução escrever ou imprimir ao invés de escreva ambas estarão corretas e ambos podem ser utizadas no curso. O importante  é a compreensão do comando que está sendo utilizado, esta é a grande vantagem de utilizar o português estruturado, ele não fica limitado a uma regra restrita de linguagem de programação.
Escreva (escrever) será considerada uma palavra reservada e não mais poderá ser utilizada como nome de variável, de modo que toda vez que for encontrada em algoritmos será identificada como um comando de saída de dados. Uma <lista_de_variáveis> é um conjunto de nomes de variáveis separados por vírgulas.
Em termos de fluxograma, uma instrução de saída de dados representada como na figura 4.

figura 4-Forma de representação de uma instrução de saída de dados em fluxogramas.


A representação no fluxograma dispensa o uso da palavra reservada Escreva, uma vez que a mesma já está embutida na forma geométrica da figura.  A semântica da instrução primitiva de saída de dados é muito simples: os argumentos do comando são enviados para o dispositivo de saída. No caso de uma lista de variáveis, o conteúdo de cada uma delas é pesquisado na posição de memória correspondente à variável e depois enviado para o dispositivo de saída. No caso de argumentos do tipo string, estes são enviados diretamente ao referido dispositivo.

Exemplo:

O algoritmo abaixo mostra o uso da instrução de saída

Algoritmo Exemplo
Var
PRECO_UNIT, PRECO_TOT: Real;
QUANT: Inteiro;
Início
PRECO UNIT ¬ 5.0
QUANT¬ 10
PRECO TOT ¬ PRECO UNIT*QUANT
Escreva(PRECO_TOT)
Fim






Instrução Primitiva de Entrada de Dados

O algoritmo ddo exemplo anterior ainda necessita de uma melhoria essencial. Toda vez que ele é executado, o mesmo valor é calculado, já que os valores das variáveis PRECO_UNIT e QUANT permanecem inalterados. Seria interessante que estes valores pudessem ser fornecidos ao computador pelo usuário do programa toda vez que o programa fosse executado, para que o usuário tivesse um maior controle sobre o valor calculado. A instrução primitiva de entrada de dados foi criada para suprir esta necessidade.
Sintaxe:

Leia(<lista_de_variáveis>);

Da mesma forma que Escreva, a instrução Leia pode aparecer com Ler  e ela  será tratada como uma palavra reservada e não mais poderá ser usada como nome de variável em algoritmos. A lista de variáveis é um conjunto de um ou mais nomes de variáveis, separados por vírgulas.

figura 5 - Forma de representação de uma instrução de entrada de dados em fluxogramas.


A semântica da instrução de entrada (ou leitura) de dados é, de certa forma, inversa à da instrução de escrita: os dados são fornecidos ao computador por meio de um dispositivo de entrada e armazenados nas posições de memória das variáveis cujos nomes aparecem na <lista_de_variáveis>.

Exemplo:

Algoritmo Exemplo
Var
PRECO_UNIT, PRECO_TOT: Real;
QUANT: Inteiro;
Início
Leia (PRECO UNIT, QUANT)
PRECO TOT ¬ PRECO UNIT*QUANT
Escreva(PRECO_TOT)
Fim

figura 6 - Exemplo representado por fluxograma.


Exemplo:
 Calcule a média aritmética de 3 notas e mostrar o resultado

Pseudocódigo

1
Algoritmo media_notas;
2
variáveis n1,n2,n3,media:Real;
3
Inicio
4
     Escreva “Digite três notas”
5
     Leia n1,n2,n3;
6
     media <- (n1+n2+n3) /3;
7
     Escreva (“A média é igual a: “ , media; )
8
Fim;


Entendendo cada linha:

Linha 1: Indica o cabeçalho do programa

O cabeçalho não é algo obrigatório, você ira encontrar em livros autores que escrevem PROGRAMA no lugar. Portanto, não se preocupe muito com esse detalhe.
Linha 2: Declaração de variáveis.
Linha 3: Inicio do programa. Todo programa tem que ter um inicio e um fim.
Linha 4e 5: Informação para o usuário O computador se comunica com o mundo exterior através da impressora, do vídeo, teclado, fitas, etc. Por exemplo, quando vamos ao banco o terminal nos oferece várias opções, tais como: saque, depósito, extrato, entre outros. Esta é a maneira como o computador se comunica conosco. Para representarmos esta comunicação existem comandos específicos que nos auxiliam neste intuito. Os comandos que iremos utilizar são o IMPRIMA eo LER, respectivamente, comando de Saída de informações e entrada de dados. Abaixo tem-se a representação da saída de dados e a os dados inseridos pelo usuário.
Linha 6: Cálculo da média.
Linha 7: Saída do resultado na tela. Após ter feito todo o processamento necessário para resolver o problema é necessário mostrar para o usuário a resposta de sua ação.
Linha 8: fim

Agora vamos identificar a Entrada, o Processamento ea Saída dentro do pseudocódigo:
1
Algoritmo media_notas;

2
variáveis n1,n2,n3,media:Real;

3
Inicio

4
     Escreva “Digite três notas”
Entrada
5
     Leia n1,n2,n3;
6
     media <- (n1+n2+n3) /3;
Processamentp
7
     Escreva (“A média é igual a: “ , media; )
Saída
8
Fim;



Exercícios Resolvidos:

Exercícios Resolvidos

1) Escreva um algoritmo e faça o fluxograma para calcular o valor de y como função de x, segundo a função y(x) = 3x + 2, num dománio real.

Solução:

Essencialmente o algoritmo usado na solução deste problema consiste na obtenção do valor de x para o qual se deseja calcular a função, o cálculo desta propriamente dito e a mostra do resultado obtido ao usuário. Veja fluxograma correspondente a seguir:

Fluxograma para calculo de uma função.






Para que se possa escrever o pseudocódigo do algoritmo deve-se decidir qual será o tipo das variáveis X e Y. Como especificado no enunciado do problema, o algoritmo deve operar num dománio real e, portanto, as variáveis X e Y devem ser do tipo real. Então, o pseudocódigo fica assim:

Algoritmo F_x
Var X, Y: Real;
Início
Escreva("Algoritmo para calcular y = 3x+2.");
Escreva("X: ");
Leia(X);
Y <- 3*X+2;
Escreva("Y = ", Y);
Fim


2)  Escreva um algoritmo e o fluxograma para calcular o consumo médio de um automóvel (medido em Km/l), dado que são conhecidos a distância total percorrida e o volume de combustível consumido para percorrê-la (medido em litros).
Solução:
A principal questão a ser levantada na obtenção do algoritmo pedido consiste na formulação da expressão usada para calcular o consumo médio (CM) a partir da distância total percorrida (DIST) e do volume de combustível consumido (VOL), que é dada por:
Uma vez obtida esta expressão, a formulação do algoritmo desejado consiste em uma simples repetição daqueles apresentados nas questões anteriores: deve-se obter o valor das variáveis DIST e VOL, calcular o consumo pela expressão acima e, finalmente, mostrar ao usuário o valor calculado. O fluxograma correspondente ao algoritmo é o seguinte:



Assumindo que todas as variáveis utilizadas (CM, DIST e VOL) são do tipo real, pode-se escrever o pseudocódigo seguinte para o fluxograma anterior:

Algoritmo Consumo Medio
Var CM, DIST, VOL: Real;
Início
Escreva("Algoritmo para calcular o consumo.");
Escreva("Distância total percorrida (Km): ");
Leia(DIST);
Escreva("Volume de combustível gasto (L): ");
Leia(VOL);
CM <- DIST/VOL;
Escreva("Consumo mádio =", CM, "Km/l");
Fim

3) Faça um programa que leia o seu nome e o número dias vividos até o seu último aniversário:

Algoritmo dias_vividos
Constante Dias<-365
variáveis nome: caractere;
          dias_viv, idade: inteiro;
Inicio
      Escreva (“Digite seu nome:”)
      Leia nome
      Escreva (“Digite sua idade” )
      Leia (idade)  
      dias_viv<-dias *idade;
      Escreva (nome, “, você tem” , dias_viv , “dias vividos”);
Fim.


4) Peça o salário líquido de um funcionário que trabalhe por hora, as horas de trabalho, número de horas trabalhadas no mês, e o percentual de desconto do INSS. O algoritmo deverá mostrar o salário bruto, o valor descontado e o valor do salário líquido.
Algoritmo salario;
Variáveis
HT, VH,PD,TD,SB,SL: real;
Inicio
Escreva (“Digite o salário : “)
Leia (SL)
Escreva ( “Digite as horas trabalhadas: “)
Leia (HT)
Escreva ( “Digite o valor das horas trabalhadas”)
Leia (VH)
Escreva ( “Digite o porcentual de desconto”)
Leia (PD)
SB <- HT * VH
TD <- (PD/100) * SB; // TD Total de desconto
SL <- SB-TD; //SL Salário liquido
Escreva (“Salário Bruto é: “ , SB)
Escreva (“Total de Descontos: “ , TD)
Escreva (“Salário Liquido: “ , SL)
Fim.

Teste de Mesa

Um algoritmo precisa ser validado utilizando o teste de mesa. Neste teste, você assume o papel do processador e fica responsável por executar cada linha do código. O teste permite que se verifique se o código está realmente executando a função para a qual foi criado, e se existe algum erro de lógica nos passos apresentados.
O teste é de uma época na qual programar um computador era extremamente complicado e cada processamento era muito caro. Processar um código incerto era um desperdício de tempo e, portanto, era necessário ter certeza de que aquele programa funcionaria. Nos testes manuais os programadores faziam simulações de execução e corrigiam erros encontrados antes mesmo de executar o código na máquina real. Essa prática se perdeu com o tempo, com o advento da programação interativa (na qual o programador tem acesso à máquina e pode testar alterações).
A vantagem desse tipo de teste é que ele ajuda a desenvolver o raciocínio lógico do programador, que, depois de um certo tempo de prática, consegue identificar problemas apenas olhando para o código impresso, sem necessitar executá-lo.
A técnica dos humanos, executar um programa escrito para um computador não é uma execução real, mas uma simulação. Nós observamos qual o comportamento das diversas variáveis durante a "simulação" e comparamos o resultado final com aquilo que era esperado. Podemos, ainda, admitir a existência da "saída de dados" do computador, onde anotaremos todos os resultados que seriam exibidos na tela durante a execução real.
Observe o código abaixo. Ele calcula a média entre dois números lidos da entrada do sistema (teclado):
algoritmo "média"
var
  num1, num2, media:media

início:
  escreva("Digite o primeiro número:");
  leia(num1);
  escreva("Digite o segundo número:");
  leia(num2);
  media <- (num1 + num2) / 2;
  escreva("A média deu: ", media);
fim
Neste exemplo simples, trabalhamos com três variáveis e com a saída do sistema. Montamos, então, uma tabela para respresentá-las, criando uma coluna para cada variável, uma para a tela e assumimos alguns valores de entrada: 5 e 9 no exemplo.

-
-
-
-
-
-
-
'Digite o primeiro número:'
5
-
-
-
5
-
-
'Digite o segundo número:'
5
9
-
-
5
9
7
-
5
9
7
'A média deu: 7'

Note que temos uma linha na tabela para cada linha do código. Cada linha da tabela reflete as mudanças ocasionadas pela execução de uma linha do código. Com isso podemos, passo-a-passo, linha-a-linha, simular a execução e a mudança de valor das variáveis.
A lista a seguir é uma lista de sugestões de como proceder ao executar um teste de mesa.
  • Identifique claramente quais variáveis será necessário controlar. Pode haver muitas, sendo que algumas delas podem não ser importantes para o trecho em questão;
  • Verifique as condições de término de loops (veremos mais tarde), pois estes podem ser encerrados quando a condição principal é alcançada, mas também podem existir comandos que forcem o encerramento;
  • Preste atenção em possíveis chamadas de funções que existam em loops, pois estas podem alterar valores das variáveis de uma maneira que à primeira vista não é clara;
  • Ainda com relação a chamadas de funções (veremos mais tarde), verifique a existência de chamadas aninhadas e também de recursão, pois estes dois fatores podem obscurecer ainda mais o teste;
  • No mais, siga os exemplos dados: monte tabelas para organizar as variáveis, "execute" uma linha por vez e tenha certeza dos resultados da linha avaliada.
São apenas sugestões, não regras. Cada programador acaba criando sua própria maneira de executar o teste, de modo que isso é considerado algo bem pessoal.
Veja um exemplo de teste de mesa no seguinte site: http://www.brasilacademico.com/ed/testemesa.htm