3.5.1 Número Binario a Decimal – Algoritmo Básico en Python

[ Binario a Decimal ] [ Ejercicio ] [ Algoritmo ] || [ Decimal a Binario ]
..


1. Binario a Decimal

Referencia Baldor, Aurelio (1974). Capítulo III Otros sistemas de numeración. Aritmética de Baldor, Guatemala. Cultural Centroamericana S.A..https://es.wikipedia.org/wiki/Sistema_binario

Los números binarios se conforman con los símbolos 0 y 1, que se combinan para representar cualquier número. Binario a Decimal ejercicio resuelto
Una etiqueta de un producto en código de barras es la representación binaria del número que identifica el producto.

Para representar números superiores a 1 dígito, se aplica un método semejante al 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:

posición 3 2 1 0
ponderación 23 22 21 20
peso en decimal 8 4 2 1
Número en binario 5(10)=101(2)
=0*8+1*4+0*2+1*1
0 1 0 1
  • 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 dígito correspondiente por el “peso” que tiene y sumando los resultados parciales.

[ Binario a Decimal ] [ Ejercicio ] [ Algoritmo ] || [ Decimal a Binario ]

..


2. Ejercicio: Convertir a decimal el binario 101

Para convertir el número binario 101 a decimal, se realizan las operaciones de ponderación usando los residuos de la división para 10 del número en base 10.

La operación de residuo es la extracción de cada dígito empezando por el menos significativo. cada dígito se pondera por 2i, siendo i la posición del dígito.

[ Binario a Decimal ] [ Ejercicio ] [ Algoritmo ] || [ Decimal a Binario ]

..


3. Algoritmo de Binario a Decimalbinario a decimal diagrama de flujo

Para realizar el algoritmo, se separa cada dígito del número binario, y luego se realiza 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:


Algoritmo en Python

# Binario a Decimal

binario = int(input("número en binario: "))

