separar funciones

Iniciado por ALONSOQ, 27 Julio 2012, 16:41 PM

0 Miembros y 1 Visitante están viendo este tema.

ALONSOQ

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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

int matriz_aleatoria (int m[] );


    int main()
    {
       int matriz[3];
       srand (time(NULL));
       matriz_aleatoria(matriz);
       
        getch();
    }
   
   
int matriz_aleatoria (int m[])
{
    int  i, s=0;
    float n;
   
   for (i=0; i<3;i++)
    {
    m[i]= (rand()%16);
    printf("%d\t",m[i]);
    s=s+m[i];
    }   
    printf("%d\t",s);
   
    n = (float) s/3;
        printf("%f\t",n);
       
    if (m[0]>m[1])
          if (m[0]>m[2])
          {
             if (m[1]>m[2])
             printf("el mayor es%d y el menor es%d", m[0],  m[2]);
             else
             printf("el mayor es%d y el menor es%d", m[0],  m[1]);
          }
         else
         
           printf("el mayor es%d y el menor es%d", m[2],  m[1]);
     else
     
         if(m[1]>m[2])
          {
                   if (m[0]>m[2])     
                    printf("el mayor es%d y el menor es%d", m[1],  m[2]);
                    else
                     printf("el mayor es%d y el menor es%d", m[1],  m[0]);
          }
}


muchas gracias
   

Ferno

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 ^^

ALONSOQ


durasno

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
Ahorrate una pregunta, lee el man

ALONSOQ

¿Así? (no funciona)

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

int matriz_aleatoria (int m[]);
int suma(int sum);

int main()
    {
    int matriz[3];
    int sum;
    srand (time(NULL));
    matriz_aleatoria (matriz);
    suma (sum);
    getch();
   
    }

int matriz_aleatoria (int m[])
{
int i;
    for (i=0;i<2;i++)
    {
    m[i]=(rand()%16);
    printf("%d",m[i]);
    }   
   
}

int suma (int s)
{
s= s + m[i];
printf("%d",s);   
}

durasno

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:

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
Ahorrate una pregunta, lee el man

dato000

Cita de: durasno en 28 Julio 2012, 00:24 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

/*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*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/*Una buena forma de llamar un arreglo como parametro en una funcion,
es separar tanto el arreglo como la cantidad de espacios/dimension que posee el mismo,
para que pueda tomar los valores separados y trabajarlos en la función más facilmente.*/



void arreglo_aleatorio (int a[], int espacios);
int suma(int a[], int espacios);


int main()
{
    int matriz[3];
    printf("El Arreglo tiene los números: ");
    arreglo_aleatorio(matriz, 3);
    printf("\n\nLa Suma del Arreglo es: %d ", suma(matriz, 3));
    printf("\n\nEl Promedio del Arreglo es: %d ", suma(matriz, 3)/3 );

    getchar();
    return 0;
}


/*Arreglo creado, se deja void por que no retorna ningun valor,
es una funcion que no devuelve valor
es decir, no hay "return"*/
void arreglo_aleatorio (int m[], int espacios)
{
    srand (time(NULL));
    int i;
    for (i=0; i<espacios; i++)
    {
        m[i]=(rand()%10);
        printf("%d, ",m[i]);
    }

}

/*Esta funcion es "int" porque devuelve un valor:
la suma de los valores almacenados en el arreglo
La estructura es la misma pues necesitamos los
valores estandar del arreglo*/
int suma(int m[], int espacios){
    int i;
    int suma = 0;
    for (i=0; i<espacios; i++)
    {
        //es igual usar suma = suma + m[i]
        suma += m[i];
    }

    //Aqui la suma total de los elementos
    return suma;
}






ALONSOQ

Muchas gracias por tu ayuda y tu consejo