Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jfap45 en 20 Julio 2012, 19:11 pm



Título: Funciones en C, Ayuda!!
Publicado por: jfap45 en 20 Julio 2012, 19:11 pm
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:

Código:
#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.


Título: Re: Funciones en C, Ayuda!!
Publicado por: durasno en 20 Julio 2012, 21:40 pm
Hola! Tenes un error en la lectura del arreglo num. La forma correcta es:
Código
  1. 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:
Código
  1. llenarArreglo(num, t); // llamada de la funcion

Código
  1. void llenarArreglo(int num[], int t) // en la funcion
  2. {
  3.   // RELLENAMOS LAS POSICIONES DEL VECTOR
  4.      for (i=0;i<t;i++)
  5.      {
  6.         printf("Numero para el lugar %d del arreglo: ",i);
  7.         scanf("%f", &num[t]);
  8.      }
  9. }

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

Saludos


Título: Re: Funciones en C, Ayuda!!
Publicado por: jfap45 en 20 Julio 2012, 23:19 pm
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!!


Título: Re: Funciones en C, Ayuda!!
Publicado por: jfap45 en 23 Julio 2012, 18:04 pm
Ammm, perdon por las molestias otra vez,
resulta q segun yo hice mis funciones, pero no estan bien xq me marca muchos errores;
Código:
# 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:


Título: Re: Funciones en C, Ayuda!!
Publicado por: durasno en 23 Julio 2012, 22:24 pm
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:
Código
  1. (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:
Código
  1. void llenarArreglo(float num[], int tam);
  2. void ordenar(float num[], int tam);
  3. int minimo(float num[], int tam);
  4. int maximo(float num[], int tam);
  5. float mediaNum(float num[], int tam);
  6. float median(float num[], int tam);


Saludos