decimal = 0
i = 0
while (binario>0):
    digito  = binario%10
    binario = int(binario//10)
    decimal = decimal+digito*(2**i)
    i = i+1
# SALIDA
print("en decimal: ",decimal)

con los siguientes resultados:

>>> 
número en binario: 101
en decimal:  5
>>> 
número en binario: 1000
en decimal:  8
>>> 
número en binario: 111
en decimal:  7
>>> 

[ Binario a Decimal ] [ Ejercicio ] [ Algoritmo ] || [ Decimal a Binario ]

3.5 Bases Numéricas en programación – Introducción

Referencia: Van Rossum 15 p105, Rodriguez 5.6.5 p63, Sistemas de numeración

A través del tiempo la humanidad adoptado diferentes formas de numeración, tanto en símbolos como en 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 el computador 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.

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

 

posición 3 2 1 0
ponderación 103 102 101 100
peso en decimal 1000 100 10 1
numero decimal (1492) 1 4 9 2

3.4.1 Números Aleatorios – Ejercicios resueltos en Python

Ejercicios resueltos sobre números aleatorios con simulaciones de juegos de mesa o aleatorios son una herramienta para encontrar una solución a una situación.

Ejercicios resueltos con Números Aleatorios, random()

1Eva_IIT2005_T4 Juego escaleras y serpientes

Solución propuesta: s1Eva_IIT2005_T4 Juego escaleras y serpientes,

1Eva_IIT2007_T1 Hormiga busca arroz

Solución Propuesta: s1Eva_IIT2007_T1 Hormiga busca arroz,

1Eva_IIT2012_T3 Hundir el barco enemigo

Solución propuesta: s1Eva_IIT2012_T3 Hundir el barco enemigo

1Eva_IIT2003_T4 Juego con icosaedros

Solución propuesta: s1Eva_IIT2003_T4 Juego con icosaedros


Ejercicios resueltos de Algoritmos con aleatorios,

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

1Eva_IT2007_T1 Tiro al blanco con dardos

Solución propuesta: s1Eva_IT2007_T1 Tiro al blanco con dardos

1Eva_IIT2004_T3 Estimar π por Montecarlo

Solucion propuesta: s1Eva_IIT2004_T3 Estimar π por Montecarlo

1Eva_IT2008_T3 Simular precio de petroleo

Solución propuesta: s1Eva_IT2008_T3 Simular precio de petroleo

1Eva_IT2012_T2 Juego de carreras con dados

Solución propuesta: s1Eva_IT2012_T2 Juego de carreras con dados


Actividades independientes con números aleatorios

Se proponen algunos ejercicios para desarrollo a partir de lo practicado hasta esta sección.

1Eva_IT2004_T1 Aleatorios en región sombreada

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

1Eva_IIT2004_T2 Apuestas a números con dados

1Eva_IT2007_T2 Convertir decimal a hexadecimal

3.4 Números Aleatorios, al Azar o ramdom con Python

Referencia: Van Rossum 10.6 p85, Rodríguez 5.9 p99, Downey 12.1

Para simular un número de azar se recurre al concepto de números aleatorios, que por ejemplo es el valor obtenido al lanzar un dado para juegos de tablero. Si el dado es estándar, no se puede predecir el valor que saldrá en el dado.

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

La forma básica de generar un número aleatorio en Python es usando la librería random(), que se puede usar con operaciones adicionales para simulaciones de dados, movimientos en juegos, etc.

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

Ejemplo de número aleatorios para un dado en Python

Para simular un dado de seis caras, que es un número aleatorio entero en el intervalo [0,6] se construye paso a paso:

dado ← entero(aleatorio*6)+1

1. Un número aleatorio

Se empieza con la forma básica para generar un número aleatorio entre [0,1)

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

2. Se debe convertir del intervalo [0,1) al intervalo de un dado de 6 caras,

multiplicando 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 sumándole 1, con lo que el valor mínimo es 1 y el máximo será 6

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

La fórmula final del ejemplo usada varias veces, mostrará que se obtiene un número diferente semejante a lanzar un dado de seis caras.

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

Diagrama de Flujo ejercicio – números aleatorios

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:

Instrucciones en Python

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

Diagrama de Flujo ejercicio – búsqueda de menor valor

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.

Diagrama de Flujo ejercicio – aleatorios y búsqueda de menor valor con mientras-repita

3.3.2 Bucles o Ciclos – Ejercicios y Tarea

Ejercicios para Actividades independientes con lazos

1Eva_IT2003_T2 Verificar una inducción matemática

1Eva_IIT2013_T1 Verificar Bisiesto

1Eva_IT2013_T1 Primos gemelos

1Eva_IT2014_T2 Verificar EAN

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,…..

poligono dentreo de circulo

3.3.1 Bucles o Ciclos – Ejercicios resueltos con Python

Ejercicios resueltos de bucles que combinan estructuras de control básicas, acumuladores y contadores, cocientes y residuos, etc.

Ejercicios resueltos con Acumuladores y Contadores

1) 1Eva_IT2009_T1 Suma de Serie con signo alternado

Solución propuesta: s1Eva_IT2009_T1 Suma de Serie con signo alternado

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

Solución propuesta: s1Eva_IIT2003_T2 Sumar términos de progresión geométrica

Ejercicios resueltos sobre Cocientes y Residuos

3) 3Eva_IT2009_T2 Seleccionar billetes de cajero automático

Solución propuesta: s3Eva_IT2009_T2 Seleccionar billetes de cajero automático

4) 1Eva_IT2014_T1 Cuadrado de Cinco

Solución propuesta: s1Eva_IT2014_T1 Cuadrado de Cinco

5) 1Eva_IT2004_T2 Verificar ISBN

Solución propuesta: s1Eva_IT2004_T2 Verificar ISBN

Lazos/Bucles/Ciclos «While» – Ejercicios resueltos

Mientras_Repita o Repita_Hasta

6) 1Eva_IIIT2003_T2 Verificar números triangulares

Solución propuesta: s1Eva_IIIT2003_T2 Verificar números triangulares

7) 2daEva_IIT2004_T3 Reciclar vasos

Solución Propuesta: s2daEva_IIT2004_T3 Reciclar vasos

8) 1Eva_IT2001_T5 Verificar divisibilidad para 9

Solución propuesta: s1Eva_IT2001_T5 Verificar divisibilidad para 9

9) 1Eva_IIT2006_T2 Dígito verificador de cuenta

Solución propuesta: s1Eva_IIT2006_T2 Dígito verificador de cuenta

10) 1Eva_IT2010_T2 Número Omirp

Solución propuesta: s1Eva_IT2010_T2 Número Omirp

11) 1Eva_IIT2012_T1 Sucesión de Padovan

Solución propuesta: s1Eva_IIT2012_T1 Sucesión de Padovan

12) 1Eva_IT2011_T1 Ahorros de Juan vs Pedro

Solución propuesta: s1Eva_IT2011_T1 Ahorros de Juan vs Pedro

13) 1Eva_IIT2010_T2 Venta de pasajes tren turístico

Solución propuesta: s1Eva_IIT2010_T2 Venta de pasajes tren turístico

14) 1Eva_IIT2002_T4 Cociente de Fibonacci

Solución propuesta: s1Eva_IIT2002_T4 Cociente de Fibonacci

15) 1Eva_IIT2012_T2 Número camiseta equipo

Solución propuesta: s1Eva_IIT2012_T2 Número camiseta equipo

16) 1Eva_IIT2005_T2 Negocio piramidal

Solución propuesta: s1Eva_IIT2005_T2 Negocio piramidal

3.3 Bucles o Ciclos «while» – Estructuras para Repetir o iterar

Bucles: [ Repita-hasta (while not)] [ Mientras-Repita (while)] [ Para (for)]

..


Lazo/Bucle/Ciclo: Repita-Hasta (do-while/while not)

Referencia: Van Rossum 4.4 p21, Rodríguez 3.4.3.a p33, Downey 7.4

En algunos problemas existen bloques de operaciones que se repiten. Estas operaciones se pueden repetir hasta que se cumpla una condición o repetir mientras se cumpla una condición. Las estructuras de control incorporan lazos, bucles o ciclos para repetir: repita-hasta, mientras-repita (while) y «para»(for).diagrama de flujo de un lazo repita hasta

Ejemplo: Para aprobar un curso o materia de estudio  se debe superar la nota mínima para aprobar (60/100).

La condición para continuar al siguiente curso que se aplica en el Bucle se escribe como nota<60/100. En el diagrama de flujo la condición se presenta al final del bloque de operaciones, en el algoritmo en Python se escribe al inicio.

nota = 0 # nota inicial
while (nota<60/100):
    print('tomar el curso')
    print('hacer el examen')
    nota = input('nota final:')

..

Bucles: [ Repita-hasta (while not)] [ Mientras-Repita (while)] [ Para (for)]


Lazo/Bucle/Ciclo: Mientras- Repita (while-do)

Estructura Mientras Repita
Estructura Mientras Repita

Ejemplo: Es el procedimiento usado en las evaluaciones para nivel o curso de idiomas (inglés).

El estudiante primero realiza un examen, si no obtiene la calificación mínima debe tomar el nivel/curso A, caso contrario puede pasar al nivel/curso B.

La condición para continuar en el lazo o bucle nota<60/100, se evalúa antes de usar el bloque de operaciones, tanto en el diagrama de flujo como en el algoritmo.

nota = 0 # nota inicial
print('hacer el examen de ingles')
nota = input('nota final:')
while not(nota<60/100):
    print('tomar el curso de ingles')
    print('hacer el examen de ingles')
    nota = input('nota final:')

