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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


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

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Ayuda con arreglos y funciones.
« en: 12 Junio 2017, 19:16 pm »

Buenas, soy nueva programando en C. Estoy intentando crear un programa que tenga un array de 100 numeros aleatorios entre 1 y 1000. Una vez creado quiero organizarlo de tal manera que almacene los numeros pares en un array y los impares en otro.
Creo que el problema está en la función aleatoria de la librería time.h que estoy empleando, dado que no genera números diferentes para cada componente del vector. Cada vez que ejecuto el programa crea un número distinto que se copia en todas las componentes. Sin embargo, está dentro de un bucle for, luego no llego a entender cuál es el problema. Adjunto mi código a continuación. Gracias por su tiempo:

Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<time.h>
  4. #include<stdlib.h>
  5. #define MAX 100
  6. int rellena_vector (int v[] );
  7. void search_even (int v[MAX], int p[MAX], int cont_pares);
  8. void search_odd (int v[MAX], int im[MAX], int cont_imp);
  9.  
  10. int main(){
  11.  
  12. int v[100], p[MAX], im[MAX];
  13. int cont_pares;
  14. int cont_imp;
  15. int i;
  16.  
  17. cont_pares=rellena_vector (v);
  18. search_even (v, p, cont_pares);
  19. cont_imp=MAX-cont_pares;
  20. search_odd (v,im, cont_imp);
  21.  
  22. return 0;
  23. }
  24.  
  25. int rellena_vector (int v[] ){
  26. int r=0, i, cont_pares=0;
  27.  
  28. for (i=0;i<100; i++)
  29. {
  30. srand (time (NULL));
  31. r=1+rand() % ((1000 +1)-1);
  32. v[i]=r;
  33. if (v[i]%2==0)
  34. {cont_pares++;
  35. }
  36. }
  37.  
  38. return cont_pares;
  39. }
  40.  
  41. void search_even (int v[MAX], int p[MAX], int cont_pares)
  42. {
  43. int i, k=0;
  44.  
  45. for (i=0;i<MAX;i++){
  46.  
  47. if (v[i]%2==0)
  48. {
  49. p[k]=v[i];
  50. k++;
  51. }
  52.  
  53. }
  54. printf("\nA continuacion el vector de pares:" );
  55.  
  56. for (k=0;k<cont_pares;k++)
  57. {
  58. printf(" \n %i", p[k]);
  59. }
  60.  
  61. }
  62.  
  63. void search_odd (int v[MAX], int im[MAX], int cont_imp)
  64. {
  65. int i, k=0;
  66.  
  67. for (i=0;i<MAX;i++){
  68.  
  69. if (v[i]%2==1)
  70. {
  71. im[k]=v[i];
  72. k++;
  73. }
  74.  
  75. }
  76. printf("\nA continuacion el vector de impares:" );
  77.  
  78. for (k=0;k<cont_imp;k++)
  79. {
  80. printf(" \n %i", im[k]);
  81. }
  82.  
  83. }
  84.  

Engel Lex: Los códigos deben usar etiquetas GeSHi


« Última modificación: 12 Junio 2017, 19:22 pm por engel lex » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Ayuda con arreglos y funciones.
« Respuesta #1 en: 12 Junio 2017, 21:51 pm »

Te propongo que cambies el planteamiento.

1º Genera el array de nº aleatorios:
Código:
Entero: k,  Array(de 100 elementos)
Bucle K de 0 a 99
    Array(k) = Random(1-1000)
Fin bucle

2º Derivar los impares abajo en el array, los pares arriba en el array
Código:
Entero: Impares, pares, tmp
Impares=0
Pares=99

Mientras Pares sea mayor que Impares
    Mientras ((Array(Impares) and 1) = 1)  //recorriendo desde abajo, si es impar saltamos al siguiente
        Impares += 1
    Repetir
   
    Mientras ((Array(Pares) and 1) = 0)  // desde arriba hacia abajo, si es par saltamos al anterior 
        Pares -= 1
    Repetir
   
    // Tenemos un par abajo y un impar arriba, intercambiarlos.
    tmp = Array(impares)
    Array(impares) = Array(Pares)
    Array(Pares) = Tmp

Repetir

// La condición del bucle principal, hace que el punto de encuentro se hayan intercambiado, luego los corregimos (tratar de añadir condicionales para evitarlo, supone código más ineficiente que estas tres líneas para arreglarlo):
tmp = Array(impares)
Array(impares) = Array(Pares)
Array(Pares) = Tmp

Es un código sencillo, escueto... y resuelve bien el problema en pocas líneas de código.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ERROR ARREGLOS, FUNCIONES Y Makefile.win
Programación C/C++
alfo1294 1 2,282 Último mensaje 27 Julio 2012, 05:21 am
por avesudra
[C] Paso de arreglos bidimensionales a funciones. (?)
Programación C/C++
oblivionxor 9 12,544 Último mensaje 22 Febrero 2013, 06:45 am
por oblivionxor
arreglos bidimensionales y funciones
Programación C/C++
m@o_614 3 2,958 Último mensaje 16 Julio 2013, 22:33 pm
por eferion
Arreglos a funciones
Programación C/C++
mc275 1 1,812 Último mensaje 19 Abril 2017, 18:25 pm
por MAFUS
arreglos con funciones
Programación C/C++
aldape23 1 1,977 Último mensaje 2 Septiembre 2017, 01:43 am
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines