Você está na página 1de 231

Fundamento de Computação:

Algortimos de Programação
Prof. Dr. Sofiane Labidi
Sofiane Labidi, PhD.
soflabidi@outlook.com
Wa. 098 9.8867-0046
@slabidi

2
Overview
▰ Conceitos ........................................................................................ 04
▰ Exemplos ......................................................................................... 14
▰ Fases de Desenvolvimento ................................................................. 23
▰ Formas de Representação .................................................................. 45
▰ Portugol .......................................................................................... 63
▻ Variáveis ............................................................................................. 71
▻ Atribuição de Valores ............................................................................ 79
▻ E/S ..................................................................................................... 81
▻ Expressões Aritméticas ........................................................................ 90
▻ Expressões Relacionais ........................................................................ 101 9
Overview
▻ Expressões Lógicas ............................................................................. 105
▻ Tomada de Decisão ............................................................................. 116
▻ Estruturas de Repetição ........................................................................ 126
▻ Programação Modular .......................................................................... 140
▻ Vetores e Matrizes .............................................................................. 181
▻ Registros ........................................................................................... 197
▻ Arquivos ............................................................................................ 206
▰ Projetos ........................................................................................ 212
▰ Conclusão ...................................................................................... 221
4
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, tomar uma banho, etc.

6
Definição

▰ Algoritmo é o passo a passo para resolver um


problema.
▰ Ele detalha as ações executados 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

▰ Desenvolva o algoritmo ”Fritar Ovo”!


(é o algoritmo mais famoso do mundo!)

10
Algoritmo “Fritar Ovo”

▰ Instruções/Ações:
▻ “ligar fogão”
▻ “quebrar ovos”
▻ “pôr frigideira no fogo”
▻ “bater ovos”
▻ “pôr sal”
▻ “pôr óleo/manteiga na frigideira”
▻ “fritar ovos batidos”
11
Algoritmo “Fritar Ovo”

▰ Sequência Lógica:

▻ Se executarmos a instrução (ação) “fritar ovos


batidos” antes da instrução “quebrar ovos“, a tarefa
“fazer omelete“ não será realizada (i.e. não
atingiremos o nosso objetivo).

12
Algoritmo “Fritar Ovo”

1. “Pôr frigideira no fogo”


2. “Ligar fogão”
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 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

15
Receita de Bolo

▰ A receita de um bolo
é um Algoritmo.

16
Receita de Bolo de Chocolate

Ingredientes Preparo
▰ 1 xícara (de chá) de óleo ▰ Coloque o óleo, leite, ovos, chocolate e açúcar no liquidificador.
▰ 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 mais ou menos 30 minutos (não abra
o forno nos primeiros 20 minutos).
▰ Depois que ele estiver crescido, enfie o palito, se ele sair limpo, está bom.

17
Exercícios

▰ Desenvolva os seguintes algoritmos:


▰ ”Lavar o Cabelo”
▰ ”Torre de Hanói”
▰ ”Tomar Banho”
▰ ”Trocar Lâmpada”
▰ ”Trocar o Pneu de um Carro”
▰ ”Estudar para Prova”
▰ ”Fazer Baliza (estacionar o 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
“Torre de Hanói”

▰ 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

20
“Trocar Pneu”

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

21
Algoritmos Não Computacionais

▰ Cria esses dois algoritmos:


▻ Colocar Um Elefante na Geladeira.
▻ Colocar uma Girafa na Geladeira.

22
Raciocino Lógico Matemático

▰ Resolva os seguintes Problemas:


▻ Do Carteiro
▻ Das Maças
▻ Da Geladeira (Girafa e Leão)
▻ Outros.

23
3
FASES DE DESV. DE ALGORITMOS

24
Problema?

▰ Problema é qualquer situação que exija uma forma de


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

25
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? É possível fazer uma
Problema
figura, um esquema ou um diagrama? É possível estimar a resposta?
2 Elaborar um Plano
Qual é o seu plano para resolver o problema? Que estratégia você tentará desenvolver? Você se
lembra de um problema semelhante que pode ajudá-lo a resolver este? Tente organizar os dados em
tabelas e gráficos. Tente resolver o problema por partes (dividir para conquistar)

3 Executar o Plano
Execute o plano elaborado, verificando-o passo a passo. Efetue todos os cálculos indicados no
plano. Execute 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? É
Verificação (feedback) possível usar o método empregado para resolver problemas semelhantes?
26
  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?
ou 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? a

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 p um caminho
diferente? 27
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 uma
Aluno.

28
  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 média ponderada em que os fatores são as médias
Dados? 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 determinada pelo cálculo da média ponderada.
incógnita?

29
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
poderã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 Os mesmos do Item “2.2”


perca de vista o objetivo. Quais
os meios para esse fim?

2.4 Utilizou todos os dados? Sim


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

3.2 É possível verificar claramente que o Sim


passo está correto? Basta realizar o que eu foi indicado no item 3.1.

4 Feedback da 4.1 É possível verificar oi 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?

31
Elaboração do Plano

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


▰ Entradas
▰ Processamento
▰ Saída

▰ IPO Chart (Input / Processing / Output)


32
Processamento de Dados

ENTRADA PROCESSAMENTO SAÍDA

33
Processamento de Dados

Controle do Desempenho do Sistema

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

Armazenamento de Recursos de Dados

34
IPO Chart

• Dividir para Conquistar! / Administrar a complexidade!

INPUT PROCESSIN OUTPUT


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

35
IPO Chart

INPUT PROCESSIN OUTPUT


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

36
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 Tela e se o Aluno é
Teclado
checar Aprovação) Aprovado ou não

