Funciones en lenguaje C

Función:
una función es una rutina o conjunto de sentencias que realizan una determinada labor, en C todas las funciones te devuelven un valor ya sea de tipo entero o tipo flotante, entre los otros tipos de valores, estas funciones las diseña el programador para dar un ejemplo las funciones printf, bow, sin, cos, entre otras han sido pre diseñadas por programadores, y asi como estas funciones se pueden diseñar otras.

U4UNO-FUNCION
Esta función nos calcula el precio mas impuesto de un determinado producto, para esta función solo es necesario declarar dos valores, los cuales son el precio del producto y la tasa del impuesto, la función siempre se declara al inicio antes del main(), pero se desarrollan fuera del main, para después ser llamadas dentro del main.
#include <stdio.h>

float precio(float base,float impuesto);//declaracion de la funcion
int main()
{
   float importe=2.5;
   float tasa=0.07;

   printf("el precio a pagar es: %.2f\n",precio(importe,tasa));//aqui se manda lo calculado en la funcion
   return 0;
}
float precio(float base, float impuesto) //definicion de la funcion
{
    float calculo;
    calculo=base+(base*impuesto);//la funcion lo calcula
    return calculo;//lo regresa al anterior printf
}

U4DOS-FUNCION
Esta función es tan simple, solo se manda a llamar el printf de un simple hola.

#include <stdio.h>

main()
{
    hola();//SE MANDA A LLAMAR LA FUNCION
    return 0;
}
hola()
{
    printf("hola\n");//ESTA FUNCION SOLO IMPRIME HOLA
}

U4TRES-FUNCION
Esta función nos ayuda a calcular el cubo de un numero, dentro del programa se utiliza la estructura de for, donde se imprimira el cubo de los numero 1 a 5.

#include <stdio.h>

int cubo(int base);//se daclara la funcion, tipo, e identificador

int main()
{
   int numero;
   for(numero=1;numero<=5;numero++)//nos calcula el cubo de 1,2,3,4,5
   {
       printf("El cubo del numero %d es %d\n",numero,cubo(numero));//aqui esta la funcion
   }
   return 0;
}
int cubo(int base)//definicion de la funcion y su desarrollo.
{
    int potencia;
    potencia=base*base*base;
    return potencia;
}

U4CUATRO-FUNCIO
El siguiente programa es un poco confuso ya que utiliza dos funciones que nos ayudan a calcular el factorial de un numero.

#include <stdio.h>
#define VALOR 5//se definen constantes globales
#define FACT 120

int fact_i(int v)//funcion declarada
{
    int r=1,i=0;
    while (i<=v)
    {
        r=r*i;
        i=i+1;
    }
    return r;
}
int fact_r(int v) //funcion declarada
{
    if(v==0) return 1;
    else return v*fact_r(v-1);
}
main()//programa que manda llamar a las funciones
{
    int r,valor=VALOR;
    if(r=fact_i(valor)!=fact_r(valor))
        printf("condicion erronea\n");
    else if(r==FACT)printf("condicion correcta\n");
    else printf("algo falla\n");
}

U4CINCO-FUNCION
Una función de incremento sencilla, sin printf, sin estructuras de control.

#include <stdio.h>

int incr(int v){return v+1;}//funcion 
main()
{
    int a,b;
    b=3;
    a=incr(b);//llamado de funcion 
    //nos imprime return 4 ya que solo nos incrementa en uno al numero b
}

U4SEIS-FUNCION
Se mandan a llamr dos funciones, de una manera mas explicativa, recordando que dentro de cada programa se pueden utilizar las funciones que sean necesarias.
#include <stdio.h>

void primera(void);//declaracion de las funciones
void segunda(void);//funcion tipo void con identificador primera o segunda

main()
{
    printf("la primera funcion llamada, main\n");
    primera();//manda a llamar a la primera funcion
    segunda();//manda a llamar a la segunda funcion
    printf("final de la funcion\n");
    return 0;
}

void primera(void)//se definen las funciones
{
    printf("llamada a la funcion primera\n");//el printf lo manda a la funcion dentro de main llamada primera
    return;
}

void segunda(void)//se define la segunda funcion
{
    printf("llamada a la funcion segunda\n");//lo manda a la funcion segunda en main
    return;
}

