Você está na página 1de 41

Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

MANUAL DE ALGORITMOS E ESTRUTURAS DE DADOS

1. Dos problemas aos programas – os algoritmos


1.1 Fases de um algoritmo
1.2 Estrutura de algoritmos
Fluxogramas
Pseudocódigo
1.3 Codificação e depuração
2. Elementos e estruturas fundamentais de programação
2.1 Dados
2.2 Instruções básicas
Instruções de escrita ou de output
Instruções de leitura ou de input
Instruções de atribuição
2.3 Expressões
2.4 Estruturas de controlo
2.4.1 Estrutura de decisão condicional – “SE” / “IF”
2.4.2 Estrutura de decisão condicional – “CASO” / “CASE”
2.4.3 Estrutura de decisão condicional – “PARA” / “FOR”
2.4.4 Estruturas de repetição baseadas numa condição – “ENQUANTO”
/ “WHILE” e “REPETE” / “REPEAT”
2.5 Subprogramas
2.6 Tracing ou trançagem
3. Estruturas de dados
3.1 Dados simples ou não estruturados
3.2 Quadros ou Arrays

PA 1 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

MANUAL DE ALGORITMOS E ESTRUTURAS DE DADOS

1. Dos problemas aos programas – os algoritmos

A elaboração de um programa, como qualquer trabalho que possa ser feito


segundo uma organização racional, pode ser analisada, genericamente, segundo
determinados passos ou etapas.
Considere o esquema da figura seguinte como base para abordagem desta
questão.

PA 2 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Análise da situação/problema

Formulação de um algoritmo
(diagramas/fluxogramas/pseudocódigo)

Tradução de um algoritmo numa linguagem


de programação ou escrita do programa-fonte

Revisão do algoritmo
Revisão do texto
Tradução (compilação/interpretação) do programa-fonte
para código máquina e verificação dos erros de escrita

Detecçã sim
o de
erros de

não

Testes de verificação lógica do programa

Detecçã sim
o de
erros de

não

Programa terminado

Normalmente, um programa surge como uma solução possível para um


problema, como um recurso produzido com a finalidade de dar resposta a uma
determinada situação. A descrição dos passos a dar no sentido da resolução da
situação/problema constitui a fase de formulação do algoritmo.
PA 3 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Sendo assim, podemos definir um algoritmo como uma sequência de


instruções, passos, ações ou operações ordenadas de forma lógica para a
resolução de uma determinada tarefa ou problema.

Em informática, a formulação de um algoritmo não é mais do que uma


descrição, de forma ordenada, clara e precisa, dos passos que se pretende realizar
em computador por forma a resolver um problema ou atingir determinados
objectivos.

Vamos tomar como exemplo o seguinte algoritmo para eventualmente ser


resolvido pelo computador.

Problema:

Sendo dado o preço de um apartamento, e sabendo ele que tem uma área de
120 metros quadrados; pretende-se saber se o preço por metro quadrado está a
cima ou abaixo da média dos preços praticados para aquele local, sendo dado
também esse preço médio.

Formulação do algoritmo:

1.º É necessário saber:


• o preço do apartamento
• o preço médio por metro quadrado

2.º Calcular o preço por metro quadrado do apartamento


• preço por m 2 = preço do apartamento/área

PA 4 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

3.º Comparar o preço por metro quadrado do apartamento com o


preço médio por metro quadrado praticado no local e temos o
problema resolvido:

se
preço por m 2 > preço médio
então
preço acima da média
se
preço por m 2 < preço médio
então
preço abaixo da média

1.1 Fases de um algoritmo

Quando temos um problema e vamos utilizar um computador para o


resolver, temos que passar pelas seguintes etapas:

a) Definir o problema.
b) Realizar um estudo da situação actual e verificar quais a(s) forma(s) de
resolver o problema.
c) Terminada a fase de estudo, utilizar uma linguagem de programação para
escrever o programa que deverá a princípio, resolver o problema.
d) Analisar junto dos utilizadores se o problema foi resolvido. Se a solução
não foi encontrada, deverá ser retornado para a fase de estudo para
descobrir onde está a falha.

Estas são de forma bem geral, as etapas que um analista passa, desde a
apresentação do problema até a sua efectiva solução.

PA 5 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

1.2 Estrutura de Algoritmos

Antes de se utilizar uma linguagem de computador, é necessário organizar


as acções a serem tomadas pela máquina de forma metódica e lógica. Para isto
utiliza-se uma forma de escrever essas acções, conhecida como algoritmo, ou
pseudo-código.

Resumindo: Algoritmo consiste num conjunto lógico e finito de acções (


instruções ) que resolvem um determinado problema.

Os algoritmos deverão ter a seguinte estrutura:

ALGORITMO <Nome do algoritmo>


<definições>
INÍCIO
<Comandos>
FIM

Formas de apresentação dos algoritmos para computador

Um algoritmo para um programa de computador pode ser representado por


meio de diagramas ou fluxogramas, ou então numa linguagem convencional,
utilizando termos da nossa linguagem tradicional que representam acções
específicas das linguagens de programação, a que podemos chamar de
pseudocódigo.

PA 6 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Fluxogramas

Símbolos Significado Exemplos

Processamento em
XX+1
geral

Leitura/Escrita de
Escreve
dados X

Inicio/Fim de
processamento Inicio

Linha de fluxo

Conector de fluxo

Decisão condicional
n>5

Escolha múltipla 1 4
Caso x
2 3

Subprograma
Rotina x

PA 7 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Os fluxogramas são diagramas representativos do fluxo das acções de um


programa através de símbolos, que representam os diferentes tipos das acções e
o seu encadeamento na sequência do programa.

Actualmente os fluxogramas não são muito utilizados. Eles têm mais interesse
do ponto de vista didáctico do que propriamente do ponto de vista da programação.
Os fluxogramas são úteis, pois podem ajudar a visualizar melhor algumas
estruturas da programação, mas para representar programas de média ou longa
extensão tornam-se difíceis de concretizar, pois podem exigir muito espaço, para
além do tamanho habitual de uma folha de papel, o que os torna de difícil leitura e
manuseamento.

Para ilustrar um fluxograma vamos ver o seguinte exemplo:

PA 8 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Inicio

Ler Valor 1

Ler Valor 2

Valor 1 > Valor 2

Escrever Valor Escrever Valor


1 é Maior 2 é Maior

Fim

Pseudocódigo

Por pseudocódigo entende-se um código de escrita em que se utilizam termos


convencionais para indicar as instruções do programa; esses termos são,
normalmente, uma mistura de palavras da nossa linguagem natural com palavras
típicas das linguagens de programação.

O pseudocódigo tem-se revelado mais prático e vantajoso na estruturação do


raciocínio e dos elementos (acções, dados) a incluir num programa.

PA 9 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Início
Escrever (“Introduza dois valores”)
Ler (valor 1)
Ler (valor 2)
Se valor 1 > valor2 então
Escrever (valor 1, “é maior”)
Senão
Escrever (valor 2, “é maior”)
Fim se
Fim

A utilização de pseudocódigo tem a vantagem de podermos utilizar um texto


escrito dessa forma como base de trabalho para a escrita de um programa, não
apenas numa determinada linguagem de programação, mas em qualquer outra,
sem ter de se elaborar um novo algoritmo.

Outra vantagem deste tipo de escrita é que esta forma de abordagem se


presta a uma aproximação sucessiva à versão final do programa, ou seja, pode-se
ir progredindo por fases, revendo a escrita e substituindo-a progressivamente por
termos e sinais próprios da linguagem de programação.

1.3 Codificação e depuração

Depois de formular o algoritmo, é necessário transcrevê-lo para a linguagem


de programação que se pretende utilizar. A esta operação chama-se codificação
ou escrita do código-fonte.
Após o programa estar pronto, para que ele seja compreensível pelo
computador é necessário utilizar um software de tradução (compilador ou
interpretador) que irá converter o código-fonte em código-máquina.
Para além disso, antes de o programa estar concluído é necessário fazer
testes de verificação para detectar possíveis erros.
Esses erros podem ser de dois tipos:

PA 10 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

- Erros de escrita que consiste em verificar se o programa está escrito de


acordo com as normas impostas pela linguagem e se houver erros o compilador
ou interpretador não os deixará passar, sendo necessária a revisão do texto para
rectificação desses mesmos erros.
- Erros de lógica ou de falha com os objectivos que se pretendem alcançar
que são erros que não são detectáveis pelo compilador, mas que influenciam o
resultado e objectivo final do programa.
O mais aconselhável é que os programas sejam testados por diversos
utilizadores, por forma a que todas as soluções possíveis sejam experimentadas
para serem detectados todos os possíveis erros.
A esta fase da correcção dos erros, tanto no que diz respeito às normas
impostas pela linguagem, quer devido a erros de concepção lógica, costuma-se
designar ou depuração ou “debugging” (“bug” significa defeito ou falha e “debug”
significa detecção e correcção de defeitos).

Situação/problema Programa terminado

Formulação de um
algoritmo como
solução do problema Verificação e
depuração do
Diagramas programa Programa em
Fluxogramas código máquina
Pseudocódigo

Escrita de um programa - tradução


Tradução do programa-fonte
de um algoritmo em linguagem de
em código-máquina
programação

Compiladores
Linguagens de programação
Interpretadores

PA 11 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

2. Elementos e estruturas fundamentais de programação

A base de um programa subdivide-se na estruturação das acções e na


estruturação dos dados.
A escolha dos diferentes tipos de estruturas é o problema fundamental da
programação estruturada. Da sua escolha depende a eficácia do programa.
Sendo assim um programa tem de ter em conta os seguintes factores:
A sintaxe de uma linguagem define determinados constructos, de entre os
quais os mais importantes são as expressões e os comandos.
Uma expressão é uma regra ou uma fórmula que especifica um valor ou um
resultado e que se divide em operandos e operadores.
Os operandos são constantes, variáveis ou valores gerados por funções.
Os operadores operam sobre os operandos.
Finalmente temos os comandos que não são mais do que fórmulas que
especificam uma acção que o computador deve executar para produzir um certo
efeito.

Poderemos então considerar os seguintes elementos e estruturas


fundamentais:
- dados;
- instruções básicas;
- expressões;
- estruturas de controlo;
- subprogramas.

2.1 Dados

PA 12 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Constantes, variáveis e identificadores

Qualquer programa opera com dados, que por sua vez podem ser utilizados
num programa sobre a forma de constantes ou variáveis:
- Constantes – são valores que se mantêm inalterados dentro de um
programa
- Variáveis – são entidades que podem assumir diferentes valores ao longo
da execução do programa.

Em programação, as constantes podem ser escritas sobre a forma de dados


directos ou ser associadas a identificadores. As variáveis, por sua vez, são
sempre associadas a identificadores.
Identificadores são nomes que se atribuem a variáveis, constantes ou outros
elementos com que se opera dentro de um programa.

2.2 Instruções básicas

Um programa consiste num conjunto ou numa série de instruções escritas


numa determinada linguagem e numa determinada ordem.
As instruções são frases que indicam as acções ou operações que se
pretendem realizar.
Às instruções elementares de uma linguagem de programação costuma-se
chamar comandos.

As instruções podem-se dividir em:


- Instruções básicas;
- Instruções estruturadas;

Em relação às instruções básicas (as mais usuais e necessárias em qualquer


linguagem) podemos identificar as seguintes:
PA 13 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

- Instruções de escrita ou de output;


- Instruções de leitura ou de input;
- Instruções de atribuição.

Instruções de escrita ou de output

Estas instruções servem para enviar dados (mensagens, valores de


variáveis, etc.) para um dispositivo de saída ou output (monitor, impressora, etc.).
Em linguagens de programação estas instruções costumam ser
desempenhadas por comandos como Write ou Print.

No que diz respeito aos algoritmos podemos escrever em português –


Escreve (...).
Em princípio uma instrução de escrita deve também conter algum ou alguns
dados.

Vamos considerar por exemplo as seguintes instruções de escrita:


Escreve(400)
Escreve(‘O meu nome é Joaquim’)
Escreve(quantidade)
Escreve(‘O valor a pagar é ‘, montante)

Instruções de leitura ou de input

Este tipo de instruções serve para introduzir ou ler dados provenientes de


um dispositivo de entrada ou input (teclado, scanner, discos rígidos, disquetes,
etc).

PA 14 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Em linguagens de programação estas instruções costumam ser


desempenhadas por comandos como Read ou Input.

Em relação aos algoritmos este tipo de instruções é identificado por – Lê(...).

Vamos considerar por exemplo as seguintes instruções de leitura:


Lê (quantia)
Lê (nome, morada, telefone)
Lê (salário)

Instruções de atribuição

As variáveis podem ao longo do programa sofrer alterações através de dois


tipos.
O primeiro como já foi referido no ponto acima é através de instruções de
leitura.
Ao outro tipo de instruções que permite a alteração de das variáveis
chamamos instruções de atribuição.
Enquanto que numa instrução de leitura a variável sofre uma alteração
proveniente de uma entrada externa, numa instrução de atribuição, a variável a
que é feita a operação de atribuição recebe um valor através de uma operação
interna do programa (através de um processamento).

Em linguagens de programação estas instruções costumam ser


desempenhadas simplesmente pelo sinal = ou =:. Por ex: (nome=’Joaquim’,
quantia:=1000)

Nos algoritmos é comum usar-se como sinal de atribuição.

nome  ’Silva’
quantia  1000

PA 15 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

ba

2.3 Expressões

A operação fundamental que se espera de um programa é a realização de


operações com dados.
Para que se efectuem estas operações com os dados têm de ser dadas as
instruções adequadas.
Assim sendo, uma expressão é um conjunto de operandos, articulados entre
si por operadores.

