2999a commited on
Commit
8a55d5b
·
verified ·
1 Parent(s): 7740317

Upload batch from C CLI

Browse files

Uploaded via hf-downloader C client

This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +27 -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/01-Computación Básica/08-Resumen.html +0 -0
  46. subir/fixed/Curso de Fundamentos de Ingeniería de Software/01-Computación Básica/09-Resumen.html +0 -0
  47. subir/fixed/Curso de Fundamentos de Ingeniería de Software/01-Computación Básica/09-Teléfonos y sus System on a Chip o SOC.mp4 +3 -0
  48. subir/fixed/Curso de Fundamentos de Ingeniería de Software/01-Computación Básica/09-Teléfonos y sus System on a Chip o SOC.vtt +725 -0
  49. subir/fixed/Curso de Fundamentos de Ingeniería de Software/01-Computación Básica/10-GPUs Procesadores gráficos y de AI.mp4 +3 -0
  50. subir/fixed/Curso de Fundamentos de Ingeniería de Software/01-Computación Básica/10-GPUs Procesadores gráficos y de AI.vtt +620 -0
.gitattributes CHANGED
@@ -133,3 +133,30 @@ subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Inge
133
  subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/01-Computación[[:space:]]Básica/06-Cómo[[:space:]]funciona[[:space:]]internet.mp4 filter=lfs diff=lfs merge=lfs -text
134
  subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/01-Computación[[:space:]]Básica/07-Cómo[[:space:]]las[[:space:]]computadoras[[:space:]]guardan[[:space:]]datos.mp4 filter=lfs diff=lfs merge=lfs -text
135
  subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/01-Computación[[:space:]]Básica/08-Cómo[[:space:]]se[[:space:]]organizan[[:space:]]los[[:space:]]archivos.mp4 filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/01-Computación[[:space:]]Básica/06-Cómo[[:space:]]funciona[[:space:]]internet.mp4 filter=lfs diff=lfs merge=lfs -text
134
  subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/01-Computación[[:space:]]Básica/07-Cómo[[:space:]]las[[:space:]]computadoras[[:space:]]guardan[[:space:]]datos.mp4 filter=lfs diff=lfs merge=lfs -text
135
  subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/01-Computación[[:space:]]Básica/08-Cómo[[:space:]]se[[:space:]]organizan[[:space:]]los[[:space:]]archivos.mp4 filter=lfs diff=lfs merge=lfs -text
