Ir ao conteúdo

Posts recomendados

Postado

Prezados,

 

Preciso fazer um programa para ler n numeros reais (no maximo 100), e mostrar a medias dos valores sem os valores extremos.   Onde a leitura dos numeros será encerrada quando o usuário digitar 0 ou chegarmos a 100. 
   (obs: mas ele pode digitar numeros negativos e positivos)
   ex: 1 3 7 1 4 7 3 1 4 0
    extremos: 1 e 7  (1 é menor valor e 7 é o maior valor)
    media = (3 + 4 + 3 + 4)/4 = 14/4 = 3.5

 

Porém, sou extremamente leigo em C++

Vocês podem me ajudar?

  • Amei 1
Postado

na hora de imprimir a média, mande imprimir apenas com uma ou duas casas decimais, usando o "%.2f". Segue exemplo abaixo:

printf("%.2f", 37.777779);

Desse jeito, ele entende que será mostrado apenas as duas primeiras casas decimais e irá desconsiderar o resto.

22 minutos atrás, edupiombini disse:

sou extremamente leigo em C++

Já dizia um dos melhores programadores que já conheci: "o problema não é ser leigo. O problema é ser ignorante."

  • Curtir 2
Postado

@edupiombini     para pegar dados do teclado , você usa a função cin>> , e para ver se são tais valores extremos , você faz uma comparação usando o comando  if  ,  a soma é assim mesmo  +  e a divisão também  \  ,  poste um rascunho do que você já conseguiu fazer desse exercício  .

  • Curtir 1
Postado

Prezados, @devair1010 @RaphiaelGamer

Obrigado pelas respostas!

Consegui realizar a média e encontrar o menor e maior valor, mas como fazer para realizar uma nova média sem eles?

Agradeço desde já!

 

o código que construí é: 

<

#include<stdio.h>
#include <stdlib.h>
#include <locale.h>

int main()
{
    
   setlocale(LC_ALL, "Portuguese");
   int a[100], n, i, sum=0, maior, menor;
   float avg;

   printf("Entre com o tamanho do vetor [1-100]: ");
   scanf("%d",&n);
   printf("Entre com os %d elementos: ",n);

   
   for(i=0; i<n; i++)
   {
     scanf("%d",&a[i]);
     sum += a[i];
   }

   avg = (float)sum/n;
   printf("Soma=%d \t Média=%.2f",sum,avg);
   
   maior = a[0]; 
   
    for(i = 1; i < n; i++)
    {
        if(maior < a[i])  
        {
            maior = a[i]; 
        }
    }
    printf("\n\nO maior elemento é: %d", maior);

    menor = a[0]; 
      
    for(i = 1; i < n; i++)
    {
        if(menor>a[i])   
        {
            menor = a[i];   
        }
    }
    printf("\n\nO menor elemento é: %d", menor);
    
    return 0;
}

>

 

 

  • Curtir 2
  • Membro VIP
Postado

Que tal parte da solução?

Pro valor maior, imagine algo como:
 

signed int valor[100]; //aqui estão previamente os valores entrados. Dica: gere aleatórios pra teste
signed int valor_maior=0;
char i;
for (i=0;i<100;i++) 
    {
    if (valor[i]>=valor_maior) valor_maior=valor[i];
    }

printf("%d",valor_maior); // pronto... eis o valor de pico

digitei aqui e agora... nem sei se dá certo. Tente entender, confirme, >> compile aqui <<  e me explique

 

ops... digitava enquanto solucionavas... sorry...

 

Média sem os extremos algo como...
 

media=0;
...
if ((valor[i]<maior_valor) && (valor[i]>menor_valor)) media+=valor[i]; //desconsidera o maior
...
media/=98;//? 100-1-1 ...? 

😁

 

 

 

  • Curtir 2
Postado

@if. Infelizmente, não posso geral valores aleatórios. Nos é informado que os valores devem ser lidos.

Uma vez que encontrei o maior valor e o menor valor, seria possível retira-los do vetor e realizar uma nova media sem esses valores? 

Agradeço desde já!

  • Curtir 1
Postado

