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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [SOLUCIONADO] Array pasado por referencia a una función no se modifica
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] Array pasado por referencia a una función no se modifica  (Leído 1,768 veces)
HastatusXXI

Desconectado Desconectado

Mensajes: 8



Ver Perfil
[SOLUCIONADO] Array pasado por referencia a una función no se modifica
« en: 29 Octubre 2016, 12:04 pm »

Hola.
Intento hacer un programa al que se le pase por parámetro (en la línea de comandos) el tamaño de un array tipo float. Tengo que reservar el espacio necesario con malloc. El usuario debe introducir los valores del array. El programa los imprime. A continuación invierte el vector (aquí viene el problema) y se vuelve a imprimir el array. El array se imprime en el orden original otra vez. Debe de ser algún problema con las referencias, pero no lo encuentro ¿Alguien me echa un cable?

Para hacer más fácil la revisión, diré que el problema probablemente esté en la función invertir, lo demás funciona sin problemas.

Edito: ya lo he resuelto. El problema no es de referencias. En la función invertir escribí mal la condición de fin del for. Debe acabar cuando el índice i supere al tam, es decir, el for quedaría:

Código
  1. for(int i = 0; i < tam; i++) {
  2. tmp = array[i];
  3. array[i] = array[tam];
  4. array[tam] = tmp;
  5. tam--;
  6. }
  7.  


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int POW(int a, int b);
  5. void invertir(float *array, int tam);
  6.  
  7. int main(int argc, char *argv[]) {
  8. if(argc < 2 | argc > 2) {
  9. printf("Este programa solo admite 1 argumento.\n");
  10. return 1;
  11. }
  12. int numero = 1;
  13. for(int i = 0; argv[1][i] != '\0'; i++) {
  14. if(argv[1][i] < 48 || argv[1][i] > 57) {
  15. numero = 0;
  16. }
  17. }
  18.  
  19. if(numero == 0) {
  20. printf("Argumento NO entero\n");
  21. return 2;
  22. }
  23.  
  24. int tam = 0; //tamaño del vector de floats (argumento programa)
  25. int tam_cadena = 0; //será el tamaño de la cadena argv[1]
  26.  
  27. for(int i = 0; argv[1][i] != '\0'; i++) {
  28. tam_cadena++;
  29. }
  30.  
  31. printf("Tamaño de la cadena argumento: %d\n", tam_cadena);
  32.  
  33. for(int i = 0; argv[1][i] != '\0'; i++) {
  34. tam += ((int)argv[1][i] - 48) * POW(10, tam_cadena-1-i);
  35. }
  36.  
  37. printf("%d\n", tam);
  38. //Creación del array tipo float de tamaño introducido por el usuario
  39. float *dir_array_float;
  40. dir_array_float = (float*)malloc(tam*sizeof(float));
  41.  
  42. float elem;
  43.  
  44. for(int i = 0; i < tam; i++) {
  45. printf("Introduzca el elemento (float) nº %d del array: \n", i+1);
  46. scanf("%f", &dir_array_float[i]);
  47. }
  48.  
  49. printf("\n");
  50.  
  51. for(int i = 0; i < tam; i++) {
  52. printf("%f\n", dir_array_float[i]);
  53. }
  54.  
  55. invertir(dir_array_float, tam);
  56.  
  57. printf("\n");
  58.  
  59. for(int i = 0; i < tam; i++) {
  60. printf("%f\n", dir_array_float[i]);
  61. }
  62.  
  63. return 0;
  64. }
  65.  
  66. int POW(int a, int b) {
  67. int base = a;
  68.  
  69. if(b>0) {
  70. while(b>1) {
  71. a *= base;
  72. b--;
  73. }
  74. }
  75. else if(b == 0) {
  76. return 1;
  77. }
  78.  
  79. return a;
  80. }
  81.  
  82. void invertir(float *array, int tam) {
  83. float tmp;
  84. tam--;
  85.  
  86. for(int i = 0; i > tam; i++) {
  87. tmp = array[i];
  88. array[i] = array[tam];
  89. array[tam] = tmp;
  90. tam--;
  91. }
  92.  
  93. return;
  94. }


« Última modificación: 29 Octubre 2016, 12:15 pm por HastatusXXI » En línea

araes

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: [SOLUCIONADO] Array pasado por referencia a una función no se modifica
« Respuesta #1 en: 1 Noviembre 2016, 13:21 pm »

for(int i = 0; i > tam; i++) {
   tmp = array;
   array = array[tam];
   array[tam] = tmp;
   tam--;
}

Tienes i < tam, y tiene que ser i< tam, sino nunca te entrará en el bucle  ;)


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Referencia a argumento en funcion.-
Programación Visual Basic
mdg 1 2,142 Último mensaje 9 Agosto 2007, 23:43 pm
por CeLaYa
Prototipo de funcion que modifica una matriz
Programación C/C++
2andLi-On 0 2,581 Último mensaje 30 Abril 2011, 21:48 pm
por 2andLi-On
[Solucionado] Duda con paso de un array a una función.
Programación C/C++
Caster 9 3,417 Último mensaje 18 Julio 2013, 11:38 am
por Caster
Pasar array dinamico por referencia
Programación C/C++
n-utz 2 3,659 Último mensaje 20 Noviembre 2016, 02:31 am
por Drewermerc
Trabajar con un array pasado de una función
Programación C/C++
Zegaral 1 1,500 Último mensaje 9 Marzo 2019, 17:40 pm
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines