Você está na página 1de 116

Algoritmos

Algoritmos

• “É a descrição, de forma lógica, de um conjunto finito de passos a serem


executados no cumprimento de uma tarefa”.
• “É um processo de cálculo matemático ou de resolução de um grupo de
problemas semelhantes”(MANZANO,2000).
• “São regras formais para obtenção de um resultado ou da solução de um
problema englobando fórmulas de expressões aritméticas”.
• É a descrição de um padrão de comportamento, expressado em termos de
um repertório bem definido e finito de ações “primitivas”, das quais
damos por certo que elas podem ser executadas (Guimarães/ Lajes, 1994)
• É uma “receita de bolo”

Informática, Algoritmos e Estruturas de Dados Ifes 1


Representação Lógica

Linguagem natural

Linguagem Algorítmica
(expressão organizada, com sintaxe, mas foco na lógica e não na sintaxe)

Linguagem Formal (Programa)


(expressão organizada, com sintaxe, codificada em uma linguagem não
familiar)

Informática, Algoritmos e Estruturas de Dados Ifes 2


Exemplo de Algoritmo

Trocar lâmpada numa sala em que existe uma


escada.
1. Posicione a escada debaixo da lâmpada queimada.
2. Suba na escada até que a lâmpada possa ser alcançada.
3. Gire a lâmpada queimada no sentido anti-horário até que se
solte.
4. Escolha uma lâmpada nova de mesma potência da queimada.
5. Posicione a nova lâmpada no soquete.
6. Gire no sentido horário até que ela se firme.
7. Desça a escada.

Informática, Algoritmos e Estruturas de Dados Ifes 3


Programa

• São algoritmos escritos em uma Liguagem de


computador (ex.: Pascal, Java, C, Fortran, C#)

Informática, Algoritmos e Estruturas de Dados Ifes 4


Representação Gráfica de Algoritmos

• Fluxograma: ferramenta gráfica para descrever


ações lógicas. Descreve a seqüência de ações a
serem desenvolvidas pelo computador

Informática, Algoritmos e Estruturas de Dados Ifes 5


Algumas Simbologias Básicas
Terminal - indica o inicio ou fim do fluxo de um programa

Fluxo de dados - indica sentido do fluxo de dados

Processamento - operações e manipulação de dados

Entrada de dados ou operação manual (exemplo, entrada


pelo teclado)
Saída de dados em tela

Decisão - uma decisão deve ser tomada e há possibilidade


de desvios de fluxo
Conector - para conectar fluxos ou particionar um diagrama

Informática, Algoritmos e Estruturas de Dados Ifes 6


Exemplo

Elaborar algoritmo que efetue o cálculo da área de uma


circunferência
inicio

A <- 3.14159 * r ** 2

fim

Informática, Algoritmos e Estruturas de Dados Ifes 7


Tipos de Dados e Instruções

O Computador manipula dois tipos de informação:

• Dados - informações que serão armazenadas a


fim de serem processadas
• Instruções - comandos que serão decodificados
pelo computador e realizarão operações

Informática, Algoritmos e Estruturas de Dados Ifes 8


Alguns tipos de Dados

• Inteiros: valores numéricos pertencentes ao conjunto


de números inteiros, positivos ou negativos
• Reais: valores numéricos pertencentes ao conjunto
dos números reais
• Caracteres: as letras, números e símbolos. É
representado entre aspas simples(Ex: ‘$’, ‘8’, ‘a’).
• Texto: conjunto de caracteres agrupados. São
representados entre aspas (Ex. “R$123,00”, “hoje”)
• Lógicos (Booleano): verdadeiro (1) ou falso (0)

Informática, Algoritmos e Estruturas de Dados Ifes 9


Variáveis

• Podemos dizer que variável é a identificação de um


dado armazenado no computador
memória do
computador

r
5,0

A 78,5

Informática, Algoritmos e Estruturas de Dados Ifes 10


Regras para nomes de variáveis

• 1 ou mais caracteres
• 1o caractere deverá ser letra
• sem espaços em branco entre as letras
• só letras e números
• clareza nos nomes

Ex.: raio, nome, primeiraParte, x1

Informática, Algoritmos e Estruturas de Dados Ifes 11


Operadores Aritméticos
<- atribuição
+ soma
- subtração
* multiplicação
** exponenciação
/ divisão
mod resto. Ex. 11 mod 3 . Resultado: 2
div divisão inteira 11 div 3. Resultado 3

ex.: raiz da equação de segundo grau:


x <- (-b + (b**2 -4*a*c)**(1/2))/(2*a)

Informática, Algoritmos e Estruturas de Dados Ifes 12


Resolução de Problemas por meio dos
Computadores

Problema Computacional

Dados de Processamento
Dados de
Entrada Saída

Informática, Algoritmos e Estruturas de Dados Ifes 13


Etapas para a solução de um problema
Computacional

• Ler e entender bem


• Levantar as entradas e saídas
• Definir quais serão as variáveis necessárias (incluindo
o tipo)
• Especificar como o problema pode ser resolvido
(rascunho do algoritmo)
• Testar

Informática, Algoritmos e Estruturas de Dados Ifes 14


Exemplo de Problema

Elaborar algoritmo que efetue o cálculo da área de uma


circunferência
Entradas: raio, Saídas: área
Variáveis: r (raio), A (área)
Algoritmo: Obter o valor do raio
Executar a fórmula: A <- 3.14159 * R ** 2
Apresentar o valor de A

Informática, Algoritmos e Estruturas de Dados Ifes 15


Exemplo de Problema (cont.)
• Português estruturado (Portugol):
var
A, r: real
const
Pi=3.14159
inicio
leia (r)
A <- Pi * r ** 2
escreva (A)
fim

Informática, Algoritmos e Estruturas de Dados Ifes 16


Exemplo: Algoritmo para calcular a média de alunos
programa CalculaMedia
var
N1, N2, N3, N4: real
SOMA, MEDIA: real
inicio
leia (N1, N2, N3, N4)
SOMA <- N1+N2+N3+N4
MEDIA <- SOMA/4
escreva (“NOTA 1”, N1)
escreva (“NOTA 2”, N2)
escreva (“NOTA 3”, N3)
escreva (“NOTA 4”, N4)
escreva (“Média”, MEDIA)
fim

Informática, Algoritmos e Estruturas de Dados Ifes 17


Exemplo sala - listageral número 3 - fluxograma e
algoritmo

Exercício sala - listageral número 8 - fluxograma e


algoritmo

Informática, Algoritmos e Estruturas de Dados Ifes 18


Estrutura de tomada de decisões

Desvio condicional Simples


É utilizada a instrução se...entao...fimse. Se a condição
estabelecida for verdadeira, serão executadas as instruções
que se encontram entre se...entao e fimse.

se condição entao condição


V
aiaiaiaiaia
fimse F
aiaiaiaiaia

Informática, Algoritmos e Estruturas de Dados Ifes 19


Operadores Relacionais e Lógicos

Relacionais
< menor
> maior
<= menor ou igual
>= maior ou igual
<> diferente

Lógicos
E, OU e NÃO

Informática, Algoritmos e Estruturas de Dados Ifes 20


Exemplo: Algoritmo para calcular a média de alunos e informe se
o mesmo foi aprovado ou reprovado, dado que a MEDIA para
aprovação é 7
programa aprovado
var
RESULTADO: caractere
N1, N2, N3, N4: real
SOMA, MEDIA: real
inicio
leia (N1, N2, N3, N4)
SOMA <- N1+N2+N3+N4
MEDIA <- SOMA/4
se (MEDIA >= 7) entao
resultado<-“aprovado”
fimse
se (MEDIA < 7) entao
resultado<- “reprovado”
fimse
escreva(“O resultado foi: ”, resultado)
fim

Informática, Algoritmos e Estruturas de Dados Ifes 21


Exemplo: Algoritmo para verificar se um triãngulo é isosceles
programa triangulo
var
lado1, lado2, lado3: real
inicio
leia (lado1, lado2, lado3)
se (lado1=lado2) E (lado1<>lado3) entao
escreva (“é isosceles”)
fimse
se (lado1=lado3) E (lado1<>lado2) entao
escreva (“é isosceles”)
fimse
se (lado2=lado3) E (lado2<>lado1) entao
escreva (“é isosceles”)
fimse
fim

Informática, Algoritmos e Estruturas de Dados Ifes 22


Exercício sala - listageral número 17 - fluxograma e
algoritmo

Informática, Algoritmos e Estruturas de Dados Ifes 23


Estrutura de tomada de decisões (cont.)

Desvio condicional Composto


É utilizada a instrução se...entao...senão...fimse. Se a condição
estabelecida for verdadeira, serão executadas as instruções
que se encontram entre se...entao e senão e se a condição for
falsa serão executadas as instruções entre senão e fimse.

se condição entao V
condição
aiaiaiaiaia (condição verdadeira)
F
senão aiaiaiaiaia
ioioioioioio (condição falsa) ioioioioioio

fimse
Informática, Algoritmos e Estruturas de Dados Ifes 24
Exemplo: Algoritmo para calcular a média de alunos e informe se
o mesmo foi aprovado ou reprovado, dado que a MEDIA para
aprovação é 7
programa aprovado
var
RESULTADO: caractere
N1, N2, N3, N4: real
SOMA, MEDIA: real
inicio
leia (N1, N2, N3, N4)
SOMA <- N1+N2+N3+N4
MEDIA <- SOMA/4
se (MEDIA >= 7) entao
resultado<-“aprovado”
senão
resultado<- “reprovado”
fimse
escreva(“O resultado foi: ”, resultado)
fim

Informática, Algoritmos e Estruturas de Dados Ifes 25


Exercício sala - listageral número 15 - algoritmo

Exercício casa - listageral números 13

Informática, Algoritmos e Estruturas de Dados Ifes 26


Estrutura de tomada de decisões (cont.)

Desvios condicionais Encadeados


Há casos em que condições lógicas devem ser devinidas sucessivamente, e
assim uma determinada condição só poderá ser testada se condições
anteriores forem satisfeitas.

se condição1 entao
aiaiaiaiaia (condição verdadeira)
senão
se condição2 entao
oioioioioio (condição2 verdadeira)
fimse
fimse

Informática, Algoritmos e Estruturas de Dados Ifes 27


V
condição

F
aiaiaiaiaia

V
condição oioioioioio

Informática, Algoritmos e Estruturas de Dados Ifes 28


Exemplo: Algoritmo para calcular o reajuste do salário de um
funcionário.
a) salário < 500 - reajuste de 15%
b) salário >= 500, mas <=1000 – resjuste de 10%
c) salário >1000 – resjuste de 5%

