• Archivos Cabecera
• Librería Matemática
• Definición, Implementación y Uso
• Generación de Números Aleatorios
• Paso de Parámetros:
      Por Valor e Introducción por Referencia
Archivos Cabecera

• Los problemas que buscamos resolver por el computador
        usualmente son bastante complejos, siempre
        buscaremos dividir un problema grande en
        subproblemas.
• Las funciones son la herramienta que nos ayudara en la
        técnica de “dividir y conquistar”
• Cada función se encarga de resolver un problema mas
        pequeño.
• Ya hemos utilizado funciones, pues existen funciones que
        ya han sido creadas y están incluidas en las librerías
• Por ejemplo printf(), de la librería estandar stdio.h, para
        mostrar información en pantalla
• De hecho, el programa principal es una función: main()
Librería Matemática

• La librería math.h permite al programador
  efectuar cálculos matemáticos comunes
   Prototipo Descripción                                      Ejemplo
   ceil(x)   redondea x al entero mas pequeño no menor        ceil(9.2) es 10.0
               que x                                          ceil(-9.8) es –9.0
   floor(x)    redondea x al entero mas grande no mayor que   floor(9.2) es 9.0
               x                                              floor(-9.8) es –10.0
   fabs(x)     valor absoluto de x                            fabs(-9.5) es 9.5
   fmod(x,y)   residuo de x/y como numero de punto flotante   fmod(13.657, 2.333) es
                                                              1.992
   sqrt(x)     raiz cuadrada de x                             sqrt(9.0) es 3.0
   pow(x,y)    x elevado a la potencia y                      pow(2,7) es 128
   log(x)      logaritmo natural de x(base e)                 log10(x)
   log10(x)    logaritmo de x(base 10)                        log(2.718282) es 1
   exp(x)      funcion exponencial                            exp(0.1) es 2.71828
   sin(x)      seno trigonometrico de x(en radianes)          sin(0.0) es 0.0
   cos(x)      coseno trigonometrico de x(en radianes)        cos(0.0) es 1
   tan(x)      tangente trigonometrico de x(en radianes)      tan(0.0) es 0
Definición de Funciones

Grupo de sentencias bajo un mismo nombre que
  solucionan un problema especifico
•   Llamar a una función es pedir que se ejecute para obtener su resultado
         • Se escribe el nombre de la función, seguida por una lista de
            expresiones separadas por coma y encerradas entre paréntesis.
•   Ejemplo
         • printf(“%d”, a);
         • e = abs(x-y)/ abs(x);
     – Las funciones son utilizadas o creadas por un programador, y solo él
       conoce cómo funciona
     – Los programas son usados por un usuario externo, el cual no conoce
       cómo trabajan las funciones
Implementación de Funciones

Para crear una nueva función se debe seguir los pasos:
• Declaración
   – Luego de las líneas de #include, y antes del programa principal
• Argumentos
   – Para lograr resolver un problema necesita que le entreguen datos
     de entrada
   – Existen funciones que no necesitan argumentos
• Implementación
   – Se especifica los pasos de la función, y cómo ésta llevará a cabo
     su tarea
• Retorno
   – Al llamar a una función, esperamos que regrese con un resultado
   – Al regresar y entregar el resultado se dice que
       • La función ha “retornado” al punto de llamada
Declaración y Prototipos

• Al escribir una nueva función, debe ser
  declarada, igual como declaramos una
  variable
• La declaración de una función, debe incluir:
  – El tipo de dato del valor que va a retornar
  – El nombre de la función
  – El tipo de dato de cada argumento, y un nombre
    para cada uno.

• El prototipo se refiere a la declaración de una
  función
             double sqrt(double x);
Uso de Funciones

     • Los datos de entrada de una función son obtenidos por el
       programa principal, ya sea por teclado o de alguna otra forma.
       La función solo debe recibirlos, no obtenerlos
     • El resultado que genera una función es obtenido por ella y
       retornado al programa donde fue llamada.
     • No es deber de la función imprimir datos por pantalla, eso lo
       decidirá el programa principal
                   void main()
                   {
                            double x, y;
E/S de datos permiten       printf(“Ingrese un real:”);           Argumentos y retorno
a un programa               scanf(“%f”, &x);                      permiten a una función
comunicarse con su                                                comunicarse con el
                            y = sin(x);                           programa que la llama
usuario externo
                            printf(“El seno de x es: %.2f”, y);
                   }