136
+ subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/01-Computación[[:space:]]Básica/09-Teléfonos[[:space:]]y[[:space:]]sus[[:space:]]System[[:space:]]on[[:space:]]a[[:space:]]Chip[[:space:]]o[[:space:]]SOC.mp4 filter=lfs diff=lfs merge=lfs -text
137
+ subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/01-Computación[[:space:]]Básica/10-GPUs[[:space:]]Procesadores[[:space:]]gráficos[[:space:]]y[[:space:]]de[[:space:]]AI.mp4 filter=lfs diff=lfs merge=lfs -text
138
+ subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/01-Computación[[:space:]]Básica/11-Qué[[:space:]]es[[:space:]]un[[:space:]]algoritmo[[:space:]]y[[:space:]]qué[[:space:]]es[[:space:]]un[[:space:]]lenguaje[[:space:]]de[[:space:]]programación.mp4 filter=lfs diff=lfs merge=lfs -text
139
+ subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/02-Redes[[:space:]]e[[:space:]]Internet/01-Direcciones[[:space:]]IP[[:space:]]y[[:space:]]el[[:space:]]protocolo[[:space:]]de[[:space:]]Internet.mp4 filter=lfs diff=lfs merge=lfs -text
140
+ subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/02-Redes[[:space:]]e[[:space:]]Internet/02-Nombres[[:space:]]de[[:space:]]dominio[[:space:]]DNS[[:space:]]y[[:space:]]cómo[[:space:]]obtener[[:space:]]un[[:space:]]com.mp4 filter=lfs diff=lfs merge=lfs -text
141
+ subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/02-Redes[[:space:]]e[[:space:]]Internet/03-Modelo[[:space:]]ClienteServidor[[:space:]]Cómo[[:space:]]funciona[[:space:]]un[[:space:]]sitio[[:space:]]web.mp4 filter=lfs diff=lfs merge=lfs -text
142
+ subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/03-Sistemas[[:space:]]Operativos[[:space:]]y[[:space:]]Almacenamiento/01-Diferencias[[:space:]]entre[[:space:]]Windows[[:space:]]Linux[[:space:]]y[[:space:]]MacOS.mp4 filter=lfs diff=lfs merge=lfs -text
143
+ subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/03-Sistemas[[:space:]]Operativos[[:space:]]y[[:space:]]Almacenamiento/02-Permisos[[:space:]]niveles[[:space:]]de[[:space:]]procesos[[:space:]]y[[:space:]]privilegios[[:space:]]de[[:space:]]ejecución.mp4 filter=lfs diff=lfs merge=lfs -text
144
+ subir/fixed/Curso[[:space:]]de[[:space:]]Fundamentos[[:space:]]de[[:space:]]Ingeniería[[:space:]]de[[:space:]]Software/03-Sistemas[[:space:]]Operativos[[:space:]]y[[:space:]]Almacenamiento/03-Archivos[[:space:]]Metadatos[[:space:]]cabeceras[[:space:]]y[[:space:]]extensiones.mp4 filter=lfs diff=lfs merge=lfs -text
145
+ 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/01-Qué[[:space:]]son[[:space:]]las[[:space:]]bases[[:space:]]de[[:space:]]datos.mp4 filter=lfs diff=lfs merge=lfs -text
146
+ 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/02-Cómo[[:space:]]funciona[[:space:]]el[[:space:]]formato[[:space:]]JPG.mp4 filter=lfs diff=lfs merge=lfs -text
147
+ 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
148
+ 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
149
+ 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
150
+ 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
151
+ 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
152
+ 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
153
+ 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
154
+ 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
155
+ 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
156
+ 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
157
+ 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
158
+ 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
159
+ 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
160
+ 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
161
+ 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
162
+ 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/01-Computación Básica/08-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/01-Computación Básica/09-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/01-Computación Básica/09-Teléfonos y sus System on a Chip o SOC.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3f7f5301228570c0684a7c28430b4eb7c6b88cda8b10c3f219498f2a6652ca76
3
+ size 265860513
subir/fixed/Curso de Fundamentos de Ingeniería de Software/01-Computación Básica/09-Teléfonos y sus System on a Chip o SOC.vtt ADDED
@@ -0,0 +1,725 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ WEBVTT
2
+
3
+ 00:00:00.000 --> 00:00:03.800
4
+ Los circuitos integrados, los chips, la forma en la que funciona la electrónica moderna,
5
+
6
+ 00:00:03.800 --> 00:00:09.120
7
+ empezaron como unos tubos de vacío que ocupaban inmensas cantidades de espacio
8
+
9
+ 00:00:09.120 --> 00:00:14.400
10
+ y que así fue como empezaron las primeras computadoras, los televisores, muchísimas otras mecánicas
11
+
12
+ 00:00:14.400 --> 00:00:17.000
13
+ de la forma en la que se construía la electrónica moderna.
14
+
15
+ 00:00:17.000 --> 00:00:21.320
16
+ Pero lentamente nuestros dispositivos se fueron haciendo más pequeños y más pequeños y más pequeños
17
+
18
+ 00:00:21.320 --> 00:00:24.840
19
+ porque empezamos a empacar transistores en formas más cortas
20
+
21
+ 00:00:24.840 --> 00:00:28.840
22
+ y porque el consumidor quería dispositivos más pequeños que usaran menos electricidad
23
+
24
+ 00:00:28.840 --> 00:00:30.400
25
+ y que fueran más portátiles.
26
+
27
+ 00:00:30.400 --> 00:00:35.480
28
+ La electricidad funcionaba inicialmente con baterías AA, AAA o esas baterías grandotas de 9 voltios
29
+
30
+ 00:00:35.480 --> 00:00:38.840
31
+ con las que podíamos usar cosas como una grabadora de cassette,
32
+
33
+ 00:00:38.840 --> 00:00:42.760
34
+ una de las que llamaban boombox, y de esa manera tenemos música o un Walkman
35
+
36
+ 00:00:42.760 --> 00:00:48.360
37
+ o tantos otros dispositivos que quemaban y quemaban esas baterías a muy alta velocidad
38
+
39
+ 00:00:48.360 --> 00:00:53.680
40
+ y eran muy costosas, así que había un incentivo natural de los fabricantes de reducir las baterías.
41
+
42
+ 00:00:53.680 --> 00:00:58.040
43
+ Y luego llegaron los smartphones y antes de eso los teléfonos móviles, entre muchas otras cosas.
44
+
45
+ 00:00:58.040 --> 00:01:02.880
46
+ Esa necesidad de reducir el gasto de electricidad y reducir el espacio
47
+
48
+ 00:01:02.880 --> 00:01:07.240
49
+ empezó a hacer que los chips se volvieran más y más y más especializados.
50
+
51
+ 00:01:07.240 --> 00:01:10.080
52
+ Luego la computación hizo que nuestras computadoras
53
+
54
+ 00:01:10.080 --> 00:01:12.640
55
+ cupieran en una caja gigante y luego en un laptop,
56
+
57
+ 00:01:12.640 --> 00:01:15.160
58
+ pero con el pasar del tiempo nos pusimos a pensar
59
+
60
+ 00:01:15.160 --> 00:01:16.760
61
+ ¿Por qué tenemos chips para todo?
62
+
63
+ 00:01:16.760 --> 00:01:21.560
64
+ ¿Por qué hay un chip que es la CPU y otra tarjeta distinta es la tarjeta gráfica
65
+
66
+ 00:01:21.560 --> 00:01:23.760
67
+ y otra tarjeta distinta es la tarjeta de sonido?
68
+
69
+ 00:01:23.800 --> 00:01:28.160
70
+ ¿Por qué a medida que especializamos todo, no pegamos todo en un solo chip?
71
+
72
+ 00:01:28.160 --> 00:01:30.640
73
+ Estos son conocidos como System on a Chip.
74
+
75
+ 00:01:30.640 --> 00:01:34.440
76
+ Los dos problemas más grandes son de electricidad y de espacio.
77
+
78
+ 00:01:34.440 --> 00:01:39.360
79
+ Entre más chips hay, más gastan batería porque más largo tienen que viajar los electrones
80
+
81
+ 00:01:39.360 --> 00:01:41.880
82
+ dentro de la tarjeta en cada uno de los ciclos
83
+
84
+ 00:01:41.880 --> 00:01:45.360
85
+ que nos permiten jugar un videojuego en el teléfono o atender una llamada.
86
+
87
+ 00:01:45.360 --> 00:01:48.520
88
+ El segundo problema es que los teléfonos eran un ladrillo gigante
89
+
90
+ 00:01:48.520 --> 00:01:51.840
91
+ y queríamos que fueran cada vez más pequeños, y no solo eran teléfonos,
92
+
93
+ 00:01:51.880 --> 00:01:56.720
94
+ eran cámaras digitales, eran iPods, Walkmans, televisores.
95
+
96
+ 00:01:56.720 --> 00:01:59.240
97
+ Ahora que todo vive en un teléfono, pues lo vemos más claro,
98
+
99
+ 00:01:59.240 --> 00:02:01.760
100
+ pero antes eran todo tipo de dispositivos.
101
+
102
+ 00:02:01.760 --> 00:02:04.640
103
+ Así que empezamos a pensar qué podemos integrar.
104
+
105
+ 00:02:04.640 --> 00:02:06.520
106
+ En el caso de los teléfonos, por ejemplo,
107
+
108
+ 00:02:06.520 --> 00:02:09.640
109
+ un teléfono es básicamente una pantalla gigante,
110
+
111
+ 00:02:09.640 --> 00:02:15.160
112
+ así que necesita un procesador gráfico que sea muy eficiente y que no se sienta lento,
113
+
114
+ 00:02:15.160 --> 00:02:18.160
115
+ porque si un teléfono se siente lento, no se puede usar.
116
+
117
+ 00:02:18.160 --> 00:02:21.800
118
+ Los seres humanos estamos conscientes y aceptamos que una computadora se pone lenta,
119
+
120
+ 00:02:21.800 --> 00:02:24.040
121
+ pero no aceptamos que un teléfono se ponga lento.
122
+
123
+ 00:02:24.040 --> 00:02:26.720
124
+ Y por supuesto necesitamos el procesamiento normal de una computadora
125
+
126
+ 00:02:26.720 --> 00:02:29.920
127
+ para navegar en internet, mandar correos, hacer juegos, etc.
128
+
129
+ 00:02:29.920 --> 00:02:33.240
130
+ Así que necesitamos una CPU y una GPU en el mismo lugar.
131
+
132
+ 00:02:33.240 --> 00:02:37.640
133
+ Combinar en un solo chip la CPU y la GPU fue el primer paso en System on a Chip.
134
+
135
+ 00:02:37.640 --> 00:02:42.400
136
+ Quiero aclarar que no es como que el mismo chip sea CPU y GPU al mismo tiempo
137
+
138
+ 00:02:42.400 --> 00:02:44.040
139
+ con los mismos transistores.
140
+
141
+ 00:02:44.040 --> 00:02:50.000
142
+ Realmente es que en la oblea de silicio, en el wafer, en donde hacen el chip,
143
+
144
+ 00:02:50.000 --> 00:02:54.280
145
+ ahí dentro, colocan en un ladito los transistores que funcionan como CPU
146
+
147
+ 00:02:54.280 --> 00:02:56.800
148
+ y en otro ladito, muy pegadito, muy cerca,
149
+
150
+ 00:02:56.800 --> 00:03:00.040
151
+ en el mismo mecanismo de circuito integrado, rodeado de baquelita,
152
+
153
+ 00:03:00.040 --> 00:03:01.160
154
+ los chips de la GPU.
155
+
156
+ 00:03:01.160 --> 00:03:04.360
157
+ Y así empezaron a pensar en otros chips, porque esto es un computador completo, ¿no?
158
+
159
+ 00:03:04.360 --> 00:03:07.800
160
+ Cuando uno armó una computadora, uno tenía estos tabletas de memoria
161
+
162
+ 00:03:07.800 --> 00:03:11.200
163
+ que hemos visto antes, la memoria RAM, o estos discos duros externos.
164
+
165
+ 00:03:11.200 --> 00:03:13.800
166
+ Pues la memoria RAM, ¿por qué no la pegamos ahí también?
167
+
168
+ 00:03:13.800 --> 00:03:15.840
169
+ ¿Y por qué no pegamos el modem?
170
+
171
+ 00:03:15.840 --> 00:03:19.320
172
+ Porque cuando uno hace una llamada, los teléfonos internamente tienen un chip
173
+
174
+ 00:03:19.320 --> 00:03:23.360
175
+ que es un modem, que es el que tiene que hablar con la central telefónica
176
+
177
+ 00:03:23.360 --> 00:03:24.640
178
+ y procesar la llamada.
179
+
180
+ 00:03:24.640 --> 00:03:28.240
181
+ El modem se conecta a las antenas 3G y 4G y los chips también necesitan
182
+
183
+ 00:03:28.240 --> 00:03:29.360
184
+ conectarse a Wi-Fi.
185
+
186
+ 00:03:29.360 --> 00:03:33.440
187
+ Entonces, el Wi-Fi es otro módulo que antes era un circuito aparte en un chip
188
+
189
+ 00:03:33.440 --> 00:03:34.320
190
+ aparte.
191
+
192
+ 00:03:34.320 --> 00:03:37.760
193
+ Como los teléfonos se estandarizaron y todos los teléfonos tienen que procesar
194
+
195
+ 00:03:37.760 --> 00:03:41.440
196
+ video a través de la cámara, capturar audio del micrófono,
197
+
198
+ 00:03:41.440 --> 00:03:46.280
199
+ generar imágenes, todas esas funciones estándar que antes eran periféricos
200
+
201
+ 00:03:46.280 --> 00:03:48.880
202
+ adicionales, fueron creándose en un solo chip.
203
+
204
+ 00:03:48.880 --> 00:03:52.760
205
+ Porque la otra ventaja es que estos dispositivos pues mantenían el mismo
206
+
207
+ 00:03:52.760 --> 00:03:54.200
208
+ hardware constantemente.
209
+
210
+ 00:03:54.200 --> 00:03:58.760
211
+ Si tienes una computadora, te lo puedes conectar mil marcas de webcam,
212
+
213
+ 00:03:58.760 --> 00:04:03.160
214
+ pero en tu teléfono, tu marca como Samsung o Apple o Google,
215
+
216
+ 00:04:03.160 --> 00:04:06.480
217
+ tú sabes exactamente qué lente y qué cámara le estás poniendo a tus
218
+
219
+ 00:04:06.480 --> 00:04:10.000
220
+ teléfonos, exactamente qué tipo de micrófono y qué tipo de parlante.
221
+
222
+ 00:04:10.000 --> 00:04:14.360
223
+ Esa estandarización también ayudó a que los chips sean mucho más sencillos.
224
+
225
+ 00:04:14.360 --> 00:04:19.520
226
+ Huawei, por cierto, es la primera marca en integrar un módem de tecnología 5G
227
+
228
+ 00:04:19.520 --> 00:04:20.360
229
+ en un chip.
230
+
231
+ 00:04:20.360 --> 00:04:24.520
232
+ Aquí en mis notas veo que fue el chip Huawei Kirin 990.
233
+
234
+ 00:04:24.520 --> 00:04:26.200
235
+ La innovación viene de todas partes.
236
+
237
+ 00:04:26.200 --> 00:04:28.680
238
+ Cuando compras tu teléfono y lo enciendes,
239
+
240
+ 00:04:28.680 --> 00:04:33.680
241
+ tu dedo prime el botón de encendido, lo cual conecta dos contactos que hacen un
242
+
243
+ 00:04:33.680 --> 00:04:37.640
244
+ paso de electricidad de la batería al circuito que llega a una señal en el
245
+
246
+ 00:04:37.640 --> 00:04:38.760
247
+ System on a Chip.
248
+
249
+ 00:04:38.760 --> 00:04:41.640
250
+ El primer circuito de un System on a Chip es la BIOS.
251
+
252
+ 00:04:41.640 --> 00:04:44.160
253
+ Es ese sistema de arranque que, por ejemplo,
254
+
255
+ 00:04:44.160 --> 00:04:48.400
256
+ en el caso de iPod y de los dispositivos de Apple como el iPhone,
257
+
258
+ 00:04:48.400 --> 00:04:51.560
259
+ el iPad, etcétera, se llama iBoot.
260
+
261
+ 00:04:51.560 --> 00:04:54.160
262
+ O lo mismo que habría en la BIOS de un computador normal,
263
+
264
+ 00:04:54.160 --> 00:04:55.800
265
+ solamente que aquí está en el chip.
266
+
267
+ 00:04:55.800 --> 00:04:58.480
268
+ Y ahí dentro del chip empieza a arrancar todo.
269
+
270
+ 00:04:58.480 --> 00:05:00.520
271
+ Ese pecito de chip prende la CPU.
272
+
273
+ 00:05:00.520 --> 00:05:03.880
274
+ La CPU va a la memoria flash, que es la memoria,
275
+
276
+ 00:05:03.880 --> 00:05:06.080
277
+ llamémosla permanente o el equivalente al disco duro.
278
+
279
+ 00:05:06.080 --> 00:05:10.680
280
+ Eso sí está aparte porque es un circuito más grande y de una química diferente.
281
+
282
+ 00:05:10.680 --> 00:05:14.840
283
+ Y ahí van y buscan el código del sistema operativo y el resto es igual que una
284
+
285
+ 00:05:14.840 --> 00:05:15.720
286
+ computadora.
287
+
288
+ 00:05:15.720 --> 00:05:18.040
289
+ Pero en vez de estar viajando entre diferentes chips,
290
+
291
+ 00:05:18.040 --> 00:05:19.800
292
+ todo está viajando en el mismo chip.
293
+
294
+ 00:05:19.800 --> 00:05:21.720
295
+ La CPU y la GPU están muy cerca.
296
+
297
+ 00:05:21.720 --> 00:05:26.440
298
+ Y la CPU y la GPU lo que hacen es que la CPU arranca los computadores en cuanto a
299
+
300
+ 00:05:26.440 --> 00:05:29.840
301
+ su sistema operativo y la GPU arranca los pixeles de la pantalla,
302
+
303
+ 00:05:29.840 --> 00:05:33.320
304
+ trabajando en conjunto y compartiendo memoria.
305
+
306
+ 00:05:33.320 --> 00:05:36.000
307
+ Eso es una de las cosas únicas de un System on a Chip.
308
+
309
+ 00:05:36.000 --> 00:05:40.640
310
+ En una computadora, la GPU tiene su propia memoria y es la memoria que usa para
311
+
312
+ 00:05:40.640 --> 00:05:43.840
313
+ representar cosas en pantalla o hacer cálculos paralelos como cálculos de
314
+
315
+ 00:05:43.840 --> 00:05:45.400
316
+ criptomonedas o AI.
317
+
318
+ 00:05:45.400 --> 00:05:48.840
319
+ Y la CPU usa la memoria RAM para ejecutar los computadores.
320
+
321
+ 00:05:48.840 --> 00:05:52.560
322
+ En un System on a Chip, en particular en la arquitectura que creó Apple,
323
+
324
+ 00:05:52.560 --> 00:05:56.880
325
+ se usa una memoria unificada que lo comparte en todas las necesidades del
326
+
327
+ 00:05:56.880 --> 00:05:57.760
328
+ sistema operativo.
329
+
330
+ 00:05:57.760 --> 00:06:01.280
331
+ Ahí carga el kernel y el kernel son los drivers que prenden los periféricos.
332
+
333
+ 00:06:01.280 --> 00:06:05.080
334
+ Pero el periférico, que típicamente sería un circuito con sus mecanismos
335
+
336
+ 00:06:05.080 --> 00:06:08.720
337
+ químicos y mecánicos, como la membrana del micrófono,
338
+
339
+ 00:06:08.720 --> 00:06:11.720
340
+ como los sensores digitales de luz que tiene una cámara,
341
+
342
+ 00:06:11.720 --> 00:06:13.720
343
+ son simplemente la parte de hardware.
344
+
345
+ 00:06:13.720 --> 00:06:16.600
346
+ Y el circuito, toda realmente la operación,
347
+
348
+ 00:06:16.600 --> 00:06:18.720
349
+ está metida en ese System on a Chip.
350
+
351
+ 00:06:18.720 --> 00:06:21.600
352
+ Hace todo más sencillo, mucho más eficiente,
353
+
354
+ 00:06:21.600 --> 00:06:24.560
355
+ con menos generación de calor, con menos gasto de batería.
356
+
357
+ 00:06:24.560 --> 00:06:29.600
358
+ Por eso un teléfono que tiene 8 GB de RAM y una CPU muy pequeña hace muchas más
359
+
360
+ 00:06:29.600 --> 00:06:33.800
361
+ cosas que una computadora con una CPU más grande y los mismos 8 GB de RAM.
362
+
363
+ 00:06:33.800 --> 00:06:37.560
364
+ Un teléfono, además, es básicamente un experimento de física.
365
+
366
+ 00:06:37.560 --> 00:06:40.560
367
+ Por dentro de tu teléfono hay un barómetro que detecta la presión
368
+
369
+ 00:06:40.560 --> 00:06:41.440
370
+ ambiental.
371
+
372
+ 00:06:41.440 --> 00:06:42.720
373
+ Hay un termómetro.
374
+
375
+ 00:06:42.720 --> 00:06:45.800
376
+ A veces te habrá salido una alerta que tu teléfono está muy caliente y de
377
+
378
+ 00:06:45.800 --> 00:06:48.440
379
+ pronto se apaga porque está detectando la temperatura.
380
+
381
+ 00:06:48.440 --> 00:06:52.600
382
+ Todos esos son mecanismos físicos que usando electrónica,
383
+
384
+ 00:06:52.600 --> 00:06:58.640
385
+ mecánica o química hacen que llegue una señal digital al procesador.
386
+
387
+ 00:06:58.640 --> 00:07:00.880
388
+ Pero en vez de tener chips individuales,
389
+
390
+ 00:07:00.880 --> 00:07:04.600
391
+ le delegan el procesamiento de chips a ese System on a Chip que tiene los
392
+
393
+ 00:07:04.600 --> 00:07:06.880
394
+ transistores necesarios para que funcione.
395
+
396
+ 00:07:06.880 --> 00:07:11.160
397
+ Y como son tan similares, entonces muchas de las marcas no tienen que
398
+
399
+ 00:07:11.160 --> 00:07:14.160
400
+ programar sus teléfonos para soportar un montón de drivers,
401
+
402
+ 00:07:14.160 --> 00:07:17.440
403
+ como si le toca hacer a Microsoft con Windows en una computadora,
404
+
405
+ 00:07:17.440 --> 00:07:20.560
406
+ o a Apple con Mac, o a los sistemas operativos Linux.
407
+
408
+ 00:07:20.560 --> 00:07:23.280
409
+ Todo eso apoya a la eficiencia de estos sistemas.
410
+
411
+ 00:07:23.280 --> 00:07:28.400
412
+ Un dato curioso, la cámara de los teléfonos modernos han notado que se
413
+
414
+ 00:07:28.400 --> 00:07:31.680
415
+ estabiliza a pesar de que uno está a veces temblándole las manos al tomar la
416
+
417
+ 00:07:31.680 --> 00:07:34.600
418
+ foto, hay una estabilización que funciona con software,
419
+
420
+ 00:07:34.600 --> 00:07:39.400
421
+ pero hay ciertas cámaras de los teléfonos más costosos donde el lente
422
+
423
+ 00:07:39.400 --> 00:07:42.200
424
+ está flotando en un tipo de aceite,
425
+
426
+ 00:07:42.200 --> 00:07:46.160
427
+ que hace que cuando ustedes estén temblando el lente se mantenga fijo.
428
+
429
+ 00:07:46.160 --> 00:07:50.920
430
+ En otros casos está flotando con electroimanes que lo mantienen fijo o
431
+
432
+ 00:07:50.920 --> 00:07:52.480
433
+ con pequeños sistemas de resortes.
434
+
435
+ 00:07:52.480 --> 00:07:54.520
436
+ Es fascinante y súper chiquito.
437
+
438
+ 00:07:54.520 --> 00:07:59.320
439
+ ¿Has notado que a los teléfonos casi siempre les dura 24 horas la batería a
440
+
441
+ 00:07:59.320 --> 00:08:01.720
442
+ pesar de que la tecnología crece y crece y crece?
443
+
444
+ 00:08:01.720 --> 00:08:02.320
445
+ ¿Por qué será?
446
+
447
+ 00:08:02.320 --> 00:08:04.160
448
+ Están mejorando las tecnologías de las baterías,
449
+
450
+ 00:08:04.160 --> 00:08:08.760
451
+ pero las baterías están limitadas por los límites químicos de lo que hemos
452
+
453
+ 00:08:08.760 --> 00:08:13.120
454
+ descubierto que es la mayor cantidad de densidad de electricidad que podemos
455
+
456
+ 00:08:13.120 --> 00:08:15.240
457
+ meter en la batería de un teléfono moderno.
458
+
459
+ 00:08:15.240 --> 00:08:17.640
460
+ Lo que realmente está pasando son dos mecanismos.
461
+
462
+ 00:08:17.640 --> 00:08:22.040
463
+ Uno es que el mercado, nosotros que compramos teléfonos,
464
+
465
+ 00:08:22.040 --> 00:08:26.000
466
+ aceptamos teléfonos que duren un día, pero no aceptamos teléfonos que duren 6
467
+
468
+ 00:08:26.000 --> 00:08:30.240
469
+ horas y no recompensamos tanto a nivel financiero los teléfonos que duran dos
470
+
471
+ 00:08:30.240 --> 00:08:31.760
472
+ días. Ese mercado es más pequeño.
473
+
474
+ 00:08:31.760 --> 00:08:32.360
475
+ Existe.
476
+
477
+ 00:08:32.360 --> 00:08:37.000
478
+ Son esos teléfonos grandotototes como el iPhone Pro o como los Samsung Galaxy
479
+
480
+ 00:08:37.000 --> 00:08:38.720
481
+ Node o Ultra, etc.
482
+
483
+ 00:08:38.720 --> 00:08:41.440
484
+ Es un mercado que existe, pero no es tan grande.
485
+
486
+ 00:08:41.440 --> 00:08:45.800
487
+ Lo otro es que los fabricantes de chips son muy conscientes de que cada
488
+
489
+ 00:08:45.800 --> 00:08:50.200
490
+ generación de chip nuevo tiene que gastar menos electricidad y a veces tienen
491
+
492
+ 00:08:50.200 --> 00:08:51.800
493
+ saltos espectaculares.
494
+
495
+ 00:08:51.800 --> 00:08:57.560
496
+ Por eso los MacBook Pros, desde la generación de los chips Apple M, M1, M2,
497
+
498
+ 00:08:57.560 --> 00:09:03.640
499
+ M3 y M4, han ido aumentando de una manera fuerte la duración de la batería de los
500
+
501
+ 00:09:03.640 --> 00:09:07.200
502
+ laptops y ahora es normal que un laptop tenga batería de 12 horas.
503
+
504
+ 00:09:07.200 --> 00:09:10.960
505
+ Los teléfonos, lo que pasa es que siguen exigiéndose cada vez más porque las apps
506
+
507
+ 00:09:10.960 --> 00:09:14.640
508
+ son cada vez más complejas y sofisticadas, pero esa es parte de la razón por la que
509
+
510
+ 00:09:14.640 --> 00:09:16.600
511
+ la batería tiende a durar esto.
512
+
513
+ 00:09:16.600 --> 00:09:21.800
514
+ Súmenle que hay un dato más y es que el uso intensivo de tu teléfono lo calienta
515
+
516
+ 00:09:21.800 --> 00:09:25.280
517
+ y el calor, al estar tan cerca de la batería, puede causar un efecto de
518
+
519
+ 00:09:25.280 --> 00:09:26.080
520
+ explosión.
521
+
522
+ 00:09:26.080 --> 00:09:29.280
523
+ Esto le pasó a una marca de Galaxy Nodes, que básicamente solvían granadas en el
524
+
525
+ 00:09:29.280 --> 00:09:30.120
526
+ bolsillo.
527
+
528
+ 00:09:30.120 --> 00:09:33.840
529
+ Así que los fabricantes de teléfonos tienen que ser muy cuidadosos de no
530
+
531
+ 00:09:33.840 --> 00:09:37.680
532
+ pasarse de cierta cantidad de flujo eléctrico para que no se caliente el
533
+
534
+ 00:09:37.680 --> 00:09:38.920
535
+ teléfono y no explote.
536
+
537
+ 00:09:38.920 --> 00:09:41.560
538
+ La realidad es que en el día de hoy esto casi no es un problema.
539
+
540
+ 00:09:41.560 --> 00:09:44.360
541
+ ¿Recuerdan cuando hablamos de la arquitectura de las CPUs?
542
+
543
+ 00:09:44.360 --> 00:09:47.240
544
+ X86, RISC, ARM.
545
+
546
+ 00:09:47.240 --> 00:09:52.680
547
+ ARM domina la arquitectura de los chips de los teléfonos y de los system on a
548
+
549
+ 00:09:52.680 --> 00:09:53.280
550
+ chip.
551
+
552
+ 00:09:53.280 --> 00:09:57.440
553
+ ARM, una empresa inglesa adquirida por una empresa japonesa, Softbank, y en la
554
+
555
+ 00:09:57.440 --> 00:10:00.240
556
+ cual ese diseño es en el que están basados los chips de Apple.
557
+
558
+ 00:10:00.240 --> 00:10:03.680
559
+ La industria de tecnología está mudando casi todo a un system on a chip debido a
560
+
561
+ 00:10:03.680 --> 00:10:05.080
562
+ que son más eficientes.
563
+
564
+ 00:10:05.080 --> 00:10:09.160
565
+ Por ejemplo, acá adentro en un teléfono inteligente o en un smartwatch va a haber
566
+
567
+ 00:10:09.160 --> 00:10:10.340
568
+ un system on a chip.
569
+
570
+ 00:10:10.340 --> 00:10:14.560
571
+ En esos anillos que son sensores de salud hay un system on a chip.
572
+
573
+ 00:10:14.560 --> 00:10:18.200
574
+ En tu automóvil, en el sistema de entretenimiento hay un system on a chip.
575
+
576
+ 00:10:18.200 --> 00:10:21.600
577
+ Y la arquitectura de estos chips en ocasiones agrega cosas completamente
578
+
579
+ 00:10:21.600 --> 00:10:25.080
580
+ nuevas que no existen en la computación de escritorio,
581
+
582
+ 00:10:25.080 --> 00:10:29.520
583
+ como las unidades de procesamiento neuronal, las NPUs o Neural Processing
584
+
585
+ 00:10:29.520 --> 00:10:30.280
586
+ Units.
587
+
588
+ 00:10:30.280 --> 00:10:33.720
589
+ Apple es un pionero de esto, pero ahora todos los fabricantes lo están haciendo.
590
+
591
+ 00:10:33.720 --> 00:10:37.320
592
+ Es un chip que, como la GPU, hace procesamiento paralelo.
593
+
594
+ 00:10:37.320 --> 00:10:40.240
595
+ Pero recuerda que GPU significa Graphic Processing Unit,
596
+
597
+ 00:10:40.240 --> 00:10:41.760
598
+ la unidad de procesamiento gráfico.
599
+
600
+ 00:10:41.760 --> 00:10:43.240
601
+ No fue diseñada para eso.
602
+
603
+ 00:10:43.240 --> 00:10:46.680
604
+ Hay nuevos chips, inicialmente inventados por Google para servidores,
605
+
606
+ 00:10:46.680 --> 00:10:51.440
607
+ llamados TPU, Tensor Processor Units, que también se están colocando dentro de los
608
+
609
+ 00:10:51.440 --> 00:10:54.320
610
+ teléfonos porque los teléfonos empiezan a necesitar hacer uso de inteligencia
611
+
612
+ 00:10:54.320 --> 00:10:55.280
613
+ artificial.
614
+
615
+ 00:10:55.280 --> 00:10:59.200
616
+ Cuando tú haces un dictado de voz en el teléfono, cuando usas asistentes,
617
+
618
+ 00:10:59.200 --> 00:11:02.600
619
+ estás haciendo un uso de Machine Learning, de inteligencia artificial.
620
+
621
+ 00:11:02.600 --> 00:11:07.120
622
+ Cuando el teléfono te coloca filtros en WhatsApp o en Instagram o en Snapchat,
623
+
624
+ 00:11:07.120 --> 00:11:08.720
625
+ esto es inteligencia artificial.
626
+
627
+ 00:11:08.720 --> 00:11:12.720
628
+ Y usan estas NPUs que vienen integradas en el chip completo.
629
+
630
+ 00:11:12.720 --> 00:11:17.200
631
+ Las CPUs que están dentro de un sistema de chip son muy similares a la CPU de una
632
+
633
+ 00:11:17.200 --> 00:11:18.440
634
+ computadora normal.
635
+
636
+ 00:11:18.440 --> 00:11:22.040
637
+ Tienen igual procesamiento por gigahertz, tienen las mismas unidades,
638
+
639
+ 00:11:22.040 --> 00:11:23.440
640
+ incluso tienen núcleos.
641
+
642
+ 00:11:23.440 --> 00:11:27.720
643
+ De hecho, hoy en día es mucho más común ver multinúcleos en el chip de un
644
+
645
+ 00:11:27.720 --> 00:11:29.840
646
+ teléfono que en el chip de una computadora.
647
+
648
+ 00:11:29.840 --> 00:11:32.640
649
+ Los sistemas de chip tienen que tener hasta 16 núcleos,
650
+
651
+ 00:11:32.640 --> 00:11:36.840
652
+ donde típicamente en las computadoras de arquitectura x86 veamos cuatro a ocho
653
+
654
+ 00:11:36.840 --> 00:11:37.440
655
+ núcleos.
656
+
657
+ 00:11:37.440 --> 00:11:40.040
658
+ A medida que la inteligencia artificial captura todo el planeta,
659
+
660
+ 00:11:40.040 --> 00:11:43.520
661
+ empezamos a tener una hiper optimización de cosas distintas.
662
+
663
+ 00:11:43.520 --> 00:11:46.320
664
+ La inteligencia artificial está conectada directamente a plantas de energía
665
+
666
+ 00:11:46.320 --> 00:11:49.960
667
+ nuclear, así que el problema de la energía no es el problema que creemos.
668
+
669
+ 00:11:49.960 --> 00:11:53.560
670
+ Nuestro problema es más de memoria y de velocidad de procesamiento.
671
+
672
+ 00:11:53.560 --> 00:11:56.760
673
+ Resulta que los sistemas de chip también son ideales para esto,
674
+
675
+ 00:11:56.760 --> 00:12:02.520
676
+ porque en el modelo anterior la GPU y la memoria estaban aparte y en el modelo
677
+
678
+ 00:12:02.520 --> 00:12:08.320
679
+ nuevo el procesador de un iPhone comparte la memoria entre la CPU,
680
+
681
+ 00:12:08.320 --> 00:12:12.400
682
+ la GPU y la NPU, el procesador neural de inteligencia artificial.
683
+
684
+ 00:12:12.400 --> 00:12:15.480
685
+ Así que cuando el sistema operativo no necesita tanta RAM,
686
+
687
+ 00:12:15.480 --> 00:12:19.600
688
+ esa RAM la puede aprovechar por completo la inteligencia artificial,
689
+
690
+ 00:12:19.600 --> 00:12:21.920
691
+ haciendo estos sistemas mucho más eficientes.
692
+
693
+ 00:12:21.920 --> 00:12:27.240
694
+ Durante el 2025, China tuvo un momento en el que venció a OpenAI,
695
+
696
+ 00:12:27.240 --> 00:12:31.120
697
+ aprovechándose de esta característica para poder crear modelos de inteligencia
698
+
699
+ 00:12:31.120 --> 00:12:33.880
700
+ artificial que corran en local en laptops.
701
+
702
+ 00:12:33.880 --> 00:12:35.640
703
+ Y es parte de la razón por la que Apple,
704
+
705
+ 00:12:35.640 --> 00:12:38.560
706
+ a pesar de estar atrás en la carrera de inteligencia artificial,
707
+
708
+ 00:12:38.560 --> 00:12:41.040
709
+ sigue constantemente liderando el desarrollo de inteligencia artificial
710
+
711
+ 00:12:41.040 --> 00:12:44.640
712
+ local por los system on a chip y su arquitectura de memoria unificada.
713
+
714
+ 00:12:44.640 --> 00:12:46.640
715
+ De inteligencia artificial se puede hablar mucho más.
716
+
717
+ 00:12:46.640 --> 00:12:49.960
718
+ El system on a chip es solo un componente de una gran cantidad de cosas,
719
+
720
+ 00:12:49.960 --> 00:12:52.160
721
+ pero eso viene dentro de poco en el curso de Fundamentos de Ingeniería de
722
+
723
+ 00:12:52.160 --> 00:12:53.720
724
+ Software.
725
+
subir/fixed/Curso de Fundamentos de Ingeniería de Software/01-Computación Básica/10-GPUs Procesadores gráficos y de AI.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f5324bf6c5224bee5ae827dcd9d716f5b15f11c2143c4faca4688d9895adc36a
3
+ size 316565371
subir/fixed/Curso de Fundamentos de Ingeniería de Software/01-Computación Básica/10-GPUs Procesadores gráficos y de AI.vtt ADDED
@@ -0,0 +1,620 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ WEBVTT
2
+
3
+ 00:00:00.000 --> 00:00:08.760
4
+ Las primeras computadoras no tenían pantalla, las primeras computadoras cuando tú les colocabas datos y hacías cálculos de cómputo, te imprimían los cálculos.
5
+
6
+ 00:00:08.760 --> 00:00:17.320
7
+ Las primeras pantallas realmente no eran de computadoras, eran un instrumento electrónico para ver las ondas electromagnéticas llamada osciloscopio.
8
+
9
+ 00:00:17.320 --> 00:00:27.560
10
+ Y unos ingenieros encontraron cómo usar la imagen del osciloscopio para colocar dos palitos y una bolita que rebotaba y así nace el primer videojuego de la historia, Pong.
11
+
12
+ 00:00:27.560 --> 00:00:35.240
13
+ Desde ese momento, los videojuegos empezaron a usar la computación para empujar cada vez más lo que era posible a nivel gráfico.
14
+
15
+ 00:00:35.240 --> 00:00:39.240
16
+ Primero hubo gráficos de videojuego antes de que hubieran sistemas operativos gráficos.
17
+
18
+ 00:00:39.240 --> 00:00:47.440
19
+ En sistemas UNIX o en DOS, uno podía jugar juegos como Tetris, Prince of Persia, sin necesidad de tener todavía ventanas,
20
+
21
+ 00:00:47.440 --> 00:00:54.240
22
+ porque cargaban cada una de estas pantallas y eran juegos muy sencillos que llevaban al máximo la capacidad de los chips.
23
+
24
+ 00:00:54.240 --> 00:00:59.520
25
+ Por décadas, si no fuera por los videojuegos, no habríamos llevado los chips a su máximo nivel.
26
+
27
+ 00:00:59.520 --> 00:01:08.480
28
+ Y como estábamos llevando estos chips a su máximo nivel, empezó a existir una industria que creaba chips específicamente para poner a correr esos gráficos,
29
+
30
+ 00:01:08.480 --> 00:01:14.880
31
+ para diseño gráfico, para producción audiovisual de efectos especiales, pero sobre todo para videojuegos.
32
+
33
+ 00:01:14.880 --> 00:01:18.800
34
+ Esos chips se llaman Unidades de Procesamiento Gráfico o GPUs.
35
+
36
+ 00:01:18.800 --> 00:01:21.160
37
+ ¿Cuál es la diferencia entre una CPU y una GPU?
38
+
39
+ 00:01:21.160 --> 00:01:26.680
40
+ Como ya hemos visto en este curso, las CPUs procesan de manera seria la información a través de ciclos,
41
+
42
+ 00:01:26.680 --> 00:01:31.240
43
+ y tienen millones de transistores que hacen cálculos matemáticos hipercomplejos,
44
+
45
+ 00:01:31.240 --> 00:01:34.600
46
+ porque eso es lo que se necesita para correr una hoja de cálculo en Excel,
47
+
48
+ 00:01:34.600 --> 00:01:38.000
49
+ eso es lo que se necesita para los cálculos que necesitan navegar una página web,
50
+
51
+ 00:01:38.000 --> 00:01:40.680
52
+ y todo lo que hacemos en una computadora normal.
53
+
54
+ 00:01:40.680 --> 00:01:47.840
55
+ Una GPU realmente son muchísimos, muchísimos núcleos de procesadores chiquitos,
56
+
57
+ 00:01:47.840 --> 00:01:55.760
58
+ que hacen muchos menos cálculos con mucho menos poder, pero como son muchísimos núcleos, los hacen al mismo tiempo.
59
+
60
+ 00:01:55.760 --> 00:02:04.400
61
+ Representar una imagen en pantalla es representar un cálculo de una matriz de millones de puntos de luz, conocida como pixeles.
62
+
63
+ 00:02:04.400 --> 00:02:12.760
64
+ Cada uno de esos puntos tiene que calcular cuánto va a ser el brillo que tienen a partir de prender el rojo, el verde o el azul,
65
+
66
+ 00:02:12.760 --> 00:02:15.320
67
+ y ese brillo tiene que calcularse al mismo tiempo.
68
+
69
+ 00:02:15.320 --> 00:02:20.440
70
+ ¿Recuerdan en el pasado que algunas imágenes cargaban como si fuera una línea detrás de otra?
71
+
72
+ 00:02:20.440 --> 00:02:23.360
73
+ Eso es procesamiento serial, lo que haría una CPU.
74
+
75
+ 00:02:23.360 --> 00:02:30.000
76
+ Que la imagen de repente cargue y vaya cambiando dinámicamente es procesamiento paralelo, esa es la magia de una GPU.
77
+
78
+ 00:02:30.000 --> 00:02:34.520
79
+ Tú puedes ver los pixeles, los pixeles de un teléfono, sobre todo un teléfono moderno,
80
+
81
+ 00:02:34.520 --> 00:02:40.920
82
+ ese rojo, verde y azul, son muy chiquitos porque son microscópicos, por más de que acerques el ojo, no los vas a alcanzar a ver.
83
+
84
+ 00:02:40.960 --> 00:02:45.480
85
+ Pero si tienes un monitor de toda la vida, uno de estos monitores que no tiene tanta resolución,
86
+
87
+ 00:02:45.480 --> 00:02:50.760
88
+ puedes agarrar el monitor y acercar los ojos mucho, mucho, mucho a la pantalla mientras está prendida
89
+
90
+ 00:02:50.760 --> 00:02:54.640
91
+ y vas a alcanzar a ver las líneas de rojo, verde y azul con tus ojos humanos.
92
+
93
+ 00:02:54.640 --> 00:03:01.600
94
+ NVIDIA y ATI, que luego fue adquirida por AMD, crearon esta industria de las tarjetas gráficas.
95
+
96
+ 00:03:01.600 --> 00:03:06.440
97
+ De hecho, si no fuera por esa industria, no habría crecido la industria de las consolas de videojuegos.
98
+
99
+ 00:03:06.440 --> 00:03:11.680
100
+ Una consola de videojuegos, en esencia, es una computadora que tiene todas las partes de una computadora por dentro,
101
+
102
+ 00:03:11.680 --> 00:03:17.200
103
+ pero cuyo sistema operativo está específicamente optimizado para la reproducción de videojuegos,
104
+
105
+ 00:03:17.200 --> 00:03:19.800
106
+ y sus chips incluyen GPUs, por supuesto.
107
+
108
+ 00:03:19.800 --> 00:03:24.000
109
+ Cuando tuvimos la clase de sistemas operativos, aprendimos de interrupciones,
110
+
111
+ 00:03:24.000 --> 00:03:28.480
112
+ estos mecanismos que tiene el sistema operativo para darle prioridad a algunos procesos contra otros.
113
+
114
+ 00:03:28.480 --> 00:03:32.800
115
+ Por eso, por ejemplo, cuando tu computadora está muy colgada haciendo un proceso muy complejo,
116
+
117
+ 00:03:32.800 --> 00:03:37.920
118
+ tu mouse se puede mover a alta velocidad, porque el mouse tiene una alta prioridad en la jerarquía.
119
+
120
+ 00:03:37.920 --> 00:03:44.920
121
+ Cuando se procesa una pantalla, imagínate que la GPU se cuelgue y solamente tengas imagen en el 75% de la pantalla
122
+
123
+ 00:03:44.920 --> 00:03:47.640
124
+ y el resto se quede quieto. Sería extraño, ¿verdad?
125
+
126
+ 00:03:47.640 --> 00:03:52.880
127
+ Así que las GPUs fueron originalmente diseñadas para que toda la pantalla tenga la misma prioridad,
128
+
129
+ 00:03:52.880 --> 00:03:55.320
130
+ a través de un sistema que se conoce como pipelines.
131
+
132
+ 00:03:55.320 --> 00:03:59.160
133
+ En resumen, los primeros circuitos de GPU eran circuitos sencillos,
134
+
135
+ 00:03:59.160 --> 00:04:02.160
136
+ donde simplemente estaban encargados de sectores de la pantalla.
137
+
138
+ 00:04:02.160 --> 00:04:06.440
139
+ Todos los sectores de la pantalla tienen la misma prioridad y todos tienen que representar una imagen.
140
+
141
+ 00:04:06.440 --> 00:04:09.480
142
+ No eran nada versátiles de programar, pero por la ley de Moore,
143
+
144
+ 00:04:09.480 --> 00:04:13.080
145
+ a medida que aumentaba exponencialmente la complejidad de los transistores,
146
+
147
+ 00:04:13.080 --> 00:04:19.520
148
+ empezaron a emerger características como la característica de generar texturas
149
+
150
+ 00:04:19.520 --> 00:04:24.320
151
+ y se programaron shaders y luces y cálculos de física,
152
+
153
+ 00:04:24.320 --> 00:04:28.760
154
+ porque todo lo que necesitaba procesamiento paralelo, como pasa mucho en los videojuegos,
155
+
156
+ 00:04:28.760 --> 00:04:35.000
157
+ se podía pasar por estos cientos de miles de núcleos que hacen cálculos paralelos de alta velocidad.
158
+
159
+ 00:04:35.000 --> 00:04:37.440
160
+ Y emergió un nuevo tipo de computación paralela,
161
+
162
+ 00:04:37.440 --> 00:04:41.280
163
+ que es la forma en la que funciona toda la industria de los efectos especiales,
164
+
165
+ 00:04:41.280 --> 00:04:42.880
166
+ de los videojuegos, de la animación.
167
+
168
+ 00:04:42.880 --> 00:04:47.520
169
+ Pero como necesita nunca trabarse, no puede usar la memoria RAM tradicional
170
+
171
+ 00:04:47.520 --> 00:04:49.880
172
+ que en una computadora está muy lejos del chip.
173
+
174
+ 00:04:49.880 --> 00:04:53.080
175
+ Esto es mucho antes de los System on a Chip, que tienen todo integrado.
176
+
177
+ 00:04:53.080 --> 00:04:58.120
178
+ Así que las GPUs son tarjetas que, además de tener estos procesadores gráficos,
179
+
180
+ 00:04:58.120 --> 00:05:01.120
181
+ tienen una memoria especial independiente.
182
+
183
+ 00:05:01.120 --> 00:05:05.840
184
+ Esa memoria se conoce como VRAM y es la memoria de RAM de video,
185
+
186
+ 00:05:05.840 --> 00:05:09.920
187
+ una memoria volátil específicamente para esa computación paralela.
188
+
189
+ 00:05:09.920 --> 00:05:13.680
190
+ Así que cuando uno empieza a jugar videojuegos, uno carga datos en la VRAM.
191
+
192
+ 00:05:13.680 --> 00:05:18.840
193
+ Ahí es donde se cargan las texturas de tu videojuego, los polígonos y todos esos cálculos de física que vas a usar
194
+
195
+ 00:05:18.840 --> 00:05:20.480
196
+ cuando estás jugando un juego tridimensional.
197
+
198
+ 00:05:20.480 --> 00:05:23.000
199
+ ¿Qué otras cosas requieren procesamiento paralelo?
200
+
201
+ 00:05:23.000 --> 00:05:24.840
202
+ Por ejemplo, el mundo.
203
+
204
+ 00:05:24.840 --> 00:05:30.520
205
+ Cuando tú quieres modelar el sistema de las nubes para poder predecir el clima,
206
+
207
+ 00:05:30.520 --> 00:05:34.040
208
+ pues eso es el procesamiento paralelo de muchísimas variables al mismo tiempo.
209
+
210
+ 00:05:34.040 --> 00:05:37.320
211
+ Así que las GPUs eran ideales para simulación.
212
+
213
+ 00:05:37.320 --> 00:05:43.360
214
+ Hubo una época en la que investigadores que creaban supercomputadoras para simulaciones de física,
215
+
216
+ 00:05:43.360 --> 00:05:49.560
217
+ de estrellas, agujeros negros, etcétera, se dieron cuenta que el chip del PlayStation 3,
218
+
219
+ 00:05:49.560 --> 00:05:54.400
220
+ un chip creado por IBM que combinaba CPU y GPU para los videojuegos de PlayStation 3,
221
+
222
+ 00:05:54.400 --> 00:05:56.600
223
+ era increíblemente eficiente.
224
+
225
+ 00:05:56.600 --> 00:05:59.880
226
+ Y como en el PlayStation 3 se puede instalar Linux de toda la vida,
227
+
228
+ 00:05:59.880 --> 00:06:06.040
229
+ empezaron a comprar PlayStation 3 en masa y a crear clústeres de PlayStation con Linux
230
+
231
+ 00:06:06.040 --> 00:06:09.520
232
+ para hacer simulaciones y fabricar supercomputadoras.
233
+
234
+ 00:06:09.520 --> 00:06:12.120
235
+ Mucho más barato de lo que cuesta una supercomputadora.
236
+
237
+ 00:06:12.120 --> 00:06:16.840
238
+ Porque al final del día, un videojuego no es más que una simulación del mundo real.
239
+
240
+ 00:06:16.840 --> 00:06:19.160
241
+ Así que me servía perfecto para la física.
242
+
243
+ 00:06:19.160 --> 00:06:23.200
244
+ Porque el dinero, Sony, Microsoft con el Xbox o Nintendo con...
245
+
246
+ 00:06:23.200 --> 00:06:26.880
247
+ Bueno, Nintendo es una excepción, la verdad, Nintendo sí hace plata con las consolas.
248
+
249
+ 00:06:26.880 --> 00:06:30.480
250
+ Pero Sony y Microsoft no hacen dinero con el PlayStation o con el Xbox.
251
+
252
+ 00:06:30.480 --> 00:06:34.600
253
+ Lo venden a pérdida porque ganan dinero con la venta de los videojuegos.
254
+
255
+ 00:06:34.600 --> 00:06:36.840
256
+ PlayStation 3 era vendido a pérdida.
257
+
258
+ 00:06:36.840 --> 00:06:40.560
259
+ Así que PlayStation estaba perdiendo dinero haciendo todas estas consolas
260
+
261
+ 00:06:40.560 --> 00:06:44.480
262
+ para las que nunca se iban a comprar videojuegos porque las estaban usando científicos
263
+
264
+ 00:06:44.480 --> 00:06:47.440
265
+ y pues cerraron el chorro y dejaron de permitir esto.
266
+
267
+ 00:06:47.440 --> 00:06:50.360
268
+ Pero por un momento mágico, por un momento mágico,
269
+
270
+ 00:06:50.360 --> 00:06:52.800
271
+ la computación científica corría en PlayStation.
272
+
273
+ 00:06:52.800 --> 00:06:56.280
274
+ La inteligencia artificial también es procesamiento paralelo.
275
+
276
+ 00:06:56.280 --> 00:07:00.720
277
+ Cuando tú usas un modelo de lenguaje de inteligencia artificial para generar un texto,
278
+
279
+ 00:07:00.720 --> 00:07:05.040
280
+ el modelo de lenguaje empieza a recorrer un árbol gigantesco
281
+
282
+ 00:07:05.040 --> 00:07:08.560
283
+ de la estructura del lenguaje humano con el que fue entrenado.
284
+
285
+ 00:07:08.560 --> 00:07:11.800
286
+ Y trata de encontrar diferentes caminos para responder una pregunta
287
+
288
+ 00:07:11.800 --> 00:07:15.640
289
+ que tú le haces a ChatGPT o a DeepSeek o a Cloud o a Gemini
290
+
291
+ 00:07:15.640 --> 00:07:18.360
292
+ o al modelo que estés usando en el momento en el que estés viendo este curso.
293
+
294
+ 00:07:18.360 --> 00:07:24.440
295
+ El punto es que ese procesamiento paralelo ocurre en GPUs originalmente,
296
+
297
+ 00:07:24.440 --> 00:07:26.800
298
+ pero luego hemos empezado a usar chips especializados,
299
+
300
+ 00:07:26.800 --> 00:07:28.160
301
+ pero eso viene más adelante.
302
+
303
+ 00:07:28.160 --> 00:07:31.440
304
+ Inicialmente, los primeros modelos de inteligencia artificial
305
+
306
+ 00:07:31.440 --> 00:07:34.680
307
+ antes de la superinteligencia fueron entrenados en GPUs.
308
+
309
+ 00:07:34.680 --> 00:07:40.120
310
+ Los autónomos autónomos como los Tesla o Waymo de Google usan GPUs
311
+
312
+ 00:07:40.120 --> 00:07:45.080
313
+ porque así como una GPU tiene que procesar al mismo tiempo cada píxel de una pantalla,
314
+
315
+ 00:07:45.080 --> 00:07:50.520
316
+ un automóvil usa las cámaras y los radares que tiene en el marco del automóvil,
317
+
318
+ 00:07:50.520 --> 00:07:53.920
319
+ en su estructura, para capturar imágenes del mundo exterior.
320
+
321
+ 00:07:53.920 --> 00:07:56.720
322
+ Esa captura de imágenes tiene que ser procesada en tiempo real
323
+
324
+ 00:07:56.720 --> 00:07:59.560
325
+ para convertirla en los ponígonos tridimensionales
326
+
327
+ 00:07:59.560 --> 00:08:02.280
328
+ que le permiten a un algoritmo de inteligencia artificial
329
+
330
+ 00:08:02.280 --> 00:08:05.440
331
+ decidir si el auto va a frenar, acelerar o moverse.
332
+
333
+ 00:08:05.440 --> 00:08:09.000
334
+ Sin GPUs, ese procesamiento paralelo de alta velocidad,
335
+
336
+ 00:08:09.000 --> 00:08:12.320
337
+ de cálculos relativamente simples, pero millones al mismo tiempo,
338
+
339
+ 00:08:12.320 --> 00:08:13.200
340
+ no sería posible.
341
+
342
+ 00:08:13.200 --> 00:08:17.640
343
+ Las CPUs normales se programan con un lenguaje ensamblador.
344
+
345
+ 00:08:17.640 --> 00:08:21.480
346
+ Ese lenguaje es el que arranca el kernel y el que habla el sistema operativo.
347
+
348
+ 00:08:21.480 --> 00:08:27.080
349
+ Las aplicaciones se programan en lenguajes como C++, Python, Visual Basic, entre otros.
350
+
351
+ 00:08:27.080 --> 00:08:30.720
352
+ Pero todos esos lenguajes compilan al lenguaje ensamblador de la CPU.
353
+
354
+ 00:08:30.720 --> 00:08:32.800
355
+ Las GPUs tienen algo muy parecido.
356
+
357
+ 00:08:32.800 --> 00:08:36.560
358
+ Y fabricantes como Nvidia han creado lenguajes intermedios
359
+
360
+ 00:08:36.560 --> 00:08:39.760
361
+ para que los programadores le hablen al metal,
362
+
363
+ 00:08:39.760 --> 00:08:42.440
364
+ para que puedan programar el chip de la GPU.
365
+
366
+ 00:08:42.440 --> 00:08:46.200
367
+ El más popular en este momento se llama CUDA de Nvidia.
368
+
369
+ 00:08:46.200 --> 00:08:48.480
370
+ Inicialmente pensaba para videojuegos,
371
+
372
+ 00:08:48.480 --> 00:08:52.840
373
+ CUDA es parte de la razón por la que la revolución de la inteligencia artificial es posible.
374
+
375
+ 00:08:52.840 --> 00:08:55.720
376
+ Porque permite hacer estos cálculos masivos
377
+
378
+ 00:08:55.720 --> 00:08:59.880
379
+ reprogramando el comportamiento de chips que originalmente fueron pensados
380
+
381
+ 00:08:59.880 --> 00:09:00.840
382
+ para mover pixeles.
383
+
384
+ 00:09:00.840 --> 00:09:05.520
385
+ Las GPUs también se programan y se diseñan a nivel físico de hardware
386
+
387
+ 00:09:05.520 --> 00:09:07.600
388
+ con consideraciones distintas.
389
+
390
+ 00:09:07.600 --> 00:09:09.880
391
+ La CPU, que es el procesador que arranca el sistema operativo,
392
+
393
+ 00:09:09.880 --> 00:09:13.800
394
+ está en el corazón de la tarjeta madre de una computadora
395
+
396
+ 00:09:13.800 --> 00:09:16.200
397
+ o de la tarjeta central de un teléfono.
398
+
399
+ 00:09:16.200 --> 00:09:21.440
400
+ Pero la GPU se conecta a alta velocidad a través de un puerto que se llama PCI-E,
401
+
402
+ 00:09:21.440 --> 00:09:24.080
403
+ que es un puerto, es una serie de muesquitas
404
+
405
+ 00:09:24.080 --> 00:09:27.680
406
+ que se conectan directamente a la electrónica de la tarjeta madre.
407
+
408
+ 00:09:27.680 --> 00:09:31.440
409
+ En un teléfono o en una computadora de Apple que tienen System on a Chip,
410
+
411
+ 00:09:31.440 --> 00:09:35.400
412
+ las GPUs directamente están pegadas a la CPU en el System on a Chip,
413
+
414
+ 00:09:35.400 --> 00:09:36.880
415
+ como lo vimos en la clase anterior.
416
+
417
+ 00:09:36.880 --> 00:09:40.920
418
+ En una computadora normal, la CPU tiene un ventilador o un sistema
419
+
420
+ 00:09:40.920 --> 00:09:43.840
421
+ de refrigeramiento por agua que enfría la CPU.
422
+
423
+ 00:09:43.840 --> 00:09:47.480
424
+ Pero las GPUs también se calientan, así que tienen sus propios sistemas
425
+
426
+ 00:09:47.480 --> 00:09:50.680
427
+ de enfriamiento paralelo, sus propios ventiladores o su propia
428
+
429
+ 00:09:50.680 --> 00:09:51.920
430
+ refrigeración de agua.
431
+
432
+ 00:09:51.920 --> 00:09:54.840
433
+ En algunos casos, como en las computadoras de videojuegos más
434
+
435
+ 00:09:54.840 --> 00:09:57.920
436
+ poderosas, o en las computadoras de render de efectos especiales,
437
+
438
+ 00:09:57.920 --> 00:10:02.160
439
+ o en las supercomputadoras de simulación para efectos científicos,
440
+
441
+ 00:10:02.160 --> 00:10:04.440
442
+ llegan a enfriarlas con aceite.
443
+
444
+ 00:10:04.440 --> 00:10:06.400
445
+ El aceite no conduce la electricidad.
446
+
447
+ 00:10:06.400 --> 00:10:10.080
448
+ Así que hay computadoras que se hunden en aceite para que el aceite
449
+
450
+ 00:10:10.080 --> 00:10:11.000
451
+ disipe el calor.
452
+
453
+ 00:10:11.000 --> 00:10:13.840
454
+ Más adelante vamos a hablar de codecs, que son codificadores de
455
+
456
+ 00:10:13.840 --> 00:10:17.160
457
+ codificadores, un tipo de algoritmo de compresión y descompresión que
458
+
459
+ 00:10:17.160 --> 00:10:19.880
460
+ es, por ejemplo, la forma en la que funciona el video.
461
+
462
+ 00:10:19.880 --> 00:10:24.040
463
+ Los videos antes eran súper pesados y ahora son mucho más livianos.
464
+
465
+ 00:10:24.040 --> 00:10:26.960
466
+ Antes teníamos Blu-rays y ahora tenemos YouTube y Netflix.
467
+
468
+ 00:10:26.960 --> 00:10:31.720
469
+ Pero esos son algoritmos que gastan muchísimo de el chip.
470
+
471
+ 00:10:31.720 --> 00:10:34.320
472
+ Y antes usaban la GPU y mucho antes la CPU.
473
+
474
+ 00:10:34.320 --> 00:10:39.360
475
+ Ahora usan transistores especializados dentro de la GPU como instrucciones
476
+
477
+ 00:10:39.360 --> 00:10:42.760
478
+ que solamente se encargan de codificar y decodificar video,
479
+
480
+ 00:10:42.760 --> 00:10:44.880
481
+ usando mucho menos electricidad.
482
+
483
+ 00:10:44.880 --> 00:10:47.200
484
+ Lo mismo pasa con la simulación de ciertos videojuegos.
485
+
486
+ 00:10:47.200 --> 00:10:48.520
487
+ Los videojuegos empezaron, por ejemplo,
488
+
489
+ 00:10:48.520 --> 00:10:51.480
490
+ a simular el comportamiento de los fotones del mundo real,
491
+
492
+ 00:10:51.480 --> 00:10:55.040
493
+ el comportamiento de la luz, con una técnica llamada ray tracing,
494
+
495
+ 00:10:55.040 --> 00:10:57.640
496
+ que inicialmente se programaba en código,
497
+
498
+ 00:10:57.640 --> 00:11:02.440
499
+ pero ahora se crean el transistor en los chips y la GPU tiene unidades
500
+
501
+ 00:11:02.440 --> 00:11:04.440
502
+ específicamente diseñadas para ray tracing.
503
+
504
+ 00:11:04.440 --> 00:11:06.440
505
+ Con la inteligencia artificial pasa lo mismo.
506
+
507
+ 00:11:06.440 --> 00:11:08.160
508
+ La inteligencia artificial es, en esencia,
509
+
510
+ 00:11:08.160 --> 00:11:11.760
511
+ multiplicación de matrices y recorrido de árboles.
512
+
513
+ 00:11:11.760 --> 00:11:15.600
514
+ Eso se puede programar en el chip y es la esencia de las unidades de
515
+
516
+ 00:11:15.600 --> 00:11:17.040
517
+ procesamiento neural.
518
+
519
+ 00:11:17.040 --> 00:11:19.680
520
+ Nvidia, por ejemplo, tiene unos chips que solo hacen eso,
521
+
522
+ 00:11:19.680 --> 00:11:20.800
523
+ que vamos a ver más adelante.
524
+
525
+ 00:11:20.800 --> 00:11:24.400
526
+ Antes de que la inteligencia artificial consumiera masivas cantidades de chips
527
+
528
+ 00:11:24.400 --> 00:11:27.600
529
+ gráficos, lo hizo las criptomonedas.
530
+
531
+ 00:11:27.600 --> 00:11:31.800
532
+ Bitcoin y casi todas las monedas que usan blockchain requieren hacer un tipo de
533
+
534
+ 00:11:31.800 --> 00:11:35.520
535
+ cálculo matemático muy particular para que el blockchain funcione de manera
536
+
537
+ 00:11:35.520 --> 00:11:36.440
538
+ cifrada.
539
+
540
+ 00:11:36.440 --> 00:11:40.040
541
+ Ese cálculo es más amigable en procesamiento paralelo que en
542
+
543
+ 00:11:40.040 --> 00:11:41.280
544
+ procesamiento serial.
545
+
546
+ 00:11:41.280 --> 00:11:43.160
547
+ Así que aprovecha las GPUs.
548
+
549
+ 00:11:43.160 --> 00:11:47.560
550
+ Y como Bitcoin recompensa con criptomonedas a las personas que hacen
551
+
552
+ 00:11:47.560 --> 00:11:50.320
553
+ este proceso de ejecutar las ecuaciones matemáticas,
554
+
555
+ 00:11:50.320 --> 00:11:54.200
556
+ llamado criptominería, se creó toda una industria de minería de Bitcoin,
557
+
558
+ 00:11:54.200 --> 00:11:58.600
559
+ que es poner a correr estas GPUs al máximo en grandes granjas de servidores
560
+
561
+ 00:11:58.600 --> 00:12:02.200
562
+ pegadas a granjas de hidroeléctricas, plantas de energía nuclear,
563
+
564
+ 00:12:02.200 --> 00:12:04.280
565
+ energía basada en gas, etcétera.
566
+
567
+ 00:12:04.280 --> 00:12:07.800
568
+ Hay países enteros que tienen cosas así, como por ejemplo El Salvador.
569
+
570
+ 00:12:07.800 --> 00:12:11.800
571
+ Eso hizo que la demanda de chips aumentara justo antes de que llegara la
572
+
573
+ 00:12:11.800 --> 00:12:12.880
574
+ inteligencia artificial.
575
+
576
+ 00:12:12.880 --> 00:12:16.880
577
+ No es como que las GPUs hayan abandonado la industria de los videojuegos.
578
+
579
+ 00:12:16.880 --> 00:12:18.400
580
+ Todavía hay mucha innovación.
581
+
582
+ 00:12:18.400 --> 00:12:22.840
583
+ Valve, la empresa detrás de juegos como Portal, Half-Life y el sistema Steam,
584
+
585
+ 00:12:22.840 --> 00:12:26.840
586
+ tiene un sistema operativo llamado SteamOS que reemplaza el sistema operativo que
587
+
588
+ 00:12:26.880 --> 00:12:30.480
589
+ estás creando en tu computadora para maximizar el uso de recursos para un
590
+
591
+ 00:12:30.480 --> 00:12:31.320
592
+ videojuego,
593
+
594
+ 00:12:31.320 --> 00:12:34.840
595
+ de tal manera que tu computadora se vuelve en esencia una consola de videojuegos.
596
+
597
+ 00:12:34.840 --> 00:12:39.800
598
+ También la realidad aumentada y la realidad virtual han aumentado la necesidad
599
+
600
+ 00:12:39.800 --> 00:12:44.360
601
+ de procesadores gráficos porque en cada ojo estás procesando dos pantallas
602
+
603
+ 00:12:44.360 --> 00:12:48.800
604
+ distintas para crear esa sensación de tridimensionalidad y presencia que tiene
605
+
606
+ 00:12:48.800 --> 00:12:49.840
607
+ la realidad virtual.
608
+
609
+ 00:12:49.840 --> 00:12:53.640
610
+ Así que aún sigue habiendo mucha innovación gráfica,
611
+
612
+ 00:12:53.640 --> 00:12:57.200
613
+ solo que la inteligencia artificial lo absorbió mucho y todavía tenemos mucho
614
+
615
+ 00:12:57.200 --> 00:12:58.680
616
+ de procesamiento científico que hacer.
617
+
618
+ 00:12:58.680 --> 00:13:03.000
619
+ Las GPUs son un procesador revolucionario que avanzó la ciencia humana.
620
+