Informática, Algoritmos e Estruturas de Dados Ifes 29


inicio

salario

V
salario<500

F
V
salario<=1000 salario<-salario*1.15

salario<-salario*1.10 F
salario<-salario*1.05

salario

fim

Informática, Algoritmos e Estruturas de Dados Ifes 30


programa salario
var
salario: real
inicio
leia (salario)
se (salario<500) entao
salario<-salario*1.15
senão
se (salario<=1000) entao
salario<-salario*1.15
senão
salario<-salario*1.05
fimse
fimse
escreva(“O novo salario é: ”, salario)
fim

Informática, Algoritmos e Estruturas de Dados Ifes 31


Exemplo sala - Elaborar algoritmo: de 02 valores fornecidos
informe qual é o maior deles

Exercícios sala –
1) De um valor fornecido informar se o mesmo é divísível por 02
ou por 03
2) Crie uma nova versão do algoritmo anterior, infomando se o
valor fornecido é divisível por 02, por 03 ou por 02 e por 03
3) Ler o nome e o sexo de uma pessoa e se o sexo for masculino
escrever “Ilmo Sr. nome” (onde “nome” é o nome fornecido)
ou caso o sexo seja feminino escrever “Ilma Sra. nome” (onde
“nome” é o nome fornecido)
4) Elaborar um algoritmo que de 03 valores fornecidos informe
qual é o maior deles

Exercícios casa listageral 14, 17, 21 e 22- algoritmo

Informática, Algoritmos e Estruturas de Dados Ifes 32


Laços ou malhas de repetição

Há situações em que é necessário repetir o trecho de


um programa um determinado número de vezes.
Neste caso cria-se um laço que faz um trecho de
processamento tantas vezes quantas necessárias

Exemplo: Elabore um algoritmo que conte os votos S ou N para 03


votantes

Informática, Algoritmos e Estruturas de Dados Ifes 33


programa votação
var
voto: caractere
contaS, contaN, : inteiro
inicio
contaS<-0
contaN<-0
leia (voto)
se (voto= “S”) entao
contaS <- contaS +1
senão
se (voto= “N”) entao
contaN <- contaN+1
fimse
fimse
leia (voto)
se (voto= “S”) entao
contaS <- contaS +1
senão
se (voto= “N”) entao
contaN <- contaN+1
fimse
fimse
leia (voto)
se (voto= “S”) entao
contaS <- contaS +1
senão
se (voto= “N”) entao
contaN <- contaN+1
fimse
fimse
escreva(“A contagem de votos S foi ”, contaS,” e a contagem de N foi ”, contaN)
fim
Informática, Algoritmos e Estruturas de Dados Ifes 34
Repetição: teste lógico no inicio do laço

enquanto...faça...fimenquanto: é realizado um teste no


inicio do laço em que se verifica se o trecho de
instruções internas ao laço (entre faça e fimenquanto)
deverá ser executado ou não.

F
condição
Enquanto condição faca
V
aiaiaiaiaia
aiaiaiaiaia
oioioioioio
oioioioioio
fimenquanto

Informática, Algoritmos e Estruturas de Dados Ifes 35


Exemplo: Elabore um algoritmo que calcule a x ** 5 utilizando repetições
inicio

cont<-1
pot<-1

x programa ``
var
x, pot: real
F cont: inteiro
cont<=5 inicio
cont<-1
V pot<-1
leia(x)
pot<- pot*x enquanto cont <= 5 faca
pot <- pot*x
cont<- cont+1
cont<-cont+1 fimenquanto
escreva(x,”**5=”,pot)
fim

pot

fim

Informática, Algoritmos e Estruturas de Dados Ifes 36


Exemplo: Elabore um algoritmo que conte os votos S ou N ou entre 03 votantes
inicio

cont<-1
contaS<-0
contaN<-0

1
F
cont<=3

V contaS, contaN

voto
fim

F F
Voto=”S” voto=“N”

V V
contaS<-contaS+1 contaN<-contaN+1

cont<-cont+1

1
Informática, Algoritmos e Estruturas de Dados Ifes 37
programa votação
var
voto: caractere
contaS, contaN, : inteiro
inicio
contaS<-0
contaN<-0
cont<-1
enquanto cont <= 3 faca
leia (voto)
se (voto= “S”) entao
contaS <- contaS +1
senão
se (voto= “N”) entao
contaN <- contaN+1
fimse
fimse
cont<-cont+1
fimenquanto
escreva(“A contagem de votos S foi ”, contaS,” e a
contagem de N foi ”, contaN)
fim12

Informática, Algoritmos e Estruturas de Dados Ifes 38


Exemplo de laço controlado pelo usuário
Elabore um algoritmo que conte os votos S ou N ou para votantes e pare quando uma pessoa digite x

programa votação
var
voto: caractere
cont, contaS, contaN, : inteiro
inicio
contaS<-0
contaN<-0
leia (voto)
enquanto (voto<>”x”) e (voto<>”X”) faca
se (voto= “S”) entao
contaS <- contaS +1
senão
se (voto= “N”) entao
contaN <- contaN+1
fimse
fimse
leia (voto)
fimenquanto
escreva(“A contagem de votos S foi ”, contaS,” e a
contagem de N foi ”, contaN)
fim

Informática, Algoritmos e Estruturas de Dados Ifes 39


Exercícios da seção: Algoritmos com repetição
Exercícios sala
1) Somar todos os números inteiros de 10 a 100
2) Calcular os quadrados dos números inteiros de 15 a 200
3) Apresentar a tabuada de um número n fornecido: n*1 a n*10
4) Informar se um número inteiro fornecido é divisível por 3. Repetir até que
seja fornecido o número zero

Exercícios casa
1) Apresentar as potencias de um número x, para os expoentes de 4 a 8
2) Informar quais os números inteiros entre 100 e 200 que são divisíveis
por 7
3) Leia repetidamente os números inteiros fornecidos até que seja
fornecido um número negativo. O algoritmo deverá informar qual é o
menor número. O número negativo não deverá ser considerado.
listageral 06, 03, 01, 02, 07, 08

Informática, Algoritmos e Estruturas de Dados Ifes 40


Repetição com variável de controle
para...de...até...passo...faça...fimpara: quando laços devem ser
executados apenas um determinado número de vezes pode ser
utilizada a estrutura para...de...até...passo...faça...fimpara . Os
comandos que ficam entre para...de...até...passo...faça e
fimpara são executados o número de vezes determinado por
uma variável contador.

cont<-inicio, fim,
incremento para cont de inicio até fim passo incremento faca
aiaiaiaiaia
aiaiaiaiaia oioioioioio
fimpara
oioioioioio

Informática, Algoritmos e Estruturas de Dados Ifes 41


Exemplo: Forneça um valor, multiplique por 3 e apresente o resultado. Repita a
operação por cinco vezes.

Cont<-1,5

inicio ou

programa produto
cont<-1,5,1 var
x, R: real
cont: inteiro
x inicio
para cont de 1 até 5 passo 1 faca
leia(x)
R <- x * 3
R <- x * 3
escreva(x,”*3=”,R)
fimpara
R fim

fim

Informática, Algoritmos e Estruturas de Dados Ifes 42


Exercícios da seção: Algoritmos com repetição
Exemplo:
Calcular o quadrado dos números de 15 a 200
Calcular o quadrado dos números que forem múltiplos de 5 que
se encontram entre de 15 a 200

Exercícios: faça com para...


listageral 06, 03, 07, 10, 13a

Informática, Algoritmos e Estruturas de Dados Ifes 43


Exercícios da seção: Algoritmos com repetição
22. Escreva um algoritmo que leia 50 valores e encontre o maior e
o menor deles. Mostre o resultado.

26. Escrever um algoritmo que leia uma quantidade desconhecida


de números e conte quantos deles estão nos seguintes
intervalos: [0.25], [26,50], [51,75] e [76,100]. A entrada de
dados deve terminar quando for lido um número negativo.

15. Fulano tem 1,50m e cresce 2 cm por ano, enquanto Ciclano


tem 1,10m e cresce 3 centímetros por ano, e Beltrano tem
1,90m e não cresce mais. Construa um algoritmo em portugol
que calcule e imprima quantos anos serão necessários para
que Ciclano seja o maior dos três.

Informática, Algoritmos e Estruturas de Dados Ifes 44


Exercícios da seção: Algoritmos com repetição
1. Faça um algoritmo que, para cada valor inteiro positivo m
fornecido, informe se o número é primo. O algoritmo deverá
parar quando for fornecido um valor negativo.
2. Faça um algoritmo que, para cada par de valores inteiros
positivos m e n fornecidos, apresente todos os valores entre
m e n inclusive. O algoritmo deverá parar quando for
fornecido um valor negativo.
3. Para o algoritmo anterior, além do que o mesmo já faz, deverá
informar para cada valor da faixa de valores entre m e n, se
cada um deles é primo.
Casa: ListaGeral 17 e 18

Informática, Algoritmos e Estruturas de Dados Ifes 45


Estruturas de Dados - Vetor
Vetor ou Matriz unidimensional: Uma variável é dimensionada
com um tamanho e armazena várias informações (tantas
quantas for o tamanho) de um mesmo tipo. A dimensão é um
número inteiro e positivo.

Exemplo:
As notas de um aluno:
Antes: 4 variáveis: Nota1, Nota2, Nota3, Nota4 [1] 5,0
[2] 8,0
Agora: 1 variável: Nota
Nota: vetor [1..4] de real [3] 3,5
Nota[1], Nota[2], Nota[3], Nota[4], [4] 10

Informática, Algoritmos e Estruturas de Dados Ifes 46


Exemplo: Elabore um algoritmo que calcule e apresente a média das oito notas
(fornecidas) de um aluno.
inicio

Soma <- 0
programa média
var
I <-1,8 Nota: vetor [1..8] de real
i: inteiro
Media, Soma: real
Nota[i] inicio
Soma<-0
Soma <- Soma + Nota[i] para i de 1 até 8 faca
leia(Nota[i])
Soma<-Soma + Nota[i]
fimpara
Media <- Soma/8
Media <- Soma / 8
escreva (Media)
fim
Media

fim
Informática, Algoritmos e Estruturas de Dados Ifes 47
Exemplo: Elabore um algoritmo que calcule a média das oito notas (fornecidas)
de um aluno. Apresente a média e em seguida as oito notas.

inicio
programa média
1 var
Soma <- 0
Nota: vetor [1..8] de real
Media i: inteiro
Media, Soma: real
I <-1,8 inicio
para i de 1 até 8 faca
I <-1,8 leia(Nota[i])
Soma<-Soma + Nota[i]
Nota[i] fimpara
Nota[i] Media <- Soma/8
Soma <- Soma + Nota[i] escreva (Media)
para i de 1 até 8 faca
escreva (Nota[i])
fimpara
fim
Media <- Soma / 8 fim

Informática, Algoritmos e Estruturas de Dados Ifes 48


