Open in TheBrain

Lógica de Programación 1NM10

<p><b>Trabajos extra-clase:</b></p>

<p>

<p>

&nbsp;</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

&nbsp;</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

&nbsp;</p>

</td>

<td width="14%" >

<p>7

&nbsp;</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>&nbsp;</p>

<p>

<b>Sesión 31 (martes 15/junio/2021): apuntadores</b>

<b>- especificaciones del trabajo final</b>

&nbsp;&nbsp;acervo: ver notas líneas adelante

<b>- concepto de apuntadores</b>

&nbsp; acervo: ejemplo apuntadores.c</p>

<p>

<b>+ Notas:</b><b>&nbsp;</b>

¿Qué van a entregar para el trabajo final?

&nbsp; a) Archivo en Word de desarrollo

&nbsp; b) Código fuente definitivo

&nbsp; c) Dos vídeos: de usuario y técnico (en mp4)

&nbsp;&nbsp;&nbsp;&nbsp;Los vídeos son breves y sencillos. Pueden grabarse en zoom.

&nbsp;Entrega 21 de junio.

&nbsp; Enviar a:

&nbsp;&nbsp;&nbsp; jlgoytia@megasinapsis.com

&nbsp;&nbsp;&nbsp; jlgoytia@gmail.com</p>

<p>

<b>Sesión 30 (jueves 10/junio/2021): recursividad</b>

Temas de hoy:

&nbsp; acervo: archivo de Word (retos con arreglos y subrutinas.docx)

&nbsp; entrega: 20 de junio

&nbsp; acervo: sumatoria1 con ciclos.c; sumatoria2 con fórmula.c; sumatoria3 recursiva.c</p>

<p>

pendientes del profesor:

<p>

Temas "extras":

&nbsp;&nbsp;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>

&nbsp;&nbsp;&nbsp;- video sobre toma de requerimientos

&nbsp;&nbsp;&nbsp; &nbsp;<a href="https://www.youtube.com/watch?v=2KZKMY75cJM&t=1s">https://www.youtube.com/watch?v=2KZKMY75cJM&t=1s</a>

&nbsp;&nbsp;&nbsp;- compilador online sobre lenguaje C

&nbsp;&nbsp;&nbsp; &nbsp;<a href="https://www.onlinegdb.com/online_c++compiler">https://www.onlinegdb.com/online_c++compiler</a>

&nbsp;&nbsp;&nbsp;- Triángulo de Pascal: archivo en PDF

&nbsp;&nbsp;&nbsp;- Factorial: factorial.pdf y&nbsp;factorial 20210531 v2.c

&nbsp;&nbsp;&nbsp;- "Gato tonto":&nbsp;gato.pdf y gato4 2021 06 03.c

&nbsp;&nbsp;&nbsp;- Ventas de DVD: probllema de ventas de DVD v2</p>

<p>

&nbsp;

<b>Sesión 23 (martes 18/mayo/2021): ejemplo de arreglos con Triángulo de Pascal</b>

&nbsp;- ejemplo de aplicación de arreglos bidimensionales con Triángulo de Pascal

&nbsp;- cómo llegar a dar mayor alcance al cálculo de factorial usando diferentes tipos de datos

&nbsp;- compilador online en lenguaje C

&nbsp;- apuntes y resolución del Triángulo de Pascal (PDF)

&nbsp;- programa del factorial (en lenguaje C)

&nbsp;- hipervínculo al compilador en lenguaje C

<b>+ Notas:</b>

<b> &nbsp;&nbsp;ya consideradas en los apuntes del Tríángulo de Pascal</b>

<b> &nbsp;&nbsp;</b></p>

<p>

<b>Sesión 22 (jueves 13/mayo/2021): ejemplo de arreglos con Fibonacci</b>

&nbsp;- ejemplo de aplicación con arreglos

<b>+ Notas:</b><b>&nbsp;</b>

Acerca de la presentación sobre serie de Fibonacci.

&nbsp;(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 &nbsp;7 &nbsp;8 &nbsp;9 10 11 &nbsp;12

&nbsp;&nbsp;&nbsp;&nbsp;1 1 2 3 5 8 13 21 34 55 89 144</p>

<p>

Año 2:

Mes: &nbsp;&nbsp;1 &nbsp;&nbsp;2 &nbsp;&nbsp;3 &nbsp;&nbsp;4 &nbsp;&nbsp;&nbsp;5 &nbsp;&nbsp;&nbsp;6 &nbsp;&nbsp;&nbsp;7 &nbsp;&nbsp;&nbsp;8 &nbsp;&nbsp;&nbsp;&nbsp;9 &nbsp;&nbsp;&nbsp;10 &nbsp;&nbsp;&nbsp;11 &nbsp;&nbsp;&nbsp;12

&nbsp;&nbsp;&nbsp;&nbsp;233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368</p>

<p>

Variante 2 de presentación:

1 &nbsp;2 &nbsp;3 &nbsp;4 &nbsp;5 &nbsp;&nbsp;6 &nbsp;

1 &nbsp;1 &nbsp;2 &nbsp;3 &nbsp;5 &nbsp;&nbsp;8</p>

<p>

7 &nbsp;8 &nbsp;9 10 11 &nbsp;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 &nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 1 2 3 5 8

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datos[i-1]=número de Fibonacci;</p>

<p>

Cálculo:

&nbsp;&nbsp;a=0;

&nbsp;&nbsp;b=0;

&nbsp;&nbsp;c=1;

&nbsp;&nbsp;for(i=1;i<=n;i++)

&nbsp;&nbsp;{

// cálculo de los números de Fibonnaci en arreglo

a=b+c;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b=c;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datos[i-1]=c;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c=a;

&nbsp;&nbsp;&nbsp;}</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

&nbsp;(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>

&nbsp;- dudas sobre retos

<b>+ Notas:</b><b>&nbsp;</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) {

&nbsp;&nbsp;// realizar instrucciones

}</p>

<p>

while (existan-archivos-que-procesar) {

&nbsp;&nbsp;// calcular resultado de los exámenes

};</p>

<p>

&nbsp;

El do-while se evalúa al final y al menos sea realiza en una ocasión

do {

&nbsp;&nbsp;// realizar instrucciones

} while (condición);</p>

<p>

do {

&nbsp;&nbsp;// desplegar menú

} while (no-elija-salir);</p>

<p>

&nbsp;

<b>Algoritmo 1 para el reto de Fibonacci</b></p>

<p>

for (int i=1; i<=12; i++) {

&nbsp;printf("%5d", i);

}

printf("\n");</p>

<p>

for (int i=13; i<=24; i++) {

&nbsp;// poner cálculo

}

printf("\n\n");</p>

<p>

&nbsp;

Algoritmo 2 para el reto de Fibonacci:</p>

<p>

for (i=1; i<=72; i++)</p>

<p>

&nbsp;&nbsp;&nbsp;// despliega los encabezados de nuevo año

&nbsp;&nbsp;&nbsp;if (i % 12 == 1) {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int j=i; j<=i+12; j++) {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%5d", i);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("\n");

&nbsp;&nbsp;&nbsp;}</p>

<p>

&nbsp;&nbsp;&nbsp;// calcular número siguiente Fibonacci

&nbsp;&nbsp;&nbsp;printf("%5d", fibo);

&nbsp;&nbsp;&nbsp;printf("\n");

}</p>

<p>

&nbsp;

<b>Un posible cambio de requerimiento:</b></p>

<p>

AÑO 1:

1 &nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;&nbsp;2 &nbsp;&nbsp;&nbsp;3 &nbsp;&nbsp;&nbsp;5 &nbsp;&nbsp;&nbsp;8 &nbsp;&nbsp;13 &nbsp;&nbsp;21 &nbsp;&nbsp;34 &nbsp;&nbsp;55 &nbsp;89 144</p>

<p>

AÑO 2:

1 &nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;&nbsp;2 &nbsp;&nbsp;&nbsp;3 &nbsp;&nbsp;&nbsp;5 &nbsp;&nbsp;&nbsp;8 &nbsp;&nbsp;13 &nbsp;&nbsp;21 &nbsp;&nbsp;34 &nbsp;&nbsp;55 &nbsp;89 144</p>

<p>

AÑO 3:

1 &nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;&nbsp;2 &nbsp;&nbsp;&nbsp;3 &nbsp;&nbsp;&nbsp;5 &nbsp;&nbsp;&nbsp;8 &nbsp;&nbsp;13 &nbsp;&nbsp;21 &nbsp;&nbsp;34 &nbsp;&nbsp;55 &nbsp;89 144</p>

<p>

AÑO 4:

1 &nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;&nbsp;2 &nbsp;&nbsp;&nbsp;3 &nbsp;&nbsp;&nbsp;5 &nbsp;&nbsp;&nbsp;8 &nbsp;&nbsp;13 &nbsp;&nbsp;21 &nbsp;&nbsp;34 &nbsp;&nbsp;55 &nbsp;89 144</p>

<p>

AÑO 5:

1 &nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;&nbsp;2 &nbsp;&nbsp;&nbsp;3 &nbsp;&nbsp;&nbsp;5 &nbsp;&nbsp;&nbsp;8 &nbsp;&nbsp;13 &nbsp;&nbsp;21 &nbsp;&nbsp;34 &nbsp;&nbsp;55 &nbsp;89 144</p>

<p>

AÑO 6:

1 &nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;&nbsp;2 &nbsp;&nbsp;&nbsp;3 &nbsp;&nbsp;&nbsp;5 &nbsp;&nbsp;&nbsp;8 &nbsp;&nbsp;13 &nbsp;&nbsp;21 &nbsp;&nbsp;34 &nbsp;&nbsp;55 &nbsp;89 144</p>

<p>

&nbsp;</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>

&nbsp;

<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>

&nbsp;

<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>

&nbsp;

<b>Algoritmo 2 para la presentación:</b>

Posicionar con gotoxy (x,y) si la herramienta lo permite</p>

<p>

&nbsp;

<b>Sesión 20 (jueves 6/mayo/2021): autoevaluación, dudas sobre retos de ciclos e introducción a arreglos</b>

&nbsp;- matriz de autoevaluación

&nbsp;- dudas sobre los retos

&nbsp;- primer acercamiento a arreglos

&nbsp;&nbsp;&nbsp;-&nbsp;la liga para el llenado de la matriz de autoevaluación se subió en el whatsApp

&nbsp;&nbsp;&nbsp;- entregas de retos condicionales y Code Studio, conforme a calendario&nbsp;</p>

<p>

<b>Notas:</b>

// tip para el triángulo de Pascal con variables únicamente

a &nbsp;b &nbsp;c &nbsp;d &nbsp;e &nbsp;f

1

1 &nbsp;1

1 &nbsp;2 &nbsp;1

1 &nbsp;3 &nbsp;3 &nbsp;1

1 &nbsp;4 &nbsp;6 &nbsp;4 &nbsp;1

1 &nbsp;5 10 10 &nbsp;5 &nbsp;1</p>

<p>

// tip para Triángulo de Pascal al despliegue

for (i=1; i<=(n-6)*2; i++)

&nbsp;&nbsp;&nbsp;printf(" ");

// desplegar variables utilizando printf("%4d"....);

// tal vez una matriz sin visualizar el 0

printf("\n");</p>

<p>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;1 &nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;2 &nbsp;&nbsp;1 &nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;3 &nbsp;&nbsp;3 &nbsp;&nbsp;1 &nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;4 &nbsp;&nbsp;6 &nbsp;&nbsp;4 &nbsp;&nbsp;1 &nbsp;&nbsp;

&nbsp;&nbsp;1 &nbsp;&nbsp;5 &nbsp;10 &nbsp;10 &nbsp;&nbsp;5 &nbsp;&nbsp;1</p>

<p>

<b>// tip para el triángulo de Pascal con una matriz bidimensional</b>

&nbsp;1 &nbsp;0 &nbsp;0 &nbsp;0 &nbsp;0 &nbsp;0

&nbsp;1 &nbsp;1 &nbsp;0 &nbsp;0 &nbsp;0 &nbsp;0

&nbsp;1 &nbsp;2 &nbsp;1 &nbsp;0 &nbsp;0 &nbsp;0

&nbsp;1 &nbsp;3 &nbsp;3 &nbsp;1 &nbsp;0 &nbsp;0

&nbsp;1 &nbsp;4 &nbsp;6 &nbsp;4 &nbsp;1 &nbsp;0

&nbsp;1 &nbsp;5 10 10 &nbsp;5 &nbsp;1</p>

<p>

&nbsp;

<b>// tip para obtener el promedio</b>

pedir al usuario el número de datos (n)

i = 1

mientras (i <= n)

&nbsp;&nbsp;&nbsp;leer dato

&nbsp;&nbsp;&nbsp;suma = suma + dato

&nbsp;&nbsp;&nbsp;i = i + 1

termina mientras

promedio = suma / n</p>

<p>

&nbsp;

// adecuación al problema de Fibonacci

<p>

*</p>

<p>

<b>ARREGLOS</b></p>

<p>

Una estructura que almacena datos del mismo tipo.</p>

<p>

&nbsp;

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++)

&nbsp;&nbsp;&nbsp;for (j=0; j<maximo; j++)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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++)

&nbsp;&nbsp;&nbsp;for (i=1; i<=(n-6)*2; i++) {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(" ");

&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;for (j=0; j<maximo; j++) {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (datos[i][j] > 0)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("%4d", datos[i][j]);

&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;printf("\n");

}</p>

<p>

&nbsp;

<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++)

&nbsp;&nbsp;&nbsp;calificaciones[i]=0;</p>

<p>

int cuenta=0;

for (int i=0; i<n; i++)

&nbsp;&nbsp;&nbsp;if (calificaciones[i]==10) cuenta++;

printf("%6d", cuenta);</p>

<p>

&nbsp;

<b>// tip para Fibonacci</b>

&nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;2 &nbsp;&nbsp;&nbsp;&nbsp;3 &nbsp;&nbsp;&nbsp;&nbsp;4 &nbsp;&nbsp;&nbsp;&nbsp;5 &nbsp;&nbsp;&nbsp;&nbsp;6 &nbsp;&nbsp;&nbsp;&nbsp;7 &nbsp;&nbsp;&nbsp;&nbsp;8

&nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;2 &nbsp;&nbsp;&nbsp;&nbsp;3 &nbsp;&nbsp;&nbsp;&nbsp;5 &nbsp;&nbsp;&nbsp;&nbsp;8 &nbsp;&nbsp;&nbsp;13 &nbsp;&nbsp;&nbsp;21</p>

<p>

&nbsp;

inicial 1

final 12

mientras (inicial < 72)

&nbsp;&nbsp;desde inicial hasta inicial+11 despliega i

&nbsp;&nbsp;desde inicial hasta inicial+11 despliega número de Fibonacci

&nbsp;&nbsp;despliega línea en blanco

&nbsp;&nbsp;inicial = inicial + 12</p>

<p>

&nbsp;

<b>Sesión 19 (martes 4/mayo/2021): "tip" para retos de ciclos; desbordamiento</b>

&nbsp;&nbsp;&nbsp;- repaso de los retos

&nbsp;&nbsp;&nbsp;- desbordamiento

&nbsp;&nbsp;&nbsp;- tip para ciclos anidados

&nbsp;&nbsp;&nbsp;- tip para espacios para presentación tipo pirámide

&nbsp;&nbsp;&nbsp;- sugerencia para trabajo final: juego de la hidra

&nbsp;&nbsp;&nbsp;-&nbsp;¿cómo Pixar recuperó Toy Story 2? (vídeo)

&nbsp;&nbsp;&nbsp;- la hidra infinitas cabezas... (vídeo)

&nbsp;&nbsp;&nbsp;- entregas de retos condicionales y Code Studio, conforme a calendario (se ajustaron las fechas)

// declaración de contadores solo para el for

// &nbsp;&nbsp;(algunos compiladores lo permiten)

for (int i=1; i<=n; i++)

&nbsp;&nbsp;&nbsp;print("hola");</p>

<p>

&nbsp;

// ciclos seguidos

int i;

for (i=1; i<=n; i++)

&nbsp;&nbsp;&nbsp;print("hola");</p>

<p>

for (i=1; i<=m; i++)

&nbsp;&nbsp;&nbsp;print("mundo");</p>

<p>

// ciclos anidados. Usar dos variables distintas para controlar el ciclo

for (i=1; i<=n; i++) {

&nbsp;&nbsp;&nbsp;print("hola");

&nbsp;&nbsp;&nbsp;for (j=1; j<=m; j++)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("mundo");

}</p>

<p>

&nbsp;

// cuidado en donde poner las instrucciones

suma = 0

for... {

&nbsp;&nbsp;suma = suma + i

&nbsp;&nbsp;despliega suma

}</p>

<p>

suma = 0

for... {

&nbsp;&nbsp;suma = suma + i

}

despliega suma</p>

<p>

&nbsp;

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++) {

&nbsp;&nbsp;// calcular número de espacios en blanco al inicio

&nbsp;&nbsp;for (i = 1; i <= n; i++) printf(" ");

&nbsp;&nbsp;// en un ciclo desplegar los números

&nbsp;&nbsp;printf("%4d", variable); &nbsp;// 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++) {

&nbsp;&nbsp;// calcular la posicion del número

&nbsp;&nbsp;gotoxy(x,y);

&nbsp;&nbsp;printf("%4d", variable); &nbsp;// manejar dentro de %d el espacio requerido para cada número</p>

<p>

&nbsp;

<b>Sesión 18 (jueves 29/abril/2021): segundo ejemplo de ciclos</b>

&nbsp;&nbsp;&nbsp;- ejemplo de ciclo con promedio de varias calificaciones

&nbsp;&nbsp;&nbsp;- promedio n datos

&nbsp;&nbsp;&nbsp;- promedio de n datos sin validar

&nbsp;&nbsp;&nbsp;- 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>

&nbsp;&nbsp;&nbsp;- introducción a ciclos&nbsp;

&nbsp;&nbsp;&nbsp;- reto II-8 programado con ciclo

&nbsp;&nbsp;&nbsp;- introducción a deuda técnica

&nbsp;&nbsp;&nbsp;- condicionales reto II-8 oferta DVD versión2 (con ciclos)

&nbsp;&nbsp;&nbsp;- 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)

