a

2999a commited on
Commit
a41ad04
·
verified ·
1 Parent(s): e61061a

Upload via hfc (batch)

Browse files

Uploaded using hfc tool

This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +13 -0
  2. subir/Curso de Control de Flujo en C/01-Bienvenida/01-Control de Flujo y Arrays en C IF WHILE FOR y más.mp4 +3 -0
  3. subir/Curso de Control de Flujo en C/01-Bienvenida/01-Control de Flujo y Arrays en C IF WHILE FOR y más.vtt +200 -0
  4. subir/Curso de Control de Flujo en C/01-Bienvenida/01-Lecturas recomendadas.txt +1 -0
  5. subir/Curso de Control de Flujo en C/01-Bienvenida/01-Resumen.html +0 -0
  6. subir/Curso de Control de Flujo en C/02-Toma de decisiones/01-Resumen.html +0 -0
  7. subir/Curso de Control de Flujo en C/02-Toma de decisiones/01-Uso del Condicional IF en Lenguaje C para Decisiones Lógicas.mp4 +3 -0
  8. subir/Curso de Control de Flujo en C/02-Toma de decisiones/01-Uso del Condicional IF en Lenguaje C para Decisiones Lógicas.vtt +401 -0
  9. subir/Curso de Control de Flujo en C/02-Toma de decisiones/01-if_c58ef3ef-a775-44e3-a585-fbd6c1932976.c +9 -0
  10. subir/Curso de Control de Flujo en C/02-Toma de decisiones/02-Lecturas recomendadas.txt +1 -0
  11. subir/Curso de Control de Flujo en C/02-Toma de decisiones/02-Manejo de Condicionales IfElse en Lenguaje C.mp4 +3 -0
  12. subir/Curso de Control de Flujo en C/02-Toma de decisiones/02-Manejo de Condicionales IfElse en Lenguaje C.vtt +753 -0
  13. subir/Curso de Control de Flujo en C/02-Toma de decisiones/02-Resumen.html +0 -0
  14. subir/Curso de Control de Flujo en C/02-Toma de decisiones/02-demoif_72993f29-e31b-4df7-8b00-add49844084a.c +17 -0
  15. subir/Curso de Control de Flujo en C/02-Toma de decisiones/03-If anidados en C Creación de menús interactivos.mp4 +3 -0
  16. subir/Curso de Control de Flujo en C/02-Toma de decisiones/03-If anidados en C Creación de menús interactivos.vtt +713 -0
  17. subir/Curso de Control de Flujo en C/02-Toma de decisiones/03-Resumen.html +0 -0
  18. subir/Curso de Control de Flujo en C/02-Toma de decisiones/03-nestedif_e6d6f354-6111-4e0b-9802-2aa3a6d9a99e.c +38 -0
  19. subir/Curso de Control de Flujo en C/02-Toma de decisiones/04-Estructura y uso del switch en programación en C.mp4 +3 -0
  20. subir/Curso de Control de Flujo en C/02-Toma de decisiones/04-Estructura y uso del switch en programación en C.vtt +866 -0
  21. subir/Curso de Control de Flujo en C/02-Toma de decisiones/04-Resumen.html +0 -0
  22. subir/Curso de Control de Flujo en C/02-Toma de decisiones/04-switch_26ee0200-c773-4d19-a0d9-ba7fc5b5f686.c +40 -0
  23. subir/Curso de Control de Flujo en C/03-Control de Bucles en C/01-Bucle While en C Implementación y Ejemplos Prácticos.mp4 +3 -0
  24. subir/Curso de Control de Flujo en C/03-Control de Bucles en C/01-Bucle While en C Implementación y Ejemplos Prácticos.vtt +500 -0
  25. subir/Curso de Control de Flujo en C/03-Control de Bucles en C/01-Resumen.html +0 -0
  26. subir/Curso de Control de Flujo en C/03-Control de Bucles en C/01-while_189ccca7-d3a5-4d0c-8408-4fc807afdccd.c +14 -0
  27. subir/Curso de Control de Flujo en C/03-Control de Bucles en C/02-Ciclos WHILE y DOWHILE en Programación.mp4 +3 -0
  28. subir/Curso de Control de Flujo en C/03-Control de Bucles en C/02-Ciclos WHILE y DOWHILE en Programación.vtt +490 -0
  29. subir/Curso de Control de Flujo en C/03-Control de Bucles en C/02-Resumen.html +0 -0
  30. subir/Curso de Control de Flujo en C/03-Control de Bucles en C/02-dowhile_093e5362-d724-4dea-b1c3-7269ab208dd6.c +4 -0
  31. subir/Curso de Control de Flujo en C/03-Control de Bucles en C/03-Lecturas recomendadas.txt +3 -0
  32. subir/Curso de Control de Flujo en C/03-Control de Bucles en C/03-Resumen.html +0 -0
  33. subir/Curso de Control de Flujo en C/03-Control de Bucles en C/03-Uso del Ciclo FOR en Programación en C.mp4 +3 -0
  34. subir/Curso de Control de Flujo en C/03-Control de Bucles en C/03-Uso del Ciclo FOR en Programación en C.vtt +416 -0
  35. subir/Curso de Control de Flujo en C/03-Control de Bucles en C/03-for_53ab0088-8c9a-4daf-b43d-4b6b92f44274.c +12 -0
  36. subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/01-Resumen.html +0 -0
  37. subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/01-Uso de la Instrucción Break en C.mp4 +3 -0
  38. subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/02-Resumen.html +0 -0
  39. subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/02-Uso del Continue en Bucles de Programación.mp4 +3 -0
  40. subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/02-Uso del Continue en Bucles de Programación.vtt +380 -0
  41. subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/03-Uso seguro de GOTO en manejo de errores en C.mp4 +3 -0
  42. subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/03-Uso seguro de GOTO en manejo de errores en C.vtt +371 -0
  43. subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/03-goto_f20fa5d7-3cec-42f3-ba42-44d528ccb729.c +15 -0
  44. subir/Curso de Control de Flujo en C/presentation.mhtml +0 -0
  45. subir/fixed/Curso de Fundamentos de Ingeniería de Software/05-Introducción a Blockchain e Inteligencia Artificial/02-Lecturas recomendadas.txt +2 -0
  46. subir/fixed/Curso de Fundamentos de Ingeniería de Software/05-Introducción a Blockchain e Inteligencia Artificial/02-Qué es una red neuronal.mp4 +3 -0
  47. subir/fixed/Curso de Fundamentos de Ingeniería de Software/05-Introducción a Blockchain e Inteligencia Artificial/02-Qué es una red neuronal.vtt +763 -0
  48. subir/fixed/Curso de Fundamentos de Ingeniería de Software/05-Introducción a Blockchain e Inteligencia Artificial/02-Resumen.html +0 -0
  49. subir/fixed/Curso de Fundamentos de Ingeniería de Software/05-Introducción a Blockchain e Inteligencia Artificial/03-Cómo funcionan los LLMs.mp4 +3 -0
  50. subir/fixed/Curso de Fundamentos de Ingeniería de Software/05-Introducción a Blockchain e Inteligencia Artificial/03-Cómo funcionan los LLMs.vtt +928 -0
.gitattributes CHANGED
@@ -105,3 +105,16 @@ subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Inge
105
  subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/04-Archivos[[:space:]]y[[:space:]]estructuras[[:space:]]de[[:space:]]datos/03-Videos[[:space:]]contenedores[[:space:]]codecs[[:space:]]y[[:space:]]protocolos.mp4 filter=lfs diff=lfs merge=lfs -text
106
  subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/04-Archivos[[:space:]]y[[:space:]]estructuras[[:space:]]de[[:space:]]datos/04-Cómo[[:space:]]Funciona[[:space:]]un[[:space:]]zip.mp4 filter=lfs diff=lfs merge=lfs -text
107
  subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/05-Introducción[[:space:]]a[[:space:]]Blockchain[[:space:]]e[[:space:]]Inteligencia[[:space:]]Artificial/01-Arquitectura[[:space:]]y[[:space:]]funcionamiento[[:space:]]interno[[:space:]]de[[:space:]]Blockchain.mp4 filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
  subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/04-Archivos[[:space:]]y[[:space:]]estructuras[[:space:]]de[[:space:]]datos/03-Videos[[:space:]]contenedores[[:space:]]codecs[[:space:]]y[[:space:]]protocolos.mp4 filter=lfs diff=lfs merge=lfs -text
106
  subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/04-Archivos[[:space:]]y[[:space:]]estructuras[[:space:]]de[[:space:]]datos/04-Cómo[[:space:]]Funciona[[:space:]]un[[:space:]]zip.mp4 filter=lfs diff=lfs merge=lfs -text
107
  subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/05-Introducción[[:space:]]a[[:space:]]Blockchain[[:space:]]e[[:space:]]Inteligencia[[:space:]]Artificial/01-Arquitectura[[:space:]]y[[:space:]]funcionamiento[[:space:]]interno[[:space:]]de[[:space:]]Blockchain.mp4 filter=lfs diff=lfs merge=lfs -text
108
+ subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/05-Introducción[[:space:]]a[[:space:]]Blockchain[[:space:]]e[[:space:]]Inteligencia[[:space:]]Artificial/02-Qué[[:space:]]es[[:space:]]una[[:space:]]red[[:space:]]neuronal.mp4 filter=lfs diff=lfs merge=lfs -text
109
+ subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/05-Introducción[[:space:]]a[[:space:]]Blockchain[[:space:]]e[[:space:]]Inteligencia[[:space:]]Artificial/03-Cómo[[:space:]]funcionan[[:space:]]los[[:space:]]LLMs.mp4 filter=lfs diff=lfs merge=lfs -text
110
+ subir/Curso[[:space:]]de[[:space:]]Control[[:space:]]de[[:space:]]Flujo[[:space:]]en[[:space:]]C/01-Bienvenida/01-Control[[:space:]]de[[:space:]]Flujo[[:space:]]y[[:space:]]Arrays[[:space:]]en[[:space:]]C[[:space:]]IF[[:space:]]WHILE[[:space:]]FOR[[:space:]]y[[:space:]]más.mp4 filter=lfs diff=lfs merge=lfs -text
111
+ subir/Curso[[:space:]]de[[:space:]]Control[[:space:]]de[[:space:]]Flujo[[:space:]]en[[:space:]]C/02-Toma[[:space:]]de[[:space:]]decisiones/01-Uso[[:space:]]del[[:space:]]Condicional[[:space:]]IF[[:space:]]en[[:space:]]Lenguaje[[:space:]]C[[:space:]]para[[:space:]]Decisiones[[:space:]]Lógicas.mp4 filter=lfs diff=lfs merge=lfs -text
112
+ subir/Curso[[:space:]]de[[:space:]]Control[[:space:]]de[[:space:]]Flujo[[:space:]]en[[:space:]]C/02-Toma[[:space:]]de[[:space:]]decisiones/02-Manejo[[:space:]]de[[:space:]]Condicionales[[:space:]]IfElse[[:space:]]en[[:space:]]Lenguaje[[:space:]]C.mp4 filter=lfs diff=lfs merge=lfs -text
113
+ subir/Curso[[:space:]]de[[:space:]]Control[[:space:]]de[[:space:]]Flujo[[:space:]]en[[:space:]]C/02-Toma[[:space:]]de[[:space:]]decisiones/03-If[[:space:]]anidados[[:space:]]en[[:space:]]C[[:space:]]Creación[[:space:]]de[[:space:]]menús[[:space:]]interactivos.mp4 filter=lfs diff=lfs merge=lfs -text
114
+ subir/Curso[[:space:]]de[[:space:]]Control[[:space:]]de[[:space:]]Flujo[[:space:]]en[[:space:]]C/02-Toma[[:space:]]de[[:space:]]decisiones/04-Estructura[[:space:]]y[[:space:]]uso[[:space:]]del[[:space:]]switch[[:space:]]en[[:space:]]programación[[:space:]]en[[:space:]]C.mp4 filter=lfs diff=lfs merge=lfs -text
115
+ subir/Curso[[:space:]]de[[:space:]]Control[[:space:]]de[[:space:]]Flujo[[:space:]]en[[:space:]]C/03-Control[[:space:]]de[[:space:]]Bucles[[:space:]]en[[:space:]]C/01-Bucle[[:space:]]While[[:space:]]en[[:space:]]C[[:space:]]Implementación[[:space:]]y[[:space:]]Ejemplos[[:space:]]Prácticos.mp4 filter=lfs diff=lfs merge=lfs -text
116
+ subir/Curso[[:space:]]de[[:space:]]Control[[:space:]]de[[:space:]]Flujo[[:space:]]en[[:space:]]C/03-Control[[:space:]]de[[:space:]]Bucles[[:space:]]en[[:space:]]C/02-Ciclos[[:space:]]WHILE[[:space:]]y[[:space:]]DOWHILE[[:space:]]en[[:space:]]Programación.mp4 filter=lfs diff=lfs merge=lfs -text
117
+ subir/Curso[[:space:]]de[[:space:]]Control[[:space:]]de[[:space:]]Flujo[[:space:]]en[[:space:]]C/03-Control[[:space:]]de[[:space:]]Bucles[[:space:]]en[[:space:]]C/03-Uso[[:space:]]del[[:space:]]Ciclo[[:space:]]FOR[[:space:]]en[[:space:]]Programación[[:space:]]en[[:space:]]C.mp4 filter=lfs diff=lfs merge=lfs -text
118
+ subir/Curso[[:space:]]de[[:space:]]Control[[:space:]]de[[:space:]]Flujo[[:space:]]en[[:space:]]C/04-Uso[[:space:]]de[[:space:]]las[[:space:]]instrucciones[[:space:]]break[[:space:]]y[[:space:]]continue/01-Uso[[:space:]]de[[:space:]]la[[:space:]]Instrucción[[:space:]]Break[[:space:]]en[[:space:]]C.mp4 filter=lfs diff=lfs merge=lfs -text
119
+ subir/Curso[[:space:]]de[[:space:]]Control[[:space:]]de[[:space:]]Flujo[[:space:]]en[[:space:]]C/04-Uso[[:space:]]de[[:space:]]las[[:space:]]instrucciones[[:space:]]break[[:space:]]y[[:space:]]continue/02-Uso[[:space:]]del[[:space:]]Continue[[:space:]]en[[:space:]]Bucles[[:space:]]de[[:space:]]Programación.mp4 filter=lfs diff=lfs merge=lfs -text
120
+ subir/Curso[[:space:]]de[[:space:]]Control[[:space:]]de[[:space:]]Flujo[[:space:]]en[[:space:]]C/04-Uso[[:space:]]de[[:space:]]las[[:space:]]instrucciones[[:space:]]break[[:space:]]y[[:space:]]continue/03-Uso[[:space:]]seguro[[:space:]]de[[:space:]]GOTO[[:space:]]en[[:space:]]manejo[[:space:]]de[[:space:]]errores[[:space:]]en[[:space:]]C.mp4 filter=lfs diff=lfs merge=lfs -text
subir/Curso de Control de Flujo en C/01-Bienvenida/01-Control de Flujo y Arrays en C IF WHILE FOR y más.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d66aa5b8a2552176103ed5d92ef993f31160595373ad88b46ea4472087f16d66
3
+ size 26753376
subir/Curso de Control de Flujo en C/01-Bienvenida/01-Control de Flujo y Arrays en C IF WHILE FOR y más.vtt ADDED
@@ -0,0 +1,200 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ WEBVTT
2
+
3
+ 00:03.320 --> 00:07.000
4
+ ¡Hey! Bienvenida o bienvenido
5
+ al curso de programación en C.
6
+
7
+ 00:07.000 --> 00:09.200
8
+ Si estás aquí es porque ya viste
9
+ el curso anterior
10
+
11
+ 00:09.200 --> 00:12.000
12
+ en donde te enseñaba las bases,
13
+ tipos de datos,
14
+
15
+ 00:12.000 --> 00:14.000
16
+ cómo ejecutar un programa en C,
17
+
18
+ 00:14.000 --> 00:17.700
19
+ cómo instalarlo en tu computadora Windows
20
+ o de sistema UNIX.
21
+
22
+ 00:17.700 --> 00:20.300
23
+ También te enseñé cómo podríamos
24
+
25
+ 00:20.300 --> 00:22.400
26
+ nosotros trabajar la estructura general
27
+ de un programa
28
+
29
+ 00:22.400 --> 00:25.800
30
+ y cómo utilizar las funciones más
31
+ importantes de C,
32
+
33
+ 00:25.800 --> 00:28.800
34
+ una de las funciones
35
+ más importantes como es Print.
36
+
37
+ 00:28.800 --> 00:30.800
38
+ Luego, en este curso ya vamos a entrar
39
+
40
+ 00:30.800 --> 00:33.000
41
+ en la carne del lenguaje de programación.
42
+
43
+ 00:33.000 --> 00:35.600
44
+ Ya estás preparada o preparado
45
+ para entender
46
+
47
+ 00:35.600 --> 00:38.000
48
+ cómo se maneja el flujo en un programa,
49
+
50
+ 00:38.000 --> 00:40.700
51
+ cómo se maneja
52
+ la toma de decisiones en un programa,
53
+
54
+ 00:40.700 --> 00:42.500
55
+ por ejemplo, con la instrucción IF,
56
+
57
+ 00:42.500 --> 00:46.600
58
+ cómo se manejan los bucles o loops en C
59
+
60
+ 00:46.600 --> 00:48.800
61
+ con la instrucción WHILE,
62
+ con la instrucción DO WHILE,
63
+
64
+ 00:48.800 --> 00:50.300
65
+ con las instrucciones FOR.
66
+
67
+ 00:50.300 --> 00:54.000
68
+ Vamos a aprender también a detalle
69
+ cómo utilizar el BREAK
70
+
71
+ 00:54.000 --> 00:57.400
72
+ para que sepas en dónde entra
73
+ este importantísimo
74
+
75
+ 00:57.400 --> 01:00.500
76
+ comando de control de flujo
77
+ en tu programa.
78
+
79
+ 01:00.500 --> 01:03.400
80
+ También vamos a ver
81
+ una de las estructuras de datos
82
+
83
+ 01:03.400 --> 01:05.900
84
+ más utilizadas en C, que es el Array.
85
+
86
+ 01:05.900 --> 01:07.900
87
+ Vamos a aprender
88
+ a almacenar datos en Array,
89
+
90
+ 01:07.900 --> 01:09.900
91
+ leer datos en un Array y más.
92
+
93
+ 01:09.900 --> 01:11.900
94
+ Y luego, bueno, ya sabes,
95
+
96
+ 01:11.900 --> 01:14.600
97
+ estamos dividiendo todos los cursos
98
+ de lenguajes de programación
99
+
100
+ 01:14.600 --> 01:16.500
101
+ porque un lenguaje de programación
102
+
103
+ 01:16.500 --> 01:18.700
104
+ no cabe en un solo curso
105
+ y queremos que tengas
106
+
107
+ 01:18.700 --> 01:22.200
108
+ la facilidad de irlos consultando
109
+ poco a poco,
110
+
111
+ 01:22.200 --> 01:25.400
112
+ paso a paso
113
+ y aprendiéndolos curso a curso.
114
+
115
+ 01:25.400 --> 01:27.900
116
+ Por eso tendremos más de dos cursos de C.
117
+
118
+ 01:27.900 --> 01:30.200
119
+ La idea es sacar cuatro inicialmente,
120
+
121
+ 01:30.200 --> 01:32.400
122
+ en donde el siguiente serían
123
+ funcionalidades
124
+
125
+ 01:32.400 --> 01:33.800
126
+ más avanzadas del lenguaje
127
+
128
+ 01:33.800 --> 01:37.300
129
+ y luego llegaríamos a la parte de manejo
130
+ de memoria,
131
+
132
+ 01:37.300 --> 01:39.300
133
+ todo lo que tiene que ver con punteros
134
+
135
+ 01:39.300 --> 01:41.700
136
+ o manejo dinámico de la memoria
137
+
138
+ 01:41.700 --> 01:44.000
139
+ en programas en el lenguaje C.
140
+
141
+ 01:45.000 --> 01:47.300
142
+ Con esto dicho, quiero aprovechar
143
+ a presentarme.
144
+
145
+ 01:47.300 --> 01:50.300
146
+ Yo soy Ricardo Celis,
147
+ soy profesor en Platzi,
148
+
149
+ 01:50.300 --> 01:53.500
150
+ soy también miembro
151
+ de todo lo que tiene que ver
152
+
153
+ 01:53.500 --> 01:56.000
154
+ con la ejecución y planeación de cursos.
155
+
156
+ 01:56.000 --> 01:58.400
157
+ Estoy dirigiendo la ejecución
158
+ y planeación de cursos
159
+
160
+ 01:58.400 --> 01:59.900
161
+ de desarrollo de software
162
+
163
+ 01:59.900 --> 02:01.900
164
+ y todo lo que tiene que ver en esta área.
165
+
166
+ 02:01.900 --> 02:04.500
167
+ Así que, bueno, estoy muy feliz de estar
168
+ aquí contigo.
169
+
170
+ 02:04.500 --> 02:06.300
171
+ Por favor, si tienes alguna duda,
172
+
173
+ 02:06.300 --> 02:09.400
174
+ escríbeme a mi Twitter, es @celismx.
175
+
176
+ 02:09.400 --> 02:11.600
177
+ Cuéntame, profe, empecé su curso de C,
178
+
179
+ 02:11.600 --> 02:13.500
180
+ estoy emocionada, estoy emocionado.
181
+
182
+ 02:13.500 --> 02:15.200
183
+ Y ahí yo estaré muy pendiente de darte
184
+
185
+ 02:15.200 --> 02:17.200
186
+ el seguimiento que te mereces.
187
+
188
+ 02:17.200 --> 02:19.300
189
+ Todas tus dudas
190
+ me las puedes mandar por ahí.
191
+
192
+ 02:19.300 --> 02:22.100
193
+ Y sin más,
194
+ quiero darte la bienvenida
195
+
196
+ 02:22.100 --> 02:23.900
197
+ y gracias por estar aquí en este curso.
198
+
199
+ 02:23.900 --> 02:29.900
200
+ Nos vemos en la próxima clase.
subir/Curso de Control de Flujo en C/01-Bienvenida/01-Lecturas recomendadas.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ https://platzi.com/clases/lenguaje-c/
subir/Curso de Control de Flujo en C/01-Bienvenida/01-Resumen.html ADDED
The diff for this file is too large to render. See raw diff
 
subir/Curso de Control de Flujo en C/02-Toma de decisiones/01-Resumen.html ADDED
The diff for this file is too large to render. See raw diff
 
subir/Curso de Control de Flujo en C/02-Toma de decisiones/01-Uso del Condicional IF en Lenguaje C para Decisiones Lógicas.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b8cde56be962660871a214868be340af537938873157058e62bc0d961c2e4ff0
3
+ size 63090949
subir/Curso de Control de Flujo en C/02-Toma de decisiones/01-Uso del Condicional IF en Lenguaje C para Decisiones Lógicas.vtt ADDED
@@ -0,0 +1,401 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ WEBVTT
2
+
3
+ 00:03.193 --> 00:06.899
4
+ En esta clase te voy a enseñar
5
+ cómo utilizar el condicional IF
6
+
7
+ 00:07.025 --> 00:09.320
8
+ para tomar decisiones en tu código.
9
+
10
+ 00:09.836 --> 00:12.642
11
+ Nos vamos, lo primero, igual,
12
+ antes de entrar directamente en IF,
13
+
14
+ 00:12.768 --> 00:15.129
15
+ es que quiero dejarte claro qué es
16
+
17
+ 00:15.254 --> 00:18.320
18
+ un statement en C
19
+ y qué es un bloque de código.
20
+
21
+ 00:18.625 --> 00:23.640
22
+ Un statement es, por ejemplo, cuando
23
+ nosotros declaramos una simple variable,
24
+
25
+ 00:23.640 --> 00:26.167
26
+ o cuando nosotros imprimimos algo.
27
+
28
+ 00:26.413 --> 00:29.390
29
+ Digamos printf, hello world, esta línea,
30
+
31
+ 00:30.690 --> 00:34.501
32
+ a esta sola línea de código
33
+ que se encarga de imprimir algo,
34
+
35
+ 00:34.627 --> 00:39.560
36
+ se le conoce como statement
37
+ o una línea de código.
38
+
39
+ 00:39.560 --> 00:42.007
40
+ Veámoslo como la unidad de código en C.
41
+
42
+ 00:42.133 --> 00:45.000
43
+ Una línea que cierra con punto y coma.
44
+
45
+ 00:45.303 --> 00:47.160
46
+ Por eso es tan importante el punto y coma,
47
+
48
+ 00:47.160 --> 00:53.665
49
+ es la instrucción que es el caracter
50
+ que cierra o termina statements.
51
+
52
+ 00:53.885 --> 00:56.960
53
+ Mira, aquí en nuestros programas nosotros
54
+ tenemos muchísimos statements.
55
+
56
+ 00:56.960 --> 00:59.591
57
+ Por ejemplo, aquí hay uno, aquí hay otro.
58
+
59
+ 00:59.717 --> 01:04.200
60
+ Vamos a ponerlos acá para el ejemplo
61
+ de lo que es un statement.
62
+
63
+ 01:04.773 --> 01:06.760
64
+ Todo esto es un statement.
65
+
66
+ 01:07.424 --> 01:11.320
67
+ Pero en C no solo vamos a tener líneas
68
+ de código individuales,
69
+
70
+ 01:11.320 --> 01:16.000
71
+ también podemos tener bloques
72
+ o grupos de statements y o declaraciones.
73
+
74
+ 01:16.379 --> 01:21.440
75
+ Estos grupos siempre van a estar definidos
76
+ por estas llaves y serían así.
77
+
78
+ 01:23.055 --> 01:29.440
79
+ Podemos copiar este código que tenemos
80
+ arriba y pegarlo aquí adentro.
81
+
82
+ 01:30.507 --> 01:32.421
83
+ Muy bien, todo bonito.
84
+
85
+ 01:32.864 --> 01:37.043
86
+ Vamos a identar, ya sabes, contabulador
87
+ identas, para que se vea bien.
88
+
89
+ 01:37.169 --> 01:39.918
90
+ Y con esto lo que estamos diciendo
91
+
92
+ 01:40.043 --> 01:43.400
93
+ es que estas tres líneas de código
94
+ o estos tres statements
95
+
96
+ 01:43.400 --> 01:46.840
97
+ se juntan para formar un bloque de código.
98
+
99
+ 01:47.535 --> 01:51.139
100
+ Entonces tenemos statements,
101
+ que son las líneas de código individuales,
102
+
103
+ 01:51.265 --> 01:56.401
104
+ y bloques que van a estar contenidos
105
+ por nuestros bracers o corchetes.
106
+
107
+ 01:57.194 --> 02:02.120
108
+ Con esto ya sabes que vamos a tener
109
+ statements o vamos a tener bloques.
110
+
111
+ 02:02.508 --> 02:05.132
112
+ Los statements son
113
+ simples unidadesde código,
114
+
115
+ 02:05.258 --> 02:06.669
116
+ la unidad básica de código,
117
+
118
+ 02:06.795 --> 02:10.920
119
+ y los bloques son conjuntos de statements.
120
+
121
+ 02:10.920 --> 02:13.520
122
+ Pueden tener dos o más, idealmente.
123
+
124
+ 02:13.520 --> 02:16.567
125
+ No tiene sentido que hagas un bloque
126
+ para una sola línea de código.
127
+
128
+ 02:16.693 --> 02:19.560
129
+ Entonces vamos a tener dos
130
+ o más statements aquí dentro.
131
+
132
+ 02:19.686 --> 02:23.869
133
+ Y sintácticamente,
134
+ para nuestro compilador,
135
+
136
+ 02:23.995 --> 02:27.101
137
+ esto se tomaría como una unidad de código.
138
+
139
+ 02:27.227 --> 02:31.036
140
+ O sea, cuando entra aquí, no se va a salir
141
+
142
+ 02:31.162 --> 02:34.306
143
+ a menos que se lo pidamos explícitamente.
144
+
145
+ 02:34.432 --> 02:38.449
146
+ Pero eso lo veremos más adelante cuando
147
+ estudiemos el comando break.
148
+
149
+ 02:38.589 --> 02:43.046
150
+ Con esto dicho, vámonos a la explicación
151
+ de nuestro if.
152
+
153
+ 02:44.729 --> 02:47.007
154
+ Lo primero que quiero
155
+ que veas es que tengo aquí
156
+
157
+ 02:47.133 --> 02:49.200
158
+ una pequeña estructura
159
+ ya previamente escrita.
160
+
161
+ 02:49.200 --> 02:51.503
162
+ No te preocupes,
163
+ el código lo haremos en vivo.
164
+
165
+ 02:51.629 --> 02:54.560
166
+ Pero quiero explicarte cómo funciona
167
+ rápidamente esto.
168
+
169
+ 02:55.067 --> 02:58.023
170
+ El if funciona a través de expresiones.
171
+
172
+ 02:58.149 --> 03:02.633
173
+ Vamos a tener que, si esta expresión
174
+ es verdadera,
175
+
176
+ 03:02.759 --> 03:08.040
177
+ entonces debemos ejecutar todo el código
178
+ que tengamos en nuestro bloque.
179
+
180
+ 03:08.707 --> 03:13.207
181
+ Si, además, si no es verdadero esto,
182
+
183
+ 03:13.967 --> 03:17.006
184
+ o si esta expresión sí es verdadera,
185
+
186
+ 03:17.132 --> 03:21.196
187
+ entonces ejecutamos este código,
188
+ que serían otros statements.
189
+
190
+ 03:21.616 --> 03:25.493
191
+ Y por último, si ninguna de las opciones
192
+ es verdadera,
193
+
194
+ 03:25.759 --> 03:28.680
195
+ entonces ejecutamos esta línea de código.
196
+
197
+ 03:28.909 --> 03:32.882
198
+ Y aquí quiero dejarte la primera buena
199
+ práctica del lenguaje C.
200
+
201
+ 03:33.008 --> 03:39.640
202
+ Cuando tú tengas un solo statement,
203
+ no necesitas escribir nuestras llaves.
204
+
205
+ 03:39.922 --> 03:42.319
206
+ No necesitas escribir esas llaves.
207
+
208
+ 03:42.452 --> 03:44.925
209
+ Simple y sencillamente puedes dejarlo así.
210
+
211
+ 03:46.312 --> 03:48.978
212
+ Y con esto el compilador sabe
213
+
214
+ 03:49.103 --> 03:53.852
215
+ que la primera instrucción
216
+ después de un if
217
+
218
+ 03:53.978 --> 03:57.520
219
+ va a ser perteneciente
220
+ a ese if por default.
221
+
222
+ 03:57.661 --> 04:02.200
223
+ Eso quiere decir que para una sola línea
224
+ de código no necesitamos crear bloques.
225
+
226
+ 04:02.609 --> 04:05.680
227
+ Esto está correcto y no deberías tener
228
+ miedo al escribirlo.
229
+
230
+ 04:05.680 --> 04:06.972
231
+ Simplemente hazlo.
232
+
233
+ 04:07.098 --> 04:08.683
234
+ Yo te cuento aquí una pequeña anécdota,
235
+
236
+ 04:08.722 --> 04:11.413
237
+ que cuando yo empecé a programar
238
+ en el lenguaje C,
239
+
240
+ 04:11.539 --> 04:14.480
241
+ a mí me daba miedo
242
+ que no tuviera las llaves.
243
+
244
+ 04:14.480 --> 04:18.127
245
+ Y que entonces el compilador no lo fuera
246
+ a detectar como que pertenecía a ese if.
247
+
248
+ 04:18.253 --> 04:20.040
249
+ Y no me arriesgaba y le ponía las llaves.
250
+
251
+ 04:20.166 --> 04:22.520
252
+ Obviamente luego
253
+ uno aprende el estándar de C.
254
+
255
+ 04:22.520 --> 04:24.545
256
+ Y eso que yo hacía estaba muy mal,
257
+
258
+ 04:24.671 --> 04:27.331
259
+ porque estaba escribiendo
260
+ líneas de código innecesarias.
261
+
262
+ 04:27.457 --> 04:32.080
263
+ Ahora, esto entonces es correcto si tienes
264
+ dos o más instrucciones o statements.
265
+
266
+ 04:32.080 --> 04:35.680
267
+ Y esto es correcto para cuando tienes
268
+ una sola instrucción.
269
+
270
+ 04:36.116 --> 04:40.393
271
+ Aquí tenemos ya nuestra construcción
272
+ que sería el if, su else y un else if.
273
+
274
+ 04:40.519 --> 04:43.440
275
+ Los else if tú puedes poner tantos
276
+ como quieras.
277
+
278
+ 04:44.385 --> 04:48.046
279
+ Quiero que te quede súper claro que puedes
280
+ usar tantos else if
281
+
282
+ 04:48.172 --> 04:50.080
283
+ como lo necesites en tu código,
284
+
285
+ 04:50.206 --> 04:54.000
286
+ para cada una de las situaciones
287
+ que se van a presentar en tu programa.
288
+
289
+ 04:54.532 --> 04:57.369
290
+ Lo primero entonces sería simplemente
291
+ dejar esto claro.
292
+
293
+ 04:57.495 --> 05:01.640
294
+ Sería expression3, expression4
295
+ y expression5 o statement5.
296
+
297
+ 05:02.252 --> 05:06.343
298
+ Aquí podemos poner tantos else if
299
+ como tu situación lo requiera.
300
+
301
+ 05:06.469 --> 05:10.847
302
+ Toma en cuenta que igual el primero
303
+ en donde se cumpla la expresión
304
+
305
+ 05:10.873 --> 05:12.060
306
+ es donde va a entrar.
307
+
308
+ 05:12.086 --> 05:13.429
309
+ Y eso es bien importante.
310
+
311
+ 05:13.555 --> 05:17.130
312
+ Si tú tienes aquí una expresión
313
+ que ya se cumple en este,
314
+
315
+ 05:17.256 --> 05:20.047
316
+ tu código nunca va a llegar al statement4.
317
+
318
+ 05:20.173 --> 05:21.993
319
+ Nunca en la vida va a llegar,
320
+
321
+ 05:22.119 --> 05:23.305
322
+ porque esto se es...
323
+
324
+ 05:23.431 --> 05:26.080
325
+ Recuerda que estamos hablando
326
+ de programación estructurada
327
+
328
+ 05:26.206 --> 05:29.218
329
+ y se ejecuta
330
+ de la primera línea a la última.
331
+
332
+ 05:29.344 --> 05:32.552
333
+ Entonces, si esta expresión
334
+ fuera verdadera,
335
+
336
+ 05:32.678 --> 05:36.323
337
+ en todos los casos que son similares
338
+ a tus otros else if,
339
+
340
+ 05:36.449 --> 05:39.885
341
+ entonces nunca entraría
342
+ a estas condiciones.
343
+
344
+ 05:40.011 --> 05:43.920
345
+ Tienes que tener mucho cuidado en pensar
346
+ cómo estructuras esto.
347
+
348
+ 05:44.144 --> 05:46.800
349
+ Justo vamos a ver ese ejemplo
350
+ en la siguiente clase.
351
+
352
+ 05:47.547 --> 05:50.886
353
+ Con esto dicho, ya nada más te quiero
354
+ decir que esto else if
355
+
356
+ 05:51.012 --> 05:54.283
357
+ es una construcción que no tiene límites
358
+
359
+ 05:54.409 --> 05:56.483
360
+ en cuestión de cuántos else if
361
+ puedes tener,
362
+
363
+ 05:56.609 --> 06:01.334
364
+ y que la instrucción if básica es esta,
365
+ un if y un else.
366
+
367
+ 06:01.460 --> 06:05.445
368
+ Esta es la más así utilizada
369
+ para tomar simplemente
370
+
371
+ 06:05.571 --> 06:08.960
372
+ si esto se está cumpliendo, lo ejecutas,
373
+ y si no, el programa sigue.
374
+
375
+ 06:09.212 --> 06:11.040
376
+ O, y si no, ejecutas esto u otro.
377
+
378
+ 06:11.376 --> 06:14.122
379
+ Esa es la instrucción más básica
380
+ que existe en C.
381
+
382
+ 06:14.248 --> 06:16.881
383
+ Siempre tienes que usarla de esta manera,
384
+ if else,
385
+
386
+ 06:17.007 --> 06:20.376
387
+ y la última sería if, else if,
388
+
389
+ 06:20.502 --> 06:22.720
390
+ esa ya se conoce como una construcción.
391
+
392
+ 06:23.166 --> 06:25.359
393
+ Con esto dicho,
394
+ nos vemos en la próxima clase,
395
+
396
+ 06:25.485 --> 06:29.360
397
+ en donde haremos un ejemplo
398
+ de cómo utilizar estas sentencias.
399
+
400
+ 06:29.766 --> 06:35.360
401
+ Nos vemos allá.
subir/Curso de Control de Flujo en C/02-Toma de decisiones/01-if_c58ef3ef-a775-44e3-a585-fbd6c1932976.c ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ if (expresion){
2
+ statement1
3
+ statement1.1
4
+ statement1.2
5
+ }
6
+ else if (expresion)
7
+ statement2
8
+ else
9
+ statement5
subir/Curso de Control de Flujo en C/02-Toma de decisiones/02-Lecturas recomendadas.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ https://en.cppreference.com/w/c/language/operator_logical
subir/Curso de Control de Flujo en C/02-Toma de decisiones/02-Manejo de Condicionales IfElse en Lenguaje C.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5426504d2d0f76c85823002a6a2883c411cb5488949cf6981eb31e780e17ff26
3
+ size 119910789
subir/Curso de Control de Flujo en C/02-Toma de decisiones/02-Manejo de Condicionales IfElse en Lenguaje C.vtt ADDED
@@ -0,0 +1,753 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ WEBVTT
2
+
3
+ 00:03.226 --> 00:07.400
4
+ Bueno, vamos a nuestro editor de código
5
+ y comencemos a escribir nuestro ejemplo.
6
+
7
+ 00:07.400 --> 00:12.960
8
+ Lo primero que vamos a hacer es guardar
9
+ este archivo como demoif.c.
10
+
11
+ 00:12.960 --> 00:15.440
12
+ Ya lo tenemos todo listo.
13
+
14
+ 00:15.440 --> 00:19.720
15
+ Tú sabes, tenemos que incluir
16
+ nuestra bellísima librería de print,
17
+
18
+ 00:19.720 --> 00:21.920
19
+ que nos sirve muchísimo para los ejemplos.
20
+
21
+ 00:21.920 --> 00:23.280
22
+ Vamos a ponerle...
23
+
24
+ 00:23.280 --> 00:28.360
25
+ Vamos a ponerle standard.io,
26
+ que es la librería en donde está el print.
27
+
28
+ 00:28.360 --> 00:30.360
29
+ Vamos a poner include.
30
+
31
+ 00:30.360 --> 00:36.040
32
+ Vamos a llamar stdio.h, que es set
33
+ de nuestras librerías estándares.
34
+
35
+ 00:36.040 --> 00:37.040
36
+ Muy bien.
37
+
38
+ 00:37.040 --> 00:39.040
39
+ Ahora, ¿qué más vamos a necesitar?
40
+
41
+ 00:39.040 --> 00:42.360
42
+ Recuerda nuestro boilerplate
43
+ o nuestro demo de C.
44
+
45
+ 00:42.360 --> 00:46.360
46
+ Vamos a necesitar el main,
47
+ así que lo voy a copiar de aquí.
48
+
49
+ 00:46.360 --> 00:50.360
50
+ Y vamos a nuestro demoif.
51
+
52
+ 00:50.360 --> 00:51.360
53
+ Eso es todo.
54
+
55
+ 00:51.360 --> 00:54.298
56
+ Ahora, lo primero
57
+ que quiero hacer es enseñarte
58
+
59
+ 00:54.423 --> 00:57.360
60
+ un poquito sobre
61
+ los operadores de comparación.
62
+
63
+ 00:57.360 --> 01:01.360
64
+ Vamos a tener que if,
65
+ esta es nuestra instrucción principal,
66
+
67
+ 01:01.360 --> 01:03.360
68
+ pero luego entra la expresión.
69
+
70
+ 01:03.360 --> 01:08.360
71
+ Vamos a decirle si n de número
72
+ es mayor que 10,
73
+
74
+ 01:08.360 --> 01:10.360
75
+ entonces imprima...
76
+
77
+ 01:12.360 --> 01:15.360
78
+ Entonces imprima, vamos a decir,
79
+
80
+ 01:16.360 --> 01:17.360
81
+ el número...
82
+
83
+ 01:20.360 --> 01:21.360
84
+ el número...
85
+
86
+ 01:21.360 --> 01:26.360
87
+ el número es mayor que 10.
88
+
89
+ 01:27.360 --> 01:36.360
90
+ Pero que si n es igual a 10,
91
+
92
+ 01:36.360 --> 01:38.360
93
+ entonces imprima...
94
+
95
+ 01:40.360 --> 01:42.360
96
+ vamos a imprimir...
97
+
98
+ 01:43.360 --> 01:46.360
99
+ el número es 10.
100
+
101
+ 01:48.360 --> 01:50.360
102
+ Perfecto. Bellísimo.
103
+
104
+ 01:50.360 --> 01:53.360
105
+ Y luego vamos a tener otro else if,
106
+
107
+ 01:54.360 --> 01:57.360
108
+ que diga si el número...
109
+
110
+ 01:59.360 --> 02:02.360
111
+ es mayor que 20.
112
+
113
+ 02:05.360 --> 02:07.360
114
+ Ah, no, pero esto es
115
+ lo que voy a imprimir.
116
+
117
+ 02:07.360 --> 02:09.360
118
+ Bueno, vamos con nuestra expresión.
119
+
120
+ 02:09.360 --> 02:12.360
121
+ Igual aprovecho y le dejo su print,
122
+ todo bello.
123
+
124
+ 02:12.360 --> 02:13.360
125
+ Punto y coma.
126
+
127
+ 02:13.360 --> 02:20.360
128
+ Vamos aquí arriba y ponemos sencillamente
129
+ n mayor que 20.
130
+
131
+ 02:20.360 --> 02:21.360
132
+ Muy bien.
133
+
134
+ 02:22.360 --> 02:25.360
135
+ Y por último, else if,
136
+
137
+ 02:27.360 --> 02:34.360
138
+ vamos a ponerle aquí un n es menor que 10.
139
+
140
+ 02:34.360 --> 02:47.360
141
+ El número, vamos a imprimir,
142
+ el número es menor que 10.
143
+
144
+ 02:47.360 --> 02:48.360
145
+ Excelente.
146
+
147
+ 02:48.360 --> 02:52.360
148
+ Ahora, obviamente,
149
+ tenemos que declarar el famoso número,
150
+
151
+ 02:52.360 --> 02:55.360
152
+ y para esto vamos a crear
153
+ una variable que se llame n.
154
+
155
+ 02:55.360 --> 02:58.360
156
+ Vamos a declarar nuestra variable,
157
+
158
+ 02:59.360 --> 03:01.360
159
+ va a ser de tipo entero, n,
160
+
161
+ 03:01.360 --> 03:06.360
162
+ y vamos a inicializarla primero en, no sé,
163
+
164
+ 03:06.360 --> 03:08.360
165
+ vamos a ponerle 11.
166
+
167
+ 03:08.360 --> 03:09.360
168
+ Muy bien.
169
+
170
+ 03:09.360 --> 03:10.360
171
+ Punto y coma.
172
+
173
+ 03:11.360 --> 03:12.360
174
+ Y guardamos.
175
+
176
+ 03:13.360 --> 03:14.360
177
+ Vamos a ejecutar nuestro código.
178
+
179
+ 03:14.360 --> 03:17.360
180
+ Recuerda que para ejecutar el código...
181
+
182
+ 03:17.360 --> 03:19.360
183
+ Ah, nos falta un else.
184
+
185
+ 03:20.360 --> 03:21.360
186
+ Else, error.
187
+
188
+ 03:23.360 --> 03:25.360
189
+ No hay número.
190
+
191
+ 03:26.360 --> 03:28.360
192
+ Else, entonces vamos a print.
193
+
194
+ 03:28.360 --> 03:29.360
195
+ Error.
196
+
197
+ 03:31.360 --> 03:34.360
198
+ Error, no hay número.
199
+
200
+ 03:34.360 --> 03:35.360
201
+ Muy bien.
202
+
203
+ 03:35.360 --> 03:37.360
204
+ Ahora sí tenemos todo listísimo.
205
+
206
+ 03:38.360 --> 03:39.360
207
+ Vamos a guardar nuestro código,
208
+
209
+ 03:39.360 --> 03:40.360
210
+ control s,
211
+
212
+ 03:40.360 --> 03:43.360
213
+ y recuerda que con f6
214
+ compilamos nuestro programa.
215
+
216
+ 03:44.360 --> 03:46.360
217
+ Si tú estás trabajando en una laptop,
218
+
219
+ 03:46.360 --> 03:48.360
220
+ lo más probable es que tengas
221
+ que presionar function,
222
+
223
+ 03:48.360 --> 03:51.360
224
+ que es el botoncito fn, y luego f6.
225
+
226
+ 03:51.360 --> 03:53.360
227
+ Esperamos a que esto termine de cargar.
228
+
229
+ 03:54.360 --> 03:55.360
230
+ Se está demorando un poco.
231
+
232
+ 03:55.360 --> 03:58.360
233
+ Vamos a ver si sí se presionó f6.
234
+
235
+ 04:06.360 --> 04:07.360
236
+ Ah, ok.
237
+
238
+ 04:07.360 --> 04:08.360
239
+ Y aquí tenemos un error.
240
+
241
+ 04:08.360 --> 04:10.360
242
+ Dice que esperaba un punto y coma.
243
+
244
+ 04:10.360 --> 04:12.360
245
+ Recuerda que yo ya te enseñé
246
+ cómo debuguear.
247
+
248
+ 04:12.360 --> 04:15.360
249
+ Vámonos a la línea de código
250
+ que nos está indicando.
251
+
252
+ 04:15.360 --> 04:17.360
253
+ Y nos dice, oye, el error está en el else.
254
+
255
+ 04:17.360 --> 04:18.360
256
+ Y yo ya te di el tip.
257
+
258
+ 04:18.360 --> 04:20.360
259
+ Siempre el error está un punto y coma.
260
+
261
+ 04:20.360 --> 04:22.360
262
+ Y nos dice, oye, el error está en el else.
263
+
264
+ 04:22.360 --> 04:26.360
265
+ Y yo ya te di el tip, siempre el error
266
+ está una instrucción antes
267
+
268
+ 04:26.360 --> 04:29.360
269
+ a la que te marca el debugger,
270
+ el compilador.
271
+
272
+ 04:29.360 --> 04:31.360
273
+ Entonces vamos a poner aquí punto y coma,
274
+
275
+ 04:31.360 --> 04:36.360
276
+ guardamos,
277
+ y vamos a presionar function, f6,
278
+
279
+ 04:36.360 --> 04:37.360
280
+ si estás en un laptop,
281
+
282
+ 04:37.360 --> 04:40.360
283
+ y si no, simplemente
284
+ f6 para correr el código.
285
+
286
+ 04:41.360 --> 04:44.360
287
+ Ya, 11 dice, el número es mayor que 10.
288
+
289
+ 04:44.360 --> 04:46.360
290
+ Excelente. Esto está muy bien.
291
+
292
+ 04:46.360 --> 04:49.360
293
+ Ahora veamos qué pasa cuando
294
+ nuestro número es 10.
295
+
296
+ 04:49.360 --> 04:52.360
297
+ Mira que voy a ir checando instrucción
298
+ por instrucción,
299
+
300
+ 04:52.360 --> 04:55.360
301
+ expresión por expresión
302
+ que se esté cumpliendo.
303
+
304
+ 04:55.360 --> 04:58.360
305
+ Y todo, obviamente, porque te quiero
306
+ enseñar algo bien importante aquí.
307
+
308
+ 04:58.360 --> 05:01.360
309
+ Vamos a poner otra vez a compilar
310
+ nuestro programa
311
+
312
+ 05:01.360 --> 05:03.360
313
+ y vamos a esperar su salida.
314
+
315
+ 05:03.360 --> 05:06.360
316
+ Excelente. Nos dice, el número es 10.
317
+
318
+ 05:06.360 --> 05:08.360
319
+ Entonces todo está funcionando.
320
+
321
+ 05:08.360 --> 05:11.360
322
+ Ahora, si n es mayor que 20.
323
+
324
+ 05:11.360 --> 05:13.360
325
+ Bellísimo. Entonces pongamos 21.
326
+
327
+ 05:14.360 --> 05:17.360
328
+ 21. Como mi edad.
329
+
330
+ 05:17.360 --> 05:20.360
331
+ Control S y luego compilamos el programa.
332
+
333
+ 05:20.360 --> 05:23.360
334
+ Fnf6. Vamos a ver qué pasa.
335
+
336
+ 05:25.360 --> 05:27.360
337
+ Uy, uy, uy. Esto está grave.
338
+
339
+ 05:27.360 --> 05:29.360
340
+ Dice, el número es mayor que 10.
341
+
342
+ 05:29.360 --> 05:30.360
343
+ ¿Qué está pasando?
344
+
345
+ 05:30.360 --> 05:34.360
346
+ Ah, bueno, quería que vieras
347
+ lo que te comenté en la clase anterior.
348
+
349
+ 05:34.360 --> 05:38.360
350
+ Las instrucciones tienen
351
+ que estar bien pensadas.
352
+
353
+ 05:38.360 --> 05:41.360
354
+ Entonces nosotros podemos,
355
+ si te das cuenta aquí dice,
356
+
357
+ 05:41.360 --> 05:45.360
358
+ si n es mayor que 10, pues obvio,
359
+ el número es mayor que 10.
360
+
361
+ 05:45.360 --> 05:48.360
362
+ Pero 21 sigue siendo mayor que 10.
363
+
364
+ 05:48.360 --> 05:53.360
365
+ Así que se está cumpliendo
366
+ y no cae en n mayor que 20.
367
+
368
+ 05:53.360 --> 05:58.360
369
+ Si por alguna razón en tu código
370
+ necesitaras crear rangos numéricos
371
+
372
+ 05:58.360 --> 06:00.360
373
+ para que de 10 a 20 haga algo
374
+
375
+ 06:00.360 --> 06:02.360
376
+ y de 20 a 30 haga otra cosa,
377
+
378
+ 06:02.360 --> 06:04.360
379
+ de 30 a 40 haga otra cosa,
380
+
381
+ 06:04.360 --> 06:06.360
382
+ lo tienes que especificar.
383
+
384
+ 06:06.360 --> 06:10.360
385
+ Entonces, para esto vamos
386
+ a auxiliarnos del comando am.
387
+
388
+ 06:12.360 --> 06:14.360
389
+ Lo que sería de la siguiente forma.
390
+
391
+ 06:14.360 --> 06:21.360
392
+ amf n es menor que 20.
393
+
394
+ 06:21.360 --> 06:23.360
395
+ Por ejemplo, guardemos.
396
+
397
+ 06:23.360 --> 06:24.360
398
+ ¿Aquí qué estoy diciendo?
399
+
400
+ 06:24.360 --> 06:29.360
401
+ Si n es mayor que 10 y n es menor que 20,
402
+
403
+ 06:29.360 --> 06:32.360
404
+ ¡ah! Ya estamos haciendo un rango.
405
+
406
+ 06:32.360 --> 06:37.360
407
+ Es mayor que 10, pero menor que 20.
408
+
409
+ 06:37.360 --> 06:40.360
410
+ Vamos a guardar, vamos a compilar
411
+ y vamos a ver qué pasa.
412
+
413
+ 06:40.360 --> 06:45.360
414
+ El código es mucho de probar
415
+ y experimentar qué ocurre.
416
+
417
+ 06:45.360 --> 06:49.360
418
+ Y mira que ahora sí funcionó
419
+ de forma excelente.
420
+
421
+ 06:49.360 --> 06:51.360
422
+ El número es mayor que 20.
423
+ ¿Por qué?
424
+
425
+ 06:51.360 --> 06:56.360
426
+ Porque 21 sí es mayor que 10,
427
+ pero es menor que 20.
428
+
429
+ 06:56.360 --> 06:59.360
430
+ Y mira que tú puedes jugar
431
+ con las instrucciones.
432
+
433
+ 06:59.360 --> 07:03.360
434
+ Así como tenemos el and, que se describe
435
+ con doble signo de ampersand,
436
+
437
+ 07:03.360 --> 07:07.360
438
+ esto significa si esta instrucción
439
+ es verdadera
440
+
441
+ 07:07.360 --> 07:10.360
442
+ y esta instrucción es verdadera,
443
+
444
+ 07:10.360 --> 07:13.360
445
+ eso quiere decir que las dos instrucciones
446
+ que estamos comparando
447
+
448
+ 07:13.360 --> 07:15.360
449
+ deben de ser verdaderas.
450
+
451
+ 07:15.360 --> 07:17.360
452
+ La otra forma de hacerlo es con un or.
453
+
454
+ 07:17.360 --> 07:19.360
455
+ Pero para este caso no nos sirve un or.
456
+
457
+ 07:19.360 --> 07:20.360
458
+ ¿Por qué?
459
+
460
+ 07:20.360 --> 07:23.360
461
+ El or, cualquiera de las instrucciones
462
+ que se cumpla,
463
+
464
+ 07:23.360 --> 07:26.360
465
+ va a hacer que el código se ejecute.
466
+
467
+ 07:26.360 --> 07:29.360
468
+ Mira, esto se conoce como or.
469
+
470
+ 07:29.360 --> 07:35.360
471
+ Entonces, si n es mayor que 10
472
+ o n es mayor que 20, se va a cumplir.
473
+
474
+ 07:35.360 --> 07:39.360
475
+ Mira cuál sería la salida de nuestro
476
+ código una vez guardamos y ejecutamos.
477
+
478
+ 07:42.360 --> 07:46.360
479
+ Y nos dice el número es mayor que 10,
480
+ pero menor que 20.
481
+
482
+ 07:46.360 --> 07:49.360
483
+ Eso no era cierto, el número es 21.
484
+
485
+ 07:49.360 --> 07:50.360
486
+ ¿Por qué?
487
+
488
+ 07:50.360 --> 07:55.360
489
+ Porque o se cumple esta instrucción
490
+ o se cumple esta otra instrucción.
491
+
492
+ 07:55.360 --> 07:57.360
493
+ Cualquiera de las dos que se cumpla,
494
+
495
+ 07:57.360 --> 08:01.360
496
+ la expresión se da como verdadera
497
+ y se ejecuta este código.
498
+
499
+ 08:01.360 --> 08:04.360
500
+ Entonces, en este caso
501
+ nos sirve el ampersand.
502
+
503
+ 08:04.360 --> 08:06.360
504
+ Ya para ir cerrando esta clase,
505
+
506
+ 08:06.360 --> 08:10.360
507
+ lo que aprendimos es a utilizar
508
+ la sentencia, la instrucción if,
509
+
510
+ 08:10.360 --> 08:13.360
511
+ la instrucción else if
512
+ y la instrucción else.
513
+
514
+ 08:13.360 --> 08:18.360
515
+ Pero no se ha cumplido un caso en donde
516
+ tengamos un número todavía menor que 10.
517
+
518
+ 08:18.360 --> 08:21.360
519
+ Vamos a asegurarnos de que esto ocurra.
520
+
521
+ 08:21.360 --> 08:23.360
522
+ Vamos a poner 9.
523
+
524
+ 08:24.360 --> 08:26.360
525
+ Y vamos a compilar.
526
+
527
+ 08:27.360 --> 08:28.360
528
+ F6.
529
+
530
+ 08:30.360 --> 08:31.360
531
+ El número es menor que 10.
532
+
533
+ 08:31.360 --> 08:32.360
534
+ Todo excelente.
535
+
536
+ 08:32.360 --> 08:33.360
537
+ Esto se cumple.
538
+
539
+ 08:33.360 --> 08:34.360
540
+ ¿Cómo se debería cumplir?
541
+
542
+ 08:34.360 --> 08:36.360
543
+ Y luego, error, no hay número.
544
+
545
+ 08:36.360 --> 08:43.360
546
+ ¿Qué pasa si yo digo
547
+ que esto va a ser igual a B?
548
+
549
+ 08:46.360 --> 08:48.360
550
+ Ok, veamos qué ocurre.
551
+
552
+ 08:48.360 --> 08:49.360
553
+ Compilemos.
554
+
555
+ 08:51.360 --> 08:54.360
556
+ Y nos da B, un declared.
557
+
558
+ 08:54.360 --> 08:57.360
559
+ Claro, porque estamos diciendo
560
+ que esto va a ser un entero.
561
+
562
+ 08:57.360 --> 09:00.360
563
+ Entonces, nunca nos va a pasar este error
564
+ de que no hay número
565
+
566
+ 09:00.360 --> 09:02.360
567
+ porque el compilador nos lo prevendría.
568
+
569
+ 09:02.360 --> 09:05.360
570
+ Pero, ¿qué pasa si yo pongo
571
+ un número negativo?
572
+
573
+ 09:05.360 --> 09:08.360
574
+ Eso sí que podría ser un error
575
+ porque a lo mejor nuestro programa
576
+
577
+ 09:08.360 --> 09:12.360
578
+ no debería recibir números negativos.
579
+
580
+ 09:12.360 --> 09:16.360
581
+ Entonces, este rango ya no recibe
582
+ números negativos.
583
+
584
+ 09:16.360 --> 09:18.360
585
+ Este rango no recibe números negativos.
586
+
587
+ 09:18.360 --> 09:19.360
588
+ Este tampoco.
589
+
590
+ 09:19.360 --> 09:20.360
591
+ Este sí.
592
+
593
+ 09:20.360 --> 09:22.360
594
+ Aquí podríamos agregar otro ampersand.
595
+
596
+ 09:22.360 --> 09:31.360
597
+ Sí, n es menor que 10, pero, y además
598
+ es mayor que n, es mayor que 0.
599
+
600
+ 09:31.360 --> 09:36.360
601
+ Con esto nos aseguramos de que vamos
602
+ a recibir únicamente números positivos
603
+
604
+ 09:36.360 --> 09:40.360
605
+ y de hecho vamos a utilizar otra
606
+ instrucción que sería mayor o igual.
607
+
608
+ 09:40.360 --> 09:41.360
609
+ Muy bien.
610
+
611
+ 09:41.360 --> 09:46.360
612
+ Esto quiere decir que n va a ser mayor
613
+ que o igual que 0.
614
+
615
+ 09:46.360 --> 09:47.360
616
+ Perfecto.
617
+
618
+ 09:47.360 --> 09:54.360
619
+ El número es menor que 10,
620
+ pero, es 0 o más.
621
+
622
+ 09:56.360 --> 09:58.360
623
+ Ok, no, no tiene caso ese pero.
624
+
625
+ 09:58.360 --> 10:04.360
626
+ El número es 0 o más, 0 o 9.
627
+
628
+ 10:04.360 --> 10:09.360
629
+ El número está en el rango de 0 al 9.
630
+
631
+ 10:09.360 --> 10:10.360
632
+ Excelente.
633
+
634
+ 10:10.360 --> 10:13.360
635
+ Matemáticamente correcto amigos y amigas.
636
+
637
+ 10:13.360 --> 10:17.360
638
+ Y bueno, este último error sería
639
+ el número es positivo.
640
+
641
+ 10:17.360 --> 10:22.360
642
+ Error, no quiero números negativos.
643
+
644
+ 10:22.360 --> 10:24.360
645
+ Digámosle no a la negatividad hoy.
646
+
647
+ 10:24.360 --> 10:27.360
648
+ Vamos a, y este, eso sería todo.
649
+
650
+ 10:27.360 --> 10:31.360
651
+ Entonces ya con esto, en teoría,
652
+ ahorita lo vamos a comprobar.
653
+
654
+ 10:31.360 --> 10:35.360
655
+ Si nosotros ponemos menos 1
656
+ nos debería decir error,
657
+
658
+ 10:35.360 --> 10:37.360
659
+ no quiero números negativos.
660
+
661
+ 10:37.360 --> 10:39.360
662
+ Vamos a limpiar nuestra terminal.
663
+
664
+ 10:41.360 --> 10:42.360
665
+ Uy.
666
+
667
+ 10:43.360 --> 10:45.360
668
+ Vamos acá a nuestra terminal.
669
+
670
+ 10:45.360 --> 10:46.360
671
+ Muy bien.
672
+
673
+ 10:46.360 --> 10:48.360
674
+ Y ejecutemos nuestro código.
675
+
676
+ 10:48.360 --> 10:52.360
677
+ Voy a limpiarla con Clear para que lo veas
678
+ todo bien, todo clarito.
679
+
680
+ 10:52.360 --> 10:57.360
681
+ Asegúrate de guardar
682
+ y asegúrate de ejecutar tu código.
683
+
684
+ 10:57.360 --> 10:59.360
685
+ Vamos a esperar el resultado.
686
+
687
+ 11:00.360 --> 11:01.360
688
+ Excelente.
689
+
690
+ 11:01.360 --> 11:03.360
691
+ Error, no quiero números negativos.
692
+
693
+ 11:03.360 --> 11:06.360
694
+ Y con esto ya aprendiste
695
+ cómo puedes hacerle
696
+
697
+ 11:06.360 --> 11:10.360
698
+ para asegurarte de recibir todas
699
+ las instrucciones que necesites.
700
+
701
+ 11:11.360 --> 11:12.360
702
+ Muy bien.
703
+
704
+ 11:12.360 --> 11:15.360
705
+ Ya aprendimos a utilizar if,
706
+ else, if, else.
707
+
708
+ 11:15.360 --> 11:18.360
709
+ Es una instrucción súper útil
710
+ en tus programas en C.
711
+
712
+ 11:18.360 --> 11:21.360
713
+ Y recuerda que conforme vayamos viendo
714
+ cosas más avanzadas
715
+
716
+ 11:21.360 --> 11:25.360
717
+ en el curso, obviamente lo vamos a ir
718
+ utilizando mucho más.
719
+
720
+ 11:25.360 --> 11:30.360
721
+ Pero quería que te quedara clarísima
722
+ la estructura básica de esta sintaxis,
723
+
724
+ 11:30.360 --> 11:32.360
725
+ de cómo se escribe, de cómo se utiliza,
726
+
727
+ 11:32.360 --> 11:34.360
728
+ de cómo puedes meter los operadores.
729
+
730
+ 11:34.360 --> 11:37.360
731
+ Te voy a dejar en la sección
732
+ de enlaces un link
733
+
734
+ 11:37.360 --> 11:39.360
735
+ para que veas todos los operadores
736
+ del lenguaje C.
737
+
738
+ 11:39.360 --> 11:42.360
739
+ Esto es algo que está como una lectura
740
+ en nuestro curso pasado.
741
+
742
+ 11:42.360 --> 11:44.360
743
+ Así que no te preocupes en absoluto.
744
+
745
+ 11:44.360 --> 11:47.360
746
+ Si tienes dudas de qué otros operadores
747
+ puedes utilizar,
748
+
749
+ 11:47.360 --> 11:49.360
750
+ te voy a dejar el enlace a esa lectura.
751
+
752
+ 11:49.360 --> 11:52.360
753
+ Y sin más, nos vemos en la próxima clase.
subir/Curso de Control de Flujo en C/02-Toma de decisiones/02-Resumen.html ADDED
The diff for this file is too large to render. See raw diff
 
subir/Curso de Control de Flujo en C/02-Toma de decisiones/02-demoif_72993f29-e31b-4df7-8b00-add49844084a.c ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <stdio.h>
2
+ int n = -1;
3
+
4
+ int main()
5
+ {
6
+ if(n > 10 && n < 20)
7
+ printf("el numero es mayor que diez, pero menor que 20");
8
+ else if (n == 10)
9
+ printf("el numero es diez");
10
+ else if (n > 20)
11
+ printf("el numero es mayor que veinte");
12
+ else if(n < 10 && n >= 0)
13
+ printf("el numero esta en el rango de 0 al 9");
14
+ else
15
+ printf("error no quiero numeros negativos");
16
+ return 0;
17
+ }
subir/Curso de Control de Flujo en C/02-Toma de decisiones/03-If anidados en C Creación de menús interactivos.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6f257800fdc1a427d44f9f70ccda02e7f5de020eda76c4f51001ed291c22f493
3
+ size 126391773
subir/Curso de Control de Flujo en C/02-Toma de decisiones/03-If anidados en C Creación de menús interactivos.vtt ADDED
@@ -0,0 +1,713 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ WEBVTT
2
+
3
+ 00:03.220 --> 00:05.928
4
+ Otro concepto muy importante
5
+ en el lenguaje C
6
+
7
+ 00:06.053 --> 00:08.760
8
+ son los if-anidados,
9
+ es decir, que tú puedes
10
+
11
+ 00:08.760 --> 00:11.969
12
+ tener un decisional
13
+ adentro de otro decisional.
14
+
15
+ 00:12.094 --> 00:15.160
16
+ Eso es algo cool, la verdad es que lo vas
17
+
18
+ 00:15.160 --> 00:17.564
19
+ a utilizar en algunas ocasiones,
20
+ en otras no.
21
+
22
+ 00:17.689 --> 00:20.680
23
+ Quizás tienes un sistema
24
+ en donde debas de crear
25
+
26
+ 00:20.806 --> 00:23.178
27
+ un sistema de submenús, por ejemplo.
28
+
29
+ 00:23.303 --> 00:25.988
30
+ De hecho, eso es lo que te voy
31
+ a mostrar cómo hacer ahorita.
32
+
33
+ 00:26.114 --> 00:29.218
34
+ Así que vamos a nuestro editor de código,
35
+
36
+ 00:29.343 --> 00:33.579
37
+ control-n o command-n,
38
+ para crear una nueva tabsita,
39
+
40
+ 00:33.705 --> 00:35.793
41
+ un nuevo archivo y lo vamos a guardar
42
+
43
+ 00:35.919 --> 00:42.868
44
+ con control-s como nested-if.c.
45
+ Excelente. Ahora,
46
+
47
+ 00:42.994 --> 00:46.155
48
+ ¿qué voy a hacer aquí?
49
+ Pues lo mismo de todas las veces,
50
+
51
+ 00:46.281 --> 00:49.296
52
+ que no es tratar de dominar
53
+ el mundo ni conquistarlo,
54
+
55
+ 00:49.422 --> 00:51.396
56
+ es crear nuestro primer boilerplate,
57
+
58
+ 00:51.522 --> 00:54.023
59
+ nuestra plantilla por decirlo así.
60
+
61
+ 00:54.190 --> 00:57.131
62
+ Vamos a borrar esta variable,
63
+ no quiero traer nada
64
+
65
+ 00:57.257 --> 01:00.640
66
+ del otro lado y vamos
67
+ a crear nuestras llaves.
68
+
69
+ 01:01.055 --> 01:03.267
70
+ Muy bien, y ahora tú ya
71
+ sabes que esto que estoy
72
+
73
+ 01:03.392 --> 01:06.251
74
+ haciendo aquí es definir que todo
75
+ este código es un bloque,
76
+
77
+ 01:06.377 --> 01:09.539
78
+ es un gran bloque que pertenece
79
+
80
+ 01:09.665 --> 01:12.160
81
+ a nuestra función main.
82
+ ¿Ves? Es importante
83
+
84
+ 01:12.160 --> 01:15.755
85
+ que poquito a poquito vamos
86
+ desglosando este grandioso
87
+
88
+ 01:15.880 --> 01:17.578
89
+ lenguaje que es C.
90
+
91
+ 01:17.703 --> 01:20.098
92
+ Grandioso porque es mi lenguaje favorito,
93
+
94
+ 01:20.224 --> 01:21.439
95
+ pero además porque todavía
96
+
97
+ 01:21.565 --> 01:25.326
98
+ se ocupa y es un lenguaje
99
+ que lanzaron en 1972.
100
+
101
+ 01:25.452 --> 01:28.238
102
+ Imagínate eso. Muy bien,
103
+ ¿cuántos años son?
104
+
105
+ 01:28.363 --> 01:31.788
106
+ Bueno, muchos años. Vamos a
107
+ crear todo nuestro programa,
108
+
109
+ 01:31.914 --> 01:35.369
110
+ vamos a empezar y aquí
111
+ quiero que pensemos
112
+
113
+ 01:35.495 --> 01:37.920
114
+ qué es el algoritmo que
115
+ vamos a desarrollar.
116
+
117
+ 01:37.920 --> 01:41.147
118
+ Voy a crear un comentario.
119
+ Este programa genera menús,
120
+
121
+ 01:42.829 --> 01:47.179
122
+ menús según lo que el usuario elija.
123
+
124
+ 01:47.366 --> 01:52.881
125
+ Ok, vamos a hacer un simple programa
126
+ que imprime diferentes menús
127
+
128
+ 01:53.007 --> 01:55.416
129
+ y vamos a crear dos variables.
130
+
131
+ 01:59.315 --> 02:04.455
132
+ Ok, opción 1 va a ser igual a,
133
+ opción 1, voy a escribir
134
+
135
+ 02:04.581 --> 02:06.207
136
+ todo en inglés
137
+ porque es la mejor práctica,
138
+
139
+ 02:06.333 --> 02:10.344
140
+ opción 1 va a ser igual
141
+ a cualquier número,
142
+
143
+ 02:10.470 --> 02:13.188
144
+ vamos a inicializar todo
145
+ en cero, punto y coma,
146
+
147
+ 02:14.090 --> 02:19.730
148
+ opción 2 va a ser igual
149
+ a cero, punto y coma.
150
+
151
+ 02:20.003 --> 02:24.701
152
+ Excelente. Y ahora vamos
153
+ a declarar una serie de ifs, else ifs.
154
+
155
+ 02:27.135 --> 02:29.738
156
+ If option 1 es igual,
157
+
158
+ 02:29.864 --> 02:33.252
159
+ este es el operador de comparación,
160
+
161
+ 02:33.378 --> 02:37.777
162
+ recuerda, si option 1 es igual a
163
+ cero, entonces
164
+
165
+ 02:39.957 --> 02:42.840
166
+ lo que voy a escribir yo va a ser,
167
+ y aquí quiero que veas
168
+
169
+ 02:42.840 --> 02:46.753
170
+ que hay dos grandes
171
+ formas de escribir nuestras llaves,
172
+
173
+ 02:46.879 --> 02:49.009
174
+ ya sea que pones tus llaves así,
175
+
176
+ 02:49.235 --> 02:53.369
177
+ una al lado y otra donde cierras,
178
+ o las dos llaves abajo.
179
+
180
+ 02:53.495 --> 02:56.179
181
+ Esto se suele manejar
182
+ al gusto del programador,
183
+
184
+ 02:56.305 --> 02:58.337
185
+ yo siempre lo manejo de esta forma.
186
+
187
+ 02:58.463 --> 03:01.783
188
+ Lo que no es al gusto del programador
189
+ es la indentación.
190
+
191
+ 03:01.909 --> 03:05.029
192
+ Tenemos que todo el código
193
+ siempre va indentado a un nivel,
194
+
195
+ 03:05.155 --> 03:08.653
196
+ un nivel, todo, por ejemplo,
197
+ este if está adentro de este main,
198
+
199
+ 03:08.779 --> 03:10.201
200
+ por eso está indentado a un nivel,
201
+
202
+ 03:10.327 --> 03:12.240
203
+ y todo lo que yo escriba perteneciente
204
+
205
+ 03:12.240 --> 03:14.941
206
+ a este if va a estar
207
+ indentado a un nivel.
208
+
209
+ 03:15.168 --> 03:17.732
210
+ Entonces vamos a escribir
211
+ nuestro primer print.
212
+
213
+ 03:21.882 --> 03:26.975
214
+ Si usted eligió la opción cero,
215
+
216
+ 03:27.398 --> 03:32.191
217
+ verá nuestro menú de bebidas.
218
+
219
+ 03:32.681 --> 03:39.219
220
+ Elija una. Y aquí vamos
221
+ a poner otros if anidados.
222
+
223
+ 03:45.678 --> 03:48.630
224
+ Entonces si option 2 es igual a cero,
225
+
226
+ 03:49.050 --> 03:51.215
227
+ eso sería nuestra primer bebida.
228
+
229
+ 03:51.582 --> 03:53.212
230
+ Vamos a poner un print
231
+
232
+ 03:56.199 --> 03:58.086
233
+ y vamos a poner usted.
234
+
235
+ 03:58.522 --> 04:03.600
236
+ Si te das cuenta aquí no
237
+ necesito estas llaves
238
+
239
+ 04:03.600 --> 04:06.705
240
+ que el editor me autocompletó,
241
+ muy desafortunadamente
242
+
243
+ 04:06.831 --> 04:08.906
244
+ el autocomplete no siempre es buena idea,
245
+
246
+ 04:09.032 --> 04:15.000
247
+ al menos yo no soy el más fan de él.
248
+ Usted eligió, en lenguajes como C,
249
+
250
+ 04:15.000 --> 04:19.634
251
+ no, en lenguajes como JavaScript yo amo el
252
+ autocomplete, todo depende del lenguaje.
253
+
254
+ 04:20.020 --> 04:26.258
255
+ Ok, usted eligió una Coca-Cola,
256
+ una Platzi-Cola, cero.
257
+
258
+ 04:30.637 --> 04:33.240
259
+ Mmm, rico. Hay que hacer copy
260
+
261
+ 04:33.240 --> 04:37.802
262
+ porque esto es marketing, ¿no?
263
+ Muy bien, punto y coma y punto y coma.
264
+
265
+ 04:38.188 --> 04:42.614
266
+ Aquí si te das cuenta estamos anidando
267
+ nuestro decisional.
268
+
269
+ 04:42.740 --> 04:44.447
270
+ Obviamente no tendríamos
271
+
272
+ 04:44.573 --> 04:47.274
273
+ solamente Coca-Colas,
274
+ así que pondríamos else if,
275
+
276
+ 04:47.727 --> 04:54.250
277
+ opt 2, igual a 1 y aquí sería print.
278
+
279
+ 04:55.963 --> 04:59.775
280
+ Y voy a copiar esta sintaxis
281
+ para no tener que escribir tanto.
282
+
283
+ 05:01.245 --> 05:03.769
284
+ Un programador
285
+ exitoso escribe menos código.
286
+
287
+ 05:04.789 --> 05:07.984
288
+ Vamos a poner,
289
+ usted eligió una Platzi-Cola
290
+
291
+ 05:10.487 --> 05:15.475
292
+ con mucha azúcar. Azúcar, muy bien.
293
+
294
+ 05:15.963 --> 05:19.421
295
+ Imaginemos que tiene tilde.
296
+ Excelente. Y por último,
297
+
298
+ 05:19.547 --> 05:25.970
299
+ else if y sería option 2, igual a 2
300
+
301
+ 05:26.817 --> 05:30.040
302
+ y acá pondríamos
303
+ esta misma línea de código.
304
+
305
+ 05:32.179 --> 05:38.103
306
+ Uy, control C, control V,
307
+ la indentamos bien.
308
+
309
+ 05:41.468 --> 05:47.951
310
+ Usted eligió una Platzi-Piña colada.
311
+
312
+ 05:48.638 --> 05:51.840
313
+ Muy bien, listo. Con esto ya y por último,
314
+
315
+ 05:51.840 --> 05:56.455
316
+ else up y imprimiríamos
317
+
318
+ 05:59.759 --> 06:02.878
319
+ opción inválida.
320
+
321
+ 06:04.395 --> 06:06.976
322
+ Bellísimo. Punto y coma para cerrar.
323
+
324
+ 06:08.966 --> 06:12.304
325
+ Aquí, si te das cuenta,
326
+ nosotros ya creamos una primera
327
+
328
+ 06:12.430 --> 06:16.150
329
+ toma de decisiones.
330
+ La primera toma de decisiones,
331
+
332
+ 06:16.276 --> 06:19.658
333
+ si es cero, es bebidas,
334
+ así que hay que darle la bienvenida.
335
+
336
+ 06:19.784 --> 06:21.741
337
+ Usted eligió nuestra opción cero,
338
+
339
+ 06:21.867 --> 06:24.295
340
+ verá nuestro menú de bebidas. Elija una.
341
+
342
+ 06:24.475 --> 06:27.080
343
+ Y aquí hay que escribir algo más.
344
+ Entonces voy a crear
345
+
346
+ 06:27.080 --> 06:30.434
347
+ un salto de línea que se hace
348
+ con diagonal invertida N
349
+
350
+ 06:30.699 --> 06:32.845
351
+ y vamos a imprimir nuestro menú,
352
+
353
+ 06:32.971 --> 06:36.206
354
+ bien, bien lindo. Voy a utilizar otro
355
+
356
+ 06:36.332 --> 06:40.227
357
+ print para que se vea bien.
358
+ Ya tenemos acá, elija una bebida.
359
+
360
+ 06:40.353 --> 06:46.675
361
+ El siguiente paso sería,
362
+ presione cero o ingrese opción cero.
363
+
364
+ 06:48.741 --> 06:54.538
365
+ Cero para Coca-Cola Platzi-Cola. Cero.
366
+
367
+ 06:55.592 --> 06:59.845
368
+ Vamos a dejar aquí un salto
369
+ de línea, diagonal invertida N.
370
+
371
+ 07:02.717 --> 07:06.749
372
+ Voy a copiar esto para
373
+ replicarlo y que sea súper veloz
374
+
375
+ 07:07.135 --> 07:09.346
376
+ el desarrollo de nuestro programa.
377
+
378
+ 07:09.513 --> 07:12.642
379
+ Y lo voy a copiar aquí también.
380
+ Excelente.
381
+
382
+ 07:13.605 --> 07:15.808
383
+ Opción cero para Platzi-Cola cero.
384
+
385
+ 07:16.758 --> 07:21.685
386
+ Opción uno para Platzi-Cola normal.
387
+
388
+ 07:22.643 --> 07:27.856
389
+ Opción dos para Platzi-Colada.
390
+
391
+ 07:30.036 --> 07:35.421
392
+ Platzi-Pina-Colada. Muy bien.
393
+ Hay que ponerle punto y coma,
394
+
395
+ 07:35.547 --> 07:38.125
396
+ punto y coma.
397
+ Verifiquemos que todo está excelente.
398
+
399
+ 07:38.251 --> 07:40.975
400
+ Y ya, si te das cuenta,
401
+ hicimos unpequeñísimo menú.
402
+
403
+ 07:41.101 --> 07:44.696
404
+ Obviamente vamos aquí a falsear
405
+ nuestras opciones.
406
+
407
+ 07:44.822 --> 07:46.440
408
+ Simplemente imprimamos ahora
409
+
410
+ 07:46.440 --> 07:49.314
411
+ qué ocurre con el código
412
+ tal como lo tenemos.
413
+
414
+ 07:49.562 --> 07:54.344
415
+ Vamos a F6 para compilar.
416
+ Recuerda que si no sabes
417
+
418
+ 07:54.470 --> 07:57.459
419
+ cómo configurar mi entorno,
420
+ tienes que ir a nuestro primer curso.
421
+
422
+ 07:57.585 --> 07:59.000
423
+ Y mira, aquí está.
424
+
425
+ 07:59.000 --> 08:02.071
426
+ Ok, usted eligió la opción cero.
427
+ Verá nuestro menú de bebidas.
428
+
429
+ 08:02.197 --> 08:04.932
430
+ Elija una. Opción cero
431
+ para Platzi-Cola cero.
432
+
433
+ 08:05.058 --> 08:08.220
434
+ Opción uno para Platzi-Cola normal.
435
+
436
+ 08:08.346 --> 08:12.263
437
+ Opción dos para Platzi-Pina-Colada.
438
+ Usted eligió una Platzi-Cola cero.
439
+
440
+ 08:12.389 --> 08:15.796
441
+ Rico. Muy bien. Ahora nos falta
442
+ aquí un primer menú.
443
+
444
+ 08:15.922 --> 08:17.837
445
+ Entonces hay que copiar esto.
446
+
447
+ 08:19.801 --> 08:22.389
448
+ Vamos a copiar este código.
449
+ Vamos a ponerlo
450
+
451
+ 08:22.515 --> 08:25.359
452
+ en nuestro main
453
+ y vamos a traerlo por acá.
454
+
455
+ 08:25.526 --> 08:28.780
456
+ Recuerda que debe estar
457
+ indentado solo una, un nivel.
458
+
459
+ 08:29.176 --> 08:31.158
460
+ Vamos a decirle,
461
+
462
+ 08:33.555 --> 08:37.518
463
+ eh, bienvenido a Platzi Store.
464
+
465
+ 08:39.474 --> 08:42.803
466
+ Opción cero para Platzi-Bebidas.
467
+
468
+ 08:44.263 --> 08:47.926
469
+ Opción uno para Platzi-Comidas.
470
+
471
+ 08:48.445 --> 08:51.712
472
+ Y opción dos para Platzi-Postres.
473
+
474
+ 08:51.853 --> 08:55.293
475
+ Opción excelente.
476
+ Ya tenemos aquí nuestro primer menú.
477
+
478
+ 08:55.419 --> 08:58.160
479
+ Ahora te voy a dejar un primer reto.
480
+
481
+ 08:58.160 --> 09:00.949
482
+ Quiero que tú acompletes,
483
+ si te das cuenta, yo solo programé
484
+
485
+ 09:01.075 --> 09:02.518
486
+ la opción cero de nuestro menú.
487
+
488
+ 09:02.644 --> 09:05.816
489
+ Yo quiero que tú programes la opción uno,
490
+ que va a ser para alimentos,
491
+
492
+ 09:05.942 --> 09:08.662
493
+ y la opción dos,
494
+ que va a ser para postres.
495
+
496
+ 09:08.788 --> 09:10.759
497
+ Aquí tienes la estructura
498
+ que debes de seguir.
499
+
500
+ 09:10.885 --> 09:13.232
501
+ Te voy a dar el,
502
+ te voy a dejar esto listo.
503
+
504
+ 09:13.358 --> 09:15.694
505
+ Vamos a poner aquí el else if
506
+
507
+ 09:16.831 --> 09:20.807
508
+ y vamos a usar nuestro operador,
509
+ nuestra variable opción uno.
510
+
511
+ 09:21.000 --> 09:26.579
512
+ Y si esto es igual a uno,
513
+ entonces aquí, aquí va a ir,
514
+
515
+ 09:26.705 --> 09:28.953
516
+ vamos a, te voy a dejar
517
+ hasta un comentario.
518
+
519
+ 09:29.079 --> 09:36.039
520
+ Aquí va el código de,
521
+ el menú de alimentos.
522
+
523
+ 09:36.965 --> 09:39.307
524
+ Y vamos a copiar este else if
525
+
526
+ 09:42.294 --> 09:44.084
527
+ para el menú de postres.
528
+
529
+ 09:44.210 --> 09:49.716
530
+ Aquí va el menú de postres.
531
+ Hay que identar esto bien.
532
+
533
+ 09:51.106 --> 09:56.161
534
+ Y por último, else y aquí sería opción,
535
+
536
+ 10:00.412 --> 10:04.876
537
+ mensaje de manejo de opción inválida.
538
+
539
+ 10:05.277 --> 10:08.962
540
+ Aquí es donde tú le dices al usuario, oye,
541
+ Dude, eso que me pediste no existe.
542
+
543
+ 10:09.088 --> 10:12.575
544
+ No vendo todavía la opción cuatro,
545
+ cinco, seis, por ejemplo.
546
+
547
+ 10:12.701 --> 10:15.800
548
+ Ya con esto tú,
549
+ tú debes de preparar tu código.
550
+
551
+ 10:15.926 --> 10:18.597
552
+ Ok. Debes de terminar el código y dejarme,
553
+
554
+ 10:18.723 --> 10:20.480
555
+ ya sea, la impresión de cómo
556
+
557
+ 10:20.480 --> 10:22.904
558
+ queda tu menú en la terminal.
559
+
560
+ 10:23.030 --> 10:27.183
561
+ Ahora, ¿qué pasa si tú, por ejemplo,
562
+ quisieras elegir la opción 0,2?
563
+
564
+ 10:27.309 --> 10:29.600
565
+ Pues simplemente la pones aquí arriba.
566
+
567
+ 10:29.726 --> 10:31.840
568
+ ¿Vale? De momento no hemos
569
+ aprendido a manejar inputs,
570
+
571
+ 10:31.840 --> 10:34.439
572
+ así que no te preocupes.
573
+ Todo lo estamos manejando
574
+
575
+ 10:34.564 --> 10:37.294
576
+ por inputs aquí arriba
577
+ en nuestro programita.
578
+
579
+ 10:37.420 --> 10:42.166
580
+ Guardamos, compilamos.
581
+ Vamos a esperar a que termine.
582
+
583
+ 10:42.292 --> 10:45.193
584
+ Y ¡uy! Nos marca un error. Todo mal.
585
+
586
+ 10:47.710 --> 10:51.960
587
+ Vamos a ver por qué. Dice main.
588
+
589
+ 10:53.546 --> 10:58.440
590
+ Ah, claro, al escribir todo esto
591
+ se me borró el return.
592
+
593
+ 10:58.440 --> 11:02.213
594
+ Entonces hay que componerlo.
595
+ Vamos a ver qué está pasando.
596
+
597
+ 11:02.339 --> 11:05.401
598
+ Ah, ok. Y todo se me anidó
599
+ dentro de este primer if.
600
+
601
+ 11:05.527 --> 11:08.238
602
+ Eso está mal. Aquí hay que saber separar
603
+
604
+ 11:08.364 --> 11:11.470
605
+ en dónde terminan las cosas.
606
+ Entonces te voy a enseñar justo eso.
607
+
608
+ 11:12.016 --> 11:14.507
609
+ Vamos a cerrar una llave acá.
610
+
611
+ 11:14.633 --> 11:17.103
612
+ Esta llave cierra nuestro primer if.
613
+
614
+ 11:17.229 --> 11:20.950
615
+ Este else if se cierra con su llave acá.
616
+ Veamos. Sí.
617
+
618
+ 11:21.076 --> 11:24.906
619
+ Este else if se cierra con su llave.
620
+ Este else se cierra con su llave.
621
+
622
+ 11:25.032 --> 11:28.034
623
+ Y este estaría cerrando nuestro main.
624
+
625
+ 11:28.160 --> 11:33.022
626
+ Así que vamos a ponerle return.
627
+ Cero, punto y coma.
628
+
629
+ 11:33.148 --> 11:35.919
630
+ Recuerda que esa es la instrucción
631
+ de salida que vamos a tener.
632
+
633
+ 11:36.045 --> 11:37.902
634
+ Vamos a, se me olvidó guardar.
635
+
636
+ 11:38.028 --> 11:44.627
637
+ Vamos a guardar.
638
+ Control S y vamos a nuestro terminal.
639
+
640
+ 11:44.907 --> 11:49.172
641
+ Vamos a darle F6. Muy bien.
642
+
643
+ 11:49.298 --> 11:52.165
644
+ Y ya una vez compila
645
+ y se ejecuta nuestro programa.
646
+
647
+ 11:52.291 --> 11:55.552
648
+ Nos dice, usted eligió la opción cero.
649
+ Verá nuestro menú de bebidas.
650
+
651
+ 11:55.859 --> 11:58.974
652
+ Ah, ok. Opción cero para Coca-Cola cero,
653
+
654
+ 11:59.100 --> 12:01.484
655
+ para Coca-Cola normal y para piña colada.
656
+
657
+ 12:01.610 --> 12:04.438
658
+ Mira, usted eligió
659
+ una piña colada con azúcar.
660
+
661
+ 12:04.563 --> 12:07.680
662
+ Mmm, rico. Excelente.
663
+ Aquí tenemos un typo.
664
+
665
+ 12:07.680 --> 12:11.877
666
+ Lo guardamos y eso es todo.
667
+ Aquí ya aprendiste cómo
668
+
669
+ 12:12.003 --> 12:15.040
670
+ utilizar if anidados.
671
+ Es un ejemplo súper básico,
672
+
673
+ 12:15.040 --> 12:16.397
674
+ pero quiero que tú lo termines
675
+
676
+ 12:16.523 --> 12:19.057
677
+ para que te quede
678
+ bien clarita la información.
679
+
680
+ 12:19.183 --> 12:20.363
681
+ Velo como un ejercicio.
682
+
683
+ 12:20.489 --> 12:23.902
684
+ Crea un menú desde cero,
685
+ por favor, y muéstramelo
686
+
687
+ 12:24.028 --> 12:26.079
688
+ en la sección de comentarios.
689
+ Termina este menú,
690
+
691
+ 12:26.205 --> 12:28.826
692
+ crea tu propio menú y con eso
693
+ ya habrás aprendido
694
+
695
+ 12:28.952 --> 12:33.368
696
+ a escribir if anidados.
697
+ No te confíes en pensar
698
+
699
+ 12:33.494 --> 12:35.758
700
+ que esto es muy simple.
701
+ No lo necesito practicar.
702
+
703
+ 12:35.884 --> 12:38.434
704
+ Si no lo practicas,
705
+ se te va a olvidar en una hora
706
+
707
+ 12:38.560 --> 12:40.300
708
+ o dos después
709
+ de que hayas visto esta clase
710
+
711
+ 12:40.426 --> 12:46.426
712
+ y no queremos eso.
713
+ Nos vemos en la próxima.
subir/Curso de Control de Flujo en C/02-Toma de decisiones/03-Resumen.html ADDED
The diff for this file is too large to render. See raw diff
 
subir/Curso de Control de Flujo en C/02-Toma de decisiones/03-nestedif_e6d6f354-6111-4e0b-9802-2aa3a6d9a99e.c ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <stdio.h>
2
+ int opt1 = 0;
3
+ int opt2 = 2;
4
+
5
+ int main(){
6
+ printf("bienvenid a platzi store :\n");
7
+ printf("opcion 0 para platzi bebidas \n");
8
+ printf("opcion 1 para platzi comidas \n");
9
+ printf("opcion 2 para platzi postres \n");
10
+
11
+ // este programa genera menus segun lo que el usuario elija
12
+ if(opt1 == 0){
13
+ printf("usted eligio la opcion 0, vera nuestro menu de bebidas elija una:\n");
14
+ printf("opcion 0 para platzi cola cero \n");
15
+ printf("opcion 1 para platzi cola normal \n");
16
+ printf("opcion 2 para platzi pina colada \n");
17
+
18
+ if (opt2 == 0)
19
+ printf("usted eligio una platzi cola cero, mmm rico");
20
+ else if (opt2 == 1)
21
+ printf("usted eligio una platzi cola cpn azucar, mmm rico");
22
+ else if (opt2 == 2)
23
+ printf("usted eligio una platzi pina colada con azucar, mmm rico");
24
+ else
25
+ printf("opcion invalida");
26
+ }
27
+ else if(opt1 ==1){
28
+ //aqui va el menu de alimentos
29
+ }
30
+ else if(opt1 ==2){
31
+ //aqui va el menu de postres
32
+ }
33
+ else {
34
+ // mensaje de manejo de opcion invalida
35
+ }
36
+
37
+ return 0;
38
+ }
subir/Curso de Control de Flujo en C/02-Toma de decisiones/04-Estructura y uso del switch en programación en C.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6b69af0b554bee155d47b994eed87dd5c060cb6d30e2644f18d9c71c96e937b6
3
+ size 129525828
subir/Curso de Control de Flujo en C/02-Toma de decisiones/04-Estructura y uso del switch en programación en C.vtt ADDED
@@ -0,0 +1,866 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ WEBVTT
2
+
3
+ 00:03.200 --> 00:05.800
4
+ En esta clase vamos
5
+ a aprender otra estructura
6
+
7
+ 00:05.926 --> 00:08.346
8
+ para el control de flujo
9
+ de nuestro programa,
10
+
11
+ 00:08.472 --> 00:12.878
12
+ principalmente para decidir
13
+ qué es el código que vamos a ejecutar.
14
+
15
+ 00:13.004 --> 00:14.817
16
+ Y esta es la instrucción switch.
17
+
18
+ 00:15.077 --> 00:18.483
19
+ Vamos a crearuna nueva tab aquí
20
+ en nuestro Visual Studio Code.
21
+
22
+ 00:18.609 --> 00:20.869
23
+ Vamos a guardarla, tú sabes, control S.
24
+
25
+ 00:20.995 --> 00:27.036
26
+ Vamos a crear un nuevo archivo
27
+ que se llame switch.c.
28
+
29
+ 00:30.012 --> 00:31.059
30
+ Y listo.
31
+
32
+ 00:31.318 --> 00:34.045
33
+ Ahora te quiero contar un poquito
34
+ sobre esta estructura.
35
+
36
+ 00:34.385 --> 00:37.551
37
+ La declaración switch
38
+ es una estructura múltiple
39
+
40
+ 00:37.677 --> 00:39.926
41
+ que nos va a servir para tomar decisiones,
42
+
43
+ 00:40.052 --> 00:42.403
44
+ es decir, vamos a tener varios casos
45
+
46
+ 00:42.529 --> 00:44.898
47
+ en donde puede entrar y en muchos casos
48
+
49
+ 00:45.023 --> 00:48.419
50
+ de hecho se utiliza justo
51
+ para no tener que crear
52
+
53
+ 00:48.545 --> 00:50.435
54
+ muchos else ifs específicos.
55
+
56
+ 00:50.630 --> 00:55.710
57
+ Ojo, que el switch funciona con valores
58
+ constantes, es decir,
59
+
60
+ 00:55.836 --> 00:58.577
61
+ cada una de las ramas
62
+ que vamos a tener no va a tener
63
+
64
+ 00:58.703 --> 01:01.280
65
+ tanto así una expresión como en el if,
66
+
67
+ 01:01.280 --> 01:04.718
68
+ sino que vamos a tener solamente
69
+ algún valor constante,
70
+
71
+ 01:04.843 --> 01:07.779
72
+ por ejemplo, un número o una string,
73
+
74
+ 01:07.905 --> 01:09.176
75
+ una cadena de caracteres
76
+
77
+ 01:09.302 --> 01:13.267
78
+ o algo que vaya a ser permanente
79
+ y fijo o constante.
80
+
81
+ 01:13.693 --> 01:15.428
82
+ Luego esto lo vamos a comparar
83
+
84
+ 01:15.554 --> 01:19.717
85
+ con una variable de control
86
+ y esta va a ir entrando en cada una.
87
+
88
+ 01:19.843 --> 01:23.557
89
+ Ves como que creamos este cubo de formas
90
+ con los que juegan los bebés,
91
+
92
+ 01:23.841 --> 01:26.803
93
+ en donde si la forma se match,
94
+ entonces entra ahí,
95
+
96
+ 01:26.929 --> 01:30.133
97
+ ah bueno, exactamente
98
+ esa es la estructura switch.
99
+
100
+ 01:30.259 --> 01:33.676
101
+ Uno de sus principales
102
+ usos es crear máquinas de estado,
103
+
104
+ 01:33.802 --> 01:36.478
105
+ es decir, sistemas en donde tu código
106
+
107
+ 01:36.603 --> 01:39.960
108
+ se va a ir comportando
109
+ de forma predefinida
110
+
111
+ 01:39.960 --> 01:44.220
112
+ y conforme vaya en cada uno de los pasos
113
+ del switch va a ir ejecutando algo.
114
+
115
+ 01:44.346 --> 01:45.800
116
+ Un caso de ejemplo clarísimo
117
+
118
+ 01:45.800 --> 01:48.951
119
+ de una máquina de estado
120
+ sería un robot vigilante,
121
+
122
+ 01:49.076 --> 01:52.255
123
+ en donde el primer
124
+ estado sería, ah ok, estado,
125
+
126
+ 01:52.381 --> 01:54.925
127
+ alerta o detección, búsqueda de intrusos.
128
+
129
+ 01:55.218 --> 01:57.800
130
+ Ese sería el primer estado
131
+ y el robot se mantendría ahí
132
+
133
+ 01:57.800 --> 02:00.262
134
+ por toda la vida hasta
135
+ que detecta un intruso.
136
+
137
+ 02:00.387 --> 02:02.541
138
+ Se cumpla todo el código de detección
139
+
140
+ 02:02.667 --> 02:07.044
141
+ y pase al siguiente estado de alerta
142
+ o dispersión de intrusos,
143
+
144
+ 02:07.170 --> 02:09.828
145
+ por ejemplo, que ahí
146
+ ya el robot lo perseguiría,
147
+
148
+ 02:09.954 --> 02:12.078
149
+ activaría una alarma y hasta le dispararía
150
+
151
+ 02:12.203 --> 02:14.117
152
+ con una pistola si lo programamos así.
153
+
154
+ 02:14.243 --> 02:16.194
155
+ Ojalá que no,
156
+ porque la violencia está mal.
157
+
158
+ 02:16.376 --> 02:21.723
159
+ Luego, eso sería el estado de dispersión
160
+ de intrusos y un tercer estado
161
+
162
+ 02:21.849 --> 02:23.839
163
+ sería verificación de dispersión
164
+
165
+ 02:23.965 --> 02:29.569
166
+ y un cuarto estado sería
167
+ reseteo de estado o guardar
168
+
169
+ 02:29.695 --> 02:32.506
170
+ la información de que ya
171
+ detectamos un intruso, bla bla bla,
172
+
173
+ 02:32.632 --> 02:35.000
174
+ pasó esto, se genera un block y después
175
+
176
+ 02:35.000 --> 02:38.042
177
+ regresaríamos al estado 1,
178
+ que sería el estado de alerta
179
+
180
+ 02:38.168 --> 02:40.117
181
+ y búsqueda o detección de intrusos,
182
+
183
+ 02:40.243 --> 02:42.594
184
+ en donde el robot pasaría
185
+ la mayoría de su tiempo.
186
+
187
+ 02:42.720 --> 02:44.219
188
+ Esto se puede crear con un switch.
189
+
190
+ 02:44.345 --> 02:49.188
191
+ Veamos cómo sería una base
192
+ o una estructura inicial
193
+
194
+ 02:49.314 --> 02:50.318
195
+ de un código switch.
196
+
197
+ 02:50.655 --> 02:54.386
198
+ Lo primero es declarar la expresión
199
+ mentse, que es switch.
200
+
201
+ 02:54.532 --> 02:56.372
202
+ Aquí nos lo autocompleta
203
+
204
+ 02:56.498 --> 02:59.200
205
+ y está muy bien escrito de hecho.
206
+
207
+ 02:59.200 --> 03:02.298
208
+ Entonces tenemos que nuestro switch
209
+ va a verificar una expresión
210
+
211
+ 03:02.423 --> 03:06.456
212
+ tal como lo hacía el if
213
+ y vamos a tener nuestros casos.
214
+
215
+ 03:06.582 --> 03:08.849
216
+ Aquí es donde yo te digo que vamos a tener
217
+
218
+ 03:08.974 --> 03:13.116
219
+ nuestras expresiones constantes,
220
+ el código de cada caso,
221
+
222
+ 03:13.242 --> 03:15.551
223
+ y nosotros vamos a tener tantos casos
224
+
225
+ 03:15.677 --> 03:17.227
226
+ como nosotros querramos.
227
+
228
+ 03:17.493 --> 03:19.653
229
+ Entonces los casos pueden ser numéricos
230
+
231
+ 03:19.779 --> 03:21.951
232
+ o pueden ser por cadenas de caracteres.
233
+
234
+ 03:22.077 --> 03:24.214
235
+ Vamos a hacerlo con casos numéricos.
236
+
237
+ 03:25.747 --> 03:32.614
238
+ Vamos a decirle que mi caso 1, el código
239
+ sería detección de intrusos, ¿no?
240
+
241
+ 03:34.778 --> 03:39.086
242
+ De intrusos y un break.
243
+ El break es la instrucción
244
+
245
+ 03:39.212 --> 03:42.280
246
+ o la sentencia que nos
247
+ indica que ya se cumplió todo
248
+
249
+ 03:42.280 --> 03:46.701
250
+ el código que teníamos
251
+ aquí, entonces que se salga.
252
+
253
+ 03:47.915 --> 03:49.880
254
+ Obviamente dentro de este caso
255
+
256
+ 03:49.880 --> 03:51.504
257
+ podríamos tener instrucciones if,
258
+
259
+ 03:51.630 --> 03:53.489
260
+ podríamos tener instrucciones if else,
261
+
262
+ 03:53.615 --> 03:55.916
263
+ podemos tener todo el código C
264
+ que querramos,
265
+
266
+ 03:56.103 --> 03:58.600
267
+ todo lo que se necesite ejecutar
268
+ en el caso 1.
269
+
270
+ 03:58.800 --> 04:00.601
271
+ Luego tendríamos nuestrocaso 2.
272
+
273
+ 04:01.477 --> 04:03.903
274
+ Y aquí sería lo mismo, por ejemplo,
275
+
276
+ 04:04.029 --> 04:07.440
277
+ en el ejemplo ficticio
278
+ que estábamos pensando,
279
+
280
+ 04:07.566 --> 04:11.348
281
+ aquí sería espantar o dispersar,
282
+
283
+ 04:13.395 --> 04:17.265
284
+ correr a los intrusos, ¿no?
285
+
286
+ 04:21.247 --> 04:23.781
287
+ Luego tendríamos nuestro case 5.
288
+
289
+ 04:26.660 --> 04:31.276
290
+ Y así sucesivamente en cada una
291
+ de las instrucciones de nuestro switch.
292
+
293
+ 04:31.760 --> 04:33.698
294
+ Ahora, hagamos esto en un ejemplo.
295
+
296
+ 04:33.824 --> 04:37.031
297
+ Ya te enseñé la sintaxis.
298
+ Vamos a tener tantos cases
299
+
300
+ 04:37.157 --> 04:40.041
301
+ como necesitemos
302
+ y vamos a tener un default.
303
+
304
+ 04:40.167 --> 04:42.195
305
+ El default lo puedes ver como el else.
306
+
307
+ 04:42.399 --> 04:47.047
308
+ Si ninguno de los casos se cumple,
309
+ entonces vamos a ir a nuestro default.
310
+
311
+ 04:47.181 --> 04:48.792
312
+ Por default vamos a hacer
313
+
314
+ 04:48.918 --> 04:51.035
315
+ esta instrucción y hacemos un break
316
+
317
+ 04:51.196 --> 04:53.956
318
+ que nos removería del código.
319
+
320
+ 04:54.923 --> 04:57.574
321
+ Ahora, ¿qué sería la expresión a validar?
322
+
323
+ 04:57.700 --> 04:59.298
324
+ Nuestra expresión muchas veces
325
+
326
+ 04:59.572 --> 05:01.708
327
+ va a ser simple
328
+ y sencillamente una variable
329
+
330
+ 05:01.834 --> 05:04.538
331
+ que nosotros vamos a declarar.
332
+ Por ejemplo,
333
+
334
+ 05:04.663 --> 05:07.957
335
+ variable y si esta variable vale 1,
336
+ entra 1,
337
+
338
+ 05:08.083 --> 05:11.348
339
+ si esta variable vale 2, entra 2,
340
+ si llega a valer 5, entra 5,
341
+
342
+ 05:11.474 --> 05:13.205
343
+ si no tenemos ninguno de los valores
344
+
345
+ 05:13.331 --> 05:15.718
346
+ sería el default y haríamos el código
347
+
348
+ 05:15.843 --> 05:17.985
349
+ que tengamos en nuestro default.
350
+
351
+ 05:18.247 --> 05:21.844
352
+ Con esto dicho, veamos un ejemplo
353
+ en código ya más práctico.
354
+
355
+ 05:21.970 --> 05:23.440
356
+ Creemos nuestro menú.
357
+
358
+ 05:26.898 --> 05:30.918
359
+ Para esto, a nuestra estructura inicial
360
+ voy a declararle lo de siempre.
361
+
362
+ 05:31.044 --> 05:33.008
363
+ Necesito mi STDIO,
364
+
365
+ 05:33.134 --> 05:35.408
366
+ vamos a, ya sabes, numeral include.
367
+
368
+ 05:36.170 --> 05:42.848
369
+ Vamos a importar nuestra librería
370
+ STDIO.h. Muy bien.
371
+
372
+ 05:42.974 --> 05:45.032
373
+ Luego vamos a declarar nuestro main.
374
+
375
+ 05:45.412 --> 05:49.640
376
+ Aquí está perfecto. Y en main
377
+ vamos a poner nuestro switch.
378
+
379
+ 05:49.640 --> 05:52.378
380
+ Recuerda que no necesitamos
381
+ nada de esto por acá.
382
+
383
+ 05:52.899 --> 05:55.507
384
+ Vamos a poner todo esto
385
+ que ya teníamos escrito
386
+
387
+ 05:56.081 --> 05:58.758
388
+ y vamos a asegurarnos
389
+ de eliminar esta llavecita
390
+
391
+ 05:58.884 --> 06:02.587
392
+ que teníamos ahí porque
393
+ sólo nos va a estorbar en un futuro.
394
+
395
+ 06:02.747 --> 06:04.685
396
+ Ahora hay que hacer
397
+ la identación correcta.
398
+
399
+ 06:06.751 --> 06:09.008
400
+ Vamos a poner
401
+ nuestro break también ahí.
402
+
403
+ 06:09.134 --> 06:12.104
404
+ La identación de verdad,
405
+ no me canso de decir
406
+
407
+ 06:12.284 --> 06:15.049
408
+ lo importante que es
409
+ porque es la que nos define el orden
410
+
411
+ 06:15.175 --> 06:17.498
412
+ y hace que el código
413
+ sea más legible para nosotros.
414
+
415
+ 06:17.845 --> 06:21.227
416
+ Al compilador en C
417
+ no le importa la identación,
418
+
419
+ 06:21.353 --> 06:22.991
420
+ de verdad,
421
+ no le importa en absoluto.
422
+
423
+ 06:23.117 --> 06:26.661
424
+ A quien le debe de importar
425
+ es a ti porque si no identas,
426
+
427
+ 06:26.787 --> 06:28.798
428
+ todo va a estar
429
+ muy mal en tu código
430
+
431
+ 06:28.923 --> 06:32.836
432
+ y va a ser un caos en
433
+ cuestión de legibilidad.
434
+
435
+ 06:33.469 --> 06:37.195
436
+ Vamos a ponerle su break.
437
+ Vamos a ponerle punto y coma.
438
+
439
+ 06:38.182 --> 06:42.938
440
+ Ya nada más nos falta jalarnos
441
+ el default y el break.
442
+
443
+ 06:43.064 --> 06:45.415
444
+ Y aquí quiero que comparemos
445
+ esta instrucción
446
+
447
+ 06:45.541 --> 06:47.868
448
+ con la instrucción que ya habíamos visto
449
+
450
+ 06:47.994 --> 06:53.506
451
+ que era la de nuestros if anidados.
452
+
453
+ 06:53.632 --> 06:56.931
454
+ Entonces yo quiero que hagamos
455
+ un menú utilizando nuestros casos.
456
+
457
+ 06:57.271 --> 07:00.023
458
+ Vamos a decirle que este programa,
459
+
460
+ 07:00.149 --> 07:05.658
461
+ bienvenido, primf, y de hecho
462
+ me voy a traer el menú
463
+
464
+ 07:05.784 --> 07:07.042
465
+ de nuestros nested if.
466
+
467
+ 07:07.275 --> 07:10.172
468
+ Vamos a copiarnos directamente esto.
469
+
470
+ 07:11.012 --> 07:15.922
471
+ Perfectísimo. Por aquí
472
+ y lo copiamos con control C
473
+
474
+ 07:16.048 --> 07:19.118
475
+ y lo pegamos acá en donde pertenece.
476
+
477
+ 07:20.845 --> 07:23.824
478
+ Dice bienvenido a Platzi Store.
479
+ Mira que se nos identó mal.
480
+
481
+ 07:23.950 --> 07:26.994
482
+ Vamos a identarlo bien. No pasa nada.
483
+
484
+ 07:27.120 --> 07:29.651
485
+ Solo voy a darle uno más
486
+ al switch y ya está todo bello.
487
+
488
+ 07:30.097 --> 07:32.156
489
+ Vamos a decirle bienvenido a Platzi Store.
490
+
491
+ 07:32.282 --> 07:36.862
492
+ Opción 0 para platzi bebidas,
493
+ opción 1 para platzi comidas
494
+
495
+ 07:36.988 --> 07:38.858
496
+ y opción 2 para platzi postres.
497
+
498
+ 07:39.132 --> 07:42.480
499
+ Vamos a escribir acá nuestra
500
+ variable de tipo entero
501
+
502
+ 07:42.480 --> 07:49.032
503
+ que va a ser int opcion 1
504
+ y vamos a inicializarla
505
+
506
+ 07:49.158 --> 07:53.055
507
+ en 0 punto y coma. Excelente.
508
+ Tenemos ya nuestro menú
509
+
510
+ 07:53.181 --> 07:56.258
511
+ y la variable que vamos
512
+ a estar leyendo va a ser
513
+
514
+ 07:56.383 --> 07:59.257
515
+ igual a opción 1. No se me puso el 1 bien.
516
+
517
+ 07:59.473 --> 08:01.326
518
+ Ahora sí, guardo.
519
+
520
+ 08:02.399 --> 08:05.872
521
+ Y el caso no va a empezar en 1
522
+ sino que voy a empezar en 0.
523
+
524
+ 08:06.710 --> 08:11.331
525
+ 1, control copy
526
+
527
+ 08:13.303 --> 08:16.076
528
+ y por último caso 2.
529
+
530
+ 08:17.289 --> 08:18.798
531
+ Vamos para el caso 0.
532
+
533
+ 08:19.113 --> 08:21.768
534
+ Vamos a traernos este código
535
+ que ya había escrito aquí.
536
+
537
+ 08:22.813 --> 08:25.262
538
+ Vamos a imprimirlo en nuestro case.
539
+
540
+ 08:26.966 --> 08:29.055
541
+ Vamos a identar un poco esto.
542
+
543
+ 08:31.461 --> 08:33.888
544
+ Hago mucho énfasis en identación
545
+ porque de verdad
546
+
547
+ 08:34.014 --> 08:35.279
548
+ es muy, muy importante.
549
+
550
+ 08:35.405 --> 08:39.437
551
+ Es de lo mejor que pueden hacer
552
+ que su código sea legible y bonito.
553
+
554
+ 08:39.830 --> 08:42.795
555
+ Y aquí ya podemos
556
+ nosotros poner otro switch
557
+
558
+ 08:43.540 --> 08:46.317
559
+ o podríamos poner directamente un if,
560
+
561
+ 08:46.443 --> 08:48.734
562
+ lo que ustedes quieran, uno o varios if.
563
+
564
+ 08:48.967 --> 08:51.318
565
+ Estas instrucciones se pueden
566
+ combinar entre ellas,
567
+
568
+ 08:51.444 --> 08:56.203
569
+ pero de momento solo les estoy enseñando
570
+ el switch, así que voy a usar un switch.
571
+
572
+ 08:57.509 --> 09:00.361
573
+ Vamos a declarar nuestra
574
+ variable opción 2, int
575
+
576
+ 09:00.696 --> 09:06.453
577
+ opción 2 igual a 0,
578
+ 0 punto y coma y listo.
579
+
580
+ 09:09.065 --> 09:13.036
581
+ Vamos a tener switch opción 2
582
+ y vamos a copiar nuestros casos.
583
+
584
+ 09:13.256 --> 09:16.299
585
+ El primer caso va a ser el caso 0
586
+
587
+ 09:17.820 --> 09:23.253
588
+ y en el caso 0 yo pondría
589
+ que nos compraron una Platzi Cola.
590
+
591
+ 09:23.819 --> 09:27.332
592
+ Si se acuerdan
593
+ hablábamos de la Platzi Cola 0.
594
+
595
+ 09:29.200 --> 09:31.488
596
+ Perfecto. Control copy,
597
+ vamos a nuestro switch
598
+
599
+ 09:31.614 --> 09:35.800
600
+ y ponemos nuestro código.
601
+ Con esto ya podemos
602
+
603
+ 09:35.800 --> 09:38.619
604
+ verificar si está funcionando todo bien,
605
+
606
+ 09:38.922 --> 09:43.314
607
+ así que hagamos justamente eso.
608
+ Default break, default break
609
+
610
+ 09:43.440 --> 09:46.037
611
+ y default y sub break. Excelente.
612
+
613
+ 09:46.617 --> 09:51.012
614
+ Vamos a poner 0, 0 para ver si entramos
615
+ a la opción 0 que es Platzi Cola 0
616
+
617
+ 09:51.138 --> 09:53.802
618
+ y luego entramos a la opción que es,
619
+
620
+ 09:53.928 --> 09:56.699
621
+ y luego se imprime
622
+ en nuestro menú de bebidas,
623
+
624
+ 09:56.825 --> 09:59.878
625
+ que es este, y luego
626
+ entramos a la opción Platzi Cola 0.
627
+
628
+ 10:00.004 --> 10:02.888
629
+ Muy bien. Vamos a dejar todo
630
+ así como está.
631
+
632
+ 10:03.014 --> 10:07.039
633
+ Control S y compilamos
634
+ y ejecutamos nuestro código.
635
+
636
+ 10:07.766 --> 10:10.961
637
+ Y nos marca un error,
638
+ dice expected declaration
639
+
640
+ 10:11.087 --> 10:13.371
641
+ or statement y el error está
642
+ en la función main.
643
+
644
+ 10:13.497 --> 10:16.080
645
+ Lo que está pasando, ah no mira,
646
+
647
+ 10:16.080 --> 10:20.458
648
+ dice switch bla bla bla,
649
+ esto está muy raro,
650
+
651
+ 10:20.583 --> 10:24.960
652
+ dice línea 37,1. Vamos a la
653
+ línea 37 y veamos qué pasa
654
+
655
+ 10:24.960 --> 10:27.142
656
+ con esta llave que tenemos acá.
657
+
658
+ 10:27.363 --> 10:31.342
659
+ Uy, y claro, lo que está pasando
660
+ es que esta llave cierra a este switch
661
+
662
+ 10:31.468 --> 10:34.554
663
+ y deberíamos cerrar nuestro main,
664
+ pues corrijamos eso.
665
+
666
+ 10:34.874 --> 10:37.371
667
+ Entonces vamos a poner otra llave
668
+
669
+ 10:37.497 --> 10:41.054
670
+ antes del return que debería de cerrar
671
+ a nuestro switch grande,
672
+
673
+ 10:41.194 --> 10:45.271
674
+ a nuestro switch 1,
675
+ que es el gran el gran switch
676
+
677
+ 10:45.397 --> 10:46.977
678
+ que controla el estado
679
+ de nuestro programa,
680
+
681
+ 10:47.103 --> 10:48.967
682
+ en donde estamos en este momento.
683
+
684
+ 10:49.093 --> 10:51.007
685
+ Vamos a guardar
686
+ y vamos a identar bien todo.
687
+
688
+ 10:51.132 --> 10:53.891
689
+ Mira que aquí está bien,
690
+ entramos a nuestro primer switch,
691
+
692
+ 10:54.017 --> 10:56.828
693
+ tenemos nuestro key 0,
694
+ luego entramos a nuestro segundo switch
695
+
696
+ 10:56.954 --> 10:58.978
697
+ y aquí este key 0 no está bien identado.
698
+
699
+ 10:59.104 --> 11:00.997
700
+ Vamos a ponerlo y todo esto debería
701
+
702
+ 11:01.123 --> 11:02.984
703
+ estar un nivel adentro más.
704
+
705
+ 11:04.131 --> 11:05.229
706
+ El default también.
707
+
708
+ 11:05.355 --> 11:08.817
709
+ Y ya con eso yo sé que esto
710
+ pertenece a este switch
711
+
712
+ 11:08.943 --> 11:11.240
713
+ que tenemos acá.
714
+ Date cuenta de cómo todo
715
+
716
+ 11:11.240 --> 11:14.269
717
+ se va volviendo más legible
718
+ conforme tenemos cuidado
719
+
720
+ 11:14.395 --> 11:17.512
721
+ de escribir las cosas
722
+ de la mejor forma posible.
723
+
724
+ 11:18.052 --> 11:21.391
725
+ Es por eso importantísimo.
726
+ Luego, luego de esto,
727
+
728
+ 11:21.517 --> 11:24.868
729
+ ya simple y sencillamente
730
+ vamos a poner los breaks bien.
731
+
732
+ 11:24.994 --> 11:28.727
733
+ Los breaks, yo los pongo
734
+ un nivel adentro de mi case
735
+
736
+ 11:30.053 --> 11:32.066
737
+ y de mi default también, por supuesto.
738
+
739
+ 11:32.192 --> 11:35.479
740
+ Tenemos nuestra llave
741
+ y tenemos nuestro return 0.
742
+
743
+ 11:35.605 --> 11:37.375
744
+ Control S, compilamos.
745
+
746
+ 11:39.730 --> 11:42.369
747
+ Vamos a esperar que ocurre y ya.
748
+
749
+ 11:42.529 --> 11:45.777
750
+ Bellísimo, todo funcionó.
751
+ Bienvenido a Platzi Store.
752
+
753
+ 11:45.977 --> 11:49.412
754
+ Opción 0 para platzi bebidas,
755
+ opción 1 para platzi comidas.
756
+
757
+ 11:49.538 --> 11:50.999
758
+ Usted eligió la opción 0,
759
+
760
+ 11:51.124 --> 11:53.114
761
+ verá nuestro menú de bebidas, elija una.
762
+
763
+ 11:53.240 --> 11:56.696
764
+ Opción 0 para platzi cola,
765
+ para platzi cola normal
766
+
767
+ 11:56.822 --> 12:00.144
768
+ y para platzi pina colada.
769
+ Luego usted eligió una platzi cola 0.
770
+
771
+ 12:00.289 --> 12:04.014
772
+ Rico, excelente. Con esto
773
+ ya viste cómo podemos
774
+
775
+ 12:04.140 --> 12:06.520
776
+ usar el switch para crear
777
+ este tipo de menús.
778
+
779
+ 12:06.520 --> 12:08.901
780
+ Yo quiero aquí que te quede
781
+ un aprendizaje y esto
782
+
783
+ 12:09.027 --> 12:12.200
784
+ es una buena práctica.
785
+ Nosotros solemos utilizar
786
+
787
+ 12:12.200 --> 12:15.138
788
+ switch principalmente
789
+ para máquinas de estado,
790
+
791
+ 12:15.263 --> 12:19.363
792
+ para control a gran escala
793
+ del flujo de nuestro programa.
794
+
795
+ 12:19.489 --> 12:22.555
796
+ Cada uno de los cases podría tener
797
+ mucho código adentro.
798
+
799
+ 12:22.982 --> 12:26.207
800
+ Se vuelve muy complejo usar switch
801
+ dentro de switches.
802
+
803
+ 12:26.387 --> 12:28.167
804
+ Ya ahí dentro de cada case
805
+
806
+ 12:28.293 --> 12:30.600
807
+ tú debes de crear una lógica
808
+ normal de C que conforme
809
+
810
+ 12:30.600 --> 12:34.018
811
+ vayamos aprendiendo a
812
+ hacer cosas más complejas
813
+
814
+ 12:34.183 --> 12:37.938
815
+ te va a quedar súper clara.
816
+ Pero de momento, por favor,
817
+
818
+ 12:38.064 --> 12:39.978
819
+ quiero que solamente
820
+ te quedes con la estructura
821
+
822
+ 12:40.103 --> 12:41.884
823
+ y que recuerdes, el switch es bueno
824
+
825
+ 12:42.010 --> 12:43.764
826
+ en grandes estructuras en C.
827
+
828
+ 12:43.922 --> 12:46.773
829
+ Es donde lo solemos utilizar
830
+ en máquinas de estado.
831
+
832
+ 12:46.899 --> 12:48.000
833
+ Es mejor que una máquina
834
+
835
+ 12:48.000 --> 12:50.958
836
+ de estados esté hecha
837
+ con switches versus Eaves
838
+
839
+ 12:51.083 --> 12:54.040
840
+ porque simplemente
841
+ tienes una gran estructura
842
+
843
+ 12:54.040 --> 12:56.701
844
+ general en donde tienes tus declaraciones.
845
+
846
+ 12:56.827 --> 12:59.851
847
+ Y aquí quiero que veas el código.
848
+ Tenemos nuestros valores constantes
849
+
850
+ 12:59.977 --> 13:03.215
851
+ que son case 0, tenemos nuestro case 1,
852
+
853
+ 13:03.341 --> 13:05.920
854
+ nuestro case 2 y ahí
855
+ vas a poner cada parte
856
+
857
+ 13:05.920 --> 13:07.930
858
+ de tu código que necesites que se ejecute
859
+
860
+ 13:08.056 --> 13:12.700
861
+ de forma específica
862
+ en un código C más grande.
863
+
864
+ 13:12.826 --> 13:18.360
865
+ Con esto dicho, pues nos vemos
866
+ en la siguiente clase.
subir/Curso de Control de Flujo en C/02-Toma de decisiones/04-Resumen.html ADDED
The diff for this file is too large to render. See raw diff
 
subir/Curso de Control de Flujo en C/02-Toma de decisiones/04-switch_26ee0200-c773-4d19-a0d9-ba7fc5b5f686.c ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <stdio.h>
2
+ int opt1 = 0;
3
+ int opt2 = 0;
4
+
5
+ int main()
6
+ {
7
+ printf("bienvenid a platzi store :\n");
8
+ printf("opcion 0 para platzi bebidas \n");
9
+ printf("opcion 1 para platzi comidas \n");
10
+ printf("opcion 2 para platzi postres \n");
11
+ switch (opt1 ){
12
+
13
+ case 0:
14
+ printf("usted eligio la opcion 0, vera nuestro menu de bebidas elija una:\n");
15
+ printf("opcion 0 para platzi cola cero \n");
16
+ printf("opcion 1 para platzi cola normal \n");
17
+ printf("opcion 2 para platzi pina colada \n");
18
+ switch (opt2)
19
+ {
20
+ case 0:
21
+ printf("usted eligio una platzi cola cero, mmm rico");
22
+ break;
23
+
24
+ default:
25
+ break;
26
+ }
27
+ break;
28
+ case 1:
29
+ /* Dispersar, correr a los intrusos */
30
+ break;
31
+ case 2:
32
+ /* Dispersar, correr a los intrusos */
33
+ break;
34
+ default:
35
+ break;
36
+ }
37
+ return 0;
38
+ }
39
+
40
+
subir/Curso de Control de Flujo en C/03-Control de Bucles en C/01-Bucle While en C Implementación y Ejemplos Prácticos.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:89dff8bddf4192a6f4d218201b047581a0ffc8d589414a995794414f85ac03c3
3
+ size 66311251
subir/Curso de Control de Flujo en C/03-Control de Bucles en C/01-Bucle While en C Implementación y Ejemplos Prácticos.vtt ADDED
@@ -0,0 +1,500 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ WEBVTT
2
+
3
+ 00:03.313 --> 00:08.561
4
+ Bueno, llegó el momento de hablar
5
+ de los bucles o ciclos en C.
6
+
7
+ 00:08.921 --> 00:12.244
8
+ Tú, cuando tienes un programa, muchas
9
+ veces vas a necesitar
10
+
11
+ 00:12.370 --> 00:16.040
12
+ que alguna parte de tu código se repita
13
+ bastante tiempo.
14
+
15
+ 00:16.218 --> 00:17.920
16
+ Regresando al ejemplo de nuestro robot,
17
+
18
+ 00:17.920 --> 00:19.969
19
+ sentinela o guardia de seguridad,
20
+
21
+ 00:20.095 --> 00:23.453
22
+ el bucle donde el robot
23
+ va a estar siempre,
24
+
25
+ 00:23.579 --> 00:29.202
26
+ siempre escaneando o buscando un ladrón
27
+
28
+ 00:29.328 --> 00:31.032
29
+ o alguien que está, algún intruso,
30
+
31
+ 00:31.158 --> 00:33.160
32
+ bueno, esto pues va a ser un bucle
33
+
34
+ 00:33.160 --> 00:36.393
35
+ porque el robot va a estar repitiendo
36
+ la misma acción
37
+
38
+ 00:36.519 --> 00:40.134
39
+ de encontrar un enemigo
40
+ hasta que lo encuentre.
41
+
42
+ 00:40.260 --> 00:41.320
43
+ Y una vez lo
44
+ encuentre,
45
+
46
+ 00:41.507 --> 00:43.944
47
+ no necesitaríamos
48
+ que se siga repitiendo eso
49
+
50
+ 00:44.070 --> 00:46.475
51
+ porque nos saldríamos de ese bucle
52
+ infinito
53
+
54
+ 00:46.601 --> 00:49.172
55
+ y nos iríamos a otra parte
56
+
57
+ 00:49.298 --> 00:52.515
58
+ que sería ya la parte de correr al ladrón
59
+ de la zona,
60
+
61
+ 00:52.641 --> 00:54.668
62
+ sonar la alarma, etcétera, etcétera.
63
+
64
+ 00:54.794 --> 00:58.014
65
+ Con esto dicho,
66
+ veamos el bucle while y do while
67
+
68
+ 00:58.140 --> 01:00.280
69
+ que nos van a servir
70
+ exactamente para esto.
71
+
72
+ 01:00.408 --> 01:02.885
73
+ Y te explico cómo funciona
74
+ en el lenguaje C.
75
+
76
+ 01:03.011 --> 01:05.136
77
+ En el lenguaje C, el bucle while
78
+
79
+ 01:05.262 --> 01:08.270
80
+ simple y sencillamente
81
+ evalúa una expresión, ¿ok?
82
+
83
+ 01:08.693 --> 01:12.471
84
+ Y evalúa la expresión siempre
85
+ y cuando la expresión sea true,
86
+
87
+ 01:12.597 --> 01:17.481
88
+ sea 1, el bucle se va a repetir y va a
89
+ reevaluar la expresión.
90
+
91
+ 01:17.607 --> 01:21.091
92
+ Si la expresión sigue siendo 1,
93
+ vuelve a repetir
94
+
95
+ 01:21.217 --> 01:23.080
96
+ y entonces evalúa otra vez la expresión.
97
+
98
+ 01:23.336 --> 01:25.339
99
+ Cuando la expresión sea 0,
100
+
101
+ 01:25.465 --> 01:29.568
102
+ es cuando se sale del bucle
103
+ y continúa la ejecución del programa
104
+
105
+ 01:29.694 --> 01:33.032
106
+ después de todo el bloque
107
+ que tengamos en nuestro while.
108
+
109
+ 01:33.158 --> 01:35.824
110
+ Ya estamos aquí en nuestra terminal
111
+ de Visual Studio Code,
112
+
113
+ 01:35.950 --> 01:38.330
114
+ vamos a abrir una nueva tab
115
+
116
+ 01:38.637 --> 01:42.684
117
+ y te voy a enseñar cómo funciona
118
+ a grandes rasgos el while.
119
+
120
+ 01:43.898 --> 01:45.080
121
+ Lo primero que hay que hacer, ya sabes,
122
+
123
+ 01:45.080 --> 01:46.974
124
+ control N para abrir una nueva pestaña,
125
+
126
+ 01:47.100 --> 01:50.422
127
+ control S para guardar,
128
+ vamos a ponerle while. c.
129
+
130
+ 01:50.548 --> 01:52.440
131
+ While se podría traducir como mientras,
132
+
133
+ 01:52.440 --> 01:56.729
134
+ así que mientras la condición se cumpla,
135
+
136
+ 01:56.855 --> 01:59.195
137
+ se va a ejecutar todo el bloque de código.
138
+
139
+ 01:59.455 --> 02:02.963
140
+ Cuando la condición se deja de cumplir,
141
+
142
+ 02:03.089 --> 02:05.627
143
+ entonces este bloque de código
144
+ se deja de ejecutar
145
+
146
+ 02:05.753 --> 02:08.160
147
+ y se retoma la ejecución
148
+ al final de este bloque,
149
+
150
+ 02:08.160 --> 02:10.400
151
+ o sea, aquí, todo lo que tengamos abajo.
152
+
153
+ 02:10.893 --> 02:14.720
154
+ ¿Qué es lo más importante que quiero
155
+ que tengas claro desde este momento?
156
+
157
+ 02:15.283 --> 02:17.520
158
+ Tú eres quien controla el while,
159
+
160
+ 02:17.760 --> 02:20.824
161
+ entonces dentro del while
162
+ tú debes de asegurarte
163
+
164
+ 02:20.950 --> 02:25.080
165
+ cuál es la instrucción que va a cambiar
166
+ para que nuestro while se salga.
167
+
168
+ 02:25.080 --> 02:25.956
169
+ ¿Ok?
170
+
171
+ 02:25.982 --> 02:29.106
172
+ Eso es lo más importante que debes
173
+ de tener en cuenta.
174
+
175
+ 02:29.232 --> 02:31.950
176
+ Si tú no le das una opción al while
177
+ de que se salga,
178
+
179
+ 02:32.076 --> 02:33.570
180
+ entonces nunca se va a salir
181
+
182
+ 02:33.696 --> 02:36.991
183
+ y entonces estaríamos
184
+ en un problema grave,
185
+
186
+ 02:37.117 --> 02:40.400
187
+ porque tu código se quedaría atorado
188
+ ahí de forma infinita
189
+
190
+ 02:40.400 --> 02:43.200
191
+ y simple y sencillamente
192
+ no haría nada más.
193
+
194
+ 02:43.510 --> 02:46.105
195
+ Veamos ya un ejemplo en código,
196
+ el while es súper simple.
197
+
198
+ 02:46.545 --> 02:48.840
199
+ Vamos a crear la estructura de siempre,
200
+
201
+ 02:48.840 --> 02:53.770
202
+ vamos a importar,
203
+ incluir nuestra librería
204
+
205
+ 02:54.383 --> 02:57.607
206
+ standard de input output main.
207
+
208
+ 02:59.706 --> 03:00.706
209
+ Perfecto.
210
+
211
+ 03:01.580 --> 03:03.750
212
+ Vamos a quitarle esto.
213
+
214
+ 03:04.043 --> 03:06.904
215
+ Vamos y ya aquí está todo donde
216
+ debería ir todo el código,
217
+
218
+ 03:07.030 --> 03:09.741
219
+ todo está excelente,
220
+ vamos a poner nuestro while ahí.
221
+
222
+ 03:09.867 --> 03:12.120
223
+ Y quiero que hagamos algo súper simple,
224
+
225
+ 03:12.120 --> 03:16.046
226
+ quiero que veas el funcionamiento
227
+ de un while en acción.
228
+
229
+ 03:16.172 --> 03:19.634
230
+ Así que vamos a declarar una variable n
231
+ del tipo entero,
232
+
233
+ 03:19.760 --> 03:23.886
234
+ int n va a ser igual a 20, punto y coma.
235
+
236
+ 03:24.766 --> 03:28.094
237
+ Y quiero que simplemente veas
238
+ el while en acción.
239
+
240
+ 03:28.220 --> 03:35.203
241
+ Entonces voy a decir que mientras n sea
242
+ mayor a 10, voy a imprimir,
243
+
244
+ 03:38.866 --> 03:40.266
245
+ voy a imprimir,
246
+
247
+ 03:41.719 --> 03:47.023
248
+ n es igual a, vamos a poner por ciento de,
249
+
250
+ 03:47.149 --> 03:49.803
251
+ para poner nuestro decimal aquí,
252
+ por ciento de,
253
+
254
+ 03:49.929 --> 03:52.000
255
+ coma y la variable que vamos a estar
256
+ imprimiendo,
257
+
258
+ 03:52.000 --> 03:53.840
259
+ que en este caso será n.
260
+
261
+ 03:53.840 --> 03:54.907
262
+ Excelente.
263
+
264
+ 03:55.081 --> 03:58.529
265
+ Guardamos y luego quiero que hagamos
266
+ una pequeña operación de resta.
267
+
268
+ 03:58.655 --> 04:03.040
269
+ Además del por ciento de hay que poner
270
+ un salto de línea
271
+
272
+ 04:03.040 --> 04:07.030
273
+ para que todo se vaya escribiendo
274
+ en una línea más abajo y así sucesivamente.
275
+
276
+ 04:07.630 --> 04:09.240
277
+ Y esto va aquí.
278
+
279
+ 04:10.661 --> 04:11.754
280
+ Excelente.
281
+
282
+ 04:12.001 --> 04:14.920
283
+ Luego voy a hacer una pequeña operación
284
+ aritmética.
285
+
286
+ 04:14.920 --> 04:22.115
287
+ n va a ser igual a n menos 1,
288
+ punto y coma.
289
+
290
+ 04:23.022 --> 04:24.196
291
+ ¿Qué estoy haciendo aquí?
292
+
293
+ 04:24.322 --> 04:27.383
294
+ Que cada ciclo le resto un 1 a n.
295
+
296
+ 04:27.509 --> 04:30.880
297
+ Cada que se repite mi while
298
+ yo le resto un 1 a n.
299
+
300
+ 04:30.880 --> 04:31.921
301
+ ¿Qué va a pasar?
302
+
303
+ 04:32.047 --> 04:35.035
304
+ Pues que n en algún punto
305
+ va a dejar de ser mayor que 10.
306
+
307
+ 04:35.457 --> 04:37.786
308
+ Entonces vamos a ver qué pasa.
309
+
310
+ 04:38.892 --> 04:41.238
311
+ Y aquí deberíamos de poner otro print.
312
+
313
+ 04:42.598 --> 04:45.515
314
+ Y mira que aquí tengo un grave error
315
+ que no he dentado el while.
316
+
317
+ 04:45.754 --> 04:47.432
318
+ Lo corregimos fácilmente.
319
+
320
+ 04:49.925 --> 04:52.411
321
+ Corregimos todo, corregimos todo.
322
+
323
+ 04:54.934 --> 04:57.375
324
+ Y ponemos este acá.
325
+
326
+ 04:57.713 --> 04:58.913
327
+ Excelente.
328
+
329
+ 04:59.535 --> 05:00.872
330
+ Todo bello ahora, sí.
331
+
332
+ 05:01.186 --> 05:03.040
333
+ Por último voy a poner un print.
334
+
335
+ 05:04.623 --> 05:11.594
336
+ Y este print va a decir
337
+ el ciclo while ha salido.
338
+
339
+ 05:11.974 --> 05:16.630
340
+ El bucle se ha saltado.
341
+
342
+ 05:18.687 --> 05:21.173
343
+ ¿Hemos salido del bucle
344
+ sería lo correcto en español?
345
+
346
+ 05:21.933 --> 05:27.551
347
+ Hemos salido del bucle porque n
348
+
349
+ 05:27.677 --> 05:31.337
350
+ es igual o menor que 10.
351
+
352
+ 05:32.110 --> 05:34.123
353
+ Excelente.
354
+ Punto y coma.
355
+
356
+ 05:34.249 --> 05:37.406
357
+ Y ya solo nos falta el return igual,
358
+ el return 0.
359
+
360
+ 05:39.273 --> 05:40.532
361
+ Punto y coma.
362
+
363
+ 05:41.225 --> 05:42.726
364
+ Uf, un typo acá.
365
+
366
+ 05:42.852 --> 05:43.749
367
+ Muy bien.
368
+
369
+ 05:43.962 --> 05:45.200
370
+ Todo perfecto.
371
+
372
+ 05:45.719 --> 05:46.859
373
+ ¿Qué debería pasar aquí?
374
+
375
+ 05:46.985 --> 05:48.214
376
+ Vamos a entrar al while.
377
+
378
+ 05:48.340 --> 05:51.401
379
+ Se va a verificar la expresión n
380
+ es mayor que 10.
381
+
382
+ 05:51.527 --> 05:52.289
383
+ ¿Sí o no?
384
+
385
+ 05:52.415 --> 05:55.509
386
+ Sí, porque n es 20 y 20 es mayor que 10.
387
+
388
+ 05:55.863 --> 05:58.502
389
+ Entonces mientras esto se cumpla,
390
+
391
+ 05:58.628 --> 06:01.288
392
+ se va a ejecutar este código
393
+ que tenemos aquí adentro
394
+
395
+ 06:01.414 --> 06:04.336
396
+ hasta que se deje de cumplir
397
+ y nos salgamos.
398
+
399
+ 06:04.462 --> 06:08.080
400
+ Vamos a guardar y vamos a compilar
401
+ nuestro programa.
402
+
403
+ 06:08.379 --> 06:09.299
404
+ Muy bien.
405
+
406
+ 06:09.425 --> 06:11.080
407
+ Y mira que se imprime correctamente.
408
+
409
+ 06:11.080 --> 06:13.514
410
+ n es igual a 20, luego le restamos 1,
411
+
412
+ 06:13.640 --> 06:16.670
413
+ se repite, evalúa la expresión y 19.
414
+
415
+ 06:16.943 --> 06:18.288
416
+ ¿19 es mayor que 10?
417
+
418
+ 06:18.414 --> 06:18.974
419
+ Sí.
420
+
421
+ 06:19.100 --> 06:21.720
422
+ Entonces lo imprime, le resta 1 y es 18.
423
+
424
+ 06:21.884 --> 06:23.225
425
+ ¿18 es mayor que 10?
426
+
427
+ 06:23.351 --> 06:23.951
428
+ Sí.
429
+
430
+ 06:24.077 --> 06:25.143
431
+ Y así hasta 11.
432
+
433
+ 06:25.269 --> 06:26.800
434
+ A 11 se le resta 1.
435
+
436
+ 06:26.926 --> 06:28.313
437
+ ¿10 es mayor que 10?
438
+
439
+ 06:28.439 --> 06:28.966
440
+ No.
441
+
442
+ 06:29.092 --> 06:30.928
443
+ Y nos dice hemos salido del bucle,
444
+
445
+ 06:31.054 --> 06:32.680
446
+ porque n es igual o menor que 10.
447
+
448
+ 06:32.680 --> 06:33.851
449
+ Se me fue una S.
450
+
451
+ 06:34.078 --> 06:38.122
452
+ Ahí, bueno, no pasa nada,
453
+ la agregamos y todo bello.
454
+
455
+ 06:38.248 --> 06:43.280
456
+ Ahora, ¿qué pasa si nosotros de una
457
+ declaramos 10 como nuestra variable?
458
+
459
+ 06:43.280 --> 06:44.476
460
+ ¿Qué debería pasar?
461
+
462
+ 06:44.602 --> 06:47.139
463
+ Piénsalo por favor y cuéntame
464
+ en los comentarios.
465
+
466
+ 06:47.265 --> 06:50.496
467
+ Vamos con fn, f6, en mi caso porque tengo
468
+ un laptop,
469
+
470
+ 06:50.622 --> 06:51.949
471
+ compilamos y ejecutamos,
472
+
473
+ 06:52.075 --> 06:55.630
474
+ y dice hemos salido del bucle porque n
475
+ es igual o menor que 10.
476
+
477
+ 06:55.756 --> 06:59.316
478
+ Como evaluamos la expresión
479
+ y fue 0 desde el principio,
480
+
481
+ 06:59.442 --> 07:02.930
482
+ nunca entramos aquí,
483
+ nunca entramos ni una sola vez.
484
+
485
+ 07:03.056 --> 07:06.620
486
+ Pero, ¿qué pasa si tú quisieras entrar
487
+ al menos una vez?
488
+
489
+ 07:06.746 --> 07:09.120
490
+ Porque tu programa lo amerita.
491
+
492
+ 07:09.553 --> 07:10.513
493
+ ¿Qué pasa ahí?
494
+
495
+ 07:10.639 --> 07:12.820
496
+ Bueno, para eso existe el do while,
497
+
498
+ 07:12.946 --> 07:18.720
499
+ y es lo que vamos a aprender
500
+ en la próxima clase.
subir/Curso de Control de Flujo en C/03-Control de Bucles en C/01-Resumen.html ADDED
The diff for this file is too large to render. See raw diff
 