Exercícios da seção: Vetores e Matrizes
Exercícios sala
1) Faça um algoritmo que leia 50 idades e verifique qual a maior
delas.

Exemplo sala
2) Faça um algoritmo que leia 50 idades e apenas após ler todas
as idades verifique qual a maior delas.

Exercícios sala
Lista ExerciciosVetores: 6, 9
3) Faça um algoritmo que leia 10 números e apresente os
números em ordem crescente
Exercícios casa:
Lista ExerciciosVetores: 2, 3, 5, 10, 14

Informática, Algoritmos e Estruturas de Dados Ifes 49


Elabore um algoritmo que:
leia um conjunto de códigos (valores inteiros positivos) e preços
de produtos para um máximo 10 tipos de produtos. A entrada
das informações deverá ser interrompida ao décimo produto.
Após a entrada de pares códigos e preços um comprador
informará quantas unidades deseja adquirir de um conjunto
de produtos com respectivo código. O algoritmo deverá
informar o preço da quantidade informada ou, caso o código
não seja encontrado na lista ele deverá informar “Produto”
código_informado “não encontrado”. O algoritmo deverá
ainda acumular os valores dos produtos adquiridos e
apresentar o total na tela. A compra será finalizada quando
for apresentado um códido de produto negativo.

Informática, Algoritmos e Estruturas de Dados Ifes 50


Supermercado:
Cadastro: Faça um algoritmo para cadastrar nome (caractere), códigos de
produtos (inteiro), quantidade em estoque (inteiro) e preços unitários (com
centavos) para até 10 produtos. O algoritmo deverá parar de ler os códigos
e preços quando for fornecido um código com valor 0 ou quando atingir 10
produtos.
Venda: O algoritmo deverá ler código e quantidade de diversos produtos
repetidamente. A quantidade informada deverá ser abatida da quantidade
em estoque e a quantidade em estoque deverá ser atualizada. Deverá ser
apresentado para cada um dos produtos o código, o nome e o preço devido
àquele produto, considerando a quantidade vendida e disponível em
estoque. Caso o código não seja encontrado ou não houver quantidade
disponível do produto ele deverá informar “Produto” código_informado
“não encontrado ou estoque insuficiente”. O final da venda acontecerá
quando for digitado um código 0 (zero). Apenas ao final deverá ser
apresentado o total geral da venda.
Inventário: O algoritmo deverá ordenar os produtos em estoque por código,
mantendo os nomes, quantidades e preços com seus códigos
correspondentes. Após a ordenação os códigos, nomes, quantidades
disponíveis e preços deverão ser apresentados na tela.

Informática, Algoritmos e Estruturas de Dados Ifes 51


Elabore um algoritmo que:
leia o número do título de eleitor de cada votante e o código do
candidato votado e grave essas informações. O algoritmo
deverá parar de ler os códigos dos votos quando for fornecido
um voto com valor 0 ou quando atingir 1000 votantes. Escreva
após a votação (apenas após a votação), dentre os votantes:
• a porcentagem de votos para cada candidato;
• a porcentagem de votos nulos;
• a porcentagem de votos em branco.
• após a votação, ordene os títulos de eleitor fornecidos
mantendo os votos com seus títulos correspondentes. Apenas
as posições preenchidas deverão ser ordenadas.
• após a ordenação, leia o número do título de eleitor de um
votante e informe qual foi o voto do mesmo. Apenas as
posições preenchidas deverão ser verificadas.

Informática, Algoritmos e Estruturas de Dados Ifes 52


Algoritmos de pesquisa
• Define-se pesquisa como a operação que permite encontrar ou
concluir que não existe, um dado elemento num dado
conjunto.
• A pesquisa de um elemento pode ser feita num conjunto
ordenado ou não.
• Quando o conjunto não está ordenado, o método usado é o
exaustivo, que consiste em percorrer sequencialmente todo o
conjunto (desde o primeiro) até se encontrar o elemento
desejado ou, não o encontrando, se concluir que não existe.
• Quando o conjunto está ordenado, existem vários métodos,
como a pesquisa sequencial e binária.
• Nos exemplos seguintes, considera-se que a ordenação é
crescente.
Informática, Algoritmos e Estruturas de Dados Ifes 53
Pesquisa exaustiva (algoritmo)
Pesquisar o elemento Elem no vetor V de tamanho tam
k <- -1 // significa que Elem não foi encontrado em V
i <- 1
Enquanto (i <= tam) e (k = -1) faca
Se (V[i] = Elem) entao
k <- i
senao
i <- i + 1
Fimse
fimenquanto
Se (k = -1) entao
Escreval (“Elem não se encontra em V”)
senao
Escreval (“ Elem encontra-se na posição ”, k)
fimse
Informática, Algoritmos e Estruturas de Dados Ifes 54
Pesquisa sequencial (algoritmo)
Pesquisar o elemento Elem no vetor V de tamanho tam
k <- -1 // significa que Elem ainda não foi encontrado em V
i <- 1 // índice dos elementos do vetor V
Enquanto (i <= tam) e (k = -1) faca
Se (V[i] = Elem) entao
k <- i
senao
Se (V[i] < Elem) entao
i <- i + 1
senao
k <- -2; // significa que Elem não está em V
fimse
fimse
fimenquanto
Se (k > 0) então
Escreval (“Elem encontra-se na posição “, k)
senao
Escreval (“Elem não se encontra em V “)
fimse

Informática, Algoritmos e Estruturas de Dados Ifes 55


Pesquisa binária
• Comparar o elemento a pesquisar com o elemento que está no
meio do vetor e analisar 3 situações diferentes:
1ª) se aquele elemento é igual ao que está ao meio,
2ª) se aquele elemento está antes do meio,
3ª) se aquele elemento está depois do meio.
• Se ocorreu a 1ª situação, então foi encontrado o elemento e
está no vetor naquela posição.
• Se ocorreu a 2ª situação, então basta pesquisar aquele
elemento no subvetor até ao meio.
• Se ocorreu a 3ª situação, então basta pesquisar aquele
elemento no subvetor do meio para a frente

Informática, Algoritmos e Estruturas de Dados Ifes 56


Pesquisa binária (algoritmo iterativo)
Pesquisar o elemento Elem no vetor V de tamanho tam
inicio <- 1
fim <- tam
k <-1 // k recebe a posicao de Elem (no inicio presume-se que nao esta)
Enquanto ( (inicio <= fim) e (k = -1) ) faca
meio <- (inicio + fim) / 2
Se (Elem = V[meio]) entao
k <- meio
senao
Se (Elem < V[meio]) entao
fim <- meio - 1
senao
inicio <- meio + 1
fimse
fimse
fimenquanto
Se (k >= 1) entao
Escreval (“Elem encontra-se em V na posicao “, k)
senao
Escreval (“ Elem nao se encontra em V “)
fimse

Informática, Algoritmos e Estruturas de Dados Ifes 57


Pesquisa binária

Informática, Algoritmos e Estruturas de Dados Ifes 58


Pesquisa Binária

Informática, Algoritmos e Estruturas de Dados Ifes 59


Pesquisa Binária

Informática, Algoritmos e Estruturas de Dados Ifes 60


Pesquisa Binária

Informática, Algoritmos e Estruturas de Dados Ifes 61


