Funciones en C, Ayuda!!

Iniciado por jfap45, 20 Julio 2012, 19:11 PM

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

jfap45

Hola, tengo el siguiente codigo y me gustaria pasarlo a funciones para que despues las pueda reutilizar, si me pudieran ayudar al menos con una porfavor, yo me encargaria de pasar las demas a como pueda:


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


   float num[10],aux=0,min,max;
      int i,e,t;

void main (){


      clrscr();
      // ASIGNAMOS UN TAMAÑO AL VECTOR, ELEGIDO POR EL USUARIO

        printf("Cual es el tamano del arreglo: ");
      scanf("%d", &t);

      num[t];
      // RELLENAMOS LAS POSICIONES DEL VECTOR
      for (i=0;i<t;i++)
      {
         printf("Numero para el lugar %d del arreglo: ",i);
         scanf("%f", &num);
      }
      // ORDENAMOS DE MENOR A MAYOR LOS VALORES DEL VECTOR
      for (i=1;i<t;i++)
         for (e=0; e<t-1;e++)
            if (num[e]>num[e+1])
            {
               aux= num[e];      // la variable aux nos ayuda a cambiar de posicion los valores del vector
               num[e]=num[e+1];
               num[e+1]=aux;
            }


          // SE ESTABLECEN LOS VALORES MINIMOS Y MAXIMOS
          min=num[0]; //Se establece con el valor del primer indice para despues comparar si el indice siguiente es menor
          max=num[0]; //Se establece con el valor del primer indice para despues comparar si el indice siguiente es mayor
         for (i=1;i<=t-1;i++)
         {
         if (num<min)
            min=num;
         if (num>max)
            max=num;
            }

         // SE IMPRIME EL VECTOR CON LOS VALORES ORDENADOS
         for(i=0;i<t;i++) {
         printf("%f",num);
         printf("\n");
           }

         // CALCULAMOS LA MEDIA O EL PROMEDIO DE TODOS LOS ELEMENTOS DEL VECTOR
          float suma=0;
          float media=0;
          for(i=0;i<t;i++) {
          suma=suma+num;

         media=suma/t;}

         // CALCULAMOS LA MEDIANA DEL CONJUNTO DE VALORES
         float mediana=0;
         if(t%2==0)
         {
         t=t/2;
         mediana=(num[t]+num[t-1])/2;
         }
         else
         {
         t=(t-1)/2;
         mediana=num[t];
         }

         printf("La media es: %f  \n",media);
         printf("La mediana es: %f \n",mediana);
         printf("Minimo: %f, Maximo: %f \n",min,max);
         getch();


      }

El codigo no es muy avanzado, por que yo no se programar mucho en C.

durasno

Hola! Tenes un error en la lectura del arreglo num. La forma correcta es:
scanf("%f", &num[t]);
tenes que indicar el subindice. Lo mismo para imprimir...


Basicamente podrias separar todo el programa en funciones. Te dejo una funcion:
llenarArreglo(num, t); // llamada de la funcion

void llenarArreglo(int num[], int t) // en la funcion
{
   // RELLENAMOS LAS POSICIONES DEL VECTOR
      for (i=0;i<t;i++)
      {
         printf("Numero para el lugar %d del arreglo: ",i);
         scanf("%f", &num[t]);
      }
}


Y asi podrias crear una funcion para todos los comentarios que tenes en mayusculas

Saludos
Ahorrate una pregunta, lee el man

jfap45

Muchas Gracias, una por lo del error al leer el vector y otra por lo de la funcion, creo q entendi, gracias de nuevo y saludos!!

jfap45

Ammm, perdon por las molestias otra vez,
resulta q segun yo hice mis funciones, pero no estan bien xq me marca muchos errores;

# include <conio.h>

# include <stdio.h>

void ordenar (float num[], int t)
{
int i,e;
float aux;
for (i=1;i<t;i++)
for (e=0; e<t-1;e++)
if (num[e]>num[e+1])
{
aux= num[e];      // la variable aux nos ayuda a cambiar de posicion los valores del vector
num[e]=num[e+1];
num[e+1]=aux;
}
}

float minmax (int i, int t, float num [], float min, float max)
{
min=num[0]; //Se establece con el valor del primer indice para despues comparar si el indice siguiente es menor
max=num[0]; //Se establece con el valor del primer indice para despues comparar si el indice siguiente es mayor
for (i=1;i<=t-1;i++)
{
if (num[i]<min)
min=num[i];
if (num[i]>max)
max=num[i];
}
return min, max;
}


/*imprimir (int i, int t, float num[])
{
for(i=0;i<t;i++) {
printf("%f",num[i]);
printf("\n"); }
return;

}
*/

float medianum (int i, int t, float num[], float suma, float media)
{

for(i=0;i<t;i++) {
suma=suma+num[i];

media=suma/t;}
return media;
}




float median ( int t, float num[], float mediana)
{
mediana=0;
if(t%2==0)
{
t=t/2;
mediana=(num[t]+num[t-1])/2;
}
else
{
t=(t-1)/2;
mediana=num[t];
}
return mediana;
}

void llenarArreglo(float num[], int t, int i)
{

for (i=0;i<t;i++)
{
printf("Numero para el lugar %d del arreglo: ",i);
scanf("%f", &num[t]);
}
}




main ()
{
int t,i=0;
float num[1], min=0, max=0, mediana=0, media=0;
clrscr();
printf("Cual es el tamano del arreglo: ");
scanf("%f", &t);
num[t];

llenarArreglo(num, t, i);
ordenar(num, t);
minmax (min, max);
//imprimir ();
medianum (media);
median(mediana);


printf("La media es: %f  \n",media);
printf("La mediana es: %f \n",mediana);
printf("Minimo: %f, Maximo: %f \n",min,max);


getch();
return 0;
}


Me sale un error en algunas donde me dice q son muy pocos parametros los q uso para llamar la funcion, espero puedan ayudarme:

durasno

Hola! el error que te marca es simple, vos no podes declarar una funcion con 5 parametros y luego cuando llamas a esa funcion(en el main) solo le pasas 1 como haces con medianum()

Otra cosa q debes corregir es la declaracion float num[1]. Igual el tema mas importante que te falta es el concepto de "pasaje por valor y pseudoreferencia", el cual me parece mas conveniente explicarte cuando veas punteros.
Al no saber ese tema te recomiendo que declares funciones de este tipo:
(tipo) nombrefuncion(float num[], int tam);
Es decir funciones que reciben el arreglo, el tamaño del arreglo y retornen un resultado. Te dejo algunos ejemplos:
void llenarArreglo(float num[], int tam);
void ordenar(float num[], int tam);
int minimo(float num[], int tam);
int maximo(float num[], int tam);
float mediaNum(float num[], int tam);
float median(float num[], int tam);



Saludos
Ahorrate una pregunta, lee el man