subir/Curso de Control de Flujo en C/03-Control de Bucles en C/01-while_189ccca7-d3a5-4d0c-8408-4fc807afdccd.c ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include <stdio.h>
2
+ int n = 10;
3
+ int main()
4
+ {
5
+ while (n > 10){
6
+ printf("n es igual a %d\n", n);
7
+ n = n-1;
8
+ }
9
+ printf("hemos salido del bucle porque n es igual o menor que 10");
10
+ return 0;
11
+ }
12
+
13
+
14
+
subir/Curso de Control de Flujo en C/03-Control de Bucles en C/02-Ciclos WHILE y DOWHILE en Programación.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b3e0cd212c53c5528720a189356438a64ca96c70673afb8424fd2dc33e7cb762
3
+ size 69648787
subir/Curso de Control de Flujo en C/03-Control de Bucles en C/02-Ciclos WHILE y DOWHILE en Programación.vtt ADDED
@@ -0,0 +1,490 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ WEBVTT
2
+
3
+ 00:03.140 --> 00:06.954
4
+ Más adelante veremos el tercer bucle
5
+ que es el ciclo FOR.
6
+
7
+ 00:07.080 --> 00:10.160
8
+ Pero desde ya quiero que vayas teniendo
9
+ clara una cosa.
10
+
11
+ 00:10.712 --> 00:17.040
12
+ Los ciclos WHILE los vamos a utilizar como
13
+ ejecución condicional en nuestro código.
14
+
15
+ 00:17.507 --> 00:22.580
16
+ Es decir, tenemos que poner una condición
17
+ y si se cumple vamos a ejecutarlo.
18
+
19
+ 00:22.886 --> 00:25.480
20
+ El ejemplo que te puse va a ser igual
21
+ para un ciclo FOR.
22
+
23
+ 00:25.665 --> 00:26.390
24
+ ¿Por qué?
25
+
26
+ 00:26.516 --> 00:31.320
27
+ Porque el ciclo FOR siempre lo vamos a
28
+ usar cuando nosotros sepamos cuál
29
+
30
+ 00:31.320 --> 00:33.440
31
+ es la cantidad de elementos
32
+ que querramos iterar.
33
+
34
+ 00:33.440 --> 00:35.040
35
+ ¿Ok?
36
+ Toma en cuenta eso.
37
+
38
+ 00:35.040 --> 00:39.063
39
+ Ciclo FOR, cuando tú tengas claro cuántos
40
+ elementos vas a iterar.
41
+
42
+ 00:39.203 --> 00:44.480
43
+ Ciclo WHILE, cuando vayas a hacer
44
+ una ejecución condicional de tu bucle.
45
+
46
+ 00:44.930 --> 00:50.234
47
+ Y aquí de nuevo, un WHILE, por ejemplo,
48
+ podría ser para un robot de minisumo.
49
+
50
+ 00:50.360 --> 00:52.198
51
+ Que los minisumos
52
+ son estos pequeños robots
53
+
54
+ 00:52.323 --> 00:54.400
55
+ que se tienen que encontrar unos a otros
56
+
57
+ 00:54.400 --> 00:57.080
58
+ y sacar del dojo, como los sumos grandes
59
+ pero en robótico.
60
+
61
+ 00:57.536 --> 01:02.240
62
+ Bueno, un WHILE podría ser mientras estás
63
+ en la rutina de búsqueda y la condición
64
+
65
+ 01:02.240 --> 01:07.342
66
+ sería que si encontraste algo, entonces el
67
+ WHILE se deja de cumplir, te sales de ahí
68
+
69
+ 01:07.468 --> 01:11.061
70
+ y comienzas a otra rutina
71
+ que sería de persecución
72
+
73
+ 01:11.187 --> 01:13.551
74
+ al objetivo que has encontrado
75
+ y de sacarlo.
76
+
77
+ 01:13.951 --> 01:16.381
78
+ Eso sería un ejemplo de
79
+ una ejecución condicional
80
+
81
+ 01:16.507 --> 01:18.672
82
+ en donde depende de factores externos.
83
+
84
+ 01:18.798 --> 01:21.116
85
+ Por ejemplo, de que el usuario
86
+ ponga un input,
87
+
88
+ 01:21.242 --> 01:22.880
89
+ de que tu robot detecte algo,
90
+
91
+ 01:23.125 --> 01:26.840
92
+ de que tu software sienta o vea un cambio
93
+ en su programa.
94
+
95
+ 01:27.267 --> 01:30.302
96
+ Esto es lo que nosotros vamos a estar
97
+ buscando con los ciclos WHILE.
98
+
99
+ 01:30.428 --> 01:34.447
100
+ Estos pequeños cambios que si no ocurren,
101
+ todo está cool,
102
+
103
+ 01:34.573 --> 01:37.899
104
+ todo está bien y el programa se puede
105
+ seguir bucleando.
106
+
107
+ 01:38.319 --> 01:39.480
108
+ ¿Todo claro? Muy bien.
109
+
110
+ 01:39.936 --> 01:44.400
111
+ Otro ejemplo de este caso de uso, por
112
+ ejemplo en C o en cuestiones de drivers,
113
+
114
+ 01:44.400 --> 01:47.259
115
+ podría ser un WHILE para que mientras
116
+
117
+ 01:47.384 --> 01:50.976
118
+ se están pasando archivos
119
+ de un chip a otro chip,
120
+
121
+ 01:51.102 --> 01:53.806
122
+ ok, mientras hay una
123
+ transferencia de archivos,
124
+
125
+ 01:53.932 --> 01:56.396
126
+ no hagas nada,
127
+ simplemente transfiera archivos.
128
+
129
+ 01:56.536 --> 01:58.458
130
+ Cuando terminó la transferencia,
131
+
132
+ 01:58.583 --> 02:00.920
133
+ te podrías salir del ciclo WHILE y podrías
134
+
135
+ 02:00.920 --> 02:03.200
136
+ simple y sencillamente continuar
137
+ con la ejecución de tu programa.
138
+
139
+ 02:03.752 --> 02:05.649
140
+ ¿Cuál es la clave aquí?
141
+
142
+ 02:05.929 --> 02:09.470
143
+ Que tú no sabes de antemano
144
+ cuándo vas a acabar,
145
+
146
+ 02:09.596 --> 02:11.440
147
+ por ejemplo,
148
+ la transferencia de archivos.
149
+
150
+ 02:11.440 --> 02:16.400
151
+ Tú no sabes de antemano cuándo vas
152
+ a detectar algún cambio en tus sensores.
153
+
154
+ 02:16.400 --> 02:19.659
155
+ Imagínate que haces
156
+ un proyecto que se encarga de cerrar
157
+
158
+ 02:19.785 --> 02:22.135
159
+ automáticamente tus ventanas
160
+ cuando detecta lluvia.
161
+
162
+ 02:22.502 --> 02:24.439
163
+ ¿Tú sabes cuándo va a llover?
164
+ No.
165
+
166
+ 02:24.565 --> 02:28.625
167
+ Entonces tienes que tener un WHILE que
168
+ esté constantemente esperando a la lluvia
169
+
170
+ 02:28.751 --> 02:32.355
171
+ y cuando llegue la lluvia,
172
+ entonces mientras no haya lluvia,
173
+
174
+ 02:32.481 --> 02:34.471
175
+ el WHILE sigue ahí buscando lluvia.
176
+
177
+ 02:34.845 --> 02:37.095
178
+ Y tú no sabes cuándo va a llover,
179
+ nadie sabe.
180
+
181
+ 02:37.262 --> 02:41.390
182
+ Y cuando llega la lluvia, entonces el
183
+ WHILE detecta la lluvia con tu sensor,
184
+
185
+ 02:41.516 --> 02:44.260
186
+ cambias una variable
187
+ para que la condición
188
+
189
+ 02:44.386 --> 02:46.840
190
+ se deje de cumplir
191
+ y te vas al resto del código,
192
+
193
+ 02:46.840 --> 02:49.800
194
+ que sería simple y sencillamente
195
+ cerrar la ventana.
196
+
197
+ 02:50.473 --> 02:54.726
198
+ ¿Qué pasa con esto?
199
+ El WHILE es una herramienta
200
+
201
+ 02:54.852 --> 02:57.400
202
+ poderosísima y quiero
203
+ que te quede claro
204
+
205
+ 02:57.400 --> 03:02.410
206
+ que se utiliza para bucles cuando
207
+ tienen una ejecución condicional.
208
+
209
+ 03:02.536 --> 03:07.474
210
+ Con esto dicho, vamos a ver al hermano
211
+ del WHILE que es el doWHILE allá.
212
+
213
+ 03:07.600 --> 03:08.480
214
+ Vamos a eso.
215
+
216
+ 03:08.606 --> 03:11.027
217
+ Creamos un nuevo archivo
218
+ en nuestro editor y lo guardamos.
219
+
220
+ 03:11.153 --> 03:13.393
221
+ Este
222
+ se va a llamar doWHILE,
223
+
224
+ 03:13.519 --> 03:16.647
225
+ que significaría haz mientras.c.
226
+
227
+ 03:17.894 --> 03:20.218
228
+ La estructura básica de nuestro doWHILE
229
+
230
+ 03:20.343 --> 03:23.561
231
+ va a ser bien, bien parecida,
232
+ sólo que al revés.
233
+
234
+ 03:23.687 --> 03:26.138
235
+ Nosotros vamos a inicializarlo con un do,
236
+
237
+ 03:26.264 --> 03:29.481
238
+ vamos a poner todo el código
239
+ de nuestro programa
240
+
241
+ 03:29.607 --> 03:31.929
242
+ y vamos a checar con nuestro condicional.
243
+
244
+ 03:32.150 --> 03:36.142
245
+ ¿Qué ganamos
246
+ con poner nuestra condicional al final?
247
+
248
+ 03:36.382 --> 03:39.301
249
+ Ganamos algo muy importante
250
+ en ciertos casos
251
+
252
+ 03:39.427 --> 03:44.869
253
+ y es que vamos a ejecutar
254
+ el código al menos una sola vez.
255
+
256
+ 03:44.995 --> 03:48.532
257
+ Es decir, aunque
258
+ en el WHILE tradicional
259
+
260
+ 03:48.658 --> 03:51.047
261
+ si la condición no se
262
+ cumple desde el principio,
263
+
264
+ 03:51.173 --> 03:55.006
265
+ no lo ejecutamos nunca, pero en el doWHILE
266
+ lo hacemos al menos una vez.
267
+
268
+ 03:55.132 --> 03:57.369
269
+ Imagínate que tuvieras
270
+ que programar un código
271
+
272
+ 03:57.495 --> 03:59.200
273
+ de muy bajo nivel en donde te encargas
274
+
275
+ 03:59.200 --> 04:03.451
276
+ de la transferencia de archivos
277
+ en tu sistema operativo. ¡Uy, qué miedo!
278
+
279
+ 04:03.577 --> 04:06.495
280
+ Pues no, simplemente tendrías
281
+ que ver cómo lo hace Windows,
282
+
283
+ 04:06.621 --> 04:08.690
284
+ qué variables te da, qué objetos tienes
285
+
286
+ 04:08.913 --> 04:13.287
287
+ y podrías hacer un doWHILE.
288
+ ¿Por qué? Porque dentro de esta subrutina,
289
+
290
+ 04:13.413 --> 04:15.353
291
+ dentro de tu
292
+ doWHILE podrías verificar
293
+
294
+ 04:15.479 --> 04:18.738
295
+ cuál es el peso del archivo,
296
+ ya que lo necesitas saber
297
+
298
+ 04:18.863 --> 04:22.320
299
+ al menos una vez.
300
+ Si tú no sabes cuál es
301
+
302
+ 04:22.320 --> 04:25.134
303
+ el peso del archivo, ¿cómo
304
+ vas a saber si ya terminaste
305
+
306
+ 04:25.259 --> 04:28.738
307
+ de transferirlo o no? Entonces podríamos
308
+ hacerlo con un doWHILE.
309
+
310
+ 04:28.864 --> 04:31.561
311
+ Verificamos el peso del archivo
312
+ y verificamos que aún
313
+
314
+ 04:31.687 --> 04:34.019
315
+ no hayamos transferido una cantidad igual
316
+
317
+ 04:34.145 --> 04:36.278
318
+ al peso del archivo y repetimos
319
+
320
+ 04:36.403 --> 04:40.888
321
+ el bucle hasta que ya
322
+ el archivo completo se transfirió.
323
+
324
+ 04:41.014 --> 04:43.245
325
+ Y así de fácil podríamos
326
+ ver un caso de uso.
327
+
328
+ 04:43.371 --> 04:45.249
329
+ Entonces siempre que tú digas,
330
+
331
+ 04:45.375 --> 04:47.514
332
+ ah, pero yo necesito que se haga
333
+ al menos una vez esto.
334
+
335
+ 04:47.640 --> 04:49.732
336
+ ¿Y cuándo vas a, como programadora
337
+
338
+ 04:49.858 --> 04:51.759
339
+ o como programador, tener estos casos?
340
+
341
+ 04:51.885 --> 04:53.736
342
+ Cuando tienes que inicializar algo.
343
+
344
+ 04:54.043 --> 04:56.080
345
+ Imagínate que tienes un robot
346
+
347
+ 04:56.080 --> 04:59.033
348
+ y tienes que asegurarte,
349
+ antes de que el robot haga cualquier cosa,
350
+
351
+ 04:59.159 --> 05:00.924
352
+ tienes que asegurarte de que el robot
353
+
354
+ 05:01.050 --> 05:03.409
355
+ está sensando de forma correcta,
356
+
357
+ 05:03.534 --> 05:06.626
358
+ de que los sensores están funcionando.
359
+ Entonces podríamos
360
+
361
+ 05:06.752 --> 05:09.476
362
+ hacer un código de inicialización
363
+ que utilice un doWHILE,
364
+
365
+ 05:09.736 --> 05:12.394
366
+ que diga, ok, el sensor 1,
367
+ le mandas un voltaje,
368
+
369
+ 05:12.520 --> 05:14.050
370
+ esperas una respuesta del sensor,
371
+
372
+ 05:14.176 --> 05:16.973
373
+ si hay respuesta entonces
374
+ ok, el sensor funcionó.
375
+
376
+ 05:17.480 --> 05:20.347
377
+ Y si no hay respuesta,
378
+ y eso puede ser la primera vez
379
+
380
+ 05:20.473 --> 05:22.017
381
+ que ejecutas tu código, ¿no?
382
+
383
+ 05:22.143 --> 05:23.940
384
+ Todos los sensores
385
+ funcionaron en la primera,
386
+
387
+ 05:24.066 --> 05:26.674
388
+ pero si no funcionaron en la primera,
389
+ simplemente repites
390
+
391
+ 05:26.800 --> 05:30.480
392
+ ese código hasta que
393
+ todos los sensores estén inicializados
394
+
395
+ 05:30.606 --> 05:32.890
396
+ y ahí sí puedes decir, ah, ok,
397
+ mi robot está perfecto.
398
+
399
+ 05:33.016 --> 05:36.507
400
+ Yo lo hacía, este tipo
401
+ de subroutinas de inicialización
402
+
403
+ 05:36.633 --> 05:39.097
404
+ son buenas porque tú tienes que verificar
405
+
406
+ 05:39.223 --> 05:40.318
407
+ de alguna forma que los sensores
408
+
409
+ 05:40.443 --> 05:43.740
410
+ están funcionando
411
+ o todo tu código va a ser inútil.
412
+
413
+ 05:43.866 --> 05:46.179
414
+ En robótica, si tu sensor está roto,
415
+
416
+ 05:46.305 --> 05:50.176
417
+ tu código podrá estar escrito
418
+ con las mejores prácticas y perfecto,
419
+
420
+ 05:50.302 --> 05:51.829
421
+ pero si el sensor no te manda inputs,
422
+
423
+ 05:51.955 --> 05:54.232
424
+ no te manda valores,
425
+ tu robot no va a hacer nada.
426
+
427
+ 05:54.358 --> 05:55.815
428
+ Por eso es un buen uso.
429
+
430
+ 05:55.940 --> 05:59.417
431
+ Inicialización de cosas
432
+ es un muy buen uso del do-while.
433
+
434
+ 05:59.630 --> 06:01.401
435
+ Te voy a dejar un desafío.
436
+
437
+ 06:01.527 --> 06:04.600
438
+ Este desafío va a ser que el
439
+ while que hicimos aquí,
440
+
441
+ 06:04.600 --> 06:07.158
442
+ que lo pases a la estructura
443
+ de do-while, solo para que la veas
444
+
445
+ 06:07.283 --> 06:09.840
446
+ en funcionamiento.
447
+ Más adelante, ya cuando
448
+
449
+ 06:09.840 --> 06:12.702
450
+ veamos arrays, podremos
451
+ ver ejemplos más completos de esto.
452
+
453
+ 06:13.042 --> 06:14.920
454
+ Pero mientras, te dejo ese desafío
455
+
456
+ 06:14.920 --> 06:18.178
457
+ porque es el mismo código
458
+ que tenemos acá, técnicamente,
459
+
460
+ 06:18.303 --> 06:20.886
461
+ simplemente lo tienes que reacomodar.
462
+
463
+ 06:21.012 --> 06:24.557
464
+ Y muéstrame si entendiste
465
+ las diferencias, piensa un caso
466
+
467
+ 06:24.683 --> 06:27.680
468
+ de uso que tú tendrías.
469
+ Puede ser en robótica,
470
+
471
+ 06:27.680 --> 06:30.435
472
+ puede ser en cuestiones
473
+ de desarrollo de software tradicional,
474
+
475
+ 06:30.561 --> 06:32.439
476
+ lo que se te ocurra. Cuéntame,
477
+
478
+ 06:32.565 --> 06:36.320
479
+ do y do-while, que sea tu apunte
480
+ en donde me dejas claras
481
+
482
+ 06:36.446 --> 06:38.240
483
+ las diferencias y nos vemos
484
+
485
+ 06:38.240 --> 06:40.333
486
+ con esto en la última clase
487
+ de este módulo,
488
+
489
+ 06:40.459 --> 06:43.396
490
+ en donde veremos el ciclo for.
subir/Curso de Control de Flujo en C/03-Control de Bucles en C/02-Resumen.html ADDED
The diff for this file is too large to render. See raw diff
 
subir/Curso de Control de Flujo en C/03-Control de Bucles en C/02-dowhile_093e5362-d724-4dea-b1c3-7269ab208dd6.c ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ do
2
+ {
3
+ /* code */
4
+ } while (/* condition */);
subir/Curso de Control de Flujo en C/03-Control de Bucles en C/03-Lecturas recomendadas.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ https://youtu.be/X_yQUzzl1qM
2
+ https://youtu.be/i678o8yDSKY
3
+ https://youtu.be/LO6kESS-Lu8
subir/Curso de Control de Flujo en C/03-Control de Bucles en C/03-Resumen.html ADDED
The diff for this file is too large to render. See raw diff
 
subir/Curso de Control de Flujo en C/03-Control de Bucles en C/03-Uso del Ciclo FOR en Programación en C.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e76378bc8513d0a9587161935885c0d044ed5c3f6ec10da8d59ac0a992fe833e
3
+ size 62309502
subir/Curso de Control de Flujo en C/03-Control de Bucles en C/03-Uso del Ciclo FOR en Programación en C.vtt ADDED
@@ -0,0 +1,416 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ WEBVTT
2
+
3
+ 00:03.366 --> 00:05.321
4
+ El ciclo FOR lo vamos
5
+ a utilizar siempre
6
+
7
+ 00:05.447 --> 00:07.874
8
+ que tengamos clara
9
+ la cantidad de elementos
10
+
11
+ 00:08.000 --> 00:12.200
12
+ que vamos a analizar o a recorrer o que
13
+ esperamos tener simple y sencillamente.
14
+
15
+ 00:12.555 --> 00:14.080
16
+ Te voy a mostrar cómo se escribe.
17
+
18
+ 00:14.481 --> 00:16.412
19
+ Lo primero es crear un nuevo archivo.
20
+
21
+ 00:16.538 --> 00:18.727
22
+ Vamos a declarar nuestro ciclo FOR.
23
+
24
+ 00:18.853 --> 00:22.549
25
+ Ah, primero hay que guardarlo,
26
+ por supuesto, FOR.C.
27
+
28
+ 00:22.936 --> 00:27.147
29
+ Vamos a escribir FOR
30
+ y vamos a declarar nuestro bucle.
31
+
32
+ 00:27.273 --> 00:31.741
33
+ La forma más tradicional del FOR
34
+ es i igual a cero.
35
+
36
+ 00:31.867 --> 00:36.279
37
+ Vamos a inicializar nuestra variable i
38
+ en algún valor.
39
+
40
+ 00:36.432 --> 00:40.440
41
+ Luego vamos a decir un condicional
42
+ que siempre va a ser i mayor que,
43
+
44
+ 00:40.440 --> 00:43.126
45
+ i menor que, i igual o mayor que, etc.
46
+
47
+ 00:43.412 --> 00:50.040
48
+ Por ejemplo, cuando i es menor que n,
49
+ entonces suma i más más.
50
+
51
+ 00:52.770 --> 00:54.503
52
+ Esto sería el ciclo FOR.
53
+
54
+ 00:54.629 --> 00:56.480
55
+ Así de simple, así de sencillo.
56
+
57
+ 00:56.480 --> 00:58.042
58
+ Obviamente podremos tener llaves.
59
+
60
+ 00:58.168 --> 01:02.333
61
+ Vamos a poner un printf y en este printf
62
+
63
+ 01:02.459 --> 01:09.044
64
+ yo voy a decirle el valor actual de i es,
65
+
66
+ 01:09.691 --> 01:13.657
67
+ por ciento de, salto de línea, slash n,
68
+
69
+ 01:14.323 --> 01:17.310
70
+ muy bien, i coma la variable i.
71
+
72
+ 01:18.480 --> 01:23.708
73
+ Ahí lo que estamos haciendo es simple
74
+ y sencillamente recorrer un número,
75
+
76
+ 01:23.834 --> 01:25.941
77
+ un set dado que va a ser n.
78
+
79
+ 01:26.067 --> 01:29.191
80
+ Nosotros ya tenemos que saber cuál
81
+ va a ser el tamaño de n
82
+
83
+ 01:29.317 --> 01:31.892
84
+ y lo vamos a ir recorriendo en intervalos
85
+ de uno.
86
+
87
+ 01:32.018 --> 01:35.469
88
+ Y más más simplemente
89
+ le suma un uno a esto.
90
+
91
+ 01:35.595 --> 01:37.945
92
+ Ya te voy a mostrar para que te quede
93
+ mucho más claro.
94
+
95
+ 01:38.432 --> 01:40.703
96
+ Vamos a hacer esto justo ahora,
97
+
98
+ 01:40.829 --> 01:44.686
99
+ pero quiero que te vaya quedando claro
100
+ que el ciclo FOR nos va a servir
101
+
102
+ 01:44.812 --> 01:48.903
103
+ cuando nosotros conocemos el tamaño
104
+ del objeto que queremos recorrer.
105
+
106
+ 01:49.029 --> 01:53.763
107
+ Y más precisamente, se suelen utilizar
108
+ muchísimo para hacer recorridos de arrays.
109
+
110
+ 01:53.923 --> 01:57.120
111
+ Así que hagamos todo el boilerplate
112
+ de nuestro código.
113
+
114
+ 01:57.246 --> 02:03.067
115
+ Vamos a declarar hashtag include,
116
+ vamos a ponerle stdio.h,
117
+
118
+ 02:03.800 --> 02:06.508
119
+ vamos a cerrar y declaramos nuestro main.
120
+
121
+ 02:06.846 --> 02:08.321
122
+ Muy bien.
123
+
124
+ 02:09.940 --> 02:11.180
125
+ Borramos esto.
126
+
127
+ 02:11.865 --> 02:14.199
128
+ Vamos aquí a poner todo el código
129
+
130
+ 02:14.325 --> 02:16.565
131
+ que acabamos de escribir
132
+ para que no se pierda.
133
+
134
+ 02:16.966 --> 02:20.784
135
+ Vamos a ponerlo acá y como bien sabes,
136
+ no necesito crear este FOR,
137
+
138
+ 02:20.910 --> 02:22.734
139
+ o sea, no necesito que sea un bloque
140
+
141
+ 02:22.860 --> 02:26.431
142
+ porque ya de por sí solo tengo
143
+ una línea de código.
144
+
145
+ 02:26.671 --> 02:28.717
146
+ Así que vamos a quitarle estas llaves.
147
+
148
+ 02:29.366 --> 02:31.286
149
+ Hay que seguir las buenas prácticas.
150
+
151
+ 02:32.503 --> 02:34.960
152
+ Y con esto nos falta un par de cosas.
153
+
154
+ 02:34.960 --> 02:36.440
155
+ Lo primero es declarar n.
156
+
157
+ 02:36.841 --> 02:41.760
158
+ int, ¿qué va a ser n?
159
+
160
+ 02:41.760 --> 02:46.920
161
+ Va a ser igual a, no sé, vamos a ponerlo
162
+ que n sea igual a 1.
163
+
164
+ 02:48.941 --> 02:52.680
165
+ No, n tiene que ser más o menos un 30.
166
+
167
+ 02:52.959 --> 02:54.039
168
+ Bien, punto y coma.
169
+
170
+ 02:54.345 --> 02:58.310
171
+ Digamos que queremos recorrer un array
172
+ de 30 posiciones totales.
173
+
174
+ 02:58.735 --> 03:01.137
175
+ Y, y va a ser inicializada en 0.
176
+
177
+ 03:01.263 --> 03:06.602
178
+ Es decir, y va a empezar en 0,
179
+ va a ir a 1, 2, 3, 4, hasta que sea 30.
180
+
181
+ 03:06.728 --> 03:11.090
182
+ Y cuando y sea 30, entonces,
183
+ ¿30 es menor que 30?
184
+
185
+ 03:11.216 --> 03:11.976
186
+ No.
187
+
188
+ 03:12.102 --> 03:14.466
189
+ Y ahí se va a cumplir absolutamente todo.
190
+
191
+ 03:14.592 --> 03:20.520
192
+ Entonces vamos a declarar int i igual a 0
193
+ y i menos 1.
194
+
195
+ 03:20.520 --> 03:21.544
196
+ Perfecto.
197
+
198
+ 03:21.710 --> 03:22.762
199
+ Lo tenemos listo.
200
+
201
+ 03:22.888 --> 03:25.320
202
+ Vamos a guardar y vamos a ejecutar esto.
203
+
204
+ 03:26.353 --> 03:27.578
205
+ F6.
206
+
207
+ 03:28.411 --> 03:30.520
208
+ Ah, y mira, nos dice la terminal.
209
+
210
+ 03:30.646 --> 03:36.737
211
+ Oye, así como lo declaraste,
212
+ solo se permitía en C99 y C11,
213
+
214
+ 03:36.863 --> 03:39.200
215
+ que son estándares anteriores
216
+ del lenguaje.
217
+
218
+ 03:39.200 --> 03:42.642
219
+ Así que declaremos, no pasa nada,
220
+ declaremos nuestra i afuera.
221
+
222
+ 03:43.149 --> 03:45.280
223
+ int i, punto y coma.
224
+
225
+ 03:46.232 --> 03:49.840
226
+ Vamos a poner esto y ahora sí ejecutemos
227
+ nuestro código.
228
+
229
+ 03:50.519 --> 03:51.999
230
+ Vamos al terminal.
231
+
232
+ 03:52.771 --> 03:53.880
233
+ Y perfecto.
234
+
235
+ 03:54.113 --> 03:55.793
236
+ Todo está funcionando.
237
+
238
+ 03:56.288 --> 03:57.042
239
+ Muy bien.
240
+
241
+ 03:57.168 --> 04:01.583
242
+ Vamos aquí i es igual 0, i es igual a 1,
243
+ i es igual a 2, i es igual a 3.
244
+
245
+ 04:02.063 --> 04:04.640
246
+ Y así sucesivamente
247
+ hasta que llegamos a 29.
248
+
249
+ 04:04.640 --> 04:06.175
250
+ ¿Qué hicimos aquí?
251
+
252
+ 04:06.328 --> 04:07.000
253
+ ¿Qué hicimos?
254
+
255
+ 04:07.153 --> 04:08.753
256
+ Pues fuimos del 0 al 29.
257
+
258
+ 04:09.148 --> 04:12.309
259
+ Lo que ocurrió es que recorrimos 30
260
+ posiciones.
261
+
262
+ 04:12.435 --> 04:15.400
263
+ Ya esto es lo único que quiero
264
+ que te quedes con el for.
265
+
266
+ 04:15.400 --> 04:21.600
267
+ El for se va a utilizar cuando sepamos el
268
+ tamaño del elemento que queremos analizar.
269
+
270
+ 04:21.600 --> 04:24.080
271
+ Y nos va a servir para en cada uno
272
+ de los elementos.
273
+
274
+ 04:24.080 --> 04:29.080
275
+ Y un array, en resumen, es como lo que ves
276
+ en un vector, ¿no?
277
+
278
+ 04:29.080 --> 04:30.080
279
+ Con varios elementos.
280
+
281
+ 04:30.080 --> 04:33.040
282
+ Una matriz de una dimensión.
283
+
284
+ 04:33.040 --> 04:35.000
285
+ Y esto lo debiste ver en álgebra lineal.
286
+
287
+ 04:35.000 --> 04:38.120
288
+ Entonces vamos a tener que en una matriz
289
+ de una dimensión vas a guardar
290
+
291
+ 04:38.120 --> 04:43.040
292
+ tus valores, 1, 2, 3, 4, 5.
293
+
294
+ 04:43.040 --> 04:46.345
295
+ Esos valores, aquí nosotros, imagínate
296
+ que recorriéramos
297
+
298
+ 04:46.471 --> 04:47.878
299
+ un array de 30 posiciones.
300
+
301
+ 04:48.160 --> 04:52.320
302
+ En cada una de esas posiciones tú podrías
303
+ hacer diferentes operaciones.
304
+
305
+ 04:52.320 --> 04:54.640
306
+ Un caso de uso es un robot
307
+ seguidor de líneas.
308
+
309
+ 04:54.640 --> 04:58.080
310
+ Te voy a dejar un enlace en la sección
311
+ de comentarios para que veas uno que,
312
+
313
+ 04:58.080 --> 04:59.560
314
+ de hecho, yo trabajé.
315
+
316
+ 04:59.560 --> 05:04.560
317
+ Un robot seguidor de líneas te va a
318
+ permitir que tú tengas varios sensores
319
+
320
+ 05:04.560 --> 05:09.560
321
+ y un array de, si tienes 15 sensores,
322
+ te podrías crear un array que recorra
323
+
324
+ 05:09.560 --> 05:12.610
325
+ esos, un ciclo for que recorra
326
+ esos 15 sensores
327
+
328
+ 05:12.736 --> 05:14.724
329
+ y que lea cada uno de los sensores.
330
+
331
+ 05:14.920 --> 05:17.880
332
+ Una vez terminas de leer los 15 sensores,
333
+ entonces dices, ah, OK,
334
+
335
+ 05:17.880 --> 05:20.077
336
+ el robot está en tal posición
337
+ sobre la línea.
338
+
339
+ 05:20.203 --> 05:20.920
340
+ Y ya.
341
+
342
+ 05:20.920 --> 05:23.400
343
+ Le dices a los motores, oye,
344
+ ajustense tantito.
345
+
346
+ 05:23.400 --> 05:26.480
347
+ Ese es un claro uso de cómo puedes hacer
348
+ los arrays en cada uno de los
349
+
350
+ 05:26.480 --> 05:27.520
351
+ elementos del array.
352
+
353
+ 05:27.520 --> 05:29.280
354
+ Puedes hacer una operación diferente.
355
+
356
+ 05:29.280 --> 05:33.960
357
+ Y para eso es uno de los principales usos
358
+ del ciclo o bucle for.
359
+
360
+ 05:33.960 --> 05:37.266
361
+ Cuando nosotros sabemos
362
+ la cantidad total de elementos
363
+
364
+ 05:37.392 --> 05:39.240
365
+ que tenemos que analizar.
366
+
367
+ 05:39.240 --> 05:43.080
368
+ Una última cosa es atacar este error
369
+ que nos salió en la terminal,
370
+
371
+ 05:43.080 --> 05:47.480
372
+ en la salida de nuestra compilación,
373
+ que decía que esto que hicimos
374
+
375
+ 05:47.480 --> 05:50.680
376
+ de declarar int aquí, mira,
377
+ sígueme, por favor.
378
+
379
+ 05:50.680 --> 05:53.880
380
+ En la pantalla yo había declarado int i
381
+ igual a 0,
382
+
383
+ 05:53.880 --> 05:58.040
384
+ porque esto se podía
385
+ en las versiones 99 y 11 de C.
386
+
387
+ 05:58.040 --> 06:02.880
388
+ Ahorita estamos trabajando en la versión
389
+ 2018 o la versión 18 de C.
390
+
391
+ 06:02.880 --> 06:04.400
392
+ Así que ya no se puede.
393
+
394
+ 06:04.400 --> 06:08.280
395
+ Tiene ciertos detallitos y el mismo
396
+ compilador te los indica.
397
+
398
+ 06:08.280 --> 06:09.120
399
+ Es genial.
400
+
401
+ 06:09.120 --> 06:13.560
402
+ Por eso lo borré de aquí y declaré
403
+ mi variable i arribita.
404
+
405
+ 06:13.560 --> 06:15.640
406
+ Eso es absolutamente todo lo que hice.
407
+
408
+ 06:15.640 --> 06:20.600
409
+ Y con eso se compuso nuestro código
410
+ y logramos hacer que funcionara.
411
+
412
+ 06:20.600 --> 06:22.640
413
+ Bueno, eso sería todo por esta clase.
414
+
415
+ 06:22.640 --> 06:28.640
416
+ Sin más, nos vemos en la siguiente.
subir/Curso de Control de Flujo en C/03-Control de Bucles en C/03-for_53ab0088-8c9a-4daf-b43d-4b6b92f44274.c ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #include<stdio.h>
2
+
3
+ int main()
4
+ {
5
+ int n = 30;
6
+ int i;
7
+ for( i=0; i < n; i++){
8
+ printf("el valor actual de i es %d \n", i);
9
+ }
10
+ printf("el valor actual de i es %d \n", i);
11
+
12
+ }
subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/01-Resumen.html ADDED
The diff for this file is too large to render. See raw diff
 
subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/01-Uso de la Instrucción Break en C.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:480514929180213503a0c875a934fa0aa19e08f00a313462a33d17e2734b01f5
3
+ size 37329390
subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/02-Resumen.html ADDED
The diff for this file is too large to render. See raw diff
 
subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/02-Uso del Continue en Bucles de Programación.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:27b050628b136158fff42d3b381ffe665ad9d73b51dd55233142ed63dbdeeb7b
3
+ size 52016548
subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/02-Uso del Continue en Bucles de Programación.vtt ADDED
@@ -0,0 +1,380 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ WEBVTT
2
+
3
+ 00:03.406 --> 00:06.320
4
+ Ahora tenemos que hablar
5
+ de la instrucción continue.
6
+
7
+ 00:06.446 --> 00:08.310
8
+ Esta se relaciona a la instrucción break
9
+
10
+ 00:08.436 --> 00:10.881
11
+ pero hace lo opuesto,
12
+ simple y sencillamente
13
+
14
+ 00:11.007 --> 00:15.001
15
+ forza que se ejecute
16
+ la próxima iteración del bucle.
17
+
18
+ 00:15.234 --> 00:17.958
19
+ Entonces, en lugar
20
+ de que te salgas del bucle,
21
+
22
+ 00:18.084 --> 00:22.170
23
+ si tú utilizas un continue,
24
+ forzas una iteración más en tu bucle.
25
+
26
+ 00:22.663 --> 00:25.791
27
+ ¿Qué pasa con esto o cuándo se utilizaría?
28
+
29
+ 00:25.917 --> 00:27.135
30
+ Bueno, primero que nada,
31
+
32
+ 00:27.261 --> 00:30.523
33
+ a diferencia del break
34
+ que se puede utilizar en while,
35
+
36
+ 00:30.648 --> 00:33.370
37
+ en do while, en for, en switch,
38
+
39
+ 00:33.658 --> 00:38.963
40
+ el continue solamente se puede
41
+ utilizar en ciclos for, while y do while,
42
+
43
+ 00:39.089 --> 00:41.520
44
+ no se puede utilizar en switch.
45
+
46
+ 00:41.520 --> 00:44.339
47
+ ¿Lo puedes utilizar adentro
48
+ de un while que esté dentro de un switch?
49
+
50
+ 00:44.365 --> 00:45.445
51
+ Sí, eso sí.
52
+
53
+ 00:45.571 --> 00:47.869
54
+ ¿Lo puedes utilizar dentro de un for
55
+ que esté dentro de un switch?
56
+
57
+ 00:47.995 --> 00:48.828
58
+ Claro que sí.
59
+
60
+ 00:48.954 --> 00:52.387
61
+ Recuerda que son cosas diferentes,
62
+ cada uno tiene sus llavecitas
63
+
64
+ 00:52.513 --> 00:57.028
65
+ y cada uno tiene el código
66
+ que va a estar adentro de esa instrucción.
67
+
68
+ 00:57.368 --> 01:00.045
69
+ Con esto dicho, vamos a ver
70
+ un ejemplo de esta instrucción.
71
+
72
+ 01:00.825 --> 01:01.942
73
+ Para este ejemplo,
74
+
75
+ 01:02.068 --> 01:06.243
76
+ y vamos a irnos a nuestro ciclo for
77
+ que ya teníamos previamente,
78
+
79
+ 01:06.410 --> 01:09.371
80
+ voy a agregar aquí
81
+ unas pequeñas llavecitas,
82
+
83
+ 01:10.371 --> 01:12.997
84
+ control x y la cierro aquí abajo
85
+
86
+ 01:13.123 --> 01:14.356
87
+ para que esté todo bien.
88
+
89
+ 01:14.482 --> 01:17.615
90
+ Vamos a identar para que se sepa
91
+ que esto pertenece al for
92
+
93
+ 01:17.741 --> 01:19.833
94
+ y vamos a dejar un espacio.
95
+
96
+ 01:20.676 --> 01:22.587
97
+ Quiero que primero veas qué pasa
98
+
99
+ 01:22.713 --> 01:24.913
100
+ cuando ponemos
101
+ la instrucción continue,
102
+
103
+ 01:25.039 --> 01:29.159
104
+ la voy a poner comentada
105
+ para empezar, continue,
106
+
107
+ 01:29.873 --> 01:33.136
108
+ punto y coma, muy bien,
109
+ guardamos y vamos a ver
110
+
111
+ 01:33.262 --> 01:36.262
112
+ cómo funciona nuestro
113
+ bucle for de forma normal,
114
+
115
+ 01:36.388 --> 01:38.833
116
+ cómo lo habíamos dejado
117
+ funcionando en clases anteriores.
118
+
119
+ 01:38.959 --> 01:43.251
120
+ Se imprimía todo bonito del 0 al 29,
121
+
122
+ 01:43.377 --> 01:46.585
123
+ 30 impresiones, que era
124
+ lo que nosotros queríamos hacer.
125
+
126
+ 01:46.731 --> 01:49.039
127
+ Ahora, ¿qué pasa
128
+ si yo agrego continue aquí?
129
+
130
+ 01:49.506 --> 01:53.610
131
+ Guardo y ejecuto mi código.
132
+ ¿Qué cambia con la instrucción continue?
133
+
134
+ 01:53.736 --> 01:54.993
135
+ Quiero que vayas pensando,
136
+
137
+ 01:55.083 --> 01:58.454
138
+ con base a lo que ya te expliqué,
139
+ qué es lo que va a pasar.
140
+
141
+ 01:58.981 --> 02:01.060
142
+ Y mira, ya vimos la salida,
143
+
144
+ 02:01.353 --> 02:06.428
145
+ básicamente la salida fue nula,
146
+ no nos imprimió absolutamente nada.
147
+
148
+ 02:06.781 --> 02:09.618
149
+ ¿Y por qué es esto?
150
+ ¿Por qué ocurre esto?
151
+
152
+ 02:10.051 --> 02:12.389
153
+ Bueno, pues simple y sencillamente
154
+
155
+ 02:12.515 --> 02:15.812
156
+ porque lo que hace el ciclo continue,
157
+ como te lo expliqué previamente,
158
+
159
+ 02:15.938 --> 02:19.433
160
+ es forzar la ejecución del siguiente bucle
161
+
162
+ 02:19.559 --> 02:21.597
163
+ y se va al siguiente y se va al siguiente
164
+
165
+ 02:21.723 --> 02:27.349
166
+ sin tomar en cuenta la parte
167
+ de imprimir nuestros valores.
168
+
169
+ 02:27.475 --> 02:28.714
170
+ Veamos aquí ya una comparación
171
+
172
+ 02:28.840 --> 02:31.576
173
+ más clara con break, ¿qué
174
+ pasa si ponemos un break?
175
+
176
+ 02:33.236 --> 02:35.132
177
+ Bueno, vamos a ejecutar este código
178
+
179
+ 02:35.258 --> 02:37.696
180
+ y ahorita te voy a mostrar un caso
181
+ de uso del continue,
182
+
183
+ 02:37.922 --> 02:41.102
184
+ pero quiero decirte una realidad
185
+ y es que el break nos saca
186
+
187
+ 02:41.228 --> 02:42.376
188
+ del ciclo for directamente,
189
+
190
+ 02:42.502 --> 02:46.185
191
+ el continue ejecutó 30 veces el bucle
192
+ y después nos sacó,
193
+
194
+ 02:46.318 --> 02:47.884
195
+ quiero que tengas eso claro.
196
+
197
+ 02:48.010 --> 02:50.794
198
+ Ahora quiero que hagamos un último
199
+ experimento en código y vamos
200
+
201
+ 02:50.920 --> 02:53.989
202
+ a poner otra vez nuestrocontinue,
203
+ vamos a ponerle punto y coma
204
+
205
+ 02:54.889 --> 02:57.164
206
+ y este print, que es el valor actual de i,
207
+
208
+ 02:57.290 --> 02:59.138
209
+ que obviamente
210
+ nos lo estamos saltando,
211
+
212
+ 02:59.263 --> 03:02.350
213
+ lo voy a imprimir afuera
214
+ del bucle para que sepamos
215
+
216
+ 03:02.476 --> 03:05.471
217
+ esta diferencia entre
218
+ continue y entre break,
219
+
220
+ 03:05.597 --> 03:08.832
221
+ para que no te quede tan abstracta.
222
+ Entonces voy a ejecutar
223
+
224
+ 03:08.958 --> 03:14.220
225
+ este código que tengo aquí,
226
+ fn f6 en mi computador,
227
+
228
+ 03:14.346 --> 03:16.258
229
+ f6 si estás en una compu normal
230
+
231
+ 03:16.384 --> 03:21.231
232
+ y mira que aquí el continue
233
+ simplemente evitó que se imprimiera
234
+
235
+ 03:21.357 --> 03:23.240
236
+ uno a uno lo que teníamos en el bucle,
237
+
238
+ 03:23.240 --> 03:26.333
239
+ pero cuando nos salimos del bucle
240
+ sí que se imprime
241
+
242
+ 03:26.459 --> 03:28.824
243
+ y nos muestra
244
+ que el valor de i es 30,
245
+
246
+ 03:28.950 --> 03:32.838
247
+ ¿por qué? porque se
248
+ hicieron las 30 iteraciones,
249
+
250
+ 03:32.963 --> 03:37.901
251
+ el continue nos forza
252
+ a que se itere en nuestro ciclo for,
253
+
254
+ 03:38.027 --> 03:40.825
255
+ como debería hacerlo,
256
+ solamente que nos saltamos
257
+
258
+ 03:40.951 --> 03:42.535
259
+ todo el código que teníamos ahí,
260
+
261
+ 03:42.661 --> 03:44.838
262
+ porque el continue le dice
263
+ vete al siguiente bucle,
264
+
265
+ 03:44.963 --> 03:47.560
266
+ vete al siguiente ciclo de este bucle.
267
+
268
+ 03:48.089 --> 03:51.758
269
+ Ahora vamos a ir a nuestro
270
+ break para que veas la diferencia,
271
+
272
+ 03:53.050 --> 03:57.015
273
+ muy bien, vamos a guardar
274
+ y vamos a compilar,
275
+
276
+ 03:58.055 --> 04:00.138
277
+ esperamos el resultado en nuestra terminal
278
+
279
+ 04:00.305 --> 04:02.360
280
+ y mira el valor actual de i es 0,
281
+
282
+ 04:02.360 --> 04:04.926
283
+ ¿what? claro porque entramos al for,
284
+
285
+ 04:05.052 --> 04:09.216
286
+ llega el break y se rompe el for
287
+ y luego se imprime 0,
288
+
289
+ 04:09.609 --> 04:13.182
290
+ con esto estoy seguro que ya
291
+ te quedó súper clara la diferencia,
292
+
293
+ 04:13.308 --> 04:14.801
294
+ ya nada más te quiero contar
295
+
296
+ 04:14.927 --> 04:18.097
297
+ que la instrucción continue
298
+ de verdad yo llevo mucho tiempo
299
+
300
+ 04:18.223 --> 04:22.530
301
+ programando en c años
302
+ y es muy raro utilizarla,
303
+
304
+ 04:22.656 --> 04:26.460
305
+ pero en caso de que digas,
306
+ profe, entonces para qué me las enseñas,
307
+
308
+ 04:26.586 --> 04:28.686
309
+ imagínate que tienes un programa
310
+
311
+ 04:28.812 --> 04:32.611
312
+ en donde no necesitas que se impriman
313
+ números negativos,
314
+
315
+ 04:33.184 --> 04:35.115
316
+ ahí puedes poner un pequeño if
317
+
318
+ 04:35.375 --> 04:37.825
319
+ que detecte si el valor
320
+ va a ser negativo
321
+
322
+ 04:38.005 --> 04:40.736
323
+ y si el valor va a ser negativo
324
+ le pones un continue,
325
+
326
+ 04:41.069 --> 04:43.918
327
+ ese continue se va
328
+ a encargar de que te saltes
329
+
330
+ 04:44.043 --> 04:48.192
331
+ esa impresión y no hagas
332
+ la impresión del número negativo,
333
+
334
+ 04:48.318 --> 04:50.218
335
+ esto te serviría
336
+ en muchas ocasiones,
337
+
338
+ 04:50.344 --> 04:53.160
339
+ por ejemplo si tienes
340
+ un while infinito en donde
341
+
342
+ 04:53.286 --> 04:55.714
343
+ tú no quieras hacer
344
+ operaciones con números negativos,
345
+
346
+ 04:55.840 --> 04:57.957
347
+ bueno siempre que detectes un negativo
348
+
349
+ 04:58.083 --> 05:01.018
350
+ le metes un continue
351
+ y eso hace que hagas el skip
352
+
353
+ 05:01.143 --> 05:05.502
354
+ solamente de un ciclo,
355
+ de una ejecución de tu bucle
356
+
357
+ 05:05.628 --> 05:07.292
358
+ sin necesidad de que te salgas
359
+
360
+ 05:07.418 --> 05:09.804
361
+ y tengas que hacer muchísimo
362
+ código para manejarlo,
363
+
364
+ 05:09.930 --> 05:14.514
365
+ esa es la verdad uno de los
366
+ casos de uso más reales del continue,
367
+
368
+ 05:14.808 --> 05:17.200
369
+ cuando quieres que algo muy específico
370
+
371
+ 05:17.200 --> 05:20.618
372
+ que estás detectando
373
+ con un if dentro de un bucle while,
374
+
375
+ 05:20.743 --> 05:22.986
376
+ for o do while se salte,
377
+
378
+ 05:23.173 --> 05:26.613
379
+ con esto dicho
380
+ nos vemos en la próxima clase.
subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/03-Uso seguro de GOTO en manejo de errores en C.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:50705e4638946a962113a399dd9b1bb22865de4fb6acad7cbdbd54b8e9bc0384
3
+ size 52691944
subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/03-Uso seguro de GOTO en manejo de errores en C.vtt ADDED
@@ -0,0 +1,371 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ WEBVTT
2
+
3
+ 00:03.459 --> 00:08.000
4
+ Hablemos de la instrucción GOTO
5
+ y de las etiquetas o labels.
6
+
7
+ 00:08.387 --> 00:10.022
8
+ Esta instrucción a mí me parece bien
9
+
10
+ 00:10.148 --> 00:14.365
11
+ curiosa y te voy a hacer 100% honesto,
12
+ innecesaria.
13
+
14
+ 00:14.589 --> 00:18.414
15
+ Yo en mi vida programando en
16
+ este lenguaje nunca la he utilizado,
17
+
18
+ 00:18.540 --> 00:21.286
19
+ ya que puede inducirte
20
+ muy malas prácticas,
21
+
22
+ 00:21.412 --> 00:23.754
23
+ pero aún así debo mencionarte que existe,
24
+
25
+ 00:24.176 --> 00:28.000
26
+ y hay un caso de uso que podríamos
27
+ considerar apropiado para la misma.
28
+
29
+ 00:28.562 --> 00:31.914
30
+ De hecho, el autor del lenguaje
31
+ en el libro de lenguaje C,
32
+
33
+ 00:32.040 --> 00:34.926
34
+ de C Programming Language, Dennis Ritchie,
35
+
36
+ 00:35.720 --> 00:40.834
37
+ nos comenta que esta es una instrucción
38
+ altamente abusable, y es verdad,
39
+
40
+ 00:40.960 --> 00:44.204
41
+ los programadores
42
+ y las programadoras pueden caer
43
+
44
+ 00:44.330 --> 00:46.917
45
+ en malas prácticas al utilizar GOTO,
46
+
47
+ 00:47.043 --> 00:48.468
48
+ porque esto te permite irte
49
+
50
+ 00:48.594 --> 00:51.837
51
+ a cualquier parte de tu código,
52
+ no importa dónde estés.
53
+
54
+ 00:52.357 --> 00:55.393
55
+ Pero eso no es tan bueno como suena.
56
+
57
+ 00:55.607 --> 00:59.253
58
+ Idealmente tu código debería
59
+ de funcionar por principios,
60
+
61
+ 00:59.379 --> 01:03.998
62
+ sin utilizar GOTO, y toda la lógica
63
+ y toda la dirección que vamos a tener,
64
+
65
+ 01:04.124 --> 01:07.282
66
+ la debes de manejar
67
+ ya sea por máquinas de estados,
68
+
69
+ 01:07.408 --> 01:10.185
70
+ la debes de manejar por bucles y ciclos,
71
+
72
+ 01:10.311 --> 01:14.613
73
+ todo lo que son estructuras de secuencia
74
+ y control, ciclos if, ciclos while,
75
+
76
+ 01:14.739 --> 01:17.854
77
+ y con eso tienes suficiente
78
+ para que tu programa
79
+
80
+ 01:17.980 --> 01:21.078
81
+ también siempre llegue
82
+ a donde debe de llegar.
83
+
84
+ 01:21.204 --> 01:24.123
85
+ Es mil veces mejor
86
+ que hagas una estructura
87
+
88
+ 01:24.249 --> 01:26.407
89
+ de muchos ifs a que utilices GOTO,
90
+
91
+ 01:26.533 --> 01:28.801
92
+ y no es la mejor práctica hacer 100 ifs,
93
+
94
+ 01:28.926 --> 01:31.654
95
+ recuerda que tienes que ser
96
+ inteligente al programar,
97
+
98
+ 01:31.780 --> 01:34.629
99
+ y bueno, eso es lo que vamos a ir
100
+ aprendiendo a lo largo de estos cursos,
101
+
102
+ 01:34.755 --> 01:36.789
103
+ conforme se vaya poniendo más complejo.
104
+
105
+ 01:36.915 --> 01:39.078
106
+ Primero, necesitas
107
+ entender una a una todas
108
+
109
+ 01:39.203 --> 01:41.720
110
+ las herramientas
111
+ que componen este lenguaje,
112
+
113
+ 01:42.080 --> 01:45.274
114
+ así que vamos a ver el único caso de uso
115
+ que yo recomiendo para GOTO.
116
+
117
+ 01:46.337 --> 01:50.724
118
+ Vamos a nuestro editor de código,
119
+ vamos a abrir una nueva pestaña,
120
+
121
+ 01:51.237 --> 01:55.357
122
+ y la vamos a guardar, recuerda que para
123
+ abrir una nueva pestaña es control N,
124
+
125
+ 01:55.483 --> 01:59.000
126
+ y para guardar es control S, goto.c.
127
+
128
+ 02:00.139 --> 02:04.440
129
+ Excelente, ya la tenemos aquí lista,
130
+ ahora vamos a escribir el código,
131
+
132
+ 02:04.440 --> 02:06.080
133
+ y aquí te voy a poner un ejemplo.
134
+
135
+ 02:06.473 --> 02:09.563
136
+ Imagínate que tú entras a un ciclo for,
137
+
138
+ 02:11.887 --> 02:13.778
139
+ vamos a ponerle aquí cualquier cosa,
140
+
141
+ 02:13.903 --> 02:16.160
142
+ lo voy a dejar vacío de hecho,
143
+ no hace falta esto,
144
+
145
+ 02:17.628 --> 02:21.347
146
+ la buena práctica
147
+ es que cuando dejas un for vacío,
148
+
149
+ 02:21.473 --> 02:23.810
150
+ como para ejemplificar en una especie de,
151
+
152
+ 02:23.936 --> 02:27.262
153
+ obviamente esto no va a compilar,
154
+ pero solo quiero que tengan el ejemplo,
155
+
156
+ 02:28.215 --> 02:30.679
157
+ hay que ponerle puntos adentro.
158
+
159
+ 02:34.838 --> 02:38.739
160
+ Ok, vamos a usar los code snippets,
161
+ me gusta más la idea.
162
+
163
+ 02:40.746 --> 02:41.765
164
+ Muy bien.
165
+
166
+ 02:41.891 --> 02:43.899
167
+ Cuando tenemos varias estructuras,
168
+
169
+ 02:44.025 --> 02:46.200
170
+ o estamos en una estructura anidada
171
+ como esta,
172
+
173
+ 02:46.200 --> 02:48.120
174
+ en donde hay tres niveles adentro,
175
+
176
+ 02:48.382 --> 02:49.960
177
+ en donde estaría nuestro código,
178
+
179
+ 02:50.422 --> 02:51.840
180
+ eso puede ser peligroso,
181
+
182
+ 02:51.840 --> 02:53.600
183
+ y un break no te va a servir,
184
+
185
+ 02:53.600 --> 02:55.080
186
+ y no te va a sacar de esta,
187
+
188
+ 02:55.307 --> 02:57.600
189
+ porque un break solo te sacaría un nivel.
190
+
191
+ 02:58.106 --> 03:01.720
192
+ ¿Qué pasa si entras a una parte
193
+ de tu código donde no deberías entrar,
194
+
195
+ 03:01.943 --> 03:05.880
196
+ y entonces simple y sencillamente tienes
197
+ que salirte de ahí lo más rápido posible,
198
+
199
+ 03:06.224 --> 03:08.080
200
+ a la parte inicial de tu programa?
201
+
202
+ 03:08.080 --> 03:10.240
203
+ Velo como un reset o un reinicio.
204
+
205
+ 03:10.540 --> 03:12.840
206
+ Cuando llegas a una parte anidada
207
+ de tu código,
208
+
209
+ 03:13.144 --> 03:14.440
210
+ y encuentras un error,
211
+
212
+ 03:14.684 --> 03:17.520
213
+ ah, bueno, entonces
214
+ puedes utilizar goto ahí,
215
+
216
+ 03:17.520 --> 03:19.480
217
+ y justo ese es el ejemplo
218
+ que tengo para ti.
219
+
220
+ 03:19.873 --> 03:21.600
221
+ Ahí podríamos poner,
222
+
223
+ 03:21.600 --> 03:28.080
224
+ si panic, por ejemplo, o desastre,
225
+ lo que tú quieras,
226
+
227
+ 03:28.742 --> 03:35.169
228
+ lo que pasaría aquí es que nosotros
229
+ iríamos goto error handler.
230
+
231
+ 03:37.872 --> 03:40.600
232
+ Y esto sería la instrucción goto,
233
+
234
+ 03:40.726 --> 03:43.000
235
+ y esto sería nuestra etiqueta.
236
+
237
+ 03:43.150 --> 03:46.720
238
+ Obviamente, la etiqueta,
239
+ simple y sencillamente,
240
+
241
+ 03:46.720 --> 03:49.440
242
+ la tendríamos que poner afuera del código.
243
+
244
+ 03:49.440 --> 03:51.840
245
+ Entonces iría afuera del bucle for,
246
+
247
+ 03:51.840 --> 03:54.520
248
+ tendrías un mensaje como error handler,
249
+
250
+ 03:55.488 --> 03:56.960
251
+ o manejador de errores,
252
+
253
+ 03:57.388 --> 03:58.520
254
+ dos puntos,
255
+
256
+ 03:58.520 --> 04:01.000
257
+ y aquí pondrías todo el código,
258
+
259
+ 04:04.259 --> 04:05.699
260
+ todo el código,
261
+
262
+ 04:07.013 --> 04:11.960
263
+ todo el código para componer tu desastre.
264
+
265
+ 04:14.228 --> 04:15.260
266
+ ¿Qué pasa aquí?
267
+
268
+ 04:15.693 --> 04:17.960
269
+ Si en alguna situación de tu programa
270
+
271
+ 04:17.960 --> 04:19.680
272
+ llegas a tener una condición,
273
+
274
+ 04:19.806 --> 04:22.160
275
+ digamos, tienes un programa de robótica,
276
+
277
+ 04:22.160 --> 04:23.840
278
+ o algo que maneja sensores,
279
+
280
+ 04:23.840 --> 04:25.800
281
+ detectas que un sensor dejó de funcionar,
282
+
283
+ 04:25.950 --> 04:28.880
284
+ ahí puedes utilizar
285
+ una etiqueta y un goto,
286
+
287
+ 04:29.067 --> 04:32.240
288
+ que simple y sencillamente te saque
289
+ de todo peligro,
290
+
291
+ 04:32.240 --> 04:35.520
292
+ y te mande a una rutina o subrutina
293
+
294
+ 04:35.520 --> 04:37.520
295
+ que se encargue de manejar el error,
296
+
297
+ 04:37.520 --> 04:39.720
298
+ digamos, de recalibrar el sensor,
299
+
300
+ 04:39.720 --> 04:42.520
301
+ que se encargue de apagar el robot
302
+ de forma segura,
303
+
304
+ 04:42.520 --> 04:45.240
305
+ ¿por qué? Porque un robot que tiene
306
+ los sensores descompuestos
307
+
308
+ 04:45.240 --> 04:47.640
309
+ es un robot peligroso,
310
+ porque no se daría cuenta
311
+
312
+ 04:47.640 --> 04:49.840
313
+ si está por chocar con un humano,
314
+
315
+ 04:49.840 --> 04:52.440
316
+ si está por chocar con alguna cosa
317
+ que no debería.
318
+
319
+ 04:52.440 --> 04:55.640
320
+ ¿Ok? Los sensores, recuerda,
321
+ son los ojos de un robot.
322
+
323
+ 04:55.770 --> 04:58.040
324
+ Ese es un caso de uso que se me ocurre.
325
+
326
+ 04:58.040 --> 05:00.040
327
+ O en un driver, por ejemplo,
328
+
329
+ 05:00.040 --> 05:01.920
330
+ como en un teclado o algo así,
331
+
332
+ 05:01.920 --> 05:04.240
333
+ ¿ok? Que simple y sencillamente,
334
+
335
+ 05:04.240 --> 05:06.240
336
+ si detectas que algo está mal,
337
+
338
+ 05:06.240 --> 05:10.440
339
+ le metes algún tipo de mecanismo
340
+ de autodetección de errores,
341
+
342
+ 05:10.440 --> 05:11.840
343
+ de mal funcionamiento,
344
+
345
+ 05:11.840 --> 05:13.840
346
+ y detectas que algo está mal,
347
+
348
+ 05:13.840 --> 05:16.640
349
+ lo puedes mandar a esta rutina de manejo
350
+ de errores,
351
+
352
+ 05:16.640 --> 05:17.640
353
+ y ya.
354
+
355
+ 05:17.640 --> 05:20.040
356
+ Eso es el superpoder de Gotoo,
357
+
358
+ 05:20.040 --> 05:22.640
359
+ es el único caso de uso que puedo pensar,
360
+
361
+ 05:22.640 --> 05:25.240
362
+ y la verdad es que es muy raro que tengas
363
+ que escribirlo,
364
+
365
+ 05:25.240 --> 05:27.640
366
+ solo te lo quiero enseñar
367
+ para que lo conozcas,
368
+
369
+ 05:27.640 --> 05:32.040
370
+ y bueno, con esto dicho,
371
+ nos vemos en la próxima clase.
subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/03-goto_f20fa5d7-3cec-42f3-ba42-44d528ccb729.c ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ for (size_t i = 0; i < count; i++)
2
+ {
3
+ for (size_t i = 0; i < count; i++)
4
+ {
5
+ for (size_t i = 0; i < count; i++)
6
+ {
7
+ if (panic)
8
+ goto errorHandler;
9
+ }
10
+ }
11
+ }
12
+ errorHandler: //todo el codigo para componer tu desastre
13
+
14
+
15
+
subir/Curso de Control de Flujo en C/presentation.mhtml ADDED
The diff for this file is too large to render. See raw diff
 
