Você está na página 1de 243

Fundamento de Computação:

Algortimos de Programação
Prof. Dr. Sofiane Labidi
Plataformas

Sofiane Labidi, PhD.


sofiane.labidi@ufma.br
Wa. 098 9.8860-6410
@slabidi
Overview
▰ Conceitos ..........................................................................................................
05
▰ Exemplos ...........................................................................................................
15
▰ Fases de Desenvolvimento ...............................................................................
32
▰ Formas de Representação ................................................................................ 5
4
▰ Portugol .............................................................................................................
71
▻ Variáveis ....................................................................................................................
79
▻ Atribuição de Valores ................................................................................................ 3
. 87
Overview

▻ Expressões Lógicas ........................................................................................................


116
▻ Tomada de Decisão ........................................................................................................
127
▻ Estruturas de Repetição ................................................................................................. 1
37
▻ Programação Modular ....................................................................................................
151
▻ Vetores e Matrizes ..........................................................................................................
192
▻ Registros ........................................................................................................................ 2
08
▻ Arquivos .......................................................................................................................... 4
218
1
CONCEITOS

5
Conceitos

▰ Algoritmo está presente no nosso dia-a-dia.


▰ Cada atividade que realizamos (simples ou complexas) é um
algoritmo que executamos mentalmente de forma
inconsciente ou consciente (que exige o Pensamento):
estacionar um carro, confeccionar um bolo, trocar um pneu, etc.

6
Definição

▰ Algoritmo é o passo a passo para resolver um


problema.
▰ Ele detalha as ações executadas até atingir um objetivo
ou solucionar um problema.

7
Sequência Lógica

▰ O Algoritmo é descrito como uma sequência lógica de


instruções, que devem ser seguidas em ordem para
cumprir uma determinada tarefa.

8
Instrução

▰ Cada passo/ação do algoritmo é chamado de


instrução.
▰ Uma só instrução não resolve o problema.

9
1º Exemplo

▰ Criar o algoritmo ”Fritar Ovo”!


(é o algoritmo mais famoso do mundo!)

10
Algoritmo “Fritar Ovo”

▰ Instruções/Ações:
▻ "Coloque uma frigideira no fogo."
▻ "Adicione um pouco de óleo ou manteiga."
▻ "Quebre o ovo na frigideira."
▻ "Deixe cozinhar até a clara ficar branca."
▻ "Tempere com sal e pimenta."
▻ "Retire o ovo da frigideira e está pronto para servir!"
▻ "Desligar o fogo."
11
Algoritmo “Fritar Ovo”

▰ Sequência Lógica:

▻ Se, por exemplo, executarmos a instrução (ação)


“desligar o fogo” antes da instrução “quebre ovo na
frigideira“, a tarefa “fritar ovo” não será realizada
(i.e. não atingiremos nosso objetivo).

12
Algoritmo “Fritar Ovo”
Algoritmo com mais detalhes
1. “Ligar o fogão”
2. “Pôr a frigideira no fogo”
3. “Pôr óleo/manteiga na frigideira”
4. “Esperar o óleo ficar quente”
5. “Quebrar ovos”
6. “Bater ovos”
7. “Pôr sal”
8. “Fritar ovos batidos”
9. “Retirar ovos batidos”
13
10. “Desligar o Fogão”
Definição Formal

“ Algoritmo é uma sequência lógica e finita de


passos/ações/instruções para atingir um
resultado desejado / realização de uma
tarefa.

14
2
EXEMPLOS
Algoritmos Não Computacionais

15
Receita de Bolo

▰ A receita de um bolo é um Algoritmo.

16
Receita de Bolo de Chocolate

Preparo
Ingredientes
▰ Coloque o óleo, leite, ovos, chocolate e açúcar no liquidificador.
▰ 1 xícara (de chá) de óleo
▰ 1 xícara (de chá) de leite
▰ Bate bem até ficar misturado.
▰ 2 ovos ▰ Acrescente a farinha de trigo e bata novamente até misturar.
▰ 1 xícara (de chá) de chocolate em pó ▰ Acrescente o fermento e misture levemente, não precisa bater.
▰ 1 xícara (de chá) de açúcar ▰ Coloque a massa em uma forma untada e enfarinhada (forma com buraco
▰ 2 xícaras (de chá) de farinha de trigo no meio ou não).
▰ 1 colher (de sopa) de fermento ▰ Leve para assar em forno médio por 30 minutos (não abra o forno nos
primeiros 20 minutos).
▰ Depois que ele estiver crescido, enfie o palito, se ele sair limpo, está
pronto.

17
Exercícios

▰ Desenvolva os seguintes algoritmos:


▰ ”Lavar o Cabelo”
▰ ”Trocar o Pneu de um Carro”
▰ ”Torre de Hanói”
▰ ”Trocar Lâmpada”
▰ ”Estudar para Prova”
▰ ”Fazer Baliza (estacionar um carro em vagas 90º)”
18
“Lavar o Cabelo”

1. Molhar o Cabelo
2. Aplicar o Shampoo
3. Massagear
4. Enxaguar
5. Aplicar Máscara Hidratante
6. Massagear por mais tempo
7. Enxaguar

19
“Trocar Pneu”

▰ Afrouxar as Porcas
▰ Levantar o Carro
▰ Retirar as Porcas
▰ Tirar o Pneu
▰ Colocar o Estepe
▰ Apertar as Porcas
▰ Abaixar o Carro

20
“Torre de Hanói”

21
“Torre de Hanói”

1
▰ 1. Move o disco 1 para a haste C
▰ 2. Move o disco 2 para a haste B
▰ 3. Move o disco 1 para a haste B
▰ 4. Move o disco 3 para a haste C
▰ 5. Move o disco 1 para a haste A
▰ 6. Move o disco 2 para a haste C
▰ 7. Move o disco 1 para a haste C

22
Raciocino Lógico Matemático

▰ Resolva os seguintes Problemas (Algoritmos):


▻ Do Carteiro
▻ Das Maçãs
▻ Da Geladeira (Girafa e Leão)
▻ Dos 13 Pregos.

23
▰ 1 1 36
38
Problema do Carteiro
▰ 1 2 18
21
▰ 1 3 12 João. “Qual é a idade dos meus 3 filhos
(soma=número da casa e multiplicação=36)?”
16 Carteiro. “Falta um dado”
▰ 1 4 9 João. ”A mais velha é loira!”
14 Carteiro. Descobriu o resultado.

▰ 1 6 6
13
▰ 2 2 9 Qual é a Idade dos 3 filhos de João?
13
▰ 2 3 6 24
11
Problema das Maçãs

Há 5 maçãs (3
Vermelhas e 2 Verdes).
C B A 3 maçãs são sorteadas e
colocadas na cabeça de
cada pessoa A, B e C.

Desafio:
Qual é cor da
mação de A ?

C vê as duas maçãs da B vê a mação da frente (A), A não vê nenhuma mação,


frente (B e A), mas não mas não sabe a cor da sua mesmo assim, ele descobriu a
sabe a cor da sua maçã. maçã. cor da sua mação.
25
1º perguntado 2º perguntado 3º perguntado
Problema da Geladeira

▰ Cria o Algoritmo “colocar um Elefante na


Geladeira”.
▰ Cria o Algoritmo “colocar uma Girafa na
Geladeira”.

26
Problema dos 13 Pregos (Centro de Gravidade)

Como colocar 13 pregos iguais em cima de apenas um outro um prego?


27
Problema dos 13 Pregos (Centro de Gravidade)

28
Problema dos 13 Pregos (Centro de Gravidade)

29
Observação

▰ Resolver um Problema exige:


▻ Conhecimento
▻ Criatividade

30
Conhecimento Vs. Criatividade

31
3
FASES DE DESV. DE UM
ALGORITMO

32
Problema?

▰ Problema é qualquer situação que exige uma forma


de pensar e conhecimentos específicos para
solucioná-la.

33
Estratégia/Etapas para Resolução de
Problema?
1 Compreender o
O que se pede no problema? Quais são os dados e as condições do problema?
Problema
É possível representá-lo com uma figura, um esquema ou um diagrama? É possível estimar a
resposta?
2 Elaborar um Plano
Qual é o plano e a estratégia para resolver o problema? Há algum problema semelhante que pode
ajudar na resolução deste? É importante organizar os dados em tabelas e gráficos e tentar resolver o
problema por partes (dividir para conquistar).

3 Executar o Plano
Executar o plano elaborado, verificando o passo a passo, efetuando todos os cálculos indicados no
plano. Executar todas as estratégias pensadas, obtendo várias maneiras de resolver o mesmo
problema.
4
Fazer o Retrospecto Checar se a solução obtida está correta. Verificar se existe outra maneira de resolver o problema?
(feedback)/Verificaçã É possível usar o método empregado para resolver problemas semelhantes? 34
o
Etapas Questões
1 Compreender o 1.1 Qual a Incógnita?
1.2 Quais são os Dados?
Estratégia de Resolução
Problema
1.3 Qual é a Condicionante que relaciona a Incógnita com os Dados?
1.4 É possível satisfazer a Condicionante?
A Condicionante é suficiente para determinar a Incógnita?

2 Elaborar um Plano 2.1 Já viu esse problema antes ou conhece um correlato?

2.2 Se o Problema for conhecido, é possível reutilizar o seu método?

2.3 Considere a Incógnita, não perca de vista o objetivo. Quais os meios para esse fim?
2.4 Utilizou todos os dados?
2.5 Utilizou toda Condicionante?
3 Executar o Plano 3.1 Verifique cada passo do Plano estabelecido.

3.2 É possível verificar /demonstrar claramente que o passo está correto?

4 Feedback da Solução 4.1 É possível verificar o resultado?


do Problema 4.2 É possível identificar um novo procedimento / chegar ao resultado por meio um
caminho diferente? 35
4.3 É possível reutilizar o/a método/solução em outro problema?
Problema: Cálculo da Média
Final

▰ Aplica esta “Estratégia de Resolução” ao


Problema ”Cálculo da Média Final” de um
Aluno.

36
Etapas Questões

1 Compreender 1.1 Qual a Incógnita? “A Média final”


o Problema
1.2 Quais são os Dados? As 3 Notas e seus Pesos

1.3 Qual é a Condicionante que “A Média Final (incógnita) é o resultado do cálculo da


relaciona a incógnita com os Dados? média ponderada em que os fatores são as médias dos 3
bimestres, sendo os pesos os seus fatores de ponderação”.

1.4 É possível satisfazer a Sim


Condicionante? ou a Condicionante é Conhecendo os Dados, a Incógnita (Média final) é
suficiente para determinar a incógnita? determinada pelo cálculo da média ponderada.

37
Etapas Questões Respostas
2 Elaborar um 2.1 Já viu esse problema antes ou Sim
Plano conhece um correlato? Um problema correlato pode é o cálculo da média aritmética
simples, em que a soma de todos os fatores é dividida pelo
número de fatores da soma.

2.2 Se o Problema for conhecido, é Sim


possível usar o seu método? O Problema é conhecido e é possível usar o seu método de
atribuir uma importância diferente a cada um dos fatores por meio
da multiplicação de cada item por um fator de ponderação ou
peso específico. Os valores resultantes devem ser somados e
divididos pelo número de fatores da soma.

2.3 Considere a Incógnita, Não perca de Os mesmos do Item “2.2”


vista o objetivo. Quais os meios para
esse fim?

2.4 Utilizou todos os dados? Sim


5.5 Utilizou toda Condicionante? Sim
38
Etapas Questões Respostas
3 Executar o 3.1 Verifique cada passo dom Plano Coletar os dados: média do 1º Bimestre, média do 2º
Plano estabelecido. Bimestre, e média do 3º bimestre, peso do 1º Bimestre, peso
‘ do 2º Bimestre, e peso do 3º Bimestre. Efetuar o cálculo para
Média ponderada.

3.2 É possível verificar claramente que o Sim


passo está correto? Idem item 3.1.

4 Feedback da 4.1 É possível verificar o resultado? Conferir os dados coletados (média 1º Bimestre, média 2º
Solução do Bimestre, média 3º bimestre, peso 1º Bimestre, peso 2º
problema Bimestre, peso 3º Bimestre) verificar o cálculo para média
ponderada. Conferir o cálculo efetuado.

4.2 É possível utilizar o/a método/solução Sim


em outro problema? A mesma solução pode ser usada para calcular a média
ponderada de venda de uma loja por exemplo, etc.

39
Elaboração do Plano

▰ Dividir a Solução / Algoritmo em 3 Fases:


▰ Entradas
▰ Processamento
▰ Saída

▰ IPO Chart (Input / Processing / Output)

40
Processamento de Dados

ENTRADA PROCESSAMENTO SAÍDA

41
Processamento de Dados

Controle do Desempenho do Sistema

ENTRADA DE SAÍDA DE
PROCESSAMENTO
RECURSOS DE PRODUTOS DE
DADOS DE DADOS INFORMAÇÃO

Armazenamento de Recursos de Dados

42
IPO Chart

• Dividir para Conquistar! / Administrar a complexidade!

INPUT PROCESSIN OUTPUT


G
• Recuperar os • Processamento • Mostrar o
Dados do (Solucionar o Resultado
Problema problema)

43
IPO Chart

INPUT PROCESSIN OUTPUT


G
• Recuperar os • Processament • Mostrar/
Dados do o Armazenar os
Problema via (Processador Resultados no
(Teclado, CPU) (Monitor,
Arquivo, Leitor Impressora,
de Código de Disco, etc.)
Barra, etc.)

44
Exemplo: Média Final de Aluno

INPUT PROCESSING OUTPUT


• Recuperar as 3 Notas:
P1, P2, e P3 • Processamento
Digitação pelo • Mostrar Média na
(Calcular Média e
Teclado Tela e se o Aluno é
checar Aprovação)
Aprovado ou não

45
Método de Desenvolvimento

▰ Ler atentamente o enunciado;


▰ Retirar do enunciado a relação das entradas de dados;
▰ Retirar do enunciado a relação das saídas de dados;
▰ Determinar o que deve ser feito para transformar as entradas determinadas em
saídas especificadas;
▰ Construção do algoritmo.

46
Média Final de Aluno

Entradas Processamento Saídas


Receber a 1ª nota Somar as três notas Mostrar a média (o
resultado da divisão) na
Receber a 2ª nota Dividir a soma por 3 (média) Tela

Receber a 3ª nota Checar se o resultado Mostrar a aprovação do


(média) é maior ou igual a 7 aluno na Tela.
então aluno é aprovado
senão o aluno é reprovado

47
Média Final de Aluno

PROCESSING OUTPUT
INPUT

• Processamento: • escreva(media)
• leia(P1,P2,P3)
ou media  (P1+P2+P3)/3 se aproado=Verdadeiro entao
leia(P1) escreva(“Aluno Aprovado“)
leia(P2) se media >= 7 entao senao
leia(P3) aprovado  Verdadeiro escreva(“Aluno Reprovado”)
senao fimse
aprovado  Falso
fimse

48
Média Final de Aluno

Algoritmo ”Media” se media >= 7 entao


aprovado  Verdadeiro
senao
inicio aprovado  Falso
// Entrada fimse
leia(P1) // Saídas
leia(P2) escreva(media)
leia(P3) se aproado=Verdadeiro entao
escreva(“Aluno Aprovado“)
// Processamento
senao
media  (P1+P2+P3)/3
escreva(“Aluno Reprovado”)
fimse
fimalgoritmo 49
Exercício 1

▰ Faça o algoritmo que leia e converte uma temperatura em Grau


Celsius em Temperatura em Grau Fahrenheit e vice versa.
Fórmula:

Fahrenheit = (9/5)*(Celsius) + 32

50
Exercício 2
▰ Dando o peso (massa) e a altura de uma pessoa, verificar se ela está magra,
normal, com sobrepeso ou obesa!
A definição da obesidade depende do IMC (Índice de Massa Corporal) da
pessoa (IMC=P/A² kg/m²)

IMC < 16 Magreza Grau III


16,0 ≤ IMC < 17,0 Magreza Grau II
17,0 ≤ IMC < 18,5 Magreza Grau I
18,5 ≤ IMC < 25,0 Eutrofia (Normal)
25,0 ≤ IMC < 30,0 Sobrepeso (Pré-Obesidade)
30,0 ≤ IMC < 35,0 Obesidade Grau I
35,0 ≤ IMC < 40,0 Obesidade Grau II
IMC ≥ 40,0 Obesidade Grau III
51
Exercício 3

▰ Tendo a altura de uma pessoa, cria o algoritmo que calcula seu


peso ideal, utilizando a fórmula:

Peso Ideal = IMCi * altura^2

IMC ideal p Homens = 22 kg/m²


IMC ideal p Mulheres = 21 kg/m²

Calculadora do Peso Ideal:


www.mdsaude.com/obesidade/calcule-o-seu-peso-ideal-e-imc/#Calculadora_de_peso_ideal
52
Exercício 4

▰ Tendo como entrada o total vendido por um funcionário no mês de


agosto, faça um algoritmo que mostra a sua comissão e salário bruto
neste mês, sabendo que o seu salário base é R$ 1.200,00 e sua
comissão é de 10% sobre o total vendido.

53
4
FORMAS DE
REPRESENTAÇÃO

54
FORMAS DE REPRESENTAÇÃO

▻ Descrição Narrativa / Áudio (por meio de linguagem natural);


▻ Fluxograma;
▻ Português Estruturado (Pseudocódigo, Portugol ou
Pseudolinguagem).

55
Narrativa

▰ Especificando (falando), em linguagem natural (Inglês,


Francês, Português, etc.), os passos para a realização da tarefa.

▰ Pode ser gravada em áudio/vídeo ou transcrita em texto.

56
Narrativa

▰ Especificação verbal dos passos em linguagem natural.

▰ Desvantagens:
▻ A linguagem natural é imprecisa (possibilita ambiguidades).
▻ Proporciona mais trabalho na codificação.

▰ A Narrativa normalmente é utilizada para comentar algoritmos e/ou


programas, esclarecendo ou realçando pontos específicos.
57
Fluxogramas

▰ É uma representação gráfica dos algoritmos.

▰ Cada figura geométrica representa um tipo de ação.

58
Fluxogramas

▰ A representação gráfica facilita o entendimento das


ideais contidas no algoritmo.

▰ Porém, os fluxogramas não são muito práticos para


algoritmos muito extensos.

59
Símbolos

Início e Fim do Fluxograma

Operação de Entrada de Dados

Operação de Saída de Dados

Operação de Atribuição
(Processamento/Cálculo)

Decisão / Teste

Fluxo de Dados 60
Início

N1, N2, N3

M
(N1+N2+N3)/3

sim não
M>=7

“Aprovado” “Reprovado”

Fim

61
Diagrama de Chapin Nassi-Shneiderman

Início

N, AbsN : Inteiro

Leia(N)

N<0

Sim
Não
AbsN  N * -1 AbsN  N
Escreva(“Valor Absoluto: ”,AbsN)

FimAlgoritmo
62
Editores de Fluxogramas

▰ 1. Lucidchart www.lucidchart.com
▰ 2. Draw.io https://www.draw.io/
▰ 3. Gliffy https://go.gliffy.com/go/html5/launch
▰ 4. Canva http://www.canva.com

https://www.techtudo.com.br/noticias/2018/08/cinco-programas-para-fazer-fluxograma.ghtml
https://www.fm2s.com.br/fluxograma/

63
LucidChart

64
Editores de Fluxogramas

LucidChart

65
Pseudocódigo

▰ Pseudocódigo
ou Português Estruturado.

66
Portugol

▰ Linguagem específica para desenvolvimento de algoritmos,


que utiliza expressões pré-definidas para representar ações e
fluxos de controle.

▰ Funciona como uma linguagem simplificada de programação,


e facilita a codificação futura.

67
Pseudocódigo

Algoritmo “Média Final”


Var
N1, N2, M : Real
Inicio
escreva (“Entre com a primeira nota: ”)
leia (N1)

escreva (“Entre com a segundo nota: ”)


leia (N2)

M  (N1 + N2)/2
escreva (“Média =“, M)
Fim.
68
Fluxograma Portugol

INICIO
FIM

LEIA()
ESCREVA()

Ordem dos comandos


(identificação dos fluxos)

Todas as Operações

SE
ENTAO
SENAO
FIMSE 69
VisualG

▰ É um editor e interpretador de pseudocódigos escritos em português


estruturado, bastante utilizado por quem está aprendendo lógica de
programação.
▰ https://sourceforge.net/projects/visualg30/ (Baixar o Visual G)
▰ http://www.inf.ufsc.br/~bosco.sobral/ensino/ine5201/Visualg2_manual.pdf
▰ https://www.devmedia.com.br/introducao-ao-visualg/25748

70
5
PORTUGOL

71
Dica de Aprendizagem

Algoritmo NÃO se Aprende Algoritmo se Aprende

Copiando Algoritmos Construindo Algoritmos

Estudando Algoritmos Prontos Testando Algoritmos

72
Português Estruturado

▰ Pseudocódigo
▰ Portugol
▰ PseudoLinguagem

73
Estrutura de um Algoritmo

Algoritmo <nome_do_algoritmo>;
Var
<declaração_de_variáveis>;
Inicio
<corpo_do_algoritmo>;
Fim

74
Estrutura de um Algoritmo

Algoritmo: Indica o início da definição de um algoritmo em pseudocódigo.

<nome_do_algoritmo> : É um nome simbólico dado ao algoritmo com a finalidade


de distingui-lo dos demais.

<declaração_de_variávei> : Consiste na área de declaração das variáveis utilizadas


no algoritmo (de entrada, de saída e intermediárias/temporárias).

Início e Fim : Palavras que delimitam o começo e o término do conjunto de instruções


do corpo do algoritmo.
75
Pseudocódigo ”Soma”

Algoritmo Soma
Var
N1, N2, S : Inteiro
Inicio
escreva (“Entre com o primeiro número: ”)
leia (N1)
escreva (“Entre com o segundo número: ”)
leia (N2)
S  N1 + N2
escreva (“Soma =“, S)
Fim. 76
Comentários

▰ Para comentar um algoritmo (colocando um texto explicativo)


usamos o ”//”

▰ Exemplo:

// Input
leia(Nome)

▰ Se precisar colocar em mais de uma linha, é colocar o // em cada


linha.
77
Memória Central

▰ Tanto os programas executados pelo computador, bem


como os seus dados, todos, devem ser carregados na sua
Memória Central.

78
Variáveis
A 20

▰ Os dados são armazenados em zonas da memória 14


B

chamadas de variáveis.
▰ Uma Variável representa uma posição na
C 5
memória, onde pode ser armazenado um
dado.
▰ Ela possui um nome e um valor;
▰ Durante a execução do algoritmo, a variável
pode ter seu valor alterado.
79
Variáveis
A 20 @1

@2
▰ Uma variável é caracterizada pelo: B 14

▻ Nome
▻ Endereço C 5 @3

▻ Tipo
▻ Conteúdo (que pode variar, mas sem mudar de tipo)

80
Nome de uma Variável

▰ O primeiro caractere do nome de uma variável não pode ser um


número. Sempre deverá ser uma letra.

▰ O nome de uma variável não pode possuir espaços em branco (estes


podem ser substituídas por um underline);

▰ Não pode ser nome de uma variável uma palavra reservada;

▰ Só podemos ser utilizar letras e números, com exceção do caractere


underline. 81
Nome de uma Variável

▰ Nomes:
a
b1
nome_aluno
_Idade
inicio
c 3
82
Palavras Reservadas

aleatorio e grauprad passo caracter fimalgoritmo maiusc randi

abs eco inicio pausa caso fimenquanto mensagem repita

algoritmo enquanto int pi compr fimescolha minusc se

arccos entao interrompa pos copia fimfuncao nao sen

arcsen escolha leia procedimento cos fimpara numerico senao

arctan escreva literal quad cotan fimprocedimento numpcarac timer

arquivo exp log radpgrau cronometro fimrepita ou tan

asc faca logico raizq debug fimse outrocaso verdadeiro

ate falso logn rand declare função para xou 83


4 Tipos Predefinidos (Primitivos)

▰ Inteiro -2 28 130 2012


B Idade Quantidade Ano
▰ Real 3.14 1.72 9.5 -10.5
Pi Altura Nota1 Temperatura
▰ Caractere ”Z” ”Pedro” ”(98) 9.8865-
4002”
Letra Nome Telefone
▰ Logico Verdadeiro Falso (Booleano)
Aprovado Casado 84
Declaração de Variáveis

▰ As variáveis de um Programa devem ser reservadas/declaradas, usando


o comando VAR:

VAR
a,b,c : inteiro
c : real
d : logico

▰ O comando VAR delimita a cessão de declarações de variáveis.


85
Declaração de Variáveis

Var
Var a, b, c : inteiro
a : inteiro
b : inteiro // são equivalentes
c : inteiro

86
Atribuições de Valores

▰ O símbolo de atribuição : 
a 8
a8
ba b 89

bb+1

87
Atribuição de Variáveis

▰ A  10
▰ Nm  ”Maria do Carmo”

88
Entrada e Saída de Dados

▰ Entrada de Dados
Exp : leia (X)
leia (Nome,Idade)

▰ Saída de Dados
Exp :
escreva (X)
escreva (Nome, Idade)
escreva(”Boa Tarde!”)
89
Formatação das Saídas

Algoritmo "Boa Tarde 1"

Var
nome : caractere
peso : real

Inicio
escreva("Digita seu Nome : ")
leia(nome)

escreva("Digita seu Peso : ")


leia(peso)

escreval
escreval("Seu nome é ",nome:18,".")
escreval("Seu Peso é ",peso:7:1,".") 90
Fimalgoritmo
Algoritmo SWAP

▰ Faça o algoritmo SWAP que lê duas variáveis


inteiras a e b e que troca os seus conteúdos.
a

10
5

10
5

b
91
Algoritmo SWAP

▰ 1ª Solução: 10
5

a b 1 55

b a 2 b

Este algoritmo funciona (houve troca) ?


92
x
Algoritmo SWAP
10

▰ 2ª Solução: 85
10

x  a 1 7
5
10
a b 2 b
b x 3

Este algoritmo funciona (houve troca) ?


93
Algoritmo SWAP

a
▰ 3ª Solução: 85
15
10

a  a+b 1 7
5
10

b  a-b 2 b

a  a-b 3

Este algoritmo funciona (houve troca) ?


94
Algoritmo SWAP

Algoritmo "SWAP"
Var
▰ Esta é a solução mais genérica, a,b,x : real
pois se aplica para qualquer tipo Inicio
escreva("Entra com o valor de a: ")
de variáveis. leia (a)
escreva("Entra com o valor de b: ")
leia (b)
xa
ab
bx
escreva("a=",a," b=",b)
FimAlgoritmo
95
Algoritmo SWAP

▰ Análise das 3 soluções:

1ª solução não funciona