@edupiombini    para postar seus códigos é melhor usar o botão  <>  que está desenhado lá na barra de ferramentas da janela de postar

barap.jpg.5b3b6efb84c94d25b8459c4fc89b7df5.jpg

para que seu código não fique faltando nenhum caractere , e você não deve somar os que sejam extremos e assim você faz uma comparação e soma apenas os que não sejam extremos , e poderia ser assim  ;

int cont = 0;
for(i=0; i<n; i++)
{
    scanf("%d",&a[i]);
    if(a[i] > 1 && a[i] <7 )
    {
        sum += a[i];
        cont++;
    }
}
printf("a media eh %.2f\n",(float)sum / cont);

 

  • Curtir 1
Postado

@devair1010  nesse caso eu estaria limitando entre 1 e 7 correto? 

a dificuldade que estou tendo é em fazer uma condicional (talvez?) onde se o valor for maior ou igual ao maior e menor ou igual ao menor, ele deve ser descartado e uma nova média será realizada. Excluindo assim o maior e o menor número digitado.

Será que é viável?

  • Obrigado 1
  • Membro VIP
Postado
8 minutos atrás, edupiombini disse:

valores aleatórios. Nos é informado que os valores devem ser lidos.

ok mas como eu disse era só pra teste. Que bom que tem tempo pra entrar 100 números manualmente😁.

8 minutos atrás, edupiombini disse:

retira-los do vetor e realizar uma nova media sem esses valores?

bem... meio que dei esta solução. Perceba que removi 2 do index. Só testando mesmo...

  • Curtir 1
Postado

@if. Desculpe, não havia entendido.

O que eu quero dizer é: o usuário sempre irá definir a dimensão.

Portanto, o número é variável e não uma constatnte como 98.

 

ex: se a dimensão for 20, a média deverá ser dividida por 18 elementos, no caso, n-2 como você mencionou

@devair1010 Valeu! vou adicionar assim daqui pra frente!

 

#include<stdio.h>
#include <stdlib.h>
#include <locale.h>

int main()
{
	
   setlocale(LC_ALL, "Portuguese");
   int a[100], n, i, sum=0, maior, menor;
   float avg;

   printf("Entre com o tamanho do vetor [1-100]: ");
   scanf("%d",&n);
   printf("Entre com os %d elementos: ",n);

   
   for(i=0; i<n; i++)
   {
     scanf("%d",&a[i]);
     sum += a[i];
   }

   avg = (float)sum/n;
   printf("Soma=%d \t Média=%.2f",sum,avg);
   
   maior = a[0]; 
   
    for(i = 1; i < n; i++)
    {
        if(maior < a[i])  
        {
            maior = a[i]; 
        }
    }
    printf("\n\nO maior elemento é: %d", maior);

    menor = a[0]; 
	  
    for(i = 1; i < n; i++)
    {
        if(menor>a[i])   
        {
            menor = a[i];   
        }
    }
    printf("\n\nO menor elemento é: %d", menor);
    
    
    
    return 0;
}

 

  • Curtir 1
Postado

@devair1010  em qual parte do código devo inserir este trecho? 

se inserido no final , não obtenho nenhuma reposta.

 

#include<stdio.h>
#include <stdlib.h>
#include <locale.h>

int main()
{
	
   setlocale(LC_ALL, "Portuguese");
   int a[100], n, i, sum=0, maior, menor;
   float avg;

   printf("Entre com o tamanho do vetor [1-100]: ");
   scanf("%d",&n);
   printf("Entre com os %d elementos: ",n);

   
   for(i=0; i<n; i++)
   {
     scanf("%d",&a[i]);
     sum += a[i];
   }

   avg = (float)sum/n;
   printf("Soma=%d \t Média=%.2f",sum,avg);
   
   maior = a[0]; 
   
    for(i = 1; i < n; i++)
    {
        if(maior < a[i])  
        {
            maior = a[i]; 
        }
    }
    printf("\n\nO maior elemento é: %d", maior);

    menor = a[0]; 
	  
    for(i = 1; i < n; i++)
    {
        if(menor>a[i])   
        {
            menor = a[i];   
        }
    }
    
    printf("\n\nO menor elemento é: %d", menor);
    
    int cont = 0;
    
    for(i=0; i<n; i++)
{
    scanf("%d",&a[i]);
    if(a[i] > 1 && a[i] <7 )
    {
        sum += a[i];
        cont++;
    }
}
printf("a media eh %.2f\n",(float)sum / cont);
    
    
    return 0;
}

 

  • Obrigado 1
  • Membro VIP
