Você está na página 1de 12

ALGORITMOS COM PSEUDOCDIGO

LISTA DE EXERCCIOS RESOLVIDA E COMENTADA

OBS: Os algoritmos das solues abaixo esto com a sintaxe de acordo com o VisuAlg, para que
possam ser executados no mesmo

EXERCCIOS SOBRE ESTRUTURAS SEQUENCIAIS:

1 calcular a rea de um retngulo

A rea de uma figura geomtrica retangular calculada pela frmula rea = largura x
altura
As variveis de entrada so altura e largura, do tipo real, pois pode haver medida com
parte fracionria
Poderamos criar uma varivel de sada para a rea, porm podemos calcular e mostrar o
resultado sem usar essa varivel
O esboo da soluo em linguagem natural seria:
o Solicitar valor da largura e altura
o Calcular rea e mostrar resultado

algoritmo "area retangulo"


var
altura, largura: real
inicio
Escreva("Digite a altura: ")
Leia(altura)
Escreva("Digite a largura: ")
Leia(largura)
Escreval("A rea : ",altura*largura)
fimalgoritmo

2 - Armazenar dois nmeros em variveis e trocar os valores das variveis

algoritmo "troca variaveis"


// para fazer a troca de valores de duas variveis
// necessrio uma varivel auxiliar pois se fizermos
// a troca direta, um dos valores ser perdido
var
a,b,aux: inteiro
inicio
Escreva("Digite o valor para a variavel A: ")
Leia(a)
Escreva("Digite o valor para a variavel B: ")
Leia(b)
aux <- a // guarda valor de a em aux para no ser perdido
a <- b // guarda valor de b em a
b <- aux // guarda valor de aux em b
Escreva("Valores aps a troca: a=",a," b=",b)
fimalgoritmo
3 - Calcular as razes de uma equao do segundo grau

algoritmo "raizes equacao do 2o grau"


// OBS: Como o VisuAlg no tem a funo RAIZ(), iremos solicitar
// o valor da raiz de delta ao usurio. Em uma linguagem que tenha
// a funo RAIZ(), basta fazer raizdelta <- raiz(delta)
var
a,b,c,delta,raizdelta,x1,x2: real
inicio
Escreval("Raizes de uma equao do 2o grau")
escreva("Digite o valor de a: ")
Leia(a)
escreva("Digite o valor de b: ")
Leia(b)
escreva("Digite o valor de c: ")
Leia(c)
// calcula delta
delta <- b^2 - 4 * a * c
Escreval("Valor de DELTA: ",delta)
// verifica se delta negativo (no tem raizes)
se delta<0 entao
escreva("Essa equao no tem razes reais.")
senao
// OBS: como o VisuAlg no calcula raiz quadrada, iremos pedir
// o valor ao usurio
Escreva("Qual a raiz de ",delta,"? ")
Leia(raizdelta)
x1<-( -b + raizdelta ) / 2 * a
x2<-( -b - raizdelta ) / 2 * a
Escreval("As razes so: x1=",x1," x2=",x2)
FimSe
fimalgoritmo

4 - Calcular o custo estimado com combustvel em uma viagem de carro


A lgica para soluo deste problema a seguinte: cada carro tem um consumo tpico para
cada tipo de combustvel (gasolina ou lcool), medido em quilmetros por litro (Km/l).
Dividindo a distncia a ser percorrida na viagem por esse parmetro (Km/l), podemos
saber quantos litros de combustvel sero necessrios. Aps isso, basta multiplicar essa
quantidade de litros pelo preo unitrio do litro de combustvel.
As variveis de entrada esto destacadas no item anterior e devero ser todas do tipo real
pois todas podem ter valores fracionrios. A varivel de sada ser o custo, que opcional
pois podemos calcular e mostrar o resultado sem usar essa varivel
O esboo da soluo em linguagem natural seria:
o Solicitar os dados de entrada: quilmetros por litro, distancia a ser percorrida e preo
unitrio do litro de combustvel
o Calcular o custo e mostrar resultado

algoritmo "custo com combustivel"


