elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  de nuevo con insercion directa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: de nuevo con insercion directa  (Leído 2,997 veces)
MessageBoxA

Desconectado Desconectado

Mensajes: 229


ayudame a ayudarte


Ver Perfil WWW
de nuevo con insercion directa
« en: 26 Mayo 2014, 17:12 pm »

EDITO!!

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

Código
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <conio.h>
  4.  
  5. /* Escriba un programa en lenguaje C que realice las siguientes tareas:
  6. 1).- Leer entrada de "N" números enteros positivos mayor que cero
  7. (SOLO MAYOR QUE CERO, NO IGUAL O MENOR QUE CERO).  (LISTO)
  8.  
  9. 2).- Usar el método de ordenamiento de inserción,
  10. de tal forma que los números impares ocurran o se escriban antes de los pares en el vector
  11.  
  12. 3).- Ordenar los pares en forma ascendente y los impares en forma descendente. (LISTO)
  13.  
  14. 4).- Usar el método de búsqueda para hallar un numero o elemento "A"
  15. a través del método de búsqueda SECUENCIAL introducido por teclado. MOSTRAR SU POSICIÓN. (LISTO)
  16.  
  17. CONSIDERACIONES:
  18. 1) Si no hay números pares leídos ordenar descendentes. (LISTO)
  19. 2) si no hay números impares leídos ordenar ascendente  (LISTO)
  20. 3) si hay números Pares/impares ordenar según el PUNTO N° 3 ANTES MENCIONADO (LISTO)
  21. */
  22.  
  23.  
  24.  
  25. //prototipo de funcion ordenamiento
  26.  
  27.  
  28. void ordenar_impares_descendentes(int vector[], int elementos);//CONSIDERACION NUMERO 1
  29. void ordenar_pares_ascendentes(int vector[], int elementos);//CONSIDERACION NUMERO 2
  30. void ordenar_pares_impares(int vector[], int elementos);//CONSIDERACION NUMERO 3
  31. void busqueda_secuencial(int vector[], int elementos); //PUNTO NUMERO 4
  32.  
  33.  
  34. //inicia main
  35. int main()
  36.  
  37. {
  38.  
  39. //PEDIMOS LA CANTIDAD DE NUMEROS QUE DESEAMOS GUARDAR EN EL VECTOR
  40. printf("cuantos elementos desea almacenar? ");
  41. int* v,elementos;
  42. scanf("%d",&elementos);
  43.  
  44.  
  45. /* Reservar memoria para almacenar n enteros */
  46.  
  47. v = (int*)malloc(elementos * sizeof(int)); //UN VECTOR QUE TENDRA LAS DIMENCIONES DE LOS NUMEROS A ALMACENAR
  48.  
  49. /* Verificamos que la asignación se haya realizado correctamente */
  50. if (v== NULL)
  51. {
  52. /* Error al intentar reservar memoria */
  53. }
  54.  
  55.  
  56. //CONTINUAMOS A LLENAR EL VECTOR YA DECLARADO
  57.  
  58.  
  59. printf("\nIngrese los valores de su lista");
  60.  
  61. int valor_temporal, par=0, impar=0, n;
  62. for(n=0;n<elementos;)
  63. {
  64.  
  65. printf("\n Ingrese el dato %d: ",(n+1));
  66. scanf("%d",&valor_temporal);
  67. //COMPROBAMOS QUE EL DIGITO ES MAYOR A CERO
  68. if(valor_temporal>0)
  69. {
  70. v[n]=valor_temporal;//almacenamos el digito
  71. n++; //avanzamos de posicion
  72. if(valor_temporal%2==0)//comprobamos si es par para mas adelante realizar la operacion necesaria
  73. {
  74. par=1;
  75. }
  76. else  //caso contrario es impar
  77. {
  78.    impar=1;
  79. }
  80. }
  81. else
  82. {
  83. printf("\nIntroduzca un numero mayor a cero");
  84. }
  85.  
  86. }
  87.  
  88. //MOSTRAMOS AL OPERADOR QUE LOS NUMEROS SON ALMACENADOS EN EL ORDEN QUE FUERON INTRODUCIDOS
  89.  
  90. printf("\nlos numeros introducidos son:");
  91.  
  92. for(int n=0;n<elementos;n++)
  93. {
  94. printf("\n dato %d es %d", (n+1), v[n]);
  95. }
  96.  
  97.  
  98. //PROCEDEMOS A REALIZAR LAS OPERACIONES NECESARIAS EN BASE A SI EXISTEN PARES, IMPARES O AMBOS EN EL VECTOR
  99.  
  100.  
  101. if(par==1 && impar==1)
  102. {
  103. //funcion de pares e impares
  104. ordenar_pares_impares(v,elementos);
  105. }
  106.  
  107. else if(par==1 && impar==0)
  108. {
  109. //funcion de pares ascendentes
  110. ordenar_pares_ascendentes(v,elementos);
  111. }
  112. else if(par==0 && impar==1)
  113. {
  114. //funcion de impares descendentes
  115. ordenar_impares_descendentes(v,elementos);
  116. }
  117.  
  118. free (v);
  119. system("pause");
  120. return 0;
  121. }
  122.  
  123. //FUNCION PARA ORDENAR DE MANERA ASCENDENTE EL VECTOR EN CASO DE QUE SOLO HAYAN PARES
  124. void ordenar_pares_ascendentes(int vector[], int elementos)
  125. {
  126.   int i,j,v;
  127.  
  128.     for (i = 1; i < elementos; i++)
  129.        {
  130.             v = vector[i];
  131.             j = i - 1;
  132.             while (j >= 0 && vector[j] > v)
  133.             {
  134.                   vector[j + 1] = vector[j];
  135.                   j--;
  136.             }
  137.  
  138.             vector[j + 1] = v;
  139.       }
  140.  
  141.   printf("\n\nel vector par ordenado de forma ascendente es: ");
  142.   //imprimimos el vector con su respectivo ordenamiento
  143.   for(int n=0;n<elementos;n++)
  144. {
  145. printf("\n dato %d es %d", (n+1), vector[n]);
  146. }
  147.  
  148. char letra;
  149. printf("\ndesea buscar un elemento en el vector?\n presione s para SI y n para NO:  ");
  150. letra=getch();
  151.  
  152. if (letra =='s')
  153. {
  154. busqueda_secuencial(vector,elementos);
  155. }
  156. }
  157.  
  158.  
  159. //FUNCION PARA ORDENAR DE MANERA DSECENDENTE EL VECTOR EN CASO DE QUE SOLO HAYAN IMPARES
  160. void ordenar_impares_descendentes(int vector[], int elementos)
  161. {
  162.   int i, j, t;
  163.     for (i=1; i<elementos; i++)
  164.     {
  165.         j=i;
  166.         t=vector[j];
  167.         while (j>0 && vector[j-1]<t)//NOTESE QUE SOLO SE NECESITA CAMBIAR UN SIGNO EN ESTE CONDICIONAL PARA QUE SEA DESCENDENTE
  168.         {
  169.             vector[j]=vector[j-1];
  170.             j--;
  171.         }
  172.         vector[j]=t;
  173.     }
  174.  
  175.   printf("\n\nel vector impar ordenado de forma descendente es: ");
  176.   //imprimimos el vector con su respectivo ordenamiento
  177.   for(int n=0;n<elementos;n++)
  178. {
  179. printf("\n dato %d es %d", (n+1), vector[n]);
  180. }
  181.  
  182. char letra;
  183. printf("\ndesea buscar un elemento en el vector?\n presione s para SI y n para NO:  ");
  184. letra=getch();
  185.  
  186. if (letra =='s')
  187. {
  188. busqueda_secuencial(vector,elementos);
  189. }
  190. }
  191.  
  192. //FUNCION PARA EL CASO EN QUE EXISTAN PARES E IMPARES EN EL VECTOR
  193. //LOS IMPARES SE COLOCARAN PRIMEROS EN EL VECTOR Y DE MANERA DESCENDENTE
  194. //LOS PARES  SE COLOCARAN EN LAS SIGUIENTES POSICIONES DE MANERA ASCENDENTE
  195.  
  196. void ordenar_pares_impares(int vector[], int elementos)
  197. {
  198.   int i, j, t,n;
  199.     for (i=1; i<elementos; i++)
  200.     {
  201.         j=i;
  202.         t=vector[j];
  203.         if(t%2==0)
  204.         {
  205.         while (j>0 && vector[j-1]>t && vector[j-1]%2==0)
  206.         {
  207.             vector[j]=vector[j-1];
  208.             j--;
  209.         }
  210.         }
  211.         else
  212.         {
  213.         while (j>0 && (vector[j-1]<t || vector[j-1]%2==0))
  214.         {
  215.             vector[j]=vector[j-1];
  216.             j--;
  217.         }
  218.         }
  219.         vector[j]=t;
  220.     }
  221.  
  222.   printf("\n\nel vector par-impar ordenado es: ");
  223.   //imprimimos el vector con su respectivo ordenamiento
  224.   for(int n=0;n<elementos;n++)
  225. {
  226. printf("\n dato %d es %d", (n+1), vector[n]);
  227. }
  228.  
  229. char letra;
  230. printf("\ndesea buscar un elemento en el vector?\n presione s para SI y n para NO:  ");
  231. letra=getch();
  232.  
  233. if (letra =='s')
  234. {
  235. busqueda_secuencial(vector,elementos);
  236. }
  237. }
  238.  
  239. // BUSQUEDA SECUENCIAL
  240.  
  241. void busqueda_secuencial(int vector[], int elementos)
  242. {
  243.     int encontrar;
  244. printf("\nEscriba un numero por favor:");
  245.    scanf("%d", &encontrar);
  246.    printf("\nUsted ingreso %d: ",encontrar);
  247.    for (int i=0;i<elementos;i++)
  248. {
  249.         if (vector[i] == encontrar)
  250. {
  251.             printf("\nNumero encontrado en la posicion [%d] del vector",(i+1));
  252.         }
  253. else
  254. {
  255.         printf("\nNumero no encontrado en la posicion [%d] del vector",(i+1));
  256.         }
  257.     }
  258.   // FIN BUSQUEDA SECUENCIAL
  259. }