37
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 nas
saídas especificadas;
▰ Construção do algoritmo.

38
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

39
Média Final de Aluno

PROCESSING OUTPUT
INPUT

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

40
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 41
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

42
Exercício 2

▰ Dando o peso e a altura de uma pessoa, verificar se ela está normal, com
sobrepeso ou obesa!
A definição da obesidade depende do IMC da pessoa (IMC=P/A²
kg/m²)
▻ IMC < 25,0 Normal
▻ 25,0 ≤ IMC ≤ 29,9 Sobrepeso
▻ 30,0 ≤ IMC ≤ 34,9 Obesidade Grau I
▻ 35,0 ≤ IMC ≤ 39,9 Obesidade Grau II
▻ IMC ≥ 40,0 Obesidade Grau III
43
Exercício 3

▰ Tendo como dados de entrada a altura de uma pessoa, construa um


algoritmo que calcule seu peso ideal, utilizando a seguinte fórmula:

Peso Ideal = (72.7*altura) – 58

44
Exercício 4

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


agosto, faça um algoritmo que mostre 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.

45
4
FORMAS DE REPRESENTAÇÃO

46
FORMAS DE REPRESENTAÇÃO

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


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

47
Narrativa

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


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

▰ Pode ser gravada em áudio ou transcrita em texto.

48
Narrativa

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

▰ Desvantagens:

▻ A linguagem natural é imprecisa (possibilita ambiguidades).

▻ Proporciona maior trabalho na codificação.

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


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

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

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

50
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.

51
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)

Decisão / Teste

52
Fluxo de Dados
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)

Decisão / Teste

53
Fluxo de Dados
Início

N1, N2

Média 
(N1+N2)/2

M>=7

“Aprovado” “Reprovado”

Fim

54
Diagrama de Chapin Nassi-Shneiderman

Início
Num, AbsNum : Inteiro
Leia(Num)
Num<0

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

55
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/

56
LucidChart

57
Editores de Fluxogramas

LucidChart

58
Pseudocódigo

▰ Pseudocódigo
ou Português Estruturado.

59
Portugol

▰ Linguagem especial 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.

60
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.
61
Fluxograma Portugol

INICIO
FIM

LEIA()
ESCREVA()

Ordem dos comandos


(identificação dos fluxos)

Todas as Operações

SE
ENTAO
SENAO 62
FIMSE
VisualG

▰ É um editor e interpretador de pseudocódigos


escritos em português estruturado, bastante
utilizado por quem está aprendendo lógica de
programação.

▰ http://www.inf.ufsc.br/~bosco.sobral/ensino/ine5201/Visualg2_
manual.pdf
▰ https://www.devmedia.com.br/introducao-ao-visualg/25748

63
5
PORTUGOL

64
Dica de Aprendizagem

Algoritmo NÂO se Aprende Algoritmo se Aprende

Copiando Algoritmos Construindo Algoritmos

Estudando Algoritmos Prontos Testando Algoritmos

65
Português Estruturado

▰ Pseudocódigo
▰ Portugol
▰ PseudoLinguagem