U4FuncionContador
En esta función se observara que no se utiliza el return ya que un dato static nos ayudara a hacer algo similar al return, la siguiente función es un contador ordinario.

#include <stdio.h>
void imprimevalor(); //es una funcion vacia donde no recibira ningun valor

int main()
{
    imprimevalor(); //llamado de la funcion y se imprime lo que hay en l funcion
    imprimevalor(); // se vuelve a llamar a la funcion y como tiene un valor estatico modificado imprimira este
    imprimevalor();
     imprimevalor();
     return 0;
}
void imprimevalor()
{
    static int contador = 0; //es un dato estatico este tiende a cambiar
    printf("el valor de contador es: %d\n",contador);//imprime el valor del valor estatico
    contador++; //aumenta el valor estatico
 
    //no se utiliza return ya que el static nos ayuda a suplir est funcion aun que tiene sus limitciones.
}

U4FuncionSumar
Una sencilla función donde suma 2 numeros enteros cuales quiera, dentro de este programa se recomienda omitir la declaración de la función al inicio o antes de su desarrollo y observar que sucede.

#include <stdio.h>
int sumar(int numero1, int numero2);//declaracion de la funcion //recomendacion omitir esta linea con comentario y correr el programa y observar que sucede

int main(void)
{
   int suma=sumar(5,3);//funcion aplicada, 5 = numero 1 y 3 = numero 2
   printf("la suma es: %d\n",suma);//aqui se recibe lo que la funcion mande
   return 0;
}
int sumar(int numero1, int numero2) //omita esta linea y vea que sucede
{
    return numero1+numero2;//funcion aplicada y regresa la suma
}

U4FuncionParametro
las funciones pueden recibir datos como ya lo hemos observdo, y cuando se reciben datos por parámetros estos datos no se ven reflejados en el main pero si son utilizados, ejemplo, dentro del main esta la función pero solo el parámetro y si dentro de la funcion existe una imprecion esta se mandara donde esta el parametro, es por esto que el return no tiene referencia a continuación el programa explicativo.

#include <stdio.h>

void sumar_valor(int numero); //declracion de la funcion

int main(void)
{
   int numero=57; //se asigna un valor
   sumar_valor(numero); //se manda el numero a la funcion y como la funcion tiene una imprecion aqui se imprime, en pocas palabras solo se utiliza el parmetro y este realiza todo lo que la funcion tiene
   printf("valor de numero dentro de main() es: %d\n",numero); //se imprime el numero el main y no de la funcion
   return 0;
}
void sumar_valor(int numero)
{
    numero++; //numero se incrementa en uno
    printf("valor de numero dentro sumar_valor() es:%d\n",numero);//se toma en cuenta solo el numero dentro de la funcion
    return;
}

U4FuncionPorReferencia
El pso por referencia se hace utilizando apuntadores. se envía la dirección de memoria de la variable, por lo tanto los cambios que haga la función si afectan al valor de la variable. ejemplo:
#include <stdio.h>

void sumar_referencia(int *numero); //declaracion de la funcion

int main(void)
{
  int numero=57; //l numero dentro de main se le asigna valor de 57
  sumar_referencia(&numero); //enviamos el numero a la funcion, la refencia es el numero que enviamos con &
  printf("valor de numero dentro de main() es: %d",numero);//se observa que el numero dentro de main se modifica sin a ver recibido nada de la funcion
  return 0;
}
void sumar_referencia(int *numero) //desarrollo de la funcion
{
    *numero+=1;//se le suma 1 a numero
    printf("valor de numero dentro de sumar_referencia() es: %d\n",*numero);//el numero se afecta por el anterior operador
    return;
}

U4TablaDeMultiplicar
En unos caso es mas factible hacer todo el proceso dentro de la funcion, y al final solo mandarla a llamar dentro del main. Ejemplo:
El siguiente programa te desarrolla una funcion que calcula su tabla de multiplicar del 1 al 10

#include <stdio.h>

tabla();//declaracion de la funcion