var
kmporlitro,distancia,precolitro: real
inicio
Escreva("Quantos quilmetros por litro o seu carro faz? ")
Leia(kmporlitro)
Escreva("Qual a distncia da viagem em Km? ")
Leia(distancia)
Escreva("Qual o preo do litro do combustvel em R$? ")
Leia(precolitro)
Escreval("O custo estimado da viagem ser R$ ",distancia/kmporlitro*precolitro)
fimalgoritmo
EXERCCIOS SOBRE ESTRUTURAS CONDICIONAIS:

1 - Faa um algoritmo que leia um nmero inteiro diferente de zero e diga se este positivo ou
negativo
2 - Altere o algoritmo anterior para dizer tambm se o nmero igual a zero (use se encadeados)

algoritmo "positivo ou negativo"


var
num: inteiro
inicio
Escreva("Digite um nmero: ")
Leia(num)
se num>0 entao
escreva("O nmero positivo")
fimse
se num<0 entao
escreva("O nmero negativo")
seno
escreva("O nmero zero")
fimse
fimalgoritmo

3 - Faa uma algoritmo que leia trs valores que representam os trs lados de um tringulo e
verifique:
Se o tringulo vlido
Se um tringulo equiltero, issceles ou escaleno. Propriedades de um tringulo:
A soma de dois lados no pode ser menor que a do terceiro lado (ou o comprimento
de cada lado deve ser menor que a soma dos outros dois lados)
Equiltero: trs lados iguais
Issceles: dois lados iguais
Escaleno: trs lados diferentes

(veja solues nas folhas seguintes)


Soluo 1 (com o teste do issceles, que mais complexo)
Algoritmo "Triangulo"
Var
lado1, lado2 , lado3 : real
Inicio
Escreva("Digite o lado 1: ")
Leia(lado1)
Escreva("Digite o lado 2: ")
Leia(lado2)
Escreva("Digite o lado 3: ")
Leia(lado3)

// testa se o tringulo vlido


// (a soma de dois lados no pode ser menor que a do terceiro lado)
se (lado1+lado2<lado3) OU (lado2+lado3<lado1) OU
(lado1+lado3<lado2) entao
Escreva("O tringulo no vlido.")
senao

// verifica o tipo de tringulo


// equilatero
se (lado1=lado2) E (lado2=lado3) entao
Escreval("O tringulo equiltero")
fimse
// escaleno
Se (lado1<>lado2) E (lado2<>lado3) E (lado1<>lado3) entao
Escreval(O triangulo escaleno)
Senao
// isosceles
se ((lado1=lado2) E (lado1<>lado3)) OU
((lado2=lado3) E (lado2<>lado1)) OU
((lado1=lado3) E (lado1<>lado2)) entao
Escreva("O tringulo issceles")
FimSe
FimSe
fimalgoritmo
Soluo 2: sem o teste do issceles, usando estruturas se..senao
Algoritmo "Triangulo"
Var
lado1, lado2 , lado3 : real
Inicio
Escreva("Digite o lado 1: ")
Leia(lado1)
Escreva("Digite o lado 2: ")
Leia(lado2)
Escreva("Digite o lado 3: ")
Leia(lado3)

// testa se o tringulo vlido


// (a soma de dois lados no pode ser menor que a do terceiro lado)
se (lado1+lado2<lado3) OU
(lado2+lado3<lado1) OU
(lado1+lado3<lado2) entao
Escreva("O tringulo no vlido.")
senao

// verifica o tipo de tringulo


// equilatero
se (lado1=lado2) E (lado2=lado3) entao
Escreval("O tringulo equiltero")
Senao
// escaleno
Se (lado1<>lado2) E (lado2<>lado3) E (lado1<>lado3) entao
Escreval(O triangulo escaleno)
// se no eqiltero nem escaleno, ento issceles
Seno
Escreva("O tringulo issceles")
FimSe
FimSe
FimSe
fimalgoritmo

EXERCCIOS SOBRE ESRUTURAS DE REPETIO:

1 - Multiplicar dois nmeros usando somas repetidas


Neste algoritmo o segredo usar uma varivel para acumular o valor da soma (que
no caso ser a varivel produto no algoritmo abaixo) de um dos fatores (no caso o
multiplicando num2) repetindo essa soma na quantidade do multiplicador (num1), O
comando que acumula a soma produto<-produto+num2:

algoritmo "multiplicacao com somas"


var
num1,num2,aux,produto: inteiro
inicio
Escreva("Digite o multiplicador: ")
Leia(num1)
Escreva("Digite o multiplicando: ")
Leia(num2)
produto<-0
para aux de 1 ate num1 faca
produto<-produto+num2
fimpara
escreva("O produto : ",produto)
fimalgoritmo
2 - Solicitar uma quantidade pr-determinada de nmeros e calcular a soma e mdia entre esses
nmeros
J vimos como fazer a soma de nmeros. Para calcular a mdia basta dividir a soma
pela quantidade de nmeros digitados. Como no sabemos a quantidade de nmeros
que o usurio quer digitar, ento devemos perguntar e usar uma estrutura para para
repetir os comandos de solicitar um nmero e somar esse nmero essa quantidade de
vezes,. O clculo da mdia a apresentao dos resultados deve ficar aps a estrutura de
repeti
Variveis de entrada: quantidade de nmeros (quantidade) (tipo inteiro)
Varivel de contagem: c
Variveis de processamento e sada: soma (inteiro) e media (real, pois a mdia pode
ter parte fracionria)
algoritmo "soma e mdia de nmeros
var
quantidade,numero,soma,c: inteiro
media: real
inicio
escreva("Quantos nmeros voc quer somar? ")
leia(quantidade)
para c de 1 ate quantidade faca
escreva("Digite o ",c,"o nmero: ")
leia(numero)
soma<-soma+numero
fimpara
media<-soma/quantidade
Escreval("A soma : ",soma)
Escreval("A mdia : ",media)
Fimalgoritmo

3 - Calcular a soma dos nmeros mpares entre um intervalo informado


Este algoritmo parecido com o anterior, sendo que, em vez de termos uma estrutura
para de 1 at uma quantidade, teremos um intervalo
Variveis de entrada: valor inicial (ini), limite (tipo inteiro)
Varivel de contagem: i
Variveis de processamento e sada: soma (inteiro)
Algoritmo "soma numeros Impares"
Var
i,ini,limite,soma: Inteiro
Inicio
Escreva("Digite o nmero inicial: ")
Leia(ini)
Escreva("Digite o nmero final: ")
Leia(limite)
soma<-0
Para i de ini ate limite faca
se (i mod 2) <> 0 entao
Escreval(i)
soma<-soma+i
FimSe
FimPara
Escreva("A soma desses nmeros mpares : ",soma)
fimalgoritmo
4 - Calcular o fatorial de um nmero. Dicas:
N ! = N * (n-1) * (n-2)... * 1 Ex: 5! = 5 * 4 * 3 * 1 = 60

Podemos observar na frmula do fatorial que precisaremos fazer multiplicaes sucessivas,


onde o resultado da ltima multiplicao ser multiplicado novamente por um outro
nmero (ex: 5*4 = 20; 20 * 3 = 60 ; 60 * 1 = 60). Essa multiplicao pode ser feita de
forma similar varivel acumuladora, s que em vez de somar, multiplicando. Ex: resl <-
res * num.
Precisaremos de uma estrutura PARA p/ obter os multiplicadores, que podem estar tanto em
ordem crescente como decrescente
Um pequeno detalhe do algoritmo que precisamos iniciar a varivel acumuladora dos
produtos com 1 ou com o primeiro nmero das multiplicaes (conforme o algoritmo a ser
usado), seno estaremos multiplicando por zero
Variveis de entrada: nmero a calcular o fatorial (num) (tipo inteiro)
Varivel de contagem: c
Variveis de processamento e sada: fatorial (inteiro)

Soluo 1:
Algoritmo "fatorial"
var
num,c,fatorial: inteiro
Inicio
escreva("Numero a calcular o fatorial: ")
leia(num)

fatorial<-1
para c de num ate 1 passo -1 faca
fatorial<-fatorial*c
fimpara

escreva("O fatorial :",fatorial)


fimalgoritmo

Soluo 2 (mais enfeitada, mostrando o clculo passo a passo):


Algoritmo "fatorial"
var
num,c,fatorial: inteiro
Inicio
escreva("Numero a calcular o fatorial: ")
leia(num)
escreval("Clculo do fatorial:")
fatorial<-num
Escreva(num) // imprime primeiro fator
para c de num-1 ate 1 passo -1 faca
Escreva(" * ",c) // imprime cada fator seguinte sucedido por *
fatorial<-fatorial*c
fimpara

escreval(" = ",fatorial) // imprime sinal = e o fatorial


fimalgoritmo

OBS: As duas solues acima esto com a estrutura PARA em ordem decrescente, mas nada
imprede que faamos o algoritmo com a estrutura PARA em ordem crescente (a ordem dos
fatores no altera o produto)
EXERCCIOS SOBRE VETORES:

1- Faa algoritmo para ler um vetor de 10 valores inteiros e depois identificar e mostrar o menor
valor
A lgica deste algoritmo :
o Preencher o vetor
o Percorrer cada posio do vetor, procurando qual o menor nmero (ao iniciar,
supomos que o menor o primeiro do vetor)
2- Altere o algoritmo anterior para procurar um nmero digitado pelo usurio, informando a sua
posio, se ele constar no vetor
Aqui acrescentamos os trechos destacados para a pergunta e um teste a mais dentro do
PARA

algoritmo "Vetor 10 numeros"


var
vet: vetor[1..10] de inteiro
c,menor,num,posicao: inteiro
inicio
// preenche o vetor
para c de 1 ate 10 faca
escreva("Digite o ",c,"o numero: ")
leia(vet[c])
fimpara
// testa se um numero existe no vetor
Escreva("Digite o numero a procurar no vetor: ")
Leia(num)
// -- procura o menor e o nmero digitado
menor<-vet[1] // no incio, o menor ser o primeiro do vetor
para c de 1 ate 10 faca
escreva(vet[c])
// se o nmero na posio do vetor for menor que o menor
se vet[c]<menor entao
menor<-vet[c]
fimse
// testa se o nmero est no vetor
se num=vet[i] entao
Escreval("O nmero que voc digitou est na posio ",i)
posicao<-i
fimse
fimpara
// mostra resultado
escreval("")
escreval("O menor :",menor)
se posicao=0 entao
Escreval("O nmero no consta no vetor")
Fimse
fimalgoritmo
3- Faa um algoritmo que inverta a posio dos valores de um vetor de seis posies de inteiros
Neste algoritmo a lgica usar uma varivel auxiliar para a troca (veja exerccio da troca do
valor de duas variveis) e achar uma expresso matemtica para referenciar o elemento da
posio simtrica, onde ser feita a troca
Para a troca, basta percorrermos a metade do vetor e usarmos a varivel auxiliar e a
expresso encontrada no passo anterior

Algoritmo "menor valor no vetor"


var
vet: vetor[1..6] de inteiro
i, aux: Inteiro
Inicio
Para i de 1 ate 6 faca
Escreva("Digite o ",i," valor do vetor: ")
Leia(vet[i])
FimPara
Para i de 1 ate 3 faca
aux<-vet[i]
vet[i]<-vet[7-i]
vet[7-i]<-aux
FimPara
Escreval("Vetor invertido:")
para i de 1 ate 6 faca
escreval(vet[i])
fimpara
FimAlgoritmo
EXERCCIOS SOBRE MATRIZES:

1- Crie um algoritmo que crie uma matriz 4 x 4 de inteiros, solicite os valores ao usurio e depois
mostre qual o maior e menor valor na matriz
Este algoritmo similar as exerccios 1 e 2 de vetores, sendo que para preencher e
percorrer a matriz precisaremos de duas estruturas PARA (uma para as linhas e outra para
as colunas da matriz)
2- Altere o algoritmo anterior para procurar na matriz um valor digitado pelo usurio
Aqui acrescentamos os trechos destacados para a pergunta e um teste a mais dentro do
PARA

algoritmo "matriz 4x4"


var
num: vetor[1..4,1..4] de inteiro
l,c,menor,maior,numproc,linha,coluna: inteiro
inicio
// preenche a matriz
para l de 1 ate 4 faca
para c de 1 ate 4 faca
escreva("Digite o numero da pos.",l,",",c,": ")
leia(num[l,c])
fimpara
fimpara
// pergunta qual nmero deseja procurar na matriz
Escreva("Digite o numero a procurar na matriz: ")
Leia(numproc)
// no incio supomos que o primeiro o maior e o menor valor
menor<-num[1,1]
maior<-num[1,1]
// percorre a matriz procurando o maior e menor valor
para l de 1 ate 4 faca
para c de 1 ate 4 faca
escreva(num[l,c]) // mostra item da matriz
// se item da linha e coluna for menor que o menor
se num[l,c]<menor entao
menor<-num[l,c]
fimse
// se item da linha e coluna for maior que o maior
se num[l,c]>maior entao
maior<-num[l,c]
fimse
// testa se o nmero est na matriz
se numproc=num[l,c] entao
Escreval("O nmero que voc digitou est na posio
",l,",,c)
linha<-l
coluna<-c
fimse
fimpara
escreval("") // salta linha
fimpara
escreval("")
escreval("O menor :",menor)
escreval("O maior :",maior)
se linha=0 entao
Escreval("O nmero no consta na matriz")
Fimse
fimalgoritmo
3- Faa um algoritmo para guardar os nomes e resultados de jogos da loteria esportiva

4-Faa um algoritmo para multiplicar duas matrizes

algoritmo "multiplica matrizes 4x4"


var
matriz1: vetor[1..4,1..4] de inteiro
matriz2: vetor[1..4,1..4] de inteiro
produto: vetor[1..4,1..4] de inteiro
l,c: inteiro
inicio
// preenche a matriz 1
Escreval("Digite os valores para a matriz 1:")
para l de 1 ate 4 faca
para c de 1 ate 4 faca
escreva("Digite o numero da pos.",l,",",c,": ")
leia(matriz1[l,c])
fimpara
fimpara
// preenche a matriz 2
Escreval("Digite os valores para a matriz 1:")
para l de 1 ate 4 faca
para c de 1 ate 4 faca
escreva("Digite o numero da pos.",l,",",c,": ")
leia(matriz2[l,c])
fimpara
fimpara
// multiplica
Escreval(Matriz-produto:)
para l de 1 ate 4 faca
para c de 1 ate 4 faca
produto[l,c]=matriz1[l,c] * matriz2[c,l]
escreva(produto[l,c])
fimpara
escreval("") // salta linha
fimpara
fimalgoritmo

5-Faa um algoritmo para calcular o determinante de uma matriz

EXERCCIO SOBRE REGISTROS:

1. Crie um algoritmo para guardar o nome e as duas notas dos 40 alunos de uma turma e depois
calcular a mdia e resultado de cada um deles, sendo que a mdia para aprovao 7

EXERCCIOS SOBRE SUB-ALGORITMOS:

1. Reescreva um dos exerccios de vetores ou matrizes criando um procedimento para ler os


dados e outro para processar e mostrar os resultados
2. Crie uma funo para calcular o fatorial de um nmero

algoritmo "Fatorial"
var
num,res: inteiro

funcao fat(x: inteiro) : inteiro


var
fatorial,c: inteiro
Inicio
fatorial<-1
para c de x ate 2 passo -1 faca
fatorial<-fatorial*c
fimpara
retorne fatorial
fimfuncao

Inicio
escreva("Numero a calcular o fatorial: ")
leia(num)
res<-fat(num)
escreva("O fatorial :",res)
fimalgoritmo

3. Crie uma funo para determinar se um nmero primo

Você também pode gostar