Para el planteamiento del ejercicio o problema  al escribir el algoritmo, se selecciona el lazo “repita-hasta” o “mientras-repita” según sea más sencillo de expresar o leer en el planteamiento del ejercicio. Sin embargo, se puede intercambiar la forma del lazo usando la negación del condicional y cambiando la posición del condicional (inicio o al final).

Por ejemplo en matemáticas la expresión se lee:

f(n) \sum_1^n 1/n

«sumatoria desde 1 hasta n de la expresión matemática 1/n«. En el algoritmo, se establecen los límites como desde i=1 hasta que i llegue a n,evitando que se hagan cálculos para i>n.

fn = 0
n = 4
i = 1 # desde i=1
while not(i>n): # hasta i llege a n, evite i>n
    fn = fn + 1/i
    i = i+1
print(fn)

referencia del ejercicio: 1Eva_IT2009_T1 Suma de serie con signo alternado

Recomendación: De ser necesario para continuar, revisar la sección de Conceptos Básicos, contadores y acumuladores.

Bucles: [ Repita-hasta (while not)] [ Mientras-Repita (while)] [ Para (for)]


Ejemplo 1

Referencia: 1Eva_IIIT2003_T2 Números triangulares

Realice un algoritmo para encontrar el término n-ésimo de la secuencia de números triangulares.

Un número triangular puede entenderse como el número de elementos usados para formar una pirámide plana, como se muestra en la figura.

Diagrama de Flujo – números triangulares

Desarrollo:
Usando la analogía de la construcción de una pirámide, se observa que para construir un piso se usa un bloque, para añadir el piso 2 se usan 2 bloques, para añadir el piso 3 se usan 3 bloques, etc.

Cuántos es la variable de ingreso que indica el número de pisos que se construirán.

Para iniciar los trabajos, se anuncia la construcción del primer piso y que se han usado 0 bloques.

En el procedimiento de construcción de la pirámide, piso es una variable tipo contador; usados es una variable tipo acumulador que registra los bloques usados en la construcción de cada piso. Se construye un nuevo piso, acumulando los bloques usados hasta que se hayan construido los pisos de la variable cuántos.

La variable de salida que muestra el valor resultante es: usados.

# Ejemplo 1. Numeros triangulares

# INGRESO
cuantos = int(input('cuantos pisos: '))

# PROCEDIMIENTO
usados = 0
piso = 1
while not(piso>cuantos):
    usados = usados + piso
    piso = piso + 1
    
# SALIDA
print(usados)
cuantos pisos: 4
10
>>>
Diagrama de Flujo – Números triangulares con Mientras-Repita

El ejemplo se desarrolló usando el lazo Repita-Hasta.

Sin embargo, si se quiere cambiar el estilo usando el lazo Mientras-Repita, se lo expresa cambiando el condicional al inicio y negando la expresión:

Repita-Hasta: (pisos>cuántos)
// construir pisos hasta que 
// se completen los pedidos 
// en la variable cuántos

while not(pisos>cuántos)
while (pisos≤ cuántos)
//Construir pisos mientras 
//sean menores e iguales a 
//los pedidos en la variable cuántos.

Bucles: [ Repita-hasta (while not)] [ Mientras-Repita (while)] [ Para (for)]


Ejemplo 2

Diagrama de Flujo – Números triangulares con Repita-Hasta

Extendiendo el ejercicio anterior, construya un algoritmo para determinar si un número t es triangular.

Para esto el lazo se debe controlar mediante el número de bloques usados comparados con el número t.

Si los usados son iguales o mayores a t, no es necesario continuar el proceso pues se obtuvo un resultado afirmativo, o los usados superan lo requerido y el número t no es triangular.

Puede mostrarse la respuesta como un valor verdadero (1) o falso (0) al comparar la igualdad entre t y usados.

La diferencia de las estructuras se puede observar entre el diagrama de Flujo anterior y el presentado.

Instrucciones en Python

# Ejemplo 2. Numero triangular

# Ingreso
t = int(input('número a revisar: '))

# Procedimiento
usados = 0
piso = 1
while not (usados>=t):
    usados = usados + piso
    piso = piso + 1

if (t==usados):
    respuesta = 1
else:
    respuesta = 0

# Salida
print(respuesta)
>>> 
número a revisar: 10
1
>>> 
número a revisar: 7
0
>>>

Propuesta: Realizar el ejercicio usando la forma mientras-repita.

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

Bucles: [ Repita-hasta (while not)] [ Mientras-Repita (while)] [ Para (for)]

..


Bucles o Ciclos «for» – Estructuras para Repetir o iterar

Referencia: Van Rossum 4.2 p19, Rodriguez 3.4.3.b p36, Downey 7.3

bucle o ciclo mientras en diagrama de flujo

En algoritmos es frecuente encontrar lazos, bucles  o ciclos 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” o «for».

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

bucle o ciclo "para" en diagrama de flujo

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

Bucles: [ Repita-hasta (while not)] [ Mientras-Repita (while)] [ Para (for)]

3.2.3 Condicionales «if-else» – Ejercicios para Tarea

Instrucciones: Para cada uno de los siguientes ejercicios sobre Algoritmos secuenciales y decisiones, describa un algoritmo en diagrama de flujo o seudocódigo y realice dos pruebas de escritorio.

Los ejercicios son básicos para estructuras de control con condicionales «If-else«. Para resolver los ejercicios se recomienda enfocarse en la parte de casos o condiciones del problema.

[ condicional ] [ and/or/not ] [ por casos ] [ en serie ] [ en árbol ] [ ejemplos ]


1. Un comerciante compra un artículo a un costo dado. Determine el precio al cual debe venderlo si desea ganar el 15%.


2. Un alumno desea saber cual será su calificación final en cierta materia. Dicha calificación se compone de lo siguiente:

60% corresponde al examen escrito.
20% corresponde a las lecciones
15% corresponde a las tareas.
5% corresponde a las prácticas en el laboratorio

El dato del examen escrito es un valor entre 0 y 100 y los otros datos son valores entre 0 y 10. La calificación final debe ser un valor entre 0 y 20.


3. En un almacén se descuenta 20% del precio al cliente si el valor a pagarse es mayor a $200. Dado un valor de precio, muestre lo que debe pagar el cliente.


4. En un almacén se rebaja 10% del precio al cliente si compra mas de 20 artículos y 5% si compra hasta 20 artículos pero más de 10. Dado el precio unitario de un artículo y la cantidad adquirida, muestre lo que debe pagar el cliente .


5. Una frutería ofrece las manzanas con descuento según la siguiente tabla:

Dado el precio por kilo, y el peso, determinar cuánto pagará una persona que compre manzanas es esa frutería.

kilos comprados Descuento %
0 – 2 0%
2.01 – 5 10%
5.01 – 10 15 %
10.01 en adelante 20%

6. En un circuito eléctrico hay tres interruptores, los cuales pueden estar en estado cerrado(1) o abierto(0).

interruptores como lógica para encender foco
Interruptores de focos

Para que un equipo funcione, se requiere que al menos dos estén cerrados. Si los datos son el estado de los interruptores, determine si el equipo funcionará.

 


7. Ingrese tres números correspondientes a un conjunto y tres números correspondientes a otro conjunto.

Muestre los números que corresponden a la intersección de los dos conjuntos.

Sugerencia: Usa una variable para cada elemento del conjunto

conjunto  A = [4 5 7 ]
conjunto  B = [2 7 9]
intersección  A ∩ B = 7

8. Dados los 9 elementos de una matriz cuadrada, encuentre el valor de su determinante sea diferente de cero.

matriz = \begin{pmatrix}a & b & c \\ d & e & f \\ g & h & i \end{pmatrix}

10. En el ejercicio anterior, suponga que la matriz está asociada a un sistema de tres ecuaciones lineales. Ingrese las constantes de las tres ecuaciones y encuentre el valor de las variables.


Triángulo simple
Triángulo simple

11. Lea los valores de los lados de un triángulo. Determine y muestre un mensaje correspondiente a su tipo (1. EQUILÁTERO, 2. ISÓSCELES, O 3. ESCALENO)

 


12. Lea las tres dimensiones de un bloque rectangular.

Bloque y circulo
Bloque y circulo

Encuentre las tres diagonales de sus caras diferentes y determine si pudiera atravesar por un orificio circular de diámetro dado.

[ condicional ] [ and/or/not ] [ por casos ] [ en serie ] [ en árbol ] [ ejemplos ]

3.2.2 Condicionales «if-else»- Ejercicios resueltos

Ejercicios resueltos en Python y diagramas de flujo como ejemplos de las estructuras de control para condicionales if else (selección). Se desarrollan con los conceptos descritos hasta la Unidad 03 Condicionales – Ejercicios y Tarea

[ interruptores y foco ] [ Bloque por orificio ] [ Tiro al blanco ] [ penales ] [ ganancia/costo ] [ descuento por mayor ]

..


1. Ejercicio 6. interruptores para encender un foco

En un circuito eléctrico hay tres interruptores, los cuales pueden estar en estado cerrado(1) o abierto(0).

interruptores

Para que un equipo funcione, se requiere que al menos dos estén cerrados. Si los datos son el estado de los interruptores, determine si el equipo funcionará.

Desarrollo:
Al inicio, supone que el foco no está encendido (0) .

diagrama de flujo ejercicio resuelto condicional

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.

[ interruptores y foco ] [ Bloque por orificio ] [ Tiro al blanco ] [ penales ] [ ganancia/costo ] [ descuento por mayor ]

..


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

Bloque y circulo
Bloque y circulo

Lea las tres dimensiones de un bloque rectangular.

Encuentre las tres diagonales de sus caras diferentes y determine si pudiera atravesar por un orificio circular de diámetro dado.

Nota: Para el desarrollo considere usar la diagonal de cada lado, que es la parte de mayor longitud que debe pasar por el diámetro del círculo.

 

Instrucciones en Python

# 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

[ interruptores y foco ] [ Bloque por orificio ] [ Tiro al blanco ] [ penales ] [ ganancia/costo ] [ descuento por mayor ]

..


3. Ejercicio: 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.

diagrama de flujo ejercicio resuelto

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

[ interruptores y foco ] [ Bloque por orificio ] [ Tiro al blanco ] [ penales ] [ ganancia/costo ] [ descuento por mayor ]
..


4. Ejercicio 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)

Se inicia considerando que no hubo gol, por lo que la sección=0 para el área donde entró el gol. Hay gol si jugador ≠ jugador.

Diagrama de Flujo

diagrama de flujo ejercicio resuelto

Instrucciones en Python

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

[ interruptores y foco ] [ Bloque por orificio ] [ Tiro al blanco ] [ penales ] [ ganancia/costo ] [ descuento por mayor ]

..


5. Ejercicio Tarea 1 ejercicio 3. Ganancia sobre costo

diagrama de flujo condicional if ejercicio resueltoEn un almacén se descuenta 20% del precio al cliente si el valor a pagarse es mayor a $200.

Dado un valor de precio, muestre lo que debe pagar el cliente.

ejercicios resueltos Python Tarea1Ejercicio1y3 pdf

 

[ interruptores y foco ] [ Bloque por orificio ] [ Tiro al blanco ] [ penales ] [ ganancia/costo ] [ descuento por mayor ]

..


6. Ejercicio Tarea 1 ejercicio 5. Aplicar descuentos en compras al por mayor

Una frutería ofrece las manzanas con descuento según la siguiente tabla:

Dado el precio por kilo, y el peso, determinar cuánto pagará una persona que compre manzanas es esa frutería.

kilos comprados Descuento %
0 – 2 0%
2.01 – 5 10%
5.01 – 10 15 %
10.01 en adelante 20%

condicionales if ejercicio resuelto

ejercicios resueltos Python tarea1ejercicio5 pdf


[ interruptores y foco ] [ Bloque por orificio ] [ Tiro al blanco ] [ penales ] [ ganancia/costo ] [ descuento por mayor ]

 

3.2.1 Condicionales «if-else» múltiple o con varios casos

[ condicional ] [ conector and/or/not ] [ por casos ] [ en serie ] [ en árbol ]

..


Condicionales «if-else» múltiple o con varios casos

Referencia: Van Rossum 4.1 p19, Rodríguez 3.5 p42, Downey 5.7

condicionales multiples en serieExisten problemas en los que una variable puede tomar diferentes valores conforme al cumplimiento de diferentes condiciones o casos.

Un ejemplo es cuando se realizan ventas por volumen, el descuento depende de la cantidad del producto que se vende.

Cuando la variable resultado del condicional puede tener varios valores, se puede adoptar una forma simple del problema al dividirla por casos, empezando por el caso básico y se modifica la variable resultado lo modifica cuando se revisan los casos siguientes.

Para estos casos se usan estructuras de control para selección en forma anidada en forma de serie o en forma de árbol.

[ condicional ] [ conector and/or/not ] [ por casos ] [ en serie ] [ en árbol ]

..


Condicionales múltiples en serie

condicionales en serieEjemplo 3. Un almacén rebaja 10% del precio de un producto si se adquieren más de 20 unidades y 5% si adquieren hasta 20 unidades pero más de 10, no hay descuento para cantidades menores o iguales a 10 unidades.

Con el precio unitario del producto y la cantidad adquirida, realice un algoritmo para mostrar el valor a pagar.

 

 

Desarrollo:

Para seguir una forma ordenada del problema, se dividen los casos de cantidad en segmentos de recta numérica.

El aplicar los descuentos consiste en evaluar los intervalos de cantidad y escribirlos como casos con condicionales.

Las instrucciones de condicionales en Python se muestran como:

# Ejemplo 3.Descuentos en productos por precio y cantidad.

# Ingreso
valor = float(input('Valor del producto: '))
cantidad = float(input('cantidad del producto: '))

# Procedimiento
descuento = 0
if (cantidad > 10 and cantidad<=20):
    descuento = 0.05
if(cantidad > 20):
    descuento = 0.10

pagar = valor*cantidad*(1-descuento)

# Salida
print(pagar)

[ condicional ] [ conector and/or/not ] [ por casos ] [ en serie ] [ en árbol ]

..


Condicionales múltiples en árbol

condicionales en árbol, estructuras de controlOtra forma de resolver el problema del ejemplo anterior, consiste en generar un camino por cada caso para asignar el valor a la variable de salida.

Cada camino es parte de un condicional.

Siguiendo ésta idea, el diagrama de flujo anterior se reorganiza y muestra como:

condicionales en árbol, estructuras de control

Las instrucciones en Python sobre condicionales para el ejercicio son:

# Ejemplo 3.Descuentos en productos por precio y cantidad.

# Ingreso
valor = float(input('Valor del producto: '))
cantidad = float(input('cantidad del producto: '))

# Procedimiento
descuento = 0
if (cantidad>10):
    if (cantidad<=20):
        descuento = 0.10
    else:
        descuento = 0.05
else:
    descuento = 0.0

pagar = valor*cantidad*(1-descuento)

# Salida
print(pagar)

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

[ condicional ] [ conector and/or/not ] [ por casos ] [ en serie ] [ en árbol ]