Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ALONSOQ en 27 Julio 2012, 16:41 pm



Título: separar funciones
Publicado por: ALONSOQ en 27 Julio 2012, 16:41 pm
Hola,

He redactado el siguiente codigo:
hago una función que  crea una matriz aleatoria, la suma, haya la media y dice cual es el mayor y cual el menor.
Mi duda es ¿ como podría separarla en 4 funciones distintas: crea matriz, suma, media, mayor menor
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[] );
  7.  
  8.  
  9.    int main()
  10.    {
  11.       int matriz[3];
  12.       srand (time(NULL));
  13.       matriz_aleatoria(matriz);
  14.  
  15.        getch();
  16.    }
  17.  
  18.  
  19. int matriz_aleatoria (int m[])
  20. {
  21.    int  i, s=0;
  22.    float n;
  23.  
  24.   for (i=0; i<3;i++)
  25.    {
  26.    m[i]= (rand()%16);
  27.    printf("%d\t",m[i]);
  28.    s=s+m[i];
  29.    }  
  30.    printf("%d\t",s);
  31.  
  32.    n = (float) s/3;
  33.        printf("%f\t",n);
  34.  
  35.    if (m[0]>m[1])
  36.          if (m[0]>m[2])
  37.          {
  38.             if (m[1]>m[2])
  39.             printf("el mayor es%d y el menor es%d", m[0],  m[2]);
  40.             else
  41.             printf("el mayor es%d y el menor es%d", m[0],  m[1]);
  42.          }
  43.         else
  44.  
  45.           printf("el mayor es%d y el menor es%d", m[2],  m[1]);
  46.     else
  47.  
  48.         if(m[1]>m[2])
  49.          {
  50.                   if (m[0]>m[2])      
  51.                    printf("el mayor es%d y el menor es%d", m[1],  m[2]);
  52.                    else
  53.                     printf("el mayor es%d y el menor es%d", m[1],  m[0]);
  54.          }
  55. }
  56.  

muchas gracias
   


Título: Re: separar funciones
Publicado por: Ferno en 27 Julio 2012, 19:08 pm
Si tienes implementado el código de cada operación, sólo implementa las 4 funciones correspondientes pasando por parámetro la matriz a utilizar.
Declara las variables locales correspondientes en cada función y retorna el valor!

Recomiendo que comiences por separar el code, si llegas a estancarte en algún momento con un error de compilación, postea nuevamente el code ^^


Título: Re: separar funciones
Publicado por: ALONSOQ en 27 Julio 2012, 19:51 pm
 :o :o??


Título: Re: separar funciones
Publicado por: durasno en 27 Julio 2012, 21:38 pm
Hola! mira aca: http://foro.elhacker.net/programacion_cc/funciones_en_c_ayuda-t367395.0.html
muy parecido a lo que queres hacer; fijate todos los prototipos que le marque al final(hace lo mismo que dice Ferno: pasar la matriz y retornar el resultado(y el tamaño de la matriz))

Saludos


Título: Re: separar funciones
Publicado por: ALONSOQ en 27 Julio 2012, 23:16 pm
¿Así? (no funciona)

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[]);
  7. int suma(int sum);
  8.  
  9. int main()
  10.    {
  11.    int matriz[3];
  12.    int sum;
  13.    srand (time(NULL));
  14.    matriz_aleatoria (matriz);
  15.    suma (sum);
  16.    getch();
  17.  
  18.    }
  19.  
  20. int matriz_aleatoria (int m[])
  21. {
  22. int i;
  23.    for (i=0;i<2;i++)
  24.    {
  25.    m[i]=(rand()%16);
  26.    printf("%d",m[i]);
  27.    }    
  28.  
  29. }
  30.  
  31. int suma (int s)
  32. {
  33. s= s + m[i];
  34. printf("%d",s);  
  35. }


Título: Re: separar funciones
Publicado por: durasno en 28 Julio 2012, 00:24 am
Citar
(no funciona)
¿¿que es lo q no funciona?? No te acostumbres a esperar la respuesta, ya que estoy seguro que si miras detenidamente el programa podrias resolver vos mismo los errores que tenes(simple consejo)