« Última modificación: 27 Mayo 2014, 05:56 am por MessageBoxA » En línea

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


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: de nuevo con insercion directa
« Respuesta #1 en: 26 Mayo 2014, 17:23 pm »

Código
  1. int elementos;
  2. scanf("%d",&elementos);
  3.  
  4. int v [(elementos-1)]; // <<--- MAL
  5.  

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.


En línea

MessageBoxA

Desconectado Desconectado

Mensajes: 229


ayudame a ayudarte


Ver Perfil WWW
Re: de nuevo con insercion directa
« Respuesta #2 en: 26 Mayo 2014, 17:30 pm »

SI ESO YA LO HABIA ARREGLADO GRACIAS PERO MI DUDA ES SOBRE EL TITULO DE LA PUBLICACION
En línea

SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: de nuevo con insercion directa
« Respuesta #3 en: 26 Mayo 2014, 17:38 pm »

No escribas en mayuscula y depuralo.
En línea

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

Desconectado Desconectado

Mensajes: 229


ayudame a ayudarte


Ver Perfil WWW
Re: de nuevo con insercion directa
« Respuesta #4 en: 26 Mayo 2014, 17:53 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
  1. void ordenar_pares_impares(int vector[], int elementos)
  2. {
  3.   int i, j, t;
  4.     for (i=1; i<elementos; i++)
  5.     {
  6.         j=i;
  7.         t=vector[j];
  8.         if(t%2==0)
  9.         {
  10.         while (j>0 && vector[j-1]>t)
  11.         {
  12.             vector[j]=vector[j-1];
  13.             j--;
  14.         }
  15.         }
  16.         else
  17.         {
  18.         while (j>0 && vector[j-1]<t)
  19.         {
  20.             vector[j]=vector[j-1];
  21.             j--;
  22.         }
  23.         }
  24. vector[j]=t;
  25.     }
  26.  
  27.   printf("\n\nel vector par-impar ordenado es: ");
  28.   //imprimimos el vector con su respectivo ordenamiento
  29.   for(int n=0;n<elementos;n++)
  30. {
  31. printf("\n dato %d es %d", (n+1), vector[n]);
  32. }
  33.  
  34. char letra;
  35. printf("\ndesea buscar un elemento en el vector?\n presione s para SI y n para NO:  ");
  36. letra=getch();
  37.  
  38. if (letra =='s')
  39. {
  40. busqueda_secuencial(vector,elementos);
  41. }
  42. }