Pesquisa Binária

Informática, Algoritmos e Estruturas de Dados Ifes 62


Pesquisa Binária

Informática, Algoritmos e Estruturas de Dados Ifes 63


Pesquisa Binária

Informática, Algoritmos e Estruturas de Dados Ifes 64


Pesquisa Binária

Informática, Algoritmos e Estruturas de Dados Ifes 65


Pesquisa Binária

Informática, Algoritmos e Estruturas de Dados Ifes 66


Pesquisa Binária

Informática, Algoritmos e Estruturas de Dados Ifes 67


Pesquisa Binária

Informática, Algoritmos e Estruturas de Dados Ifes 68


Pesquisa Binária

Informática, Algoritmos e Estruturas de Dados Ifes 69


Pesquisa Binária

Informática, Algoritmos e Estruturas de Dados Ifes 70


Exercício Aula
• Ler um vetor de 50 elementos inteiros positivos não
repetidos, e ordená-lo em ordem crescente escrevendo
o seu conteúdo na tela (posição e valor). A seguir, ler
uma outra sequência de números inteiros positivos,
escrevendo a cada número lido*:
1. Caso o número lido exista no vetor, escreva o valor pesquisado
e a posição em que o mesmo foi encontrado no vetor, usando
pesquisa binária;
2. Caso o número não exista no vetor, escreva a posição do vetor
cujo conteúdo está mais próximo ao número pesquisado ,
usando pesquisa binária;
* Terminar a leitura quando for lido o valor -1.

Informática, Algoritmos e Estruturas de Dados Ifes 71


Exercício Casa
• Ler um vetor de 50 elementos inteiros positivos, ordená-lo em
ordem crescente, escrevendo o seu conteúdo na tela (posição e
valor). A seguir, ler uma outra sequência de números inteiros
positivos, escrevendo a cada número lido*:
1. Caso o número lido exista no vetor, escreva o valor pesquisado
e as posições em que o mesmo foi encontrado no vetor,
usando pesquisa sequencial;
2. Caso o número lido exista no vetor, escreva o valor pesquisado
e as posições em que o mesmo foi encontrado no vetor,
usando pesquisa binária;
3. Caso o número não exista no vetor, escreva a posição do vetor
cujo conteúdo está mais próximo ao número pesquisado,
usando pesquisa binária;
* Terminar a leitura quando for lido o valor -1.
Informática, Algoritmos e Estruturas de Dados Ifes 72
Estruturas de Dados - Matriz
Matriz: Informações de um mesmo tipo são armazenados em uma variável com
estrutura de várias dimensões (normalmente até três). As dimensões são
números inteiros e positivos.
Matrizes de uma dimensão são normalmente chamados de vetor e matrizes de
duas dimensões são normalmente chamados de tabela.

Unidimensionais (vetor): y: vetor [1..10] de caractere


Bidimensionais (tabela): m = matriz [ 1..3,1..4] de real; (visualG: vetor[ 1..3,1..4]
de real)
Tridimensionais: n = matriz [ 1..2,1..3,1..5] de inteiro; (visualG não implementa)

Informática, Algoritmos e Estruturas de Dados Ifes 73


[linha,coluna]
[1,1] = 5,0
[1] [2] [3]
[1,2] = 4,3
[1] 5,0 4,3 3,5 [1,3] = 3,5

[2] 9,4 4,0 0,3 [2,1] = 9,4


.
[3] 8,0 16 5,2
.
[4] 6,7 9,1 3,7 [4,1] = 6,7
[4,2] = 9,1
[4,3] = 3,7

Informática, Algoritmos e Estruturas de Dados Ifes 74


Ex.: Faça um algoritmo que leia uma matriz 4 X 4 e uma constante qualquer.
Multiplique os elementos da diagonal principal por esta constante e
imprima a matriz resultante;
programa média
var
mat: matriz [1..4, 1..4] de real
valor: real
i,j: inteiro
inicio
para i de 1 até 4 faca
para j de 1 até 4 faca
leia(mat[i,j])
fimpara
fimpara
escreva(“entre o valor da constante”)
leia (valor)
para i de 1 até 4 faca
mat[i,i]<-mat[i,i]*valor
fim para
para i de 1 até 4 faca
para j de 1 até 4 faca
escreva (i,”,”,j,”=”, “mat[i,j])
fimpara
fimpara
fim

Informática, Algoritmos e Estruturas de Dados Ifes 75


Exercícios matrizes
2) Faça um algoritmo que leia 2 matrizes 3 X 5, calcule e imprima
a soma das duas;
3) Faça um algoritmo que leia uma matriz 3 X 4 e imprima sua
transposta;
8) Faça um algoritmo que leia 5 notas dadas a cada aluno durante
o período letivo em uma turma de 30 alunos. Calcule a media
de cada aluno, a media geral da turma e imprima de acordo
com o seguinte layout:
Núm. Média Aluno Media Turma
1 x,xx x,xx
2 x,xx x,xx
..... ...... ......

Informática, Algoritmos e Estruturas de Dados Ifes 76


Uma matriz quadrada inteira é chamada de "quadrado mágico" se
a soma dos elementos de cada linha, a soma dos elementos
de cada coluna e a soma dos elementos das diagonais
principal e secundária são todos iguais. Exemplo: A matriz
abaixo representa um quadrado mágico:
8 0 7
4 5 6
3 10 2

Faça um algoritmo em que um usuário fornece valores para as


posições de uma matriz de 3 linhas e 3 colunas e o algoritmo
verifica se a matriz representa um quadrado mágico.

Informática, Algoritmos e Estruturas de Dados Ifes 77


JOGO DA VELHA. Uma dada matriz 3 x 3 de caracter pode conter apenas 3
valores em cada uma de suas posições: “ “ (espaço), X (x maiúsculo) e O (o
maiúsculo). Há dois usuários, usuário 1 para o X e usuário 2 para o O.
Parte 1) Faça um algoritmo que os usuários fornecem posições i e j e lances X
ou O, preenchendo a posição com o lance (X ou O) e permitindo apenas a
entrada dos valores válidos em cada posição. A matriz deverá ser
inicializada com “ “ em todas as posições;
Parte 2) O algoritmo deverá verificar, a cada valor fornecido o fechamento de
uma coluna, linha ou diagornal apenas por X ou por O. Caso isso aconteça
o algoritmo deverá ser encerrado e deverá informar “O vencedor foi” X
(ou O).
Parte 3) O algoritmo de deverá permitir a inserção dos nomes dos jogadores
jogador1 (X) e jogador 2 (O). Cada jogador deverá ter a sua vez de jogar e
em caso de vitória de um dos dois deverá ser informada a letra vitoriosa
(X ou O) e o nome do jogador vitorioso.

leia (l, c, lance)


enquanto (l<1 ou l>3) ou (c<1 ou c>3) ou ((lance<>”x”) e (lance<>”o”))
leia (l, c, lance)
fimenquanto

Informática, Algoritmos e Estruturas de Dados Ifes 78


Exercícios de revisão
(Condição)
Um fazendeiro vai contratar uma equipe de trabalhadores para a colheita de
laranjas de sua fazenda. Os trabalhadores serão identificados por um
número e pela sua idade. O fazendeiro pagará aos trabalhadores no final
do dia conforme a quantidade de caixas colhidas segundo a tabela abaixo:
– Número caixas R$ por caixa
– até 5 2.00
– de 6 a 10 2.50
– de 11 a 20 3.50
– 21 ou mais 5.00

Além disso, o fazendeiro pagará um adicional conforme a idade do trabalhador


segundo a tabela abaixo:
Idade (anos) Adicionalde
– 18 a 45 10%
– de 45 a 65 20%

Faça um algoritmo que leia o número do trabalhador, sua idade e a quantidade


de caixas colhidas no dia e imprima seu número e seu salário diário.

Informática, Algoritmos e Estruturas de Dados Ifes 79


Exercícios de revisão
(Repetição)
Construir um algoritmo para ler vários valores inteiros e positivos, lidos
externamente. Calcular e imprimir:
– A média geral dos números lidos;
– A soma dos números pares;
– A quantidade de múltiplos de 5;
– O final da leitura acontecerá quando for lido um valor negativo.

(vetores)
Fazer um algoritmo que:
Em uma cidade do interior, sabe-se que, de janeiro a abril de 1976(121 dias),
não ocorreu temperatura inferior a 15ºC nem superior a 40ºC. As
temperaturas verificadas em cada dia serão lidas e armazenadas em um
vetor. Fazer um algoritmo que, após o armazenamento de todas as
temperaturas, verifique e imprima:
– A menor temperatura ocorrida;
– A maior temperatura ocorrida;
– A temperatura média;
– O número de dias nos quais a temperatura foi inferior à temperatura média.

Informática, Algoritmos e Estruturas de Dados Ifes 80


Exercícios
(Matrizes)
1) Escrever um algoritmo para ler uma matriz (7,4) contendo valores inteiros (supor que
os valores são distintos). Após, encontrar o menor valor contido na matriz e sua
posição.

2) Escrever um algoritmo para armazenar valores inteiros em uma matriz (5,6). A seguir,
calcular e escrever a média dos valores pares contidos na matriz e seu conteúdo.

3) Escrever um algoritmo que lê uma matriz M(5,5) e cria 2 vetores SL(5), SC(5) que
contenham respectivamente as somas das linhas e das colunas de M. Escrever a
matriz e os vetores criados.

4) Escreva um algoritmo que lê uma matriz M(5,5) e calcula as somas:


a) da linha 4 de M.
b) da coluna 2 de M.
c) da diagonal principal.
d) da diagonal secundária.
e) de todos os elementos da matriz.
f) Escreva estas somas e a matriz.

5) Fazer um algoritmo que escreva um algoritmo que ordene os elementos de cada


linha de uma matriz M[10,10].

Informática, Algoritmos e Estruturas de Dados Ifes 81


6) Escrever um algoritmo para ler valores inteiros e preencher os
elementos de uma matriz (6,4) com esses valores. O algoritmo
deverá encontrar e apresentar o maior elemento dessa matriz
e depois a linha e coluna onde esse elemento se encontra. O
algoritmo deverá ainda trocar todos os elementos da linha em
que esse elemento se encontra com os elementos da primeira
linha da matriz e apresentar o resultado.

Informática, Algoritmos e Estruturas de Dados Ifes 82


Modularização e Subprogramas
A modularização é uma característica muito importante no
desenvolvimento de programas. Ela é um método utilizado
para facilitar a construção de grandes algoritmos, através de
sua divisão em pequenas etapas, que são os subprogramas.

Subprograma é um programa que auxilia o programa principal


através da realização de uma determinada subtarefa. Os
subprogramas são chamados dentro do corpo do programa
principal como se fossem comandos. É conveniente utilizá-los
quando uma determinada tarefa é efetuada em diversos
lugares no mesmo algoritmo. Ao invés de escrever-se um
trecho diversas vezes, escreve-se um subprograma e este pode
ser invocado diversas vezes.
Dois tipos:
• procedimentos (sub-rotina): não retorna nenhum valor
• funções: retorna um valor ou uma informação

Informática, Algoritmos e Estruturas de Dados Ifes 83


Esquema de uma chamada a subalgoritmo:

Informática, Algoritmos e Estruturas de Dados Ifes 84


Vantagens no uso de subalgoritmos:
• Reduzem o tamanho do algoritmo como um todo. Porque
trechos repetidos só serão implementados uma vez em um
subalgoritmo e, depois, serão apenas “chamados”.
• Facilitam a compreensão e visualização do que faz o algoritmo,
porque o desenvolvimento modularizado faz com que se possa
pensar no algoritmo por partes
• Facilidade de depuração (correção/acompanhamento): é mais
fácil corrigir/detectar um erro apenas uma vez do que em dez
trechos diferentes.
• Facilidade de alteração do código: se é preciso alterar, altera-se
apenas uma vez, no subalgoritmo.
• Generalidade de código com o uso de parâmetros: é possível
escrever algoritmos para situações genéricas.

Informática, Algoritmos e Estruturas de Dados Ifes 85


Procedimentos
Um procedimento é um subalgoritmo que não retorna,
explicitamente, valores ao algoritmo principal ou a outro
subalgoritmo que o tenha chamado. Ele pode retornar valores
apenas por meio dos parâmetros, e nunca explicitamente
como no caso das funções (que veremos depois) que usam a
instrução Retorne.
Sua declaração, como descrito anteriormente, deve estar entre o
final da declaração de variáveis do algoritmo principal e a linha
inicio do mesmo e obedece à seguinte sintaxe:

procedimento nomeProcedimento ([declarações-de-parâmetros])


[var declaração de variáveis locais]
inicio
//Seção de Comandos
fimprocedimento

Informática, Algoritmos e Estruturas de Dados Ifes 86


Algoritmo “exemploValor”
var numero: inteiro

//procedimento para incrementar valor


procedimento incrementa(valor: inteiro)
inicio
valor <- valor + 1
escreva(“Dentro do procedimento, Valor= : “, valor)
Fimprocedimento

//programa principal
Inicio
numero <- 1
escreva(“Antes do procedimento, número = “, numero)
incrementa(numero)
escreva(“Depois do procedimento, número = “, numero)
fimalgoritmo

Informática, Algoritmos e Estruturas de Dados Ifes 87


Algoritmo “ExemploProcedimento”
var numero: inteiro // o número a ser lido

procedimento julgar (valor: inteiro)


inicio
se (valor MOD 2 = 0) entao
escreva(“O número é par!”)
senao
escreva(“O número é ímpar”)
fimse
fimprocedimento

inicio
escreval(“Digite um número “)
leia(numero)
Enquanto (numero <>0) faca
julgar(numero)
escreval(“Digite um número “)
leia(numero)
fimenquanto
fimalgoritmo

Informática, Algoritmos e Estruturas de Dados Ifes 88


Funções
Uma função é um subalgoritmo que, além de executar uma determinada
tarefa, retorna, explicitamente, um valor para quem a chamou (o algoritmo
principal ou a outro subalgoritmo que a tenha chamado), que é o resultado
de sua execução. Esse valor é retornado através da instrução Retorne. A
chamada de uma função aparece como uma expressão, e não apenas como
um comando, como foi o caso do procedimento. Porque tem de existir
alguma variável para receber ou alguma expressão para usar o valor
retornado pela função.
A declaração da função, de forma análoga ao procedimento, deve estar entre o
final da declaração de variáveis do algoritmo principal e a linha inicio do
mesmo e obdece à seguinte sintaxe:

funcao nomeFuncao ([declarações-de-parâmetros]): Tipo de Retorno


[var declaração de variáveis locais]
inicio
// Seção de comandos
retorne variável ou expressão de retorno
fimfuncao

Informática, Algoritmos e Estruturas de Dados Ifes 89


ALGORITMO "Funções "
var
Valor_1,Valor_2, soma: real

FUNCAO FSoma(Recebe_valor1, Recebe_valor2: Real):Real


var
total : real
Inicio
total<-Recebe_valor1+Recebe_valor2
retorne total
fimfuncao

INICIO
Escreva ("Valor_1 : ")
LEIA (Valor_1)
Escreva ("Valor_2 : ")
LEIA (Valor_2)
soma<-FSoma(Valor_1,Valor_2)
ESCREVA ("Soma das vaiáveis é ", soma)
FIMALGORITMO

Informática, Algoritmos e Estruturas de Dados Ifes 90


Funções predefinidas do VISUALG (VisualgProgramacaoB) (parte1):

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) :caracter Copia um determinado
trecho do caractere
Cos (valor : real) :real Cosseno
Cotan (valor : real) :real Co-tangente
Exp (<base>,<expoente>) :real 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)

Informática, Algoritmos e Estruturas de Dados Ifes 91


Funções predefinidas do VISUALG (parte2):

Maiusc (c : caracter) :caracter Converte em Maiúscula


Minusc (c : caracter) :caracter Converte em Minúscula
Numpcarac (n : inteiro ou real) :caracter Converte um numero inteiro ou real
para caractere
Pi :real Valor Pi
Pos (subc, texto: caracter) :inteiro Retorna a posição de subc em texto.
Quad (valor : real) :real Elevado quadrado
Radpgrau (valor : real) :real Converte Radiano para grau.
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
Tan (valor : real) :real Tangente

Informática, Algoritmos e Estruturas de Dados Ifes 92


Exemplo:

Algoritmo "RETORNA O SOBRENOME"


var
nome, sobrenome : Caractere
quant_caracteres, local_espaco : INTEIRO
inicio
nome <- “Maria Aparecida da Silva Lima Gonçalves"
quant_caracteres <- Compr (nome)
local_espaco <- POS (" ",nome)
sobrenome <- Copia (nome, local_espaco + 1 , quant_caracteres)
Escreva("Seu sobrenome é ", sobrenome)
fimalgoritmo

Informática, Algoritmos e Estruturas de Dados Ifes 93


Exemplo 2:

Algoritmo "RETORNA UM VALOR INTEIRO“


Var
valorReal : REAL
valorInteiro : INTEIRO
inicio
valorReal <- 5.87978098980980989089898
valorInteiro <- INT(valorReal)
Escreva("Valor inteiro ", valorInteiro)
fimalgoritmo

Informática, Algoritmos e Estruturas de Dados Ifes 94


Escopo de Variáveis
Cada subalgoritmo, além de ter suas próprias variáveis (chamadas de variáveis
LOCAIS), que existem apenas durante a sua execução e só fazem sentido
dentro do subalgoritmo, podem também ter acessoàs variáveis de quem o
chamou e às variáveis definidas no algoritmo principal.
Na verdade, as variáveis declaradas na parte inicial do algoritmo principal ficam
disponíveis para uso em qualquer parte desse algoritmo ou por qualquer
subalgoritmo. Por isso, elas são chamadas de variáveis GLOBAIS. Porém,
para manter a modularidade dos programas, NÃO É RECOMENDADO que se
faça uso de variáveis globais dentro dos subalgoritmos. E sim, ao invés
disso, é importante que se use passagem de parâmetros.
As variáveis GLOBAIS existem na memória do computador durante toda a
execução do algoritmo, ou seja, até que o algoritmo completo chegue ao
seu final. Já as variáveis LOCAIS somente são criadas quando o subalgoritmo
que as contém é ativado e, ao seu término, elas são liberadas/desalocadas
da memória, tornando-se inacessíveis.

Informática, Algoritmos e Estruturas de Dados Ifes 95


Algoritmo "Raiz Equação"
var
a, b, c, meudelta: real //a, b e c são variáveis globais

FUNCAO Delta (aa, bb, cc: Real): Real //aa, bb e cc são variáveis locais
var
valor: real
Inicio
valor<- bb*bb-4*aa*cc
retorne valor
fimfuncao

INICIO
Escreval ("Forneça a, b e c: ")
Leia (a, b, c)
Escreval
meudelta<-Delta (a,b,c)
Escreval ("O delta da equação é:", meudelta)
FIMALGORITMO

Informática, Algoritmos e Estruturas de Dados Ifes 96


Passagem de Parâmetros
Ao declarar uma função ou procedimento, é possível declarar um ou mais
argumentos. Ao utilizar uma função ou procedimento, você deve informar os
valores para os argumentos, na mesma ordem em que foram definidos durante
a declaração da função ou procedimento. Este processo é conhecido como
passagem de parâmetros para a função ou procedimento, ou seja, ao chamar a
função ou procedimento, passamos valores que serão utilizados pelo código da
função ou procedimento.

Existem duas maneiras diferentes de fazer a passagem dos parâmetros:

• Passagem por Valor


• Passagem por Referência

Informática, Algoritmos e Estruturas de Dados Ifes 97


Passagem de Parametros por Valor
• Apenas o valor é passado para a função/procedimento, e este
valor é utilizado pelo código da função/procedimento, sem
afetar o valor original do parâmetro
• Quaisquer alterações que sejam feitas no valor do parâmetro,
dentro do procedimento, não afetarão o valor original, o qual
será o mesmo de antes da chamada da função/procedimento
• Tanto variavéis como constantes podem ser passadas por valor

Informática, Algoritmos e Estruturas de Dados Ifes 98


Passagem por Valor - Exemplo
algoritmo "Arredonda real"
var
Num : Real

Funcao Arredonda (NumR: real) : Inteiro


Var
NumI : inteiro
inicio
NumI <- Int (NumR + 0.5)
Retorne NumI
FimFuncao

inicio
Escreva ("Entre com um numero real: ")
Leia (Num)
Escreval ("O numero ", Num, " foi arredondado para: ", Arredonda (Num))
fimalgoritmo

Informática, Algoritmos e Estruturas de Dados Ifes 99


Passagem de Parâmetros por Referência
• A função/procedimento receberá uma referência ao endereço de memória
onde está armazenado o valor do parâmetro
• É necessário utilizar a palavra reservada VAR antes da definição do nome do
parâmetro
• Quaisquer alterações que a função/procedimento fizer, serão feitas
diretamente na variável original
• Usada geralmente por procedimentos para poder alterar o valor original da
variável passada como parâmetro, sendo a única maneira que o
procedimento dispõe para “retornar” valores ao código que o chamou
• Não é passada uma simples cópia do valor da variável (que é o que
acontece na passagem por valor)
• Não é possível passar constantes por referência

Informática, Algoritmos e Estruturas de Dados Ifes 100


