Lógica de Programación 1NM10
<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 abril</td>
<td width="15%" >
<p>12
<b>regreso de vacaciones</b></p>
</td>
<td width="14%" >13 (sesión)</td>
<td width="14%" >14</td>
<td width="14%" >15</td>
<td width="14%" >16</td>
<td width="14%" >17</td>
</tr>
<tr>
<td width="15%" >18</td>
<td width="15%" >19</td>
<td width="14%" >
<p>20
</p>
</td>
<td width="14%" >21</td>
<td width="14%" >
<p>22
<b>retos de condicionales, 1a. versión</b></p>
</td>
<td width="14%" >23</td>
<td width="14%" >24</td>
</tr>
<tr>
<td width="15%" >25</td>
<td width="15%" >
<p>26
<b>retos de condicionales, tester</b></p>
</td>
<td width="14%" >27</td>
<td width="14%" >28</td>
<td width="14%" >
<p>29
<b>retos de condicionales,mejorado</b></p>
</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%" >
<p>6
</p>
</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>entrega Code Studio</b></p>
<p>
<b> ciclos retos a revisión</b></p>
</td>
<td width="14%" >12</td>
<td width="14%" >
<p>13
<b>revisión de ciclos retos</b></p>
</td>
<td width="14%" >14</td>
<td width="14%" >15</td>
</tr>
<tr>
<td width="15%" >
<p>16
<b>Entrega mejorada ciclos</b></p>
</td>
<td width="15%" >17</td>
<td width="14%" >18</td>
<td width="14%" >19</td>
<td width="14%" >20</td>
<td width="14%" >21</td>
<td width="14%" >22</td>
</tr>
</table>
<p> </p>
<p>
<b>Sesión 31 (martes 15/junio/2021): apuntadores</b>
- Temas de hoy:
<b>- especificaciones del trabajo final</b>
acervo: ver notas líneas adelante
<b>- concepto de apuntadores</b>
acervo: ejemplo apuntadores.c</p>
<p>
<b>+ Notas:</b><b> </b>
¿Qué van a entregar para el trabajo final?
a) Archivo en Word de desarrollo
b) Código fuente definitivo
c) Dos vídeos: de usuario y técnico (en mp4)
Los vídeos son breves y sencillos. Pueden grabarse en zoom.
Entrega 21 de junio.
Enviar a:
jlgoytia@megasinapsis.com
jlgoytia@gmail.com</p>
<p>
<b>Sesión 30 (jueves 10/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</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 29 (martes 8/junio/2021): no hubo por juntas docentes</b></p>
<p>
<b>Sesión 28 (jueves 3/junio/2021): proyecto "gato tonto" con subrutinas y Scrum</b>
<b>Sesión 27 (martes 1/junio/2021): ejemplo de subrutina con factorial</b>
<b>Sesión 26 (jueves 27/mayo/2021): diseño conceptual de "gato tonto" con subrutinas</b>
<b>Sesión 25 (martes 25/mayo/2021): aplicación de arreglos con oferta de DV</b>
<b>Sesión 24 (jueves 20/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 23 (martes 18/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
- compilador online en lenguaje C
- Acervo:
- apuntes y resolución del Triángulo de Pascal (PDF)
- programa del factorial (en lenguaje C)
- hipervínculo al compilador en lenguaje C
- Por entregar: ninguno
<b>+ Notas:</b>
<b> ya consideradas en los apuntes del Tríángulo de Pascal</b>
<b> </b></p>
<p>
<b>Sesión 22 (jueves 13/mayo/2021): ejemplo de arreglos con Fibonacci</b>
- Temas de hoy:
- ejemplo de aplicación con arreglos
- Acervo: Fibonacci resuelto con arreglos
- Por entregar: ninguno
<b>+ Notas:</b><b> </b>
Acerca de la presentación sobre serie de Fibonacci.
(ligado al crecimiento de especies invasoras)</p>
<p>
Presentación no recomendable para el reto III-10.
1 1 2 3 5 8 13 21 34 55 89 144</p>
<p>
Variante 1 de presentación:
Año 1:
Mes: 1 2 3 4 5 6 7 8 9 10 11 12
1 1 2 3 5 8 13 21 34 55 89 144</p>
<p>
Año 2:
Mes: 1 2 3 4 5 6 7 8 9 10 11 12
233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368</p>
<p>
Variante 2 de presentación:
1 2 3 4 5 6
1 1 2 3 5 8</p>
<p>
7 8 9 10 11 12
13 21 34 55 89 144</p>
<p>
Una posibilidad es almacenar los datos en un arreglo
Índice: 0 1 2 3 4 5
1 1 2 3 5 8
datos[i-1]=número de Fibonacci;</p>
<p>
Cálculo:
a=0;
b=0;
c=1;
for(i=1;i<=n;i++)
{
// cálculo de los números de Fibonnaci en arreglo
a=b+c;
b=c;
datos[i-1]=c;
c=a;
}</p>
<p>
Se dio este ejemplo en Flowgorithm</p>
<p>
Requerimiento: el usuario desea saber el número de Fibonacci en tres cantidades que le indique.</p>
<p>
Pantalla preliminar:
Indique el mes en que desea saber el número de Fibonacci
(en otras palabras, la cantidad aproximada de conejos): 2 7 12</p>
<p>
2) 1
7) 13
12) 144</p>
<p>
<b>Sesión 21 (martes 11/mayo/2021): dudas sobre retos de ciclos</b>
- Temas de hoy:
- dudas sobre retos
- Acervo: ver notas líneas adelante
- Por entregar: análisis del caso Fibonnaci para el jueves. Es tarea para el profesor
<b>+ Notas:</b><b> </b>
<b>¿Qué es un buen algoritmo y un buen código?</b>
a) Que sea correcto.- cubre el requerimiento.
b) Fácil de entender.
c) Fácil de programar.
d) Fácil de mantener.
e) Conciso.
f) Eficiente (consume pocos recursos de hardware)
g) Tiempo de programación.</p>
<p>
<b>El while evalúa al inicio y puede ser que no se haga ninguna vez</b></p>
<p>
while (condicion) {
// realizar instrucciones
}</p>
<p>
while (existan-archivos-que-procesar) {
// calcular resultado de los exámenes
};</p>
<p>
El do-while se evalúa al final y al menos sea realiza en una ocasión
do {
// realizar instrucciones
} while (condición);</p>
<p>
do {
// desplegar menú
} while (no-elija-salir);</p>
<p>
<b>Algoritmo 1 para el reto de Fibonacci</b></p>
<p>
for (int i=1; i<=12; i++) {
printf("%5d", i);
}
printf("\n");</p>
<p>
for (int i=13; i<=24; i++) {
// poner cálculo
}
printf("\n\n");</p>
<p>
Algoritmo 2 para el reto de Fibonacci:</p>
<p>
for (i=1; i<=72; i++)</p>
<p>
// despliega los encabezados de nuevo año
if (i % 12 == 1) {
for (int j=i; j<=i+12; j++) {
printf("%5d", i);
}
printf("\n");
}</p>
<p>
// calcular número siguiente Fibonacci
printf("%5d", fibo);
printf("\n");
}</p>
<p>
<b>Un posible cambio de requerimiento:</b></p>
<p>
AÑO 1:
1 1 2 3 5 8 13 21 34 55 89 144</p>
<p>
AÑO 2:
1 1 2 3 5 8 13 21 34 55 89 144</p>
<p>
AÑO 3:
1 1 2 3 5 8 13 21 34 55 89 144</p>
<p>
AÑO 4:
1 1 2 3 5 8 13 21 34 55 89 144</p>
<p>
AÑO 5:
1 1 2 3 5 8 13 21 34 55 89 144</p>
<p>
AÑO 6:
1 1 2 3 5 8 13 21 34 55 89 144</p>
<p>
</p>
<p>
<b>Algoritmo 1 para el Triángulo de Pascal: el dato es la suma de los anteriores</b>
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1</p>
<p>
<b>Algoritmo 2 para el triángulo de Pascal</b>
1 = 4! / (4! * 0!)
4 = 4! / (3! * 1!)
6 = 4! / (2! * 2!)
4 = 4! / (1! * 3!)
1 = 4! / (0! * 4!)</p>
<p>
<b>Algoritmo 1 para la presentación:</b></p>
<p>
Al inicio de cada línea:
for (int i=1; i<=n; i++) printf(" ");</p>
<p>
Para la uniformidad de los datos:
printf("%4d", dato);</p>
<p>
<b>Algoritmo 2 para la presentación:</b>
Posicionar con gotoxy (x,y) si la herramienta lo permite</p>
<p>
<b>Sesión 20 (jueves 6/mayo/2021): autoevaluación, dudas sobre retos de ciclos e introducción a arreglos</b>
- Temas de hoy:
- matriz de autoevaluación
- dudas sobre los retos
- primer acercamiento a arreglos
- Acervo:
- la liga para el llenado de la matriz de autoevaluación se subió en el whatsApp
- Por entregar:
- entregas de retos condicionales y Code Studio, conforme a calendario </p>
<p>
<b>Notas:</b>
// tip para el triángulo de Pascal con variables únicamente
a b c d e f
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1</p>
<p>
// tip para Triángulo de Pascal al despliegue
for (i=1; i<=(n-6)*2; i++)
printf(" ");
// desplegar variables utilizando printf("%4d"....);
// tal vez una matriz sin visualizar el 0
printf("\n");</p>
<p>
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1</p>
<p>
<b>// tip para el triángulo de Pascal con una matriz bidimensional</b>
1 0 0 0 0 0
1 1 0 0 0 0
1 2 1 0 0 0
1 3 3 1 0 0
1 4 6 4 1 0
1 5 10 10 5 1</p>
<p>
<b>// tip para obtener el promedio</b>
pedir al usuario el número de datos (n)
i = 1
mientras (i <= n)
leer dato
suma = suma + dato
i = i + 1
termina mientras
promedio = suma / n</p>
<p>
// adecuación al problema de Fibonacci
- se reduce de 72 a 48 para que refleja 4 años de conejos
- desplegar 6 números por renglón</p>
<p>
*</p>
<p>
<b>ARREGLOS</b></p>
<p>
Una estructura que almacena datos del mismo tipo.</p>
<p>
Ejemplo con triángulo de Pascal.
a b c d e f
1 0 0 0 0 0
1 1 0 0 0 0
1 2 1 0 0 0
1 3 3 1 0 0
1 4 6 4 1 0
1 5 10 10 5 1</p>
<p>
Para desplegar:
desplegar a
desplegar b
desplegar c
desplegar d
desplegar e
desplegar f</p>
<p>
Primer renglón:
a=1; b=0; c=0; d=0; e=0; f=0</p>
<p>
De allí en adelante
f=f+e
e=e+d
d=d+c
c=c+b
b=b+a
a=1</p>
<p>
Ejemplo con triángulo de Pascal.
0 1 2 3 4 5
0 1 0 0 0 0 0
1 1 1 0 0 0 0
2 1 2 1 0 0 0
3 1 3 3 1 0 0
4 1 4 6 4 1 0
5 1 5 10 10 5 1</p>
<p>
// definición del arreglo
maximo = 20
int datos[maximo][maximo]</p>
<p>
// llenado inicial
for (i=0; i<maximo; i++)
for (j=0; j<maximo; j++)
datos[i][j] = 0;</p>
<p>
// llenado del Triángulo de Pascal
[aquí iría el llenado]</p>
<p>
// despliegue
for (i=0; i<maximo; i++)
for (i=1; i<=(n-6)*2; i++) {
printf(" ");
}
for (j=0; j<maximo; j++) {
if (datos[i][j] > 0)
print("%4d", datos[i][j]);
}
printf("\n");
}</p>
<p>
<b>/* ejemplo de arreglos para varias calificaciones */</b></p>
<p>
// n calificaciones
int c1=0, c2=0, c3=0....;
int cuenta=0;
if (c1==10) cuenta++;
if (c2==10) cuenta++;
if (c3==10) cuenta++;
if (c4==10) cuenta++;</p>
<p>
leer n del usuario o de un archivo de configuración
int calificaciones[n];
for (int i=0; i<n; i++)
calificaciones[i]=0;</p>
<p>
int cuenta=0;
for (int i=0; i<n; i++)
if (calificaciones[i]==10) cuenta++;
printf("%6d", cuenta);</p>
<p>
<b>// tip para Fibonacci</b>
1 2 3 4 5 6 7 8
1 1 2 3 5 8 13 21</p>
<p>
inicial 1
final 12
mientras (inicial < 72)
desde inicial hasta inicial+11 despliega i
desde inicial hasta inicial+11 despliega número de Fibonacci
despliega línea en blanco
inicial = inicial + 12</p>
<p>
<b>Sesión 19 (martes 4/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=1; 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=1; j<=m; j++)
print("mundo");
}</p>
<p>
// cuidado en donde poner las instrucciones
suma = 0
for... {
suma = suma + i
despliega suma
}</p>
<p>
suma = 0
for... {
suma = suma + i
}
despliega suma</p>
<p>
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>
// técnica 1 para el despliegue del Triángulo de Pascal
for (renglon = 1; renglon<=limite; renglon++) {
// calcular número de espacios en blanco al inicio
for (i = 1; i <= n; i++) printf(" ");
// en un ciclo desplegar los números
printf("%4d", variable); // manejar dentro de %d el espacio requerido para cada número</p>
<p>
// técnica 2 para el despliegue del Triángulo de Pascal
for (renglon = 1; renglon<=limite; renglon++) {
// calcular la posicion del número
gotoxy(x,y);
printf("%4d", variable); // manejar dentro de %d el espacio requerido para cada número</p>
<p>
<b>Sesión 18 (jueves 29/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 17 (martes 27/abril/2021): introducción a ciclos</b>
- Temas:
- introducción a ciclos
- reto II-8 programado con ciclo
- introducción a deuda técnica
- Acervo:
- condicionales reto II-8 oferta DVD versión2 (con ciclos)
- Por entregar:
- revisar en internet otro ejemplo
<b>+ Notas:</b>
// lógica de un ciclo for o while
antes del ciclo
repite mientras se cumpla (condición)
instrucción 1
instrucción 2
...
termina mientras
después del ciclo</p>
<p>
// lógica de un do-while
antes del ciclo
repite
instrucción 1
instrucción 2
...
mientras se cumpla (condición)
después del ciclo</p>
<p>
<b>// ejemplo: leer tres veces con while</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>
<b>Sesión 16 (jueves 22/abril/2021): repaso, reto de principio a fin</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 15 (martes 20/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 no 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>Fragmento de pseudocódigo</b>
entero h1, h2, h3, h4, h5, h6, h7; // horas trabajadas por día
entero hrsdobles=0, hrstriples=0;
entero diasextras = 0;</p>
<p>
si (h1 > 8)
hrssextras = h1 - 8
diasextras = diasextras + 1
si (hrsextras > 3)
hrsdobles = hrsdobles + 3
hrstriples = hrstriples + (hrsextras - 3)
en caso contrario
hrsdobles = hrsdobles + hrsextra</p>
<p>
si (h4 > 8)
diasextras = diasextras + 1
hrssextras = h4 - 8
si (diasextras > 3)
hrstriples = hrstriples + hrsextras
en caso contrario
si (hrsextras > 3)
hrsdobles = hrsdobles + 3
hrstriples = hrstriples + (hrsextras - 3)
en caso contrario
hrsdobles = hrsdobles + hrsextra</p>
<p>
<b>Sesión 13 (jueves 15/abril/2021): ejercicios de condicionales</b>
- Tema visto:
- tipo char
- instrucción getch
- números aleatorios
- Acervo: notas en líneas adelante
- Retos: sobre condicionales para el martes 20
- Notas:
<b>Tema 1: 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>
0 1 0 0 0 0 0 1 sistema binario
_
128 64 32 16 08 04 02 01</p>
<p>
0 6 5 sistema decimal
_
100 10 01</p>
<p>
- char m = getch(); // suponga que el usuario tecleó A mayúscula
printf("%c", m); // se desplegaría la A mayúscula
printf("%d", m); // se desplegaría 65, es decir, el ASCII de ese caracter</p>
<p>
<b>Tema 2: instrucción getch();</b>
Lee un dato char del teclado sin hacer eco y sin dar <Enter>
Se encuentra en conio.h
char m;
m = getch();
Aplicaciones:
a) autocompletar
b) contraseñas
char m;
m = getch();
printf("*");
c) calculadoras
d) juegos
char m;
m = getch();
// si el usuario escogió sol
if (m = 'S' || m = 's')
e) menús
f) otras</p>
<p>
<b>Tema 3: números aleatorios</b>
#include <stdio.h>
#include <time.h>
main() {
int aleatorio, volado, dado;
srand(time(NULL));
aleatorio = rand();
printf("%d", aleatorio);
volado = aleatorio % 2;
dado = aleatorio % 6 + 1;
}</p>
<p>
<b>Sesión 12 (martes 13/abril/2021): condicionales y tabla de pruebas</b>
- Tema visto:
- ejercicio sobre operadores
- ejercicio sobre condicionales
- ejercicio sobre condicionales
Hacer un programa que obtenga la evaluación semestral a partir de tres calificaciones enteras entre 0 y 100. Para este ejercicio dicha evaluación será el dato mayor de las tres calificaciones.
- concepto de tabla de pruebas
- Acervo
- para genios (presentación)
- Retos: retos sobre condicionales para entregar el 20 de abril en 1a. versión
- 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>
<b>Documentación a entregar en Word o PDF</b>
1.- Requerimiento por escrito.
2.- Ejemplo de cálculo
3.- Pantalla con ejemplo real
4.- Tabla de pruebas
5.- Flowgorithm
6.- Código (código y una pantalla en ejecución)</p>
<p>
<b>Ejercicio en este momento:</b>
1.- Requerimiento: Hacer un programa que obtenga la evaluación semestral a partir de tres calificaciones enteras entre 0 y 100. Para este ejercicio dicha evaluación será el dato mayor de las tres calificaciones.</p>
<p>
<b>Propuesta de tabla de pruebas (realizada por un estudiante):</b>
80, 20, 20 > 80
10, 90, 45 > 90
85, 30, 35 > 85</p>
<p>
<b>Tabla de propuesta mejorada:</b>
80, 20, 20 > 80
10, 90, 45 > 90
85, 30, 35 > 85
90, 90, 80 > 90
90, 80, 90 > 90</p>
<p>
<b>Propuesta de algoritmo (realizada por un estudiante):</b>
if (x > y && x > z) {
cout<<"El promedio es: "<<x;
} else if (y > x && y > z) {
cout<<"El promedio es: "<<y;
} else {
cout<<"El promedio es: "<<z;
}</p>
<p>
<b>Mejora:</b>
if (x >= y && x >= z) {
cout<<"El promedio es: "<<x;
} else if (y >= x && y >= z) {
cout<<"El promedio es: "<<y;
} else {
cout<<"El promedio es: "<<z;
}</p>
<p>
<b>Otro posible algoritmo:</b>
mayor = x;
if (y > mayor) mayor = y;
if (z > mayor) mayor = z;
cout<<"El promedio es: "<<mayor;</p>
<p>
<b>Sesión 11 (martes 30/marzo/2021): ejercicio de condicionales</b>
- Tema visto:
- video sobre código binario
- video para empezar a programar
- síntesis de qué es saber programar
- ejercicio de revisión de tester sobre algoritmos con condicionales
- Acervo:
- videos sobre código binario y para empezar a programar
- esquema de que es saber programar
- ejercicio de revisión de tester sobre algoritmos con condicionales
- Retos: no se agrega ninguno
- Notas: se rifó un libro para quienes dieran la respuesta adecuada de cuales algoritmos no cubrirían todos los casos de manera completa. Se declaró desierto el concurso. La respuesta correcta es: 5, 16, 22, 24, 26, 28.</p>
<p>
<b>Sesión 10 (jueves 25/marzo/2021): introducción a condicionales</b>
- Tema visto:
- concepto de condicional
- concepto de tabla de pruebas
- Acervo:
- Retos por resolver: Hacer un programa que reciba los tres lados de un triángulo y despliegue su tipo. Suponga que ya leyeron los lados como a, b y c. Recuerde los tipos de triángulos: tres lados iguales - equilátero; dos lados iguales - isósceles; todos diferentes - escaleno.
- Notas:
<b>// Tabla de pruebas</b>
8 8 8 equilátero
3 4 5 escaleno
7 8 8 isósceles
8 7 8 isósceles
7 8 8 isósceles</p>
<p>
<b>// Características de un algoritmo de solución</b>
a) Debe expresar los pasos sin ambigüedad
b) Debe llegar a la solución</p>
<p>
<b>// Estructura general del si</b>
si (condicion)
....
en caso contrario
....
termina</p>
<p>
Ejemplo:
si (promedio >= 8.0)
despliega "Aprobado"
en caso contrario
despliega "Reprobado"
termina</p>
<p>
<b>// Buena práctica: no es recomendable poner dos condiciones en sustitución de un "en caso contrario"</b>
// porque se deja una puerta semiabierta a un problema en el mantenimiento
si (promedio >= 8.0)
despliega "Aprobado"
termina
si (promedio < 6.0)
despliega "Reprobado"
termina</p>
<p>
// en ocasiones sí es correcto poner dos condiciones si no son excluyentes
si (promedio < 6.0)
despliega "Curso de repaso"
termina
si (promedio >= 9.5)
despliega "Libro de obsequio"
termina</p>
<p>
<b>// en las condiciones su usan mucho el "y" y el "o" (según el lenguaje es AND, OR, &&, ||)</b>
si (promedio >= 8.0 y asistencia >= 80.0)
despliega "exento"
termina</p>
<p>
<b>Sesión 09 (martes 23/marzo/2021): "tips" sobre codificación</b>
- Tema visto:
- Tips sobre codificación
- Acervo: ver notas líneas adelante
- Por resolver: hay que intentar hallar la solución a dos programas que se expusieron en clase.
#include <stdio.h>
main() {</p>
<p>
/* ¿Por qué al desplegar no saca decimales */
int x = 6, y = 9, z = 5;
float promedio;
promedio = (x + y + z) / 3;
printf("Promedio de 6 9 5 es %f", promedio);
printf("\n\n");</p>
<p>
/* ¿Por qué aparece 3 + 3 + 3 = 10 */
float reparto = 10;
float a=reparto/3, b=reparto/3, c=reparto/3, d;
d = a + b + c;
printf("La suma de %3.0f + %3.0f + %3.0f = %3.0f", a, b, c, d);
}</p>
<p>
<b>+ Notas:</b>
Sobre la compilación
El concepto: compilar pasa de código fuente a código máquina (*.exe); "ejecutar" ejecuta el *.exe. Si se hacen cambios, hay que volver a recompilar. Para los trabajos pueden usar cualquier IDE.</p>
<p>
Sobre las bibliotecas
#include <stdio.h> es forzoso para reconocer a printf() y scanf(). Para las funciones matemáticas se usa #include <math.h>. Vg. sqrt, pow, etc.</p>
<p>
Sobre el main
main en otros casos lo pueden ver como "int main()" o "void main()". Cuando está como "int main()" les pide al final un return 1. En libros de hace años se utilizaba getch() o system("pause") al final; ya no es necesario. Se empleaba para detener la pantalla y que no desapareciera</p>
<p>
Tipos de datos:
Se usa float y double para decimales; el segundo tiene mayor precisión. Se emplea int para enteros; char para un caracter; string para una cadena de caracteres (excepto compiladores antiguos) y boolean para valores lógicos (excepto compiladores antiguos). Existe dos modificadores para cambiar el espacio en memoria: short y long (short int <= int <= long int).</p>
<p>
¿Qué se usa en printf o scanf? %f para float; %lf para double; %c para caracter; %s para string; ¿para booleanos?</p>
<p>
Operadores. para elevar a la potencia: 23 o pow(2,3)</p>
<p>
Conversiones de tipo
float x = 5.1;
int y;
y = x; // el resultado es impredecible
y = int(x); // convierte x a entero, descartando los decimales</p>
<p>
Comentarios
/* comentario de
más de una línea */
El comentario empleando /* */ no puede anidarse. Se tiene que cerrar.
// desde donde se ubica hasta el final de la línea</p>
<p>
Los comentarios se utilizan para explicación de código a nivel pedagógico; para aclarar lo que hace un "paquete" de instrucciones; documentar cambios realizados en fechas específicas y documentar lo que no es posible deducir a partir del código (Vg. /* Es programa instrumenta el art. 5o. transitorio de la Ley ......; DOF del día ...... */). No vale la pena documentar lo que es obvio a partir del código (excepto para fines pedagógicos). (Vg. x = y + w * m; // primero se hace la multiplicación).</p>
<p>
Para los programas, que se entregarán el 30 de marzo de 2021.
Al inicio poner como comentario el requerimiento, autor, fecha e IDE.
También se someterá a revisión de pares.
La revisión de pares será hasta el día 13 de abril.
La entrega definitiva será el 15 de abril.</p>
<p>
<b>Sesión 08 (jueves 18/marzo/2021): explotación de operadores y codificación</b>
- Tema visto:
- Explotación de operadores
- Codificación de algoritmos
- Lenguajes de programación más empleados.
- Acervo:
- ver notas líneas adelante y
- Tiobe para los lenguajes de programación más empleados (<a href="https://www.tiobe.com/tiobe-index/)">https://www.tiobe.com/tiobe-index/)</a>.
- Por entregar: reto 15 para los nones y reto 16 para los pares. Fecha: 23 de marzo.
<b>+ Notas:</b>
Requerimiento 1 (nones) = reto 15: Hacer un programa que obtenga el promedio semestral de 3 calificaciones departamentales. Todas serán enteras entre 0 y 10. Asume que el promedio "sube" en todos los casos, es decir, el promedio se redondea.</p>
<p>
Requerimiento 2 (pares) = reto 16: Hacer un programa que desglose un monto determinado conforme a las denominaciones de $500, $50, $5 y $1. Por ejemplo: si el monto es $648, habrá un billete de $500, 2 billetes de $50, 9 monedas de $5 y 3 monedas de $1.</p>
<p>
Nota: no pueden usar if. Únicamente con operadores y operaciones.
Hacer un ejemplo de cálculo.
Diseñar la pantalla preliminar.
Diagrama de flujo en Flowgorithm.</p>
<p>
#include <stdio.h>
#include <math.h></p>
<p>
main() {
float a, b, c, semi, superficie;
printf("=== Programa para calcular el área de un triángulo a partir de sus tres lados ===\n\n");
printf("Proporcione el valor de los tres lados separados por un espacio: ");
scanf("%f %f %f", &a, &b, &c);
semi = (a + b + c) / 2;
superficie = sqrt(semi * (semi-a) * (semi-b) * (semi-c));
printf("El área es : %5.1f", superficie);
}</p>
<p>
scanf es para leer datos del usuario
printf es para desplegar información al usuario
Tipos de datos numéricos: int, float, double.
La biblioteca que siempre deben poner es #include <stdio.h> porque allí está el scanf y el printf. En caso de que usen sqrt para raíz cuadrada deben poner #include <math.h>
Todos los programas comienzan con main().
Todas las instrucciones terminan con ;
\n en printf es un salto de línea.
%f es para tipo flotante; %c para char; %d para entero;%lf para double</p>
<p>
<b>Sesión 07 (martes 16/marzo/2021): revisión de trabajos entregados y labores del tester</b>
- Tema visto:
- se hizo una revisión aleatoria de los trabajos entregados y labores de tester
- se presentó la matriz de autoevaluación.
- Acervo: ver notas líneas adelante.
- Por entregar: corregir la revisión de tester y los desarrollos conforme al nuevo calendario de entrega.
<b>+ Notas:</b>
En los trabajos entregados se revisó: a) Que se hayan respetado los requerimientos conforme al contexto del usuario; b) que el cálculo sea correcto; c) que la pantalla hacia el usuario sea clara, completa, concisa y no se pidan doble vez los datos. De parte de los revisores que se hayan detectado posibles errores y oportunidades de mejora.
Resultado: aproximadamente el 50% de los trabajos se tendrían que ser reprocesados y la mayoría de los errores no fueron detectados por los tester.
Se da prórroga para una nueva revisión y adecuación del desarrollo, con un añadido: ahora los tester tienen que enviar la revisión por correo. Al mismo tiempo, se cancela la revisión por pares de los diagramas de flujo. Esta se hará junto con la codificación de los programas.</p>
<p>
</p>
<p>
<b>Sesión 06 (jueves 11/marzo/2021): construyendo soluciones con Flowgorithm</b>
- Tema visto:
- Introducción a pseudocódigo
- reglas de prioridad
- tipos de errores
- buenas prácticas
- Acervo: ver notas al final
- Por entregar: se dejó por concluir el siguiente problema:</p>
<p>
PASO 1: REQUERIMIENTO
Problema: obtener el promedio semestral de 3 calificaciones,
bajo el supuesto que todas las resultados "suben".
Todas las calificaciones son de tipo entero.</p>
<p>
PASO 2: EJEMPLO DE CÁLCULO
7, 8, 9 => 8
9, 9, 8 => 9
8, 9, 8 => 8
5, 6, 6 => 6</p>
<p>
PASO 3: PANTALLA PRELIMINAR AL USUARIO
=== Bienvenido. Este programa obtiene el promedio entero de tres calificaciones ===
(todos los promedios se redondean)</p>
<p>
Por favor, teclee las tres calificaciones separadas por un espacio: 9 9 8
El promedio es 9</p>
<p>
PASO 4: DIAGRAMA DE FLUJO Y PSEUDOCÓDIGO
bienvenida al usuario
indicar finalidad del programa
declarar a, b, c, promedio
pedirle datos al usuario
leer a, b, c
promedio = (a + b + c) / 3
desplegar promedio</p>
<p>
Duda: ¿cómo se logra el requerimiento en Flowgorithm?</p>
<p>
<b>+ Notas:</b>
<b>Buenas prácticas:</b>
- C distingue mayúsculas y minúsculas.
- declarar las variables al inicio
- las variables van con minúsculas
- para las variables usar nombres descriptivos a su propósito</p>
<p>
<b>Tipos de errores.</b>
a) léxicos.- no reconoce el elemento (la detecta el compilador)
b) sintácticos.- la sentencia está mal construida (la detecta el compilador en la mayoría de las veces)
c) lógicos.- compila porque es consistente desde el punto del compilador, pero no da el resultado</p>
<p>
<b>Reglas de prioridad</b>
Se hacen primero los operadores de mayor prioridad.
Multiplicaciones y divisiones; después sumas y restas; al final, asignación.</p>
<p>
<b>Dos pseudocódigos propuestos para el área del triángulo:</b></p>
<p>
declarar a, b, c, semi, superficie
desplegar "=== Programa para calcular el área de un triángulo a partir de sus tres lados ==="
desplegar "Proporcione los tres lados separados por un espacio: "
leer a, b, c
semi = (a + b + c) / 2
superficie = raiz_cuadrada ( s * (s-a) * (s-b) * (s-c))
desplegar "El área es " + area</p>
<p>
bienvenida al usuario
indicar finalidad del programa
pedir datos al usuario: a, b, c
semi = (a + b + c) / 2
superficie = raiz_cuadrada ( s * (s-a) * (s-b) * (s-c))
desplegar resultado</p>
<p>
<b>Estadísticas de asistentes:</b>
Llevaron un curso de programación: 22
- 14 primer programa "hola mundo"
- 10 ya tenían un ejemplo hecho
- 03 ya tenía diseñada la pantalla
- 00 conocían Flowgorithm
- Técnico en programación: 3
- técnico en computación: 3
- técnico en informática: 7
- otros: 9</p>
<p>
<b>Sesión 05 (martes 9/marzo/2021): introducción a Flowgorithm</b>
- Tema visto:
- Introducción a Flowgorithm
- Acervo: <a href="http://www.flowgorithm.org/">http://www.flowgorithm.org/</a>
- Por entregar: algoritmo de los retos del Capítulo I expresados y verificados en Flowgorithm.</p>
<p>
<b>Sesión 04 (jueves 4/marzo/2021): revisión de trabajos sobre requerimientos y pantallas</b>
- Tema visto:
- Revisión de ejemplos al azar sobre los trabajos de requerimientos y diseño de pantallas
- Explicación sobre la coevaluación. Ver nota líneas adelante
- Acervo: ver notas líneas adelante
- Por entregar:
Fecha límite para le revisión: 8 de marzo.
Fecha límite para el trabajo mejorado: 11 de marzo.
- ¿Cómo se da la revisión?
Nones revisan a pares, y pares a nones. Todos los trabajos deben ser revisados por al menos otro estudiantes, y todos los estudiantes tienen que revisar al menos un trabajo. Las personas revisadas incorporarán en una siguiente versión los comentarios realizados por el revisar, y podrán corregir o mejorar el trabajo. El revisor tendrá una calificación sobre la revisión, y el desarrollador sobre el trabajo mejorado. Se tendrán dos días hábiles para le revisión y otros dos días para la entrega del trabajo mejorado.</p>
<p>
<b>Sesión 03 (martes 2/marzo/2021): plataforma stdio code</b></p>
<p>
- Tema visto:
- Plataforma studio code para iniciar en programación (incluyendo estimación de tiempo de realización)
- Habilidades a construir en un curso inicial de programación (ver nota líneas adelante)
- Acervo:
sitio web <a href="https://studio.code.org/courses">https://studio.code.org/courses</a> (curso exprés)
- Por entregar:
boletas pares.- ejercicios pares para el primer departamental o un avance del 60%
boletas nones.- ejercicios nones para el primer departamental o un avance del 60%
El resto para el segundo departamental.</p>
<p>
<b>Sesión 02 (jueves 25/feb/2021): requerimiento y visión de usuario</b></p>
<p>
- Tema visto:
- Capítulo I: Entendiendo la visión del usuario
- Acervo:
1. Entendiendo la visión del usuario.
Anexo 1 Verificando el conocimiento
- Por entregar:
Boletas pares: retos pares
Boletas nones: retos nones.
En un solo archivo de Word o PDF.
Fecha de entrega: 2 de marzo de 2021.</p>
<p>
<b>Sesión 01 (martes 23/feb/2021): panorama general del curso</b></p>
<p>
- Tema visto:
- Esquema general del curso
- Proyecto Megasinapsis
- El Problema del Caballo, del Anexo-1.
- Acervo:
01 Esquema general del curso
Anexo 1 Verificando el conocimiento
- Por entregar:
Reto Anexo1-1. El problema del Caballo para el día 23 de febrero de 2021. Una fotografía con el experimento y el resultado.
Reto Anexo1-2. Estimación de fallecidos y contagiados del COVID para el día 2 de marzo de 2021, citando la fuente y en unas líneas sus conclusiones.
</p>