Lógica de Programación 1NM11
<p><b>Trabajos extra-clase:</b></p>
<p>
- Enviar a jlgoytia@megasinapsis.com
- En el archivo poner nombre (comenzando por el apellido paterno), material, secuencia, fecha y #reto.
- En el asunto del correo nombre, secuencia y reto.</p>
<p>
</p>
<table width="100%" cellpadding="0" border="1" cellspacing="0">
<tr>
<td width="15%" >domingo</td>
<td width="15%" >lunes</td>
<td width="14%" >martes</td>
<td width="14%" >miércoles</td>
<td width="14%" >jueves</td>
<td width="14%" >viernes</td>
<td width="14%" >sábado</td>
</tr>
<tr>
<td width="15%" >11</td>
<td width="15%" >
<p>12
<b>Regreso a clases</b></p>
</td>
<td width="14%" >13</td>
<td width="14%" >
<p>14
<b>Programas capítulo I en código</b></p>
</td>
<td width="14%" >15</td>
<td width="14%" >
<p>16
<b>Revisión de pares, código capítulo I</b></p>
</td>
<td width="14%" >17</td>
</tr>
<tr>
<td width="15%" >18</td>
<td width="15%" >
<p>19
<b>Retos condicionales a revisión</b></p>
</td>
<td width="14%" >
<p>20
<b>Códigos capítulo I mejorado</b></p>
</td>
<td width="14%" >21</td>
<td width="14%" >
<p>22
<b>Retos condicionales tester</b></p>
</td>
<td width="14%" >
<p>23
</p>
</td>
<td width="14%" >24</td>
</tr>
<tr>
<td width="15%" >25</td>
<td width="15%" >
<p>26
<b>Retos condicionales mejorados</b></p>
</td>
<td width="14%" >27</td>
<td width="14%" >28</td>
<td width="14%" >29</td>
<td width="14%" >30</td>
<td width="14%" >1 mayo</td>
</tr>
<tr>
<td width="15%" >2</td>
<td width="15%" >3</td>
<td width="14%" >4</td>
<td width="14%" >5</td>
<td width="14%" >6</td>
<td width="14%" >
<p>7
</p>
</td>
<td width="14%" >8</td>
</tr>
<tr>
<td width="15%" >9</td>
<td width="15%" >10</td>
<td width="14%" >
<p>11
<b>Code studio finalizado</b></p>
<p>
<b>Retos ciclo</b>
<b>a revisión</b>
</p>
</td>
<td width="14%" >12</td>
<td width="14%" >
<p>13
<b>Revisión de Tester ciclos</b>
</p>
</td>
<td width="14%" >
<p>14
</p>
</td>
<td width="14%" >15</td>
</tr>
<tr>
<td width="15%" >
<p>16
<b>Entrega mejorada ciclos</b></p>
</td>
<td width="15%" >
<p>17
</p>
</td>
<td width="14%" > </td>
<td width="14%" > </td>
<td width="14%" > </td>
<td width="14%" > </td>
<td width="14%" > </td>
</tr>
<tr>
<td width="15%" > </td>
<td width="15%" > </td>
<td width="14%" > </td>
<td width="14%" > </td>
<td width="14%" > </td>
<td width="14%" > </td>
<td width="14%" > </td>
</tr>
</table>
<p> </p>
<p>
<b>Sesión 30 (lunes 14/junio/2021): concepto de apuntadores</b>
Temas del día:
- especificaciones del trabajo final
acervo: notas más adelante
- concepto de apuntadores
acervo: ejemplo apuntadores.c</p>
<p>
<b>Sobre el trabajo final</b>
a) Pantalla de presentación (Word, PDF o PowerPoint)
- Unidad de aprendizaje, secuencia y fecha
- Integrantes
- Formas de localizarlos (correo electrónico que consulten)
b) Archivo en Word de desarrollo
c) Código fuente definitivo
d) Videos de usuario y técnico (mp4)</p>
<p>
Entrega
21 de junio.</p>
<p>
Enviar:
jlgoytia@megasinapsis.com
jlgoytia@gmail.com</p>
<p>
<b>Sesión 28 (viernes 11/junio/2021): recursividad</b>
Temas de hoy:
- retos de arreglos y subrutinas
acervo: archivo de Word (retos con arreglos y subrutinas.docx)
entrega: 20 de junio
- recursividad
acervo: sumatoria1 con ciclos.c; sumatoria2 con fórmula.c; sumatoria3 recursiva.c
- sobre el trabajo final
a) Archivo en Word de desarrollo
b) Código fuente definitivo
c) Videos de usuario y técnico (mp4)
Entrega 21 de junio.
Enviar:
jlgoytia@megasinapsis.com
jlgoytia@gmail.com</p>
<p>
pendientes del profesor:
- lista de cotejo para el trabajo final</p>
<p>
Temas "extras":
- captura de 800 narcotraficantes FBI por sistema informática
acervo: <a href="https://www.eluniversal.com.mx/mundo/fbi-tiende-trampa-digital-al-narco-caen-800">https://www.eluniversal.com.mx/mundo/fbi-tiende-trampa-digital-al-narco-caen-800</a></p>
<p>
<b>Sesión 27 (viernes 4/junio/2021): proyecto "gato tonto" con subrutinas y Scrum</b>
<b>Sesión 26 (lunes 31/mayo/2021): ejemplo de subrutina con factorial</b>
<b>Sesión 25 (viernes 28/mayo/2021): diseño conceptual de "gato tonto" con subrutinas</b>
<b>Sesión 24 (lunes 24/mayo/2021): aplicación de arreglos con oferta de DV</b>
<b>Sesión 23 (viernes 21/mayo/2021): programación del Triángulo de Pascal</b>
- Temas en conjunto y acervo:
- video sobre toma de requerimientos
<a href="https://www.youtube.com/watch?v=2KZKMY75cJM&t=1s">https://www.youtube.com/watch?v=2KZKMY75cJM&t=1s</a>
- compilador online sobre lenguaje C
<a href="https://www.onlinegdb.com/online_c++compiler">https://www.onlinegdb.com/online_c++compiler</a>
- Triángulo de Pascal: archivo en PDF
- Factorial: factorial.pdf y factorial 20210531 v2.c
- "Gato tonto": gato.pdf y gato4 2021 06 03.c
- Ventas de DVD: probllema de ventas de DVD v2</p>
<p>
<b>Sesión 22 (lunes 17/mayo/2021): ejemplo de arreglos con Triángulo de Pascal</b>
- Temas de hoy:
- ejemplo de aplicación de arreglos bidimensionales con Triángulo de Pascal
- cómo llegar a dar mayor alcance al cálculo de factorial usando diferentes tipos de datos
- Acervo:
- apuntes y resolución del Triángulo de Pascal (PDF)
- programa del factorial (en lenguaje C)
- Por entregar: ninguno
<b>+ Notas:</b>
<b> ya consideradas en los apuntes del Tríángulo de Pascal</b></p>
<p>
<b>Sesión 21 (viernes 14/mayo/2021): introducción a arreglos</b>
- Temas:
- problema de desbordamiento ejemplificado con el factorial.
- ejemplo de arreglo con Fibonacci
- Acervo:
- Fibonacci de tres cantidades (Fibonacci v2 en Flowgorithm)
- Factorial al tipo de dato que abarca mayor rango (factorial en lenguaje C).
- Actividades autónomas: ninguna adicional.
<b>+ Notas:</b>
<b>¿Hasta qué número llega el cálculo del factorial según tipo de dato y modificador manejado?</b>
int 16
long int 30
float 35
double 170
long double 1754</p>
<p>
</p>
<p>
<b>Sesión 20 (lunes 10/mayo/2021): no hubo clases por ser día festivo.</b></p>
<p>
<b>Sesión 19 (viernes 7/mayo/2021): introducción a arreglos</b>
- Temas:
- matriz de autoevaluación
- introducción a arreglos
- Acervo:
- resolución del ejercicio en Flowgoritm (mayores al promedio)
- Notas:
- Concepto de arreglos: datos del mismo tipo señalados por uno o más índices. En memoria temporal</p>
<p>
- Ejemplo: recibir "n" números, desplegar su promedio y cuantos de esos datos son mayores al promedio (en cantidad y porcentaje).</p>
<p>
<b>Algoritmo 1: sin arreglos</b>
decimal d1, d2, d3, d4, d5
entero cuenta = 0
leer datos
suma = d1 + d2 + d3 + d4 + d5
promedio = suma / n
si (promedio > d1) cuenta = cuenta + 1 // es equivalente a cuenta++
si (promedio > d2) cuenta = cuenta + 1
si (promedio > d3) cuenta = cuenta + 1
si (promedio > d4) cuenta = cuenta + 1
si (promedio > d5) cuenta = cuenta + 1</p>
<p>
<b>Algoritmo 2: con arreglos</b>
leer número de datos (n)
entero cuenta=0, i=0, j=0
decimal datos[n]
i = 0, j = 0
mientras (i<n)
leer datos [i]
suma = suma + dato
i = i + 1
termina mientras
promedio = suma / n
mientras (j<n)
si (promedio > datos[i]) cuenta = cuenta + 1
j = j + 1
termina mientras</p>
<p>
<b>Sesión 18 (lunes 3/mayo/2021): "tip" para retos de ciclos; desbordamiento</b>
- Temas:
- repaso de los retos
- desbordamiento
- tip para ciclos anidados
- tip para espacios para presentación tipo pirámide
- sugerencia para trabajo final: juego de la hidra
- Acervo:
- ¿cómo Pixar recuperó Toy Story 2? (vídeo)
- la hidra infinitas cabezas... (vídeo)
- Por entregar:
- entregas de retos condicionales y Code Studio, conforme a calendario (se ajustaron las fechas)
- Notas:
// declaración de contadores solo para el for
// (algunos compiladores lo permiten)
for (int i=1; i<=n; i++)
print("hola");</p>
<p>
// ciclos seguidos
int i;
for (i=1; i<=n; i++)
print("hola");</p>
<p>
for (i=0; i<=m; i++)
print("mundo");</p>
<p>
// ciclos anidados. Usar dos variables distintas para controlar el ciclo
for (i=1; i<=n; i++) {
print("hola");
for (j=0; j<=m; j++)
print("mundo");
}</p>
<p>
// cuidado con la comparación. Aquí dará siempre 1
leer dato;
if (dato = 0)
resultado = 1;</p>
<p>
La solución
if (dato == 0)
resultado = 1;</p>
<p>
// ¿qué es el desbordamiento?
// Nota: por cuestión pedagógica se ejemplifica en decimal,
// aunque la máquina lo hace en binario con sus propias políticas
// de almacenamiento de datos.
Supongan que tienen solo 3 espacios
n factorial(n) se muestra al usuario
0 1 1 (por definición)
1 1 1
2 2 2
3 6 6
4 24 24
5 120 120
6 720 720
7 5040 40</p>
<p>
// para dar espacios
for (i = 1; i <= n; i++) printf(" ");</p>
<p>
printf("%5d", variable);
_ _ _ 20</p>
<p>
<b>Sesión 17 (viernes 30/abril/2021): segundo ejemplo de ciclos</b>
- Temas:
- ejemplo de ciclo con promedio de varias calificaciones
- Acervo:
- promedio n datos
- promedio de n datos sin validar
- Por entregar:
- entregas de retos condicionales y Code Studio, conforme a calendario
<b>+ Notas:</b>
int / int el compilador automáticamente trunca
7 / 4 sale 1
entero (7 / 4 + 0.5) sale 1
entero (7.0 / 4 + 0.5) sale 2</p>
<p>
<b>Sesión 16 (lunes 26/abril/2021): introducción a ciclos</b>
- Temas:
- introducción a ciclos
- reto II-8 programado con ciclo
- Acervo:
- condicionales reto II-8 oferta DVD versión2
- Por entregar:
- revisar en internet otro ejemplo
<b>+ Notas:</b>
<b>// lógica de un ciclo for o while</b>
repite mientras se cumpla (condición)
instrucción 1
instrucción 2
...
termina mientras</p>
<p>
<b>// lógica de un do-while</b>
repite
instrucción 1
instrucción 2
...
mientras se cumpla (condición)</p>
<p>
<b>// ejemplo: leer tres veces con while o for</b>
cuenta = 0
mayor = 0
total = 0
mientras (cuenta<3)
leer precio
si (precio > mayor) mayor=precio
total = total + precio
cuenta = cuenta + 1
termina mientras</p>
<p>
<b>// formas abreviadas en lenguaje C</b>
cuenta = cuenta + 1; puede expresarse como cuenta++;
total = total + precio; puedes expresar como total += precio;</p>
<p>
</p>
<p>
<b>Sesión 15 (viernes 23/abril/2021): retroalimentación sobre retos de condicionales</b>
- Temas:
- reto de principio a fin
- Acervo:
- condicionales reto II-8 oferta DVD
- Por entregar: los mismos que ya estaban pendientes.
- Notas:
<b>Proceso de revisión:</b></p>
<p>
1.- Versión inicial al revisor (Word)
(con copia al maestro)
Retos condicionales: 20 de abril (pares) ó 22 de abril (nones)</p>
<p>
2.- El tester manda comentarios al compañero (Word comentado)
(con copia al maestro)
Retos condicionales: 26 de abril (todos)</p>
<p>
3.- Versión mejorada al revisor (Word comentado + Word mejorado)
(con copia al maestro)
Retos condicionales: 28 de abril (todos)</p>
<p>
<b>Sesión 14 (lunes 19/abril/2021): dudas de retos y validaciones</b>
- Temas:
- dudas de retos
- validaciones
- Acervo:
- programa con validaciones (triangulo_3_lados v2)
- Por entregar: los mismos que ya estaban pendientes.
- Notas:</p>
<p>
<b>Sobre las validaciones</b>
Objetivo: que no se introduzcan datos inconsistentes al sistema. Primero se valida y después se hace el cálculo.
a) No corresponde el tipo de dato. Vg. pedimos un número y nos dan un mensaje
b) No corresponde el rango. Vg. la evaluación es de 0 a 5 y capturan 10.
c) La combinación de datos no es coherente. Vg. 30 del mes 02; triángulo de lados 3, 4, 8</p>
<p>
<b>Reto II-7</b>
Indique el salario diario: 200
Capture las horas trabajadas día por día
lunes 0
martes 8
miércoles 10
jueves 10
viernes 12
sábado 10
domingo 8</p>
<p>
Horas dobles: 7
Horas triples: 3
Prima dominical: 1</p>
<p>
Sueldo normal: 1400 (sueldo diario * 7 días)
Inasistencias 0 (sueldo diario * 0 * 7/6)
Horas dobles: 350 (sueldo por hora * 7 * 2)
Horas triples: 225 (sueldo por hora * 3 * 3)
Prima dominicial: 50 (25% del sueldo diario)
---------------------
Total bruto: 2025 (antes de impuestos)</p>
<p>
Notas sobre el cálculo:
- se pagan 8 horas diarias, 6 días a la semana.
- si hubiera un 7o. día se tomaría doble
- si hubiera más de un día con 0 se toma como falta injustificada
- por cada falta se descuenta el sueldo diario por 7/6
- #faltas = 6 - días trabajados</p>
<p>
<b>Reto II-8</b>
Dame los tres precios de DVD:
1) 69
2) 125
3) 89
Total a pagar sin oferta: 283
Total a pagar con oferta: 125
Usted ahorró: 158</p>
<p>
</p>
<p>
<b>Sesión 13 (viernes 16/abril/2021): temas diversas para retos condicionales</b>
- Temas:
- sistemas de numeración
- tipos char y uso de getch
- números aleatorios
- Acervo:
- ver notas arriba
- Por entregar: los mismos que ya estaban pendientes.
- Notas:</p>
<p>
<b>Tema 1: sistemas de numeración</b></p>
<p>
_ _ _ (en decimal; hindú - 1000 combinaciones)</p>
<p>
_ _ _ (vigesimal; mayas - 8000 combinaciones)</p>
<p>
_ _ (sexagesimal; relojes - 3600 combinaciones )</p>
<p>
_ _ _ _ _ _ _ _ (binario; lenguaje máquina - 256 combinaciones)</p>
<p>
0 1 0 0 0 0 0 1 65 en sistema binario, que corresponde a la 'A'
_
128 64 32 16 08 04 02 01</p>
<p>
<b>Tema 2: tipo char</b>
- lee un caracter. Técnicamente lee un byte.
- Un byte es un conjunto de 8 bits que vienen en "paquete". 256 posibilidades
- el bit solo puede tener dos valores: 0 ó 1
- el teclado por cada tecla manda un byte a la computadora
- las minúsculas mandan un valor diferente a las mayúsculas
- al teclear 'A' el teclado manda un byte equivalente en decimal a 65
la A equivale al 65 conforme al código ASCII</p>
<p>
char m;
scanf("%c", &m); // supones que el usuario capturó una 'A'
printf("%c", m); // desplegará la 'A' (sin apóstrofes)
printf("%d", m); // desplegará 65, que corresponde a la A en ASCII</p>
<p>
Si se quisiera preguntar si oprimió la 'A' se sugiere</p>
<p>
if (m == 'A' || m == 'a')</p>
<p>
<b>Tema 3: getch para leer un caracter sin hacer eco</b>
Lo más usual al leer un caracter es:
a) Limpio la memoria la memoria del teclado antes de leer el siguiente
b) Lo leemos con getch, que no requiere oprimir <Enter></p>
<p>
¿Para qué usar getch? (se encuentra en conio.h).
- para moverse con las flechas
- contraseñas
char m;
m = getch();
printf("*");
- juegos
- menús</p>
<p>
<b>Tema 4: tipos de pruebas</b>
- pruebas de estrés o de carga máxima para alto volumen
- pruebas en paralelo (sistema anterior y sistema nuevo)
- pruebas de usabilidad (el usuario lo utiliza para ver si lo entiende y es operable)
- pruebas unitarias para probar una parte del sistema
- pruebas integrales para probar todo el sistema
- ¿cómo hacer las pruebas unitarias en Lógica de Programación?
a) Casos normales.-
tres calificaciones aprobadas (6 7 7) -> 7
tres calificaciones reprobadas (5 6 6) -> 5
b) Casos especial.- NP
c) Casos inconsistentes
números menores de 0 o mayores de 10 (Vg. 11)
números con decimales (Vg. 8.5)
letras ("ocho")</p>
<p>
<b>Tema 5: números aleatorios</b>
#include <stdio.h>
#include <time.h>
main() {
int aleatorio, volado, dado;
srand(time(NULL)); // para que en cada corrida sea un número distinto
aleatorio = rand(); // devuelve un número entero
printf("%d", aleatorio);
dado = aleatorio % 6 + 1; // al aplicar residuo nos devuelve entre 0 y 5
}</p>
<p>
<b>Sesión 12 (lunes 12/abril/2021): ejercicios de condicionales</b>
- Temas:
- ejercicio sobre operadores en PowerPoint
- concepto de tabla de pruebas
- ejercicios sobre condicionales.
Hacer un programa que obtenga el promedio semestral a partir de tres calificaciones enteras entre 0 y 100. Para este ejercicio dicho promedio será el dato mayor de las tres calificaciones.
- Acervo:
- para genios (presentación) / ejercicio de operadores
- las notas se encuentra líneas adelante
- Por entregar: se subirán los retos sobre operadores para entregar en 1a. revisión el 19 de abril
- Notas:</p>
<p>
<b>Nuestro método de trabajo:</b>
1.- Requerimiento por escrito (indispensable siempre)
2.- Ejemplo de cálculo con datos reales (si el caso lo requiere)
3.- Pantalla de interacción (indispensable siempre)
4.- Tabla de pruebas (indispensable a partir de condicionales)
(revisión de pares a nivel usuario, si fuera posible)
5.- Flowgorithm (indispensable en primer y segundo departamental)
6.- Codificación (indispensable)
(revisión de pares-técnica, indispensable siempre)</p>
<p>
</p>
<p>
<b>En la lógica de condicionales cuidar:</b>
a) Que la condición sea la adecuada
b) Los casos especiales
c) El uso de "en caso contrario"</p>
<p>
<b>En cuanto a la codificación:</b>
a) la comparación es con ==
b) uso de llaves
c) la alineación del código</p>
<p>
</p>