Passagem por referência - Exemplo
algoritmo "Soma 5"
var
Num : inteiro
Procedimento Soma5 ( VAR NumInt : inteiro)
inicio
NumInt <- NumInt + 5
fimProcedimento
Inicio

Escreva ("Entre com um numero inteiro a ser armazenado na variável NUM : ")
Leia (Num)

Soma5 (Num)

Escreval ("O conteúdo de NUM após a chamada do proc. Soma5 é : ", Num )

fimalgoritmo

Informática, Algoritmos e Estruturas de Dados Ifes 101


Passagem por referência e valor - Exemplo
algoritmo "Soma N"
var
Num : inteiro

Procedimento SomaN (VAR NumInt : inteiro ; Increm : inteiro )


inicio
NumInt <- NumInt + Increm
fimProcedimento

inicio
Escreva ("Entre com um numero inteiro a ser armazenado na variável NUM : ")
Leia (Num)
SomaN (Num , 10)
Escreval ("O conteúdo de NUM após a chamada do proc. SomaN (NUM, 10) é : ", Num )
SomaN (Num , Num)
Escreval ("O conteúdo de NUM após a chamada do proc. SomaN (NUM, NUM) é : ", Num )
fimalgoritmo

Informática, Algoritmos e Estruturas de Dados Ifes 102


Exercícios:
1) Escrever um algoritmo para determinar se um determinado
número inteiro é par ou ímpar. Utilizar um subalgoritmo de
função que retorna “par” para indicar se o valor recebido é par
ou “ímpar” para indicar que o valor recebido é ímpar. O
algoritmo deverá parar quando for fornecido um valor zero.
2) Escreva um algoritmo que lê um número não determinado de
valores m, todos inteiros e positivos, um valor de cada vez, e,
se m<10 utiliza um subalgoritmo do tipo função que calcula o
fatorial de m, e caso contrário, utiliza um subalgoritmo do tipo
função para obter o número de divisores de m (quantos
divisores m possui). Valide o número m lido garantindo que o
mesmo seja inteiro e positivo. Escrever cada m lido e seu
fatorial ou seu número de divisores. O Algoritmo deverá parar
quando for fornecido um valor zero.

Informática, Algoritmos e Estruturas de Dados Ifes 103


Registros

Registro é uma estrutura de dados não homogênea, ou


seja, permite o armazenamento de informações de
diferentes tipos.

Aluno:
nome, idade, nota

nome é caractere, idade é inteiro e nota é real

Informática, Algoritmos e Estruturas de Dados Ifes 104


Registro

tipo tp_aluno = registro


nome: caractere
idade: inteiro
nota:real

var aluno: tp_aluno

leia (aluno.nome)

Informática, Algoritmos e Estruturas de Dados Ifes 105


Vetor com múltiplos Registros
tipo tp_aluno = registro
nome: caractere
idade: inteiro
nota:real

var aluno: vetor [1..10] de tp_aluno

leia (aluno[i].nome, aluno[i].idade)


leia (aluno[i].nota)

Informática, Algoritmos e Estruturas de Dados Ifes 106


algoritmo “teste registro”
tipo tp_aluno = registro
nome: caractere
idade: inteiro
nota:real
var
aluno: vetor [1..10] de tp_aluno
i: inteiro
inicio
para i de 1 ate 10 faca
leia (aluno[i].nome, aluno[i].idade, aluno[i].nota)
fimpara

para i de 1 ate 10 faca


escreva (aluno[i].nome, aluno[i].idade, aluno[i].nota)
fimpara
fim

Informática, Algoritmos e Estruturas de Dados Ifes 107


Linguagem C
C foi criada por Dennis Ritchie em 1972 nos laboratórios Bell para
ser incluído como um dos softwares a serem distribuídos
juntamente com o sistema operacional Unix do computador
PDP-11

Características da Linguagem C:
• compilada;
• “case senitive”;
• portável;
• código compacto e rápido;
• médio nível.

Informática, Algoritmos e Estruturas de Dados Ifes 108


Linguagem C – decisão: se ..senão
algoritmo "Decisão" #include <stdio.h>
var int main () {
a, b:inteiro int a, b;
inicio a=1;
b=2;
a<-1
if (a>b) {
b<-2
printf ("a maior que b");
se (a>b) entao }
escreva ("a maior que else {
b") printf ("b maior que a");
senao }
escreva ("b maior que return (0);
a") }
fimse
fimalgoritmo

Informática, Algoritmos e Estruturas de Dados Ifes 109


Linguagem C – repetição: para
algoritmo "Para" #include <stdio.h>
var int main () {
a:inteiro int a;
inicio for (a=0; a<=100; a=a+2)
para a<-0 ate 100 passo 2 {
faca printf (“%d”, a);
escreva (a) }
fimpara Return (0);
fimalgoritmo }

Informática, Algoritmos e Estruturas de Dados Ifes 110


Linguagem C – repetição: enquanto
algoritmo "Enquanto" #include <stdio.h>
var int main () {
a:inteiro int a=0;
Inicio while (a<100) {
a<-0 a=a+4;
enquanto (a<100) faca printf ("%d", a);
a<-a+4 }
escreva (a) return (0);
fimenquanto }
fimalgoritmo

Informática, Algoritmos e Estruturas de Dados Ifes 111


Linguagem C – entrada de dados
algoritmo "Entrada" #include <stdio.h>
var a, b, c:inteiro int main () {
inicio int a,b,c;
escreva ("Insira 2 numeros printf ("Digite 2 numeros
inteiros");
inteiros")
scanf ("%d", &a);
leia (a,b)
scanf ("%d", &b);
c<-a+b
c=a+b;
escreva ("A soma dos numeros
é",c) printf ("A soma deles
eh,%d",c);
fimalgoritmo
return (0);
}

Informática, Algoritmos e Estruturas de Dados Ifes 112


Impressão na tela:

%d Inteiro
%f Float
%c Caractere
%s String
%% Coloca na tela um %
\b Retrocesso ("back")
\f Alimentação de formulário ("form feed")
\n Nova linha ("new line")
\t Tabulação horizontal ("tab")
\" Aspas
\' Apóstrofo
\\ Barra invertida

Informática, Algoritmos e Estruturas de Dados Ifes 113


Operadores Aritméticos:

+ Soma (inteira e ponto flutuante)


- Subtração ou Troca de sinal (inteira e ponto flutuante)
* Multiplicação (inteira e ponto flutuante)
/ Divisão (inteira e ponto flutuante)
% Resto de divisão (de inteiros)
++ Incremento (inteiro e ponto flutuante)
-- Decremento (inteiro e ponto flutuante)

Informática, Algoritmos e Estruturas de Dados Ifes 114


Operadores Relacionais:
> Maior do que
>= Maior ou igual a
< Menor do que
<= Menor ou igual a
== Igual a
!= Diferente de

Operadores Lógicos:
! NÃO
|| OU
&& E

Informática, Algoritmos e Estruturas de Dados Ifes 115


Exercício
1) Escreva um programa que peça 2 números e faça a
soma deles e pergunte se o usuário quer fazer o
cálculo de novo.
2) Escreva um programa que receba um número e conte
a partir dele até 100.
3) Faça um programa que peça 2 números, os compare e
mostre qual é o maior.

Informática, Algoritmos e Estruturas de Dados Ifes 116