#include <stdio.h>
#include <windows.h>
#include <conio.h>
/* Escriba un programa en lenguaje C que realice las siguientes tareas:
1).- Leer entrada de "N" números enteros positivos mayor que cero
(SOLO MAYOR QUE CERO, NO IGUAL O MENOR QUE CERO). (LISTO)
2).- Usar el método de ordenamiento de inserción,
de tal forma que los números impares ocurran o se escriban antes de los pares en el vector
3).- Ordenar los pares en forma ascendente y los impares en forma descendente. (LISTO)
4).- Usar el método de búsqueda para hallar un numero o elemento "A"
a través del método de búsqueda SECUENCIAL introducido por teclado. MOSTRAR SU POSICIÓN. (LISTO)
CONSIDERACIONES:
1) Si no hay números pares leídos ordenar descendentes. (LISTO)
2) si no hay números impares leídos ordenar ascendente (LISTO)
3) si hay números Pares/impares ordenar según el PUNTO N° 3 ANTES MENCIONADO (LISTO)
*/
//prototipo de funcion ordenamiento
void ordenar_impares_descendentes(int vector[], int elementos);//CONSIDERACION NUMERO 1
void ordenar_pares_ascendentes(int vector[], int elementos);//CONSIDERACION NUMERO 2
void ordenar_pares_impares(int vector[], int elementos);//CONSIDERACION NUMERO 3
void busqueda_secuencial(int vector[], int elementos); //PUNTO NUMERO 4
//inicia main
int main()
{
//PEDIMOS LA CANTIDAD DE NUMEROS QUE DESEAMOS GUARDAR EN EL VECTOR
printf("cuantos elementos desea almacenar? ");
int* v,elementos;
scanf("%d",&elementos);
/* Reservar memoria para almacenar n enteros */
v = (int*)malloc(elementos * sizeof(int)); //UN VECTOR QUE TENDRA LAS DIMENCIONES DE LOS NUMEROS A ALMACENAR
/* Verificamos que la asignación se haya realizado correctamente */
if (v== NULL)
{
/* Error al intentar reservar memoria */
}
//CONTINUAMOS A LLENAR EL VECTOR YA DECLARADO
printf("\nIngrese los valores de su lista");
int valor_temporal, par=0, impar=0, n;
for(n=0;n<elementos;)
{
printf("\n Ingrese el dato %d: ",(n+1));
scanf("%d",&valor_temporal);
//COMPROBAMOS QUE EL DIGITO ES MAYOR A CERO
if(valor_temporal>0)
{
v[n]=valor_temporal;//almacenamos el digito
n++; //avanzamos de posicion
if(valor_temporal%2==0)//comprobamos si es par para mas adelante realizar la operacion necesaria
{
par=1;
}
else //caso contrario es impar
{
impar=1;
}
}
else
{
printf("\nIntroduzca un numero mayor a cero");
}
}
//MOSTRAMOS AL OPERADOR QUE LOS NUMEROS SON ALMACENADOS EN EL ORDEN QUE FUERON INTRODUCIDOS
printf("\nlos numeros introducidos son:");
for(int n=0;n<elementos;n++)
{
printf("\n dato %d es %d", (n+1), v[n]);
}
//PROCEDEMOS A REALIZAR LAS OPERACIONES NECESARIAS EN BASE A SI EXISTEN PARES, IMPARES O AMBOS EN EL VECTOR
if(par==1 && impar==1)
{
//funcion de pares e impares
ordenar_pares_impares(v,elementos);
}
else if(par==1 && impar==0)
{
//funcion de pares ascendentes
ordenar_pares_ascendentes(v,elementos);
}
else if(par==0 && impar==1)
{
//funcion de impares descendentes
ordenar_impares_descendentes(v,elementos);
}
free (v);
system("pause");
return 0;
}
//FUNCION PARA ORDENAR DE MANERA ASCENDENTE EL VECTOR EN CASO DE QUE SOLO HAYAN PARES
void ordenar_pares_ascendentes(int vector[], int elementos)
{
int i,j,v;
for (i = 1; i < elementos; i++)
{
v = vector[i];
j = i - 1;
while (j >= 0 && vector[j] > v)
{
vector[j + 1] = vector[j];
j--;
}
vector[j + 1] = v;
}
printf("\n\nel vector par ordenado de forma ascendente es: ");
//imprimimos el vector con su respectivo ordenamiento
for(int n=0;n<elementos;n++)
{
printf("\n dato %d es %d", (n+1), vector[n]);
}
char letra;
printf("\ndesea buscar un elemento en el vector?\n presione s para SI y n para NO: ");
letra=getch();
if (letra =='s')
{
busqueda_secuencial(vector,elementos);
}
}
//FUNCION PARA ORDENAR DE MANERA DSECENDENTE EL VECTOR EN CASO DE QUE SOLO HAYAN IMPARES
void ordenar_impares_descendentes(int vector[], int elementos)
{
int i, j, t;
for (i=1; i<elementos; i++)
{
j=i;
t=vector[j];
while (j>0 && vector[j-1]<t)//NOTESE QUE SOLO SE NECESITA CAMBIAR UN SIGNO EN ESTE CONDICIONAL PARA QUE SEA DESCENDENTE
{
vector[j]=vector[j-1];
j--;
}
vector[j]=t;
}
printf("\n\nel vector impar ordenado de forma descendente es: ");
//imprimimos el vector con su respectivo ordenamiento
for(int n=0;n<elementos;n++)
{
printf("\n dato %d es %d", (n+1), vector[n]);
}
char letra;
printf("\ndesea buscar un elemento en el vector?\n presione s para SI y n para NO: ");
letra=getch();
if (letra =='s')
{
busqueda_secuencial(vector,elementos);
}
}
//FUNCION PARA EL CASO EN QUE EXISTAN PARES E IMPARES EN EL VECTOR
//LOS IMPARES SE COLOCARAN PRIMEROS EN EL VECTOR Y DE MANERA DESCENDENTE
//LOS PARES SE COLOCARAN EN LAS SIGUIENTES POSICIONES DE MANERA ASCENDENTE
void ordenar_pares_impares(int vector[], int elementos)
{
int i, j, t,n;
for (i=1; i<elementos; i++)
{
j=i;
t=vector[j];
if(t%2==0)
{
while (j>0 && vector[j-1]>t && vector[j-1]%2==0)
{
vector[j]=vector[j-1];
j--;
}
}
else
{
while (j>0 && (vector[j-1]<t || vector[j-1]%2==0))
{
vector[j]=vector[j-1];
j--;
}
}
vector[j]=t;
}
printf("\n\nel vector par-impar ordenado es: ");
//imprimimos el vector con su respectivo ordenamiento
for(int n=0;n<elementos;n++)
{
printf("\n dato %d es %d", (n+1), vector[n]);
}
char letra;
printf("\ndesea buscar un elemento en el vector?\n presione s para SI y n para NO: ");
letra=getch();
if (letra =='s')
{
busqueda_secuencial(vector,elementos);
}
}
// BUSQUEDA SECUENCIAL
void busqueda_secuencial(int vector[], int elementos)
{
int encontrar;
printf("\nEscriba un numero por favor:");
scanf("%d", &encontrar);
printf("\nUsted ingreso %d: ",encontrar);
for (int i=0;i<elementos;i++)
{
if (vector[i] == encontrar)
{
printf("\nNumero encontrado en la posicion [%d] del vector",(i+1));
}
else
{
printf("\nNumero no encontrado en la posicion [%d] del vector",(i+1));
}
}
// FIN BUSQUEDA SECUENCIAL
}