Definición de Funciones:
                 Analogía
• Un programa principal es similar a un jefe, y una función
  a un empleado en una oficina

   – Si el jefe necesita resolver un cierto problema, lo divide en varias tareas
     y llama a sus empleados, para que cada uno resuelva una tarea
   – Dependiendo de la tarea, el jefe entrega al empleado los datos que este
     necesita para resolverla. Estos son equivalentes a los argumentos para
     una función
   – Para resolver su tarea especifica, el empleado podría a su vez, delegar
     subtareas a otros empleados
   – Una vez encargada la resolución de una tarea, el jefe solo espera que el
     empleado retorne con el resultado deseado. Esto es equivalente al valor
     de retorno de una función
   – El jefe nunca se entera de los detalles de cómo el empleado resolvió la
     tarea
Ejercicio de Ejemplo

 Escribir un programa que muestre las
  respectivas conversiones de Celsius a
  Fahrenheit de las temperaturas de 0 a 100,
  de 5 en 5
 Esto se logra con la fórmula:
                  9
               F  C  32
                  5
 Podríamos crear una función que solo se
  encargue de convertir de Celsius a
  Fahrenheit, y luego podremos usarla en el
  programa deseado
Implementación: Prototipo
   – Qué necesitamos que la función genere:
       • La temperatura en Fahrenheit(real)
   – Qué necesita la función para resolver el problema:
       • La temperatura en Celsius(real)

       double CelsiusAFahrenheit (double c);
• La implementación se compone de dos partes:
   – La cabecera es igual que el prototipo. El cuerpo es un bloque de sentencias,
     encerrado entre llaves. Si se van a necesitar variables, se declaran en el
     bloque.
                   double CelsiusAFahrenheit(double c)
                   {         /*Cuerpo*/
                   }
Implementación: Retorno

 El retorno de la función especifica que debe terminar y
  devolver el valor calculado.
        return (expresión que se debe retornar);
 Hay funciones que no retornan datos, se usa return pero sin
  mencionar valor de retorno: return;

             double CelsiusAFahrenheit(double c)
             {      return (9.0 / 5.0 * c + 32);
             }

 Una vez implementada, la función puede ser usada por
  cualquier otro programa o función, es decir, puede ser
  LLAMADA
Llamada a la función
#include <stdio.h>

#define LIMITEINF 0
#define LIMITESUP 100
#define PASO 5

// Prototipos de Funciones
double CelsiusAFahrenheit(double c);

/* Programa Principal */
void main()
{
          int c=0;
          printf(“Tabla de conversión de Celsius a Fahrenheit.n”);
          printf(“C      Fn”);
          for(c = LIMITEINF; c <= LIMITESUP; c = c + PASO)
                     printf(“%3d     %3fn”, c, CelsiusAFahrenheit(c));
}

/* Esta función retorna el equivalente en Fahrenheit del valor c
en Celsius */
double CelsiusAFahrenheit(double c)
{
         return (9.0 / 5.0 * c + 32);
}
Ejercicio

• Escribir la función Factorial en C que permita
  calcular el factorial de un numero dado.
  – El factorial de 0 es 1
  – El factorial de 1 es 1(1x1)
  – El factorial de 2 es 2(1x2)
  – El factorial de 3 es 6(1x2x3)
  – El factorial de 4 es 24(1x2x3x4)
  – El factorial de un número dado es la multiplicación de todos los
    números desde el 1 hasta el mismo.
Solución

                                   int Factorial(int n)
     Inicio
                                   {
   Recibir n
                                            int fact, i=0;
                                            fact = 1;
 Fact = 1;
 i = 1;                                     if (n==0)
                                                    return 1;
    i >=n          Retornar fact

                                            for(i = 1; i <=n; i++)
fact = fact * i;       Fin                           fact = fact * i;

   i = i +1;
                                            return (fact);
                                   }
Paso de Parámetros
                             a Funciones

                          #include <stdio.h>

                          //Declaración de funciones
                          int Factorial(int n);
