Buscar

Aulas Introdução a Lógica de Programação

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 127 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 127 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 127 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Professor
Leonardo Luiz Vieira da Silva
leovieira@gmail.com
Qual a sua expectativa
sobre a disciplina?
• Participação ativa nos exercícios
• Celular no silencioso
• Transparência (tirem suas dúvidas)
• Foco no aprendizado
– É uma disciplina TOTALMENTE “prática”
Qual expectativa do Professor?
Introdução a Lógica de Programação
• Lógica de Programação
– É a técnica de encadear pensamentos para atingir 
determinado objetivo.
• Sequencia Lógica
– São passos executados até atingir um objetivo ou 
solução de um problema.
• Instruções
– Conjunto de regras ou normas definidas para a 
realização ou emprego de algo. Em informática, é 
o que indica a um computador uma ação 
elementar a executar.
• Algoritmo
– Sequência de instruções para...
Introdução a Lógica de Programação
Exercício 1
Passo a passo pra Chupar uma Bala
1)Pegar a bala
2)Retirar o papel
3)Chupar a bala
4)Jogar o papel no lixo
Exercício 2
Somar dois números quaisquer
1)Escreva o primeiro número no retângulo A
2)Escreva o segundo número no retângulo B
3)Some o número do retângulo A com o número do retângulo B e 
coloque o resultado no retângulo C
• Programas de Computador
– São algoritmos escritos em uma linguagem de computador 
(C, Java, C#, Cobol, Python entre outras...)
– Submetidos a uma rigorosa interpretação
Programas
Exercício 3
• Crie uma sequencia lógica para trocar o pneu do 
carro. Seja muito detalhista.
Exercício 4
• Faça um algoritmo para somar dois números e 
multiplicar o resultado pelo primeiro.
Desenvolvendo Algoritmos
• Aplicação de um pseudocódigo
• Regras para construção do pseudocódigo
– Usar somente um verbo por frase
Exemplo
a) COMO FAZER ARROZ DOCE
b) CALCULAR O SALDO FINANCEIRO DE UM ESTOQUE
– Qualquer pessoa irá conseguir entender
(não apenas o programador!)
– Usar frases curtas e simples 
(ser objetivo)
– Evitar palavras com sentido dúbio
Estrutura 
São os dados de
entrada do algoritmo
São os procedimentos
utilizados para chegar 
ao resultado
final
São os dados já processados
Nome
Idade
Execute o comando 
Resultado do cálculo
Relatórios
Exibição de tela
Realização de cálculos
Busca de Informações
Validações
Calcular a média final dos alunos da 3ª Série. Os alunos realizarão 
quatro provas: P1, P2, P3 e P4. 
Exemplo de Algoritmo 
a) Quais são os dados de entrada? 
R: Os dados de entrada são P1, P2, P3 e P4 
b) Qual será o processamento a ser utilizado? 
R: O procedimento será somar todos os dados de entrada e dividi-los por 4 (quatro) 
c) Quais serão os dados de saída? 
R: O dado de saída será a média final 
Exemplo de Algoritmo 
• Receba a nota da prova1 
• Receba a nota de prova2 
• Receba a nota de prova3 
• Receba a nota da prova 4
• Some todas as notas e divida o resultado por 4
• Mostre o resultado da divisão
Trocando uma lâmpada
Exercício 5
• Crie uma sequencia lógica para trocar o pneu 
do carro. Seja muito detalhista, pense nos 
condicionais e na repetição.
Diagrama de Bloco
• Constante: O conteúdo se mantem “fixo”.
• Variável: O conteúdo pode sofrer modificações.
Constantes e Variáveis
Tipos de Variáveis
• Numéricas
• Poderão ser utilizados para cálculos
• Inteiro: 1 
• Reais: 1,00 
• Caracteres 
• Não contém números. Ex: nomes
• Alfanuméricas 
• Letras e números
• Não é possível realizar operações matemáticas
• Lógicas
• Somente dados lógicos VERDADEIRO OU FALSO
Para fazer uso de uma variável você tem que declará-la.
Caracter: nome;
Real: dinheiro;
Operadores
Operadores Aritméticos 
Operadores Relacionais 
Operadores Lógicos 
Operadores Aritméticos
Operadores Relacionais
Operadores Lógicos
Operadores Lógicos
Exercício
Operações Lógicas
Diagrama de Bloco
Diagrama de Bloco
Diagrama de Bloco
Diagrama de Bloco
Estrutura de Decisão
SE ENTÃO / IF ... THEN
SE ENTÃO SENÃO / IF... THEN... ELSE
ESCOLHA CASO / SELEC CASE
Estrutura de Repetição
ENQUANTO x, FACA (DO WHILE ... LOO)
REPITA ATE x (REPEAT UTIL)
PARA ... ATE ... FACA (FOR ... TO ... DO)
SE MEDIA >= 5.0 ENTÃO
ALUNO APROVADO
SE ENTÃO / IF ... THEN
SE MEDIA >= 5.0 ENTÃO
ALUNO APROVADO
SENÃO
ALUNO REPROVADO
SE ENTÃO SENÃO / IF... THEN... ELSE
ESCOLHA / SELEC CASE
TITULO = “” 
LEIA (OP)
ESCOLHA OP 
CASO 1:
TITULO = “OPÇÃO 1”
CASO 2:
TITULO = “OPÇÃO 2”
CASO 3:
TITULO = “OPÇÃO 3”
CASO 4:
TITULO = “OPÇÃO 4” 
CASO 5:
TITULO = “OPÇÃO 5” 
CASO CONTRARIO: 
TITULO = “OPÇÃO ERRADA”
FIMESCOLHA 
VAMOS PROGRAMAR...
algoritmo "Números de 1 a 10 (com enquanto...faca)“
var j: inteiro
inicio
j <- 1 
enquanto j <= 10 faca
escreva (j) 
j <- j + 1 
fimenquanto
fimalgoritmo
Enquanto x, faca (Do While ... Loop)
a)Imprima apenas os números pares (Utilize o algoritmo anterior)
b)Fazer um algoritmo que leia três valores inteiros, determine e imprima o 
menor deles
c)Dado três valores X, Y, Z, verificar se eles podem ser os comprimentos dos 
lados de um triângulo e, se forem, verificar se é um triângulo equilátero, 
isósceles ou escaleno. Se eles não formarem um triângulo, escrever uma 
mensagem.
Propriedade - O comprimento de cada lado de um triângulo é menor do que a soma dos comprimentos dos 
outros dois lados.
Definição 1 - Chama-se triângulo equilátero o triângulo que tem os comprimentos dos três lados iguais.
Definição 2 - Chama-se triângulo isósceles o triângulo que tem os comprimentos de dois lados iguais. 
Portanto, todo triângulo equilátero também é isósceles.
Definição 3 - Chama-se triângulo escaleno o triângulo que tem os comprimentos 
de seus três lados diferentes.
Exercício
d)Fazer um algoritmo que calcule o valor de N!(fatorial de N), sendo que o valor 
inteiro de N encontra-se disponível em uma unidade de entrada e que:
N! = 1 x 2 x 3 x ... x(N - 1) x N;
0! = 1, por definição.
e)Num frigorífico existem 6 bois. Cada boi traz preso em seu pescoço um cartão 
contendo seu número de identificação e seu peso. Fazer um algoritmo que 
escreva o número e peso do boi mais gordo e do boi mais magro.
algoritmo "Peso_do_Boi"
var
BOIS,GORDO,MAGRO,MAIORPESO,MENORPESO,CARTAO,PESO: inteiro
inicio
BOIS <- 0
MAIORPESO <- 0
MENORPESO <- 100000
repita
escreval ("Digite o CARTÃO e PESO do boi!")
leia (CARTAO,PESO)
se (PESO > MAIORPESO) entao
MAIORPESO <- PESO
GORDO <- CARTAO
fimse
se (PESO < MENORPESO) entao
MENORPESO <- PESO
MAGRO <- CARTAO
fimse
BOIS <- BOIS + 1
ate BOIS = 4
escreval ("Boi mais GORDO:", GORDO, " / PESO:", MAIORPESO, " arrobas")
escreval ("Boi mais MAGRO:", MAGRO, " / PESO:", MENORPESO, " arrobas")
fimalgoritmo
algoritmo "Números de 1 a 10“
var j: inteiro
inicio
j := 1
enquanto j <= 10 faca
se (j = 2) ou (j = 6) ou (j = 8) ou (j = 10) entao
escreva (j)
fimse
j := j + 1
fimenquanto
fimalgoritmo
a) Imprima apenas os números pares
a)Imprima apenas os números pares (Otimizado)
algoritmo "Números de 1 a 10“
var j: inteiro
inicio
j <- 1
enquanto j <= 10 faca
se j mod 2 = 0 entao
escreva (j)
fimse
j := j + 1
fimenquanto
fimalgoritmo
algoritmo "Menor_Numero"
var
A,B,C,MENOR: inteiro
inicio
leia (A,B,C)
se (A < B) e (A < C) entao
MENOR <- A
senao
se (B < C) entao
MENOR <- B
senao
MENOR <- C
fimse
fimse
escreva ("O MENOR número é: ", menor)
fimalgoritmo
b)Leia três números e determine o menor deles
c)Determine o triângulo
algoritmo "Tipo_do_Triângulo"
var
X,Y,Z: inteiro
Inicio
leia (X,Y,Z)
se (X <Y + Z) e (Y < X + Z) e (Z < X + Y) entao
se (X = Y) e (X = Z) entao
escreva ("Triângulo EQUILÁTERO")
senao
se (X = Y) ou (X = Z) ou (Y = Z) entao
escreva ("Triângulo ISÓSCELES")
senao
escreva ("Triângulo ESCALENO")
fimse
fimse
senao
escreva ("NÃO EXISTE TRIÂNGULO")
fimse
fimalgoritmo
algoritmo "Fatorial"
var
FATORIAL,I,N: inteiro
inicio
leia (N)
se N = 0 entao
escreval ("FATORIAL DE 0 = 1 POR DEFINIÇÃO")
senao
FATORIAL := 1
I := 1
repita
FATORIAL := (FATORIAL * I)
escreval ("FATORIAL DE", I, " =", FATORIAL)
I := I + 1
ate I > N
fimse
fimalgoritmo
d)Calcule o fatorial
Exercícios em Sala
1)Implemente um algoritmo que receba 4 notas e imprima
a média aritmética. Caso a nota seja maior ou igual que 7, exiba na tela
que o aluno está aprovado, caso contrário exiba que ele está reprovado.
2)Implemente o algoritmo que receba as 4 notas de 2 alunos, imprima
a média de cada aluno e informe o aluno (nome) com a maior nota.
2.1 As notas do segundo aluno estão em número com decimais. 
2)Vamos incrementar o algoritmo abaixo:
algoritmo "Números de 1 a 10“
var j: inteiro
inicio
j := 1
enquanto j <= 10 faca
se j mod 2 = 0 entao
escreva (j)
fimse
j := j + 1
fimenquanto
fimalgoritmo
a)imprima os números de 10 para 0
b)ao imprimir o número 2, escreva, "Esse é o número 2".
3)Implemente um algoritmo que exiba 4 opções de menu 1-Inclusão, 2-Consulta, 3-Alteração, 4-
Exclusão. Ao selecionar a opção desejada do menu imprima na tela a opção escolhida.
4)Incremente o algoritmo acima com a opção de 5 - Sair. Enquanto não for selecionada 
essa opção o menu deve ser apresentado e a opção escolhida exibida.
Exercícios em Sala
algoritmo "Números de 1 a 100“
var x: inteiro
inicio
PARA x de 1 ATE 100 FACA
escreva (x)
FIMPARA
fimalgoritmo
Utilizando o PARA DE ATE FAÇA (FOR)
a)Altere o algoritmo para ler um número e imprimir na tela até o número informado (via teclado)
algoritmo "Números de 1 a 100“
var x,z: inteiro
inicio
leia(z)
PARA x de 1 ATE z FACA
escreva (x)
FIMPARA
fimalgoritmo
b)Altere o algoritmo onde serão impressos apenas números pares.
algoritmo "Números de 1 a 100“
var x,z: inteiro
inicio
leia(z)
PARA x de 1 ATE z FACA
se x mod 2 = o entao
escreva (x)
fimse
FIMPARA
fimalgoritmo
Implemente os algoritmos abaixo:
1)Leia 2 números e imprima na tela o resultado da soma, multiplicação e subtração.
Exiba uma mensagem para cada resultado. Exemplo: Resultado da soma: X. 
Multiplicação Z Subtração: W.
2)Leia 4 números e imprima na tela o maior deles. Na sequencia descubra se é um 
número PAR ou ÍMPAR e imprima o resultado.
3) Num frigorífico existem 4 bois. Cada boi traz preso em seu pescoço um cartão 
contendo seu número de identificação e seu peso. Fazer um algoritmo que escreva 
o número e peso do boi mais gordo e do boi mais magro.
4)Leia 3 três valores distintos e imprima na tela em ordem crescente.
Exercícios em Sala
Ferramenta Laboratório
Visualg
Vetores
• Tipos primitivos não são suficientes para representar 
toda a informação
• Necessário criar estrutura de dados
• Uma variável é um elemento, uma estrutura de dados 
um conjunto
• Vetores são estruturas unidimensionais homogêneas
Vamos ao quadro!
“Calcule e apresente a média geral de uma turma de 8 alunos. A média a ser 
obtida deve ser a média geral das médias de cada aluno obtida durante o 
ano letivo”.
Veja a tabela a seguir que apresenta o número de alunos, suas notas 
bimestrais e respectivas médias anuais.
OBS: O cálculo das médias da turma deverá ser baseado na soma das médias 
de cada aluno e depois dividi-las por 8.
Entendendo melhor
Tabela de notas
Aluno Nota 1 Nota 2 Nota 3 Nota 4 Média
1 4,0 6,0 5,0 3,0 4,5
2 6,0 7,0 5,0 8,0 6,5
3 9,0 8,0 9,0 6,0 8,0
4 3,0 5,0 4,0 2,0 3,5
5 4,0 6,0 6,0 8,0 6,0
6 7,0 7,0 7,0 7,0 7,0
7 8,0 7,0 6,0 5,0 6,5
8 6,0 7,0 2,0 9,0 6,0
Estrutura de dados
Elabore um programa que efetue a leitura de cada nota, a soma delas 
e a divisão do valor da soma por 8, e escreva o valor da média obtida. 
Defina as seguintes variáveis para armazenar os valores das médias:
MD1 = ?
MD2 = ?
MD3 = ?
MD4 = ?
MD5 = ?
MD6 = ?
MD7 = ?
MD8 = ?
SOMA = ?
MEDIA = ?
Vamos para a prática
algoritmo "MEDIA_TURMA_SEM_VETOR"
var
MD1, MD2, MD3, MD4, MD5, MD6, MD7, MD8: real
SOMA, MEDIA: real
inicio
SOMA := 0
leia (MD1, MD2, MD3, MD4, MD5, MD6, MD7, MD8)
SOMA <- (MD1 + MD2 + MD3 + MD4 + MD5 + MD6 + MD7 + MD8)
MEDIA <- SOMA / 8
escreva ("A média geral é:", MEDIA)
fimalgoritmo
Exemplo
Após a execução do programa deveremos ter os seguintes valores em 
cada variável.
MD1 = 4,5
MD2 = 6,5
MD3 = 8,0
MD4 = 3,5
MD5 = 6,0
MD6 = 7,0
MD7 = 6,5
MD8 = 6,0
SOMA = 48,0
MEDIA = 6,0
Existe uma forma melhor de 
fazer! Qual?
Resultado
vetor MD com 8 posições
Manipulação acontece através de um índice.
Não confundir índice com elemento.
MD [6] := 28
Leia (MD[6])
Escreva (MD[6]) 
Exemplo
LI – representa o limite inicial do vetor
LF – representa o limite final do vetor
Tipo primitivo: representa qualquer um dos tipos básicos ou tipos anteriormente
definidos. 
Declaração
VARIÁVEL : vetor [<dimensão>] de <tipo de dado>, sendo que vetor 
é uma palavra reservada (no nosso caso específico porque 
utilizamos o VisuAlg), <dimensão> será a indicação dos valores 
inicial e final do tamanho do vetor e <tipo de dado> se o vetor irá 
utilizar valores inteiros, caracteres, lógicos ou reais.
Ex: MD: vetor[1..40] de real
Declaração
A leitura de um vetor é processada passo a passo, um elemento por 
vez usando a instrução leia seguida da variável mais o índice.
Ex: 
para I de 1 ate 8 faca
leia (MD[I])
fimpara
Leitura dos dados de um Vetor
OBS: Tenha cuidado para não confundir o índice com o elemento!
Índice é o endereço de alocação de uma unidade da matriz, enquanto
elemento é o conteúdo armazenado em um determinado endereço.
Estrutura do Vetor
MD
Para o processo de escrita de uma matriz deverá ser utilizada a 
instrução escreva seguida da indicação da variável e seu índice.
Ex: 
para I de 1 ate 8 faca
escreval ("A média do aluno", I, " é:", MD[I])
fimpara
Escrita dos dados de um Vetor
algoritmo "MEDIA_TURMA_COM_VETOR"
var
MD: vetor[1..8] de real
SOMA, MEDIA: real
I: inteiro
inicio
SOMA := 0
para I de 1 ate 8 faca
leia (MD[I])
SOMA <- SOMA + MD[I]
fimpara
MEDIA :=- SOMA / 8
para I de 1 ate 8 faca
escreval ("A média do aluno", I, " é:", MD[I])
fimpara
escreval ("A média geral é:", MEDIA)
fimalgoritmo
Exemplo
1) Desenvolver um programa que efetue a leitura de dez elementos de um 
vetor tipo A. Construir uma vetor B de mesmo tipo, observando a 
seguinte lei de formação: se o valor do índice for par, o valor deverá ser 
multiplicado por 5, sendo ímpar, deverá ser somado com 5. Ao final 
mostrar o conteúdo da matriz B.
2) 2) Desenvolver um programa que efetue a leitura de cinco elementos de 
um vetor. No final, apresente o total da soma de todos os elementos que 
sejam ímpares.
Exercícios
Matrizes
• Vetores são estruturas unidimensionais homogêneas
• Matrizes são estruturas bidimensionais homogêneas
– Estruturas de dados bidimensionais
• Na prática iremos aprender a utilizar um Vetor com 
mais uma dimensão
• Iremos “percorrer” no sentido horizontal e vertical
• Para percorrer um Vetor utilizamos apenas um looping 
(comando para, enquanto ou repita)
• No caso de matrizes, deverá ser utilizado o número 
de looping de acordo com número de dimensões
• Exemplo:
Matrizes de 2 dimensões: 2 loopings(objetivo)
Matrizes de 3 dimensões: 3 loopings
Matrizes
• Para “percorrer” uma matriz de duas dimensões utilizamos 2 
índices. 
• O primeiro para indicar a linha e o segundo para indicar a 
coluna.
• A tabela[2,3] indica que está sendo feita uma referência a:
linha 2, coluna 3
Matrizes
Matriz
• Representamos uma matriz de duas dimensões por 
meio de linhas e colunas?
• TABELA[1..8,1..5], onde seu nome é TABELA, possui 
um tamanho de 8 linhas (de 1 a 8) e 5 colunas (de 1 a 
5), ou seja, é uma matriz 8 por 5 (8 x 5).
• Isto significa que podem ser armazenados na matriz 
TABELA até 40 elementos?
Matrizes de duas dimensões 
(também chamados de Arrays)
• Matriz TABELA (8 x 5) = 40 elementos
Coluna
1 2 3 4 5
Linha 1
2
3
4
5
6
7
8
• VARIÁVEL : vetor [<dimensão1:dimensão2>] de <tipo de dado>, em 
que <dimensão1> e <dimensão2> são a indicação do tamanho da 
tabela e <tipo de dado> o tipo da matriz, que poderá ser formada 
por valores inteiros, caracteres, lógicos ou reais. 
• OBS: Lembrem-se que vetor é uma palavra reservada no nosso caso 
específico, porque utilizamos o VisuAlg.
• Ex: TABELA: vetor[1..8,1..5] de real
Matriz - Declaração
Leitura dos dados de uma Matriz
A leitura de uma matriz de duas dimensões, assim como das matrizes 
de uma dimensão é processada passo a passo, um elemento por vez, 
sendo utilizada a instrução leia seguida da variável mais os seus 
índices.
Ex: 
para I de 1 ate 8 faca
para J de 1 ate 5 faca
leia (TABELA[I,J])
fimpara
fimpara
Matriz - Leitura
Escrita dos dados de uma Matriz
Para o processo de escrita de uma matriz deverá ser utilizada a 
instrução escreva seguida da indicação da variável e seu índice.
Ex: 
para I de 1 ate 8 faca
para J de 1 ate 5 faca
escreval (“Matriz de duas dimensões:", TABELA[I,J])
fimpara
fimpara
Matriz - Escrita
• Tomemos como exemplo a leitura das 4 notas de 8 alunos. Assim 
sendo, a tabela em questão armazenará 32 elementos. Um detalhe 
a ser considerado é a utilização de duas variáveis para controlar os 
dois índices de posicionamento de dados na tabela.
• Quando usamos matriz de uma dimensão, anteriormente, 
utilizamos apenas a variável I para controlar as posições dos 
elementos dentro da matriz, ou seja, a posição em nível de linha. 
• Agora a variável I continuará tendo o mesmo efeito porém surge a 
segunda variável J que irá controlar a posição da coluna.
Entendendo melhor...
• Observe que, ao serem iniciados os valores para o preenchimento 
da tabela, eles são colocados na posição NOTAS[1,1]. 
• Assim sendo, será então digitado para o primeiro aluno a sua 
primeira nota. Depois é incrementado mais 1 em relação à coluna, 
sendo colocada para a entrada a posição NOTAS[1,2], linha 1 e 
coluna 2. Desta forma, será digitado para o primeiro aluno a sua 
segunda nota.
Entendendo melhor...
• Quando o contador de coluna, o looping da variável J, atingir o valor 
4, ele será encerrado. Em seguida o contador da variável I será 
incrementado com mais 1, tornando-se 2. Será então inicializado 
novamente o contador J em 1, permitindo que seja digitado um 
novo dado na posição NOTAS[2,1].
• O mecanismo de preenchimento será executado até que o contador 
de linhas atinja seu último valor, neste caso 8. Esse looping é o 
principal tendo a função de controlar o posicionamento na tabela 
por aluno. O segundo looping, mais interno, controla o 
posicionamento das notas.
Entendendo melhor...
algoritmo "Notas_Com_Matrizes_Duas_Dimensões"
var
NOTAS: vetor[1..8,1..4] de real
I,J: inteiro
inicio
para I de 1 ate 8 faca
para J de 1 ate 4 faca
leia (NOTAS[I,J])
fimpara
fimpara
para I de 1 ate 8 faca
escreva (“Aluno ", I, “ |”) 
para J de 1 ate 4 faca
escreva (NOTAS[I,J], “ |”)
fimpara
escreval (“ ") 
escreval (“ ------------------")
fimpara
fimalgoritmo
Exemplo
Ler duas matrizes A e B, cada uma de duas dimensões com 5 linhas e 3 
colunas (a leitura da segunda matriz só deve ser iniciada após a leitura 
completa da primeira matriz). Construir uma matriz C de mesma 
dimensão, que é formada pela soma dos elementos da matriz A com os 
elementos da matriz B e apresentar o resultado na tela seguindo a 
formatação a seguir:
Matriz A - Linha 1 | Coluna 1 = 5 + Matriz B - Linha 1 | Coluna 1 = 4 -> SOMA = 9
• OBS: Utilize os dados a seguir para preencher as matrizes A e B.
Exercício
• Encontre o resultado para Matriz “C”
Matriz A
1 2 3
1 3 2 7
2 4 5 1
3 7 6 7 Matriz C
4 1 3 1 1 2 3
5 3 1 2 1
2
Matriz B 3
1 2 3 4
1 2 8 1 5
2 3 5 2
3 3 4 3
4 5 7 1
5 6 9 2
Exercício
• Resultado da Matriz “C”
Matriz A
1 2 3
1 3 2 7
2 4 5 1
3 7 6 7 Matriz C
4 1 3 1 1 2 3
5 3 1 2 1 5 10 8
2 7 10 3
Matriz B 3 10 10 10
1 2 3 4 6 10 2
1 2 8 1 5 9 10 4
2 3 5 2
3 3 4 3
4 5 7 1
5 6 9 2
Resultado
algoritmo "ABC_Com_Matrizes_Duas_Dimensões"
var
A,B,C: vetor[1..5,1..3] de real
I,J: inteiro
inicio
para I de 1 ate 5 faca
para J de 1 ate 3 faca
leia (A[I,J])
fimpara
fimpara
para I de 1 ate 5 faca
para J de 1 ate 3 faca
leia (B[I,J])
C[I,J] <- A[I,J] + B[I,J]
fimpara
fimpara
para I de 1 ate 5 faca
para J de 1 ate 3 faca
escreval ("Matriz A - Linha", I, " | Coluna", J, " =", A[I,J], " +", " Matriz B - Linha", I, " | Coluna", J, " =", B[I,J], " -> SOMA =", C[I,J])
fimpara
escreval ("-------------------------------------------------------------------------------------")
fimpara
fimalgoritmo
Algoritmo
Registros
• Já estudamos estrutura de dados de uma dimensão (Vetor) e duas 
dimensões (Matrizes). Observamos que somente era possível 
trabalhar com um tipo de dado. 
• No momento que for preciso trabalhar com dois tipos de dados 
diferentes, precisamos utilizar duas matrizes, sendo cada uma de 
um tipo.
• Ex: Imagine um algoritmo para armazenar o nome e a nota do 
aluno. Para tanto deveríamos usar uma matriz NOME tipo 
CARACTERE e uma matriz NOTA tipo REAL.
• Quando usamos registros podemos trabalhar com vários dados de 
tipos diferentes (os campos) em uma mesma estrutura. Portanto 
podemos chamá-los de tipos de dados heterogêneos.
• Tomemos como base um exemplo onde pretendemos cadastrar 4 
nomes e 4 notas dos alunos de uma faculdade. Sendo assim, o 
registro será formado pelos campos: Nome 1, Nota 1, Nome 2, 
Nota 2, Nome 3,Nota 3, Nome 4, Nota 4.
• Observe a tela a seguir:
Registros
Nome
Nota
Nome
Nota
Nome
Nota
Nome
Nota
Cadastro
1 2 3 4
Criando um Registro
Os tipos registro devem ser declarados antes das variáveis, porque 
pode ocorrer a necessidade de declarar uma variável com o tipo do 
registro definido.
Para declarar um tipo registro, deve ser usada a instrução tipo mais a 
instrução registro..fimregistro. Observe a seguir: 
tipo
<identificador> = registro
<lista dos campos e seus tipos>
fimregistro
var
<variaveis> : <identificador>
Registros
Criando um Registro
Vamos definir um registro tomando como exemplo a criação do 
registro de alunos.
tipo
cad_aluno = registro
NOME: caractere
NOTA: real
fimregistro
var
ALUNO : cad_aluno
Registros
Leitura do Registro
A leitura de um registro é efetuada com a instrução leia seguida do 
nome da variável registro e seu campo correspondente separado por 
um caractere “.” (ponto).
inicio
leia (ALUNO.NOME)
leia (ALUNO.NOTA)
fimalgoritmo
Registros
algoritmo “ALUNO“
tipo
CAD_ALUNO = registro
NOME: caractere
NOTA1: real
NOTA2: real
NOTA3: real
NOTA4: real
fimregistro
var
ALUNO : cad_aluno
inicio
leia (ALUNO.NOME)
leia (ALUNO.NOTA1)
leia (ALUNO.NOTA2)
leia (ALUNO.NOTA3)
leia (ALUNO.NOTA4)
escreva (ALUNO.NOME)
escreva (ALUNO.NOTA1)
escreva(ALUNO.NOTA2)
escreva (ALUNO.NOTA3)
escreva (ALUNO.NOTA4)
fimalgoritmo
Registros
Podemos definir uma matriz vetor (uma dimensão) ou array (mais de 
uma dimensão) dentro de um registro?
Sim. Vamos observar como funciona essa definição seguindo o mesmo 
exemplo do registro de alunos.
Considere que temos o campo NOME tipo caractere e mais quatro 
campos tipo real para o armazenamento de suas notas. Podemos 
otimizar definindo um vetor chamado NOTA com quatro índices, um 
para cada nota. 
Observe a mudança na tela a seguir:
Estrutura de um Registro de 
Conjuntos
Criando um Registro de Conjuntos
Vamos definir um registro tomando como exemplo a criação do registro 
de alunos, cujas notas serão armazenadas em um vetor.
tipo
cad_aluno = registro
NOME: caractere
NOTA: bimestre
fimregistro
var
ALUNO: vetor[1..4] de cad_aluno
Estrutura de um Registro de 
Conjuntos
algoritmo “ALUNO“
tipo
cad_aluno = registro
NOME: caractere
NOTA: real
fimregistro
var
ALUNO : vetor[1..4] de cad_aluno
I,J: inteiro
inicio
para I de 1 ate 4 faca
leia (ALUNO[I].NOME)
leia(ALUNO[I].NOTA) 
fimpara
para I de 1 ate 4 faca
escreva (ALUNO[I].NOME)
escreva (ALUNO[I].NOTA)
fimpara
fimalgoritmo
Estrutura de um Registro de Conjuntos
1)Faça uso do algoritmo anterior e imprima na tela os alunos a 
identificação com a orientação abaixo:
a) XXXXXXX -> Aluno aprovado
<Nota igual ou maior que 7.00>
b)XXXXXXXXX -> Aluno reprovado. 
<Nota menor que 7.00>
2)Crie um vetor que armazene apenas o nome dos alunos aprovados
e imprima na tela.
Exercício
Procedimentos e Funções
Procedimentos e Funções
Para tornar a tarefa de programação mais fácil de ser resolvida, podemos 
utilizar módulos, ou seja, partes que podem ser alteradas sem que seja 
necessário mexer no programa principal.
Podemos utilizar procedimentos, funções e parâmetros para tornar os 
algoritmos mais eficientes e possibilitar a reutilização de códigos.
Procedimentos
Um procedimento (procedure), também conhecido como sub-rotina, é um 
conjunto de instruções que realiza uma determinada tarefa.
Um algoritmo de procedimento é criado da mesma maneira que outro 
algoritmo qualquer: Deve ser identificado, possui variáveis, operações e até 
funções.
procedimento nome_do_procedimento (lista de parâmetros)
var
declaração dos objetos (objetos locais)
inicio 
instruções do procedimento
fimprocedimento
Procedimentos
algoritmo “MENU”
var 
opcao: inteiro
inicio
leia (opcao)
escolha opcao
caso 1
ModAdicao
caso 2
ModSubtr
caso 3
ModMultip
caso 4
ModDiv
outrocaso
escreva (“Fim de Programa”)
fimescolha
fimalgoritmo
Procedimentos
procedimento ModAdicao
var
v1, v2, res: real
inicio
leia (v1, v2)
res  v1 + v2
escreva (res)
fimprocedimento
procedimento ModSubtr
var
v1, v2, res: real
inicio
leia (v1, v2)
res  v1 - v2
escreva (res)
fimprocedimento
procedimento ModMultip
var
v1, v2, res: real
inicio
leia (v1, v2)
res  v1 * v2
escreva (res)
fimprocedimento
procedimento ModDiv
var 
v1, v2, res: real
inicio
leia (v1, v2)
res  v1 / v2
escreva (res)
fimprocedimento
Escopo de Variáveis
Os exemplos apresentados utilizam variáveis locais – variáveis que podem 
ser utilizadas somente no escopo do algoritmo/programa no qual foram 
declaradas.
Para resolver o problema da redundância, existe a possibilidade de as 
variáveis serem declaradas globais.
As variáveis globais são declaradas no algoritmo principal e podem ser 
utilizadas por todos os algoritmos hierarquicamente inferiores.
Parâmetros
Parâmetros são variáveis ou valores que podem ser transferidos do 
algoritmo principal para um módulo que está sendo chamado.
Funcionam como comunicadores entre os módulos.
Existem dois tipos de parâmetros:
Formais;
Reais.
Parâmetros Formais
São declarados nos módulos e tratados como as variáveis.
algoritmo "MULTIPLICA"
var
n, m, res: real
procedimento multiplica(a, b: real)
inicio
res <- (a * b)
fimprocedimento
inicio
n <- 3
m <- 7
multiplica(n,m)
escreva("A resposta é:", res)
fimalgoritmo
Parâmetros Reais
São os valores que substituem os parâmetros formais.
algoritmo "MULTIPLICAR"
var
res: real
num1, num2: real
procedimento multiplicar (a, b: real)
inicio
res <- (a * b)
escreva("A resposta é:", res)
fimprocedimento
inicio
leia (num1, num2)
multiplicar (num1, num2)
fimalgoritmo
Passagem de Parâmetros
A passagem de parâmetros ocorre por meio da correspondência 
argumento/parâmetro, em que os argumentos são valores constantes 
ou variáveis informados no módulo chamador;
Os argumentos devem ser fornecidos na mesma ordem dos 
parâmetros;
Os parâmetros podem ser passados por valor ou por referência.
Passagem de Parâmetros
Na passagem por valor, o valor do parâmetro real é copiado no 
parâmetro formal na chamada do módulo, e o parâmetro é de 
entrada;
Na passagem por referência, toda alteração feita nos parâmetros 
formais refletem-se nos parâmetros reais, e o parâmetro é de entrada 
e saída.
Procedimento sem Parâmetros
algoritmo "PROCEDIMENTO_SEM_PARAMETROS"
var
aux, n, m, res: inteiro
procedimento soma
inicio
// n, m e res são variáveis globais
aux <- n + m
res <- aux
fimprocedimento
inicio
n <- 5
m <- 10
soma
escreva("A resposta é:", res)
fimalgoritmo
Procedimento com Parâmetros
algoritmo "PROCEDIMENTO_COM_PARAMETROS"
var
n, m, res: inteiro
procedimento soma (x,y: inteiro)
inicio
// x e y são variáveis locais
// res é variável global
res <- x + y
fimprocedimento
inicio
n <- 4
m <- 10
soma(n,m)
escreva("A resposta é:", res)
fimalgoritmo
Funções
As funções são criadas e chamadas da mesma maneira que os 
procedimentos.
A diferença entre eles é que as funções podem ser utilizadas em 
expressões, como se fossem variáveis, pois as funções retornam 
valores associados ao seu nome e para esses valores se faz necessária 
a declaração do tipo de dado a ser retornado.
função <nome_da_função> (lista de parâmetros): tipo_de_dado da função
var
declaração dos objetos pertencentes a esta função (objetos locais)
inicio
instruções da função
retorne (variavel)
fimfuncao
Funções
algoritmo “SOMA_SEM_PARAMETROS"
var
n, m, res: inteiro
funcao soma: inteiro
var
aux: inteiro
inicio
// n, m e res são variáveis globais
aux <- n + m
retorne aux
fimfuncao
inicio
n <- 4
m <- 12
res <- soma
escreva("A resposta é:",res)
fimalgoritmo
Funções
algoritmo "SOMA_COM_PARAMETROS_PASSADOS_POR_VALOR"
var
n, m, res: inteiro
funcao soma (x,y: inteiro): inteiro
inicio
retorne x + y
fimfuncao
inicio
n <- 4
m <- 12
res <- soma(n,m)
escreva("A resposta é:",res)
fimalgoritmo
Arquivos
Arquivos
Um arquivo é um local reservado para guardar informações escritas. Um bom 
exemplo são os “arquivos de aço” utilizados para armazenar fichas contendo 
dados de clientes, produtos e pacientes, entre outros;
O arquivo de computador é uma maneira de armazenar informações em 
memória secundária. Exemplos desses meios magnéticos: hard disk, discos 
flexíveis, CD-ROM, entre outros;
Os arquivos podem armazenar imagens, textos, sons etc.
Nome: ____________________
Endereço: _________________
Cep: ________ tel: __________
Nome Endereço Cep tel
João Ninguém Rua do Bosque, 10 0800010 67867766
Maria Bonita Rua da Gruta, 247 0900990 31237788
José Mane Av. Sul, 3196 0798999 78966998
Interface
Campos
Registros
Arquivo-texto
Contém informações organizadas em registros; os registros, por sua vez, são 
organizados em campos, onde são“inseridas” as informações.
OBS: O VisuAlg não aceita a declaração do tipo arquivo.
Arquivos
• O fato do arquivo ser armazenado em memória secundária o torna 
independente de qualquer algoritmo. Isto é, um arquivo pode ser criado, 
consultado, processado e eventualmente removido por algoritmos 
distintos.
• Sendo o arquivo uma estrutura fora do ambiente do algoritmo, é 
necessário a operação de leitura e escrita do registro no arquivo.
Tipos de Arquivos
Arquivos Seqüenciais: Os arquivos sequenciais armazenam informações em 
formato ASCII na ordem em que foram digitadas. Alguns inconvenientes:
– As informações são lidas na mesma ordem em que foram inseridas;
– É necessário que o arquivo todo seja percorrido até que a informação 
desejada seja localizada;
– As informações não podem ser alteradas diretamente no arquivo; é 
necessário copiar todas as informações, do arquivo anterior, já com as 
alterações;
– Esse tipo de arquivo não é recomendado para trabalhos com grande 
volume de informações, pois é lento.
Tipos de Arquivos
Arquivos de Acesso Aleatório (ou Randômico): também usam o formato 
ASCII. Cada registro é armazenado em uma posição específica e pode ser 
recuperado sem a leitura das informações anteriores.
Essa posição é referenciada por um campo chave. O campo chave de um 
registro não pode ter o conteúdo repetido; ele deve ser único no arquivo para 
que possibilite a identificação do registro.
Por meio do campo chave, o registro pode ser localizado diretamente, sem 
que haja necessidade de se percorrerem todos os registros anteriores.
O campo chave deve ser declarada juntamente com as demais variáveis que 
irão compor o registro.
Operações de Manipulação de 
Arquivos
As informações dos arquivos, por estarem armazenadas em um dispositivo 
físico, podem ser manipuladas, isto é, o arquivo pode ser atualizado ou 
simplesmente consultado. Quatro operações básicas podem ser realizadas:
• Inserção de dados: trata-se da inclusão de novos registros;
• Consulta aos dados: trata-se da leitura dos dados já armazenados;
• Alteração de dados: trata-se da possibilidade de alteração de um ou 
mais campos do conjunto;
• Exclusão de dados: trata-se da eliminação de registros.
Operações de Manipulação de 
Arquivos
Para que seja possível manipular arquivos seqüenciais, será necessário:
– Declarar o registro e o arquivo;
– Declarar as variáveis de arquivo e registro;
– Abrir o arquivo;
– Fechar o arquivo.
Para declarar um arquivo seqüencial, deve-se usar a instrução tipo. É 
necessário declarar um identificador do arquivo, mencionando o tipo de 
arquivo que será utilizado. Observe a seguir no exemplo de uma agenda que 
armazena nome, endereço e telefone das pessoas.
tipo
reg_agenda = registro
nome: caracter
end: caracter
tel: caracter
fimregistro
tipo
arq_agenda: arquivo seqüencial de reg_agenda
var
auxiliar : reg_agenda
agenda: arq_agenda
Arquivo Seqüencial - Declaração
Para que seja possível a manipulação do arquivo, esse deve ser aberto com a 
instrução abra:
abra (agenda)
Será disponibilizado o primeiro registro armazenado. Para acessar os 
próximos registros, utiliza-se a instrução avance:
repita
avance (agenda)
até EOF (agenda) 
OBS: EOF significa “end of file” ou fim de arquivo.
Arquivo Seqüencial - Declaração
Para leitura é necessário que os campos sejam preenchidos na mesma ordem e 
com os mesmos nomes declarados no arquivo, utiliza-se a instrução leia:
leia (auxiliar.nome, auxiliar.end, auxiliar.tel)
Depois de representar o preenchimento dos campos, será necessário 
representar o armazenamento do conteúdo no arquivo, utiliza-se a instrução 
guarde:
guarde (agenda, auxiliar)
OBS: A variável de arquivo Agenda receberá o conteúdo da variável de registro Auxiliar.
Por último, o arquivo deve ser fechado, utiliza-se a instrução feche:
feche (agenda)
Arquivo Seqüencial - Declaração
algoritmo “INCLUSAO_AGENDA“
tipo
reg_agenda = registro
nome: caracter
end: caracter
tel: caracter
fimregistro
tipo
arq_agenda: arquivo seqüencial de reg_agenda
var
auxiliar : reg_agenda
agenda: arq_agenda
Arquivo Seqüencial - Operação de 
Inclusão
Inicio
abra (agenda)
repita
avance (agenda)
até EOF (agenda)
leia (auxiliar.nome, auxiliar.end, auxiliar.tel)
guarde (agenda, auxiliar)
feche (agenda)
fimalgoritmo
Iremos utilizar uma variável que receberá a informação a ser encontrada no 
arquivo e, por meio de uma estrutura de repetição, é provocado o avanço 
pelos registros até que seja encontrado o registro desejado.
Vejamos o exemplo a seguir utilizando uma variável chamada busca, que 
receberá o nome a ser consultado:
Arquivo Seqüencial - Operação de 
Consulta
algoritmo “CONSULTA_AGENDA“
tipo
reg_agenda = registro
nome: caracter
end: caracter
tel: caracter
fimregistro
tipo
arq_agenda: arquivo seqüencial de reg_agenda
var
auxiliar : reg_agenda
agenda: arq_agenda
buscar: caractere
Arquivo Seqüencial - Operação de 
Consulta
Inicio
abra (agenda)
leia (buscar)
repita
avance (agenda)
até (auxiliar.nome = buscar) ou (EOF (agenda))
se (auxiliar.nome = buscar) entao
escreva (auxiliar.end, auxiliar.tel)
senao
escreva (“Nome não cadastrado”)
fimse
feche (agenda)
fimalgoritmo
algoritmo “ALTERACAO_AGENDA“
tipo
reg_agenda = registro
nome: caracter
end: caracter
tel: caracter
fimregistro
tipo
arq_agenda: arquivo seqüencial de 
reg_agenda
var
auxiliar : reg_agenda
agenda: arq_agenda
buscar: caractere
novo_end: caractere
novo_tel: caractere
Arquivo Seqüencial - Operação de 
Alteração
Inicio
abra (agenda)
leia (buscar)
copie (agenda, auxiliar)
enquanto (auxiliar.nome <> buscar) e (nao EOF(agenda)) faca
avance (agenda)
copie (agenda, auxiliar)
fimenquanto
se (auxiliar.nome = buscar) entao
escreva (auxiliar.end, auxiliar.tel)
escreva (“Novo endereço: “)
leia (novo_end)
auxiliar.end := novo_end
escreva (“Novo telefone: “)
leia (novo_tel)
auxiliar.tel :=- novo_tel
guarde (agenda, auxiliar)
senao
escreva (“Nome não cadastrado”)
fimse
feche (agenda)
fimalgoritmo
algoritmo “EXCLUSAO_AGENDA“
tipo
reg_agenda = registro
nome: caracter
end: caracter
tel: caracter
fimregistro
tipo
arq_agenda: arquivo seqüencial de reg_agenda
var
auxiliar : reg_agenda
agenda: arq_agenda
buscar: caractere
resposta: caractere
Arquivo Seqüencial - Operação de 
Exclusão
Inicio
abra (agenda)
leia (buscar)
repita 
copie (agenda, auxiliar)
avance (agenda)
ate (auxiliar.nome = buscar) ou (EOF(agenda))
se (auxiliar.nome = buscar) entao 
escreva (auxiliar.end, auxiliar.tel)
escreva (“Deseja exluir? (Digite S ou N) “)
leia (resposta)
se (resposta = “S”) entao
delete (agenda)
fimse
senao
escreva (“Nome não cadastrado”)
fimse
feche (agenda)
fimalgoritmo
Livros da Biblioteca
Referências
• Apostila Curso Básico de Lógica de Programação. Paulo Sérgio de Morais. Unicamp 
– Centro de Computação. Acesso em 06/08/2017
http://www.inf.ufsc.br/~vania.bogorny/teaching/ine5231/Logica.pdf
• Lógica de Programação: A Construção de Algoritmos e Estruturas de Dados. André 
Luiz Villar. 3º Ed. MAKRON, 1993. 
• Algoritmos e Programação para Computadores, Dilermando Piva Junior. 
CAMPUS, 2013.

Continue navegando