EM POTIGOL,ME AJUDEM !C onstrua um programa que irá receber 20 números reais. Seu programa deverá calcular a média aritmética entre os números recebidos. Ao final, o seu programa irá imprimir 3 linhas: na primeira, a média calculada referente aos números recebidos. Na segunda-linha, os números que foram recebidos e estão acima da média. Na última, os números recebidos que estão abaixo da média.
Soluções para a tarefa
Resposta:
programa {
funcao inicio() {
real valores[20]
para(inteiro i = 0; i < 20; i++){
leia(valores[i])
}
real media = 0.0
para(inteiro i = 0; i < 20; i++){
media += valores[i]
}
media /= 20
cadeia acimaMedia = "", abaixoMedia = ""
para(inteiro i = 0; i < 20; i++){
se(valores[i] > media){
acimaMedia += " " + valores[i]
}
senao se(valores[i] < media){
abaixoMedia += " " + valores[i]
}
}
escreva("Média = " + media)
escreva("\nNúmeros acima da média:" + acimaMedia)
escreva("\nNúmeros abaixo da média:" + abaixoMedia)
}
}
Explicação:
Primeiro eu declarei um vetor de números reais com 20 posições:
real valores[20]
Depois você tem que ler as posições para guardar os valores que o usuários digitar, lembrando sempre que a primeira posição do vetor é [0], para isso nós poderíamos colocar 20 leias. Ex.
leia(valores[0])
leia(valores[1])
(...)
Só que isso seria extremamente ineficiente e demorado, então para ler o vetor posição por posição nós podemos utilizar um laço de repetição que se inicia em 0 e vai até 19, a última posição do vetor. Como nós sabemos quantas vezes o laço vai se repetir o mais indicado é a utilização do laço para(), quem tem o seguinte formato como padrão:
para(inteiro i = 0; i < N; i++){
}
Sendo N desse caso o limite de repetições que é 20
para(inteiro i = 0; i < 20; i++){
}
Continuando para ler cada posição do vetor nós podemos utilizar o i, pois a cada repetição ele vai aumentar i++, que significa que a cada repetição o i vai aumentar +1, na primeira repetição ele é 0, depois 1, 2, 3 e por aí vai, então vamos ler valores na posição [i]:
para(inteiro i = 0; i < 20; i++){
leia(valores[i])
}
Dando continuidade agora vamos calcular a média, para isso declaramos um variável do tipo real, com nome media e iniciamos essa em 0.0:
real media = 0.0
Agora antes de realizar o cálculo de média vamos somar a essa variável todos os valores presentes no vetor valores[], para isso vamos utilizar outro laço para() com limite de 20 repetições:
para(inteiro i = 0; i < 20; i++){
}
E agora vamos somar a variável media o valor presente e valores na posição [i], lembrando que segue o mesmo esquema anterior, i vai ser 0, depois 1, 2, 3... Então temos que:
para(inteiro i = 0; i < 20; i++){
media += valores[i]
}
lembrando que += é uma simplificação, sendo o mesmo que:
media = media + valores[i]
Basicamente você está falando que media recebe ele mesmo mais valores na posição [i], com isso podemos calcular a média, e para tal basta falar que media recebe seu valor dividido por 20:
media /= 20
Lembrando que é o mesmo que:
media = media / 20
Agora vem a finalização nós queremos saber quais números dentro do vetor valores[] estão acima da média ou abaixo da média, para depois mostrar esses números no console, para isso vamos fazer algo diferente, vamos declarar duas variáveis do tipo cadeia(texto) e valor iniciá-las sem nada = ""
cadeia acimaMedia = "", abaixoMedia = ""
Vamos usar essas duas variáveis para guardar os números que estiverem acima ou abaixo da média em forma de texto, para isso vamos declara a mesma estrutura para que vimos anteriormente com limite repetições 20:
para(inteiro i = 0; i < 20; i++){
}
E vamos verificar dentro desse laço se valores na posição [i] é maior que media e depois se esse valor é menor que media. Então para iniciar criamos um se(), com a condição valores[i] > media:
para(inteiro i = 0; i < 20; i++){
se(valores[i] > media){
}
}
Com isso verificamos se o valor é maior que a media, antes de continuar, dentro do se() { }, nós podemos criar a estrutura encadeada, que é o que vai ser executado se o se() não for verdade, para isso vamos utilizar o senao se() e vamos verificar agora se valores[i] é menor que a media:
para(inteiro i = 0; i < 20; i++){
se(valores[i] > media){
}
senao se(valores[i] < media){
}
}
Com a estrutura pronta agora vamos colocar o que vai ocorrer quando uma das condições for verdadeira, a primeira é quando valores na posição [i] é maior que a media. O truque que vamos utilizar é a concatenação, basicamente nós iremos adicionar as nossas variáveis de texto mais informações, que neste exemplo serão os valores que estão acima da média:
acimaMedia += valores[i]
mesmo que:
acimaMedia = acimaMedia + valores[i]
Contudo para deixar mais organizado e mostrar os valores de forma separada no console nós adicionamos um espaço antes de valores[i]:
acimaMedia += " " + valores[i]
Com isso teremos que:
para(inteiro i = 0; i < 20; i++){
se(valores[i] > media){
acimaMedia += " " + valores[i]
}
senao se(valores[i] < media){
}
}
Agora faremos quase a mesma coisa quando valores[i] estiver abaixo da média, só que dessa vez nós vamos adicionar a variável abaixoMedia os valores que estiverem abaixo da média, utilizando o mesmo formato anterior:
abaixoMedia += " " + valores[i]
Ficando:
para(inteiro i = 0; i < 20; i++){
se(valores[i] > media){
acimaMedia += " " + valores[i]
}
senao se(valores[i] < media){
abaixoMedia += " " + valores[i]
}
}
Agora precisamos escrever todos as nossas informações na ordem desejada.
para(inteiro i = 0; i < 20; i++){
se(valores[i] > media){
acimaMedia++
}
senao se(valores[i] < media){
abaixoMedia++
}
}
Resposta:
# Resposta para 10 numeros inteiros
# Voce pode adaptar para o seu caso
var num := lista[10]
var soma := 0.0
para i de 0 ate 9 faca
num[i] := leia_inteiro
soma := soma + num[i]
fim
media = soma / 10
var acima := ""
para i de 0 ate 9 faca
se num[i] > media entao
acima := "{acima} {num[i]}"
fim
fim
escreva media
escreva acima
Explicação: