3.2.2 Condicionales – Ejemplos

Ejemplos de solución para los ejercicios de la sección Tareas y algunas evaluaciones. Desarrolla los conceptos hasta la Unidad 03 Condicionales.

3.2.2 Ejercicios y Tarea Algoritmos básicos y condicionales


1 Ejercicio 6 interruptores para encender un foco

Ejemplo combinado de las varias formas de resolver el ejercicio.

Supone que el foco al inicio no está encendido (0) .

Instrucciones en Python:

# Ejercicio 6. Interruptores y un foco

# INGRESO
a = int(input('interruptor a: '))
b = int(input('interruptor b: '))
c = int(input('interruptor c: '))

# PROCEDIMIENTO
encendido = 0
if (a==1):
    if (b==1 or c ==1):
        encendido = 1
else:
    if (b==1):
        if (c==1):
            encendido = 1
# SALIDA
print('estado del foco: ',encendido)

Escriba otras propuestas de solución.


2. Ejercicio 12 Bloque rectangular pasa por orificio en pared.

 

Bloque y circulo
Bloque y circulo
# Problema de la caja y el orificio en la pared
import numpy as np

# INGRESO
a = float(input("lado a: "))
b = float(input('lado b: '))
c = float(input('lado c: '))
d = float(input('lado d: '))

# PROCEDIMIENTO
diagonal1 = np.sqrt(a**2 + c**2)
diagonal2 = np.sqrt(a*a + b*b)
diagonal3 = np.sqrt(b*b + c*c)

pasa = 0
if (diagonal1<d):
    pasa = 1
if (diagonal2<d):
    pasa = 1
if (diagonal3<d):
    pasa = 1

# SALIDA
print(pasa)

Tarea: Realizar diagrama de Flujo. Desarrollado en Pizarra durante la clase


3 ** 1Eva_IT2007_T1 Tiro al blanco con dardos

Desarrollado para la primera semana de clases.
Considere solo la parte de condicionales, a partir del ingreso de las coordenadas x,y donde cae el dardo.

intrucciones en Python:

# Un dardo en tablero
# 1ra Evaluación I Término 2007. Tema 1
import numpy as np

# INGRESO
x = float(input('coordenada x: '))
y = float(input('coordenada y: '))

# PROCEDIMIENTO
distancia = np.sqrt(x**2 + y**2)
premio = 0
if (distancia <= 10):
    premio = 50
if (distancia>10 and distancia<=40):
    premio = 40
if (distancia>40 and distancia<=80):
    premio = 30

# SALIDA
print('el premio obtenido es: ', premio)

4 ** 1Eva_IT2005_T4 Lanza penales

Desarrollado para un solo penal.
Dado el sector del arco [1,6] donde un jugador lanza el balón y el sector donde el arquero protege, determinar:

a) si hubo gol (1 ó 0)

b) si hubo gol, indicar si fué por izquierda (1), centro(2), derecha(3)

# analizar un penal
# Parcial I Término 2005. Tema 4.

# INGRESO
jugador = int(input('sector del jugador:'))
arquero = int(input('sector del arquero:'))

# PROCEDIMIENTO
seccion = 0
if not(jugador==arquero):
    gol = 1
    if (jugador==3 or jugador==4):
        seccion = 1
    if (jugador==2 or jugador==5):
        seccion = 2
    if (jugador== 1 or jugador==6):
        seccion = 3
else:
    gol = 0

# SALIDA
print('Hubo gol: ',gol)
print('seccion: ', seccion)

 

3.5.3 Bases Numéricas – Ejercicios

Sistemas de Numeración – Bases Numéricas

1) 1Eva_IIT2008_T1 Odómetro OCTAL

Solución propuesta: sol_py

2) 1Eva_IIT2003_T1 Cambiar Decimal a Octal

Solución propuesta: sol_py

3) 1Eva_IT2005_T3 Arreglo aleatorio binario a decimal

Solución propuesta: sol_py


Actividades independientes

1) 1Eva_IT2001_T6 Piloto y copiloto para nave

2) 1Eva_IIT2002_T3 Conjetura de Ullman

3) 1Eva_IIT2008_T4 Area del polígono convexo por triángulos

 

3.5.2 Decimal a Binario

Algoritmo de Decimal a Binario

En este caso hay que analizar descomponer el número en la nueva base numérica, para luego trabajar con los residuos ubicándolos en desde la posición menos significativa a la más significativa.

Ejemplo 01

Para convertir el número Decimal 5 a Binario, se realizan las siguientes operaciones:

Observe la diferencia en las operaciones para el divisor y la base, las operaciones son similares a las del ejercicio anterior.

Por lo que el algoritmo no debe representar mayor inconveniente al ser una variante del ejemplo anterior.

Algoritmo Decimal a Binario

 

El ejemplo en seudo-código:

Proceso DecimalBinario
	Leer decimal
	binario ← 0
	i ← 0
	Mientras decimal > 0
		digito ← decimal mod 2
		decimal ← trunc(decimal/2)
		binario ← binario+digito*10^i
		i ← i + 1
	FinMientras
	Escribir binario
FinProceso

Ejercicios:

  1. Realizar los algoritmos Binario a Decimal y Decimal a Binario usando el lazo Repita-Hasta.
  2. Crear un algoritmo para convertir un número de base numérica x a base y.
    Comprobar el algoritmo usando los valores: 23x númeroy.
    Sugerencia, convierta el número de la base x primero a decimal y luego transforme el resultado a la siguiente base numérica y.

 

3.5.1 Binario a Decimal

Base Numérica Binaria

Los números binarios se conforman con los símbolos 0 y 1, y con todos los dígitos necesarios para representar cualquier número.

Para representar números superiores a 1, se aplica el método de formación de números decimales combinando ordenadamente los símbolos. Se repiten las combinaciones de dígitos anteriores y se le añade un dígito para continuar la numeración

Decimal Binaria
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001
10 1010
11 1011
12 1100

En el sistema binario se utiliza la ponderación por posición de dígito en la misma forma que en la numeración decimal, por ejemplo:

  • La posición más a la derecha es menos significativa y de menor ponderación o peso: 20
  • La siguiente posición hacia la izquierda tiene un peso equivalente a: 21
  • La siguiente posición a la izquierda usa un equivalente a: 23
  • Y así sucesivamente.

Se puede encontrar el valor decimal de un número binario cualquiera multiplicando el digito correspondiente por el “peso” que tiene y sumando los resultados parciales.

Para mayor información de numeración binaria, consultar:

Capítulo III Otros sistemas de numeración. Baldor, Aurelio (1974). Aritmética de Baldor, Guatemala. Cultural Centroamericana S.A.


Ejemplo 01

Para convertir el número binario 101 a decimal, se realizan las siguientes operaciones:

Algoritmo de Binario a Decimal

Para realizar el algoritmo, se tiene que separar cada dígito del número binario, y realizar la operación de ponderación para acumularla en el resultado final.

En la ponderación se usará un contador de posición para ser usado como el exponente de la base 2.

El algoritmo en diagrama de flujo se representará como:

 

3.5 Bases Numéricas Introducción

A través del tiempo la humanidad adoptado diferentes formas de numeración, tanto en símbolos como bases. Las formas simbólicas de numeración más conocidas son la arábiga (0, 1, 2, 3,… 9) usada en estos días, y la romana (I, II, III, IV, V, VI,…X,…).

El uso de computadores nos obliga a revisar el tema de sistemas de numeración, debido a que internamente opera en numeración binaria basada en dos símbolos representados como 0 y 1. La electrónica digital, que permite construir una computadora, trabaja sobre dos estados del circuito: abierto o cerrado, verdadero o falso, 1 o 0.

Es común ver en las etiquetas de un producto el denominado código de barras que facilita el trabajo de identificar el producto vendido.

El código de barras permite usar un dispositivo para “leer” la representación binaria del producto, cada barra de color blanco o negro representa un dígito binario del número. Para estos casos es necesario disponer de un algoritmo que permita leer y convertir un código de producto de binario a decimal, así como el decimal a binario en el caso de la impresión o escritura del código de barras.

Base Numérica Decimal

La base numérica 10 nos resulta muy natural y no requiere mucha descripción. Se basa en diez símbolos conocidos como numeración arábiga: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Para números superiores a 9 se añade a la izquierda un dígito y se los combina ordenadamente: 10, 11, 12, …, 19, 20, 21, …

Al aplicar el mismo método de formación de números usando otra base numérica se obtiene resultados simulares como se muestra en la siguiente sección.

Para mayor información de numeración decimal, consultar:

Capítulo II Numeración. Baldor, Aurelio (1974). Aritmética de Baldor, Guatemala. Cultural Centroamericana S.A.

3.4.1 Aleatorios – Ejercicios

Números Aleatorios, random

Ejemplos con soluciones propuestas

1) 1Eva_IIT2005_T4 Juego escaleras y serpientes

Solución propuesta: sol_py,

2) 1Eva_IIT2007_T1 Hormiga busca arroz

Solución Propuesta: sol_py,

3) 1Eva_IIT2012_T3 Hundir el barco enemigo

Solución propuesta: sol_py

4) 1Eva_IIT2003_T4 Juego con icosaedros

Solución propuesta: sol_py


Algoritmos, Tipos de datos y variables numéricas (entero, real)

1) 1Eva_IT2007_T1 Tiro al blanco con dardos

Solución propuesta: sol_py

2) 1Eva_IIT2004_T3 Estimar π por Montecarlo

Solucion propuesta: sol_py

3) 1Eva_IT2008_T3 Simular precio de petroleo

Solución propuesta: sol_py

4) 1Eva_IT2012_T2 Juego de carreras con dados

Solución propuesta: sol_py


Actividades independientes

1) 1Eva_IT2004_T1 Aleatorios en región sombreada

2) 1Eva_IIT2004_T2 Apuestas a números con dados

3) 1Eva_IT2007_T2 Convertir decimal a hexadecimal

4) 3Eva_IT2003_T5 Calcular área de f(x) por Montecarlo

3.4 Aleatorios

Para simular un número de azar se recurre al concepto de números aleatorios. Por ejemplo el obtenido al lanzar un dado.

Un número aleatorio se define como un número real cualquiera en el intervalo [0,1)


En Python se requiere usar la librería random que se escribe en el bloque de inicio.

import random as rnd

la forma más básica de generar un número aleatorio en Python es:

>>> import random as rnd
>>> rnd.random()
0.28033599517631624
>>> rnd.random()
0.07239272147532794
>>> 

Para el desarrollo de los problemas iniciales, se mantendrá la forma simple de la instrucción, manteniendo el concepto de construcción de un número aleatorio a partir de un número real [0,1)



Ejemplo

Para simular un dado de seis caras, se utiliza el siguiente proceso:

dado ← entero(aleatorio*6)+1

que se contruye siguiendo los pasos:

1. Un número aleatorio

>>> import random as rnd
>>> aleatorio = rnd.random()
>>> aleatorio
0.9531257439341784

2. Se debe convertir del intervalo [0,1) al intervalo correspondiente.
Como el dado tiene 6 caras, se multiplica el aleatorio por 6, obteniendo un real de [0,6). No se incluye el 6.

>>> dado = aleatorio*6
>>> dado
5.7187544636050704

3. Sin embargo, el aleatorio de un dado es un número entero

Se extrae solo la parte entera para obtener un número entero [0,5]

>>> dado = int(aleatorio*6)
>>> dado
5

4. – Para que el resultado sea [1,6], se desplaza el intervalo a la derecha al  sumarle 1.

>>> dado = int(aleatorio*6)+1
>>> dado
6

Con lo que la fórmula final se indica en el ejemplo, notando que cada vez que se ejecuta, se obtendrá un número que simula el lanzamiento de un dado.

>>> dado = int(rnd.random()*6)+1
>>> dado
1
>>> dado = int(rnd.random()*6)+1
>>> dado
3
>>> 

Referencia: Elementos esenciales para programación: Algoritmos y Estructuras de Datos Latin Project. Primera Edición 2014. Sección 4.42. p.86


Ejercicio 1

1Eva_IT2008_T3 Simular precio de petroleo

Realice un algoritmo para simular el precio del barril de petróleo durante un mes de 30 días, suponiendo que son valores enteros que fluctúan en forma aleatoria entre $ 130 y $ 150 y se obtenga las siguientes respuestas:

a) El promedio del precio del petróleo.
b) ¿Cuál fue el día en el que estuvo más barato el barril de petróleo?

Desarrollo

Para iniciar el algoritmo, se puede considerar como variable de entrada los días del mes, o asignarles directamente 30 días.

La primera aproximación al problema para responder el literal a) consiste en generar números aleatorios en el rango [130, 150] y acumular sus valores para el promedio.

Será necesario disponer de un contador para controlar el número de veces que se generan los precios de forma aleatoria en el lazo de repetición.

Una de las formas de resolver el problema es con un lazo repita hasta, cuyo diagrama de flujo se muestra a continuación:

# Ejercicio 1. Precio del petroleo
import random as rnd

# Ingreso
diasmes =  int(input('dias que tiene el mes: '))