subir/fixed/Curso de Fundamentos de Ingeniería de Software/05-Introducción a Blockchain e Inteligencia Artificial/02-Lecturas recomendadas.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ https://platzi.com/cursos/deeplearning/
2
+ https://platzi.com/cursos/algebra-ml/
subir/fixed/Curso de Fundamentos de Ingeniería de Software/05-Introducción a Blockchain e Inteligencia Artificial/02-Qué es una red neuronal.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f6cbc6dce7a5e9618632bc712446bb4a248b85cc7ffabeffccf2fc32a8609044
3
+ size 334399745
subir/fixed/Curso de Fundamentos de Ingeniería de Software/05-Introducción a Blockchain e Inteligencia Artificial/02-Qué es una red neuronal.vtt ADDED
@@ -0,0 +1,763 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ WEBVTT
2
+
3
+ 00:00:00.160 --> 00:00:02.320
4
+ Para entender qué es una red neuronal, vamos
5
+
6
+ 00:00:02.320 --> 00:00:06.480
7
+ a convertir números dibujados a mano a números
8
+
9
+ 00:00:06.480 --> 00:00:09.040
10
+ digitales, como un sistema de reconocimiento óptico de
11
+
12
+ 00:00:09.040 --> 00:00:12.400
13
+ caracteres. Así que primero imagina que dibujas a
14
+
15
+ 00:00:12.400 --> 00:00:15.315
16
+ mano un número 3 y ese número lo
17
+
18
+ 00:00:15.315 --> 00:00:19.315
19
+ conviertes a una imagen digital. Para efectos de
20
+
21
+ 00:00:19.315 --> 00:00:21.795
22
+ este ejercicio, imagina que lo convertimos a una
23
+
24
+ 00:00:21.795 --> 00:00:25.235
25
+ imagen de 20 píxeles por 20 píxeles. Como
26
+
27
+ 00:00:25.235 --> 00:00:27.474
28
+ tenemos 20 píxeles por 20 píxeles, tenemos en
29
+
30
+ 00:00:27.474 --> 00:00:31.540
31
+ total 400 píxeles, y cada píxel es básicamente
32
+
33
+ 00:00:31.540 --> 00:00:34.180
34
+ una representación de un porcentaje de 0 a
35
+
36
+ 00:00:34.180 --> 00:00:37.140
37
+ 100 por 100 que determina la cantidad de
38
+
39
+ 00:00:37.140 --> 00:00:39.780
40
+ brillo de cada 1 de estos puntos. Así
41
+
42
+ 00:00:39.780 --> 00:00:43.535
43
+ que, para poder representar matemáticamente este número 3
44
+
45
+ 00:00:43.535 --> 00:00:46.035
46
+ en una cuadricula de 20 por 20, necesitamos
47
+
48
+ 00:00:46.175 --> 00:00:49.775
49
+ 400 números, y esos 400 números son un
50
+
51
+ 00:00:49.775 --> 00:00:52.655
52
+ porcentaje de brillo en cada número. Creamos una
53
+
54
+ 00:00:52.655 --> 00:00:56.840
55
+ matriz de esos 400 números y esa matriz
56
+
57
+ 00:00:56.840 --> 00:01:00.200
58
+ serían mis neuronas de entrada. Las neuronas de
59
+
60
+ 00:01:00.200 --> 00:01:02.520
61
+ entrada son los datos de input que yo
62
+
63
+ 00:01:02.520 --> 00:01:04.920
64
+ le doy a una red neuronal. En este
65
+
66
+ 00:01:04.920 --> 00:01:07.552
67
+ momento, una neurona no es más que un
68
+
69
+ 00:01:07.552 --> 00:01:10.105
70
+ dato. En las neuronas de entrada, la neurona
71
+
72
+ 00:01:10.105 --> 00:01:11.945
73
+ es un número, un dato. En este caso,
74
+
75
+ 00:01:11.945 --> 00:01:14.665
76
+ el dato representa cada 1 de los pixeles
77
+
78
+ 00:01:14.665 --> 00:01:17.225
79
+ que componen esas imágenes que pueden ser un
80
+
81
+ 00:01:17.225 --> 00:01:21.145
82
+ número cualquiera dibujado a mano alzada. Las otras
83
+
84
+ 00:01:21.145 --> 00:01:23.810
85
+ neuronas que están al final de mi red
86
+
87
+ 00:01:23.810 --> 00:01:26.530
88
+ neuronal son la capa de salida. La capa
89
+
90
+ 00:01:26.530 --> 00:01:29.810
91
+ de salida también son simplemente datos. En este
92
+
93
+ 00:01:29.810 --> 00:01:32.530
94
+ caso, estoy construyendo una red neuronal que me
95
+
96
+ 00:01:32.530 --> 00:01:35.955
97
+ va a generar al final del proceso la
98
+
99
+ 00:01:35.955 --> 00:01:38.535
100
+ probabilidad de cuál es el número digital de
101
+
102
+ 00:01:38.535 --> 00:01:40.695
103
+ 0 a 9 que corresponde al número que
104
+
105
+ 00:01:40.695 --> 00:01:43.335
106
+ yo dibujé a mano alzada. Como solamente hay
107
+
108
+ 00:01:43.335 --> 00:01:46.535
109
+ 10 números del 0 al 9, necesito 10
110
+
111
+ 00:01:46.535 --> 00:01:48.255
112
+ neuronas, y cada una de ellas me va
113
+
114
+ 00:01:48.255 --> 00:01:50.535
115
+ a representar un número entre el 0 al
116
+
117
+ 00:01:50.535 --> 00:01:52.560
118
+ 9. Las neuronas que se van a prender
119
+
120
+ 00:01:52.560 --> 00:01:54.479
121
+ son las neuronas que corresponden al número y
122
+
123
+ 00:01:54.479 --> 00:01:56.280
124
+ se van a prender con una probabilidad. ¿Esto
125
+
126
+ 00:01:56.280 --> 00:01:58.320
127
+ en la práctica qué significa? Que estas neuronas
128
+
129
+ 00:01:58.320 --> 00:02:00.000
130
+ no van a decir simplemente este es un
131
+
132
+ 00:02:00.000 --> 00:02:01.280
133
+ 3 o esto es un 5 o esto
134
+
135
+ 00:02:01.280 --> 00:02:03.280
136
+ es un 8, porque, por ejemplo, el 3
137
+
138
+ 00:02:03.280 --> 00:02:05.494
139
+ y el 8 se parecen. ¿Qué tal que
140
+
141
+ 00:02:05.494 --> 00:02:07.255
142
+ yo dibuje un 3 que esté muy cerca
143
+
144
+ 00:02:07.255 --> 00:02:09.574
145
+ al 8? Entonces, el 3 tiene que tener
146
+
147
+ 00:02:09.574 --> 00:02:11.415
148
+ una probabilidad muy alta, de pronto se prende
149
+
150
+ 00:02:11.415 --> 00:02:13.655
151
+ un 90 por 100, y el 8 un
152
+
153
+ 00:02:13.655 --> 00:02:17.495
154
+ 84 por 100. Estos son probabilidades que se
155
+
156
+ 00:02:17.495 --> 00:02:19.500
157
+ colocan en números decimales entre 0 y 1.
158
+
159
+ 00:02:19.580 --> 00:02:22.540
160
+ 0.5 es el 50 por 100.7 es el
161
+
162
+ 00:02:22.540 --> 00:02:25.120
163
+ 70 por 100. Y esa generación de probabilidad
164
+
165
+ 00:02:25.340 --> 00:02:28.060
166
+ es cómo funciona tanto la inteligencia humana como
167
+
168
+ 00:02:28.060 --> 00:02:30.860
169
+ la inteligencia artificial, y se expresa en esta
170
+
171
+ 00:02:30.860 --> 00:02:33.580
172
+ capa de salida, en estos números de probabilidad
173
+
174
+ 00:02:33.580 --> 00:02:36.144
175
+ de las neuronas finales. Pero ¿cómo la capa
176
+
177
+ 00:02:36.144 --> 00:02:39.424
178
+ de entrada, que tiene estos 400 números, que
179
+
180
+ 00:02:39.424 --> 00:02:41.905
181
+ son los pixeles, correlaciona con la capa de
182
+
183
+ 00:02:41.905 --> 00:02:43.864
184
+ salida, que tiene estos 10 números, que son
185
+
186
+ 00:02:43.864 --> 00:02:47.265
187
+ el output, la salida? Pues tenemos internamente una
188
+
189
+ 00:02:47.265 --> 00:02:49.765
190
+ serie de neuronas que no son simplemente números,
191
+
192
+ 00:02:50.010 --> 00:02:53.850
193
+ son unas operaciones matemáticas que emergen los patrones
194
+
195
+ 00:02:53.850 --> 00:02:55.930
196
+ de los datos, los patrones a través de
197
+
198
+ 00:02:55.930 --> 00:02:59.050
199
+ los cuales se interpreta la información. Esas neuronas
200
+
201
+ 00:02:59.050 --> 00:03:02.090
202
+ intermedias se conocen como la capa oculta y
203
+
204
+ 00:03:02.090 --> 00:03:04.250
205
+ usan una serie de operaciones matemáticas que vamos
206
+
207
+ 00:03:04.250 --> 00:03:08.935
208
+ a entender brevemente para extrapolar esos patrones de
209
+
210
+ 00:03:08.935 --> 00:03:11.095
211
+ la información que al final del día son
212
+
213
+ 00:03:11.095 --> 00:03:13.974
214
+ la inteligencia. En esta red neuronal elegí crear
215
+
216
+ 00:03:13.974 --> 00:03:16.215
217
+ 3 capas ocultas y en cada una de
218
+
219
+ 00:03:16.215 --> 00:03:19.290
220
+ estas capas ocultas tengo 15 neuronas. La verdad
221
+
222
+ 00:03:19.290 --> 00:03:21.209
223
+ es que el número es arbitrario, pueden ser
224
+
225
+ 00:03:21.209 --> 00:03:22.970
226
+ 2 capas ocultas o pueden ser 5, pueden
227
+
228
+ 00:03:22.970 --> 00:03:24.890
229
+ ser 10 o pueden ser 100 y pueden
230
+
231
+ 00:03:24.890 --> 00:03:27.370
232
+ ser 15 neuronas o 20 o 30. ¿Cómo
233
+
234
+ 00:03:27.370 --> 00:03:31.050
235
+ sabes cuántas poner? Cada problema matemático y cada
236
+
237
+ 00:03:31.050 --> 00:03:34.250
238
+ problema de neuronas de inteligencia artificial, dependiendo de
239
+
240
+ 00:03:34.250 --> 00:03:37.345
241
+ los datos que quieras entrenar, va a ser
242
+
243
+ 00:03:37.345 --> 00:03:40.065
244
+ distinta la cantidad de neuronas que necesites. Por
245
+
246
+ 00:03:40.065 --> 00:03:41.985
247
+ ejemplo, para un gran modelo de lenguaje vas
248
+
249
+ 00:03:41.985 --> 00:03:44.065
250
+ a usar una cantidad de capas ocultas distinta
251
+
252
+ 00:03:44.065 --> 00:03:46.865
253
+ y una cantidad de neuronas distinta. A mayor
254
+
255
+ 00:03:46.865 --> 00:03:48.705
256
+ cantidad de neuronas y a mayor cantidad de
257
+
258
+ 00:03:48.705 --> 00:03:52.340
259
+ capas, más uso de procesador y de memoria,
260
+
261
+ 00:03:52.340 --> 00:03:53.700
262
+ y como esto va a usar una cantidad
263
+
264
+ 00:03:53.700 --> 00:03:57.380
265
+ de datos masivos, necesitas la menor cantidad de
266
+
267
+ 00:03:57.380 --> 00:03:59.860
268
+ neuronas y la menor cantidad de capas para
269
+
270
+ 00:03:59.860 --> 00:04:03.605
271
+ generar los mejores resultados. Y estadísticamente, a veces,
272
+
273
+ 00:04:03.605 --> 00:04:07.445
274
+ demasiadas capas generan menos inteligencia, así como cuando
275
+
276
+ 00:04:07.445 --> 00:04:10.985
277
+ las personas están demasiado especializadas en un conocimiento,
278
+
279
+ 00:04:12.165 --> 00:04:14.245
280
+ es muy difícil para ellos aprender cosas nuevas
281
+
282
+ 00:04:14.245 --> 00:04:17.009
283
+ porque están demasiado metidos en la caja. En
284
+
285
+ 00:04:17.009 --> 00:04:19.589
286
+ esencia, lo que estas capas van a hacer
287
+
288
+ 00:04:19.690 --> 00:04:24.129
289
+ es encontrar los patrones estadísticos que tiene un
290
+
291
+ 00:04:24.129 --> 00:04:27.409
292
+ dato. Por ejemplo, los números tienden a tener
293
+
294
+ 00:04:27.409 --> 00:04:29.490
295
+ líneas, el 9 tiene una línea, el 1
296
+
297
+ 00:04:29.490 --> 00:04:31.490
298
+ tiene una línea, el 7 tiene una serie
299
+
300
+ 00:04:31.490 --> 00:04:34.555
301
+ de líneas, pero también tienen círculos. El 9
302
+
303
+ 00:04:34.555 --> 00:04:36.395
304
+ es un círculo, el 6 es un círculo
305
+
306
+ 00:04:36.395 --> 00:04:39.354
307
+ en otra posición, el 3 es medio, 2
308
+
309
+ 00:04:39.354 --> 00:04:42.395
310
+ medios círculos, el 4 son 3 líneas en
311
+
312
+ 00:04:42.395 --> 00:04:46.495
313
+ ciertos órdenes diagonales. Esos patrones tienden a emerger,
314
+
315
+ 00:04:46.650 --> 00:04:50.090
316
+ pero en programación clásica nosotros sabemos programado una
317
+
318
+ 00:04:50.090 --> 00:04:52.970
319
+ serie de condiciones preagregándole cada 1 de esos
320
+
321
+ 00:04:52.970 --> 00:04:56.410
322
+ patrones. Sin embargo, nuestros cerebros aprenden a partir
323
+
324
+ 00:04:56.410 --> 00:04:59.545
325
+ de observar masivas cantidades de información e inferir
326
+
327
+ 00:04:59.545 --> 00:05:03.005
328
+ de una manera casi inconsciente en nuestro entrenamiento
329
+
330
+ 00:05:03.305 --> 00:05:05.145
331
+ de observar el mundo, cada 1 de sus
332
+
333
+ 00:05:05.145 --> 00:05:07.705
334
+ patrones, encontrar los bordes y las formas. La
335
+
336
+ 00:05:07.705 --> 00:05:09.945
337
+ idea es que en estas capas creamos un
338
+
339
+ 00:05:09.945 --> 00:05:14.470
340
+ procedimiento estadístico donde les mostramos estas diferentes capas
341
+
342
+ 00:05:14.930 --> 00:05:17.250
343
+ muchos, muchos, muchos de estos patrones y ellos
344
+
345
+ 00:05:17.250 --> 00:05:20.450
346
+ van ajustando la relación matemática entre cada una
347
+
348
+ 00:05:20.450 --> 00:05:22.130
349
+ de las capas para que, a medida que
350
+
351
+ 00:05:22.130 --> 00:05:24.610
352
+ los 400 números de entrada que pasan por
353
+
354
+ 00:05:24.610 --> 00:05:27.355
355
+ la capa de entrada vayan atravesando capa por
356
+
357
+ 00:05:27.355 --> 00:05:31.275
358
+ capa, terminen generando a nivel numérico los porcentajes
359
+
360
+ 00:05:31.275 --> 00:05:33.435
361
+ de probabilidad de la capa de salida que
362
+
363
+ 00:05:33.435 --> 00:05:36.955
364
+ genere el número correcto. Las ecuaciones matemáticas son
365
+
366
+ 00:05:36.955 --> 00:05:39.515
367
+ básicamente unos números que cada una de estas
368
+
369
+ 00:05:39.515 --> 00:05:42.290
370
+ capas tienen, y esos números son la fuerza
371
+
372
+ 00:05:42.290 --> 00:05:44.690
373
+ de la relación entre la neurona de una
374
+
375
+ 00:05:44.690 --> 00:05:46.850
376
+ capa y todas las neuronas de la otra
377
+
378
+ 00:05:46.850 --> 00:05:49.490
379
+ capa. Entonces, ciertas capas se conectan de una
380
+
381
+ 00:05:49.490 --> 00:05:51.250
382
+ manera muy fuerte o muy débil con otras
383
+
384
+ 00:05:51.250 --> 00:05:54.130
385
+ neuronas, y esos números se les conoce como
386
+
387
+ 00:05:54.130 --> 00:05:57.435
388
+ pesos. Suena muy extraño y muy arbitrario, pero
389
+
390
+ 00:05:57.435 --> 00:06:01.275
391
+ es simplemente un mecanismo matemático. Inicialmente, las conexiones
392
+
393
+ 00:06:01.275 --> 00:06:03.615
394
+ entre las diferentes neuronas en una red neuronal
395
+
396
+ 00:06:03.995 --> 00:06:06.795
397
+ se arrancan de manera aleatoria. Es un número
398
+
399
+ 00:06:06.795 --> 00:06:08.659
400
+ aleatorio que tú colocas como quieras. Y luego,
401
+
402
+ 00:06:08.659 --> 00:06:11.460
403
+ a medida que vas entrenando el sistema, vamos
404
+
405
+ 00:06:11.460 --> 00:06:13.860
406
+ a hablar del entrenamiento en un minuto, el
407
+
408
+ 00:06:13.860 --> 00:06:16.820
409
+ número se va ajustando para eventualmente corresponder a
410
+
411
+ 00:06:16.820 --> 00:06:19.860
412
+ esos patrones que hablamos antes. Hablemos del entrenamiento.
413
+
414
+ 00:06:19.860 --> 00:06:19.935
415
+ Lo primero es inicializar todos los pesos, todas
416
+
417
+ 00:06:19.935 --> 00:06:20.010
418
+ las conexiones entre neuronas en números aleatorios. Y
419
+
420
+ 00:06:20.010 --> 00:06:25.255
421
+ lo que haces, conexiones entre neuronas en números
422
+
423
+ 00:06:25.255 --> 00:06:27.895
424
+ aleatorios, y lo que haces es que tienes
425
+
426
+ 00:06:27.895 --> 00:06:30.935
427
+ una gran cantidad de datos de entrenamiento, es
428
+
429
+ 00:06:30.935 --> 00:06:34.735
430
+ decir, tendríamos que tener una gran cantidad de
431
+
432
+ 00:06:34.735 --> 00:06:37.335
433
+ imágenes de números dibujados a mano alzada entre
434
+
435
+ 00:06:37.335 --> 00:06:39.630
436
+ el 0 y el 9 que corresponden a
437
+
438
+ 00:06:39.630 --> 00:06:42.270
439
+ su número correcto, y los empiezas a pasar
440
+
441
+ 00:06:42.270 --> 00:06:44.350
442
+ por la red. Como son números aleatorios, te
443
+
444
+ 00:06:44.350 --> 00:06:47.389
445
+ va a dar errores constantemente. Los los errores
446
+
447
+ 00:06:47.389 --> 00:06:49.070
448
+ es que la red neuronal va a decir
449
+
450
+ 00:06:49.070 --> 00:06:50.750
451
+ que un 4 es un 5, que un
452
+
453
+ 00:06:50.750 --> 00:06:53.155
454
+ 1 es un 0, no importa. Cada vez
455
+
456
+ 00:06:53.155 --> 00:06:56.115
457
+ que genere un error, le reportas el error
458
+
459
+ 00:06:56.115 --> 00:06:58.515
460
+ a la neurona y la neurona empieza a
461
+
462
+ 00:06:58.515 --> 00:07:02.435
463
+ revisar matemáticamente cuáles fueron las neuronas que estaban
464
+
465
+ 00:07:02.435 --> 00:07:04.920
466
+ mal ajustadas porque dieron el error mal. Y
467
+
468
+ 00:07:05.160 --> 00:07:07.880
469
+ usando una serie de ecuaciones matemáticas que para
470
+
471
+ 00:07:07.880 --> 00:07:09.480
472
+ efectos de este curso no te tienes que
473
+
474
+ 00:07:09.480 --> 00:07:11.480
475
+ preocupar, pero cuando tomes alguno de nuestros cursos
476
+
477
+ 00:07:11.480 --> 00:07:13.560
478
+ de inteligencia artificial, vas a aprender que es
479
+
480
+ 00:07:13.560 --> 00:07:16.280
481
+ una función que se llama sigmoide o otra
482
+
483
+ 00:07:16.280 --> 00:07:17.971
484
+ función que se llama relu, y la derivada
485
+
486
+ 00:07:17.971 --> 00:07:21.945
487
+ de esas funciones, esto es cálculo vectorial muy
488
+
489
+ 00:07:21.945 --> 00:07:25.785
490
+ sencillo, cálculo diferencial realmente. Encuentran la distancia de
491
+
492
+ 00:07:25.785 --> 00:07:28.185
493
+ diferencia entre cada 1 de estos pesos y
494
+
495
+ 00:07:28.185 --> 00:07:30.949
496
+ lo van corrigiendo. Eso se hace en una
497
+
498
+ 00:07:31.090 --> 00:07:34.930
499
+ retropropagación, generas el error y luego regresas para
500
+
501
+ 00:07:34.930 --> 00:07:37.650
502
+ entender dónde cometiste el error y ajustar las
503
+
504
+ 00:07:37.650 --> 00:07:40.050
505
+ conexiones entre las neuronas a partir de los
506
+
507
+ 00:07:40.050 --> 00:07:41.970
508
+ datos con los que entrenaste. A medida que
509
+
510
+ 00:07:41.970 --> 00:07:45.335
511
+ ajustas los pesos mostrándole los diferentes ejemplos en
512
+
513
+ 00:07:45.335 --> 00:07:49.255
514
+ el entrenamiento y los devuelves ese proceso, eso
515
+
516
+ 00:07:49.255 --> 00:07:52.135
517
+ es el entrenamiento. Cuando tienes una base de
518
+
519
+ 00:07:52.135 --> 00:07:55.815
520
+ datos de entrenamiento, digamos que 10000 números, el
521
+
522
+ 00:07:55.815 --> 00:07:58.215
523
+ completar el entrenamiento con esos 10000 números se
524
+
525
+ 00:07:58.215 --> 00:08:01.500
526
+ conoce como una época o epoc. Y no
527
+
528
+ 00:08:01.500 --> 00:08:04.319
529
+ solamente completar el entrenamiento una vez es suficiente.
530
+
531
+ 00:08:04.780 --> 00:08:07.020
532
+ Como la red neuronal empieza de manera aleatoria,
533
+
534
+ 00:08:07.020 --> 00:08:09.180
535
+ es posible que incluso con una sola época
536
+
537
+ 00:08:09.180 --> 00:08:11.259
538
+ no sea suficiente para entrenar por completo la
539
+
540
+ 00:08:11.259 --> 00:08:14.854
541
+ red neuronal. Probablemente necesitas entrenarla múltiples veces hasta
542
+
543
+ 00:08:14.854 --> 00:08:17.335
544
+ que tu red quede muy ajustada. Y luego
545
+
546
+ 00:08:17.335 --> 00:08:20.055
547
+ tienes que probar con una base de esa
548
+
549
+ 00:08:20.055 --> 00:08:22.775
550
+ red de entrenamiento que te guardaste para probar,
551
+
552
+ 00:08:22.775 --> 00:08:24.715
553
+ a ver si está dando los resultados correctos.
554
+
555
+ 00:08:25.050 --> 00:08:26.730
556
+ Y de esa manera sabes si tu red
557
+
558
+ 00:08:26.730 --> 00:08:29.050
559
+ neuronal quedó bien entrenada o no. El resultado
560
+
561
+ 00:08:29.050 --> 00:08:31.210
562
+ final del entrenamiento es que, de pronto, la
563
+
564
+ 00:08:31.210 --> 00:08:33.929
565
+ capa oculta número 1 detecta las formas que
566
+
567
+ 00:08:33.929 --> 00:08:36.169
568
+ son una rayita, la capa oculta número 2
569
+
570
+ 00:08:36.169 --> 00:08:38.250
571
+ detecta las formas que son una curvita, y
572
+
573
+ 00:08:38.250 --> 00:08:40.490
574
+ la capa oculta número 3 detecta la conexión
575
+
576
+ 00:08:40.490 --> 00:08:42.848
577
+ entre ambas, y eso termina siendo que la
578
+
579
+ 00:08:42.848 --> 00:08:45.345
580
+ capa de salida final me genere una serie
581
+
582
+ 00:08:45.345 --> 00:08:47.904
583
+ de números de probabilidad, una matriz de 10
584
+
585
+ 00:08:47.904 --> 00:08:50.225
586
+ números de probabilidad desde el 100 por 100
587
+
588
+ 00:08:50.225 --> 00:08:52.964
589
+ hasta el 0 por 100, donde, a mayor
590
+
591
+ 00:08:53.345 --> 00:08:55.620
592
+ probabilidad de que un número específico corresponda a
593
+
594
+ 00:08:55.620 --> 00:08:58.060
595
+ una de esas neuronas, esa neurona tiene un
596
+
597
+ 00:08:58.060 --> 00:09:00.860
598
+ porcentaje más alto, una activación más grande. Lo
599
+
600
+ 00:09:00.860 --> 00:09:02.720
601
+ que significa que en una red bien entrenada,
602
+
603
+ 00:09:03.100 --> 00:09:05.340
604
+ los 400 píxeles de entrada que equivalen al
605
+
606
+ 00:09:05.340 --> 00:09:09.100
607
+ número 3 me debería generar una activación de
608
+
609
+ 00:09:09.100 --> 00:09:12.025
610
+ muy alto porcentaje comparado a otras neuronas en
611
+
612
+ 00:09:12.025 --> 00:09:14.944
613
+ el número correspondiente al número 3. En este
614
+
615
+ 00:09:14.944 --> 00:09:17.325
616
+ ejemplo, en la capa de entrada, creamos 400
617
+
618
+ 00:09:17.785 --> 00:09:19.225
619
+ neuronas que equivalen a cada 1 de los
620
+
621
+ 00:09:19.225 --> 00:09:22.205
622
+ pixeles, pero imagina que, en vez de usar
623
+
624
+ 00:09:22.745 --> 00:09:25.465
625
+ pixeles, usamos tokens. Un token es una forma
626
+
627
+ 00:09:25.465 --> 00:09:28.010
628
+ de expresar texto. El texto se puede romper
629
+
630
+ 00:09:28.070 --> 00:09:31.610
631
+ en palabras, sílabas o letras, eso sería tokenizar
632
+
633
+ 00:09:31.910 --> 00:09:35.370
634
+ el lenguaje. Y, por ejemplo, el lenguaje inglés
635
+
636
+ 00:09:35.510 --> 00:09:39.510
637
+ tiene en total 50000 tokens, 50000 permutaciones de
638
+
639
+ 00:09:39.510 --> 00:09:42.895
640
+ palabras, sílabas y letras para expresar lenguaje, incluyendo
641
+
642
+ 00:09:42.895 --> 00:09:46.415
643
+ puntuación, etcétera. Si agregáramos esos 50000 neuronas y
644
+
645
+ 00:09:46.415 --> 00:09:48.654
646
+ las pusiéramos en la entrada y pusiéramos otras
647
+
648
+ 00:09:48.654 --> 00:09:51.774
649
+ 50000 neuronas en la salida, podríamos crear la
650
+
651
+ 00:09:51.774 --> 00:09:54.090
652
+ estructura de la red neuronal para un gran
653
+
654
+ 00:09:54.090 --> 00:09:56.890
655
+ modelo de lenguaje, como ChatGPT o como un
656
+
657
+ 00:09:56.890 --> 00:09:59.690
658
+ traductor. Una red neuronal no es suficiente para
659
+
660
+ 00:09:59.690 --> 00:10:02.670
661
+ generar un traductor o para generar un autocompletador
662
+
663
+ 00:10:03.050 --> 00:10:06.650
664
+ como ChatGPT. Necesitaríamos una arquitectura matemática que se
665
+
666
+ 00:10:06.650 --> 00:10:09.785
667
+ conoce como transformador y un modelo especial o
668
+
669
+ 00:10:09.785 --> 00:10:13.385
670
+ mecanismo llamado atención para generar ese resultado, lo
671
+
672
+ 00:10:13.385 --> 00:10:15.625
673
+ cual pueden aprender en el curso de fundamentos
674
+
675
+ 00:10:15.625 --> 00:10:18.585
676
+ de LLMs. Pero esta es la base fundamental,
677
+
678
+ 00:10:18.585 --> 00:10:20.745
679
+ las redes neuronales. Platzi tiene un curso que
680
+
681
+ 00:10:20.745 --> 00:10:22.265
682
+ encuentras en los recursos de esta clase, que
683
+
684
+ 00:10:22.265 --> 00:10:24.640
685
+ es de matemáticas para inteligencia artificial. Pero no
686
+
687
+ 00:10:24.640 --> 00:10:28.020
688
+ es matemática compleja, todo esto es, básicamente, álgebra
689
+
690
+ 00:10:28.720 --> 00:10:31.680
691
+ lineal, vectores, matrices y un poquito de cálculo
692
+
693
+ 00:10:31.680 --> 00:10:34.399
694
+ diferencial. Realmente, no es tan difícil. Así como
695
+
696
+ 00:10:34.399 --> 00:10:36.560
697
+ las matemáticas no son tan difíciles, el código
698
+
699
+ 00:10:36.560 --> 00:10:39.014
700
+ tampoco. Estas matrices se expresan en una estructura
701
+
702
+ 00:10:39.014 --> 00:10:41.334
703
+ de datos que se conocen como vectores, hay
704
+
705
+ 00:10:41.334 --> 00:10:44.875
706
+ mucha multiplicación de vectores, y también existe un
707
+
708
+ 00:10:45.014 --> 00:10:47.415
709
+ tipo de dato especial llamado tensor, para hacer
710
+
711
+ 00:10:47.415 --> 00:10:50.860
712
+ más fácil estas multiplicaciones, sumas, etcétera. Y, por
713
+
714
+ 00:10:50.860 --> 00:10:53.360
715
+ último, mucho de esto ya está expresado en
716
+
717
+ 00:10:53.820 --> 00:10:57.120
718
+ librerías existentes que hacen relativamente sencilla su implementación.
719
+
720
+ 00:10:57.420 --> 00:11:00.060
721
+ En la siguiente clase, vamos a entender cómo
722
+
723
+ 00:11:00.060 --> 00:11:03.060
724
+ funciona un gran modelo de lenguaje por dentro
725
+
726
+ 00:11:03.060 --> 00:11:04.860
727
+ sobre lo que acabamos de aprender de redes
728
+
729
+ 00:11:04.860 --> 00:11:06.885
730
+ neuronales. Pero Platzi también tiene un curso de
731
+
732
+ 00:11:06.885 --> 00:11:09.245
733
+ fundamentos de LLMs que está aquí abajo en
734
+
735
+ 00:11:09.245 --> 00:11:11.605
736
+ los recursos y deberías tomar, junto con un
737
+
738
+ 00:11:11.605 --> 00:11:15.045
739
+ curso de algebra lineal aplicada al machine learning
740
+
741
+ 00:11:15.045 --> 00:11:17.125
742
+ y, por supuesto, un curso de deep learning
743
+
744
+ 00:11:17.125 --> 00:11:19.300
745
+ con TensorFlow, que es una de las librerías
746
+
747
+ 00:11:19.300 --> 00:11:21.560
748
+ más usadas para construir este tipo de mecanismos.
749
+
750
+ 00:11:21.860 --> 00:11:24.680
751
+ Y, por cierto, la inmensa mayoría de programadores
752
+
753
+ 00:11:25.060 --> 00:11:27.120
754
+ no saben que es una red neuronal. ¿Por
755
+
756
+ 00:11:27.120 --> 00:11:29.280
757
+ qué llegaste a esta clase? Estás en un
758
+
759
+ 00:11:29.280 --> 00:11:31.760
760
+ porcentaje muy selecto de la gente que lo
761
+
762
+ 00:11:31.760 --> 00:11:32.260
763
+ entiende.
subir/fixed/Curso de Fundamentos de Ingeniería de Software/05-Introducción a Blockchain e Inteligencia Artificial/02-Resumen.html ADDED
The diff for this file is too large to render. See raw diff
 
