Upload batch from C CLI
Browse filesUploaded via hf-downloader C client
This view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +27 -0
- 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
- 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
- subir/Curso de Control de Flujo en C/01-Bienvenida/01-Lecturas recomendadas.txt +1 -0
- subir/Curso de Control de Flujo en C/01-Bienvenida/01-Resumen.html +0 -0
- subir/Curso de Control de Flujo en C/02-Toma de decisiones/01-Resumen.html +0 -0
- 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
- 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
- subir/Curso de Control de Flujo en C/02-Toma de decisiones/01-if_c58ef3ef-a775-44e3-a585-fbd6c1932976.c +9 -0
- subir/Curso de Control de Flujo en C/02-Toma de decisiones/02-Lecturas recomendadas.txt +1 -0
- subir/Curso de Control de Flujo en C/02-Toma de decisiones/02-Manejo de Condicionales IfElse en Lenguaje C.mp4 +3 -0
- subir/Curso de Control de Flujo en C/02-Toma de decisiones/02-Manejo de Condicionales IfElse en Lenguaje C.vtt +753 -0
- subir/Curso de Control de Flujo en C/02-Toma de decisiones/02-Resumen.html +0 -0
- subir/Curso de Control de Flujo en C/02-Toma de decisiones/02-demoif_72993f29-e31b-4df7-8b00-add49844084a.c +17 -0
- 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
- 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
- subir/Curso de Control de Flujo en C/02-Toma de decisiones/03-Resumen.html +0 -0
- subir/Curso de Control de Flujo en C/02-Toma de decisiones/03-nestedif_e6d6f354-6111-4e0b-9802-2aa3a6d9a99e.c +38 -0
- 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
- 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
- subir/Curso de Control de Flujo en C/02-Toma de decisiones/04-Resumen.html +0 -0
- subir/Curso de Control de Flujo en C/02-Toma de decisiones/04-switch_26ee0200-c773-4d19-a0d9-ba7fc5b5f686.c +40 -0
- 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
- 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
- subir/Curso de Control de Flujo en C/03-Control de Bucles en C/01-Resumen.html +0 -0
- subir/Curso de Control de Flujo en C/03-Control de Bucles en C/01-while_189ccca7-d3a5-4d0c-8408-4fc807afdccd.c +14 -0
- 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
- 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
- subir/Curso de Control de Flujo en C/03-Control de Bucles en C/02-Resumen.html +0 -0
- subir/Curso de Control de Flujo en C/03-Control de Bucles en C/02-dowhile_093e5362-d724-4dea-b1c3-7269ab208dd6.c +4 -0
- subir/Curso de Control de Flujo en C/03-Control de Bucles en C/03-Lecturas recomendadas.txt +3 -0
- subir/Curso de Control de Flujo en C/03-Control de Bucles en C/03-Resumen.html +0 -0
- 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
- 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
- subir/Curso de Control de Flujo en C/03-Control de Bucles en C/03-for_53ab0088-8c9a-4daf-b43d-4b6b92f44274.c +12 -0
- subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/01-Resumen.html +0 -0
- 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
- subir/Curso de Control de Flujo en C/04-Uso de las instrucciones break y continue/02-Resumen.html +0 -0
- 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
- 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
- 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
- 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
- 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
- subir/Curso de Control de Flujo en C/presentation.mhtml +0 -0
- subir/fixed/Curso de Fundamentos de Ingeniería de Software/01-Computación Básica/08-Resumen.html +0 -0
- subir/fixed/Curso de Fundamentos de Ingeniería de Software/01-Computación Básica/09-Resumen.html +0 -0
- 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
- 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
- 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
- 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 |
+
|