1 00:00:11,017 --> 00:00:17,017 [Orador 1]: Hemos visto el prototipo de una función y ahora vamos a ver el siguiente aspecto o 2 00:00:17,017 --> 00:00:23,911 área de trabajo de una función que es la invocación o el uso de esa función. 3 00:00:24,111 --> 00:00:27,900 Para ello vamos a escribir un programa main que lea por teclado la edad de una 4 00:00:27,900 --> 00:00:31,740 persona y muestre por pantalla los años que esa persona se ha pasado durmiendo. 5 00:00:31,940 --> 00:00:37,243 Los cálculos los va a realizar una función que se llama cuánto has dormido. 6 00:00:37,443 --> 00:00:43,443 Esta función recibirá de quien la use la edad de una persona y devolverá a quien la 7 00:00:43,443 --> 00:00:48,054 use los años que esa persona ha pasado durmiendo. 8 00:00:48,254 --> 00:00:53,589 Este era el prototipo al que habíamos llegado para esta función cuando 9 00:00:53,589 --> 00:00:59,589 utilizamos el mecanismo de valor devuelto por la función para el parámetro de salida 10 00:00:59,589 --> 00:01:05,458 de la misma que es exactamente los años que la persona se ha pasado durmiendo. 11 00:01:05,658 --> 00:01:09,045 ¿Cómo sería la utilización o la invocación de esta función? 12 00:01:09,245 --> 00:01:13,675 Bueno, pues aquí tenemos el main que usa esta función. 13 00:01:13,875 --> 00:01:19,402 El main lo único que necesita conocer para poder usar una función es el prototipo, no 14 00:01:19,402 --> 00:01:22,553 necesita conocer cómo está implementada la función. 15 00:01:22,753 --> 00:01:26,180 Hasta ahora solo necesitamos saber qué hace la función, no cómo. 16 00:01:26,380 --> 00:01:31,615 Si te das cuenta tenemos aquí dos variables en el programa principal vida 17 00:01:31,615 --> 00:01:33,131 total y durmiendo. 18 00:01:33,331 --> 00:01:39,331 Vida total va a almacenar la edad de la persona que se le dé teclado con un 19 00:01:39,331 --> 00:01:45,331 escanece y durmiendo va a almacenar los años que ha dormido esa persona y que le 20 00:01:45,331 --> 00:01:50,615 daremos valor exactamente aquí invocando a la función. 21 00:01:51,158 --> 00:01:54,446 Como la función espera un valor doble 22 00:01:54,646 --> 00:02:00,030 le pasamos como valor doble vida total que tendrá la persona y como la función 23 00:02:00,030 --> 00:02:05,215 devuelve otro valor doble pues el resultado de la función se lo asignamos a 24 00:02:05,215 --> 00:02:06,467 durmiendo. 25 00:02:06,667 --> 00:02:11,552 Entonces fíjate es importante que te des cuenta de cómo se está invocando la 26 00:02:11,552 --> 00:02:16,503 función y cómo el resultado de eso es dejar en la variable durmiendo el valor 27 00:02:16,503 --> 00:02:20,282 que nos interesa y que luego vamos a pasar aquí a imprimir. 28 00:02:20,482 --> 00:02:22,885 Este era el siguiente prototipo. 29 00:02:23,085 --> 00:02:29,085 La función es la misma, realiza el mismo cometido, hace lo mismo, pero el parámetro 30 00:02:29,085 --> 00:02:35,026 de salida, los años que la persona se pasa durmiendo en este caso, se utiliza el 31 00:02:35,026 --> 00:02:37,901 mecanismo de paso por referencia. 32 00:02:38,101 --> 00:02:44,101 Te recuerdo que el paso por referencia consiste en cuando se invoca la función 33 00:02:44,101 --> 00:02:49,239 pasarle una dirección de veboría de una variable. 34 00:02:49,439 --> 00:02:56,721 y en el prototipo de la función tener ahí un parámetro que es un puntero. 35 00:02:56,921 --> 00:03:01,153 Acuérdate del asterisco que significa puntero. 36 00:03:01,353 --> 00:03:03,119 ¿Cómo se utilizaría? 37 00:03:03,319 --> 00:03:05,709 Aquí lo tenemos, fíjate. 38 00:03:05,909 --> 00:03:11,642 en que todo lo relativo al main permanece exactamente igual, las mismas variables, 39 00:03:11,642 --> 00:03:16,576 le damos valor aquí a vida total, imprimimos aquí durmiendo y la única 40 00:03:16,576 --> 00:03:21,443 diferencia es que en este caso la invocación, fíjate que es así, para 41 00:03:21,443 --> 00:03:27,177 coincidir con el prototipo de la función, no hay ninguna asignación de lo que debe 42 00:03:27,177 --> 00:03:30,245 ser la función porque la función es void, 43 00:03:30,445 --> 00:03:35,627 Y ahora tiene dos parámetros, como antes, un valor doble que representa la edad de 44 00:03:35,627 --> 00:03:39,019 la persona, pues aquí se lo estoy pasando, vida total. 45 00:03:39,219 --> 00:03:44,872 Y después está este parámetro por referencia, que es un puntero, que lo que 46 00:03:44,872 --> 00:03:48,213 espera recibir es una dirección de memoria. 47 00:03:48,413 --> 00:03:50,337 ¿Qué le tiene que pasar el main? 48 00:03:50,537 --> 00:03:55,507 La dirección de memoria de la variable donde quiere dejar ese valor, ¿vale?, 49 00:03:55,707 --> 00:04:01,707 En programación 1 las únicas veces en las que te vas a encontrar el ampersand, este 50 00:04:01,707 --> 00:04:07,626 operador unario que se aplica a una variable, como puedes ver aquí, va a ser 51 00:04:07,626 --> 00:04:10,745 en la invocación a las funciones. 52 00:04:10,945 --> 00:04:17,900 Cuando se les pase a esas funciones se les pasen parámetros por referencia. 53 00:04:18,100 --> 00:04:23,520 Muy bien, hemos visto el prototipo, hemos visto cómo se usa, cómo se invoca la 54 00:04:23,520 --> 00:04:29,341 función y ahora vamos a entrar ya no sólo en qué hace la función, que ya lo sabemos, 55 00:04:29,341 --> 00:04:34,695 sino en cómo lo hace, a detallar cómo la función realiza sus operaciones, sus 56 00:04:34,695 --> 00:04:39,383 cálculos para obtener los años que una persona ha pasado durmiendo.