WEBVTT

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.