&nbsp;&nbsp;&nbsp;instrucción 1

&nbsp;&nbsp;&nbsp;instrucción 2

&nbsp;&nbsp;&nbsp;...

termina mientras

después del ciclo</p>

<p>

&nbsp;

// lógica de un do-while

antes del ciclo

repite

&nbsp;&nbsp;&nbsp;instrucción 1

&nbsp;&nbsp;&nbsp;instrucción 2

&nbsp;&nbsp;&nbsp;...

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)

&nbsp;&nbsp;&nbsp;leer precio &nbsp;

&nbsp;&nbsp;&nbsp;si (precio > mayor) mayor=precio

&nbsp;&nbsp;&nbsp;total = total + precio

&nbsp;&nbsp;&nbsp;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>

&nbsp;

<b>Sesión 16 (jueves 22/abril/2021): repaso, reto de principio a fin</b>

&nbsp;&nbsp;&nbsp;- reto de principio a fin

&nbsp;&nbsp;&nbsp;- condicionales reto II-8 oferta DVD

<b>Proceso de revisión:</b></p>

<p>

1.- Versión inicial al revisor (Word)

&nbsp;&nbsp;&nbsp;(con copia al maestro)

&nbsp;&nbsp;&nbsp;Retos condicionales: 20 de abril (pares) ó 22 de abril (nones)</p>

<p>

2.- El tester manda comentarios al compañero (Word comentado)

&nbsp;&nbsp;&nbsp;(con copia al maestro)

&nbsp;&nbsp;&nbsp;Retos condicionales: 26 de abril (todos)</p>

<p>

3.- Versión mejorada al revisor (Word comentado + Word mejorado)

&nbsp;&nbsp;&nbsp;(con copia al maestro)

&nbsp;&nbsp;&nbsp;Retos condicionales: 28 de abril (todos)</p>

<p>

<b>Sesión 15 (martes 20/abril/2021): dudas de retos y validaciones</b>

&nbsp;&nbsp;&nbsp;- dudas de retos

&nbsp;&nbsp;&nbsp;- validaciones

&nbsp;&nbsp;&nbsp;- programa con validaciones (triangulo_3_lados v2)

<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; &nbsp;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 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0

martes &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8

miércoles &nbsp;&nbsp;&nbsp;&nbsp;10

jueves &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10

viernes &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12

sábado &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10

domingo &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8</p>

<p>

Horas dobles: &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;7

Horas triples: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3

Prima dominical: &nbsp;&nbsp;1</p>

<p>

Sueldo normal: &nbsp; &nbsp;&nbsp;&nbsp;1400 (sueldo diario * 7 días)

Inasistencias &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 (sueldo diario * 0 * 7/6)

Horas dobles: &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;350 (sueldo por hora * 7 * 2)

Horas triples: &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;225 (sueldo por hora * 3 * 3)

Prima dominicial: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50 (25% del sueldo diario)

---------------------

Total bruto: &nbsp;&nbsp;&nbsp;2025 (antes de impuestos)</p>

<p>

Notas sobre el cálculo:

<p>

&nbsp;

<b>Fragmento de pseudocódigo</b>

entero h1, h2, h3, h4, h5, h6, h7; &nbsp;&nbsp;&nbsp;// horas trabajadas por día

entero hrsdobles=0, hrstriples=0;

entero diasextras = 0;</p>

<p>

si (h1 > 8)

&nbsp;&nbsp;hrssextras = h1 - 8

&nbsp;&nbsp;diasextras = diasextras + 1

&nbsp;&nbsp;si (hrsextras > 3)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hrsdobles = hrsdobles + 3

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hrstriples = hrstriples + (hrsextras - 3)

&nbsp;&nbsp;en caso contrario

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hrsdobles = hrsdobles + hrsextra</p>

<p>

si (h4 > 8)

