s1Eva_IIT2012_T1 Sucesión de Padovan

Ejercicio: 1Eva_IIT2012_T1 Sucesión de Padovan

Propuesta de solución en Python: py_pdf, también en versión matlab: m_pdf

Para este ejercicio se necesitaran 4 variables simpes, a, b y c se inicializan en 1 como indica la secuencia.

1, 1, 1, 2, 2, 3, 4, 5, 7, ...
a, b, c, d
   a, b, c, d
      a, b, c, d

El valor del siguiente término “d” es siempre la suma de a y b.

Se preparan los valores siguientes reemplazandoa con b, b con c, y c con d, con el objetivo de poder repetir la operación para el siguiente término.

Un contador de términos “i” permite controlar el número de términos calculados para mostrar solo el requerido.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2012_T1 Sucesión de Padovan
# propuesta: edelros@espol.edu.ec

# INGRESO
n = int(input('cuál término:'))

# PROCEDIMIENTO
a = 1
b = 1
c = 1
i = 3
while (i<n):
    d = a+b
    a = b
    b = c
    c = d
    i = i+1

# SALIDA
print(d)

Resultado del algoritmo

cuál término:5
2
>>>
cuál término:6
3
>>>
cuál término:7
4
>>>

Lazo repita-hasta:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2012_T1 Sucesión de Padovan
# propuesta: edelros@espol.edu.ec

# INGRESO
n = int(input('cuál término:'))

# PROCEDIMIENTO
a = 1
b = 1
c = 1
i = 3
while not (i>=n):
    d = a+b
    a = b
    b = c
    c = d
    i = i+1

# SALIDA
print(d)

s1Eva_IT2010_T2 Número Omirp

Ejercicio: 1Eva_IT2010_T2 Número Omirp

Propuesta de solución en Python: py_pdf, también en versión matlab: m_pdf

Nota: Omirp se lee de derecha a izquierda como primo.

Repasar algoritmo de validación de números primos, también el algoritmo para invertir dígitos de un número. En este ejercicio es necesario usar ambos.

Primero para verificar si el número a verificar es primo, luego para invertir sus dígitos y finalmente verificar si el número con dígitos invertidos también es primo.

Si ambos son primos entonces el número es omirp.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2010_T2 Número Omirp
# Propuesta: edelros@espol.edu.ec

# INGRESO
n = int(input('numero a validar omirp: '))

# PROCEDIMIENTO

# revisa si es primo
esprimo = 1
i = 2
while (i<n):
    r = n%i
    if r==0:
        esprimo = 0
    i = i+1

# invierte los dígitos del número
m = n
alreves = 0
while (m>0):
    r = m%10
    m = m//10
    alreves = alreves*10 + r

# revisa si alreves es primo
esprimoA = 1
i = 2
while (i<alreves):
    r = alreves%i
    if r==0:
        esprimoA = 0
    i = i + 1

# revisa si es omirp
if (esprimo==1 and esprimoA==1):
    omirp = 1
else:
    omirp = 0

# SALIDA
print('es número omirp: ', omirp)

Resultado del algoritmo

numero a validar omirp: 1597
es número omirp:  1
>>> 
numero a validar omirp: 1598
es número omirp:  0
>>> 

s1Eva_IIT2003_T2 Sumar términos de progresión geométrica

Ejercicio: 1Eva_IIT2003_T2 Sumar términos de progresión geométrica

Propuesta de solución en Python: python en pdf, y en versión matlab en pdf

Ingresar la cantidad n de términos, el factor a y r, validando que r no sea 1.

S = \sum_{i=0}^{n} a + ar + ar^2 + ar^3 + ... + ar^n

Iniciar con 0 las variables: s que acumula términos, i como el contador de términos que adicionalmente se usa como exponente.

Como paso siguiente, calcular cada término y acumularlos en s tantas veces como sea necesario hasta que que i llega a n.

El resultado buscado se encontrará en s.

Observe que el primer término es solo la constante a, con equivalente ar0.