Si vemos el programa
principal y la función
como un todo, puede       void main()
resultar un tanto         {                                               Si vemos sólo el programa
confuso:                                int i;                            principal, tiene sentido, pues se
• Hay dos variables                     for (i = 0; i < 10; i ++)         imprime el factorial de todos los
con nombre i                              printf(“%dn”, Factorial(i));   números hasta el 10
• En el programa se       }
usa la variable i como
el número al que se le    int Factorial (int n)
calcula el factorial.     {
• En la función la                        int fact, i;                        Si vemos sólo la función,
variable a la que se le                   fact = 1;                             tiene sentido, pues se
calcula el factorial se                   for(i = 1; i <=n; i++)                encarga de calcular el
llama n                                        fact = fact * i;               factorial de la variable n
                                          return (fact);
                          }
Paso de Parámetros
                     a Funciones
• Se evalúan las expresiones          #include <stdio.h>
  enviadas como argumentos            int Factorial(int n);
• El valor de cada argumento es       main()
                                      {
                                                                        1
                                                                        2
                                                                        6
  copiado en cada parámetro de             int i;
                                           for (i = 0; i < 10; i ++)
  la función llamada.                      {
                                                          printf(“%dn”, Factorial(i));
• Se ejecutan una a una las                }
                                      }
  sentencias de la función hasta
  que aparece la sentencia return
• Se evalúa la expresión de la
                                             Factorial(3)
                                             Factorial(2)
                                             Factorial(1)
                                             Factorial(0)
  sentencia return.                                                                       n
• El programa que llamó a la
                                      int Factorial(int n)
  función continúa, reemplazando      {
                                                      int fact, i;
                                                                                          3
                                                                                          2
                                                                                          1
                                                                                          0
  en el lugar de la llamada, por el                   fact = 1;
                                                      for(i = 1; i <=n; i++)
  valor retornado                                     {
                                                            fact = fact * i;
                                                                                    expr
                                                      }
                                                      return (fact);
                                      }                                             6
                                                                                    2
                                                                                    1
Paso de Parámetros
                        Por Valor
 Crearemos una funcion que reciba dos valores y los intercambie
 Podríamos decir que el prototipo sería:
     void Intercambiar(int a, int b);                 void main()
                                                       {
Esta función no efectuará el cambio, como se                         int x, y;
                                                                     printf(“Ingrese x:”);
espera.
                                                                     scanf(“%d”,&x);
Al pasar parámetros, se efectúa una copia de                         printf(“Ingrese y:”);
los valores. Este tipo se conoce como PASO DE                        scanf(“%d”,&y);
PARAMETROS POR VALOR.                                                printf(“x = %d, y= %d”, x, y);
                                                                     Intercambiar(x, y);
                                                                     printf(“x = %d, y= %d”, x, y);
         main                                          }
                                                       void Intercambiar(int a, int b)
          x          y               Intercambiar      {

              3      4
                     a       b            tmp
                                                                    int tmp;
                                                                    tmp = a;
                                                                    a = b;
                         4
                         3       4
                                 3          3                       b = tmp;
                                                       }
Paso de Parámetros
                         Por Referencia
•   Para modificar directamente los datos que se reciben como parámetros, se usa
    la llamada POR REFERENCIA
•   El prototipo sería:
                                                       void main()

• void Intercambiar(int *a, int *b);                   {
                                                                     int x, y;
                                                                     printf(“Ingrese x:”);
                                                                      scanf(“%d”,&x);
                 Al retornar la función si habrá                     printf(“Ingrese y:”);
                 efectuado el cambio sobre las                        scanf(“%d”,&y);
                 variables que se pasaron por                        printf(“x = %d, y= %d”, x, y);
                                                                     Intercambiar(&x, &y);
                 referencia.                                         printf(“x = %d, y= %d”, x, y);
         main                                          }
                                                       void Intercambiar(int *a, int *b)
          x            y                               {
                                                                    int tmp;
             4
             3             3
                           4           Intercambiar                 tmp = a;
                                                                    a = b;
                   a           b         tmp                        b = tmp;
                                                       }
                       3
                       4           3
                                   4        3
Procedimientos