Os operandos como vimos podem ser: ‘O valor a pagar é’, 400, quantia, etc.

Os operadores podem-se dividir em:

a) Operadores aritméticos:
+ Adição 5+6
- Subtracção a-b
* Multiplicação 2*a
/ divisão b/2

b) Operadores de comparação ou relacionais:


= Igual a=b
< Menor b< 5
<= Menor ou igual c<h
> Maior a>b
>= Maior ou igual b >= c
<> Diferente d <> 7

PA 16 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

c) Operadores lógicos ou booleanos


Not Não (negação) Not a
And E lógico a and b
Or Ou lógico c or d
etc.

Neste ponto poderemos ainda ver a seguinte tabela:


A B A E B A OU B NÃO (A)
V V V V F
V F F V F
F V F V V
F F F F V

As expressões podem ser basicamente de dois tipos:

• numéricas
• booleanas

As expressões numéricas utilizam apenas operadores aritméticos, utilizando


operandos também numéricos (inteiros ou reais) e podendo ter dados directos ou
identificadores (constantes ou variáveis), como por exemplo
500/(100+12)
base*altura
base*altura/2

As expressões booleanas utilizam-se quando queremos utilizar operadores


de comparação e/ou lógicos e onde se espera obter um resultado lógico. Este tipo
de resultado só pode ter duas opções possíveis:
• true (verdadeiro)
• false (falso)
PA 17 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Este tipo de expressão é utilizado principalmente em estruturas de decisão


condicional ou em ciclos de repetição (que vão ser explicados mais à frente).

2.4 Estruturas de controlo

Sequências de instruções

Um programa como já vimos consiste num conjunto de instruções a ser


executado segundo uma determinada sequência.
Uma sequência de instruções pode-se considerar simples, quando as
instruções são executadas exactamente pela ordem com que aparecem escritas
no programa.

Consideremos o seguinte exemplo:

Instrução 1: Escreve (‘Soma de dois números’)


Instrução 2: Lê (‘numero1’)
Instrução 3: Lê (‘numero2’)
Instrução 4: Soma  numero1 + numero2
Instrução 5: Escreve (‘A soma é:’ soma)

Contudo, grande parte dos programas não se limita a efectuar coisas tão
simples.
É então necessário alterar a sequência normal da execução das instruções.
Surgem assim as chamadas instruções de controlo.

Instruções de “salto”

PA 18 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Uma das possibilidades de alterar a sequência de instruções num programa


consiste em dar uma instrução que remeta a continuidade do programa noutro
ponto do mesmo.
Uma dessas designações é “GOTO” (vai para).

Consideremos o seguinte exemplo:

Instrução 1: Lê (´numero1’)
Instrução 2: Se numero1>100 vai para (goto) instrução 1
Instrução 3: Lê (‘numero2’)

A sequência de instruções é afectada na instrução 2 por uma instrução


(comando) de salto; ou seja, se se verificar a condição numero1>20, o programa
salta para a instrução indicada (instrução 1).
No entanto desde que se começou a usar a programação estruturada, este
recurso passou a ser muito pouco utilizado, porque o programa acaba por não ter
uma boa estrutura, não ter uma boa legibilidade, acabando por isso por ser de
muito difícil manuseamento para alterações.

Um outro tipo de instrução de salto utilizado nomeadamente em BASIC é o


“GOSUB”. Este tipo de instruções remete a sequência de execução para um bloco
de instruções (ou rotina) situado num outro ponto do programa. Uma vez
concluído esse bloco ou rotina, a sequência do programa é retomada no ponto
onde tinha ocorrido o salto”.

Consideremos o seguinte exemplo:

Instrução 1: Escreve (‘Soma de dois números’)


Instrução 2: Lê (‘numero1’)
Instrução 3: GOSUB 50 (vai à rotina na instrução 50)

PA 19 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Instrução 4: Lê (‘numero1’)
.......
Instrução 50: escreve numero1
Instrução 50: total  numero1 * 20
.........
Instrução 60: RETURN (retorna)

Neste caso, a instrução 3 envia a execução para a instrução 50, onde o


programa prossegue até encontrar uma instrução RETURN (neste caso instrução
60), que obriga o programa a retornar ao ponto onde tinha sido chamada a rotina,
para depois prosseguir daí.
Na programação estruturada este recurso também caiu em desuso, surgindo
em seu lugar os subprogramas, que contêm um identificador (nome).

Controlo de sequências por meio de estruturas de controlo

Na estruturação de um programa é frequentemente necessário utilizar


