Anda di halaman 1dari 117

Ciência da Computação

Tecnologia em Análise e
Desenvolvimento de Sistemas

Construção de Algoritmos - INF1002


Prof. Eugênio Silva
(parte 1/2)
CONTEÚDO
• ORGANIZAÇÃO DE COMPUTADORES;

• ALGORITMOS;

• DESCRIÇÃO DE ALGORITMOS;

• EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS;

• MODULARIZAÇÃO;

• BIBLIOGRAFIA.
ORGANIZAÇÃO DE COMPUTADORES
• O que é um Computador:
– durante séculos era uma pessoa que fazia cálculos;

– hoje é um tipo de máquina capaz de armazenar, processar e


disponibilizar dados e informações;

– daqui a alguns anos pode se referir a um dispositivo com


características e aplicações substancialmente diferentes das de hoje.

3
ORGANIZAÇÃO DE COMPUTADORES
• Computador Simplificado (CS):
– computador hipotético que utiliza objetos comuns de um escritório;

– elementos do CS:

1. 16 escaninhos desenhados em um quadro negro;

2. cadeira para o operador;

3. bandeja com cartões com números;

4. máquina de calcular;

5. máquina de escrever.

Adaptado de GUIMARÃES, LAGES (2001)


4
ORGANIZAÇÃO DE COMPUTADORES
• Computador Simplificado (CS):
– funções dos elementos do CS:

• escaninhos: são identificados por E01 a E16 e armazenam instruções ou


números;

• operador: interpreta e executa as instruções contidas nos escaninhos;

• bandeja de cartões: pilha de cartões com números que podem ser


copiados (pelo operador) para algum escaninho;

• máquina de calcular: usada para executar todas as operações aritméticas;

• máquina de escrever: usada escrever valores numéricos ou frases.

5
ORGANIZAÇÃO DE COMPUTADORES
• Exemplo 1:
– instruções:
• E01: pegue um cartão na bandeja e copie o seu valor em E16;
• E02: pegue um cartão na bandeja e copie seu valor em E15;
• E03: some o conteúdo de E15 ao de E16 e coloque o resultado em E16;
• E04: imprima o conteúdo de E16;
• E05: pare.

– cartões:
• 5, 3.

• Exercício:
– escreva um conjunto de instruções para fazer o CS somar dois valores
(contidos em dois cartões) e subtrair um terceiro valor (contido num terceiro
cartão) e imprimir o resultado.

6
ORGANIZAÇÃO DE COMPUTADORES
• Exemplo 2:
– instruções:
• E01: pegue um cartão na bandeja e copie o seu valor em E16;
• E02: pegue um cartão na bandeja e copie seu valor em E15;
• E03: some o conteúdo de E15 ao de E16 e coloque o resultado em E16;
• E04: volte a E02;
• E05: pare.

– cartões:
• 7, 1, 4, 3, 5, 2.

7
ORGANIZAÇÃO DE COMPUTADORES
• Exemplo 3:
– instruções:
• E01: pegue um cartão na bandeja e copie o seu valor em E16;
• E02: pegue um cartão na bandeja e copie seu valor em E15;
• E03: se não houver mais cartões avance para E06;
• E04: some o conteúdo de E15 ao de E16 e coloque o resultado em E16;
• E05: volte a E02;
• E06: imprima o conteúdo de E16;
• E07: pare.

– cartões:
• 7, 1, 4, 3, 5, 2.

8
ORGANIZAÇÃO DE COMPUTADORES
• Exemplo 4:
– instruções:
• E01: pegue um cartão na bandeja e copie o seu valor em E16;
• E02: se não houver mais cartões avance para E06;
• E03: pegue um cartão na bandeja e copie seu valor em E15;
• E04: some o conteúdo de E15 ao de E16 e coloque o resultado em E16;
• E05: volte a E02;
• E06: imprima o conteúdo de E16;
• E07: pare.

– cartões:
• 7, 1, 4, 3, 5, 2.

9
ORGANIZAÇÃO DE COMPUTADORES
• Exemplo 5:
– instruções:
• E01: pegue um cartão na bandeja e copie o seu valor em E16;
• E02: pegue um cartão na bandeja e copie seu valor em E15;
• E03: se o conteúdo de E15 for igual a –1 avance para E06;
• E04: some o conteúdo de E15 ao de E16 e coloque o resultado em E16;
• E05: volte a E02;
• E06: imprima o conteúdo de E16;
• E07: pare.

– cartões:
• 7, 1, 4, 3, 5, 2, –1.

10
ORGANIZAÇÃO DE COMPUTADORES
• Estrutura de um Computador Digital:

entrada processamento saída

11
ORGANIZAÇÃO DE COMPUTADORES
• Estrutura de um Computador Digital:

memória

unidade de unidade de unidade de


entrada controle saída

unidade aritmética
e lógica

unidade central de
processamento
(UCP)

12
ORGANIZAÇÃO DE COMPUTADORES
• Estrutura de um Computador Digital:
– funções dos componentes de um computador real:

• unidade de entrada: traduz informações de um dispositivo em um código


que a UCP é capaz de entender;

• memória: armazena os dados e as instruções que manipulam os dados;

• unidade aritmética e lógica: efetua todos os cálculos aritméticos e


lógicos;

• unidade de controle: responsável pelo “tráfego” dos dados;

• unidade de saída: converte os dados processados em palavras ou


números que podem ser impressos numa impressora ou exibidos num
monitor.

13
ALGORITMOS
• Algoritmos no Dia a Dia:
– indicações de como chegar a uma determinada rua;

– receita de culinária;

– planta do projeto de construção de um edifício;

– instruções de montagem de um brinquedo;

– substituição de uma lâmpada:

1. remova a lâmpada queimada;

2. coloque a nova lâmpada.

as instruções parecem suficientes para um operador humano,


mas e se a tarefa fosse desempenhada por um robô?