Postado

É o seu "desafio do dia" ou um bom exercício mental 😁

O da média? Minha teoria é que estamos usando int. Experimenta TUDO float

 

if(a[i] > 1 && a[i] <7 ) está limitando em valores constantes. Tenta

if(a[i] > valor_minimo && a[i] < valor_maximo ) como lhe disse...

 

  • Curtir 1
Postado
4 minutos atrás, if. disse:

É o seu "desafio do dia" ou um bom exercício mental 😁

O da média? Minha teoria é que estamos usando int. Experimenta TUDO float

@if. É uma lista de exercícios da disciplina "programação estruturada" que faz parte da minha graduação.

Estou tentando resolver a lista para estudar para a primeira avaliação, semana que vem!

 

@if. Sem respostas ainda :(

Consegui fazer 6 de 10 exercícios, os outros busquei ajuda aqui no forum. Mas somente estou conseguindo avançar neste exercicio que estamos discutindo!

Obrigado mais uma vez pela ajuda!

 

#include<stdio.h>
#include <stdlib.h>
#include <locale.h>

int main()
{
	
   setlocale(LC_ALL, "Portuguese");
   int a[100], n, i, sum=0, maior, menor;
   float avg;

   printf("Entre com o tamanho do vetor [1-100]: ");
   scanf("%d",&n);
   printf("Entre com os %d elementos: ",n);

   
   for(i=0; i<n; i++)
   {
     scanf("%d",&a[i]);
     sum += a[i];
   }

   avg = (float)sum/n;
   printf("Soma=%d \t Média=%.2f",sum,avg);
   
   maior = a[0]; 
   
    for(i = 1; i < n; i++)
    {
        if(maior < a[i])  
        {
            maior = a[i]; 
        }
    }
    printf("\n\nO maior elemento é: %d", maior);

    menor = a[0]; 
	  
    for(i = 1; i < n; i++)
    {
        if(menor>a[i])   
        {
            menor = a[i];   
        }
    }
    printf("\n\nO menor elemento é: %d", menor);
   
    avg=0;
    
    if ((a[i]<maior) && (a[i]>menor)) avg+=a[i]; //desconsidera o maior
       

    avg = (float)sum/n-2;
    
    printf("\n\nME: %d", avg);
    
    
    return 0;
}

 

  • Curtir 2
  • Membro VIP
Postado

avg pode ser int mesmo

int avg;

esqueceu do loop

for(i = 0; i < n; i++) if ((a[i]<maior) && (a[i]>menor)) avg+=a[i]; //desconsidera o maior .. e menor
avg/=(n-2);

Spoiler



#include <stdio.h>

int main()
{
	

   int a[100], n, i, sum=0, maior, menor;
   int avg;

   printf("Entre com o tamanho do vetor [1-100]: ");
   scanf("%d",&n);
   printf("Entre com os %d elementos: ",n);

   
   for(i=0; i<n; i++)
   {
     scanf("%d",&a[i]);
     sum += a[i];
   }

   avg = (float)sum/n;
   printf("Soma=%d \t Média=%.2f",sum,avg);
   
   maior = a[0]; 
   
    for(i = 1; i < n; i++)
    {
        if(maior < a[i])  
        {
            maior = a[i]; 
        }
    }
    printf("\n\nO maior elemento é: %d", maior);

    menor = a[0]; 
	  
    for(i = 1; i < n; i++)
    {
        if(menor>a[i])   
        {
            menor = a[i];   
        }
    }
    printf("\n\nO menor elemento é: %d", menor);
   
    avg=0;
    
    for(i=0; i<n; i++) if ((a[i]<maior) && (a[i]>menor)) avg+=a[i]; //desconsidera o maior
       

    avg /=(n-2);
    
    printf("\n\nME: %d", avg);
    
    
    return 0;
}


 

Compilei aqui https://www.onlinegdb.com/online_c_compiler e meio que deu certo...

  • Curtir 2
Postado

Isso é mais um exercício de aritmética do que de C++.

E tem um problema: e se esses valores não forem únicos na lista? Como tratar? Se a lista for 1 1 3 3 devia ficar com zero para a média?

supondo que vá apenas descartar um resultado para o menor e um para o maior, apenas some os elementos mas com cuidado de salvar o valor do menor e do maior. Ao final o simples: como no ensino fundamental: a média é a soma dividida pelo número de itens. Ao final subtraia o menor e o maior da soma e, claro, subtraia DOIS do total de itens.

 

Em C++

 

  • Curtir 3
Postado
17 horas atrás, edupiombini disse:

printf("Entre com o tamanho do vetor [1-100]: ");

scanf("%d",&n);

 Os comandos estão corretos, contudo, preste atenção que a entrada tem suas

 

políticas:

20 horas atrás, edupiombini disse:

Onde a leitura dos numeros será encerrada quando o usuário digitar 0 ou chegarmos a 100. 

Por favor, digite até 100 números inteiros (ℕ*) ou para confirmar digite 0. Adéque sua solução de modo que o usuário delimita o tamanho com 0.

 

18 horas atrás, edupiombini disse:

O que eu quero dizer é: o usuário sempre irá definir a dimensão.

Isso, mas o como define é bem mais importa e prevalece  o ditado no enunciado.

  • Curtir 1
  • Obrigado 1
Postado

@edupiombini    não é no final não , é ali no início , onde você pega os números mesmo ,  assim  :

#include<stdio.h>

#include <stdlib.h>

#include <locale.h>

int main()

{

    int a[100], n, i, sum=0,                    maior, menor  ;

    float avg;

    printf("Entre com o tamanho do vetor [1-100]: ");

     scanf("%d",&n);

    printf("Entre com os %d elementos: ",n);

    int cont=0;

    for(i=0; i<n; i++)

    {

        scanf("%d",&a[i]);

        if(a[i] > 1  && a[i] <7 )

        {

            sum += a[i]; // apenas os validos são somados

        cont++;// total de válidos

    }

}

avg = (float)sum/cont; printf("Soma = %d \t Média = %.2f\n\n",sum,avg );

returno 32768;

// até aqui  .

// no celular o site está bagunçado e não mostra a tag code .......

 

 

 

 

 

for(i = 1; i < n; i++) { if(maior < a[i]) { maior = a[i]; } } printf("\n\nO maior elemento é: %d", maior); menor = a[0]; for(i = 1; i < n; i++) { if(menor>a[i]) { menor = a[i]; } } printf("\n\nO menor elemento é: %d", menor); return 0; }

Postado

Obrigado a todos que me ajudaram, o problema foi resolvido!

Segue o código.

#include<stdio.h>
#include <stdlib.h>
#include <locale.h>

int main()
{
	
   setlocale(LC_ALL, "Portuguese");
   int a[100], n, i, sum=0, maior, menor;
   float avg;

   printf("Entre com o tamanho do vetor [1-100]: ");
   scanf("%d",&n);
   printf("Entre com os %d elementos: ",n);

   
   for(i=0; i<n; i++)
   {
     scanf("%d",&a[i]);
     sum += a[i];
   }

   avg = (float)sum/n;
   printf("Soma=%d \t Média=%.2f",sum,avg);
   
   maior = a[0]; 
   
    for(i = 1; i < n; i++)
    {
        if(maior < a[i])  
        {
            maior = a[i]; 
        }
    }
    printf("\n\nO maior elemento é: %d", maior);

    menor = a[0]; 
	  
    for(i = 1; i < n; i++)
    {
        if(menor>a[i])   
        {
            menor = a[i];   
        }
    }
    printf("\n\nO menor elemento é: %d", menor);
    
    float total;
    n=n-2;
    sum = sum-menor-maior;
    total=sum/n;
    
   
    printf("\n\nA nova média é: %.2f", total);
    
    
    return 0;
}

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!