Lazo mientras-repita:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2003_T2 Sumar términos de progresión geométrica
# Propuesta de solución. edelros@espol.edu.ec.

# INGRESO
n = int(input('¿Valor de n?: '))
a = float(input('factor a: '))
r = float(input('factor r: '))
while (r==1):
    r = int(input('factor r debe ser diferente de 1: '))

# PROCEDIMIENTO
s = 0
i = 0
while (i<=n):
    t = a*(r**i)
    s = s + t
    i = i + 1

# SALIDA
print(s)

s1Eva_IT2009_T1 Suma de serie con signo alternado

Ejercicio: 1Eva_IT2009_T1 Suma de serie con signo alternado

Propuesta de solución en Python: python.pdf, también versión en matlab.pdf

Solicitar el número n, calcular cada término i-ésimos y acumularlos en una variable s.

El signo se puede alternar multiplicando una variable signo por -1. También se puede usar (-1)i+1 para alternar el signo.

1-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+\frac{1}{5}+\text{...}+\frac{1}{n}

observe:

(-1)^{(1+1)}1+(-1)^{(2+1)}\frac{1}{2}+(-1)^{(3+1)}\frac{1}{3}+ ...

La primera solución se presenta usando el lazo “Mientras-Repita”

Lazo mientras-repita:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2009_T1 Suma de serie con signo alternado
# Propuesta de solución. edelros@espol.edu.ec

# INGRESO
n = int(input('¿Cuántos términos?: '))

# PROCEDIMIENTO
i = 1
s = 0
signo = 1
while (i<=n):
    s = s + signo*(1/i)
    i = i + 1
    signo = (-1)*signo

# SALIDA
print(s)

resultado del algoritmo

¿Cuántos términos?: 5
0.7833333333333332
>>> 
== RESTART: D:\MATG1052Ejemplos\unprograma.py ==
¿Cuántos términos?: 10
0.6456349206349207
>>> 

lazo repita-hasta:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2009_T1 Suma de serie con signo alternado
# Propuesta de solución. edelros@espol.edu.ec

# INGRESO
n = int(input('¿Cuántos términos?: '))

# PROCEDIMIENTO
i = 1
s = 0
signo = 1
while not(i>n):
    s = s + signo*(1/i)
    i = i + 1
    signo = (-1)*signo

# SALIDA
print(s)

s1Eva_IT2012_T4 Ajustar tarifas eléctricas invierno/verano

Ejercicio: 1Eva_IT2012_T4 Ajustar tarifas eléctricas invierno/verano

Propuesta de solución: Archivo diagrama en pdf


Enfoque solo en la selección de tarifas, considerando la variable para estación verano o invierno


Instrucciones en Python

Condiciones en serie para estación, en árbol para valor de tarifa:

# 1Eva_IT2012_T4 Ajustar tarifas eléctricas invierno/verano

# INGRESO
consumo  = int(input(' consumo:  '))
estacion = int(input(' estacion: '))

# PROCEDIMIENTO
estacion = 1
# condicionales en arbol
if estacion ==1:
    tarifa = 0.04
    if (consumo>130):
        tarifa = 0.08
        if (consumo>500):
            tarifa = 0.11
            if (consumo>700):
                tarifa = 0.16
if estacion ==2:
    tarifa = 0.04
    if (consumo>130):
        tarifa = 0.11
        if (consumo>500):
            tarifa = 0.13
            if (consumo>700):
                tarifa = 0.26
pagar = consumo*tarifa

# SALIDA
print(' pagar:')
print(pagar)

s1Eva_IT2012_T1 Codificar número por dígito

Ejercicio: 1Eva_IT2012_T1 Codificar número por dígito

Propuesta de solución en Python, también se adjunta el diagrama en pdf

Ingrese un numero «original» validando que sea de tres dígitos, es decir entre 100 y 1000.

Se extrae cada dígito usando residuo y cociente de la división para 10. Aplique a cada dígito las reglas del enunciado del problema usndo condicionales.

Los dígitos se vuelven a armar en el código como resultado usando las posiciones i de cada uno de ellos (unidades, decenas, centenas).

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IT2012_T1 Codificar número por dígito

# INGRESO
original = int(input('número: '))

while not(original>=100 and original<1000):
    original = int(input('número: '))

# PROCEDIMIENTO
A = original
codigo = 0
i = 0
while not(A==0):
    d = A%10
    A = A//10
    
    if (d==2 or d==5 or d==7):
        d = d+1
    else:
        if (d==1 or d==4 or d==8 or d==9):
            d = d-1

    codigo = codigo + d*(10**i)
    i = i+1
    
# SALIDA
print('codificado: ', codigo)

Resultado del algoritmo

número: 472
codificado:  383
>>> 
número: 503
codificado:  603
>>> 
número: 615
codificado:  606
>>> 

s1Eva_IIT2007_T1 Hormiga busca arroz

Ejercicio: 1Eva_IIT2007_T1 Hormiga busca arroz

Propuesta de solución en Python: python.pdf, también en versión matlab.pdf.

Algoritmo con un paso  por cada turno

Considere ingresar la ubicación inicial (xh,yh) de la hormiga y que la posición del arroz (xa,ya) sea fija.

Suponga que la distancia inicial es la mayor y que la hormiga no ha encontrado el grano de arroz.

Para la dirección del movimiento de la hormiga y la cantidad de pasos se generan números aleatorios cuyos valores se usan para simular el movimiento al cambiar las coordenadas de la hormiga.

Luego de cada movimiento, se revisa si la hormiga encontró el grano de arroz o que las coordenadas sean iguales; también se puede revisar si la nueva distancia es mayor a las anteriores.

Cuente un turno completado, y repita el procedimiento hasta que se completen los 100 turnos o se haya encontrado el grano de arroz. Al final muestre los resultados buscados.

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIT2007_T1 Hormiga busca arroz
import random as rnd

# INGRESO
xa=int(input(' x arroz: '))
ya=int(input(' y arroz: '))

xh=int(input(' x hormiga: '))
yh=int(input(' y hormiga: '))

# PROCEDIMIENTO
encontro = 0
t = 0
while not((xh==xa and yh==ya) or t>100):
    
    # dirección de movimiento de hormiga
    d = int(rnd.random()*4)+1
    
    if (d==1):
        yh = yh+1
    if (d==2):
        yh = yh-1
    if (d==3):
        xh = xh+1
    if (d==4):
        xh = xh-1

    # Revisa si lo encontró
    if (xh==xa and yh==ya):
        encontro = 1
    t = t + 1

print('¿encontró?: ')
print(encontro)
print('pasos realizados: ')
print(t)

Ejemplo de respuesta con el algoritmo

 x arroz: 5
 y arroz: 3
 x hormiga: 4
 y hormiga: 2
¿encontró?: 
1
pasos realizados: 
34
>>> 

 x arroz: 8
 y arroz: 8
 x hormiga: 3
 y hormiga: 2
¿encontró?: 
0
pasos realizados: 
101

Algoritmo varios pasos por turno

En la solución con Python, se usarán las librerías básicas de aleatorios (random) y matemáticas (math).

Una alternativa a esta solución es usar la librería numérica NUMPY, que se descarga e instala como un módulo complementario.

Usando lazo Mientras-Repita:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1ra Eval II Termino 2007. Tema 1. Hormiga y arroz
# Propuesta de solución. edelros@espol.edu.ec

import random as rnd
import math

xh = int(input('coordenada x hormiga: '))
yh = int(input('coordenada y hormiga: '))

# PROCEDIMIENTO

# posición del arroz fija
xa = 10
ya = 8

# distancia inicial
dmayor = math.sqrt((xh-xa)**2+(yh-ya)**2)

encontrado = 0
turno = 0
while (turno<100 and encontrado==0):
    
    direccion = int(rnd.random()*4)+1
    pasos = int(rnd.random()*3)+1

    if direccion==1:
        yh = yh + pasos
    if direccion==2:
        yh = yh - pasos
    if direccion==3:
        xh = xh + pasos
    if direccion==4:
        xh = xh - pasos
        
    if (xh==xa and yh==ya):
        encontrado = 1

    distancia = math.sqrt((xh-xa)**2+(yh-ya)**2)
    if distancia>dmayor:
        dmayor = distancia
        
    turno = turno + 1

