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