Te marco lo q veo:

Código
  1. for (i=0;i<2;i++)
en la condicion usas i<2, tiene que ser i<3 (ya q tu arreglo es de [3])

2º en la funcion suma() vos usas m[] ¿¿pero en que momento se lo pasas a la funcion??.
Si s es tu variable que contiene la suma total, tenes que inicializar esa variable a 0(cero) ya que si no estas sumando "basura". Ademas para hacer la suma tenes que utilizar un for

3º A tus funciones las declaras para que devuelvan un int pero en ninguna haces un retorno (no es un error sino una mala implementacion)


Saludos

Saludos


Título: Re: separar funciones
Publicado por: dato000 en 28 Julio 2012, 00:40 am
¿¿que es lo q no funciona?? No te acostumbres a esperar la respuesta, ya que estoy seguro que si miras detenidamente el programa podrias resolver vos mismo los errores que tenes(simple consejo)


Toda la fucking razón, no esperes que te hagan la tarea, te ayudamos, pero fuck la vida que lo hacemos de voluntarios...

Te dejo unas, Te recomiendo que leas atentamente como trabajar con arreglos, paso de referencias y variables locales y globales, y lee atentamente como trabajan las funciones, es muy importante eso si quieres saber de C/C++, JA! es importante para todos los lenguajes, pues tienen una lógica similar, pero no te preocupes viejo, es solo cuestión de trabajar y cogerle gusto a pasar horas en frente de un pc (o un pedazo de papel) resolviendo cosas como esta.

Como dije, te dejo unas, la del  menor y mayor las haces tu mi hermano. Hay varias cosas que puede que no termines de entender, solo es cuestión de preguntar, y leer, MUCHO

Código
  1. /*hago una función que  crea una matriz aleatoria, la suma, haya la media y dice cual es el mayor y cual el menor.
  2. Mi duda es ¿ como podría separarla en 4 funciones distintas: crea matriz, suma, media, mayor menor*/
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <time.h>
  7.  
  8. /*Una buena forma de llamar un arreglo como parametro en una funcion,
  9. es separar tanto el arreglo como la cantidad de espacios/dimension que posee el mismo,
  10. para que pueda tomar los valores separados y trabajarlos en la función más facilmente.*/
  11.  
  12.  
  13.  
  14. void arreglo_aleatorio (int a[], int espacios);
  15. int suma(int a[], int espacios);
  16.  
  17.  
  18. int main()
  19. {
  20.    int matriz[3];
  21.    printf("El Arreglo tiene los números: ");
  22.    arreglo_aleatorio(matriz, 3);
  23.    printf("\n\nLa Suma del Arreglo es: %d ", suma(matriz, 3));
  24.    printf("\n\nEl Promedio del Arreglo es: %d ", suma(matriz, 3)/3 );
  25.  
  26.    getchar();
  27.    return 0;
  28. }
  29.  
  30.  
  31. /*Arreglo creado, se deja void por que no retorna ningun valor,
  32. es una funcion que no devuelve valor
  33. es decir, no hay "return"*/
  34. void arreglo_aleatorio (int m[], int espacios)
  35. {
  36.    srand (time(NULL));
  37.    int i;
  38.    for (i=0; i<espacios; i++)
  39.    {
  40.        m[i]=(rand()%10);
  41.        printf("%d, ",m[i]);
  42.    }
  43.  
  44. }
  45.  
  46. /*Esta funcion es "int" porque devuelve un valor:
  47. la suma de los valores almacenados en el arreglo
  48. La estructura es la misma pues necesitamos los
  49. valores estandar del arreglo*/
  50. int suma(int m[], int espacios){
  51.    int i;
  52.    int suma = 0;
  53.    for (i=0; i<espacios; i++)
  54.    {
  55.        //es igual usar suma = suma + m[i]
  56.        suma += m[i];
  57.    }
  58.  
  59.    //Aqui la suma total de los elementos
  60.    return suma;
  61. }




Título: Re: separar funciones
Publicado por: ALONSOQ en 1 Agosto 2012, 10:00 am
Muchas gracias por tu ayuda y tu consejo