2ª solução funciona (menos processamento, mais memória), genérica
3ª solução funciona (menos memória, mais processamento)

96
Reflexão

▰ A Computação é um compromisso Tempo / Espaço!

Memória Processa-
(Espaço) mento
(Tempo)

97
Expressões Aritméticas

▰ Expressões aritméticas consistem em operadores aritméticos,


operandos numéricos (inteiros ou reais), parênteses e funções.

98
Expressões Aritméticas

▰ Exemplo:
8 - -2 + 4 * 2 ^ 3 - 7
8 - (-2 + 4) * 2 ^ 3 - 7

Como proceder 0ara calcular?

99
Operadores Aritméticos

• Ordem de prioridades dos operadores aritméticos:

Operação

() mais alta

- unário
^ Prioridade

* /
mais baixa
+ -

Em caso de dois operadores com a mesma prioridade aplica-se a prioridade


para a esquerda (i.e. o operador que vem em 1º). 100
Expressões Aritméticas
8 - -2 + 4 * 2 ^ 3 -
7
8 - -2 + 4 * 2 ^ 3 - 7
8 - -2 + 4 * 2 ^ 3 -
7
8 - -2 + 4 * 8 - 7
8 - -2 + 4 * 8 - 7
8 - -2 + 32 - 7
8 - -2 + 32 - 7
10 + 32 - 7
10 + 32 - 7
42 - 7 101
35
Expressões Aritméticas
8 - (-2 + 4) * 2 ^ 3 - 7
8 - (-2 + 4) * 2 ^ 3 -
7
8 - (-2 + 4) * 2 ^ 3 - 7
8 - 2 * 2 ^ 3 - 7
8 - 2 * 2 ^ 3 - 7
8 - 2 * 8 - 7
8 - 2 * 8 - 7
8 - 16 - 7
8 - 16 - 7
-8 - 7 102
-15
Expressões Aritméticas

5+3*(3–1)–2^5/4–1
5+3*(3–1)–2^5/4–1
5+3*2–2^5/4–1
5 + 3 * 2 – 32 / 4 – 1
5 + 6 – 32 / 4 – 1
5+6–8–1
11 – 8 – 1
3–1
2
103
Linearização das Expressões

▰ Reescreva essa equação em Portugol:

Matemática Tradicional Algoritmo