determinadas condições que vão decidir se se deve:
• executar determinada acção ou não
• repetir um conjunto de instruções uma ou mais vezes
• passar a tratar determinado tipo de conjuntos de instruções que se
repetem por diversas partes do programa como um subprograma.
Surgem assim determinadas estruturas típicas de programação, das quais
as mais usuais são:
- estruturas de decisão;
- estruturas de repetição (ciclos);
- rotinas ou subprogramas.

As estruturas de controlo das sequências de um programa podem classificar-


se de acordo com a figura seguinte:

PA 20 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Com base numa


condição
Estruturas de
decisão ou
selecção
Com base num
selector ou de
escolha múltipla

Estruturas de
controlo

Com contador
(desde um valor
inicial até um
valor final)
Estruturas de
repetição ou
ciclos Enquanto se
verifica a
condição
Com base numa
condição
Até que se
verifique a
condição

2.4.1 Estrutura de decisão condicional – “Se” / ”IF”

Este tipo de estrutura permite decidir entre executar ou não determinada


acção ou conjunto de acções ou ainda decidir de entre duas alternativas possíveis,
com base numa condição ou expressão booleana (true ou false).

A forma mais prática de escrever esta estrutura é:

SE <condição> ENTÃO <instrução/ões> [SENÃO <instrução/ões>]

Em que:

-SE <condição> - inicia a estrutura de decisão, podendo apenas assumir um


valor lógico “verdadeiro” ou “falso”;

PA 21 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

-ENTÃO <instrução/ões> - indica uma determinada acção ou conjunto de


acções a efectuar se a condição se verificar, ou seja, assumir o valor verdadeiro;

-[SENÃO <instrução/ões>] – indica a acção ou conjunto de acções a realizar


no caso de a condição não se verificar, ou seja, assumir o valor de falso. Esta é
uma cláusula opcional, como indicam os parêntesis rectos.

Condição
Não Senão

Sim

Instrução/ões Instrução/ões

Exemplo:

PA 22 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

A seguir vamos mostrar dois exemplos de aplicação desta condição. No


primeiro a cláusula “SENÃO” não aparece enquanto que no segundo a estrutura
aparece completa.

Lê (nota) Lê (nota)

nota>=10 nota>=10 Não

Não
Sim Sim

Escreve Escreve Escreve


('Aprovado') ('Aprovado') ('Reprovado')

Lê (nota) Lê (nota)
Se nota >=10 então Se nota >=10 então
Escreve (‘Aprovado´) Escreve (‘Aprovado´)
Fim se Senão
Escreve (‘Reprovado´)
Fim se

2.4.2 Estrutura de decisão condicional – “CASO” / ”CASE”


PA 23 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Já sabemos que a estrutura “IF” é dos recursos mais utilizados e


generalizados na programação, no entanto, em algumas situação pode não ser a
melhor estrutura a utilizar como por exemplo quando temos múltiplas alternativas.

Vamos considerar o seguinte exemplo que consiste num menu de opções:

1- Adição
2- Subtracção
3- Multiplicação
4- Divisão

Pretende-se que o utilizador escolha uma de entre as quatro opções


existentes mediante a entrada dos valores 1, 2, 3 e 4.

É perfeitamente possível utilizar uma estrutura de decisão condicional “IF”


Por exemplo:

Se opção=1 então faz adição;


Se opção=2 então faz subtracção;
Se opção=1 então faz multiplicação;
Se opção=1 então faz divisão;

No entanto, em muitos casos existe uma alternativa, pelo menos em muitas


linguagens de programação – a estrutura de decisão condicional “CASE”.
Esta estrutura pode-se revelar uma estrutura de leitura mais fácil ou clara e é
também menos “pesada” para a execução do programa.

Neste caso a estrutura “IF” poderia ser substituída pela estrutura “CASE”,
sendo assim representada.

PA 24 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

CASO opção
1: faz adição;
2: faz subtracção;
3: faz multiplicação;
4: faz divisão;
Fim CASO

Numa estrutura CASE há uma variável, que pode assumir os valores usados
no controlo das alternativas ou acções a escolher – a esta variável é costume
chamar-se selector.

O esquema mais usual de apresentação desta estrutura é apresentada a


seguir, no entanto pode variar de linguagem para linguagem:

Caso X

(...)
Instrução/ões Instrução/ões Instrução/ões Instrução/ões

CASO <variável/selector>
<valor 1> faz <instrução 1>
<valor 2> faz <instrução 2>
...
PA 25 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

<valor n> faz <instrução n>


[SENÃO faz <instrução x>]
Fim CASO

Quando se indica <valor1>, <valor 2>, etc., indicamos os valores possíveis


que a variável de controlo pode assumir, que pode ser apenas um valor ou um
conjunto de valores.

