Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: gonezq en 27 Febrero 2021, 00:51 am



Título: Mostrar pares e impares en dos arreglos
Publicado por: gonezq en 27 Febrero 2021, 00:51 am
Tengo un problema que no puedo resolver.

1- ingresar 16 numeros tipo entero por teclado.
2- separar pares e impares en dos vectores diferentes y mostrarlos en pantall. solo debera ajustarse a la cantidad de numeros pares o impares que hayan sido ingresados desde el vector general ( entre 0 y 16)
3- calcular promedio de los vectores "par, impar y general" y mostrarlos en pantalla.
4- determinar el valor mayor y el menor del vector general y mostrar en pantalla el numero y las posiciones en las que fueron ingresados.
5- ordenar el vector general de menor a mayor y mostrarlo en pantalla.
6- salir

lo que voy haciendo es lo siguiente:

Código
  1. int main(int argc, char *argv[]) {
  2.  
  3. int num[16], opc, par=0, impar=0, i=0, j=0;
  4. int parv[par], imparv[impar];
  5. int aux = 0, auxp=0, auxi=0;
  6.  
  7. do{
  8. printf("\n\n1.Ingresar 16 numeros.\n");
  9. printf("2.Mostrar pares e impares.\n");
  10. printf("3.Promedio de pares impares y general.\n");
  11. printf("4.Valores mayores y menores.\n");
  12. printf("5.Numeros ordenados de menor a mayor\n");
  13. printf("6.Salir\n\n");
  14. scanf("%i", &opc);
  15.  
  16. switch(opc){
  17.  
  18. case 1:
  19.  
  20. for( i=0; i<16; i++){
  21. printf("\nNro %i: ", i+1);
  22. scanf("%i", &num[i]);
  23.  
  24. if(num[i]%2==0){
  25. par++;
  26.  
  27. }else{
  28. impar++;
  29. }
  30.  
  31. }
  32.  
  33.  
  34. for(i=0;i<16;i++){
  35.  
  36.  
  37.  
  38. if(num[i]%2!=0){
  39. imparv[auxi]=num[i];
  40. auxi++;
  41. }
  42.  
  43.  
  44. }
  45.  
  46.  
  47.  
  48. break;
  49.  
  50. case 2:
  51.  
  52.  
  53. printf("Numeros pares: \n\n");
  54.  
  55.  
  56.  
  57.  
  58. for(i=0;i<par;i++){
  59. printf("%, ", parv[i]);
  60. }
  61.  
  62.  
  63.  
  64.  
  65. printf("\n\nNumeros impares: \n\n");
  66.  
  67.  
  68.  
  69.  
  70.  
  71. for(i=0;i<impar;i++){
  72. printf("%, ", imparv[i]);
  73. }
  74.  
  75.  
  76.  
  77. break;
  78. case 3:
  79. break;
  80. case 4:
  81. break;
  82. case 5:
  83. break;
  84. }
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96. }while(opc !=6);
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104. return 0;
  105. }



Utilizar etiquetas para el codigo


Título: Re: Mostrar pares e impares en dos arreglos
Publicado por: AlbertoBSD en 27 Febrero 2021, 03:45 am
Esta parte del codigo no es asi:

Código
  1. int num[16], opc, par=0, impar=0, i=0, j=0;
  2. int parv[par], imparv[impar];

No puedes declarara un arreglo con longitud 0.

Tienes 2 opciones  puedes declarar parv y imparv como un apuntador y luego utilizar memoria dinamica para asignar la memoria quedaria mas o menos asi:

Código
  1. int *parv,*impar;
  2. /*codigo aqui hasta saber la cantidad especifica de pares e impares*/
  3. parv = calloc(par,sizeof(int));
  4. imparv= calloc(impar,sizeof(int));
  5.  
  6. for(i=0;i<16;i++){
  7. if(num[i]%2!=0){
  8. imparv[auxi]=num[i];
  9. auxi++;
  10. }
  11. else{
  12. parv[aux_par]=num[i];
  13. aux_par++;
  14. }
  15. }
  16.