# SALIDA
print('estado encontrado: ')
print(encontrado)
print('turnos simulados: ')
print(turno)
print('distancia más lejana: ')
print(dmayor)

Reaultado del algoritmo:

coordenada x hormiga: 2
coordenada y hormiga: 1
estado encontrado: 
1
turnos simulados: 
92
distancia más lejana: 
23.323807579381203
>>> 
coordenada x hormiga: 0
coordenada y hormiga: 0
estado encontrado: 
0
turnos simulados: 
100
distancia más lejana: 
38.2099463490856
>>> 

Usando lazo Repita-Hasta:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1ra Eval II Termino 2007. Tema 1. Hormiga y arroz
# Propuesta de solución. edelros@espol.edu.ec

import random as rnd
import math

xh = int(input('coordenada x hormiga: '))
yh = int(input('coordenada y hormiga: '))

# PROCEDIMIENTO

# posición del arroz fija
xa = 10
ya = 8

# distancia inicial
dmayor = math.sqrt((xh-xa)**2+(yh-ya)**2)

encontrado = 0
turno = 0
while not(turno>=100 or encontrado!=0):
    
    direccion = int(rnd.random()*4)+1
    pasos = int(rnd.random()*3)+1
    
    if direccion==1:
        yh = yh + pasos
    if direccion==2:
        yh = yh - pasos
    if direccion==3:
        xh = xh + pasos
    if direccion==4:
        xh = xh - pasos
        
    if (xh==xa and yh==ya):
        encontrado = 1

    distancia = math.sqrt((xh-xa)**2+(yh-ya)**2)
    if distancia>dmayor:
        dmayor = distancia

    turno = turno+1

# SALIDA
print('estado encontrado: ')
print(encontrado)
print('turnos simulados: ')
print(turno)
print('distancia más lejana: ')
print(dmayor)

s1Eva_IIIT2003_T2 Números triangulares

Ejercicio: 1Eva_IIIT2003_T2 Números triangulares

Propuesta de solución en Python: python.pdf , y versión matlab.pdf

El problema planteado es semejante a construir una pirámide, en la que se disponen de solo t bloques y se requiere saber si el número de bloques es exacto para formar una pirámide.

El ejercicio se desarrolla suponiendo que se construirá una pirámide con bloques de varios «pisos».

Se observa que el número de bloques coincide con el número de piso a construir.

Ejemplo: Piso 1 tiene 1 bloque, piso 2 tiene 2 bloques, etc.

Cada piso usa una cierta cantidad de bloques que se cuentan como «usados». La cantidad de bloques por piso es la misma que el número del piso.

El lazo acumula los bloques usados en cada piso.

Dado un número t de bloques ,se calcula la secuencia de números triangulares mientras los bloques usados sean menores que los t disponibles.

En caso que el número “usados” de la secuencia es igual a t, se considera al número t como un número triangular. La respuesta es un valor de verdad, si es triangular 1, si no lo es 0.

Lazo mientras-repita

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIIT2003_T2 Números triangulares
# Propuesta de solución. edelros@espol.edu.ec

# INGRESO
t=int(input('Verificar si es triangular: '))

# PROCEDIMIENTO
piso = 1
usados = 0
while (usados<t):
    usados = usados+piso
    piso = piso+1

# verifica si es triangular
if usados==t:
    estriangular = 1
else:
    estriangular = 0

# SALIDA
print(estriangular )

Lazo Repita-hasta

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 1Eva_IIIT2003_T2 Números triangulares
# Propuesta de solución. edelros@espol.edu.ec

# INGRESO
t = int(input('Verificar si es triangular: '))

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

# verifica si es triangular
if usados==t:
    estriangular = 1
else:
    estriangular = 0

# SALIDA
print(estriangular )