14
ALGORITMOS
• Exemplo (substituição de uma lâmpada):
– refinamento 1:

1. posicione a escada debaixo da lâmpada queimada;

2. escolha uma nova lâmpada de mesma potência da queimada;

3. suba a escada até que a lâmpada possa ser alcançada;

4. gire a lâmpada queimada no sentido anti-horário até que ela se solte;

5. posicione a nova lâmpada no soquete;

6. gire-a no sentido horário até que ela se firme;

7. desça a escada.

15
ALGORITMOS
• Exemplo (substituição de uma lâmpada):
– refinamento 2:

1. posicione a escada debaixo da lâmpada queimada;


2. selecione uma nova lâmpada para substituição;
se a potência não for a mesma da queimada, então repita até
encontrar uma que sirva
descarte a lâmpada selecionada;
selecione uma nova;
3. enquanto a lâmpada não puder ser alcançada
suba um degrau da escada;
o detalhamento pode
continuar quase que
4. repita até que a lâmpada fique livre do soquete
indefinidamente
gire a lâmpada no sentido anti-horário;
5. posicione a nova lâmpada no soquete;
6. repita até que a lâmpada esteja firme no soquete
gire a lâmpada no sentido horário;
7. desça a escada. 16
ALGORITMOS
• Algoritmos em Computação:
– computadores, infelizmente, só fazem aquilo que se manda, e não
necessariamente o que se deseja que eles façam;

– um conjunto de instruções pode ser facilmente entendido por um ser


humano, mas deve ser mais bem especificado para que seja executado
por um computador;

– as instruções fornecidas ao computador devem ser expressas de forma


clara e sem qualquer ambiguidade;

– computadores manipulam um conjunto muito limitado de instruções e


um algoritmo deve ser expresso nos termos dessas instruções.

17
ALGORITMOS
• Algoritmos em Computação:
– o refinamento sucessivo é um bom método para a elaboração de um
algoritmo:

• começa-se com uma afirmação genérica da solução do problema;

• refina-se a solução até o algoritmo final.

– um algoritmo representa melhor o raciocínio envolvido na lógica de


programação e abstrai detalhes computacionais que são adicionados
mais tarde;

– uma vez concebida uma solução algorítmica para um problema, esta


pode ser traduzida para qualquer linguagem de programação;

– a solução escrita em linguagem de programação é transformada em


um programa de computador.

18
ALGORITMOS
• Algoritmos em Computação:
– o processo de solução de um problema por meio de um programa de
computador:

problema elaboração de um
solução do
problema algoritmo para
resolver o problema
implementação solução em forma
(passo difícil) de algoritmo
tradução do algoritmo
implementação
solução como um para uma linguagem
programa de computador de programação
Adaptado de TREMBLAY, BUNT (1983)

19
ALGORITMOS
• Definições:
– “... uma sequência ordenada, e sem ambiguidade, de passos que levam
à solução de um dado problema.”
TREMBLAY, BUNT (1983)

– “... é a descrição de um padrão de comportamento, expresso em


termos de um repertório bem definido e finito de ações “primitivas”,
das quais damos por certo que elas podem ser executadas.”
GUIMARÃES, LAGES (1994)

– é uma sequência finita de instruções não ambíguas que, quando


executadas, produzem o resultado esperado.

20
DESCRIÇÃO DE ALGORITMOS
• Linguagens para Algoritmos:
– tanto a fraqueza quanto o poder de uma linguagem natural se devem
ao seu caráter vago e à sua imprecisão;

– um algoritmo escrito em uma linguagem formal afasta a possibilidade


de ambiguidade, tal que, para uma situação inicial, a sua execução
sempre leva ao mesmo estado final, percorrendo o mesmo caminho;

– através de um conjunto básico de primitivas é possível pensar no


problema e não na máquina que executará o algoritmo, porém, sem se
distanciar muito da máquina;

– algumas opções:

• linguagem textual: PORTUGOL;


• linguagem gráfica: FLUXOGRAMA.

21
DESCRIÇÃO DE ALGORITMOS
• Ambientes:
– há vários ambientes para a criação, edição, interpretação e depuração
de algoritmos em PORTUGOL:

ambiente utilizado no curso

http://visualg3.com.br

http://www.dei.estt.ipt.pt/portugol/

todos os ambientes podem


http://lite.acad.univali.br/portugol/ ser baixados gratuitamente

OBS.: não há uma sintaxe universal para o PORTUGOL, logo,


pode haver pequenas diferenças sintáticas entre os ambientes.
22
DESCRIÇÃO DE ALGORITMOS
• Elementos de Algoritmos:
– identificadores;

– tipos de dados;

– variáveis e constantes;

– operadores;

– expressões;

– controle de fluxo de execução (estruturas básicas e complementares);

– tipos estruturados (vetores, matrizes e registros);

– modularização (procedimentos e funções).

23
DESCRIÇÃO DE ALGORITMOS
• Identificadores:
– um identificador é uma sequência de símbolos (caracteres) que dá
nome a uma entidade (variável, tipo de dado, etc.) que é parte da
descrição de um algoritmo;

– sintaxe de um identificador (PORTUGOL e FLUXOGRAMA):

exemplos:
letra a
dígito b_612
c3pO
letra r2d2
soma
_

no Visualg, letras maiúsculas e minúsculas são tratadas da mesma


forma, ou seja, os identificadores MEDIA e MeDiA são iguais

24
DESCRIÇÃO DE ALGORITMOS
• Tipos de Dados:
– um tipo estabelece a natureza (característica) do dado que é
manipulado por um algoritmo;

– tipos de dados básicos (PORTUGOL):

inteiro: 13, – 6, 7830, – 295;


real: 23.8, 3.6752, – 8.910, 3738.72, 32.0;
caractere: “UEZO”, “Campo Grande”, “111 + 222 = 333”;
lógico: FALSO, VERDADEIRO;

25
DESCRIÇÃO DE ALGORITMOS
• Variáveis:
– uma variável é uma entidade que armazena um valor (dado) de um
tipo e é conhecida pelo seu identificador;

SOMA
variável
SOMA

– tecnicamente, uma variável corresponde a uma área na memória do


computador que armazena um tipo específico de conteúdo;

– o conteúdo de uma variável pode ser modificado durante a execução


do algoritmo.

26
DESCRIÇÃO DE ALGORITMOS
• Variáveis:
– sintaxe da declaração (definição) de uma variável (PORTUGOL):

identificador : inteiro

real
exemplos:
valor: inteiro caractere
r1, r2: real
frase: caractere logico
tem: logico

em geral, usam-se letras minúsculas


nos identificadores de variáveis

27
DESCRIÇÃO DE ALGORITMOS
• Constantes:
– uma constante é uma entidade com características semelhantes às de
uma variável, porém, o seu valor nunca muda durante a execução do
algoritmo;

– sintaxe da declaração de uma constante (PORTUGOL):

const identificador = valor

exemplos:
const PI = 3.14
const PHI = 1.618

em geral, usam-se letras maiúsculas


nos identificadores de constantes

28
DESCRIÇÃO DE ALGORITMOS
• Operadores:
– um operador é um símbolo que é associado a um valor (constante ou
variável) ou a um par de valores para formar uma expressão;

– tipos de operadores:

• aritméticos;

• relacionais;

• lógicos;

• atribuição.

29
DESCRIÇÃO DE ALGORITMOS
• Operadores:
– aritméticos (PORTUGOL e FLUXOGRAMA):

adição: + multiplicação: * exponenciação: ^


subtração: – divisão: /
mod (ou %): resto da divisão de um inteiro por outro
div (ou \): quociente da divisão de um inteiro por outro

• funções matemáticas mais comuns:

seno: Sen( ) cosseno: Cos( ) tangente: Tan( )


logaritmo (base 10): Log( ) módulo: Abs( ) exponencial: Exp( )
raiz quadrada: RaizQ( )

o Visualg disponibiliza outras funções matemáticas e também


funções para manipulação de cadeias de caracteres
http://manual.visualg3.com.br/doku.php?id=manual
30
DESCRIÇÃO DE ALGORITMOS
• Operadores:
– relacionais (PORTUGOL e FLUXOGRAMA):

igual: = maior: > maior ou igual: >=


diferente: <> menor: < menor ou igual: <=

– lógicos (PORTUGOL e FLUXOGRAMA):


e: e ou: ou não: nao ou exclusivo: xou

tabela verdade:
A B AeB A ou B nao A A xou B
F F F F V F onde:
F V F V V V A, B: variáveis lógicas;
F: valor FALSO;
V F F V F V
V: valor VERDADEIRO.
V V V V F F
31
DESCRIÇÃO DE ALGORITMOS
• Operadores:
– um tipo especial de operador, denominado operador de atribuição,
representa o armazenamento do resultado de uma expressão em uma
variável;

– sintaxe da atribuição de valor (PORTUGOL e FLUXOGRAMA):

exemplos:
valor <- 42
identificador <- expressão r1 <- 1.73
frase <- “UEZO”
tem <- VERDADEIRO

no Visualg é possível usar tanto ‘<-’ quanto ‘:=’


como operador de atribuição

32
DESCRIÇÃO DE ALGORITMOS
• Operadores:
– precedência:

• parênteses e funções;

• exponenciação;

• multiplicação, divisão, mod e div;

• adição e subtração;

• comparações;

• não;

• e;

• ou e xou;

• atribuição.

33
DESCRIÇÃO DE ALGORITMOS
• Expressões:
– uma expressão é uma combinação de valores, operadores e
parênteses que, quando avaliada, produz um novo valor;

– a avaliação de uma expressão deve levar em consideração a


precedência dos operadores envolvidos;

– exemplos:
a, b, total: inteiro resp:
a <- 3 3
a <- a + 2 5
b <- a * 2 - 1 9
total <- b + a \ 2 * (7 – a) 13

c1, c2, res: real resp: no Visualg o resultado de


c1 <- 3 ^ 2 – 2.58 6.42
operações envolvendo ‘/’,
c2 <- 1.21 + RaizQ(4) 3.21
res <- c2 / c1 0.50 ‘^’ e funções matemáticas
é sempre do tipo real
34
DESCRIÇÃO DE ALGORITMOS
• Expressões:
– uma expressão é uma combinação de valores, operadores e
parênteses que, quando avaliada, produz um novo valor;

– a avaliação de uma expressão deve levar em consideração a


precedência dos operadores envolvidos;

– exemplos:
x: logico resp:
a, b: inteiro
a <- 5 5
b <- 3 3
x <- (a < b) ou (b = 3) VERDADEIRO

s1, s2: caractere resp: no Visualg o operador ‘+’


s1 <- “Fulano” “Fulano” pode ser usado para unir
s2 <- “Olá ” + s1 “Olá Fulano” sequências de caracteres

35
DESCRIÇÃO DE ALGORITMOS
• Expressões:
– a avaliação de uma expressão deve levar em consideração também os
tipos das variáveis (ou constantes) envolvidas;

– a conversão de um tipo para outro pode resultar em um erro;

– exemplos:
a, b, c, m1, m2: inteiro
t1, t2, t3: real resp: em C é possível atribuir
a <- “Bem vindo” ERRO um valor real a uma
b <- VERDADEIRO ERRO variável inteira, mas a
c <- (7 < 2) e nao(2 <> 5) ERRO precisão é ignorada
m1 <- (5 + 8) / 2 ERRO
m2 <- 3 * 5.4 ERRO
t1 <- 4 + 5 * 2 - 3 11.0 em C o operador ‘/’
t2 <- (9 – 2) / 5 * 3.0 4.2 aplicado a dois valores
t3 <- 5 + (8.0 – 3) / 2 7.5 inteiros age como o
operador ‘\’ do Visualg

36
DESCRIÇÃO DE ALGORITMOS
• Exercícios:
Avalie as expressões a seguir:

a) a, b: inteiro c) a, b, c, d, e: logico
c, d, x: real a <- VERDADEIRO
a <- 7 b <- FALSO
b <- 2 c <- VERDADEIRO
c <- 3.1 d <- FALSO
d <- 2.5 e <- nao a ou b e nao (c ou d)
x <- a / b + c - d
d) x:logico
b) a, b: inteiro a, b, c, d: inteiro
x, y: real a <- 8
a <- 2 b <- 3
b <- 3 c <- 9
x <- - a ^ b + 1 d <- 4
y <- Abs(x) * 2 x <- (a % b < 5) e (c \ d >= 0)

37
DESCRIÇÃO DE ALGORITMOS
• Boas Práticas:
– algumas dicas para escrever algoritmos de qualidade:

• 1 - algoritmos devem ser feitos para serem lidos por seres humanos;
• 2 - escreva comentários quando estiver escrevendo o algoritmo;
• 3 - escreva comentários que acrescentem alguma informação útil;
• 4 - use comentários no prólogo;
• 5 - utilize espaços em branco para melhorar a legibilidade;
• 6 - escolha nomes representativos para as suas variáveis;
• 7 - escreva um comando por linha;
• 8 - utilize parênteses para aumentar a legibilidade das expressões;
• 9 - utilize indentação para mostrar a estrutura lógica do algoritmo;
• 10 - os comentários devem ser alterados quando o algoritmo é alterado.
no Visualg um comentário é precedido por ‘//’ 38
DESCRIÇÃO DE ALGORITMOS
• Estrutura Básica:
– em um algoritmo em PORTUGOL há seções específicas para a
declaração das variáveis e para as instruções;

– em um FLUXOGRAMA, como não há declaração de variáveis, todas as


instruções são delimitadas por um ‘início’ e um ‘fim’;

– sintaxe básica:
PORTUGOL FLUXOGRAMA
início

...
fim

39
DESCRIÇÃO DE ALGORITMOS
• Comandos Básicos (Entrada):
– um comando de entrada obtém dados do ambiente externo, o que
permite a construção de algoritmos de caráter geral;

– sintaxe do comando de entrada:

PORTUGOL
exemplos:
,

leia ( identificador )

FLUXOGRAMA exemplo:
onde:
leia leia
vi é uma variável;
v1, v2, ..., vn VALOR, R1
i  {1, 2, ..., n}.

40
DESCRIÇÃO DE ALGORITMOS
• Comandos Básicos (Saída):
– um comando de saída fornece dados ao ambiente externo;

– sintaxe do comando de saída: no Visualg há ainda o


comando escreval que
PORTUGOL salta uma linha após a escrita
,

escreva ( identificador )

expressão exemplos:
carectere

FLUXOGRAMA exemplo:
onde:
escreva escreva
vi é uma variável (ou constante);
v1, v2, ..., vn “Total: ”, r1 + r2
i  {1, 2, ..., n}.

41
DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura Sequencial):
– uma estrutura sequencial é um conjunto de comandos que são
executados numa sequência linear de cima para baixo;

– sintaxe de uma estrutura sequencial:


PORTUGOL exemplo:
<comando-1>
<comando-2>

<comando-n>

42
DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura Sequencial):
– uma estrutura sequencial é um conjunto de comandos que são
executados numa sequência linear de cima para baixo;

– sintaxe de uma estrutura sequencial:


FLUXOGRAMA exemplo:
início

C1 leia
A
C2
BA*5
...

escreva
“Resposta: ”, B
Cn
fim
43
DESCRIÇÃO DE ALGORITMOS
• Exercícios:
1. Escreva um algoritmo que leia três valores inteiros, calcule e imprima
a média desses valores.

2. Escreva um algoritmo que leia dois valores inteiros, efetue as quatro


operações fundamentais (soma, subtração, multiplicação e divisão)
com esses valores e imprima os respectivos resultados.

3. Uma concessionária de veículos paga a seus funcionários um salário


mensal fixo, uma comissão (também fixa) para cada carro vendido e
mais 5% sobre o total das vendas. Escreva um algoritmo que calcule e
imprima o valor total a ser recebido por um funcionário ao final de um
mês de trabalho.

44
DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura de Decisão):
– uma estrutura de decisão permite decidir qual ação deve ser
executada com base no resultado de um teste;

– sintaxe de uma estrutura de decisão simples:


PORTUGOL exemplo:
se <condição> entao
<sequência-comandos>
fimse

45
DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura de Decisão):
– uma estrutura de decisão permite decidir qual ação deve ser
executada com base no resultado de um teste;

– sintaxe de uma estrutura de decisão simples:


FLUXOGRAMA exemplo:
início
F
leia
V
V1, V2

C1 F
V1 > V2
...

V
escreva
Cn V1

fim 46
DESCRIÇÃO DE ALGORITMOS
• Exercícios:
1. Escreva um algoritmo que leia um valor inteiro, verifique e imprima se
esse valor é ímpar.

2. Escreva um algoritmo que leia quatro valores inteiros, verifique e


imprima se há algum par de valores iguais.

3. Considerando a mesma concessionária do slide 44, assuma que se o


total de vendas de um funcionário ultrapassar o valor de R$100.000,00
no mês, este terá direito a uma bonificação extra (além dos 5%) de 3%
sobre o total de vendas. Escreva um algoritmo que calcule e imprima o
valor total a ser recebido pelo funcionário ao final de um mês de
trabalho.

47
DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura de Decisão):
– uma estrutura de decisão permite decidir qual ação deve ser
executada com base no resultado de um teste;

– sintaxe de uma estrutura de decisão composta:


PORTUGOL exemplo:
se <condição> entao
<sequência-comandos-1>
senao
<sequência-comandos-2>
fimse

48
DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura de Decisão):
– uma estrutura de decisão permite decidir qual ação deve ser
executada com base no resultado de um teste;

