Buscar

Algoritmos com Pseudocódigo - Lista de Exercícios Resolvida e Comentada - VisualAlg

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 12 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 12 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 12 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

ALGORITMOS COM PSEUDOCÓDIGO 
LISTA DE EXERCÍCIOS RESOLVIDA E COMENTADA 
 
OBS: Os algoritmos das soluções abaixo estão com a sintaxe de acordo com o VisuAlg, para que 
possam ser executados no mesmo 
 
EXERCÍCIOS SOBRE ESTRUTURAS SEQUENCIAIS: 
 
1 – calcular a área de um retângulo 
 
• A área de uma figura geométrica retangular é calculada pela fórmula área = largura x 
altura 
• As variáveis de entrada são altura e largura, do tipo real, pois pode haver medida com 
parte fracionária 
• Poderíamos criar uma variável de saída para a área, porém podemos calcular e mostrar o 
resultado sem usar essa variável 
• O esboço da solução 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 números em variáveis e trocar os valores das variáveis 
 
algoritmo "troca variaveis" 
// para fazer a troca de valores de duas variáveis 
// é necessário uma variável 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 não ser perdido 
 a <- b // guarda valor de b em a 
 b <- aux // guarda valor de aux em b 
 Escreva("Valores após a troca: a=",a," b=",b) 
fimalgoritmo 
 
3 - Calcular as raízes de uma equação do segundo grau 
 
algoritmo "raizes equacao do 2o grau" 
// OBS: Como o VisuAlg não tem a função RAIZ(), iremos solicitar 
// o valor da raiz de delta ao usuário. Em uma linguagem que tenha 
// a função RAIZ(), basta fazer raizdelta <- raiz(delta) 
var 
 a,b,c,delta,raizdelta,x1,x2: real 