int main()
{
    tabla();//llamado de la funcion
}
tabla()
{
    float t; //asignacion de variable
    float i;//asignacion de contador
    printf("dame numero para la tabla\n");
    scanf("%f",&t); //registro del numero
    if(t>=1) //validacion de numero mayor a 1
    {
       for(i=1;i<11;i++) //ciclo para multiplicar hasta que i sea igual a 10
    {
        printf("%.2f * %.2f = %.2f \n",t,i,t*i); //este printf se manda a la funcion llamada en el main
    }
    }
    else printf("numero no valido\n");//si no es valida la afirmacion de if pasa a else

}
U4FuncionSizeof
Dentro de la programación en algunas ocasiones es recomendable sber cuando uso de memoria ocupa cada dato dentro del código, pero esto depende del compilador, por eso para generalizar estos valores se requiere la función sizeof. Ejemplo:

#include <stdio.h>

//en este programa se observara cuanto vale cada tipo de dato en bytes con la funcion sizeof
int main()
{
    int a;
    char b;
    char *c;
    float d;
    double e;
    long double f;

    printf("tamaño de a %i\n",a); //toma cualquier valor ya que a no tiene valor
    printf("sizeof a %i\n",sizeof(a));//dice el tamaño que ocupa a de tipo int

    printf("tamaño de b %c\n",b); //las mascaras varian dependiendo de los datos
    printf("sizeof b %i\n",sizeof(b));

    printf("tamaño de c %s\n",c);
    printf("sizeof c %i\n",sizeof(c));

    printf("tamaño de d %f\n",d);
    printf("sizeof d %i\n",sizeof(d));

    printf("tamaño de e %d\n",e);
    printf("sizeof e %i\n",sizeof(e));

    printf("tamaño de f %l\n",f);
    printf("sizeof f %i\n",sizeof(f)); //hasta la fecha este es el dato mas grande que existe en computacion.
}

U4Mascaras
Dependiendo del dato, el formato (2 decimales, 3 decimales, etc) se utilizan las mascaras.
#include <stdio.h>
#include <stdlib.h>

int main()
{
  float a,b,c,d,e,f; //para este dato se utiliza %f, pero tambien existe %d, %i, %h, %o etc
  a=12.2;
  b=123.28;  //asignacion de datos para comprobar las mascaras
  c=12345.2813;
  d=1234567.42812;
  e=12345678.428123123;
  f=1234567891011.1234567891;
  printf("el valor de a %.1f\n",a); //%.1f solo imprimira un decimal y no importa el numero de enteros
  printf("el valor de b %.2f\n",b);// con .2 dos decimales
  printf("el valor de c %.4f\n",c); //con .4 cuatro decimales
  printf("el valor de d %.5f\n",d);
  printf("el valor de e %.9f\n",e);
  printf("el valor de f %.10f\n",f);
}

U4ImprimeValor
Se debe tener muy en cuenta que en C todos los argumentos son pasados "por valor", no existe el concepto de paso de parámetros "por variable" o "por referencia".
En pocas palabras en main pueden existir algunas variables con determinado valor y en la función las mismas variables con diferente valor y estas nos se verán alteradas.

#include <stdio.h>

void imprimevalor();

int main()
{
    int contador=0;
    contador++;
    printf("el valor del contador es %d\n",contador);//no cambia 1
    imprimevalor();//este es el contador de la funcion 5
    printf("ahora el valor del contador es %d\n",contador);//no cambia 1
    return 0;
}
void imprimevalor()
{
    int contador=5; //esta variable llamada contador no es igual a la variable contador del main
    printf("el valor de contador es %d\n",contador);
}

U4VariableExterna
Con las variables externas se puede modificar el valor de esta dentro de main y dentro de las funciones, y una vez modificado su valor ya no regresa a su anterior valor, ejemplo:
#include <stdio.h>

void unafuncion();
void otrafuncion();
int variable; //variable de tipo externa esta se puede modificar dentro del main o de las funciones

int main()
{
   variable=9;//se le asigna valor
   printf("el valor de variable es %d\n",variable); //se imprime el valor de 9
   unafuncion();//manda a llamar a la funcion con print de 9
   otrafuncion();//manda a llamar la funcion con la variable aumentada en 1
   printf("ahora el valor de la variable es: %d\n",variable);//despues del incremento en la funcion se vuelve a imprimir la variable
   return 0;
}
void unafuncion()
{
    printf("en la funcion una funcion, variable es: %d\n",variable);//imprimira el valor de 9
}
void otrafuncion()
{
    variable++;//se modifica variable
    printf("en la funcion otra funcion, variable es: %d\n",variable);//se imprime nuevo valor de la variable de 10
}



Comentarios