&nbsp;&nbsp;diasextras = diasextras + 1

&nbsp;&nbsp;hrssextras = h4 - 8

&nbsp;&nbsp;si (diasextras > 3)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hrstriples = hrstriples + hrsextras

&nbsp;&nbsp;en caso contrario

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;si (hrsextras > 3)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hrsdobles = hrsdobles + 3

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hrstriples = hrstriples + (hrsextras - 3)

&nbsp;&nbsp;en caso contrario

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hrsdobles = hrsdobles + hrsextra</p>

<p>

&nbsp;

<b>Sesión 13 (jueves 15/abril/2021): ejercicios de condicionales</b>

&nbsp;&nbsp;&nbsp;- tipo char

&nbsp;&nbsp;&nbsp;- instrucción getch&nbsp;

&nbsp;&nbsp;&nbsp;- números aleatorios

<b>Tema 1: tipo char</b>

&nbsp;la A equivale al 65 conforme al código ASCII</p>

<p>

&nbsp;&nbsp;&nbsp;0 &nbsp;1 &nbsp;&nbsp;0 &nbsp;0 &nbsp;0 &nbsp;0 &nbsp;0 &nbsp;1 &nbsp;&nbsp;sistema binario

&nbsp;_ &nbsp;

&nbsp;128 64 &nbsp;32 16 08 04 02 01</p>

<p>

&nbsp;&nbsp;&nbsp;0 &nbsp;&nbsp;6 &nbsp;&nbsp;5 &nbsp;&nbsp;sistema decimal

&nbsp;_ &nbsp; &nbsp;

&nbsp;100 &nbsp;10 &nbsp;01</p>

<p>

&nbsp;printf("%c", m); &nbsp;&nbsp;&nbsp;// se desplegaría la A mayúscula

&nbsp;printf("%d", m); &nbsp;&nbsp;&nbsp;// 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

&nbsp;&nbsp;char m;

&nbsp;&nbsp;m = getch();

&nbsp;&nbsp;printf("*");

c) calculadoras

d) juegos &nbsp;&nbsp;

&nbsp;&nbsp;char m;

&nbsp;&nbsp;m = getch();

&nbsp;&nbsp;// si el usuario escogió sol

&nbsp;&nbsp;if (m = 'S' || m = 's')

e) menús

f) otras</p>

<p>

&nbsp;

<b>Tema 3: números aleatorios</b>

#include <stdio.h>

#include <time.h>

main() {

&nbsp;int aleatorio, volado, dado;

&nbsp;srand(time(NULL));

&nbsp;aleatorio = rand();

&nbsp;printf("%d", aleatorio);

&nbsp;volado = aleatorio % 2;

&nbsp;dado = aleatorio % 6 + 1;

}</p>

<p>

&nbsp;

<b>Sesión 12 (martes 13/abril/2021): condicionales y tabla de pruebas</b>

&nbsp;&nbsp;&nbsp;- ejercicio sobre operadores

&nbsp;&nbsp;&nbsp;- ejercicio sobre condicionales

&nbsp;&nbsp;&nbsp;- 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.

&nbsp;&nbsp;&nbsp;- concepto de tabla de pruebas

&nbsp;&nbsp;&nbsp;- para genios (presentación)

<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)

&nbsp;&nbsp;&nbsp; (revisión de pares a nivel usuario, si fuera posible)

5.- Flowgorithm (indispensable en primer y segundo departamental)

6.- Codificación (indispensable)

&nbsp;&nbsp;&nbsp; (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 &nbsp;> &nbsp;80

10, 90, 45 &nbsp;> &nbsp;90

85, 30, 35 &nbsp;> &nbsp;85</p>

<p>

<b>Tabla de propuesta mejorada:</b>

80, 20, 20 &nbsp;> &nbsp;80

10, 90, 45 &nbsp;> &nbsp;90

85, 30, 35 &nbsp;> &nbsp;85

90, 90, 80 &nbsp;> &nbsp;90

90, 80, 90 &nbsp;> &nbsp;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>

&nbsp;mayor = x;

&nbsp;if (y > mayor) mayor = y;

&nbsp;if (z > mayor) mayor = z;

&nbsp;cout<<"El promedio es: "<<mayor;</p>

<p>

&nbsp;

<b>Sesión 11 (martes 30/marzo/2021): ejercicio de condicionales</b>

&nbsp;&nbsp;&nbsp;- video sobre código binario

&nbsp;&nbsp;&nbsp;- video para empezar a programar

&nbsp;&nbsp;&nbsp;- síntesis de qué es saber programar

&nbsp;&nbsp;&nbsp;- ejercicio de revisión de tester sobre algoritmos con condicionales

&nbsp;&nbsp;&nbsp;- videos sobre código binario y para empezar a programar

&nbsp;&nbsp;&nbsp;- esquema de que es saber programar

&nbsp;&nbsp;&nbsp;- ejercicio de revisión de tester sobre algoritmos con condicionales

<p>

<b>Sesión 10 (jueves 25/marzo/2021): introducción a condicionales</b>

&nbsp;&nbsp;&nbsp;- concepto de condicional

&nbsp;&nbsp;&nbsp;- concepto de tabla de pruebas

<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)