# Procedimiento
total = 0
dia = 0
rango = (150-130)+1
while not(dia>=diasmes):
    precio = int(rnd.random()*rango) + 130
    total = total + precio
    dia = dia + 1
promedio = total/diasmes

# Salida
print(promedio)
dias que tiene el mes: 30
137.56666666666666
>>> 

Para la pregunta b) es necesario analizar la manera de encontrar el día con el precio más barato.

En este caso se utilizará el algoritmo para búsqueda del menor, que consiste en iniciar con el supuesto para el valor menor de precio y día, probando contra el precio de cada día y de ser necesario se cambian los valores menores.

Es un similar al caso de usar una hipótesis y realizar luego las pruebas.

Como supuesto, se escogerá el valor máximo de precio con el objetivo que el primer precio que aparece sustituye los valores.

# Ejercicio 1. Precio del petroleo
import random as rnd

# Ingreso
diasmes =  int(input('dias que tiene el mes: '))

# Procedimiento
total = 0
dia = 0
rango = (150-130)+1
diamenor = 0
preciomenor = 150
while not(dia>=diasmes):
    precio = int(rnd.random()*rango) + 130
    total = total + precio
    if (precio<preciomenor):
        diamenor = dia
        preciomenor = precio
    dia = dia + 1
promedio = total/diasmes

# Salida
print(promedio)
print(diamenor)
dias que tiene el mes: 30
 140.06666666666666
 22
 >>>

Otra forma de realizar el algoritmo consiste en cambiar la perspectiva del lazo repita- hasta por un mientras repita. Para el cambio será necesario solo negar la expresión usada en el lazo repita-hasta en días<diasmes.

3.3.3 Lazos – Ejercicios y Tarea

Actividades independientes

1) 1Eva_IT2003_T2 Verificar una inducción matemática

2) 1Eva_IT2014_T1 Cuadrado de Cinco

3) 1Eva_IIT2013_T1 Verificar Bisiesto

4) 1Eva_IT2013_T1 Primos gemelos

5) 1Eva_IT2004_T2 Verificar ISBN

6) 1Eva_IT2014_T2 Verificar EAN

7) 2Eva_IT2008_T2 Validar cédula ecuatoriana


Tarea – Ejercicios

Para cada ejercicio, describa un algoritmo en seudo-código, dibuje un diagrama de flujo y realice dos pruebas de escritorio.

1. Un bote tiene capacidad de llevar X kilos. Se tiene una lista con los pesos en kilos ordenados en forma creciente de las personas que desean subir al bote.
Determine cuantas personas puede llevar el bote.

Bote paseo acuatico
Bote paseo control de carga maxima

2. Repita la lectura de un número entero hasta que sea positivo, entonces, determine cuantas cifras tiene. El método que debe usar es contar cuantas veces es divisible para 10.

 

3. Dado un número entero positivo, determine la suma de sus dígitos.

Ejemplo: 7258 -> 7+2+5+8 = 22

4. Dado un número entero positivo, muéstrelo con las dígitos en orden opuesto.

Ejemplo. escribe 7258 y el resultado será 8527

5. Dados dos números enteros muestre su MCD y su MCM.

Ejemplo. escribe 25 y 20. obtiene como resultado 5 y 100

Nota: si a, b son los datos y MCM es su mínimo común múltiplo y MCD es su máximo común divisor, se tiene que MCD * MCM = a * b

6. Dado un número entero positivo determine su equivalente en el sistema binario con el siguiente procedimiento:

– divida el número para 2 sucesivamente hasta que el cociente sea 0.

– Entonces, los residuos que se obtienen son los dígitos del número binario, pero en orden opuesto.

– Forme el número con estos residuos mientras los obtiene y muestre su valor

7. Modifique el algoritmo anterior para invertir el número obtenido y mostrar el número binario con los dígitos en la posición correcta.

8. El siguiente procedimiento genera una secuencia de números enteros:

a) Dado un número entero

b) Sume los cuadrados de los dígitos del número y forme un nuevo número con el residuo entre la suma y 9

c) Repita sucesivamente el paso b) con cada nuevo número obtenido, hasta que el resultados sea el número 1, o hasta que se hayan realizado mas de 10 repeticiones.

d) Si se obtuvo el resultado 1, muestre el número inicial, la cantidad de repeticiones realizadas, y el mensaje «número suertudo»

9. Modifique el algoritmo anterior para encontrar los «números suertudos» existentes entre 10 y 99