inicio 
 Escreval("Raizes de uma equação 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 (não tem raizes) 
 se delta<0 entao 
 escreva("Essa equação não tem raízes reais.") 
 senao 
 // OBS: como o VisuAlg não calcula raiz quadrada, iremos pedir 
 // o valor ao usuário 
 Escreva("Qual a raiz de ",delta,"? ") 
 Leia(raizdelta) 
 x1<-( -b + raizdelta ) / 2 * a 
 x2<-( -b - raizdelta ) / 2 * a 
 Escreval("As raízes são: x1=",x1," x2=",x2) 
 FimSe 
fimalgoritmo 
 
4 - Calcular o custo estimado com combustível em uma viagem de carro 
• A lógica para solução deste problema é a seguinte: cada carro tem um consumo típico para 
cada tipo de combustível (gasolina ou álcool), medido em quilômetros por litro (Km/l). 
Dividindo a distância a ser percorrida na viagem por esse parâmetro (Km/l), podemos 
saber quantos litros de combustível serão necessários. Após isso, basta multiplicar essa 
quantidade de litros pelo preço unitário do litro de combustível. 
• As variáveis de entrada estão destacadas no item anterior e deverão ser todas do tipo real 
pois todas podem ter valores fracionários. A variável de saída será o custo, que é opcional 
pois podemos calcular e mostrar o resultado sem usar essa variável 
• O esboço da solução em linguagem natural seria: 
o Solicitar os dados de entrada: quilômetros por litro, distancia a ser percorrida e preço 
unitário do litro de combustível 
o Calcular o custo e mostrar resultado 
 
algoritmo "custo com combustivel" 
var 
 kmporlitro,distancia,precolitro: real 
inicio 
 Escreva("Quantos quilômetros por litro o seu carro faz? ") 
 Leia(kmporlitro) 
 Escreva("Qual a distância da viagem em Km? ") 
 Leia(distancia) 
 Escreva("Qual o preço do litro do combustível em R$? ") 
 Leia(precolitro) 
 Escreval("O custo estimado da viagem será R$ ",distancia/kmporlitro*precolitro) 
fimalgoritmo 
EXERCÍCIOS SOBRE ESTRUTURAS CONDICIONAIS: 
 
1 - Faça um algoritmo que leia um número inteiro diferente de zero e diga se este é positivo ou 
negativo 
2 - Altere o algoritmo anterior para dizer também se o número é igual a zero (use se encadeados) 
 
algoritmo "positivo ou negativo" 
var 
 num: inteiro 
inicio 
 Escreva("Digite um número: ") 
 Leia(num) 
 se num>0 entao 
 escreva("O número é positivo") 
 fimse 
 se num<0 entao 
 escreva("O número é negativo") 
 senão 
 escreva("O número é zero") 
 fimse 
fimalgoritmo 
 
3 - Faça uma algoritmo que leia três valores que representam os três lados de um triângulo e 
verifique: 
• Se o triângulo é válido 
• Se é um triângulo equilátero, isósceles ou escaleno. Propriedades de um triângulo: 
• A soma de dois lados não pode ser menor que a do terceiro lado (ou o comprimento 
de cada lado deve ser menor que a soma dos outros dois lados) 
• Equilátero: três lados iguais 
• Isósceles: dois lados iguais 
• Escaleno: três lados diferentes 
 
 
(veja soluções nas folhas seguintes) 
Solução 1 (com o teste do isósceles, 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 triângulo é válido 
 // (a soma de dois lados não pode ser menor que a do terceiro lado) 
 se (lado1+lado2<lado3) OU (lado2+lado3<lado1) OU 
(lado1+lado3<lado2) entao 
 Escreva("O triângulo não é válido.") 
 senao 
 
 // verifica o tipo de triângulo 
 // equilatero 
 se (lado1=lado2) E (lado2=lado3) entao 
 Escreval("O triângulo é equilátero") 
 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 triângulo é isósceles") 
 FimSe 
 FimSe 
fimalgoritmo 
 
• Solução 2: sem o teste do isósceles, 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 triângulo é válido 
 // (a soma de dois lados não pode ser menor que a do terceiro lado) 
 se (lado1+lado2<lado3) OU 
 (lado2+lado3<lado1) OU 
 (lado1+lado3<lado2) entao 
 Escreva("O triângulo não é válido.") 
 senao 
 
 // verifica o tipo de triângulo 
 // equilatero 
 se (lado1=lado2) E (lado2=lado3) entao 
 Escreval("O triângulo é equilátero") 
 Senao 
 // escaleno 
 Se (lado1<>lado2) E (lado2<>lado3) E (lado1<>lado3) entao 
 Escreval(“O triangulo é escaleno”) 
 // se não é eqüilátero nem escaleno, então é isósceles 
 Senão 
 Escreva("O triângulo é isósceles") 
 FimSe 
 FimSe 
 FimSe 
fimalgoritmo 
 
 
 
EXERCÍCIOS SOBRE ESRUTURAS DE REPETIÇÃO: 
 
1 - Multiplicar dois números usando somas repetidas 
• Neste algoritmo o “segredo” é usar uma variável para acumular o valor da soma (que 
no caso será a variável “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: inteiroinicio 
 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 números e calcular a soma e média entre esses 
números 
• Já vimos como fazer a soma de números. Para calcular a média basta dividir a soma 
pela quantidade de números digitados. Como não sabemos a quantidade de números 
que o usuário quer digitar, então devemos perguntar e usar uma estrutura “para” para 
repetir os comandos de solicitar um número e somar esse número essa quantidade de 
vezes,. O cálculo da média a apresentação dos resultados deve ficar após a estrutura de 
repetiçã 
• Variáveis de entrada: quantidade de números (“quantidade”) (tipo inteiro) 
• Variável de contagem: c 
• Variáveis de processamento e saída: soma (inteiro) e media (real, pois a média pode 
ter parte fracionária) 
algoritmo "soma e média de números” 
var 
 quantidade,numero,soma,c: inteiro 
 media: real 
inicio 
 escreva("Quantos números você quer somar? ") 
 leia(quantidade) 
 para c de 1 ate quantidade faca 
 escreva("Digite o ",c,"o número: ") 
 leia(numero) 
 soma<-soma+numero 
 fimpara 
 media<-soma/quantidade 
 Escreval("A soma é: ",soma) 
 Escreval("A média é: ",media) 
Fimalgoritmo 
 
3 - Calcular a soma dos números í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 
• Variáveis de entrada: valor inicial (“ini”), limite (tipo inteiro) 
• Variável de contagem: i 
• Variáveis de processamento e saída: soma (inteiro) 
Algoritmo "soma numeros Impares" 
Var 
 i,ini,limite,soma: Inteiro 
Inicio 
 Escreva("Digite o número inicial: ") 
 Leia(ini) 
 Escreva("Digite o número 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 números ímpares é: ",soma) 
fimalgoritmo 
 
4 - Calcular o fatorial de um número. Dicas: 
N ! = N * (n-1) * (n-2)... * 1 Ex: 5! = 5 * 4 * 3 * 1 = 60 
 
• Podemos observar na fórmula do fatorial que precisaremos fazer multiplicações sucessivas, 
onde o resultado da última multiplicação será multiplicado novamente por um outro 
número (ex: 5*4 = 20; 20 * 3 = 60 ; 60 * 1 = 60). Essa multiplicação pode ser feita de 
forma similar à variável 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 variável acumuladora dos 
produtos com 1 ou com o primeiro número das multiplicações (conforme o algoritmo a ser 
usado), senão estaremos multiplicando por zero 
• Variáveis de entrada: número a calcular o fatorial (“num”) (tipo inteiro) 
• Variável de contagem: c 
• Variáveis de processamento e saída: fatorial (inteiro) 
 
• Solução 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 
 
• Solução 2 (mais “enfeitada”, mostrando o cálculo passo a passo): 
Algoritmo "fatorial" 
var 
 num,c,fatorial: inteiro 
Inicio 
 escreva("Numero a calcular o fatorial: ") 
 leia(num) 
 escreval("Cálculo 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 soluções acima estão com a estrutura PARA em ordem decrescente, mas nada 
imprede que façamos o algoritmo com a estrutura PARA em ordem crescente (a ordem dos 
fatores não altera o produto) 
EXERCÍCIOS SOBRE VETORES: 
 
1- Faça algoritmo para ler um vetor de 10 valores inteiros e depois identificar e mostrar o menor 
valor 
• A lógica deste algoritmo é: 
o Preencher o vetor 
o Percorrer cada posição do vetor, procurando qual é o menor número (ao iniciar, 
supomos que o menor é o primeiro do vetor) 
2- Altere o algoritmo anterior para procurar um número digitado pelo usuário, informando a sua 
posição, 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 número digitado 
 menor<-vet[1] // no início, o menor será o primeiro do vetor 
 para c de 1 ate 10 faca 
 escreva(vet[c]) 
 // se o número na posição do vetor for menor que o menor 
 se vet[c]<menor entao 
 menor<-vet[c] 
 fimse 
 // testa se o número está no vetor 
 se num=vet[i] entao 
 Escreval("O número que você digitou está na posição ",i) 
 posicao<-i 
 fimse 
 fimpara 
 // mostra resultado 
 escreval("") 
 escreval("O menor é:",menor) 
 se posicao=0 entao 
 Escreval("O número não consta no vetor") 
 Fimse 
fimalgoritmo 
 
 
3- Faça um algoritmo que inverta a posição dos valores de um vetor de seis posições de inteiros 
• Neste algoritmo a lógica é usar uma variável auxiliar para a troca (veja exercício da troca do 
valor de duas variáveis) e achar uma expressão matemática para referenciar o elemento da 
posição simétrica, onde será feita a troca 
• Para a troca, basta percorrermos a metade do vetor e usarmos a variável auxiliar e a 
expressão 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 
 
EXERCÍCIOS SOBRE MATRIZES: 
 
1- Crie um algoritmo que crie uma matriz 4 x 4 de inteiros, solicite os valores ao usuário e depois 
mostre qual o maior e menor valor na matriz 
• Este algoritmo é similar as exercícios 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 usuário 
• 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 número deseja procurar na matriz 
 Escreva("Digite o numero a procurar na matriz: ") 
 Leia(numproc) 
 // no início 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 número está na matriz 
 se numproc=num[l,c] entao 
 Escreval("O número que você digitou está na posição 
",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 número não consta na matriz") 
 Fimse 
fimalgoritmo 
 
3- Faça um algoritmo para guardar os nomes e resultados de jogos da loteria esportiva 
 
4-Faça 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-Faça um algoritmo para calcular o determinante de uma matriz 
 
EXERCÍCIO SOBRE REGISTROS: 
 
1. Crie um algoritmo para guardar o nome e as duas notas dos 40 alunos de uma turma e depois 
calcular a média e resultado de cada um deles, sendo que a média para aprovação é 7 
 
EXERCÍCIOS SOBRE SUB-ALGORITMOS: 
 
1. Reescreva um dos exercícios de vetores ou matrizes criando um procedimento para ler os 
dados e outro para processar e mostrar os resultados 
2. Crie uma função para calcular o fatorial de um número 
 
 
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 função para determinar se um número é primo

Continue navegando