Da mesma forma quando se indica <instrução 1>, <instrução 2>, etc., pode-
se tratar de uma só acção ou de um conjunto de acções.

Nesta estrutura também pode existir uma cláusula “ELSE”, que se destina a
indicar que caso o selector não assuma nenhum valor indicado nos explicitados,
então deve ser executada a acção ou o conjunto de acções aí indicada.

2.4.3 Estrutura de repetição - “PARA” / ”FOR”

Uma estrutura de repetição com contador é controlada por uma variável –


variável de controlo – que começando num determinado valor vai até um outro
valor, sendo essa variável incrementada.

PA 26 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Este ciclo é normalmente designado por ciclo “FOR” e pode ser enunciada da
seguinte forma:

Variável > x

Instrução/ões

Para <variável/contador> desde <valor inicial> até <valor final> faz


<instrução/ões>

O contador parte de um valor inicial e é acrescentado ou diminuído


(incrementado ou decrementado), até um valor final. A diferença entre estes dois
valores vai determinar o número de vezes que a instrução ou instruções irão ser
repetidas pelo ciclo.

Em algumas linguagens de programação existe a hipótese de especificar um


valor para o incremento ou decremento do contador – é o chamado passo ou step.

Vejamos os seguintes exemplos:


Inicio
numero=1
para contador =0 até 6 faz
multiplo  numero * contador

PA 27 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

escreve (multiplo)
fim para
fim

ou então

Inicio
numero=1
para contador =0 até 6 passo 2 faz
multiplo  numero * contador
escreve (multiplo)
fim para
fim

No primeiro caso à variável número é atribuído o valor 1. Na estrutura o


contador começa em 0 e vai ser incrementada (quando não tem o passo é
incrementada uma unidade de cada vez até atingir o valor 6. As instruções
englobadas neste ciclo vão ser executadas de 0 a 6, portanto 7 vezes.

O segundo caso é idêntico só que o contador é incrementado em duas


unidades (passo 2), sendo as instruções englobadas neste ciclo executadas
igualmente de 0 a 6 mas apenas 4 vezes.

2.4.4 Estruturas de repetição baseadas numa condição - “ENQUANTO” /


”WHILE” e “REPETE” / “REPEAT”

As estruturas ou ciclos de repetição que são controlados por uma condição


podem ser de dois tipos:

PA 28 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Estrutura “ENQUANTO” em que a condição de controlo é averiguada no


início do ciclo, mesmo antes de começar a executar qualquer instrução englobada
no ciclo. Neste tipo de estrutura o ciclo pode nunca ser executado uma vez que a
condição pode ser false logo no início.

Estrutura “REPETE” em que a condição de controlo só é averiguada no final


da execução das instruções abrangidas pelo ciclo e sendo assim as instruções que
estão no ciclo são pelo menos uma vez executadas.

Estes dois tipos de estruturas são perfeitamente compatíveis sendo a


estrutura “ENQUANTO” mais utilizada do que a estrutura “REPETE”.

PA 29 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Vejamos exemplos destas duas estruturas:

Instrução/ões

Condição

Não Não
Sim

Condição
Instrução/ões

Sim

Diagrama do ciclo “ENQUANTO” Diagrama do ciclo “REPETE”

Em pseudo-linguagem podemos representar a estrutura “ENQUANTO” da


seguinte forma:
Enquanto <condição> faz <instrução/ões>

A estrutura “REPETE” pode ser representada da seguinte forma:

Repete <instrução/ões> até <condição>

É preciso ter em atenção que se a condição nunca se tornar verdadeira, a


estrutura entra num “ciclo infinito”, o que quer dizer que o programa irá

PA 30 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

permanecer sempre dentro da estrutura, apenas terminando com a interrupção


forçada do programa como por exemplo desligando o computador.

Vejamos um exemplo de aplicação da instrução “Enquanto”

Início
n0
Enquanto n<10 faz
n  n +1
quadrado  n * n
Escreve (quadrado)
Fim enquanto
Fim

PA 31 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

n=0

n<10

Sim

Não
n =n +1

quadrado = n * n

Escreve
quadrado

a) Antes de entrar no ciclo é atribuído o valor 1 à variável “n”;


b) Ao entrar na estrutura de ciclo “ENQUANTO”, a condição é imediatamente
avaliada, sendo portando executadas as acções do ciclo somente se o valor “n” for
menor que 10: neste caso o valor de “n” é 0 e portanto a condição verifica-se;
c) Dentro do ciclo é executada a primeira instrução “n  n + 1“ que faz
incrementar a variável “n” numa unidade desempenhando assim esta instrução a
função de contador.
Vamos ver agora um exemplo de aplicação da instrução “Repete”

