de nuevo con insercion directa

Iniciado por MessageBoxA, 26 Mayo 2014, 17:12 PM

0 Miembros y 1 Visitante están viendo este tema.

MessageBoxA

EDITO!!

gracias a las sugerencias y ayuda dada, modifico mi publicacion con el code ya arreglado y funcional. saludos  :rolleyes:

Código (cpp) [Seleccionar]
#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
}
SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++

eferion


int elementos;
scanf("%d",&elementos);

int v [(elementos-1)]; // <<--- MAL


Eso está mal. Los arrays de tamaño dinámico ( su tamaño se conoce en tiempo de ejecución, no antes ) tienes que crearlos con malloc y liberarlos con free.

Además, estaría bien que comprobases que no se introduce un valor igual o inferior a 0... un array con -1 elementos no parece una buena idea.

MessageBoxA

SI ESO YA LO HABIA ARREGLADO GRACIAS PERO MI DUDA ES SOBRE EL TITULO DE LA PUBLICACION
SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++

Eternal Idol

No escribas en mayuscula y depuralo.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

MessageBoxA

#4
Cita de: Eternal Idol en 26 Mayo 2014, 17:38 PM
No escribas en mayuscula y depuralo.

lo siento, te explico amigo moderador sucede que tampoco soy un craneo en programacion hasta aqui es q mis neuronas dan y e hecho el mayor esfuerzo en hacerlo yo mismo pero ya en este punto no se que hacer y pido que practicamente alguien sepa mucho mas me diga cual es la forma en que deberia colocar la funcion ya sea proporcionandome un ejemplo que me haga entender.

aqui seria mi ayuda

Código (cpp) [Seleccionar]
void ordenar_pares_impares(int vector[], int elementos)
{
    int i, j, t;
    for (i=1; i<elementos; i++)
    {
        j=i;
        t=vector[j];
        if(t%2==0)
        {
        while (j>0 && vector[j-1]>t)
        {
            vector[j]=vector[j-1];
            j--;
        }
        }
        else
        {
        while (j>0 && vector[j-1]<t)
        {
            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);
}
}
SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++

leosansan

#5
A bote pronto a mi me sale esto:

Citar

los numeros introducidos son:
dato 1 es 3
dato 2 es 8
dato 3 es 6
dato 4 es 5
dato 5 es 4
dato 6 es 7
dato 7 es 9
dato 8 es 12
dato 9 es 11
dato 10 es 10
dato 11 es 13
dato 12 es 2
dato 13 es 21
dato 14 es 14
dato 15 es 15

el vector par-impar ordenado es:
dato 1 es 21
dato 2 es 15
dato 3 es 13
dato 4 es 11
dato 5 es 9
dato 6 es 7
dato 7 es 5
dato 8 es 3
dato 9 es 2
dato 10 es 4
dato 11 es 6
dato 12 es 8
dato 13 es 10
dato 14 es 12
dato 15 es 14


Código (cpp) [Seleccionar]
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( 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);
}
}


Y para mi:

Código (cpp) [Seleccionar]

 int elementos;
 scanf("%d",&elementos);

 int v [(elementos-1)];


está bien ya que primero obtienes la dimensión y luego declaras el array. Otra cosa es que lo hubieras hecho al revés aunque como te comentó eferion convendría poner una validación a dicha entrada.


¡¡¡¡ Saluditos! ..... !!!!



MessageBoxA

SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++