#include<stdio.h>
#include<conio.h>
#include<ctype.h>

#define VECLEN 10

void listar(int *v, int n)
{
	int i;
	for(i=0;i<n;i++)
		printf("[%d]=%d\n",i,v[i]);

}
void inserir(int *v,int *n)
{
	int i;
	char opcao;
	if(*n<VECLEN){
		do{
			printf("\n[%d]=",*n);
			scanf("%d",&v[*n]);
			(*n)++;
			printf("\nQualquer tecla para continuar\n[N] para terminar : ",i);
			fflush(stdin);
			opcao=getchar();
		}while(tolower(opcao)!='n' && *n < VECLEN);
	}
	else
		printf("Vector completo\n");

}
void pesquisa(int *v, int n)
{
	int i,x, flg=0;;
	printf("Indique o valor a procurar : ");
	scanf("%d",&x);
	for(i=0;i<n;i++)
		if(v[i]==x){
			printf("O valor %d esta na posicao [%d]\n",x,i);
			flg=1;
		}
	if(!flg)
		printf("O valor %d nao existe\n",x);

}
void eliminar(int *v,int *n)
{
	int i,pos;
	char opcao;
	printf("Indique a posicao do elemento a eliminar[0-%d] : ",*n-1);
	scanf("%d",&pos);
	if(pos >=0 && pos < *n){
		printf("\nO valor que pretende eliminar [%d]=%d\n [S]im [N]ao : ",pos,v[pos]);
		fflush(stdin);
		opcao=getchar();
		if(tolower(opcao)=='s'){
			for(i=pos;i<(*n)-1;i++)
				v[i]=v[i+1];
			(*n)--;
		}
	}
}
void alterar(int *v,int n)
{
	int i,pos, num;
	char opcao;
	printf("Indique a posicao do elemento a alterar[0-%d] : ",n-1);
	scanf("%d",&pos);
	printf("\nIndique o novo valor para a posicao[%d] : ",pos);
	scanf("%d",&num);
	if(pos >=0 && pos < n){
		printf("\nO valor que pretende alterar [%d]=%d por [%d]=%d\n [S]im [N]ao : ",pos,v[pos],pos,num);
		fflush(stdin);
		opcao=getchar();
		if(tolower(opcao)=='s'){
				v[pos]=num;

		}
	}
}
void ordenar(int *v, int n)
{
	int i,j,pos,aux;

	for(i=0;i<n-1;i++){
		pos=i;
		for(j=i+1;j<n;j++)
			if(v[j] < v[pos])
				pos=j;
		aux=v[pos];
		v[pos]=v[i];
		v[i]=aux;
	}
}
float media(int *v, int n)
{
	int i,soma=0;
	for(i=0;i<n;i++)
		soma+=v[i];
	return ((float)soma/n);
}
int mediana(int *v, int n)
{
	int i,med;
	ordenar(v,n);
	if(n%2==0)
		med=(v[n/2]+v[(n/2)-1])/2;
	else
		med=v[n/2];

	return med;
}

char menu()
{
	char opcao;
	printf("\n\nMENU\n");
	printf("[I]nserir dados\n");
	printf("[E]liminar dados\n");
	printf("[A]lterar dados\n");
	printf("[L]istar dados\n");
	printf("[O]rdenar\n");
	printf("[P]esquisar\n");
	printf("[M]edia\n");
	printf("Media[N]a\n");
	printf("[S]air\n");
	fflush(stdin);
	printf("\n\nQual a sua opcao : ");
	opcao=getchar();
	return tolower(opcao);

}

void main()
{
	int vector[VECLEN],nelem=0;
	char op;
	do{
		op=menu();
		if(op!='s')
			switch(op)
			{
				case 'i':inserir(vector,&nelem);
					break;
				case 'e':
						if(nelem>0)
							eliminar(vector,&nelem);
						else
							printf("Nao existem elementos no vector\n");
					break;
				case 'a':
						if(nelem>0)
							alterar(vector,nelem);
						else
							printf("Nao existem elementos no vector\n");
					break;
				case 'l':
						if(nelem>0)
							listar(vector,nelem);
						else
							printf("Nao existem elementos no vector\n");
					break;
				case 'o':
						if(nelem>0)
							ordenar(vector,nelem);
						else
							printf("Nao existem elementos no vector\n");
					break;
				case 'p':
						if(nelem>0)
							pesquisa(vector,nelem);
						else
							printf("Nao existem elementos no vector\n");
					break;
				case 'm':
						if(nelem>0)
							printf("Media [%f]\n",media(vector,nelem));
						else
							printf("Nao existem elementos no vector\n");
					break;
				case 'n':
						if(nelem>0)
							printf("Mediana [%d]\n",mediana(vector,nelem));
						else
							printf("Nao existem elementos no vector\n");
					break;

				default: printf("Opcao errada!!!\n");

			}
	}while(op!='s');

}