« Última modificación: 26 Mayo 2014, 18:01 pm por MessageBoxA » En línea

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


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: de nuevo con insercion directa
« Respuesta #5 en: 26 Mayo 2014, 20:36 pm »

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
  1. void ordenar_pares_impares(int vector[], int elementos)
  2. {
  3.   int i, j, t,n;
  4.     for (i=1; i<elementos; i++)
  5.     {
  6.         j=i;
  7.         t=vector[j];
  8.         if(t%2==0)
  9.         {
  10.         while (j>0 && vector[j-1]>t && vector[j-1]%2==0)
  11.         {
  12.             vector[j]=vector[j-1];
  13.             j--;
  14.         }
  15.         }
  16.         else
  17.         {
  18.         while (j>0 && (vector[j-1]<t || vector[j-1]%2==0))
  19.         {
  20.             vector[j]=vector[j-1];
  21.             j--;
  22.         }
  23.         }
  24.         vector[j]=t;
  25.     }
  26.  
  27.   printf("\n\nel vector par-impar ordenado es: ");
  28.   //imprimimos el vector con su respectivo ordenamiento
  29.   for( n=0;n<elementos;n++)
  30. {
  31. printf("\n dato %d es %d", (n+1), vector[n]);
  32. }
  33.  
  34. char letra;
  35. printf("\ndesea buscar un elemento en el vector?\n presione s para SI y n para NO:  ");
  36. letra=getch();
  37.  
  38. if (letra =='s')
  39. {
  40. busqueda_secuencial(vector,elementos);
  41. }
  42. }