• Existen funciones que no retornan ningún valor:
                   printf (“Hola Mundon”);
• Una función que no retorna nada, y que se llama únicamente
  para que ejecute su código, se llama procedimiento
• C trata de igual forma a las funciones y a los procedimientos
• Un procedimiento en C, es una función sin valor de
  retorno
        void DarInstrucciones(void);


• Los procedimientos pueden recibir tantos argumentos necesite
Implementación de un
       Procedimiento

void ImprimirMenu (void)
{
      printf   (“1.   Tabla de Sumarn”);
      printf   (“2.   Tabla de Restarn”);
      printf   (“3.   Tabla de Multiplicarn”);
      printf   (“4.   Tabla de Dividirn”);
      printf   (“5.   Salirn”);
}
Generación de Números
               Aleatorios
• Para introducir el factor “suerte” en los programas en C, tenemos
  la función rand() que genera números aleatorios.
• Los números obtenidos son enteros entre 0 y RAND_MAX (32767).
• Si ejecutamos varias veces el programa, la secuencia de
  números aleatorios se repite. Si un programa genera 3
  números aleatorios entre 0 y 10. Lo ejecutamos una vez y
  obtenemos por ejemplo 4, 7 y 9. Lo ejecutamos por segunda
  vez y vuelve a salir 4, 7 y 9. Y siempre se repetirá este
  resultado.
• Esto sucede porque rand() "calcula" los números aleatorios
  partiendo de un número inicial llamado semilla.
• Si volvemos a ejecutar el programa desde el principio, el
  número inicial (la semilla) que usa rand() es el mismo, por lo
  tanto, la secuencia de números aleatorios se repetirá.
Función rand()

•   aleatorio = rand(); // Aleatorio entre 0 y 32767

•   La operación módulo (%) nos da el residuo de dividir rand() entre cualquier
    número. Este residuo puede ir de 0 a N-1.

     aleatorio = rand () % N;           // Aleatorio entre 0 y N-1
     aleatorio = rand () % 6;           // Aleatorio entre 0 y 5

     aleatorio = rand () % N+1;         // Aleatorio entre 1 y N
     aleatorio = rand () % 7;           // Aleatorio entre 1 y 6

     aleatorio = N + rand() % (M-N+1) ;            // Aleatorio entre N y M
     aleatorio = 20 + rand () % 11;               // Aleatorio entre 20 y 30
Función srand()

• Para evitar el problema de obtener siempre los mismos números
  aleatorios, tenemos la función srand()
• A esta función se le pasa un parámetro que se utilizará como número
  semilla para el cálculo. No se debe poner un número fijo como
  semilla, porque entonces se repite el problema.
• Podemos utiliza la fecha/hora del sistema, pues este valor cambia si
  ejecutamos el programa en distintos instantes de tiempo.
• En C se obtiene con la función time()
        srand (time(NULL));
• A la función srand() sólo debemos llamarla una vez en nuestro
  programa, antes de utilizar la función rand()
• Para utilizar las funciones se debe declarar las librerías:
        #include <stdlib.h>
        #include <time.h>

Capítulo 6 funciones y procedimiento

  • 1.
    • Archivos Cabecera •Librería Matemática • Definición, Implementación y Uso • Generación de Números Aleatorios • Paso de Parámetros: Por Valor e Introducción por Referencia
  • 2.
    Archivos Cabecera • Losproblemas que buscamos resolver por el computador usualmente son bastante complejos, siempre buscaremos dividir un problema grande en subproblemas. • Las funciones son la herramienta que nos ayudara en la técnica de “dividir y conquistar” • Cada función se encarga de resolver un problema mas pequeño. • Ya hemos utilizado funciones, pues existen funciones que ya han sido creadas y están incluidas en las librerías • Por ejemplo printf(), de la librería estandar stdio.h, para mostrar información en pantalla • De hecho, el programa principal es una función: main()
  • 3.
    Librería Matemática • Lalibrería math.h permite al programador efectuar cálculos matemáticos comunes Prototipo Descripción Ejemplo ceil(x) redondea x al entero mas pequeño no menor ceil(9.2) es 10.0 que x ceil(-9.8) es –9.0 floor(x) redondea x al entero mas grande no mayor que floor(9.2) es 9.0 x floor(-9.8) es –10.0 fabs(x) valor absoluto de x fabs(-9.5) es 9.5 fmod(x,y) residuo de x/y como numero de punto flotante fmod(13.657, 2.333) es 1.992 sqrt(x) raiz cuadrada de x sqrt(9.0) es 3.0 pow(x,y) x elevado a la potencia y pow(2,7) es 128 log(x) logaritmo natural de x(base e) log10(x) log10(x) logaritmo de x(base 10) log(2.718282) es 1 exp(x) funcion exponencial exp(0.1) es 2.71828 sin(x) seno trigonometrico de x(en radianes) sin(0.0) es 0.0 cos(x) coseno trigonometrico de x(en radianes) cos(0.0) es 1 tan(x) tangente trigonometrico de x(en radianes) tan(0.0) es 0
  • 4.
    Definición de Funciones Grupode sentencias bajo un mismo nombre que solucionan un problema especifico • Llamar a una función es pedir que se ejecute para obtener su resultado • Se escribe el nombre de la función, seguida por una lista de expresiones separadas por coma y encerradas entre paréntesis. • Ejemplo • printf(“%d”, a); • e = abs(x-y)/ abs(x); – Las funciones son utilizadas o creadas por un programador, y solo él conoce cómo funciona – Los programas son usados por un usuario externo, el cual no conoce cómo trabajan las funciones
  • 5.
    Implementación de Funciones Paracrear una nueva función se debe seguir los pasos: • Declaración – Luego de las líneas de #include, y antes del programa principal • Argumentos – Para lograr resolver un problema necesita que le entreguen datos de entrada – Existen funciones que no necesitan argumentos • Implementación – Se especifica los pasos de la función, y cómo ésta llevará a cabo su tarea • Retorno – Al llamar a una función, esperamos que regrese con un resultado – Al regresar y entregar el resultado se dice que • La función ha “retornado” al punto de llamada
  • 6.
    Declaración y Prototipos •Al escribir una nueva función, debe ser declarada, igual como declaramos una variable • La declaración de una función, debe incluir: – El tipo de dato del valor que va a retornar – El nombre de la función – El tipo de dato de cada argumento, y un nombre para cada uno. • El prototipo se refiere a la declaración de una función double sqrt(double x);
  • 7.
    Uso de Funciones • Los datos de entrada de una función son obtenidos por el programa principal, ya sea por teclado o de alguna otra forma. La función solo debe recibirlos, no obtenerlos • El resultado que genera una función es obtenido por ella y retornado al programa donde fue llamada. • No es deber de la función imprimir datos por pantalla, eso lo decidirá el programa principal void main() { double x, y; E/S de datos permiten printf(“Ingrese un real:”); Argumentos y retorno a un programa scanf(“%f”, &x); permiten a una función comunicarse con su comunicarse con el y = sin(x); programa que la llama usuario externo printf(“El seno de x es: %.2f”, y); }
  • 8.
    Definición de Funciones: Analogía • Un programa principal es similar a un jefe, y una función a un empleado en una oficina – Si el jefe necesita resolver un cierto problema, lo divide en varias tareas y llama a sus empleados, para que cada uno resuelva una tarea – Dependiendo de la tarea, el jefe entrega al empleado los datos que este necesita para resolverla. Estos son equivalentes a los argumentos para una función – Para resolver su tarea especifica, el empleado podría a su vez, delegar subtareas a otros empleados – Una vez encargada la resolución de una tarea, el jefe solo espera que el empleado retorne con el resultado deseado. Esto es equivalente al valor de retorno de una función – El jefe nunca se entera de los detalles de cómo el empleado resolvió la tarea
  • 9.
    Ejercicio de Ejemplo Escribir un programa que muestre las respectivas conversiones de Celsius a Fahrenheit de las temperaturas de 0 a 100, de 5 en 5  Esto se logra con la fórmula: 9 F  C  32 5  Podríamos crear una función que solo se encargue de convertir de Celsius a Fahrenheit, y luego podremos usarla en el programa deseado
  • 10.
    Implementación: Prototipo – Qué necesitamos que la función genere: • La temperatura en Fahrenheit(real) – Qué necesita la función para resolver el problema: • La temperatura en Celsius(real) double CelsiusAFahrenheit (double c); • La implementación se compone de dos partes: – La cabecera es igual que el prototipo. El cuerpo es un bloque de sentencias, encerrado entre llaves. Si se van a necesitar variables, se declaran en el bloque. double CelsiusAFahrenheit(double c) { /*Cuerpo*/ }
  • 11.
    Implementación: Retorno  Elretorno de la función especifica que debe terminar y devolver el valor calculado. return (expresión que se debe retornar);  Hay funciones que no retornan datos, se usa return pero sin mencionar valor de retorno: return; double CelsiusAFahrenheit(double c) { return (9.0 / 5.0 * c + 32); }  Una vez implementada, la función puede ser usada por cualquier otro programa o función, es decir, puede ser LLAMADA
  • 12.
    Llamada a lafunción #include <stdio.h> #define LIMITEINF 0 #define LIMITESUP 100 #define PASO 5 // Prototipos de Funciones double CelsiusAFahrenheit(double c); /* Programa Principal */ void main() { int c=0; printf(“Tabla de conversión de Celsius a Fahrenheit.n”); printf(“C Fn”); for(c = LIMITEINF; c <= LIMITESUP; c = c + PASO) printf(“%3d %3fn”, c, CelsiusAFahrenheit(c)); } /* Esta función retorna el equivalente en Fahrenheit del valor c en Celsius */ double CelsiusAFahrenheit(double c) { return (9.0 / 5.0 * c + 32); }
  • 13.
    Ejercicio • Escribir lafunción Factorial en C que permita calcular el factorial de un numero dado. – El factorial de 0 es 1 – El factorial de 1 es 1(1x1) – El factorial de 2 es 2(1x2) – El factorial de 3 es 6(1x2x3) – El factorial de 4 es 24(1x2x3x4) – El factorial de un número dado es la multiplicación de todos los números desde el 1 hasta el mismo.
  • 14.
    Solución int Factorial(int n) Inicio { Recibir n int fact, i=0; fact = 1; Fact = 1; i = 1; if (n==0) return 1; i >=n Retornar fact for(i = 1; i <=n; i++) fact = fact * i; Fin fact = fact * i; i = i +1; return (fact); }
  • 15.
    Paso de Parámetros a Funciones #include <stdio.h> //Declaración de funciones int Factorial(int n); Si vemos el programa principal y la función como un todo, puede void main() resultar un tanto { Si vemos sólo el programa confuso: int i; principal, tiene sentido, pues se • Hay dos variables for (i = 0; i < 10; i ++) imprime el factorial de todos los con nombre i printf(“%dn”, Factorial(i)); números hasta el 10 • En el programa se } usa la variable i como el número al que se le int Factorial (int n) calcula el factorial. { • En la función la int fact, i; Si vemos sólo la función, variable a la que se le fact = 1; tiene sentido, pues se calcula el factorial se for(i = 1; i <=n; i++) encarga de calcular el llama n fact = fact * i; factorial de la variable n return (fact); }
  • 16.
    Paso de Parámetros a Funciones • Se evalúan las expresiones #include <stdio.h> enviadas como argumentos int Factorial(int n); • El valor de cada argumento es main() { 1 2 6 copiado en cada parámetro de int i; for (i = 0; i < 10; i ++) la función llamada. { printf(“%dn”, Factorial(i)); • Se ejecutan una a una las } } sentencias de la función hasta que aparece la sentencia return • Se evalúa la expresión de la Factorial(3) Factorial(2) Factorial(1) Factorial(0) sentencia return. n • El programa que llamó a la int Factorial(int n) función continúa, reemplazando { int fact, i; 3 2 1 0 en el lugar de la llamada, por el fact = 1; for(i = 1; i <=n; i++) valor retornado { fact = fact * i; expr } return (fact); } 6 2 1
  • 17.
    Paso de Parámetros Por Valor  Crearemos una funcion que reciba dos valores y los intercambie  Podríamos decir que el prototipo sería:  void Intercambiar(int a, int b); void main() { Esta función no efectuará el cambio, como se int x, y; printf(“Ingrese x:”); espera. scanf(“%d”,&x); Al pasar parámetros, se efectúa una copia de printf(“Ingrese y:”); los valores. Este tipo se conoce como PASO DE scanf(“%d”,&y); PARAMETROS POR VALOR. printf(“x = %d, y= %d”, x, y); Intercambiar(x, y); printf(“x = %d, y= %d”, x, y); main } void Intercambiar(int a, int b) x y Intercambiar { 3 4 a b tmp int tmp; tmp = a; a = b; 4 3 4 3 3 b = tmp; }
  • 18.
    Paso de Parámetros Por Referencia • Para modificar directamente los datos que se reciben como parámetros, se usa la llamada POR REFERENCIA • El prototipo sería: void main() • void Intercambiar(int *a, int *b); { int x, y; printf(“Ingrese x:”); scanf(“%d”,&x); Al retornar la función si habrá printf(“Ingrese y:”); efectuado el cambio sobre las scanf(“%d”,&y); variables que se pasaron por printf(“x = %d, y= %d”, x, y); Intercambiar(&x, &y); referencia. printf(“x = %d, y= %d”, x, y); main } void Intercambiar(int *a, int *b) x y { int tmp; 4 3 3 4 Intercambiar tmp = a; a = b; a b tmp b = tmp; } 3 4 3 4 3
  • 19.
    Procedimientos • Existen funcionesque no retornan ningún valor: printf (“Hola Mundon”); • Una función que no retorna nada, y que se llama únicamente para que ejecute su código, se llama procedimiento • C trata de igual forma a las funciones y a los procedimientos • Un procedimiento en C, es una función sin valor de retorno void DarInstrucciones(void); • Los procedimientos pueden recibir tantos argumentos necesite
  • 20.
    Implementación de un Procedimiento void ImprimirMenu (void) { printf (“1. Tabla de Sumarn”); printf (“2. Tabla de Restarn”); printf (“3. Tabla de Multiplicarn”); printf (“4. Tabla de Dividirn”); printf (“5. Salirn”); }
  • 21.
    Generación de Números Aleatorios • Para introducir el factor “suerte” en los programas en C, tenemos la función rand() que genera números aleatorios. • Los números obtenidos son enteros entre 0 y RAND_MAX (32767). • Si ejecutamos varias veces el programa, la secuencia de números aleatorios se repite. Si un programa genera 3 números aleatorios entre 0 y 10. Lo ejecutamos una vez y obtenemos por ejemplo 4, 7 y 9. Lo ejecutamos por segunda vez y vuelve a salir 4, 7 y 9. Y siempre se repetirá este resultado. • Esto sucede porque rand() "calcula" los números aleatorios partiendo de un número inicial llamado semilla. • Si volvemos a ejecutar el programa desde el principio, el número inicial (la semilla) que usa rand() es el mismo, por lo tanto, la secuencia de números aleatorios se repetirá.
  • 22.
    Función rand() • aleatorio = rand(); // Aleatorio entre 0 y 32767 • La operación módulo (%) nos da el residuo de dividir rand() entre cualquier número. Este residuo puede ir de 0 a N-1. aleatorio = rand () % N; // Aleatorio entre 0 y N-1 aleatorio = rand () % 6; // Aleatorio entre 0 y 5 aleatorio = rand () % N+1; // Aleatorio entre 1 y N aleatorio = rand () % 7; // Aleatorio entre 1 y 6 aleatorio = N + rand() % (M-N+1) ; // Aleatorio entre N y M aleatorio = 20 + rand () % 11; // Aleatorio entre 20 y 30
  • 23.
    Función srand() • Paraevitar el problema de obtener siempre los mismos números aleatorios, tenemos la función srand() • A esta función se le pasa un parámetro que se utilizará como número semilla para el cálculo. No se debe poner un número fijo como semilla, porque entonces se repite el problema. • Podemos utiliza la fecha/hora del sistema, pues este valor cambia si ejecutamos el programa en distintos instantes de tiempo. • En C se obtiene con la función time() srand (time(NULL)); • A la función srand() sólo debemos llamarla una vez en nuestro programa, antes de utilizar la función rand() • Para utilizar las funciones se debe declarar las librerías: #include <stdlib.h> #include <time.h>