Jump to content
Fórum Script Brasil
  • 0

Encontrar o valor do meio de um conjunto de Valores


FranSel

Question

Oi pessoal, preciso de ajuda, preciso fazer um programa que encontre o valor do meio de um conjunto de dados.

Tipo, se eu tiver valores:

1

2

3

4

5

Ele tem que me retornar que o valor do meio é 3...Mesmo que não estiver na ordem..

Agradeço se puderem me ajudar, é bem urgente!

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Apenas uma quantidade de elementos impar terá um elemento exatamente no meio. Fique ciente disto.

Para ter o elemento do meio de um vetor com um número impar de elementos

vetor[n/2+1];

Onde n (int) é o número de elementos.

Edited by mJi
Link to comment
Share on other sites

  • 0

Oi, sim tenho consciência sim..

Mas você pode me dar um exemplo mais claro, não é simplesmente criar este vetor:

O meu código inicial é esse:

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


main()
{
   float Vetor[100];
   float Mediana =0, Soma=0;
   //FILE *arquivovalores;
   int i, Valores;
   printf("-- Calculo da Mediana --");
   printf("\n");
   printf("Informe quantos valores deseja verificar: ");
   scanf("%i",&Valores);  
   printf("\n");
   
   for(i=0;i<Valores;i++)
        {
             printf("\nInforme o %i valor: ", i);
             scanf("%f", &Vetor[i]);  
                            
        } 
    
    
    
    printf("O valor da mediana e: %2.5f", Mediana );     
     
   getchar();
   getchar();
   system("pause");        
          
}

Só falta calcular a mediana....

Fico aguardando se puder me ajudar.. e mais uma vez agradeço a ajuda.... :blush:

Link to comment
Share on other sites

  • 0

Está se esquecendo de uma coisa importante: O cálculo de mediana indica qual número está com a mesma quantidade de elementos acima e abaixo. Para isto, é necessário que eles estejam ordenados.

Ainda, caso haja um número par de elementos, deve-se usar a média aritmética dos dois elementos centrais.

Sobre seu código...

Declare um tipo para a função principal;

Prefira %d para a leitura e impressão de inteiros.

Ah, e como você está utilizando um vetor, tem de se cuidar por causa do índice zero. Aquele n/2+1 não se aplica neste caso.

Fica mais ou menos assim:

#include <stdio.h>

int main(){

   float vetor[100], mediana, aux;
   int i, j, valores;

   printf("-- Calculo da Mediana --\n");
   do{
        printf("Informe quantos valores deseja verificar: ");
        scanf("%d",&valores);
    } while(valores >= 100);

    for(i=0;i<valores;i++){
        printf("\nInforme o valor %d: ", i+1);
        scanf("%f", &vetor[i]);
    }

    for(i=0;i<valores;i++){
        for(j=0;j<valores;j++){
            if(vetor[i] < vetor[j]){
                aux = vetor[i];
                vetor[i] = vetor[j];
                vetor[j] = aux;
            }
        }
    }
    
    if(valores%2){
        mediana = vetor[valores/2];
    } else {
        mediana = (vetor[valores/2-1]+vetor[valores/2])/2;
    }

    printf("\nO valor da mediana e: %2.2f\n", mediana);
    system("pause");
    return(0);
}

Link to comment
Share on other sites

  • 0

Não FranSel, este allgoritmo que lhe passei calcula a mediana, preste atenção nele.

A média aritmética é a soma de todos os elementos dividida pela quantidade de elementos. Em nenhum momento fiz isto no algoritmo que passei.

Veja ele novamente...

Entrada da quantidade de valores -> Entrada dos valores -> Ordenação dos mesmos -> Atribui á variável 'mediana' o valor que está exatamente no centro do vetor (ou a média aritmética dos dois centrais, caso haja um número par de elementos) -> Exibição da mediana.

Link to comment
Share on other sites

  • 0

so funciona com numeros impares, você vai ter que criar uma condição para no caso se forem 10 numeros, para dizer não tem meio.

ps : se o compilador for code - blocks rodará de boa, se não foi adicione a biblioteca conio.h.

#include<stdio.h>

#define L 9

#include<stdio.h>

#define L 9

main()

{

int vt[L];

int i;

int pos,meio;

for (i=0;i<L;i++){

printf("Digite um numero na posicao %d; ",i+1);

system("clear");

scanf("%d",&vt);

}

pos = i/2;

for(i=0;i<L;i++){

if (pos == i){

meio = vt;

}

}

printf("o numero do meio e %d",meio);

}

Edited by thematrix
Link to comment
Share on other sites

  • 0

se não quizer fazer um loop e digitar os numeros separdos, você pode usar esse codigo, mas vai ter que tipo digitar um numero e dar espaço digitar outro e dar espaço na mesma linha por exem 1 2 3 4 5 ;

#include<stdio.h>

#define L 5

main()

{

int vt[L];

int i,j=5;

int pos,meio;

printf("Digite um numero na posicao :");

scanf("%d %d %d %d %d",&vt[0],&vt[1],&vt[2],&vt[3],&vt[4]);

pos = j/2;

for(i=0;i<L;i++){

if (pos == i){

meio = vt;

}

}

printf("o numero do meio e %d",meio);

}

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...