5*X^3+7*X^2-4*X-1
-6 [ 2
5x³+7x²−4x−1 -6*(2/3-(5-3)+1)
𝑁 1+ 𝑁 2
𝑀= M  (N1+N2)/2
2

104
Operadores Aritméticos

• Símbolo dos operadores aritméticos:

Operação Símbolo

Adição +
Subtração [unário e binário] -
Multiplicação *
Divisão /
Exponenciação (Potência) ^

Para avaliar uma expressão é preciso conhecer a ordem de prioridade dos operadores.
105
Expressões Aritméticas

▰ Avalia a seguinte expressão aritmética:

-6^2

36 -36

?
106
Expressões Aritméticas

▰ Avalia as seguintes expressões aritméticas:


8 - 3 + 4 9
Algoritmo "AE"
4 - 3 - 5 -4
Inicio
5 * 3 / 2 7.5 escreval(8 - 3 + 4)
escreval(4 - 3 - 5)
8 - -2 + 4 * 2 ^ 3 - 7 35 escreval(5 * 3 / 2)
escreval(8 - -2 + 4 * 2 ^ 3 - 7)
8 - (-2 + 4) * 2 ^ 3 – 7 -15 escreval(8 - (-2 + 4) * 2 ^ 3 - 7)
escreval((8-5) * 2 ^ 2 + 4)
(8-5) * 2 ^ 2 + 4 16
escreval(-5 - 3 - 6 * 2)
-5 - 3 - 6 * 2 -20 FimAlgoritmo’’’

107
Expressões Aritméticas
▰ Para testar a avaliação de uma expressão aritmética no
computador:
Algoritmo ”Avaliar_Expressão”
Var
x : real
Inicio
escreva(6 - 5 ^ 2)
// ou
/

x  6 -5 ^ 2
escreva(”X=”,x)
// ou
escreva(”A avaliação de 6-5^2 é: ”,6-5^2)
FimAlgoritmo
108
Outros Operadores Aritméticos

Operação Símbolo

Divisão Inteira \ div

Resto da Divisão Inteiro % mod

109
Operadores Aritméticos

Ordem de prioridades na aplicação dos operadores aritméticos:

Operação

() mais alta

-
^ Prioridade

* / div \ mod %
mais baixa
+ -

110
Expressões Aritméticas Algoritmo “Avaliação“
Var
a,b,c,x,y,z,t:inteiro
▰ Suponham que a3; b4 e c5.
Inicio
▰ Avalia as seguintes expressões: a3
b4
c5
xa+b*c x?
ya−b∗c%3 23 xa+b*c
y? 1
ya-b*c%3
z  -5 + 3 * 8 \ 7
z  -5 + 3 ∗ 8 \ 7 z ? -2 t5\3%2

1
t5\3%2 t? escreval("x= ",x)
escreval("y= ",y)
escreval("z= ",z)
escreval("t= ",t)
Fimalgoritmo 111
Expressões Relacionais

▰ São expressões que resultam em valores lógicos (verdadeiro ou falso) e


que são usadas para realizar testes, comparações, para tomar decisões nos
algoritmos.

▰ O valor de uma expressão relacional é booleana (Verdadeiro ou Falso)


por isso que elas são chamadas também de expressões lógicas ou
expressões booleanas.
112
Expressões Relacionais

▰ Operadores lógicos combinam resultados lógicos, gerando novos valores


lógicos (verdadeiro ou falso).

▰ Elas são compostas por dois operandos e um operador relacional:

113
Operadores Relacionais

Operação Símbolo

Igual a =

Diferente de <>

Maior que >

Maior ou Igual a >=

Menor que <

Menor ou Igual a <=

114
Expressões Relacionais

A8 B 6

A=B Falso

A<>B Verdadeiro

A>B Verdadeiro

A>=B Verdadeiro

A<B Falso

A<=B Falso
A-2 <= B Verdadeiro
A-2 >= B Verdadeiro
A-2 > B Falso
115
Expressões Lógicas

▰ Expressões Relacionais Compostas são expressões lógicas que


combinam expressões relacionais elementares usando operadores
lógicos AND, OR e NOT (E, OU e NÃO).

▰ Combinando operadores relacionais e operadores lógicos criamos


operações lógicas, que produzirão resultados lógicos (verdadeiro ou
falso).

116
Operadores Lógicos

▰ Operadores Lógicos:
E ( ^ ) Conjunção
OU ( v ) Disjunção
NÃO ( ! ) Negação
XOR () Disjunção Exclusiva / Ou Exclusivo

117
Expressões Lógicas

▰ Exemplos:
LEIS DE MORGAN
A10 B6 C5
NOT (A AND B) = NOT (A) OR NOT (B)
NOT (A OR B) = NOT (A) AND R NOT (B)
A <= B F
(A <> B) E (C=5) V

NÃO (A<=B) E (A-4=B) OUV(A=7)

118
Expressões Lógicas

▰ Para avaliar expressões relacionais compostas é precisa conhecer a


Tabela-Verdade. Tabela AND

P Operador Q Resultado

V E V V

V E F F

F E V F

F E F F

119
Expressões Lógicas

▰ Para avaliar expressões relacionais compostas é precisa conhecer a


Tabela OR
Tabela-Verdade.

P Operador Q Resultado

V OU V V

V OU F V

F OU V V

F OU F F

120
Expressões Lógicas

▰ Para avaliar expressões relacionais compostas é precisa conhecer a


Tabela XOR
Tabela-Verdade.

P Operador Q Resultado

V XOR V F

V XOR F V

F XOR V V

F XOR F F

121
Expressões Lógicas

▰ Para avaliar expressões relacionais compostas é precisa conhecer a


Tabela-Verdade. Tabela NOT

P Operador Resultado

V NÂO F

F NÂO V

122
Expressões Lógicas

123
Avaliação em Curto-Circuito

▰ É quando é possível determinar o resultado da expressão sem precisar


avaliar todos os operandos e/ou operadores:

▰ Exemplos: A  5, B  8 e C  10; D0


(A = B) E (B > C) [
(B<=B) OU (A>6)
(A>=2) E (B<10)

124
Expressões Lógicas

▰ Considere a seguinte atribuição de valores para as variáveis:


A=3, B=4, C=8.
A>3EC=8 ( )
A <> 2 OU B <= 5 ( )
A = 3 OU B >= 2 E C = 8 ( )
A = 3 E NÃO B <= 4 E C = 8 ( )
A <> 8 OU B = 4 E C > 2 ( )
B > A E C <> A ( )
A > B OU B < 5 ( )
125
Atribuição com Expressões

▰ Considere a seguinte atribuição Algoritmo "Avaliacao 2"


de valores para as variáveis:
Var
A 5, B  6: a,b:inteiro
c,d:logico
Avalia: Inicio
a5
C  B > A VERDADEIRO b6

D  B = 4 FALSO CB>A
D B=3

escreval("C= ",c)
escreval("D= ",d)
Fimalgoritmo 126
Tomada de Decisão

▰ São Comandos para escolha entre duas ações:

se <condição> entao
bloco de comandos (caso a condição é Verdadeira)
senao
bloco de comandos (caso a condição é Falsa)
fimse

A <condição> deve ser uma expressão lógica.


127
Tomada de Decisão

▰ Exemplo

Leia(N)
se N>=0 entao
escreva(N," é um Número Positivo.")
senao
escreva(N," é um Número Negativo.")
fimse
128
Tomada de Decisão

▰ A Cláusula SENAO é opcional:

Leia(N)
se Dinheiro >= 10 entao
se N%3=0 entao
Ir_ao_Cinema  Verdadeiro
escreva(N," é Múltiplo de 3.")
fimse
fimse

129
Ninhos de SE se <condição1> entao
se <condição2> entao
bloco de comandos (condição2 Verdadeira);
fimse
▰ É possível colocar um senao

se dentro de um outro, se <condição3> entao


bloco de comandos (condição3 verdadeira);
em vários níveis.
senao
bloco de comandos (condição3 falsa);
fimse
fimse
130
Escolha ... Caso

▰ Permite a escolha entre várias opções/ações:

escolha < expressão-de-seleção >


caso < exp 1 > , < exp 2 >, ... , < exp n >
< lista-de-comandos-1 >
caso < exp 1 > , < exp 2 >, ... , < exp n >
< lista-de-comandos-2 >
outrocaso
< lista-de-comandos-3 >
fimescolha 131
Escolha ... Caso

▰ Construa um algoritmo que solicite o nome e a idade de um atleta e


imprima a sua categoria: [05,10] Infantil, [11,15] Juvenil, [16,20]
Junior, e [21,25] Profissional.

132
Escolha ... Caso

Algoritmo "Classificação de Atletas” Escolha idade


var caso 5,6,7,8,9,10
nome, categoria : caractere categoria  "Infantil"
idade : inteiro caso 11,12,13,14,15
categoria  "Juvenil"
inicio caso 16,17,18,19,20
escreva("Nome do Atleta = ") categoria  "Junior"
leia (nome) caso 21,22,23,24,25
categoria  "Profissional"
escreva("Idade do Atleta = ") outrocaso
leia (idade) categoria  "INVALIDO"
Fimescolha

escreva("Categoria = ",categoria)
fimalgoritmo 133
Escolha ... Caso

Algoritmo "Times"
var time: caractere
inicio
escreva ("Entre com o nome de um time de futebol: ")
leia (time)

escolha time
caso "Flamengo", "Fluminense", "Vasco", "Botafogo"
escreval ("É um time carioca.")
caso "São Paulo", "Palmeiras", "Santos", "Corinthians"
escreval ("É um time paulista.")
outrocaso
escreval ("É de outro estado.")
fimescolha
fimalgoritmo
134
Escolha ... Caso

▰ Construa o algoritmo que pergunta a hora e de acorda com ela, faça


Boa Madrugada! (h<6), Bom Dia! (6h11), Boa Tarde! (12h17)
ou Boa Noite (h≥18).

135
Algoritmo "Horario!"
Escolha ... Caso Var
h : inteiro
Inicio
escreval("Informa a hora: ")
leia(h)
escreval
escolha h
caso 0,1,2,3,4,5
escreval("Boa Madrugada!")
caso 6,7,8,9,10,11
escreval("Bom Dia!")
caso 12,13,14,15,16,17
escreval("Boa Tarde!")
outrocaso
escreva("Boa Noite!")
fimescolha

Fimalgoritmo 136
Estruturas de Repetição

▰ Alguns pedaços de código precisam ser repetidos.

▰ Há três formas de fazer:

▻ Para ... Faca

▻ Enquanto ... Faca

▻ Repita ... Até

137
Para ... Faca

▰ Esta estrutura de repetição é usada quando se sabe a priori o número


exato de repetições.

para <variável de controle> de <valor inicial> ate <valor final> [passo <incremento>] faca
<lista de comandos>
fimpara

138
Para ... Faca

Algoritmo "Boa tarde 1"

▰ Faça o algoritmo Var


i,n:inteiro
que escreve ”Boa
Inicio
escreva("Entra com o valor de n: ")
tarde!” n vezes na leia(n)
Tela! escreval

para i de 1 ate n faca


escreval(i,". Boa tarde!")
fimpara
Fimalgoritmo
139
Para ... Faca

• Passo negativo

algoritmo "Numeros de 10 a 1"


var
j: inteiro
inicio
para j de 10 ate 1 passo -1 faca
escreval(j:2)
fimpara
fimalgoritmo
140
Para ... Faca

para i de 1 ate n faca para i  1 ate n faca


escreval(i) escreval(i)
fimpara fimpara

São equivalentes

141
Enquanto ... Faca

▰ É a estrutura de Repetição mais robusta.

enquanto <expressão lógica ou relacional> faca


<lista de comandos>
fimenquanto

Se logo a condição não é verifica, a lista de comandos não será executada!

142
Enquanto ... Faca Algoritmo "Quadrado 1"

Var
numero:inteiro

Inicio
escreva("Digita um número : ")
leia(numero)

enquanto numero<>0 faca


escreval("O quadrado de ",numero," é: ",numero^2)
escreval
escreva("Digita um número : ")
leia(numero)
fimenquanto

escreva("FIM DO PROGRAMA")
Fimalgoritmo
143
Enquanto ... Faca

Algoritmo "Boa Tarde 2"

Var
n,i:inteiro
Inicio
escreva("Digita um número : ")
leia(n)
i1
enquanto i<=n faca
escreval(i,". Boa tarde!")
i  i+1
fimenquanto
escreva("FIM DO PROGRAMA")
Fimalgoritmo
144
Repita ... Ate

repita

<lista de comandos>

ate <expressão lógica ou relacional>

O bloco de comandos do Repita é executado pelo menos 1 vez.


145
Repita ... Ate

Algoritmo "Quadrado 2"

Var
numero : inteiro

Inicio

repita
escreva("Digita um número : ")
leia(numero)
escreval("O quadrado de ",numero," é: ",numero^2)
escreval
ate numero = 0

escreva("FIM DO PROGRAMA")
Fimalgoritmo 146
Repita ... Ate

Algoritmo “Boa Tarde 3"


Var
n,i:inteiro
Inicio
escreva("Digita um número : ")
leia(n)
i0
repita
escreval(i,". Boa tarde!")
i  i+1
ate i=n
escreva("FIM DO PROGRAMA")
Fimalgoritmo
147
Estruturas de Repetição

1. Faça o algoritmo que mostra na tela todos os números pares até 21.
2. Faça o algoritmo que mostra na tela todos os números pares de 3 até 49.
3. Faça o algoritmo que mostra na tela todos os números pares no intervalo [a,b].
4. Faça o algoritmo que mostra na tela todos os números impares no intervalo [a,b].
5. Faça o algoritmo que calcula a divisão inteira n\p sem usar o operador \.
6. Faça o algoritmo que retorna o fatorial de um inteiro n (de duas formas diferentes).
7. Faça o algoritmo que mostra a série de Fibonacci até n.

148
Estruturas de Repetição

8. Elabore um algoritmo que vai ler n números fornecidos pelo usuário e que vai retornar
o menor número deles (Considere que o número zero indica o fim da entrada de dados).
9. Faça um algoritmo que, sem utilizar o operador de Exponenciação, realize a operação
XY, para qualquer X e Y fornecido pelo usuário.
10. Reescreva o algoritmo acima, utilizando as demais estruturas de repetição.

149
Estruturas de Repetição

11. Faça o Algoritmo que verifica se um número é Primo ou não.


12. Faça o Algoritmo que verifica se um número é Perfeito ou não (6 = 1 + 2 + 3).

13. Faça o Algoritmo que retorna a lista dos números primos até 100.
14. Faça o Algoritmo que retorna a lista dos números perfeitos ate 10000.

15. Faça o Algoritmo que retorna a lista dos números primos em um intervalo [a,b].
16. Faça o Algoritmo que retorna a lista dos números perfeitos em um intervalo [a,b].

150
Programação Modular

▰ A característica fundamental da programação estruturada é a


modularidade.

▰ Modularidade significa a estruturação do algoritmo/programa em


módulos, a partir da divisão do problema em subproblemas menores
e mais simples.

▰ Cada subproblema pode ser analisado de forma individual e


independente dos demais. 151
Programação Modular

▰ Vantagens da Modularidade:
▻ Administrar a complexidade dos problemas
▻ Permitir a reutilização de módulos
▻ Reduzir o tamanho do algoritmo
▻ Facilitar os testes
▻ Facilitar a compreensão / legibilidade e visualização do
algoritmo.
152
Refinamento Sucessivo (Top-Down)

▰ Essa técnica consiste na divisão do problema inicial em subproblemas, e


estes em partes ainda menores, sucessivamente, até que cada parte seja
descrita por meio de um algoritmo claro e bem-definido.

▰ Um algoritmo que resolve um determinado subproblema é denominado


subalgoritmo.

153
Subalgoritmos

▰ Subalgoritmos podem ser de dois tipos:

▻ Procedimento (não retorna valor de forma explícita) ou

▻ Função (retorna valor de forma explícita).

154
Subalgoritmos

Algoritmo “Nome do Algoritmo”

Var
// lista de declarações de variáveis
procedimento procedimento1(listadeargumentos)
Var declaraçãodasvariaveisdoprocedimento
Inicio
// ...
FimProceidmento

// declaração de outros procedimento

Inicio
procedimento1(listadeargumento)
FimAlgoritmo
155
Procedimentos

...
procedimento <nome_proc>(arg1:tipo, arg2:tipo, ... , argN:tipo)
<declaração de variáveis/constantes locais>
inicio
<bloco de comandos>
fimprocedimento

inicio
<nome_proc>(var1, var2, ... , varN) // Parâmetros
fimalgoritmo
156
Procedimentos

▰ Exemplo:
procedimento linha(c:caractere;n:inteiro)
Var i:inteiro
inicio
para i de 1 ate n faca
escreva(c)
fimpara

escreval
fimprocedimento

157
Procedimentos

▰ Observação:

Quando não têm argumentos, as parênteses não são obrigatórias, tanto


no cabeçalho do procedimento, como na chamada.

158
Procedimentos

Algoritmo "Procedimentos"
Var // Bloco Principal
tam : inteiro
car : caractere Inicio
escreva("Entra com o caractere: ")
procedimento linha(c:caractere;n:inteiro) leia(car)
var i:inteiro
inicio escreva("Entra com o tamanho da linha: ")
para i de 1 ate n faca leia(tam)
escreva(c)
fimpara linha(car,tam) // chamada do Procedimento
escreval Fimalgoritmo
fimprocedimento

159
Procedimentos

// Bloco Principal
Algoritmo "Procedimentos"
Inicio
Var escreva("Entra com o caractere: ")
tam : inteiro leia(car)
car : caractere
escreva("Entra com o tamanho da linha: ")
procedimento linha(c:caractere;n:inteiro) leia(tam)
var i:inteiro para i de 1 ate tam faca
inicio linha(car,i) // chamada do procedimento
para i de 1 ate n faca fimpara
escreva(c)
fimpara para i de tam ate 1 passo -1 faca
linha(car,i) // outra chamada do procedimento
escreval fimpara
fimprocedimento Fimalgoritmo
160
Subalgoritmos
P1

▰ Um subalgoritmo, ou seja um procedimento, pode ser


P2
chamado por outro subalgoritmo / procedimento. P1

▰ Por convenção, um subalgoritmo deve ser declarado BP

acima dos módulos que o chamam. P1

161
Procedimentos

▰ Cria os seguintes procedimentos: *


**
▻ Desenhar uma quadrado de tamanho n usando ”*” ***
*****
▻ Desenhar um triangulo usando o caractere ”*”
*******

162
Funções
...

funcao <nome_func>(arg1:tipo, arg2:tipo, ... , argN:tipo) : tipo_funcao


<declaração de variáveis/constantes locais>
inicio
<bloco de comandos>
retorne <variável de retorno>
fimfuncao

inicio
var ← <nome_func>(var1, var2, ... , varN)
Fimalgoritmo 163
Funções

▰ Cria as seguintes funções:


▻ Função de potenciação, em que os dados de entrada são: base e
expoente (inteiros).
▻ Função Tábua de multiplicação (para qualquer número de 5 até
9).

164
Predicados

▰ Uma função que retorna um valor de tipo LÓGICO é chamada


PREDICADO.

▰ Exemplo:

par(n), perfeito(n), primo(n), maior(a,b), pai(X,Y),


etc.

165
Recursividade

▰ Uma função recursiva é uma função que chama ela mesma


(definida a partir dela mesma).

166
Recursividade Vs. Iteração

▰ Exemplo:

▻ Fatorial Definição Iterativa:

Fatorial (n) = 1 x 2 x 3 x ... x n

Definição Recursiva:

Fatorial (n) = n x fatorial(n-1)

167
Recursividade
Algoritmo "Fatorial!"
Var
i,n,fat : Inteiro
Inicio
escreva("Entra com o valor de n: ")
leia(n)
// Versão Iterativa
fat  1
para i de 1 ate n faca
fat  fat * i
fimpara

escreval("O Fatoriald e ",n," é: ",fat)


Fimalgoritmo
168
Recursividade
Algoritmo "Fatorial Função Iterativa"
Var
n : Inteiro
funcao fat (n:inteiro):inteiro
Var f,i:inteiro
inicio
i1
f1
para i de 1 ate n faca
f  f*i
fimpara
retorne (f)
fimfuncao
Inicio
escreva("Entra com o valor de n: ")
leia(n)
escreval("O Fatoriald e ",n," é: ",fat(n)) 169
Fimalgoritmo
Recursividade
Algoritmo "Fatorial Função Recursiva"
Var
n : Inteiro
funcao fat (n:inteiro):inteiro
inicio
se (n=0) ou (n=1) entao
retorne 1
senao
retorne (n * fat(n-1))
fimse
fimfuncao
Inicio
escreva("Entra com o valor de n: ")
leia(n)
escreval("O Fatoriald e ",n," é: ",fat(n))
170
Fimalgoritmo
Variáveis Globais Vs. Locais

▰ Variáveis Globais.
São as variáveis declaradas na parte inicial do algoritmo (VAR). Elas têm
validade (”enxergadas”) em todo algoritmo i.e. qualquer módulo pode usá-las.

▰ Variáveis Locais
São as variáveis declaradas dentro de um módulo (Procedimento ou função).
Elas têm validade (“enxergadas”) apenas dentro daquele bloco.
▰ Dentro de um bloco, se tiver algum conflito (uma variável local tendo o
mesmo nome que uma variável global), a variável local tem prioridade.
171
Variáveis Globais Vs. Locais

algoritmo "Global Local"


var
a:inteiro // Variável Global

procedimento p
var a:inteiro // Variável Local
inicio
a8
escreva(a)
fimprocedimento
inicio
a  10
p
escreva(a)
fimalgoritmo 172
Variáveis Globais Vs. Locais

▰ As variáveis locais são variáveis temporárias, elas são criadas quando o


módulo (procedimento ou função) é chamado e são removidas ao sair
do módulo.
▰ Usar raramente as variáveis globais (pois carregam a memória)

173
Passagem de Parâmetros

▰ Acontece de duas formas:


▻ Por Valor
▻ Por Referência

174
Passagem de Parâmetros

algoritmo "Passagem de Parâmetros" inicio O Que você


var escreva("Entra com um número: ") Observa
a:inteiro leia(a) após a
execução
procedimento ppv(x:inteiro) // Passagem de Parâmetros por Valor deste
inicio ppv(a) código ?
x  x*2 escreval("a = ",a)
escreval("X = ",x)
fimprocedimento escreval

procedimento ppr(var x:inteiro) // Passagem de Parâmetros por Referência


inicio ppr(a)
x  x*2 escreval("a = ",a)
escreval("X = ",x) Fimalgoritmo
fimprocedimento
175
Passagem de Parâmetros

▰ Passagem por Valor:


Apenas os valores são repassados para os parâmetros

▰ Passagem Por Referência


É o endereço da variável que é repassado aos parâmetros. Assim, qualquer
alteração da variável dentro do módulo se repercute na variável externa que foi
repassada.
▰ Para fazer passagem por referência basta usar a palavra VAR que antecede a lista
dos parâmetros.

176
Passagem de Parâmetros

Algoritmo "Passagens de Parâmetros" inicio


escreva("Digita o 1º número: ")
var leia(a)
a,b,res : inteiro escreva("Digita o 2º número: ")
leia(b)
funcao soma (x,y:inteiro):inteiro
res  soma(a,b)
inicio
escreval
retorne x + y
escreval("A Soma é: ",res)
fimfuncao
fimalgoritmo

177
Passagem de Parâmetros

algoritmo "Passagens de Parâmetros" inicio


escreva("Digita o 1º inteiro: ")
var leia(a)
a,b,res : inteiro escreva("Digita o 2º inteiro: ")
procedimento soma (x,y:inteiro; var r:inteiro) leia(b)

inicio soma(a,b,res) // passagem por valro

r  x+y escreval
fimprocedimento escreval("A Soma é: ",res)
fimalgoritmo

178
Procedimentos e Funções Predefinidas

▰ Limpatela

179
Procedimentos e Funções Predefinidas

Função Descrição
Abs (valor : real) : real Valor absoluto

Arccos (valor : real) : real Arco cosseno

Arcsen (valor : real) : real Arco seno

Arctan (valor : real) : real Arco tangente

Asc (s : caracter) : inteiro Retorna o código ASCII

Compr (c : caracter) : inteiro Retorna o tamanho de c

Copia (c : caracter , posini, posfin : inteiro) : Copia um determinado trecho (substring) do


caracter caractere

180
Procedimentos e Funções Predefinidas

Função Descrição
Cos (valor : real) : real Cosseno

Cotan (valor : real) : real Co-tangente

Exp (<base>,<expoente>) Potenciação

Grauprad (valor : real) : real Converte grau para radiano

Int (valor : real) : inteiro Converte um real em inteiro

Log (valor : real) : real Logaritmo de base 10

Logn (valor : real) : real Logaritmo natural (ln)

181
Procedimentos e Funções Predefinidas

Função Descrição
Maiusc (c : caracter) : caracter Converte em Maiúscula

Minusc (c : caracter) : caracter Converte em Minúscula

Numpcarac (n : inteiro ou real) : Converte um numero inteiro


caracter ou real para caractere
Pi : real Valor de Pi

Pos (subc, c : caracter) : inteiro Retorna a posição do


caractere na string.
Quad (valor : real) : real Elevado ao quadrado

Radpgrau (valor : real) : real Converte Radiano para grau.

182
Procedimentos e Funções Predefinidas

Função Descrição
Raizq (valor : real) : real Raiz quadrada

Rand : real Gerador de números


aleatórios entre 0 e 1
Randi (limite : inteiro) : inteiro Gerador de números inteiros
aleatórios com um limite
determinado
Sen (valor : real) : real Seno

Tangente
Tan (valor : real) : real

183
Algoritmo "Caracteres!"
Procedimentos e Funções Predefinidas
Var
nome, sobrenome : Caractere
quant_caracteres, local_espaco : Inteiro

Inicio
escreva("Informa o nome: ")
leia(nome)

escreval

quant_caracteres  Compr (nome)


escreval("Qtd Caracterre: ",quant_caracteres)

local_espaco  POS (" ",nome)


escreval("Local Espaço: ",local_espaco)

sobrenome  Copia (nome, local_espaco + 1,quant_caracteres)


escreva("Seu sobrenome é ", sobrenome)
184
Fimalgoritmo
Procedimentos e Funções Predefinidas

Algoritmo "Caracteres!"

Var
vi : Inteiro
vr : Real

Inicio
escreva("Informa um número Real: ")
leia(vr)

escreval

vi  int (vr)
escreval("O valor em Inteiro é: ",vi)
Fimalgoritmo
185
▰ Dica:

▻ Pressionando (CTRL+J) o
Visualg mostra uma Lista de
funções predefinidas.

186
Procedimentos e Funções

▰ Calcula as duas seguintes funções:

S = 1 + ½ + 1/3 + ¼ + 1/5 + ... + 1/N

S = 1 + 1/1! + ½! + 1/3! + ... + 1 /N!

187
Procedimentos e Funções

1. Utilizando os conceitos de procedimentos e funções,


desenvolva um algoritmo que calcule, a partir de 2 números
inteiros P e M, a combinação de M elementos tomados P a P,
conforme a expressão:
𝑷 ❑ 𝑴!
𝑪𝑴 =
𝑷 !( 𝑴 − 𝑷) !

188
Procedimentos e Funções

2. Utilizando os conceitos de procedimentos e funções, construa


um algoritmo que determine, para uma série de valores
inteiros, quantos desses números são maiores que a média do
conjunto.

189
Procedimentos e Funções

▰ Cria as seguintes Funções:

• AreaQuadrado • PerimetroQuadrado
• AreaRetangulo • PerimetroRetangulo
• AreaCirculo • PerimetroCirculo

• VolumeCubo
• VolumeParalelipedo
• VolumeCilindro

190
Procedimentos e Funções

▰ Cria um procedimento Menu para chamar essas funções de


acordo com a opção do usuário.

191
Vetores e Matrizes

▰ São estruturas homogêneas unidimensionais (Vetores) ou


multidimensionais (Matrizes).
▰ São necessários para armazenar muitas informações de mesmo tipo.

▰ Por exemplo, para armazenar os nomes de 20 alunos, não é prático


criar 20 variáveis: nome1, nome2, nome3, ..., nome20.
▰ Basta criar um vetor nome i.e. uma variável nome, com 20 índices.

192
Vetores

▰ Vetores são variáveis indexadas unidimensionais, referenciadas


por um único índice.

▰ A sintaxe para declaração é:

<identificador> : vetor [<tamanho>] de < tipo >

Tamanho [VI..VF] onde Vi = Valor inicial do índice e VF é o valor Final do índice.

193
Vetores

▰ Exemplo:
NOME : VETOR [1..20] DE CARACTERE
IDADE : VETOR [1..20] DE INTEIRO

Isso é equivalente à declaração de 40 variáveis: nome[1], nome[2], nome[3],


nome[4], nome[5], ..., nome[20] e idade[1], idade[2], idade[3], idade[4],
idade[5], ... Idade[20].

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Nome

Idade 194
Vetores

▰ Para acessar e atribuir um valor a um elemento do vetor basta


especificar o seu índice:

< identificador>[<posição>]  <valor>

195
Vetores

▰ Exemplos:
nome[1]  "Andrea"
idade[1]  22

nome[2]  "Carlos"
idade[2]  32

nome[3]  “Lucas”
idade[3]  idade[1]+2

i4
nome[i]  “Marina“
Idade[i]  20 196
Vetores

▰ Exemplos:

para i de 1 ate 20 faca


idade[i]  20
fimpara

197
Vetores

▰ Exemplos:

para i de 1 ate 20 faca


escreva(“Digita a idade do aluno ”,i,”: ”)
leia(idade[i])
fimpara

198
Vetores

▰ Exemplos:

para i de 1 ate 20 faca


escreva(“Digita o nome do aluno ”,i,”: ”)
leia(nome[i])
escreva(“Digita a idade de ”,nome[i],”: ”)
leia(idade[i])
fimpara

199
Vetores

▰ Exercício:
▻ Faça o algoritmo que cadastra nomes, preços e estoques de 10
produtos de uma loja.
▻ Calcula a média dos preços.
▻ Encontra o produto mais caro.
▻ Quantos produtos custam mais de R$ 1.000,00?
▻ Aumenta os preços dos produtos em 10%.
▻ Quais os produtos que precisamos de uma reposição de estoque
(estoque ≤ 10). 200
Matrizes

▰ São variáveis indexadas bidimensionais e são referenciadas por


dois índices,

<identificador> : vetor [<tamanho1>,<tamanho2>] de < tipo >


Tamanho [VI..VF]=> Vi= Valor inicial do índice e VF valor Final do
índice.

201
Matrizes

▰ Exemplo:

M : VETOR [1..2,1..3] DE INTEIRO


1 2 3
1 M[1,1] M[1,2] M[1,3]
2 M[2,1] M[2,2] M[2,3]

▰ Isto equivalente à declaração de 6 variáveis:


▻ M[1,1], M [1,2], M[1,3] (1ª linha) e
▻ M[2,1], M[2,2], e M[2,3] (2ª linha).
202
Matrizes

▰ Para se atribuir um valor a um elemento do vetor devemos utilizar o


seguinte padrão:

< identificador>[<posição 1>,<posição 2>]  <valor>

M[2,1]  25

203
Matrizes

▰ Cria uma Matriz A de 3 linhas e 4 colunas de inteiros.

▻ Preenche a matriz
▻ Encontra o maior valor da Matriz
▻ Multiplica a matiz A por 2
▻ Calcula o determinante de A.

204
Matrizes

▰ Cria uma Matriz Nota de 4 linhas e 5 colunas de reais onde a 1ª linha


registra as notas do 1º bimestre de 5 alunos, a 2ª linha registra as notas
do segundo bimestre, e a 3ª linha registra as notas do 3º bimestre.

▻ Preenche a matriz cadastrando as notas dos alunos.


▻ Preenche a 4ª linha da matriz que deve registrar a média de cada aluno.
▻ Encontrar o índice e a média do melhor aluno.
▻ Qual é a média da turma.

205
Matrizes

▰ Suponham o seguinte vetor Nome que cadastra os nomes dos 5 alunos:


Nome : Vetor [1..5] de Caractere
▰ Faca o algoritmo que preenche este vetor com os nomes dos alunos.
▰ Mostrar a relação dos alunos aprovados (seus nomes e médias).
▰ Mostrar o nome do melhor alunos.
▰ Quantos alunos tirarem a nota 10.
▰ Somar 2 pontos a cada aluno.

206
Matrizes

▰ Este algoritmo funciona para uma turma de 5 alunos.

▰ Reescreve o algoritmo para turmas de até 50 alunos.

207
Registros

▰ Variáveis, Vetores e Matrizes são estruturas de dados


homogêneas (mesmo tipo).

▰ Isso não é adequado para representar estruturas heterógenas


como por exemplo Produtos, Livros, Alunos, etc.

208
Registros

▰ Registro é um tipo e dados composto e heterogêneo que permite


de agrupar vários tipos de informações em uma única
representação.

▰ Para criar um novo tipo, usamos a palavra Tipo.

209
Registros

▰ Por exemplo, Livro é descrito por um:


Código, Titulo, Autor, Editora, Gênero e Preço.

Codigo : Inteiro
Titulo : Caractere
Autor : Caractere
Editora : Caractere
Genero : Caractere
Ano : Inteiro
Preco : Real

210
Registros

▰ Para criar um novo tipo, usamos a palavra Tipo.

211
Registros: Declaração

algoritmo "Livros"
tipo
Livro = Registro
código : inteiro
titulo : caractere
autor : caractere
editora : caractere
gênero : caractere
preco : real
fimregistro
var
l1,l2 : livro // declaração de 2 livros l1 e l2

inicio
... 212
Registros: Acesso

▰ Acesso aos Campos dos Registros:

L1.Codigo  120
L1.Titulo  “The Singularity is Near”
L1.Autor  “Ray Kurzweil”
L1.Genero  “Ficção Científica”
L1.Editora  “Penguin Group” L2.Codigo  125
L1.Ano  2005 L2.Titulo  “Iniciação à Lógica Matemática”
L1.Preco  65,50 L2.Autor  “Alencar Filho, Edgard”
L2.Genero  “Computação”
L2.Editora  “Nobel”
L2.Ano  2002
L2.Preco  45,00
213
Registros

▰ Para armazenar/cadastrar vários livros, podemos pensar em uma


estrutura de 6 vetores (1 vetor para cada informação):

Codigo : VETOR [1..50] DE Inteiro


Titulo : VETOR [1..50] DE Caractere
Autor : VETOR [1..50] DE Caractere
Editora : VETOR [1..50] DE Caractere
Genero : VETOR [1..50] DE Caractere
Ano : VETOR [1..50] DE Inteiro
Preco : VETOR [1..50] DE Real

Mas isto não é nada prático 214


Registros
algoritmo "Livros"
▰ O correto é criar tipo
um Vetor de Livro = Registro
Registro. codigo : inteiro
titulo : caractere
▻ Livros é um autor : caractere
genero : caractere
Vetor
ano : inteiro
▻ preco : real
Livro é um fimregistro
Registro var
Livros : VETOR [1..50] DE Livro

inicio
215
fimalgoritmo
Registros: Leitura
para i de 1 ate n faca
algoritmo "Livros" escreva("Código: ")
leia(livros[i].codigo)
tipo
Livro = Registro escreva("Título: ")
codigo : inteiro leia(livros[i].titulo)
titulo : caractere escreva("Autor: ")
autor : caractere leia(livros[i].autor)
genero : caractere
ano : inteiro escreva("Genero: ")
preco : real leia(livros[i].genero)
fimregistro escreva("Ano: ")
var leia(livros[i].ano)
livros : vetor [1..50] de livro
i,n:inteiro escreva("Preço: ")
leia(livros[i].preco)
inicio escreval
escreva("Quantos Livros para cadastrar: ") fimpara
leia(n) fimalgoritmo
216
Registros: Exercícios

▰ Faça o programa completo, com menu, para o gerenciamento de


um Supermercado: Cadastro de Produtos e Gestão de Estoque
(Cadastrar, Mostrar/Listar, Pesquisar, Alterar, Remover, Inserir,
etc.).

217
Arquivos

▰ É importante armazenar dados em arquivos.

▰ VisuAlg permite o armazenamento de dados em um arquivo-


texto.

218
Arquivos

▰ Declaração / Criação:

Arquivo <nome-do-arquivo>

▰ O Nome deve ser especificado entre aspas duplas.

▰ O comando arquivo deverá estar na seção de declarações.

▰ Somente um comando arquivo pode ser empregado em cada


pseudocódigo.
219
Arquivos

▰ Se o caminho do arquivo não for especificado, o VisuAlg procura este


arquivo na pasta de trabalho corrente (geralmente, é a pasta onde o
programa VISUALG.EXE está instalado).

▰ O comando arquivo não prevê uma extensão padrão; portanto, a


especificação do nome do arquivo deve ser completa, inclusive com sua
extensão (por exemplo, .txt, .dat, etc.).
220
Arquivos

▰ Se o arquivo não existe, o VisuAlg cria o arquivo e faz uma leitura de dados por
meio da digitação (Teclado), armazenando os dados lidos neste arquivo, na ordem
em que forem lidos.

▰ Se o arquivo existe, o VisuAlg obterá os dados deste arquivo até chegar ao seu fim.
Daí em diante, fará as leituras de dados por meio da digitação.

221
Arquivos

▰ Exemplo: algoritmo "Lendo do Arquivo"


arquivo "Teste1.dat"
var
i: inteiro
ln : caractere

inicio
para i de 1 ate 7 faca
leia (ln)
fimpara
fimalgoritmo
222
Arquivos

▰ Exemplo:

223
6
PROJETOS

224
Projeto 1

▰ P1

▰ P2

▰ P3

225
7
VISUAL G

226
Auto Digitação

▰ Basta escrever uma abreviatura da palavra-chave ou do comando e teclar


Ctrl-Espaço que o Editor traz o modelo de comando completo.

227
Auto Digitação
Abreviação Ctrl - Esqueleto do Comando
Comando / Palavra- Espaço
Chave
algoritmo "semnome"

! var

inicio

Fimalgoritmo
// Disciplina : [Linguagem e Lógica de programa çao]

# // Professor(a):
// Descrição : Aqui você descreve o que o programa faz!
(função)
// Autor(a) : Nome do(a) aluno(a)
// Data atual :

228
Auto Digitação

Abreviação Ctrl - Esqueleto do Comando


Comando / Palavra-Chave Espaço
see se entao
fimse
ses se entao
senao
fimse
esco escolha
caso
outrocaso
fimescolha

229
Auto Digitação

Abreviação Ctrl - Esqueleto do Comando


Comando / Palavra-Chave Espaço
par para de 1 ate faca
Fimpara
parp para de ate passo faca
Fimpara
enq enquanto faca
Fimenquanto
rep repita

Ate

230
Auto Digitação

CTRL J – Sugestões de Digitação


(Autocomplement)

231
Comandos

▰ Execução Normal F9

▰ Execução Passo a Passo F8

▰ Terminar a Execução Ctrl-F2

232
8
CONCLUSÃO

233
Conclusão

▰ Dicas para construir um algoritmo mais claro e legível:


▻ Comentários de cabeçalho (descreve sucintamente o algoritmo) e de linha
(descreve a ação realizada por uma determinada linha de comando);
▻ Identificadores representativos;
▻ Endentação das estruturas lógicas do algoritmo;
▻ Linhas em branco entre estruturas lógicas complexas (ex: declaração de
variáveis, ninhos de SE, estruturas de controle, etc.)I
234
BIBLIOGRAFIA

▰ Alencar Filho, Edgard. Iniciação à Lógica Matemática. Ed. Nobel, 2002.


▰ Lages & Guimaraes. Algoritmos e Estrutura de Dados. Ed. LTC, 1994. 3.
▰ Pinto, Wilson Silva. Introdução ao Desenvolvimento de Algoritmos e Estrutura de Dados. Ed.
Érica, 1991.
▰ Boratti, I. C. Introdução à Programação – Algoritmos. 2ª edição, Editora Visual Books.
▰ Farrer, C. G. B., Faria, E. C. Algoritmos Estruturados. 3ª edição, editora LTC.
▰ https://sites.google.com/site/unipliconstrucaodealgoritmos/aulas/aula-2
▰ http://www.educadores.diaadia.pr.gov.br/arquivos/File/setembro2012/matematica_artigos/artigo
_rodrigues_magalhaes.pdf

235
OBRIGADO !
Sofiane Labidi
098 9.8860-6410
soflabidi@outlook.com
@slabidi
236
RECURSOS

237
Recursos
▰ Tools

▻ Google Classroom
▻ VisualG
(Google Sala de Aula)
▻ Python
▻ Kahoot
▻ Pseudocode (Mobile)
▻ Mentimiter
▻ TesteQI
▻ Google Meet
▻ Google Forms

238
Recursos

239
Sala de Aula Virtual

▪ Acessar o Classroom, pelo aplicativo


ou (Google Classroom) pelo site
(classroom.google.com).
▪ Se inscreve na sala “Fundamentos de
Computação” com seu Código.
apertando o botão “+” e em seguida em
“Participar da turma”

flqewiv
240

https://classroom.google.com/c/NjE5OTQwNDk0MjMz?cjc=
Tecnologia Educacional

▪ Acessar o Kahoot pelo aplicativo


(kahoot!) ou pelo site (kahoot.it).
▪ Entrar como Estudante e Informar
Place your screenshot here
o
Pin para iniciar o challenge (cada
challenge tem um pin específico que
será informado na hora).
▪ Para a criação de challenges acessar o
site: create.kahoot.it
241
Tecnologia Educacional

▪ Acessar o Mentimeter pelo


aplicativo (mentimieter) ou pelo
site (www.menti.com).
▪ Para criar:
www.mentimeter.com
▪ Concorrentes:
▫ Socrative e Poll Everywhere

242
Tecnologia Educacional

▪ O Google Meet é um sistema de vídeo


conferência em nuvem da Google, via
web ou via aplicativo, de até 250
pessoas na versão gratuita
(Android/iOS).
▪ Pelo Aplicativo ou pelo Site:
https://meet.google.com/
▪ Para ingressar em um meeting basta
aceitar o convite ou informar o Meeting
ID.
243

Você também pode gostar