Autor: Edison Del Rosario

  • s1Eva_IIIT2003_T3 Coordenadas enteras en un círculo

    Ejercicio: 1Eva_IIIT2003_T3 Coordenadas enteras en un círculo

    [ mientras repita] [ para/for ]

    Considere el círculo centrado en el origen (0,0),
    siendo su intervalo entre [-radio, radio].

    Recorrer las coordenadas de números  enteros en el recuadro limitado por
    [-radio,radio] en cada lado, determinando la distancia del punto al origen.

    radio = 10
    x = [-10, -9, -8, -7, -6 ... 8, 9, 10]
    \text{distancia} = \sqrt{x^2+y^2}
    dist = np.sqrt(x**2 + y**2)
    

    Con la distancia revisar si el punto está dentro del círculo.

    if dist<=radio:
        encirculo = encirculo + 1
        sumadist  = sumadist + dist  
    

    [ mientras repita] [ para/for ]
    ..


    Algoritmo en Python: bucle para/for

    # 1Eva_IIIT2003_T3 Coordenadas enteras en un círculo
    import numpy as np
    
    # INGRESO
    radio = 10
    
    # PROCEDIMIENTO
    a =  - int(radio)
    b = int(radio)
    
    encirculo = 0
    sumadist = 0
    for y in range(a,b+1,1):
        for x in range(a,b+1,1):
            dist = np.sqrt(x**2 + y**2)
            if dist<=radio:
                encirculo = encirculo + 1
                sumadist  = sumadist + dist          
    
    promdist = sumadist/encirculo
    # SALIDA
    print(' coordenadas enteras en círculo: ')
    print(encirculo)
    print('promedio distancias al centro: ')
    print(promdist)
    

    resultado:

     coordenadas enteras en círculo: 
    317
    promedio distancias al centro: 
    6.698944789255016
    >>> 
    

    [ mientras repita] [ para/for ]
    ..


    Algoritmo en Python: mientras-repita

    # 1Eva_IIIT2003_T3 Coordenadas enteras en un círculo
    import numpy as np
    
    # INGRESO
    radio = 10
    
    # PROCEDIMIENTO
    a =  - int(radio)
    b = int(radio)
    
    encirculo = 0
    sumadist = 0
    y = a
    while y<=b+1:
        x = a
        while x<=b+1:
            dist = np.sqrt(x**2 + y**2)
            if dist<=radio:
                encirculo = encirculo + 1
                sumadist  = sumadist + dist
            x = x + 1
        y = y + 1
    
    promdist = sumadist/encirculo
    # SALIDA
    print(' coordenadas enteras en círculo: ')
    print(encirculo)
    print('promedio distancias al centro: ')
    print(promdist)
    

    [ mientras repita] [ para/for ]

  • s1Eva_IIIT2003_T2 Verificar números triangulares

    Ejercicio: 1Eva_IIIT2003_T2 Verificar números triangulares

    [ mientras-repita ] [ repita-hasta ] [ diagrama flujo ]

    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.
    piso = 1  # contador
    usados = 0 # acumulador

    Cada piso usa una cierta cantidad de bloques que se cuentan como "usados", es decir se acumulan. La cantidad de bloques por piso es la misma que el número del piso, contador que se inicia con 1.

    El lazo o bucle  repite el proceso de tal forma que los bloques usados  se acumulan en cada piso.

    while (usados<t):
        usados = usados + piso
        piso = piso+1

    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.

    [ mientras-repita ] [ repita-hasta ] [ diagrama flujo ]
    ..


    Algoritmo en Python: Bucle/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 )
    

    [ mientras-repita ] [ repita-hasta ] [ diagrama flujo ]
    ..


    Algoritmo en Python: Bucle/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 )
    

    [ mientras-repita ] [ repita-hasta ] [ diagrama flujo ]
    ..


    Diagrama de Flujo

    Diagrama de Flujo de números triangulares

    [ mientras-repita ] [ repita-hasta ] [ diagrama flujo ]


    Propuesta de solución con diagrama de flujo, Python y otra versión con Matlab

    ejercicios resueltos Python Parc_IIIT2003_T2 pdf

    ejercicios resueltos Matlab parc_iiit2003_t2 pdf

    [ mientras-repita ] [ repita-hasta ] [ diagrama flujo ]

  • s2Eva_IIT2003_T2 Mostrar un triángulo de Pascal

    Ejercicio: 2Eva_IIT2003_T2 Mostrar un triángulo de Pascal

    Para crear la matriz de Pascal en Python se usa la librería Numpy, con lo que se crea un arreglo de tamaño nxn lleno de ceros.

    ejemplo:
    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    1 5 10 10 5 1
    …. …. …. …. …. ….

    Al recorrer la matriz por cada fila f y columna c, si la posición matriz[f,c] es la primera columna a la izquierda (c==0) o la diagonal (f==c) se escribe 1.

    Si la posición de la matriz[f,c] es debajo de la diagonal, se suman los valores de las casilla inmediata superior e izquierda superior.

    pascal[f,c] = pascal[f-1,c] + pascal[f-1,c-1]

    Al terminar el recorrido se tendrá la matriz con el triángulo de Pascal.

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

    Tarea: Convertir el algoritmo a función.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IIT2003_T2 Mostrar un triángulo de Pascal
    # propuesta: edelros@espol.edu.ec
    
    import numpy as np
    
    # INGRESO
    n = int(input('tamaño del triangulo: '))
    
    # PROCEDIMIENTO
    pascal = np.zeros(shape=(n,n),dtype=int)
    f = 0
    while (f<n):
        c = 0
        while (c<=f):
            if (c==0 or c==f):
                pascal[f,c] = 1
            else:
                pascal[f,c] = pascal[f-1,c] + pascal[f-1,c-1]
            c = c+1
        f = f+1
    
    print(pascal)
    

    resultado del algoritmo en una matriz

    tamaño del triangulo: 10
    [[  1   0   0   0   0   0   0   0   0   0]
     [  1   1   0   0   0   0   0   0   0   0]
     [  1   2   1   0   0   0   0   0   0   0]
     [  1   3   3   1   0   0   0   0   0   0]
     [  1   4   6   4   1   0   0   0   0   0]
     [  1   5  10  10   5   1   0   0   0   0]
     [  1   6  15  20  15   6   1   0   0   0]
     [  1   7  21  35  35  21   7   1   0   0]
     [  1   8  28  56  70  56  28   8   1   0]
     [  1   9  36  84 126 126  84  36   9   1]]
    >>>

    ejercicios resueltos Python final_iit2003_t2 pdf

    ejercicios resueltos Matlab final_iit2003_t2 pdf

  • s1Eva_IIT2003_T4 Juego con icosaedros

    Ejercicio: 1Eva_IIT2003_T4 Juego con icosaedros

    [ algoritmo ] [ diagrama flujo ]

    Se propone desarrollar el tema conociendo el número n de lanzamientos que desea participar el jugador, dejando el control del juego como tarea.icosaedros

    Se inicia un contador de lanzamientos y un acumulador de premios.

    Un icosaedro se simula con un aleatorio para el color y otro para el número, para luego comparar éstos valores con lo simulado para el segundo icosaedro.

        d1num   = int(random.random()*5)+1
        d1color = int(random.random()*4)+1
        d2num   = int(random.random()*5)+1
        d2color = int(random.random()*4)+1
    

    Las reglas descritas se implementan con condicionales, considerando que de cumplirse la tercera, ya se ha pagado premio por igualdad de números y color.

        if d1color==d2color:
            premio = premio+10
        if d1num==d2num:
            premio = premio+10
        if ((d1color==d2color)and(d1num==d2num)):
            premio = premio+30
    

    Se repite el juego hasta cumplir el número de lanzamientos.

    [ algoritmo ] [ diagrama flujo ]
    ..


    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IIT2003_T4 Juego con icosaedros
    # Propuesta solucion: edelros@espol.edu.ec
    # Tarea. Completar el control del juego
    
    import random
    
    # INGRESO
    n = int(input('Numero de lanzamientos: '))
    
    # PROCEDIMIENTO
    i = 0
    premio = 0
    while (i<n):
        d1num   = int(random.random()*5)+1
        d1color = int(random.random()*4)+1
        d2num   = int(random.random()*5)+1
        d2color = int(random.random()*4)+1
    
        if d1color==d2color:
            premio = premio+10
        if d1num==d2num:
            premio = premio+10
        if ((d1color==d2color)and(d1num==d2num)):
            premio = premio+30
    
        s = d1num+d2num
        r = s%2
        if r>0:
            premio = premio+5
    
        i = i+1
    
    # SALIDA
    print('total ganado: ')
    print(premio)
    print('lanzamientos: ')
    print(n)
    

    [ algoritmo ] [ diagrama flujo ]
    ..


    Diagrama de Flujo

    Diagrama de Flujo 1 - Ejercicio juego con icosaedros

    continuación

    Diagrama de Flujo 2 - Ejercicio juego con icosaedros

    [ algoritmo ] [ diagrama flujo ]


    Propuesta de solución con diagrama de flujo:

    ejercicios resueltos Python parc_iit2003_t4 pdf

    ejercicios resueltos Matlab parc_iit2003_t4 pdf

  • s1Eva_IIT2003_T3 Personas asignadas a proyectos

    Ejercicio: 1Eva_IIT2003_T3 Personas asignadas a proyectos

    [ algoritmo ] [ diagrama flujo ]

    Ingresar los datos en una matriz, de tamaño nxm, considerando en las filas a las personas y en las columnas a los proyectos. Considera asignado 1 y no asignado como 0.

    m
    Matriz 1 2 3
    1 0 1 0
    2 1 0 0
    3 ... ... ...
    Personas n 4 ... ... ...

    Para la parte b), realizar la cuenta de personas asignadas al primer proyecto. Cada resultado por columna de proyecto, se guarda como parte de un vector de participa[proyecto].

    El vector de participantes es el resultado de la suma de cada columna.

    Para la parte c), se requiere encontrar la carga[persona], que es la suma de cada fila. Por lo que se fija el valor de una persona, una fila, y se revisa para cada persona, todas las columnas, el valor se acumula en carga.

    Se muestra solo aquellas personas que tienen carga de trabajo 0.

    Tarea: Validar los datos que se ingresan a la matriz asignado[persona,proyecto]. Desarrollar la parte para c)

    [ algoritmo ] [ diagrama flujo ]
    ..


    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IIT2003_T3 Personas asignadas a proyectos
    # Propuesta: edelros@espol.edu.ec
    # Tarea: validar los datos de asignado
    
    import numpy
    
    # INGRESO
    n = int(input('cuantas personas: '))
    m = int(input('cuantos proyectos: '))
    asignado = numpy.zeros((n+1,m+1),dtype=int)
    persona = 1
    while (persona<=n):
        proyecto = 1
        while (proyecto<=m):
            print('persona: '+str(persona)+
                  ', proyecto: '+
                  str(proyecto))
            asignado[persona,proyecto] = int(input(' /asignado (1/0): '))
            proyecto = proyecto + 1
        persona = persona+1
    
    # PROCEDIMIENTO
    # participantes por proyecto
    participan = numpy.zeros(m+1,dtype=int)
    proyecto = 1
    while (proyecto<=m):
        s = 0
        persona = 1
        while (persona<=n):
            s = s + asignado[persona,proyecto]
            persona = persona+1
        participan[proyecto] = s
        proyecto = proyecto+1
    
    # Carga de trabajo por persona
    carga = numpy.zeros(n+1,dtype=int)
    persona = 1
    while (persona<=n):
        s = 0
        proyecto = 1
        while (proyecto<=m):
            s = s+asignado[persona,proyecto]
            proyecto = proyecto+1
        carga[persona] = s
        persona = persona+1
    
    # SALIDA
    print('Participantes/Proyecto:')
    proyecto = 1
    while (proyecto<=m):
        print(participan[proyecto])
        proyecto = proyecto+1
    
    print('Persona sin carga de trabajo:')
    persona = 1
    while (persona<=n):
        if carga[persona]==0:
            print(persona)
        persona = persona+1
    

    [ algoritmo ] [ diagrama flujo ]
    ..


    Diagrama de Flujo

    Diagrama de Flujo 1. Ejercicio persona asignada a proyecto
    Diagrama de Flujo 2. Ejercicio persona asignada a proyecto

    Tarea: Desarrollar pregunta c)

    Diagrama de Flujo 3. Ejercicio persona asignada a proyecto

    [ algoritmo ] [ diagrama flujo ]


    Propuesta de solución con diagrama de flujo y Python: py_pdf. Otra propuesta en Matlab: m_pdf

    ejercicios resueltos Python parc_iit2003_t3 pdf

    ejercicios resueltos Matlab parc_iit2003_t3 pdf

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

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

    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]

    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.

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

    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 a r0.

    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]
    ..


    Algoritmo en Python: 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)
    

    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]
    ..


    Diagrama de Flujo: Mientras-Repita

    Diagrama de Flujo 1. Suma de progresión geométrica con Mientras-Repita

    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]
    ..

    Diagrama de Flujo: Repita-Hasta

    Diagrama de Flujo 2. Suma de progresión geométrica con Repita-Hasta

    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]

    Propuesta de solución con diagrama de flujo y Python: python en pdf .
    Otra versión con matlab en pdf

    ejercicios resueltos Python parc_iit2003_t2 pdf

    ejercicios resueltos Matlab parc_iit2003_t2 pdf

    [ algoritmo ] diagrama flujo: [ mientras-repita ] [ repita-hasta ]

  • s1Eva_IIT2003_T1 Cambiar Decimal a Octal

    Ejercicio: 1Eva_IIT2003_T1 Cambiar Decimal a Octal

    Empiece con los conceptos expuestos en el tema de Bases Numéricas Introducción, el ejercicio es una aplicación del tema.

    En el ejercicio presentado, aún quedan partes por desarrollar:

    • validar octal de 4 dígitos
    • validar en procedimiento,
    • que los dígitos sean octales [0,7]

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IIT2003_T1 Cambiar Decimal a Octal
    # propuesta: edelros@espol.edu.ec
    
    #INGRESO
    octal = int(input('número octal: '))
    
    # PROCEDIMIENTO
    decimal = 0
    i = 0
    while (octal>0):
        digito  = octal%10 # residuo
        octal   = octal//10 # cociente
        decimal = decimal + digito*(8**i)
        i = i+1
    
    # SALIDA
    print('número en decimal: ', decimal)
    
  • s2Eva_IT2003_T4 Registro de carros en archivo

    Ejercicio2Eva_IT2003_T4 Registro de carros en archivo

    Propuesta de solución en Python:

    Se ingresan los datos de los carros en una lista, añadiendo los datos con la instrucción append().

    Para el literal a, se concatenan los datos de una fila añadiendo una coma ',' como separador. se escribe cada línea en el archivo.

    En el literal b, se recorre la lista analizando los datos de los carros para añadirlos en una lista aparte que contiene los datos de los seleccionados.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IT2003_T4 Registro de carros en archivo
    # Tarea: validar datos de ingreso
    
    # INGRESO
    n = int(input('cuantos carros: '))
    tabla = []
    i = 0
    while (i<n):
        print('Datos del carro: ... ',i)
        placa = input('Placa: ')
        anio  = input('año: ')
        tipo  = input('tipo A/auto C/camioneta: ')
        marca = input('marca: ')
        color = input('color: ')
        precio = input('precio: ' )
    
        registro = [placa,anio,tipo,marca,color,precio]
        tabla.append(registro)
        i = i+1
    
    # PROCEDIMIENTO
    # literal a)
    nombre  = 'carros.dat'
    archivo = open(nombre,'w')
    i = 0
    while (i<n):
        linea = ''
        j = 0
        while (j<6):
            linea = linea + tabla[i][j] + ','
            j = j + 1
        linea = linea.strip(',')+'\n'
        archivo.write(linea)
        i = i + 1
        
    archivo.close()
    
    # literal b
    selecciona = []
    i = 0
    while (i<n):
        if (int(tabla[i][1])>1995 and tabla[i][4]=='rojo' and int(tabla[i][5])<6000):
            selecciona.append(tabla[i][0])
        i = i + 1
    
    # SALIDA
    print('archivo guardado')
    print(' los autos que cumplen el pedido son:')
    print(selecciona)
    
  • s2Eva_IT2003_T1 Funciones promedio, mayor y menor

    Ejercicio: 2Eva_IT2003_T1 Funciones promedio, mayor y menor

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

    Se requiere desarrollar las funciones usando las operaciones para mostrar el conocimiento de los conceptos.

    Como los datos se envían en un vector, se debe recorrer cada elemento del vector para obtener los resultados. Esta parte muestra su dominio del manejo de lazos/bucles con los índices de un arreglo.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 2Eva_IT2003_T1 Funciones promedio, mayor y menor
    # Se EVALUA escribir un algoritmo
    # Evite usar las funciones del lenguaje de programación
    # Propuesta de Solución: edelros@espol.edu.ec
    
    def promedio(vector):
        n = len(vector)
        suma = 0
        for i in range(0,n,1):
            suma = suma + vector[i]
        prm = suma/n
        return (prm)
    
    def mayor(vector):
        n = len(vector)
        # Busca cual es el mayor
        max = 1
        for i in range(0,n,1):
            if (vector[i]>vector[max]):
                max = i
        # presenta el valor de mayor
        z = vector[max]
        return (z)
    
    def menor(vector):
        n = len(vector)
        # Busca cual es el menor
        min = 1
        for i in range(0,n,1):
            if (vector[i]<vector[min]):
                min = i
        # presenta el valor de menor
        z = vector[min]
        return (z)
    
    
    # PROGRAMA de prueba de funciones
    import numpy as np
    
    # INGRESO
    meses = 12
    temperatura = np.zeros(meses,dtype=int)
    for mes in range(0,meses,1):
        temperatura[mes] = int(input("temperatura["+str(mes+1)+"]: "))
    
    # PROCEDIMIENTO
    tprom = promedio(temperatura)
    tmax  = mayor(temperatura)
    tmin  = menor(temperatura)
    diferencia = tmax-tmin
    
    # SALIDA
    print("promedio: "+str(tprom))
    print("Diferencia max-min: "+str(diferencia))
    

    resultado del algoritmo

    temperatura[1]: 30
    temperatura[2]: 32
    temperatura[3]: 30
    temperatura[4]: 28
    temperatura[5]: 29
    temperatura[6]: 25
    temperatura[7]: 25
    temperatura[8]: 23
    temperatura[9]: 25
    temperatura[10]: 27
    temperatura[11]: 29
    temperatura[12]: 30
    promedio: 27.75
    Diferencia max-min: 9
    

    ejercicios resueltos Python final_it2003_t1 pdf

    ejercicios resueltos Matlab final_it2003_t1 pdf

  • 1Eva_IIT2002_T4 Cociente de Fibonacci

    Parcial II Término 2002 - 2003. Diciembre 12, 2002 /ICM00794

    TEMA 4. (25 puntos) En la siguiente secuencia de números:

    1, 1, 2, 3, 5, 8, 13, 21, ...

    https://murea.es/wp-content/uploads/2014/12/proporcion-aurea-1.jpg

    cada número a partir del tercero se obtiene sumando los dos inmediatos anteriores.

    La propiedad de esta secuencia es que el cociente de dos términos consecutivos tiende hacia un número real.

    1/1, 1/2, 2/3, 3/5, 5/8, 8/13, 13/21, ... ¿?

    Escriba un algoritmo para encontrar este número con 4 decimales de exactitud.

    Sugerencia: para la secuencia, mantenga en cada iteración dos valores consecutivos de este número real, y pare cuándo la diferencia sea menor que 0.0001