66
Estrutura de um Algoritmo

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

67
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.
68
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. 69
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.
70
Memória Central

▰ Tanto os programas executados pelo computador, bem


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

71
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.
72
Variáveis
A 20 @1

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

▻ Nome
▻ Endereço C 5 @3

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

73
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. 74
Nome de uma Variável

▰ Nomes:
a
b1
nome_aluno
_Idade
inicio
c 3
75
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 76


4 Tipos Predefinidos (Primitivos)

▰ Inteiro -2 28 130 2012


B Idade Quantidade Ano
▰ Real 3.141.729.5 -10.5
Pi Altura Nota1 Temperatura
▰ Caractere ”Z” ”Pedro” ”(98) 9.8865-4002”
Letra Nome Telefone

▰ Logico Verdadeiro Falso (Booleano)


Aprovado Casado 77
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.


78
Declaração de Variáveis

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

79
Atribuições de Variáveis

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

bb+1

80
Atribuição de Variáveis

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

81
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!”)
82
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,".") 83
Fimalgoritmo
Algoritmo SWAP

▰ Faça o algoritmo SWAP de lê duas variáveis inteiras 87

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


7
8

84
Algoritmo SWAP

▰ 1ª Solução: 87

a b 7

b a b

Este algoritmo funciona (houve troca) ?


85
Algoritmo SWAP

▰ 2ª Solução: 87

x  a 7
8
a b b
b x

Este algoritmo funciona (houve troca) ?


86
Algoritmo SWAP

a
▰ 3ª Solução: 87

a  a+b 7
8

b  a-b b

a  a-b

Este algoritmo funciona (houve troca) ?


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

▰ Análise das 3 soluções:

1ª solução não funciona


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

89
Algoritmo SWAP

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

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

90
Expressões Aritméticas

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


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

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

91
Linearização das Expressões

▰ Reescreva essa equação em Portugol:

Matemática Tradicional Algoritmo

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

92
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.
93
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º). 94
Expressões Aritméticas

▰ Avalia a seguinte expressão aritmética:

-6^2

36 -36

?
95
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’’’

96
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
97
Outros Operadores Aritméticos

Operação Símbolo

Divisão Inteira \ div

Resto da Divisão Inteiro % mod

98
Operadores Aritméticos

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

Operação

() mais alta

-
^ Prioridade

* / div \ mod %
mais baixa
+ -

99
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
100
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


a3
b4
▰ Avalia as seguintes expressões: c5

xa+b*c x? 23 xa+b*c
ya−b∗c%3 y? 1 ya-b*c%3
z  -5 + 3 * 8 \ 7
z  -5 + 3 ∗ 8 \ 7 z ? -2 t5\3%2
t5\3%2 t? 1
escreval("x= ",x)
escreval("y= ",y)
escreval("z= ",z)
escreval("t= ",t)
101
Fimalgoritmo
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.
102
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:

103
Operadores Relacionais

Operação Símbolo

Igual a =

Diferente de <>

Maior que >

Maior ou Igual a >=

Menor que <

Menor ou Igual a <=

104
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

105
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).

106
Operadores Lógicos

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

107
Expressões Lógicas

▰ Exemplos:

A10 B6 C5

A <= B F
(A <> B) E (C=5) V

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

108
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

109
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

110
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

111
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

112
Expressões Lógicas

113
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)

114
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 ( )
115
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 116
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.


117
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
118
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

119
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
120
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 121
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.

122
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 123
Escolha ... Caso

Aalgoritmo "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
124
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).

125
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 126
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é

127
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

128
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
129
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
130
Para ... Faca

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


escreval(i) escreval(i)
fimpara fimpara

São equivalentes

131
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!

132
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 133
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
134
Repita ... Ate

repita

<lista de comandos>

ate <expressão lógica ou relacional>

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


135
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 136
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
137
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.

138
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.

139
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].

140
Programação Modular

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


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. 141
Programação Modular

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

▰ Essa técnica consiste portanto 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.

143
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).

144
Subalgoritmos

Algoritmo “Nome o Algoritmo”

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

// declaração de outros procedimento

Inicio
procedimento1(listadeargumento)
FimAlgoritmo
145
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
146
Procedimentos

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

escreval
fimprocedimento

147
Procedimentos

▰ Observação:

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


no cabeçalho do procedimento, como na chamada.

148
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
Fimalgoritmo
escreval
fimprocedimento

149
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
150
Subalgoritmos
P1

▰ Um subalgoritmo pode ser chamado por outro


P2
subalgoritmo. P1

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

acima dos módulos que o chamam. P1

151
Procedimentos

▰ Cria os seguintes procedimentos: *


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

152
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 153
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).

154
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), tc.

155
Recursividade

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


(definida a partir dela mesma).

156
Recursividade Vs. Iteração

Definição Iterativa:
▰ Exemplo:
Fatorial (n) = 1 x 2 x 3 x ... x n
▻ Fatorial Definição Recursiva:

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

157
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
158
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 (nf)
fimfuncao
Inicio
escreva("Entra com o valor de n: ")
leia(n)
escreval("O Fatoriald e ",n," é: ",fat(n)) 159
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))
160
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 qualqeur módulo pode usá-las.

▰ Variáveis Locais
São as variáveis declaradas dentro de um módulo (Procedimento ou função).
Elas são 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.
161
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 162
Variáveis Globais Vs. Locais

▰ Usar ao menos as variáveis globais (carregam a memória)


▰ 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.

163
Passagem de Parâmetros

▰ Dois Tipos:
▻ Por Valor
▻ Por Referência

164
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
165
Passagem de Parâmetros

▰ Passagem por Valor:


Apenas são valores são repassados pros 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.

166
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

167
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

168
Procedimentos e Funções Predefinidas

▰ Limpatela

169
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 a dimensão do caractere

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


caracter

170
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 o valor em inteiro

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

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

171
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 Pi Pi
Pos (subc, c : caracter) : inteiro Retorna a posição do
caractere.
Quad (valor : real) : real Elevado quadrado
Radpgrau (valor : real) : real Converte Radiano para grau.

172
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

173
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)
174
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 Real é: ",vi)
Fimalgoritmo
175
▰ Dica:

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

176
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!

177
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:
𝑃 ❑

𝑃 ! ( 𝑀 − 𝑃) !

178
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 são maiores que a média do conjunto.

179
Procedimentos e Funções

▰ Cria as seguintes Funções:

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

• VolumeCubo
• VolumeParalelipedo
• VolumeCilindro

180
Procedimentos e Funções

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


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

181
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.

182
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.

183
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 184
Vetores

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


especificar o seu índice:

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

185
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“
Idasde[i]  20 186
Vetores

▰ Exemplos:

para i de 1 ate 20 faca


idade[i]  20
fimpara

187
Vetores

▰ Exemplos:

para i de 1 ate 20 faca


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

188
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
189
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$ 1000,00?
▻ Aumenta os preços dos produtos em 10%.
▻ Quais os produtos que precisamos de uma reposição de estoque
(estoque ≤ 10). 190
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.

191
Matrizes

▰ Esta declaração corresponde à 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).

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]

192
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

193
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.

194
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.

195
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.

196
Matrizes

▰ Este algoritmo funciona para uma turma de 5 alunos.

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

197
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.

198
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
199
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.

200
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
201
fimalgoritmo
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
202
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 203


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
204
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
205
Registros: Exercícios

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


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

206
Arquivos

▰ É importante armazenar dados em arquivos.

▰ VisuAlg permite o armazenamento de dados em um arquivo-


texto.

207
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.
208
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.).
209
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.

210
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
211
Arquivos

▰ Exemplo:

212
6
PROJETOS

213
Projeto 1

▰ P1

▰ P2

▰ P3

214
7
VISUAL G

215
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.

216
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 :

217
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

218
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

219
Auto Digitação

CTRL J – Sugestões de Digitação


(Autocomplement)

220
Comandos

▰ Execução Normal F9

▰ Execução Passo a Passo F8

▰ Terminar a Execução Ctrl-F2

221
8
CONCLUSÃO

222
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
223
OBRIGADO !
Sofiane Labidi
098 9.8860-6410
soflabidi@outlook.com
@slabidi
224
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

225
RECURSOS

226
Recursos
▰ Instalar:
▻ VisualG
▻ TesteQI

▻ Google Classroom (Google Sala de


Aula)

▻ Kahoot
▻ Mentimiter 227
Recursos

228
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”. Código da Sala:
reef5op
apertando o botão “+” e em seguida em
“Participar da turma”

229
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
230
Tecnologia Educacional

▪ Acessar o Mentimeter pelo


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

231

Você também pode gostar