Funciones (Parte 3)

 Funciones

En programación, una función es una sección de un programa que calcula un valor de manera independiente al resto del programa.

Una función tiene tres componentes importantes:

  • los parámetros, que son los valores que recibe la función como entrada;
  • el código de la función, que son las operaciones que hace la función; y
  • el resultado (o valor de retorno), que es el valor final que entrega la función.

En esencia, una función es un mini programa. Sus tres componentes son análogos a la entrada, el proceso y la salida de un programa.

En el ejemplo del factorial, el parámetro es el entero al que queremos calcularle el factorial, el código es el ciclo que hace las multiplicaciones, y el resultado es el valor calculado.


Paso por valor 

El paso de parámetros por valor consiste en copiar el contenido de la variable que queremos pasar en otra dentro del ámbito local de la subrutina, consiste pues en copiar el contenido de la memoria del argumento que se quiere pasar a otra dirección de memoria, correspondiente al argumento dentro del ámbito de dicha subrutina. Se tendrán dos valores duplicados e independientes, con lo que la modificación de uno no afecta al otro.


Paso por Referencia 

El paso de parámetros por referencia consiste en proporcionar a la subrutina a la que se le quiere pasar el argumento la dirección de memoria del dato. En este caso se tiene un único valor referenciado (o apuntado) desde dos puntos diferentes, el programa principal y la subrutina a la que se le pasa el argumento, por lo que cualquier acción sobre el parámetro se realiza sobre la misma posición de memoria.

El paso de la dirección de memoria debe ser transparente al programador. Los lenguajes que permiten tratar con direcciones de memoria, como C, permiten simular el paso de argumentos por referencia, sin disponer realmente de esta característica.


Ejemplo: Escribir un programa que reciba como argumento un conjunto de números. Calcular la media mediante una función.

#include <stdio.h>

float media (int *l,int n);

int main (int argc, char ** argv) {

    int i;

    int *lista;

    lista=(int *)malloc(sizeof(int *)*(argc-1)); // -1 al ser INT; +1 al ser CHAR

    if (lista == NULL) {

        printf ("ERROR");

        return 1;

    }

    for (i=0;i<argc;i++) {

        lista=atoi(argv[i]);

    }

    printf ("Media: %f",media(lista,(argc-1)));

    return 0;

}

float media (int *l,int n) {

    int i, suma =0;

    for (i=0;i<n;i++) {

        suma+=l[i];

    }

    return ((float)suma/(float)n);

}





Comentarios