Y para mi:

Código
  1.  int elementos;
  2.  scanf("%d",&elementos);
  3.  
  4.  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! ..... !!!!


« Última modificación: 26 Mayo 2014, 21:45 pm por leosansan » En línea

MessageBoxA

Desconectado Desconectado

Mensajes: 229


ayudame a ayudarte


Ver Perfil WWW
Re: de nuevo con insercion directa
« Respuesta #6 en: 27 Mayo 2014, 06:02 am »


gracias vos sos un geek !!  ;D
En línea

SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
burbuja,insercion y seleccion
Programación C/C++
chaarlyyyy 4 9,294 Último mensaje 27 Mayo 2010, 02:57 am
por nicolas_cof
[ADA] Error inexplicable en inserción de datos
Programación General
Shurhand 0 1,841 Último mensaje 18 Junio 2010, 10:33 am
por Shurhand
Insercion de exe
Programación Visual Basic
softinicio 7 2,817 Último mensaje 22 Septiembre 2010, 18:56 pm
por BlackZeroX
Ordenamientos Burbuja, Insercion y Shell en C++
Programación C/C++
Norochii 0 4,629 Último mensaje 25 Mayo 2011, 18:40 pm
por Norochii
Habilitar inserción de swf en un foro
Seguridad
lnvisible 1 1,976 Último mensaje 27 Noviembre 2011, 19:10 pm
por #!drvy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines