FranSel Posted November 2, 2011 Report Share Posted November 2, 2011 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:12345Ele 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! Quote Link to comment Share on other sites More sharing options...
0 mJi Posted November 2, 2011 Report Share Posted November 2, 2011 (edited) 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 elementosvetor[n/2+1];Onde n (int) é o número de elementos. Edited November 2, 2011 by mJi Quote Link to comment Share on other sites More sharing options...
0 FranSel Posted November 2, 2011 Author Report Share Posted November 2, 2011 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: Quote Link to comment Share on other sites More sharing options...
0 mJi Posted November 3, 2011 Report Share Posted November 3, 2011 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); } Quote Link to comment Share on other sites More sharing options...
0 FranSel Posted November 3, 2011 Author Report Share Posted November 3, 2011 Oiii..Obrigada, mas isso qeu você calculou é a média, já tenho essa cálculo feito..O meu problema é assim: tenho esses numeros (1,2,3,4,5,6,7,8,9)Ele tem que me retorna o 5..que é o valor do meio...Obrigada! :rolleyes: Quote Link to comment Share on other sites More sharing options...
0 mJi Posted November 4, 2011 Report Share Posted November 4, 2011 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. Quote Link to comment Share on other sites More sharing options...
0 thematrix Posted November 4, 2011 Report Share Posted November 4, 2011 (edited) 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 9main(){ 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 November 4, 2011 by thematrix Quote Link to comment Share on other sites More sharing options...
0 thematrix Posted November 4, 2011 Report Share Posted November 4, 2011 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 5main(){ 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);} Quote Link to comment Share on other sites More sharing options...
0 FranSel Posted November 5, 2011 Author Report Share Posted November 5, 2011 Ok obrigada Quote Link to comment Share on other sites More sharing options...
Question
FranSel
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
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.