PA 32 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Repete
Lê (n)
Dobro  n * 2
Escreve (‘o dobro de ‘,n,’é’,dobro)
Lê (n) Até dobro=0

dobro = n * 2

Escreve ('O dobro de ',


n , 'é ',dobro) Não

dobro = 0

Sim

Neste caso as instruções serão executadas pelo menos uma vez.


É pedida a introdução de um número e calculado o seu dobro através da
instrução de atribuição “dobro  n * 2”
O ciclo continua até que se verifique a condição “dobro = 0”, que irá acontecer
como é obvio quando for introduzido o número 0.

2.5 Subprogramas

Como já foi referenciado anteriormente, um subprograma ou sub-rotina como


por vezes também é chamado, é uma parte de um programa que contém um
conjunto de instruções, que usualmente é escrito num local diferente da sequência
PA 33 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

normal do programa e que depois pode ser chamado em um ou em vários pontos


do programa.

É um processo bastante útil nos casos em que temos um determinado


conjunto de acções que se repete várias vezes durante a execução de um
programa.
Assim, podemos pegar nesse conjunto e fazer um subprograma que depois é
chamado quando for necessário.
Este é um recurso bastante utilizado no desenvolvimento de programas ao
estilo da abordagem “Top-Down” ou concepção descendente, pois podemos
começar pela estrutura do programa principal, onde se indicam em apenas
algumas linhas a estrutura principal do programa e os subprogramas que são
necessários desenvolver seguidamente.
Os elementos de um subprograma são constituídos por um nome, uma lista
de parâmetros, um corpo e um ambiente.

Vejamos um exemplo:

Subprograma introduzirdados
Início (do subprograma)
Escreve(‘Introduza o primeiro valor’)
Lê (numero1)
Escreve(‘Introduza o segundo valor’)
Lê (numero2)
Fim (do subprograma)

Subprograma cálculo
Início (do subprograma)
Soma  numero1 + numero2
Escreve (‘A soma dos dois números é:’, soma)
Multiplicação  numero1 * numero2

PA 34 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Escreve (‘A multiplicação dos dois números é:’, soma)

Fim (do subprograma)

Inicio (do programa principal)


Repete
Introduzirdados
Calculo
Até numero1=0
Fim (do programa principal)

Tracing ou traçagem

A traçagem é a forma de acompanhar passo por passo e execução de um


programa ou uma parte dele.
Quando queremos ver se um algoritmo está de acordo com os objectivos
finais que pretendemos dele, poderemos efectuar uma traçagem para verificar se
esses objectivos são cumpridos ou se é necessário efectuar alguma alteração.

Vamos considerar o exemplo dado na estrutura de repetição com contador


“FOR”:

Inicio
numero=1
para contador =0 até 6 faz
multiplo  numero * contador
escreve (multiplo)
fim para
fim

Execução do ciclo Contador Expressão Resultado de

PA 35 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

contador Numero*contador Numero*contador


1ª Passagem 0 1*0 0
2ª Passagem 1 1*1 1
3ª Passagem 2 1*2 2
4ª Passagem 3 1*3 3
5ª Passagem 4 1*4 4
6ª Passagem 5 1*5 5
7ª Passagem 6 1*6 6

Ou então,
contador numero multiplo
0 1 0
1 1 1
2 1 2
3 1 3
4 1 4
5 1 5
6 1 6

PA 36 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

3. Estruturas de dados

3.1 Dados simples ou não estruturados

Até agora só foram abordados dados de tipo “simples”, ou seja, dados em


que a variável opera apenas com o determinado valor de cada vez.
No entanto, é possível agrupar um conjunto de dados numa mesma variável
e quando se procede assim, estamos na presença de dados estruturados.

Os dados simples subdividem-se em ordinais e reais. Os ordinais


correspondem a conjuntos de elementos enumeráveis e ordenáveis, isto é,
podemos estabelecer uma correspondência entre os elementos de um tipo ordinal
e a sucessão dos inteiros: 0, 1, 2, 3, 4, ..., etc, enquanto que os reais comportam
números com casas decimais.

Na programação existem três grupos principais de ordinais:


- inteiros;
- caracteres;
- booleanos.

Inteiros
PA 37 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Este tipo numérico é um subconjunto dos números inteiros. O conjunto dos


inteiros é, como se sabe, um conjunto infinito. No entanto, em computação os
dados ocupam espaço, por isso, não se pode trabalhar com conjuntos infinitos.
Assim, o número de elementos de um conjunto de inteiros com que se trabalha em
programação depende do número de bytes com que esse tipo de dados é definido.