&nbsp;&nbsp;....

en caso contrario

&nbsp;&nbsp;....

termina</p>

<p>

Ejemplo:

si (promedio >= 8.0)

&nbsp;&nbsp;despliega "Aprobado"

en caso contrario

&nbsp;&nbsp;despliega "Reprobado"

termina</p>

<p>

&nbsp;

<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)

&nbsp;&nbsp;despliega "Aprobado"

termina

si (promedio < 6.0)

&nbsp;&nbsp;despliega "Reprobado"

termina</p>

<p>

&nbsp;

// en ocasiones sí es correcto poner dos condiciones si no son excluyentes

si (promedio < 6.0)

&nbsp;&nbsp;despliega "Curso de repaso"

termina

si (promedio >= 9.5)

&nbsp;&nbsp;despliega "Libro de obsequio"

termina</p>

<p>

&nbsp;

<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)

&nbsp;despliega "exento"

termina</p>

<p>

<b>Sesión 09 (martes 23/marzo/2021): "tips" sobre codificación</b>

&nbsp;- &nbsp;Tips sobre codificación

#include <stdio.h>

main() {</p>

<p>

&nbsp;/* ¿Por qué al desplegar no saca decimales */

&nbsp;int x = 6, y = 9, z = 5;

&nbsp;float promedio;

&nbsp;promedio = (x + y + z) / 3;

&nbsp;printf("Promedio de 6 9 5 es %f", promedio);

&nbsp;printf("\n\n");</p>

<p>

&nbsp;/* ¿Por qué aparece 3 + 3 + 3 = 10 */

&nbsp;float reparto = 10;

&nbsp;float a=reparto/3, b=reparto/3, c=reparto/3, d;

&nbsp;d = a + b + c;

&nbsp;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

&nbsp;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

&nbsp;#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

&nbsp;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. &nbsp;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:

&nbsp;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). &nbsp;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? &nbsp;%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

&nbsp;float x = 5.1;

&nbsp;int y;

&nbsp;y = x; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// el resultado es impredecible

&nbsp;y = int(x); &nbsp;// convierte x a entero, descartando los decimales</p>

<p>

Comentarios

&nbsp;/* comentario de

&nbsp;&nbsp;&nbsp;&nbsp;más de una línea */

&nbsp;El comentario empleando /* */ no puede anidarse. Se tiene que cerrar.

&nbsp;// 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. &nbsp;&nbsp;x = y + w * m; &nbsp;// primero se hace la multiplicación).</p>

<p>

Para los programas, que se entregarán el 30 de marzo de 2021.

&nbsp;Al inicio poner como comentario el requerimiento, autor, fecha e IDE.

&nbsp;También se someterá a revisión de pares.

&nbsp;La revisión de pares será hasta el día 13 de abril.

&nbsp;La entrega definitiva será el 15 de abril.</p>

<p>

&nbsp;

<b>Sesión 08 (jueves 18/marzo/2021): explotación de operadores y codificación</b>

&nbsp;- &nbsp;Explotación de operadores

&nbsp;- Codificación de algoritmos

&nbsp;- Lenguajes de programación más empleados.

&nbsp;&nbsp;&nbsp;- ver notas líneas adelante y&nbsp;

&nbsp;&nbsp;&nbsp;- 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>.

