Autor: Edison Del Rosario

  • s1Eva_IIT2004_T3 Estimar π por Montecarlo

    Ejercicio: 1Eva_IIT2004_T3 Estimar π por Montecarlo

    [ algoritmo ] [ diagrama flujo ]

    Ingresar la cantidad de puntos n para ubicar en el plano de forma aleatoria dentro del rango del cuadrado que contiene al círculo. 

    Usar una variable k como el contador para los puntos que caen dentro del círculo.

    Al generar aleatoriamente cada punto (x,y), se puede calcular la distancia al centro usando Pitágoras.

    d= \sqrt{x^2 +y^2}

    Se repite el proceso para n puntos y al final se calcula el valor estimado de pi según la relación del enunciado.

    \frac{k}{n} =\frac{\pi}{4}

    Nota: no se usa como variable la palabra “pi” debido a que es nombre de variable reservada.

    [ algoritmo ] [ diagrama flujo ]
    ..


    Algoritmo en Python

    # 1Eva_IIT2004_T3 Estimar Pi por Montecarlo
    # Propuesta de solución. edelros@espol.edu.ec
    # se usa todo el círculo
    import random as rnd
    import numpy as np
    
    # INGRESO
    n = int(input('¿Cuántos puntos?: '))
    radio = 1
    
    # PROCEDIMIENTO
    punto = np.zeros(shape=(n,2),dtype=float)
    k = 0
    i = 0
    while i<n:
        x = rnd.random()*(2*radio)-1
        y = rnd.random()*(2*radio)-1
    
        d = np.sqrt(x**2+y**2)
        if d<=radio:
            k = k + 1
        punto[i] = [x,y]
        i = i + 1
    
    estimadopi = 4*k/n
    
    # SALIDA
    print(k,n)
    print('estimador pi: ', estimadopi)
    print(punto)
    

    la estimación de π con números aleatorios que se ubican dentro del círculo de radio 1 es:

    ¿Cuántos puntos?: 1000
    781 1000
    estimador pi:  3.124
    [[ 0.15581724  0.43992571]
     [-0.11114653 -0.86426905]
     [ 0.51257751 -0.1969925 ]
     ...
     [ 0.26965478 -0.01555604]
     [-0.89575602  0.56077385]
     [ 0.33467618 -0.59497405]]
    >>> 
    

    [ algoritmo ] [ diagrama flujo ]
    ..


    Diagrama de Flujo

    [ algoritmo ] [ diagrama flujo ]

    ejercicios resueltos Matlab parc_iit2004_t3 pdf

  • s1Eva_IT2004_T3 Sortear parejas para tenis

    Ejercicio: 1Eva_IT2004_T3 Sortear parejas para tenis

    Propuesta de solución en Python:

    La variable n indica el número de parejas o tamaño de los vectores para almacenar la "pareja" y el contador de "veces" que juega cada una.

    # INGRESO
    n = int(input('cuantas parejas: '))

    El ejercicio se divide en dos partes: la primera para seleccionar de forma aleatoria la pareja de la dama (una por una), es decir se sortean los caballeros (quien), y la segunda parte se realiza el proceso para los caballeros.

    dama = n+1
    while not(dama>(2*n)):
        quien = int(rnd.random()*n)+1
        pareja[dama] = quien
        veces[quien] = veces[quien]+1
        dama = dama + 1

    En cada sorteo se registra cuántas veces participa cada uno.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IT2004_T3 Sortear parejas para tenis
    
    import random as rnd
    import numpy as np
    
    # INGRESO
    n = int(input('cuantas parejas: '))
    
    # PROCEDIMIENTO
    pareja = np.zeros(2*n+1,dtype=int)
    veces  = np.zeros(  n+1,dtype=int)
    
    dama = n+1
    while not(dama>(2*n)):
        quien = int(rnd.random()*n)+1
        pareja[dama] = quien
        veces[quien] = veces[quien]+1
        dama = dama + 1
    
    # SALIDA
    print(pareja[n+1:])
    print('veces: ')
    print(veces)
    
    print('juegan varias veces: ')
    caballero = 1
    while not(caballero>n):
        if (veces[caballero]>1):
            print(caballero)
        caballero = caballero + 1
    
    print('los que no juegan: ')
    caballero = 1
    while not(caballero>n):
        if (veces[caballero]==0):
            print(caballero)
        caballero = caballero + 1
    

    con un ejemplo de resultado:

    cuantas parejas: 10
    [ 6  2  1  8  3  9 10  1  7  9]
    veces: 
    [0 2 1 1 0 0 1 1 1 2 1]
    juegan varias veces: 
    1
    9
    los que no juegan: 
    4
    5
    >>> 
    
  • s1Eva_IT2004_T2 Verificar ISBN

    Ejercicio: 1Eva_IT2004_T2 Verificar ISBN

    Propuesta de solución en Python, para un número ISBN dadoisbn libro

    ISBN = 9684443242

    Luego de pedir el número ISBN, se inicia extrayendo el dígito verificador escrito, quedando el resto de dígitos del número hacia la izquierda para realizar los cálculos.

    vescrito = ISBN%10
    n = ISBN//10
    

    Tarea: verificar el número de dígitos del ISBN

    Para la posición del dígito se usa un contador.

    Las operaciones se acumulan en suma, de la que se obtiene el residuo de la división para 11.

    El residuo corresponde al verificador calculado que se compara con el verificador escrito para dar el veredicto.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 1Eva_IT2004_T2 Verificar ISBN
    # propuesta: edelros@espol.edu.ec
    
    # INGRESO
    ISBN = int(input('cual ISBN: '))
    
    # PROCEDIMIENTO
    vescrito = ISBN%10
    n = ISBN//10
    
    contador = 9
    suma = 0
    while (n>0):
        digito = n%10
        n = n//10
        suma =  suma + digito*contador
        contador = contador -1
    
    vcalculado = suma%11
    
    if (vescrito==vcalculado):
        respuesta = 1
    else:
        respuesta = 0
    
    #SALIDA
    print(respuesta)
    

    Resultado del algoritmo

    cual ISBN: 9684443242
    1
    >>> 
    cual ISBN: 9684443243
    0
    >>> 
    
  • 1Eva_IIIT2003_T4 Dividir Polinomio usando Paolo Ruffini

    Parcial III Término 2003 - 2004. Abril 02, 2004 /ICM00794

    Tema 4. (25 Puntos) La regla de Paolo Ruffini sirve para realizar la división de un polinomio (de grado mayor que 1) para un binomio de la forma (x - a), ambos con coeficientes enteros.

    Al dividir:
    (x3 + 3x2 - x + 1)
    para: (x - 2)

    el coeficiente de la division es: (x2 + 5x + 9)
    y el residuo es: 19

    Escriba un algoritmo en seudo-código que realice lo siguiente:

    a) Permita el ingreso de:

    • El grado n de un polinomio, validando que n sea entero mayor que 1 y menor que 10.
    • Los coeficientes de dicho polinomio en un arreglo de enteros (el orden de ingreso será desde los coeficientes del término de mayor grado hasta el término independiente).
    • El valor de a (entero) del divisor ( x - a )

    b) Muestre por pantalla el resultado de la división (cociente y residuo).

    Rúbrica: validar grado de polinomio (5 puntos), ingreso de coeficientes en arreglo (5 puntos) operaciones (10 puntos),  residuo correcto(5 puntos).

  • 2Eva_IIIT2003_T4 Menú para un archivo de inventario

    Final III Término 2003 – 2004. Abril 23, 2004 /ICM00794

    Tema 4. En un almacén se requieren almacenar los datos correspondientes a los diferentes artículos disponibles en un archivo denominado ‘invent.dat‘ en la unidad de disco ‘C:\’.

    Para cada artículo se deben registrar los siguientes datos:

    código (entero),
    nombre (cadena de hasta 30 caracteres),
    precio (número real),
    cant (número entero que refleja la cantidad existente).

    a) Escriba una función, denominada ingresar_datos, la cual permitirá registrar los datos de varios artículos en el archivo ‘invent.dat‘ a través de una estructura.

    Los códigos de cada registro se irán generando secuencialmente a partir de 1 y los restantes datos serán digitados por el usuario, mientras aquel desee continuar con el ingreso de más artículos.
    Al final la función retorna el número de artículos ingresados.

    b) Escriba un procedimiento, denominado venta_item, que reciba 2 parámetros:

    • el código de un artículo y
    • el número de unidades que serán vendidas.

    Este procedimiento debe acceder en el archivo ‘ invent.dat‘ al artículo cuyo código se desea vender y mostrar por pantalla el importe de la venta de tal artículo.
    Si la cantidad de artículos existentes es menor que la cantidad solicitada para la venta, se debe mostrar un mensaje que indique que la venta no puede ser realizada.

    c) Escriba un programa en C/C++ que llame a la función ingresar_datos, que luego pida al usuario el ingreso del código de un artículo y el número de unidades que se desean vender de dicho artículo y que, finalmente, llame al procedimiento venta_item.

  • 2Eva_IIIT2003_T3 función distancia de Hamming

    Final III Término 2003 – 2004. Abril 23, 2004 /ICM00794

    Tema 3. Dados dos vectores U y V, se define la distancia de Hamming, d(U,V), como el número de posiciones en las cuales difieren los vectores U y V.

    Por ejemplo:
    U 2 0 0 0 1
    V 1 0 1 0 3

    d(U,V) = 3, ya que existen tres posiciones (la primera, la tercera y la quinta) en las cuales los dos vectores tienen diferente valor.

    >>> U='20001' 
    >>> V='10103'
    >>> dHamming(U,V)
     3

    a) Escriba una función, denominada Hamming(), que reciba como parámetros dos cadenas de caracteres y retorne un entero que indique la distancia Hamming entre ellas. Si las cadenas no tienen longitudes iguales la función retornará -1.

    b) Escriba un programa que pida al usuario el ingreso de una clave (cadena de caracteres), que a continuación lea otra cadena almacenada en un archivo denominado ‘clave.dat‘ ya existente en la unidad de disco ‘C:\’.
    Luego, después de llamar a la función Hamming(), muestre por pantalla un mensaje indicando si la cadena ingresada coincide o no con la cadena almacenada en el archivo ‘clave.dat‘.

  • 1Eva_IIIT2003_T3 Coordenadas enteras en un círculo

    Parcial III Término 2003 - 2004. Abril 02, 2004 /ICM00794

    Tema 3. (25 puntos) Escriba un algoritmo en seudo-código para determinar el número de puntos del plano cartesiano con coordenadas de valores enteros que pertenecen al círculo limitado por la circunferencia de ecuación

    x^2 + y^2 = 100

    (centro en el origen y radio 10).

    Muestre también el promedio de las distancias de dichos puntos al origen de coordenadas.

    Rúbrica: Manejo de índices enteros como coordenadas (5 puntos). control de intervalos de coordendas en dos dimensiones (5 puntos), manejo de contadores y condicionales (10 puntos), promedio de distancias (5 puntos).

  • 1Eva_IIIT2003_T2 Verificar números triangulares

    Parcial III Término 2003 - 2004. Abril 02, 2004 /ICM00794

    Tema 2. (25 puntos) Considere la secuencia de números triangulares, cuyo nombre refleja su ley de formación:

    1, 3, 6, 10, ...


    Escriba un algoritmo en seudo-código que indique si un número natural t, ingresado por teclado, es triangular.

    Esto es, si es de la forma:

    t = \sum_{i=1}^{n}i

    para algún número natural n

    Rúbrica: identificación de piso en operación (5 puntos), cálculo de usados (5 puntos), control de pisos construidos (5 puntos), validar suma t es triangular (5 puntos), algoritmo estructurado (5 puntos)

    Referencia: Número triangular. Wikipedia

  • 2Eva_IIIT2003_T2 Raíz cuadrada por Newton, recursiva

    Final III Término 2003 – 2004. Abril 23, 2004 /ICM00794

    Tema 2. La raíz cuadrada de un número real x mayor que 0 se puede obtener a través de una aproximación n-ésima de una función f según el método de Newton, el cual establece lo mostrado:

    f(1) = \frac{x}{2} f(2) = 0.5\Bigg(f(1) + \frac{x}{f(1)}\Bigg) f(3) = 0.5\Bigg(f(2) + \frac{x}{f(2)}\Bigg)

    ...

    f(n) = 0.5\Bigg(f(n-1) + \frac{x}{f(n-1)}\Bigg)

    a) Escriba una función recursiva f que reciba dos parámetros:

    • x (el número del cual se desea calcular la raíz cuadrada) y
    • n (el número de aproximaciones).

    Esta función debe retornar la raíz cuadrada de x para la n-ésima aproximación.

    b) Escriba un programa que permita el ingreso de un número real x y que, mediante sucesivas llamadas a la función f, muestre los resultados del cálculo de la raíz cuadrada de dicho número para cada una de las 10 primeras aproximaciones (n = 1, 2, 3, .. , 10).

    Nota: considere aplicar una bandera como indicador que la raiz no es posible para números negativos o cero. Tampoco es posible para n menores que 1

    Referencia: https://es.wikipedia.org/wiki/Ra%C3%ADz_cuadrada


    Ejemplo:

    ingrese x: 9
    aproximación n-esima: 10
     i , f(i)
    0 nan
    1 4.5
    2 3.25
    3 3.0096153846153846
    4 3.000015360039322
    5 3.0000000000393214
    6 3.0
    7 3.0
    8 3.0
    9 3.0
    10 3.0
    >>> 
    
  • 2Eva_IIIT2003_T1 Juego de dados por sumas

    Final III Término 2003 – 2004. Abril 23, 2004 /ICM00794

    Tema 1. En un juego se lanza un dado 5 veces y se gana cuando la suma de puntos obtenida en los dos primeros lanzamientos es igual a la obtenida en los restantes tres.

    Ejemplo:
    
    >>juego()
    dado = [3, 2, 1, 3, 1]
    sumas = [5, 5]
    ans=1
    
    >>juego()
    dado = [2, 4, 5, 2, 1]
    sumas = [6, 8]
    ans=0

    a) Escriba una función, denominada juego(), que simule los cinco lanzamientos del dado y retorne dos posibles valores:
    1, si se trata de un jugada ganadora y
    0 en caso contrario.

    b) Escriba un programa en C/C++ que permita realizar 1000 jugadas diferentes sucesivas mediante llamadas a la función juego, y que muestre por pantalla el porcentaje de jugadas ganadoras.