Lógica, perguntado por adrielfap9054, 10 meses atrás

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

Respondido por thiagopokem
1

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.


thiagopokem: Caso queira mostrar quantos números estão acima da média e quantos estão abaixo da média basta alterar e a variável cadeia para inteiro e iniciá-las em 0, e depois alterar o resultado de cada condição para somar += 1(mesmo que i++) a cada repetição do para()
thiagopokem: inteiro acimaMedia = 0, abaixoMedia = 0
para(inteiro i = 0; i < 20; i++){
se(valores[i] > media){
acimaMedia++
}
senao se(valores[i] < media){
abaixoMedia++
}
}
Respondido por leonardolucena71
1

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:

Perguntas interessantes