10. Describa un algoritmo para realizar el control de la anotación de un encuentro de tenis de mesa.

– En este juego intervienen 2 jugadores identificados como 1 y 2 .

– A cada uno se le agrega un punto cada vez que realiza una jugada a su favor si es que tiene el servicio a su favor, si no únicamente pasa el servicio a su favor.

– El juego termina cuando un jugador llega a 15 puntos teniendo por lo menos dos puntos de diferencia con respecto al otro jugador.

– Al inicio debe ingresar el número 1 o 2 indicando cual jugador comienza con el servicio a su favor, y luego sucesivamente ingrese el resultado de cada jugada ( 1 o 2).

– Al terminar debe mostrar un mensaje indicando cuál es el ganador.

11. Encuentre todos los números naturales entre 1 y 100 tales que la suma de sus dígitos de como resultado un numero primo.

Ejemplo : 34: 3+4 = 7 debe mostrar el 34 pues 7 es un número primo

12. Muestre los primeros n números de la secuencia de Fibonacci, siendo n un número entero.

Los términos de la secuencia de Fibonacci son: 1, 1, 2, 3, 5, 8, 13, 21, 34, …

Note que a partir del tercer término cada nuevo término es igual a la suma de los dos anteriores.

13. Repita la lectura de un número entero hasta que sea par. Luego encuentre dos números primos tales que la suma sea igual al número par dado.

14. Dado el radio r de una circunferencia, encuentre el polígono regular de menor número de lados inscrito en la circunferencia, de tal manera que la suma de sus lados difiera de la longitud de la circunferencia en no mas de 0.0001.

Sugerencia: repita los cálculos con polígonos regulares incrementando su número de lados con n = 3, 4, 5, 6,…..

poligonocirculo

 

3.3.2 Lazos – Ejemplos

Estructuras para repetir

Mientras_Repita o Repita_Hasta

1) 1Eva_IIIT2003_T2 Números triangulares

Solución propuesta: sol_py

3) 2daEva_IIT2004_T3 Reciclar vasos

Solucion Propuesta: sol_py

2) 1Eva_IT2001_T5 Verificar divisibilidad para 9

Solución propuesta: sol_py

4) 1Eva_IIT2006_T2 Dígito verificador de cuenta

Solución propuesta:  sol_py

5) 1Eva_IT2010_T2 Número Omirp

Solución propuesta: sol_py

6) 1Eva_IIT2012_T1 Sucesión de Padovan

Solución propuesta: sol_py

7) 1Eva_IT2011_T1 Ahorros de Juan vs Pedro

Solución propuesta: sol_py

8) Eva_IIT2010_T2 Venta de pasajes tren turístico

Solución propuesta: sol_py

9) 1Eva_IIT2002_T4 Cociente de fibonacci

Solución propuesta: sol_py

10) 1Eva_IIT2012_T2 Número camiseta equipo

Solución propuesta: sol_py

11) 1Eva_IIT2005_T2 Negocio piramidal

Solución propuesta: sol_py


Acumuladores y Contadores

1) 1Eva_IT2009_T1 Suma de Serie con signo alternado

Solución propuesta: sol_py

2) 1Eva_IIT2003_T2 Sumar términos de progresión geométrica

Solución propuesta: sol_py

3.3.1 Lazos – Para

En algoritmos es frecuente encontrar lazos controlados por solamente un contador, por lo que, los lazos y el contador se pueden integrar y resumir en una forma de representación conocida como el lazo “Para”.

Usamos un diagrama de flujo para mostrar el concepto con un lazo Mientras-Repita.

El contador i, con valor de inicio, permite el control de operaciones de un bloque mediante el lazo mientras con la expresión i menor o igual que fin.

Luego del bloque de operaciones, se incrementa el valor de i para revisar la condición del lazo y repetir si es necesario.

Integrando las operaciones del contador y el lazo, en un diagrama de flujo se pueden simplificar en una estructura de control conocida como “Para”:

Se puede leer también: “Para los valores de i empezando en inicio, avanzando en pasos de incremento hasta llegar al valor de fin, repita el siguiente bloque de operaciones”.

Para lazos con expresiones de repetir más complejas (i>n y j<k) será más práctico usar las formas repita-hasta o mientras-repita, como se mostrará en la sección de ejemplos.

Referencia: Elementos esenciales para programación: Algoritmos y Estructuras de Datos Latin Project. Primera Edición 2014. Sección 4.2. p.77