– sintaxe de uma estrutura de decisão composta:


FLUXOGRAMA exemplo:
início
V F leia
V1, V2
C1 C'1
V F
V1 > V2
...
...

escreva escreva
Cn Cm V1 V2

fim 49
DESCRIÇÃO DE ALGORITMOS
• Exercícios:
1. Escreva um algoritmo que leia dois valores inteiros, verifique e escreva
se o primeiro valor é ou não divisível pelo segundo.

2. Escreva um algoritmo que leia quatro valores inteiros, verifique e


escreva se há ou não uma quantidade ímpar de pares de valores
iguais.

3. Considerando a mesma concessionária do slide 47, escreva um


algoritmo que calcule e imprima o valor total a ser recebido pelo
funcionário ao final de um mês de trabalho, assumindo o seguinte
critério de bonificação:
3% do total das vendas para vendas até R$50.000,00;
5% para vendas entre R$50.000,00 e R$80.000,00 (inclusive);
7% para vendas superiores a R$80.000,00.

50
DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura de Repetição):
– uma estrutura de repetição permite executar repetidamente um
conjunto de ações enquanto uma condição permanece válida;

– sintaxe de uma estrutura de repetição com teste no início:


PORTUGOL exemplo:
enquanto <condição> faca
<sequência-comandos>
fimenquanto

51
DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura de Repetição):
– uma estrutura de repetição permite executar repetidamente um
conjunto de ações enquanto uma condição permanece válida;

– sintaxe de uma estrutura de repetição com teste no início:


FLUXOGRAMA exemplo:

início F
F
I  10
V
V leia
A AA*2
C1
I1 II+1
...

escreva
Cn A

fim 52
DESCRIÇÃO DE ALGORITMOS
• Exercícios:
1. Escreva um algoritmo que leia um conjunto de valores inteiros, calcule
e imprima a soma e o produto desses valores.

2. Escreva um algoritmo que leia um conjunto de valores reais, e


também seus respectivos pesos, calcule e imprima a média ponderada
desses valores.

3. Considerando a mesma concessionária do slide 50, escreva um


algoritmo que calcule e imprima o valor total a ser recebido por cada
funcionário ao final do mês. O algoritmo deve calcular e imprimir
também o valor total pago no mês.

53
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Outros Tipos de Controle de Fluxo de Execução:
– as estruturas apresentadas são suficientes para a descrição de
qualquer algoritmo, mas, em determinadas situações, podem
dificultar a sua compreensão;

– as estruturas complementares não aumentam o poder de


representação das estruturas básicas, mas podem facilitar a descrição
e, consequentemente, o entendimento de determinados algoritmos;

– estruturas complementares:

• repetição com teste no final;

• repetição com variável de controle;

• abandono;

• decisão por múltipla escolha.


54
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura de Repetição):
– sintaxe de uma estrutura de repetição com teste no final:

PORTUGOL exemplo:
repita
<sequência-comandos>
ate <condição>

55
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura de Repetição):
– sintaxe de uma estrutura de repetição com teste no final:

FLUXOGRAMA exemplo:

início
AA*2
C1
leia
A II+1
...

F
I1 I > 10
Cn
V
F escreva
A
V
fim

56
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Exercícios:
1. Escreva um algoritmo que leia um conjunto de pares de valores
inteiros, calcule e imprima a razão e a diferença entre o segundo e o
primeiro valor de cada par.

2. Escreva um algoritmo que leia um conjunto de valores reais, calcule e


imprima a média geométrica desses valores.

3. Considerando a mesma concessionária do slide 53, escreva um


algoritmo que calcule e imprima também a média dos valores pagos
no mês.

57
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura de Repetição):
– sintaxe de uma estrutura de repetição com variável de controle:

PORTUGOL exemplo:
para v de i ate l passo p faca
<sequência-comandos>
fimpara

onde:
v é a variável de controle;
i é o valor inicial de v;
l é o valor final de v;
p é valor do incremento de v.

58
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura de Repetição):
– sintaxe de uma estrutura de repetição com variável de controle:

FLUXOGRAMA exemplo:

início I de 1 até 10 F
F
passo 1
V leia V
A AA*2
C1

escreva
...

A
Cn
fim

59
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Exercícios:
1. Escreva um algoritmo que leia um valor inteiro, calcule e imprima os
seus divisores.

2. Escreva um algoritmo que leia um valor inteiro, calcule e imprima as


suas N primeiras potências.

3. Considerando a mesma concessionária do slide 57, escreva um


algoritmo que calcule e imprima também a média dos valores pagos
em cada faixa de bonificação.

60
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura de Abandono):
– o abandono só tem sentido dentro de uma estrutura de repetição e
sempre está associado a uma estrutura de decisão (simples ou
composta);

– o abandono interrompe um laço de repetição quando uma condição é


satisfeita, antes que a condição de parada do laço seja atingida;

– o abandono aumenta a eficiência de certos algoritmos, uma vez que


iterações desnecessárias em um laço de repetição são evitadas.

61
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura de Abandono):
– sintaxe de uma estrutura de abandono:

PORTUGOL exemplo:
<repetição> <condição>
<decisão> <condição>
interrompa
<fim decisão>
<fim repetição>

62
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura de Abandono):
– sintaxe de uma estrutura de abandono:

FLUXOGRAMA exemplo:
repetição início F
I  10
decisão V
leia
A AA*I

F
I1 A < 100
V
II+1

escreva
A

fim
63
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Exercícios:
1. Escreva um algoritmo que leia um valor inteiro, calcule e imprima os
seus N primeiros múltiplos ou os múltiplos menores que 100.

2. Escreva um algoritmo que encontre e imprima o maior número que


seja menor que 1.000.000 e que seja divisível por 11, 13 e 17.

3. Considerando a mesma concessionária do slide 53, escreva um