<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() {

&nbsp;float a, b, c, semi, superficie;

&nbsp;printf("=== Programa para calcular el área de un triángulo a partir de sus tres lados ===\n\n");

&nbsp;printf("Proporcione el valor de los tres lados separados por un espacio: ");

&nbsp;scanf("%f %f %f", &a, &b, &c);

&nbsp;semi = (a + b + c) / 2;

&nbsp;superficie = sqrt(semi * (semi-a) * (semi-b) * (semi-c));

&nbsp;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>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- se hizo una revisión aleatoria de los trabajos entregados y labores de tester

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- se presentó la matriz de autoevaluación.

<b>+ Notas:</b>

&nbsp;&nbsp;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.

&nbsp;&nbsp;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.

&nbsp;&nbsp;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>

&nbsp;</p>

<p>

<b>Sesión 06 (jueves 11/marzo/2021): construyendo soluciones con Flowgorithm</b>

&nbsp;&nbsp;&nbsp;&nbsp;- Introducción a pseudocódigo

&nbsp;&nbsp;&nbsp;&nbsp;- reglas de prioridad

&nbsp;&nbsp;&nbsp;&nbsp;- tipos de errores

&nbsp;&nbsp;&nbsp;&nbsp;- buenas prácticas

<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 ===

&nbsp;&nbsp;&nbsp;(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>

&nbsp;

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>

<p>

<b>Tipos de errores.</b>

&nbsp;a) léxicos.- no reconoce el elemento (la detecta el compilador)

&nbsp;b) sintácticos.- la sentencia está mal construida (la detecta el compilador en la mayoría de las veces)

&nbsp;c) lógicos.- compila porque es consistente desde el punto del compilador, pero no da el resultado</p>

<p>

<b>Reglas de prioridad</b>

&nbsp;Se hacen primero los operadores de mayor prioridad.

&nbsp;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>

&nbsp;

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

<p>

&nbsp;

<b>Sesión 05 (martes 9/marzo/2021): introducción a Flowgorithm</b>

&nbsp;&nbsp;&nbsp;&nbsp;- Introducción a Flowgorithm

<p>

&nbsp;

<b>Sesión 04 (jueves 4/marzo/2021): revisión de trabajos sobre requerimientos y pantallas</b>

&nbsp;&nbsp;&nbsp;&nbsp;- Revisión de ejemplos al azar sobre los trabajos de requerimientos y diseño de pantallas

&nbsp;&nbsp;&nbsp;&nbsp;- Explicación sobre la coevaluación. Ver nota líneas adelante

&nbsp;&nbsp;&nbsp;Fecha límite para le revisión: 8 de marzo.

&nbsp;&nbsp;&nbsp;Fecha límite para el trabajo mejorado:&nbsp;11 de marzo.

&nbsp;&nbsp;&nbsp;&nbsp;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>

&nbsp;

<b>Sesión 03 (martes 2/marzo/2021): plataforma stdio code</b></p>

<p>

&nbsp;&nbsp;&nbsp;&nbsp;- Plataforma studio code para iniciar en programación (incluyendo estimación de tiempo de realización)

&nbsp;&nbsp;&nbsp;&nbsp;- Habilidades a construir en un curso inicial de programación (ver nota líneas adelante)

&nbsp;&nbsp;&nbsp;sitio web <a href="https://studio.code.org/courses">https://studio.code.org/courses</a> (curso exprés)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boletas pares.- ejercicios pares para el primer departamental o un avance del 60%

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boletas nones.- ejercicios nones para el primer departamental o un avance del 60%

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;El resto para el segundo departamental.</p>

<p>

&nbsp;

<b>Sesión 02 (jueves 25/feb/2021): requerimiento y visión de usuario</b></p>

<p>

&nbsp;&nbsp;&nbsp;&nbsp;- Capítulo I: Entendiendo la visión del usuario

&nbsp;&nbsp;&nbsp;1. Entendiendo la visión del usuario.

&nbsp;&nbsp;&nbsp;Anexo 1 Verificando el conocimiento

&nbsp;&nbsp;&nbsp;Boletas pares: retos pares

&nbsp;&nbsp;&nbsp;Boletas nones: retos nones.

&nbsp;&nbsp;&nbsp;En un solo archivo de Word o PDF.

&nbsp;&nbsp;&nbsp;Fecha de entrega: 2 de marzo de 2021.</p>

<p>

&nbsp;

<b>Sesión 01 (martes 23/feb/2021): panorama general del curso</b></p>

<p>

&nbsp;&nbsp;&nbsp;&nbsp;- Esquema general del curso

&nbsp;&nbsp;&nbsp;&nbsp;- Proyecto Megasinapsis

&nbsp;&nbsp;&nbsp;&nbsp;- El Problema del Caballo, del Anexo-1.

&nbsp;&nbsp;&nbsp;01 Esquema general del curso

&nbsp;&nbsp;&nbsp;Anexo 1 Verificando el conocimiento

&nbsp;&nbsp;&nbsp;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.

&nbsp;&nbsp;&nbsp;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.

&nbsp;</p>

Attachments