Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ALONSOQ en 26 Julio 2012, 22:52 pm



Título: funciones duda
Publicado por: ALONSOQ en 26 Julio 2012, 22:52 pm
Hola me podeis decir que falla en este codigo?

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <time.h>
  5.  
  6. int matriz_aleatoria (int m[3] );
  7. int matriz_aleatoria (int m[3])
  8. {
  9.    int  i;
  10.    srand (time(NULL));
  11.   for (i=0; i<3;i++)
  12.    {
  13.    m[i]= (rand()%16);
  14.    printf("%d",m[i]);
  15.    }  
  16.  
  17. }
  18.  
  19.    int main()
  20.    {
  21.       int matriz[3];
  22.        int contador;
  23.  
  24.       matriz_aleatoria(matriz[contador]);
  25.  
  26.        getch();
  27.    }

muchas gracias


Título: Re: funciones duda
Publicado por: overxfl0w13 en 26 Julio 2012, 22:57 pm
Hola me podeis decir que falla en este codigo?

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <time.h>
  5.  
  6. int matriz_aleatoria (int m[3] );
  7. int matriz_aleatoria (int m[3])
  8. {
  9.    int  i;
  10.    srand (time(NULL));
  11.   for (i=0; i<3;i++)
  12.    {
  13.    m[i]= (rand()%16);
  14.    printf("%d",m[i]);
  15.    }  
  16.  
  17. }
  18.  
  19.    int main()
  20.    {
  21.       int matriz[3];
  22.        int contador;
  23.  
  24.       matriz_aleatoria(matriz[contador]);
  25.  
  26.        getch();
  27.    }

muchas gracias

De C poco sé y me lio con sus codes pero que yo vea, la variable contador no está inicializada, si declarada pero no almacena ningun valor, solo basura que le pasas como índice al array matriz.


Título: Re: funciones duda
Publicado por: rir3760 en 26 Julio 2012, 23:01 pm
El error principal se encuentra en la funcion "main", ahi llamas a la funcion pasandole un entero:
Código
  1. matriz_aleatoria(matriz[contador]);

Lo correcto es usar solo el nombre del array:
Código
  1. matriz_aleatoria(matriz);

Y ya que la funcion no retorna un valor debes indicar este como void:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. void matriz_aleatoria(int m[]);
  6.  
  7. int main(void)
  8. {
  9.   int matriz[3];
  10.  
  11.   srand((unsigned) time(NULL));
  12.   matriz_aleatoria(matriz);
  13.  
  14.   return 0;
  15. }
  16.  
  17. void matriz_aleatoria(int m[])
  18. {
  19.   int  i;
  20.  
  21.   for (i = 0; i < 3; i++){
  22.      m[i] = rand() % 16;
  23.      printf("%d\n", m[i]);
  24.   }
  25. }

Un saludo


Título: Re: funciones duda
Publicado por: ALONSOQ en 27 Julio 2012, 13:23 pm
Muchisimas gracias


Título: Re: funciones duda
Publicado por: ALONSOQ en 27 Julio 2012, 14:05 pm
El error principal se encuentra en la funcion "main", ahi llamas a la funcion pasandole un entero:
Código
  1. matriz_aleatoria(matriz[contador]);

Lo correcto es usar solo el nombre del array:
Código
  1. matriz_aleatoria(matriz);

Y ya que la funcion no retorna un valor debes indicar este como void:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. void matriz_aleatoria(int m[]);
  6.  
  7. int main(void)
  8. {
  9.   int matriz[3];
  10.  
  11.   srand((unsigned) time(NULL));
  12.   matriz_aleatoria(matriz);
  13.  
  14.   return 0;
  15. }
  16.  
  17. void matriz_aleatoria(int m[])
  18. {
  19.   int  i;
  20.  
  21.   for (i = 0; i < 3; i++){
  22.      m[i] = rand() % 16;
  23.      printf("%d\n", m[i]);
  24.   }
  25. }

Un saludo

Perdona por la pregunta que seguro que es una tontería, pero por que dices que la función no devuelve ningun valor. ¿ No devuelve tres entreros aleatorios?

gracias


Título: Re: funciones duda
Publicado por: rir3760 en 27 Julio 2012, 17:23 pm
Perdona por la pregunta que seguro que es una tontería, pero por que dices que la función no devuelve ningun valor. ¿ No devuelve tres entreros aleatorios?
No. Lo que hace esa función es almacenar los tres números a partir de la dirección indicada.

Para que una función retorne un valor se debe indicar como su tipo de retorno y se debe utilizar la sentencia:
Código
  1. return N;
Donde "N" sera el valor retornado por la función y, por supuesto, coincida con (o pueda ser convertido a) el tipo apropiado.

Por ejemplo una función que recibe tres números y resulta en la suma de estos es:
Código
  1. int suma(int a, int b, int c)
  2. {
  3.   return a + b + c;
  4. }

Un saludo