algoritmo que calcule e imprima o valor total a ser recebido por cada
funcionário ao final do mês, mas que interrompa o cálculo e imprima
um alerta se o total pago no mês ultrapassar R$500.000,00.

64
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura de Decisão):
– sintaxe de uma estrutura de decisão por múltipla escolha:
PORTUGOL exemplo:
escolha <expressão>
caso v11, ..., v1n
<sequência-comandos-1>
...
caso vp1, ..., vpk
<sequência-comandos-p>
outrocaso
<sequência-comandos-p+1>
fimescolha
onde:
vij é um valor (rótulo);
i  {1, 2, ..., p} e j  {1, 2, ..., r};
r é o número de rótulos do caso i.
65
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Controle de Fluxo de Execução (Estrutura de Decisão):
– sintaxe de uma estrutura de decisão por múltipla escolha:
FLUXOGRAMA exemplo:
início

leia
V
v11 : ... : v1n vp1 : ... : vpk outrocaso
C1 ... Cp Cp+1 V * 10

10 : 20 : 30 80 : 90 : 100 outrocaso
escreva escreva escreva
“PQ” “GD” “ERRO”

fim
66
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Exercícios:
1. Escreva um algoritmo que leia um valor inteiro, identifique e imprima
o nome do mês correspondente.

2. Escreva um algoritmo que leia dois valores inteiros e uma dentre


quatro opções possíveis de operações com esses valores (soma,
subtração, multiplicação ou divisão). Em seguida, calcule e imprima o
resultado da operação selecionada.

3. Considerando a mesma concessionária do slide 50, escreva um


algoritmo que calcule e imprima o valor total a ser recebido pelo
funcionário, assumindo o seguinte critério de bonificação:
3% do total das vendas para quem vende 1 ou 2 carros;
4% para quem vende de 3 a 5 carros;
6% para quem vende de 6 a 8 carros;
9% para quem vende 9 ou o limite máximo de 10 carros.
67
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Outros Tipos de Dados:
– nem sempre os tipos básicos (inteiro, real, caractere e lógico) são
adequados para representar os dados manipulados por um algoritmo;

– exemplo (cálculo da média das notas de 5 alunos):

se a turma tivesse 80 alunos, só a declaração das


variáveis tornaria a escrita do algoritmo impraticável
68
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Outros Tipos de Dados:
– no exemplo, o ideal é o uso de uma estrutura de dados que contenha
todas as notas e que permita a referência ao conjunto todo ou a cada
nota individualmente:

NOTAS 1 2 3 ... 80 índices


8,5 7,2 5,9 ... 9,5 valores

– uma estrutura de dados é um modo particular de armazenamento e


de organização de dados para que possam ser usados eficientemente;

– tipos de estruturas de dados:

• homogêneas (vetores e matrizes): conjuntos de dados formados pelo


mesmo tipo de dado básico;

• heterogêneas (registros): conjuntos de dados formados por tipos de


dados básicos diferentes (campos do registro).
69
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Estrutura de Dados Homogênea (Vetor):
– um vetor é uma estrutura que armazena os dados em uma linha e em
várias colunas, ou seja, é unidimensional;

– sintaxe da declaração de um vetor (PORTUGOL):

identificador : vetor [ li..ls ] de inteiro

real
onde:
caractere
li e ls são valores inteiros e positivos;
li é o limite inferior do vetor; logico
ls é o limite superior do vetor;
li  ls.

70
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Estrutura de Dados Homogênea (Vetor):
– exemplo: índices
vet 1 2 3 4 5
vet: vetor [1..5] de real

vet[1] <- 1.2 1.2

vet[2] <- 3.1 1.2 3.1

vet[3] <- vet[1] + vet[2] 1.2 3.1 4.3

vet[4] <- vet[3] * 2 1.2 3.1 4.3 8.6

vet[5] <- vet[4] – 3.5 1.2 3.1 4.3 8.6 5.1

vet[1] <- vet[1] + 2.7 3.9 3.1 4.3 8.6 5.1

71
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Exercícios:
1. Escreva um algoritmo que leia um vetor de 10 valores inteiros, calcule
e imprima o produto dos valores que estão nas posições de índice par
do vetor.

2. Escreva um algoritmo que leia um vetor de 20 valores inteiros,


identifique e imprima os índices dos valores que são múltiplos de 5.

3. Considerando a mesma concessionária do slide 53, escreva um


algoritmo que calcule e imprima o total pago no mês e o maior valor
pago no mês. Em seguida, para cada funcionário devem ser impressos
o total das vendas e o valor total a receber.

72
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Estrutura de Dados Homogênea (Matriz):
– uma matriz é uma estrutura que armazena os dados em várias linhas e
em várias colunas, ou seja, é bidimensional;

– um vetor pode ser considerado um caso particular de uma matriz;

– sintaxe da declaração de uma matriz (PORTUGOL):

... [ li1..ls1 , li2..ls2 ] ...

onde:
lid e lsd são valores inteiros e positivos; basta acrescentar
lid é o limite inferior da dimensão d da matriz; mais uma dimensão
lsd é o limite superior da dimensão d da matriz; à sintaxe do vetor
lid  lsd;
d  {1, 2}.

73
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Estrutura de Dados Homogênea (Matriz):
– exemplo:

mat: vetor [1..4, 1..3] de real índices


mat 1 2 3
mat[1, 1] <- 3.6
1 3.6 - 2.7 6.1
mat[1, 2] <- - 2.7

índices
mat[1, 3] <- 6.1 2 - 2.9 3.2 4.8
mat[2, 1] <- - 4.3 + 1.4
3 2.4 2.0 - 1.5
mat[2, 2] <- (1.9 + 7.7) / 3
mat[2, 3] <- mat[1, 1] + 1.2 4 - 4.6 7.0 8.9
mat[3, 1] <- mat[2, 3] / 2
mat[3, 2] <- - mat[2, 3] / mat[3, 1]
mat[3, 3] <- 7.5 – mat[1, 3] + mat[2, 1]
mat[4, 1] <- mat[2, 2] – 2.6 * 3
mat[4, 2] <- 8 ^ (1 / 3) + RaizQ(25)
mat[4, 3] <- mat[1, 2] - mat[4, 1] + mat[4, 2]

74
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Exercícios:
1. Escreva um algoritmo que leia uma matriz de 10 x 10 valores inteiros,
calcule e imprima a soma dos valores que estão nas posições da matriz
em que a soma do índice da linha e da coluna seja um número par.

2. Escreva um algoritmo que leia uma matriz de 20 x 20 valores inteiros,


identifique e imprima os índices (linha e coluna) dos valores que são
divisíveis por 3.

3. Considerando a mesma concessionária do slide 53, escreva um


algoritmo que calcule e imprima o total pago no mês e o segundo
maior valor pago no mês. Em seguida, para cada funcionário devem
ser impressos o salário fixo, o total das vendas e o valor total a
receber.

75
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Estrutura de Dados Heterogênea (Registro):
– um registro é uma estrutura formada por um conjunto de variáveis de
tipos diferentes ou, eventualmente, iguais;

– sintaxe da especificação de um tipo registro (PORTUGOL):


tipo
<identificador> = registro inicialmente cria-se
<declaração-campo-1> (especifica-se) um novo tipo
... e, em seguida, declara-se a
<declaração-campo-n> variável daquele novo tipo
fimregistro

– sintaxe da declaração de um registro (PORTUGOL):


,

identificador : tipo especificado


76
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Estrutura de Dados Heterogênea (Registro):
– exemplo:

tipo reg: t_func


t_func = registro reg.nome <- “Fulano”
nome: caractere reg.salario <- 1500.0
salario: real reg.setor <- “vendas”
setor: caractere reg.PNE <- FALSO
PNE: logico
fimregistro

reg
“Fulano”
1500.0
25
FALSO
77
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Estrutura de Dados Heterogênea (Registro):
– exemplo:

tipo vet: vetor [1..3] de t_aluno


t_aluno = registro vet[1].nome <- “Fulano”
nome: caractere vet[1].nota <- 7.8
nota: real vet[1].turma <- 543
turma: inteiro vet[2].nome <- “Sicrano”
fimregistro vet[2].nota <- 9.5
vet[2].turma <- 726
vet[3].nome <- “Beltrano”
vet[3].nota <- 8.4
vet[3].turma <- “682”
índices
reg 1 2 3
“Fulano” “Sicrano” “Beltrano”
é possível criar
7.8 9.5 8.4 também matrizes
543 726 682 de registros
78
EXTENSÕES PARA A DESCRIÇÃO DE ALGORITMOS
• Exercícios:
1. Escreva um algoritmo que leia os dados (nome, sexo e salário) de um
conjunto de pessoas, identifique e imprima o sexo e o salário daqueles
que têm renda mensal maior que dois salários.

2. Escreva um algoritmo que leia os dados (nome, ano de nascimento e


cidade de origem) de 500 inscritos em um concurso, identifique e
imprima o nome e a idade do candidato mais jovem.

3. Considerando a mesma concessionária do slide 53, escreva um


algoritmo que calcule o valor total a ser recebido por cada funcionário.
Em seguida, para cada funcionário cujo tempo de serviço é inferior a
dois anos, devem ser impressos o total das vendas e o valor total a
receber.

79
MODULARIZAÇÃO
• Introdução:
– o ser humano tem uma dificuldade natural de resolver problemas
grandes, ou seja, de lidar com situações que envolvem muitas
possibilidades;

– assim, é necessário dividir o problema original em problemas menores


e mais simples, resolver cada um isoladamente e compor as soluções
para conquistar a solução do problema original;

– essa divisão do problema em partes menores recebe o nome de


modularização e ajuda a evitar a “confusão lógica” em torno da
solução do problema original;

– exemplo (programa para jogar xadrez):


• módulo 1: cérebro do jogo (planejamento e validação das jogadas);
• módulo 2: interface do jogo (exibição do tabuleiro e das peças).

80
MODULARIZAÇÃO
• Vantagens:
– é mais fácil identificar erros nos módulos do que no programa todo;

– é mais fácil testar os módulos individualmente do que o programa


todo;

– é mais fácil fazer a manutenção (correção de erros, atualizações, etc.)


módulo por módulo do que no programa todo;

– diminui a probabilidade de a manutenção de um módulo afetar o


funcionamento de outros módulos;

– permite o desenvolvimento independente de módulos e,


consequentemente, facilita o trabalho em equipe;

– possibilita a reutilização de código.

81
MODULARIZAÇÃO
• Módulos:
– os módulos são trechos de código (subrotinas) que têm estrutura
própria e destinação específica e que podem ser executados várias
vezes em um mesmo algoritmo;

– módulos podem ser representados por:

• procedimentos:

– executam ações sem retornar valor;

• funções:

– executam ações e retornam valor com um tipo associado;

– são ativadas no contexto de uma expressão.

82
MODULARIZAÇÃO
• Módulos:
– declaração de um procedimento:

– declaração de uma função:

83
MODULARIZAÇÃO
• Escopo de Variáveis:
– variável global:

• declarada no início do algoritmo de forma que é visível (pode ser


lida e modificada) por qualquer procedimento ou função
integrante;

– variável local:

• declarada dentro de um procedimento ou função de forma que só


é visível dentro desse procedimento ou função.

84
MODULARIZAÇÃO
• Passagem de Parâmetros:
– a passagem de parâmetros é o meio de comunicação entre os
módulos de um algoritmo;

– propósitos da passagem de parâmetros:

• fornecer um valor para que a subrotina execute um


processamento;

• retornar um valor processado pela subrotina;

• fornecer um valor para processamento pela subrotina e também


retornar um valor processado.

85
MODULARIZAÇÃO
• Passagem de Parâmetros:
– explícita:

• a transferência é feita por meio de argumentos;

• passagem por valor:


– variáveis independentes (passadas por cópia), ocupam
posições de memória diferentes dentro e fora do módulo;
– alterações nos conteúdos dessas variáveis dentro do módulo
NÃO SE PROPAGAM para fora dele;

• passagem por referência:


– variáveis ocupam a mesma posição de memória dentro e fora
do módulo;
– alterações nos conteúdos dessas variáveis SE PROPAGAM
para fora do módulo.
86
MODULARIZAÇÃO
• Passagem de Parâmetros:
– valor  referência:

87
MODULARIZAÇÃO
• Passagem de Parâmetros:
– valor  referência:

88
MODULARIZAÇÃO
• Passagem de Parâmetros:
– implícita:

• a transferência é feita por meio de variáveis globais;

• funciona de modo similar à passagem por referência:

– não necessita de nova alocação de memória;

– alterações realizadas durante a execução do módulo afetam o


conteúdo da variável para os demais módulos;

• não há passagem de argumentos.

89
MODULARIZAÇÃO
• Exemplo - Procedimento 1:

90
MODULARIZAÇÃO
• Exemplo - Procedimento 1:

91
MODULARIZAÇÃO
• Exemplo - Procedimento 1:

92
MODULARIZAÇÃO
• Exemplo - Procedimento 1:

93
MODULARIZAÇÃO
• Exemplo - Procedimento 1:

94
MODULARIZAÇÃO
• Exemplo - Procedimento 1:

95
MODULARIZAÇÃO
• Exemplo - Procedimento 1:

96
MODULARIZAÇÃO
• Exemplo - Procedimento 1:

97
MODULARIZAÇÃO
• Exemplo - Procedimento 1:

98
MODULARIZAÇÃO
• Exemplo - Procedimento 1:

99
MODULARIZAÇÃO
• Exemplo - Procedimento 1:

100
MODULARIZAÇÃO
• Exemplo - Procedimento 2:

101
MODULARIZAÇÃO
• Exemplo - Procedimento 2:

102
MODULARIZAÇÃO
• Exemplo - Procedimento 2:

103
MODULARIZAÇÃO
• Exemplo - Procedimento 2:

104
MODULARIZAÇÃO
• Exemplo - Procedimento 2:

105
MODULARIZAÇÃO
• Exemplo - Procedimento 2:

106
MODULARIZAÇÃO
• Exemplo - Procedimento 2:

107
MODULARIZAÇÃO
• Exemplo - Procedimento 2:

108
MODULARIZAÇÃO
• Exemplo - Procedimento 2:

109
MODULARIZAÇÃO
• Exemplo - Procedimento 2:

110
MODULARIZAÇÃO
• Exercícios:
1. Escreva um procedimento que receba 3 valores reais e verifique se
podem formar os lados de um triângulo. Se sim, verifique e imprima o
tipo de triângulo, se é equilátero, isósceles ou escaleno.

2. Um projétil é atirado com uma velocidade inicial V (m/s) e um ângulo


de inclinação  (radianos), sua posição (x, y) no plano no tempo t
(segundos) é dada por:
x = (V  cos ) t e y = (V  sen ) t – ½ gt2
onde: 0 <  < /2 e g = 9,8 m/s2
Escreva um procedimento que receba os valores  e V, calcule e
imprima as coordenadas x e y em intervalos de 0,01 s até que o
projétil atinja o solo.

3. Escreva um procedimento que receba três valores inteiros e os retorne


em ordem decrescente.
111
MODULARIZAÇÃO
• Exemplo - Função:

112
MODULARIZAÇÃO
• Exemplo - Função:

113
MODULARIZAÇÃO
• Exercícios:
1. Escreva uma função que receba um valor real, calcule e retorne o seu
piso. OBS.: o piso corresponde ao maior valor inteiro que seja menor
ou igual ao valor informado.

2. Escreva uma função que receba as coordenadas de dois pontos (x1, y1)
e (x2, y2) formados por valores inteiros, calcule e retorne a distância
entre eles.

3. Escreva uma função para calcular as raízes de uma equação de 2º


grau. A função deve levar em conta a possibilidade da existência de
nenhuma, uma ou duas raízes. A função deve retornar o número de
raízes (ou – 1 em caso de inexistência) e também os valores da raízes.

114
BIBLIOGRAFIA
• Básica:
GUIMARÃES, A. M., LAGES, N. A. C., Algoritmos e Estruturas de Dados,
LTC, Rio de Janeiro, 1994;

GUIMARÃES, A. M., LAGES, N. A. C., Introdução à Ciência da


Computação, LTC, Rio de Janeiro, 1984;

NICOLODI, A. C., Manual do Visualg 3.0, disponível em:


http://manual.visualg3.com.br/doku.php?id=manual, acessado em
julho de 2018;

TREMBLAY, J. P., BUNT, R. B., Ciência da Computação - Uma Abordagem


Algorítmica, McGraw-Hill, São Paulo, 1983.

115
BIBLIOGRAFIA
• Complementar:
FARRER, H. et al, Algoritmos Estruturados, 3ª edição, LTC, Rio de Janeiro,
1999;

FORBELLONE, A. L. V., EBERSPACHER, H. F., Lógica de Programação: A


Construção de Algoritmos e Estrutura de Dados, 3ª edição, Pearson,
São Paulo, 2005;

MANZANO, J. A. N. G., OLIVEIRA, J. F., Algoritmos: Lógica para


Desenvolvimento de Programação de Computadores, 26ª edição
revisada, Érica, São Paulo, 2012;

SOARES, M. V., GOMES, M., M., SOUZA, M. A. F., Algoritmos e Lógica de


Programação, 2ª edição revista e ampliada, Cengage Learning, São
Paulo, 2012.

VILARIM, G., Algoritmos: Programação para Iniciantes, 2ª edição,


Ciência Moderna, Rio de Janeiro, 2004.
116
FIM