Para representar um conjunto de inteiros utiliza-se dois bytes (ou 16 bits),


tendo assim 216 elementos, ou seja 65536. Se dividirmos este número em duas
partes, uma de positivos e outra de negativos e considerando que o zero também
existe teremos um conjunto de inteiros que varia no intervalo [-32768, +32767].
Isto pode levantar outro problema, que é o de este conjunto de números não
ser o suficiente em certas operações. Sendo assim, as linguagens de programação
implementaram vários conjuntos de inteiros, alguns de maiores dimensões e outros
com menor número de elementos. Por exemplo:
- utilizando 1 byte (8 bits) para definir um conjunto de inteiros, temos 2 8
elementos ou seja 256 (“Shortint”)
- utilizando 4 bytes (32 bits), temos um conjunto de inteiros com 2 32 elementos
(“Longint”)

Caracteres

Em programação o conjunto de caracteres disponíveis são os que fazem parte


da tabela ASCII (“American Standard Code for Information Interchange”), que foi
criada para funcionar como um padrão para a utilização em diferentes tipos de
computadores.
A tabela ASCII tem 256 elementos, que estão ordenados de 0 a 255.

PA 38 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Quando se utiliza uma variável do tipo caracter (individual), esse variável


pode ser decomposta e assumir de cada vez apenas um determinado elemento da
tabela ASCII.
Sendo assim, para facilitar a leitura e escrita de palavras usadas nos
programas, foi criado um outro tipo de variável a que se designou “string” e que
não é mais do que um conjunto de caracteres.

Booleanos

Os dados do tipo “booleano” apenas podem assumir dois valores possíveis:


verdadeiro e falso (“true” e “falso”).
Este tipo de dados, serve fundamentalmente para controlar estruturas de
decisão ou de repetição como já vimos anteriormente.

Tipo real
Por fim temos ainda os dados de tipo real que são números que podem ter
partes decimais.
Os números reais formam também, matematicamente falando, um conjunto
infinito de números e por isso, tal como nos inteiros estes dados também ocupam
espaço, dependendo assim a sua dimensão do número de bytes empregues.

3.2 Quadros ou Arrays – Vectores ou Matrizes

Um array é um tipo estruturados que pode agrupar numa mesma variável um


conjunto de valores do mesmo tipo.
PA 39 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

Uma variável deste tipo é designada por um identificador que neste caso é
igual para todos os elementos do conjunto.
Apesar de um array ter um só identificador para todos os elemtos que agrupa,
cada elemento desse agrupamento tem um ou mais índices associados, sendo
esses índices que permitem identificar cada elemento individual no conjunto
representado pelo array.

Existem arrays unidimensionais (vectores) e arrays multidimensionais


(matrizes).

Um array unidimensional (vector) é um conjunto de elementos


representados por um identificador e um índice variando este último entre um limite
inferior e um limite superior, em correspondência com o número de elementos do
conjunto.

Um exemplo deste tipo de array podem ser os doze meses de um ano.

A[1,2] A[1,3] A[1,4]


250 142 785

A[2,1]
232

A[3,1]
895

A[4,1] Representação de um array unidimensional. A sua


representação pode ser veita na horizontal ou na
582
vertical

Em vez de definirmos 12 variáveis , designadas por 12 identificadores


diferentes como por exemplo (Jan, Fev, Mar, etc), podemos definir um array com

PA 40 Paulo Campelo
Programação - Algoritmos

INSTITUTO DO EMPREGO E FORMAÇÃO PROFISSIONAL


CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE VILA REAL

um único identificador (por ex.: meses) em que cada ano era representado por um
índice (meses[1], meses[2], meses[3], etc.)

Os arrays multimensionais podem ser facilmente representados como uma


tabela ou quadro de duas entradas em que se atribui um índice às colunas e outro
índice às linhas.

Para exemplificar este tipo de array, basta imaginarmos um armário de forma


rectangular com x linhas de gavetas na horizontal e y colunas na vertical, contendo
cada uma dessas gavetas uma certa quantia em dinheiro, como está representado
na matriz seguinte.

A[1,1] A[1,2] A[1,3] A[1,4]


500 250 142 785

A[2,1] A[2,2] A[2,3] A[2,4]


232 653 412 456

A[3,1] A[3,2] A[3,3] A[3,4]


895 756 745 765

A[4,1] A[4,2] A[4,3] A[4,4]


582 741 895 772

Se quisermos referir-nos a uma determinada gaveta, podemos fazê-lo


indicando o número da fila e da coluna que pretendemos; por exemplo a gaveta da
linha 4, coluna 3 e que era representado por gaveta[4,3].

PA 41 Paulo Campelo

Você também pode gostar