subir/fixed/Curso de Fundamentos de Ingeniería de Software/05-Introducción a Blockchain e Inteligencia Artificial/03-Cómo funcionan los LLMs.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cde6761ea6d2ca7627919bef1c23ea47922dbe2ed08614c5e6ee026420baaa84
3
+ size 324637685
subir/fixed/Curso de Fundamentos de Ingeniería de Software/05-Introducción a Blockchain e Inteligencia Artificial/03-Cómo funcionan los LLMs.vtt ADDED
@@ -0,0 +1,928 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ WEBVTT
2
+
3
+ 00:00:00.080 --> 00:00:01.920
4
+ Te digo que el gato maúlla y el
5
+
6
+ 00:00:01.920 --> 00:00:04.120
7
+ perro, ¿el perro qué hace? La gran mayoría
8
+
9
+ 00:00:04.120 --> 00:00:05.520
10
+ de ustedes va a decir que el perro
11
+
12
+ 00:00:05.520 --> 00:00:07.120
13
+ ladra, pero de pronto no, de pronto el
14
+
15
+ 00:00:07.120 --> 00:00:09.200
16
+ gato maúlla y el perro se asusta, de
17
+
18
+ 00:00:09.200 --> 00:00:11.200
19
+ pronto el gato maúlla y el perro no
20
+
21
+ 00:00:11.200 --> 00:00:14.275
22
+ maúlla. Todas son opciones completamente válidas, pero nuestra
23
+
24
+ 00:00:14.275 --> 00:00:16.114
25
+ inteligencia nos dice que la forma en la
26
+
27
+ 00:00:16.114 --> 00:00:17.715
28
+ que este acertijo se resuelve es que el
29
+
30
+ 00:00:17.715 --> 00:00:20.435
31
+ gato maúlla y el perro ladra. ¿Cómo hicimos
32
+
33
+ 00:00:20.435 --> 00:00:22.435
34
+ esto? Esto lo hacemos a través de algo
35
+
36
+ 00:00:22.435 --> 00:00:25.555
37
+ que se llama la atención. Le ponemos atención
38
+
39
+ 00:00:25.555 --> 00:00:28.090
40
+ a ciertas palabras y a otras no. Esto
41
+
42
+ 00:00:28.090 --> 00:00:30.570
43
+ se puede expresar matemáticamente en la ecuación que
44
+
45
+ 00:00:30.570 --> 00:00:32.409
46
+ ustedes están viendo en este momento en pantalla.
47
+
48
+ 00:00:32.409 --> 00:00:34.170
49
+ Lo que vamos a hacer es entender los
50
+
51
+ 00:00:34.170 --> 00:00:36.010
52
+ componentes de esa ecuación porque es la forma
53
+
54
+ 00:00:36.010 --> 00:00:38.090
55
+ en la que funcionan los grandes modelos de
56
+
57
+ 00:00:38.090 --> 00:00:41.085
58
+ lenguaje, la inteligencia artificial moderna. Lo primero que
59
+
60
+ 00:00:41.085 --> 00:00:43.885
61
+ tenemos que hacer es agarrar todo el cuerpo
62
+
63
+ 00:00:43.885 --> 00:00:46.204
64
+ del lenguaje de la cultura humana y romperlo
65
+
66
+ 00:00:46.204 --> 00:00:49.585
67
+ en pedacitos. Vamos a romper todas las palabras,
68
+
69
+ 00:00:49.725 --> 00:00:51.565
70
+ todas las letras, todo lo que existe en
71
+
72
+ 00:00:51.565 --> 00:00:56.360
73
+ la cultura humana en letras, sílabas y palabras.
74
+
75
+ 00:00:56.739 --> 00:00:59.060
76
+ Ustedes dirán que estos son una cantidad de
77
+
78
+ 00:00:59.060 --> 00:01:01.960
79
+ variaciones infinita, pero el lenguaje no es infinito.
80
+
81
+ 00:01:02.020 --> 00:01:04.900
82
+ Efectivamente, existen permutaciones casi infinitas de las letras,
83
+
84
+ 00:01:04.900 --> 00:01:06.420
85
+ pero la realidad es que cuando 1 toma
86
+
87
+ 00:01:06.420 --> 00:01:08.765
88
+ todos los libros escritos, todo el Internet, todos
89
+
90
+ 00:01:08.765 --> 00:01:10.565
91
+ los emails, todo lo que está en Google,
92
+
93
+ 00:01:10.565 --> 00:01:11.965
94
+ todo lo que está en la Wikipedia, todo
95
+
96
+ 00:01:11.965 --> 00:01:14.365
97
+ lo que está en redes, foros, etcétera, 1
98
+
99
+ 00:01:14.365 --> 00:01:16.125
100
+ se da cuenta que, por ejemplo, en el
101
+
102
+ 00:01:16.125 --> 00:01:18.685
103
+ caso del lenguaje inglés, hay una, más o
104
+
105
+ 00:01:18.685 --> 00:01:22.370
106
+ menos, cantidad de 50000 tokens. Si le agregamos
107
+
108
+ 00:01:22.390 --> 00:01:25.650
109
+ otros lenguajes, si le agregamos lenguajes de programación
110
+
111
+ 00:01:25.790 --> 00:01:28.210
112
+ u otros tipos de texto, el número aumenta
113
+
114
+ 00:01:28.510 --> 00:01:31.970
115
+ bastante. Típicamente, los sistemas de traducción, por ejemplo,
116
+
117
+ 00:01:32.030 --> 00:01:35.205
118
+ usan entre 40000 a 50000 tokens, Y los
119
+
120
+ 00:01:35.205 --> 00:01:38.965
121
+ grandes modelos de lenguaje, como GPT 4, Lama
122
+
123
+ 00:01:38.965 --> 00:01:41.205
124
+ y los otros grandes modelos que existen, pueden
125
+
126
+ 00:01:41.205 --> 00:01:45.765
127
+ usar hasta 256000 tokens en sus tokens del
128
+
129
+ 00:01:45.765 --> 00:01:47.925
130
+ vocabulario del lenguaje. Pero por ahora, ten en
131
+
132
+ 00:01:47.925 --> 00:01:49.525
133
+ mente que lo que hacemos es que agarramos
134
+
135
+ 00:01:49.525 --> 00:01:52.700
136
+ las palabras y las dividimos en pedacitos. Entonces,
137
+
138
+ 00:01:52.700 --> 00:01:55.820
139
+ por ejemplo, la palabra satisfacción tiene la palabra
140
+
141
+ 00:01:55.820 --> 00:01:58.300
142
+ acción y acción es un token, pero la
143
+
144
+ 00:01:58.300 --> 00:02:01.260
145
+ letra f puede ser otro token, el is
146
+
147
+ 00:02:01.260 --> 00:02:03.665
148
+ de satisfacción es un token y el SAT
149
+
150
+ 00:02:03.665 --> 00:02:05.345
151
+ es otro token. Y ahora que tengo cada
152
+
153
+ 00:02:05.345 --> 00:02:07.145
154
+ 1 de esos tokens, lo siguiente que tengo
155
+
156
+ 00:02:07.145 --> 00:02:10.565
157
+ que hacer es evaluar la correlación que existe
158
+
159
+ 00:02:10.864 --> 00:02:14.145
160
+ entre token y token. Entonces, imagina que tengo
161
+
162
+ 00:02:14.145 --> 00:02:16.860
163
+ el token gato, es la palabra gato, y
164
+
165
+ 00:02:16.860 --> 00:02:20.220
166
+ quiero buscar la palabra gato qué tan cercana
167
+
168
+ 00:02:20.220 --> 00:02:22.640
169
+ en todo el lenguaje está a otros conceptos.
170
+
171
+ 00:02:23.099 --> 00:02:25.500
172
+ Entonces, por ejemplo, imaginen que esto fuera un
173
+
174
+ 00:02:25.500 --> 00:02:27.260
175
+ plano cartesiano con un eje x que va
176
+
177
+ 00:02:27.260 --> 00:02:30.459
178
+ de 0 hasta n, donde n es el
179
+
180
+ 00:02:30.459 --> 00:02:32.955
181
+ número de tokens que existen. Entonces la palabra
182
+
183
+ 00:02:32.955 --> 00:02:37.155
184
+ gato en el eje animal estaría muy cerca
185
+
186
+ 00:02:37.155 --> 00:02:39.515
187
+ al 0. Entonces yo pongo que gato con
188
+
189
+ 00:02:39.515 --> 00:02:42.155
190
+ su correlación animal es un 0. Imagina que
191
+
192
+ 00:02:42.155 --> 00:02:44.555
193
+ tengo una segunda dimensión, como si fuera un
194
+
195
+ 00:02:44.555 --> 00:02:48.870
196
+ eje XYY estuviera la palabra automóvil. Gato respecto
197
+
198
+ 00:02:49.090 --> 00:02:51.250
199
+ a automóvil muy probablemente está tan arriba como
200
+
201
+ 00:02:51.250 --> 00:02:52.850
202
+ sea posible, porque gato no está cerca de
203
+
204
+ 00:02:52.850 --> 00:02:55.010
205
+ la palabra automóvil. Y ahora imagina que tengo
206
+
207
+ 00:02:55.010 --> 00:02:58.755
208
+ una tercera dimensión y tengo el eje amor,
209
+
210
+ 00:02:58.995 --> 00:03:00.595
211
+ no ama a los gatos. Pero 1 no
212
+
213
+ 00:03:00.595 --> 00:03:01.875
214
+ ama a los gatos más que a los
215
+
216
+ 00:03:01.875 --> 00:03:03.635
217
+ bebés. Entonces, gato no va a estar en
218
+
219
+ 00:03:03.635 --> 00:03:05.795
220
+ el 0 de la palabra amor, pero de
221
+
222
+ 00:03:05.795 --> 00:03:07.255
223
+ pronto sí va a estar en el 10.
224
+
225
+ 00:03:07.315 --> 00:03:11.255
226
+ Y así lo hago para todas las palabras
227
+
228
+ 00:03:11.475 --> 00:03:15.160
229
+ que existen, para todos los tokens, a partir
230
+
231
+ 00:03:15.380 --> 00:03:18.020
232
+ de qué tan cercanas están las palabras con
233
+
234
+ 00:03:18.020 --> 00:03:21.560
235
+ otras palabras en el lenguaje. Esto es ubicarlo
236
+
237
+ 00:03:21.620 --> 00:03:25.515
238
+ en un espacio nidimensional. Visualmente, los humanos solamente
239
+
240
+ 00:03:25.515 --> 00:03:28.234
241
+ podemos ver 3 dimensiones, pero un computador no
242
+
243
+ 00:03:28.234 --> 00:03:32.075
244
+ tiene problemas en guardar las 300000000000 de dimensiones
245
+
246
+ 00:03:32.075 --> 00:03:35.114
247
+ de GPT 3 o las 50000 dimensiones de
248
+
249
+ 00:03:35.114 --> 00:03:38.200
250
+ todos los tokens que requiere un traductor. Entonces,
251
+
252
+ 00:03:38.420 --> 00:03:41.620
253
+ cada palabra tiene un vector o un número
254
+
255
+ 00:03:41.620 --> 00:03:44.500
256
+ de números que me muestra la cercanía, entre
257
+
258
+ 00:03:44.500 --> 00:03:47.160
259
+ otras palabras, y se ubican de manera multidimensional,
260
+
261
+ 00:03:47.780 --> 00:03:50.340
262
+ y eso es tokenizar el lenguaje. Esto crea
263
+
264
+ 00:03:50.340 --> 00:03:53.155
265
+ un efecto muy interesante, y es que palabras
266
+
267
+ 00:03:54.255 --> 00:03:57.155
268
+ similares van a estar en estos espacios multidimensionales
269
+
270
+ 00:03:58.015 --> 00:04:00.575
271
+ muy cerca de otras palabras similares. Entonces, por
272
+
273
+ 00:04:00.575 --> 00:04:03.535
274
+ ejemplo, la palabra gato, perro y lobo van
275
+
276
+ 00:04:03.535 --> 00:04:05.875
277
+ a estar muy cerca entre sí, porque son
278
+
279
+ 00:04:06.015 --> 00:04:09.450
280
+ mamíferos, porque están en español, porque son animales
281
+
282
+ 00:04:09.550 --> 00:04:12.030
283
+ y la palabra banano o manzana también va
284
+
285
+ 00:04:12.030 --> 00:04:14.110
286
+ a estar muy cerca entre sí. El otro
287
+
288
+ 00:04:14.110 --> 00:04:17.070
289
+ fenómeno interesante que tiene esto es que las
290
+
291
+ 00:04:17.070 --> 00:04:20.367
292
+ palabras pueden tener vectores, un vector es una
293
+
294
+ 00:04:20.367 --> 00:04:20.680
295
+ dirección en ese plano cartesiano multidimensional que se
296
+
297
+ 00:04:20.680 --> 00:04:24.455
298
+ parecen dirección en ese plano cartesiano multidimensional que
299
+
300
+ 00:04:24.455 --> 00:04:27.015
301
+ se parecen mucho una con la otra. Entonces,
302
+
303
+ 00:04:27.015 --> 00:04:30.715
304
+ por ejemplo, rey y reina tienen una conexión
305
+
306
+ 00:04:30.775 --> 00:04:34.535
307
+ muy similar a hombre mujer. Ese vector muy
308
+
309
+ 00:04:34.535 --> 00:04:36.875
310
+ probablemente es el vector de la palabra género.
311
+
312
+ 00:04:37.120 --> 00:04:40.000
313
+ O, por ejemplo, la palabra caminé y caminar
314
+
315
+ 00:04:40.000 --> 00:04:43.120
316
+ va a estar muy similar a nadé y
317
+
318
+ 00:04:43.120 --> 00:04:46.160
319
+ nadar, porque el vector de tiempo presente o
320
+
321
+ 00:04:46.160 --> 00:04:49.699
322
+ pasado los hace estar muy cerca. O diferentes
323
+
324
+ 00:04:49.839 --> 00:04:54.115
325
+ países y sus capitales, el vector, la coordenada,
326
+
327
+ 00:04:54.294 --> 00:04:57.255
328
+ la serie de coordenadas que apuntan entre país
329
+
330
+ 00:04:57.255 --> 00:04:59.675
331
+ y ciudad capital van a ser muy similares.
332
+
333
+ 00:04:59.815 --> 00:05:02.395
334
+ Y si yo agarro los números que corresponden
335
+
336
+ 00:05:02.935 --> 00:05:06.220
337
+ al vector entre Italia y Roma y los
338
+
339
+ 00:05:06.220 --> 00:05:08.880
340
+ llevo a Colombia, muy probablemente me va a
341
+
342
+ 00:05:09.340 --> 00:05:13.180
343
+ apuntar muy cerca o exactamente hacia Bogotá. Esto
344
+
345
+ 00:05:13.180 --> 00:05:17.900
346
+ es convertir las palabras en expresiones matemáticas que
347
+
348
+ 00:05:17.900 --> 00:05:19.875
349
+ se pueden sumar o restar. Eso nos permite
350
+
351
+ 00:05:19.875 --> 00:05:23.335
352
+ hacer cosas increíbles, por ejemplo, mamá menos género
353
+
354
+ 00:05:23.795 --> 00:05:27.075
355
+ probablemente me da pariente, pariente más masculino probablemente
356
+
357
+ 00:05:27.075 --> 00:05:30.294
358
+ me da padre, o la palabra regente más
359
+
360
+ 00:05:30.435 --> 00:05:32.435
361
+ mujer probablemente me da igual a reina, y
362
+
363
+ 00:05:32.435 --> 00:05:35.160
364
+ regente más hombre rey. Lo siguiente que tengo
365
+
366
+ 00:05:35.160 --> 00:05:39.660
367
+ que hacer es crear una red de pesos,
368
+
369
+ 00:05:40.040 --> 00:05:44.380
370
+ de probabilidad estadística, donde las palabras estén estadísticamente
371
+
372
+ 00:05:44.600 --> 00:05:47.960
373
+ conectadas entre sí, los tokens realmente. Siempre que
374
+
375
+ 00:05:47.960 --> 00:05:50.115
376
+ yo diga palabras me refiero a los tokens,
377
+
378
+ 00:05:50.115 --> 00:05:52.995
379
+ y los tokens son palabras, sílabas o letras
380
+
381
+ 00:05:52.995 --> 00:05:54.775
382
+ de todo el lenguaje de la cultura humana.
383
+
384
+ 00:05:54.835 --> 00:05:56.995
385
+ Así como usamos todo el lenguaje de la
386
+
387
+ 00:05:56.995 --> 00:06:00.034
388
+ cultura humana para crear nuestros tokens, ahora necesitamos
389
+
390
+ 00:06:00.034 --> 00:06:01.974
391
+ usar todo el lenguaje de la cultura humana
392
+
393
+ 00:06:02.060 --> 00:06:04.780
394
+ para agregar la probabilidad de conexión entre cada
395
+
396
+ 00:06:04.780 --> 00:06:07.180
397
+ 1 de ellos. Con el lenguaje tokenizado, el
398
+
399
+ 00:06:07.180 --> 00:06:10.160
400
+ siguiente paso es tratar de encontrar la probabilidad
401
+
402
+ 00:06:10.300 --> 00:06:12.620
403
+ en la que una palabra ocurre después de
404
+
405
+ 00:06:12.620 --> 00:06:15.420
406
+ otra. Como nosotros tenemos todo el lenguaje de
407
+
408
+ 00:06:15.420 --> 00:06:18.215
409
+ la cultura humana en libros, en Internet, en
410
+
411
+ 00:06:18.215 --> 00:06:21.015
412
+ las redes, en la Wikipedia, en tantos otros
413
+
414
+ 00:06:21.015 --> 00:06:24.835
415
+ lugares. Las empresas de inteligencia artificial toman esta
416
+
417
+ 00:06:24.935 --> 00:06:27.254
418
+ fuente de datos, la cultura humana, los textos
419
+
420
+ 00:06:27.254 --> 00:06:29.574
421
+ que hemos escrito, y buscan expresar de una
422
+
423
+ 00:06:29.574 --> 00:06:32.470
424
+ manera matemática la probabilidad de que una letra
425
+
426
+ 00:06:32.470 --> 00:06:34.230
427
+ vaya después de cierta otra letra, que una
428
+
429
+ 00:06:34.230 --> 00:06:36.790
430
+ palabra vaya después de cierta otra palabra. Esto
431
+
432
+ 00:06:36.790 --> 00:06:39.830
433
+ se conoce como el corpus del lenguaje o
434
+
435
+ 00:06:39.830 --> 00:06:41.910
436
+ los datos de entrenamiento con el que los
437
+
438
+ 00:06:41.910 --> 00:06:45.075
439
+ voy a entrenar. Y divido esto en 2
440
+
441
+ 00:06:45.075 --> 00:06:47.475
442
+ pedazos. Un 70 por 100 lo uso para
443
+
444
+ 00:06:47.475 --> 00:06:49.715
445
+ entrenar y otro 30 por 100, el 30
446
+
447
+ 00:06:49.715 --> 00:06:52.355
448
+ por 100 restante, lo uso para probar, de
449
+
450
+ 00:06:52.355 --> 00:06:54.755
451
+ tal manera que este primer 70 por 100
452
+
453
+ 00:06:54.755 --> 00:06:56.940
454
+ entrena mi red neuronal y luego esa red
455
+
456
+ 00:06:56.940 --> 00:06:58.780
457
+ neuronal le hago pruebas con el 30 por
458
+
459
+ 00:06:58.780 --> 00:07:01.100
460
+ 100 restante. Y si me da lo mismo
461
+
462
+ 00:07:01.100 --> 00:07:02.940
463
+ y se comporta igual, es que el entrenamiento
464
+
465
+ 00:07:02.940 --> 00:07:06.060
466
+ quedó bien. Una red neuronal es un mecanismo
467
+
468
+ 00:07:06.060 --> 00:07:10.540
469
+ estadístico para encontrar los patrones escondidos entre los
470
+
471
+ 00:07:10.540 --> 00:07:13.705
472
+ datos. En el lenguaje, por ejemplo, nosotros sabemos
473
+
474
+ 00:07:13.705 --> 00:07:17.965
475
+ que hay una conexión entre adverbios, sílabas, adjetivos,
476
+
477
+ 00:07:18.425 --> 00:07:22.925
478
+ sustantivos y muchos otros patrones que emergen simplemente
479
+
480
+ 00:07:22.985 --> 00:07:25.240
481
+ de la posición de las letras, las sílabas
482
+
483
+ 00:07:25.240 --> 00:07:27.500
484
+ y las palabras, lo que nosotros llamamos tokens.
485
+
486
+ 00:07:27.880 --> 00:07:29.960
487
+ Así que una red neuronal es un proceso
488
+
489
+ 00:07:29.960 --> 00:07:32.360
490
+ que tiene una capa de entrada, unas capas
491
+
492
+ 00:07:32.360 --> 00:07:35.070
493
+ escondidas y una capa de salida. La capa
494
+
495
+ 00:07:35.070 --> 00:07:38.775
496
+ de entrada son todos los tokens que corresponden
497
+
498
+ 00:07:39.235 --> 00:07:43.414
499
+ al vocabulario de entrenamiento, a nuestros vectores de
500
+
501
+ 00:07:43.875 --> 00:07:45.955
502
+ lenguaje que aprendimos en el paso anterior. Y
503
+
504
+ 00:07:45.955 --> 00:07:48.354
505
+ la capa de salida es exactamente lo mismo.
506
+
507
+ 00:07:48.354 --> 00:07:50.595
508
+ La idea es predecir a partir de unas
509
+
510
+ 00:07:50.595 --> 00:07:53.280
511
+ palabras de entrada cuál sería la palabra de
512
+
513
+ 00:07:53.280 --> 00:07:57.920
514
+ salida. Las capas intermedias o capas escondidas son
515
+
516
+ 00:07:57.920 --> 00:08:02.740
517
+ funciones matemáticas de interconexión que detectan estos patrones
518
+
519
+ 00:08:02.880 --> 00:08:06.745
520
+ y que van modificando unos números estadísticos para
521
+
522
+ 00:08:06.745 --> 00:08:09.625
523
+ cambiar la capa de salida. Estos patrones se
524
+
525
+ 00:08:09.625 --> 00:08:12.745
526
+ van ajustando en el período de entrenamiento. A
527
+
528
+ 00:08:12.745 --> 00:08:16.185
529
+ medida que nuestra red neuronal lee todo el
530
+
531
+ 00:08:16.185 --> 00:08:18.520
532
+ cuerpo del lenguaje de la cultura humana, va
533
+
534
+ 00:08:18.520 --> 00:08:21.740
535
+ entendiendo que muy probablemente después de la palabra
536
+
537
+ 00:08:21.880 --> 00:08:24.199
538
+ yo puede seguir la palabra amo, que muy
539
+
540
+ 00:08:24.199 --> 00:08:27.080
541
+ probablemente después de la palabra mi mamá sigue
542
+
543
+ 00:08:27.080 --> 00:08:30.575
544
+ la palabra me. Y todo ese ajuste de
545
+
546
+ 00:08:30.575 --> 00:08:32.975
547
+ entendimiento de patrones del lenguaje, como el patrón
548
+
549
+ 00:08:32.975 --> 00:08:36.294
550
+ de rimar, el patrón de programar, el patrón
551
+
552
+ 00:08:36.294 --> 00:08:39.835
553
+ de escribir lenguaje de marketing, se va expresando
554
+
555
+ 00:08:39.895 --> 00:08:43.335
556
+ matemáticamente para generar esta estructura final que se
557
+
558
+ 00:08:43.335 --> 00:08:45.415
559
+ vuelve la red neuronal de un gran modelo
560
+
561
+ 00:08:45.415 --> 00:08:48.690
562
+ de lenguaje. Estos son 1000 de 1000000 de
563
+
564
+ 00:08:48.690 --> 00:08:51.010
565
+ parámetros, que son los pesos de cada una
566
+
567
+ 00:08:51.010 --> 00:08:53.990
568
+ de estas letras que nosotros llamamos neuronas. Estos
569
+
570
+ 00:08:54.050 --> 00:08:57.410
571
+ 1000 de 1000000 de parámetros toman muchísimo tiempo
572
+
573
+ 00:08:57.410 --> 00:08:58.529
574
+ y es parte de la razón por la
575
+
576
+ 00:08:58.529 --> 00:09:00.450
577
+ que la inteligencia artificial se demoró tanto en
578
+
579
+ 00:09:00.450 --> 00:09:03.935
580
+ llegar, porque aunque estos algoritmos son viejos, nacieron
581
+
582
+ 00:09:03.935 --> 00:09:05.935
583
+ en los años 50, se fueron optimizando en
584
+
585
+ 00:09:05.935 --> 00:09:08.415
586
+ los noventas, no es hasta ahora que tenemos
587
+
588
+ 00:09:08.415 --> 00:09:11.454
589
+ suficientes chips y suficiente memoria RAM para entrenar
590
+
591
+ 00:09:11.454 --> 00:09:13.295
592
+ una red neuronal de este estilo. Esto es
593
+
594
+ 00:09:13.295 --> 00:09:15.795
595
+ mucho más complejo y tiene otras ecuaciones matemáticas
596
+
597
+ 00:09:15.930 --> 00:09:18.830
598
+ por dentro en las que ahondamos con más
599
+
600
+ 00:09:19.290 --> 00:09:21.450
601
+ detalle en la clase de redes neuronales del
602
+
603
+ 00:09:21.450 --> 00:09:23.770
604
+ curso de fundamentos de ingeniería de software. Y,
605
+
606
+ 00:09:23.770 --> 00:09:26.089
607
+ por supuesto, lo podemos ver en nivel código
608
+
609
+ 00:09:26.089 --> 00:09:28.463
610
+ y matemático en los cursos de redes neuronales
611
+
612
+ 00:09:28.463 --> 00:09:30.649
613
+ y machine learning de Platzi. Pero esto no
614
+
615
+ 00:09:30.649 --> 00:09:33.475
616
+ es suficiente. Con solo entrenar una red neuronal
617
+
618
+ 00:09:33.475 --> 00:09:36.035
619
+ y tener todos los tokens puedo programar, por
620
+
621
+ 00:09:36.035 --> 00:09:38.995
622
+ ejemplo, un traductor, pero no puedo hacer que
623
+
624
+ 00:09:38.995 --> 00:09:41.575
625
+ el gato mahuye o que el perro ladre.
626
+
627
+ 00:09:41.875 --> 00:09:44.515
628
+ Todavía no he logrado completar todos los datos
629
+
630
+ 00:09:44.515 --> 00:09:47.510
631
+ que necesito para generar un sistema de predicción
632
+
633
+ 00:09:47.890 --> 00:09:49.810
634
+ efectivo. En general, la razón por la que
635
+
636
+ 00:09:49.810 --> 00:09:51.830
637
+ no se puede es porque tendría que multiplicar
638
+
639
+ 00:09:52.130 --> 00:09:53.490
640
+ por cada una de las letras, por cada
641
+
642
+ 00:09:53.490 --> 00:09:54.610
643
+ 1 de los tokens, por cada una de
644
+
645
+ 00:09:54.610 --> 00:09:57.030
646
+ las palabras y sílabas que tengo acá expresadas,
647
+
648
+ 00:09:57.410 --> 00:09:59.570
649
+ todas las variaciones. Y esto es un problema
650
+
651
+ 00:09:59.570 --> 00:10:01.925
652
+ n a la n, que tomaría una cantidad
653
+
654
+ 00:10:01.925 --> 00:10:04.565
655
+ de memoria RAM, de CPU, de GPU y
656
+
657
+ 00:10:04.565 --> 00:10:08.085
658
+ de chips ingente. Pero no necesito hacerlo para
659
+
660
+ 00:10:08.085 --> 00:10:11.845
661
+ todas, solamente necesito hacerlo para las palabras más
662
+
663
+ 00:10:11.845 --> 00:10:14.635
664
+ importantes. Cuando tú dices que el gato maúlla
665
+
666
+ 00:10:14.635 --> 00:10:17.740
667
+ y el perro hay una palabra particular a
668
+
669
+ 00:10:17.740 --> 00:10:19.660
670
+ la que le pones más atención. Probablemente es
671
+
672
+ 00:10:19.660 --> 00:10:21.900
673
+ la palabra maúlla y hay otra palabra a
674
+
675
+ 00:10:21.900 --> 00:10:23.580
676
+ la que le pones atención, probablemente es la
677
+
678
+ 00:10:23.580 --> 00:10:26.540
679
+ palabra gato. Así funciona tu mente. Tú no
680
+
681
+ 00:10:26.540 --> 00:10:28.380
682
+ leíste todo el texto, solo te enfocas en
683
+
684
+ 00:10:28.380 --> 00:10:31.655
685
+ los elementos más importantes para predecir la siguiente
686
+
687
+ 00:10:31.655 --> 00:10:33.835
688
+ palabra y de esta manera completar el texto.
689
+
690
+ 00:10:34.215 --> 00:10:36.055
691
+ Esto se le conoce como el modelo de
692
+
693
+ 00:10:36.055 --> 00:10:39.115
694
+ atención y funciona de la siguiente manera. Existe
695
+
696
+ 00:10:39.175 --> 00:10:41.575
697
+ un query, un key y un value, una
698
+
699
+ 00:10:41.575 --> 00:10:44.490
700
+ consulta, una llave y un valor. Esto que
701
+
702
+ 00:10:44.490 --> 00:10:46.910
703
+ tenemos acá, el gato Maura y el perro,
704
+
705
+ 00:10:47.050 --> 00:10:49.450
706
+ esto es un prompt, el prompt que tú
707
+
708
+ 00:10:49.450 --> 00:10:52.410
709
+ escribes en ChatGPT o en donde sea. El
710
+
711
+ 00:10:52.410 --> 00:10:55.150
712
+ prompt lo que hace es ver el último
713
+
714
+ 00:10:55.290 --> 00:10:57.770
715
+ token, la última palabra, en este caso es
716
+
717
+ 00:10:57.770 --> 00:11:00.474
718
+ perro, Y de ese último token va a
719
+
720
+ 00:11:00.474 --> 00:11:02.925
721
+ evaluar a lo largo de todo el resto
722
+
723
+ 00:11:02.925 --> 00:11:05.805
724
+ del prompt, todo lo que ha escrito, cuáles
725
+
726
+ 00:11:05.805 --> 00:11:10.205
727
+ son los tokens de mayor significancia, que están
728
+
729
+ 00:11:10.205 --> 00:11:13.330
730
+ más cerca del último. ¿Cómo saben que está
731
+
732
+ 00:11:13.330 --> 00:11:15.670
733
+ más cerca? Porque están en el plano cartesiano
734
+
735
+ 00:11:15.730 --> 00:11:19.590
736
+ del espacio enidimensional de tokens. Entonces, la palabra
737
+
738
+ 00:11:19.970 --> 00:11:22.310
739
+ perro está muy cerca de la palabra maúlla
740
+
741
+ 00:11:22.530 --> 00:11:25.270
742
+ y está definitivamente cerca de la palabra gato.
743
+
744
+ 00:11:25.890 --> 00:11:27.970
745
+ Estas palabras que son cercanas a la palabra
746
+
747
+ 00:11:27.970 --> 00:11:32.105
748
+ perro las volvemos la llave. Y luego la
749
+
750
+ 00:11:32.105 --> 00:11:35.785
751
+ b es el valor. Ese valor es una
752
+
753
+ 00:11:35.785 --> 00:11:40.125
754
+ ecuación matemática que multiplica y mueve las matrices
755
+
756
+ 00:11:40.505 --> 00:11:42.800
757
+ de los números de puntería de la palabra
758
+
759
+ 00:11:42.800 --> 00:11:45.280
760
+ perro y de la palabra maúlla y gato,
761
+
762
+ 00:11:45.280 --> 00:11:47.840
763
+ a través de una función de activación. Lo
764
+
765
+ 00:11:47.840 --> 00:11:50.400
766
+ importante es que esa v termina siendo un
767
+
768
+ 00:11:50.400 --> 00:11:53.280
769
+ vector que usando la palabra maúlla y la
770
+
771
+ 00:11:53.280 --> 00:11:55.211
772
+ palabra gato junto con la palabra perro, que
773
+
774
+ 00:11:55.211 --> 00:11:58.305
775
+ es la última palabra del prompt, apunta a
776
+
777
+ 00:11:58.305 --> 00:12:01.584
778
+ la probabilidad más alta de una palabra que
779
+
780
+ 00:12:01.584 --> 00:12:05.425
781
+ continúe. Esto genera otro vector de probabilidades que
782
+
783
+ 00:12:05.425 --> 00:12:07.505
784
+ genera una serie de palabras. Puede que el
785
+
786
+ 00:12:07.505 --> 00:12:09.265
787
+ perro ladre, que el perro es, que el
788
+
789
+ 00:12:09.265 --> 00:12:11.670
790
+ perro llora o que el perro no. Esta
791
+
792
+ 00:12:11.670 --> 00:12:14.230
793
+ probabilidad es lo que termina siendo que eventualmente
794
+
795
+ 00:12:14.230 --> 00:12:16.890
796
+ elijamos la palabra ladra, porque tiene el mayor
797
+
798
+ 00:12:17.029 --> 00:12:19.589
799
+ porcentaje. Pero los grandes modelos de lenguaje no
800
+
801
+ 00:12:19.589 --> 00:12:22.630
802
+ eligen solamente la palabra de mayor probabilidad. Los
803
+
804
+ 00:12:22.630 --> 00:12:24.149
805
+ modelos de lenguaje tienen algo que se llama
806
+
807
+ 00:12:24.149 --> 00:12:27.755
808
+ temperatura, porque la creatividad no funciona siendo siempre
809
+
810
+ 00:12:27.755 --> 00:12:29.755
811
+ lo mismo. Para que haya un nivel de
812
+
813
+ 00:12:29.755 --> 00:12:31.514
814
+ inteligencia tiene que haber un cierto nivel de
815
+
816
+ 00:12:31.514 --> 00:12:33.675
817
+ creatividad, por ende, a veces tengo que elegir
818
+
819
+ 00:12:33.675 --> 00:12:36.315
820
+ la segunda o la tercera opción. Los grandes
821
+
822
+ 00:12:36.315 --> 00:12:39.274
823
+ módulos de lenguaje, a veces, de manera aleatoria,
824
+
825
+ 00:12:39.274 --> 00:12:40.770
826
+ eligen la segunda o la tercera opción. Y
827
+
828
+ 00:12:40.770 --> 00:12:42.930
829
+ es por esto que no son deterministas, que
830
+
831
+ 00:12:42.930 --> 00:12:45.430
832
+ no generan el mismo texto todo el tiempo,
833
+
834
+ 00:12:45.490 --> 00:12:48.610
835
+ pero generan textos muy similares. Sin embargo, esto
836
+
837
+ 00:12:48.610 --> 00:12:52.210
838
+ solamente sirve para autocompletar los primeros GPTs o
839
+
840
+ 00:12:52.210 --> 00:12:55.575
841
+ Generative Pretrain Transformers, que son estos modelos que
842
+
843
+ 00:12:55.575 --> 00:12:58.135
844
+ integran la red neuronal, los tokens, el espacio
845
+
846
+ 00:12:58.135 --> 00:13:00.855
847
+ en el dimensional, la atención, 1 les colocaba
848
+
849
+ 00:13:00.855 --> 00:13:03.975
850
+ un texto y tenían que completarlo. No se
851
+
852
+ 00:13:03.975 --> 00:13:06.055
853
+ comportaban como un chat. Lo que hizo Pen
854
+
855
+ 00:13:06.055 --> 00:13:08.855
856
+ AI es que contrató a 6000 personas en
857
+
858
+ 00:13:08.855 --> 00:13:12.680
859
+ África para hablar con el modelo y regañarlo
860
+
861
+ 00:13:12.740 --> 00:13:14.340
862
+ cuando el modelo no se comportaba como un
863
+
864
+ 00:13:14.340 --> 00:13:17.620
865
+ chat y recompensarlo cuando el modelo se comportaba
866
+
867
+ 00:13:17.620 --> 00:13:20.100
868
+ como un chat. Esto recalibró las neuronas del
869
+
870
+ 00:13:20.100 --> 00:13:23.940
871
+ modelo para enseñarle al modelo a responder como
872
+
873
+ 00:13:23.940 --> 00:13:26.725
874
+ un chat o como no un chat. Esto
875
+
876
+ 00:13:26.725 --> 00:13:31.285
877
+ se conoce como RLHF, Remeforcement Learning with Human
878
+
879
+ 00:13:31.285 --> 00:13:33.205
880
+ Feedback, y es la forma en la que
881
+
882
+ 00:13:33.205 --> 00:13:36.265
883
+ los modelos aprenden a hablar como un chat.
884
+
885
+ 00:13:36.565 --> 00:13:40.310
886
+ Esto incluye aprender cuándo dejar de hablar, cuándo
887
+
888
+ 00:13:40.310 --> 00:13:43.270
889
+ dejar de generar resultados. Esta es la razón
890
+
891
+ 00:13:43.270 --> 00:13:46.470
892
+ por la que ChatGPT responde muchas veces en
893
+
894
+ 00:13:46.470 --> 00:13:48.970
895
+ listas de viñetas, o por la que Anthropic
896
+
897
+ 00:13:49.190 --> 00:13:52.470
898
+ Kloth y Gemini tienen respuestas tan diferentes en
899
+
900
+ 00:13:52.470 --> 00:13:55.050
901
+ su personalidad a la personalidad que tiene Kloth.
902
+
903
+ 00:13:55.375 --> 00:13:57.695
904
+ Hay varios cursos de Platzi de procesamiento de
905
+
906
+ 00:13:57.695 --> 00:13:59.215
907
+ lenguaje natural que te lo explican más a
908
+
909
+ 00:13:59.215 --> 00:14:01.375
910
+ fondo, pero el curso más importante es el
911
+
912
+ 00:14:01.375 --> 00:14:04.575
913
+ curso de fundamentos de LLMs, que te enseña
914
+
915
+ 00:14:04.575 --> 00:14:07.087
916
+ de punta a punta cómo construir esto, cómo
917
+
918
+ 00:14:07.407 --> 00:14:09.487
919
+ instalarlo en tu computadora y cómo ser un
920
+
921
+ 00:14:09.487 --> 00:14:12.126
922
+ ingeniero que está construyendo la frontera del conocimiento,
923
+
924
+ 00:14:12.126 --> 00:14:14.047
925
+ que hoy en día es la inteligencia artificial
926
+
927
+ 00:14:14.047 --> 00:14:16.066
928
+ generativa con grandes modelos de lenguaje.