Autor: Edison Del Rosario

  • s3Eva_IT2003_T5 Calcular área de f(x) por Montecarlo

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

    La forma gráfica del ejercicio permite comprender mejor lo que se estima.

    Se generan puntos de posiciones aleatorias xi, yi dentro del cuadro limitado por [a,b] en x , [x,d] en y.

    Para cada valor de x aleatorio, se evalua en la función f(x), observando si el valor de y aleatorio esta por encima o debajo de la función.

    Se estima que la proporción de puntos debajo de f(x) del total de puntos es proporcional al área del rectángulo.

    El resultado del algoritmo para un experimento con n = 50 es:

    Area estimada:  0.68
    
    Area estimada:  0.62
    

    Se intuye que la precisión mejora al usar n mucho mas grande.

    Algoritmo en Python

    # 3Eva_IT2003_T5 Calcular área de f(x) por Montecarlo
    import numpy as np
    import random as rnd
    import matplotlib.pyplot as plt
    
    # INGRESO
    n = 50 # puntos aleatorios
    a = 1
    b = 2
    fx = lambda x: x*np.exp(-x/2)
    
    c = 0
    d = 1 # actualizar a max(fx(xi))
    
    # PROCEDIMIENTO
    xi = []
    yi = []
    fi = []
    bajofx  = 0
    for i in range(0,n,1):
        # genera puntos aleatorios
        unxi = rnd.random()*(b-a)+a
        unyi = rnd.random()*(d-c)+c
        fxi = fx(unxi)
        
        # debajo de fx()
        if unyi<=fxi:
            bajofx = bajofx +1
    
        # guarda los puntos
        xi.append(unxi)
        yi.append(unyi)
        fi.append(fxi)
    
    # estima area
    Arectangulo = (b-a)*(d-c)
    Aestimada = Arectangulo*bajofx/n
    
    # SALIDA
    print('Area estimada: ', Aestimada)
    
    # grafica
    plt.scatter(xi,yi, label = 'aleatorios')
    plt.scatter(xi,fi, label = 'f(x)')
    plt.xlabel('xi')
    plt.ylabel('yi')
    plt.legend()
    plt.show()
    
  • 3Eva_IT2003_T4 Prueba de escritorio, funciones

    Mejoramiento I Término 2003 - 2004. Septiembre 16, 2003 /ICM00794

    Nota.- En este examen deben desarrollarse un total de 4 temas. El desarrollo de los temas 1, 2 y 3 es obligatorio. UD. puede seleccionar un solo tema de entre los restantes (4, 5 o 6). Cada tema tiene igual ponderación (25%).

    Tema 4. Dada la siguiente definición para una función denominada misterio():

    int misterio(int m,int n){
        if (m==0)
            return n+1;
        else
            if (n==0)
                return misterio(m-1,1);
            else
                return misterio(m-1, misterio(m,n-1));
    }
    m
    n

    Realice una prueba de escritorio (paso por paso), para mostrar el resultado de la ejecución de la sentencia: misterio(1,1)

  • s3Eva_IT2003_T3 Reportar notas desde un archivo

    Ejercicio: 3Eva_IT2003_T3 Reportar notas desde un archivo

    Propuesta de solución en Python:

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2003_T3 Reportar notas desde un archivo
    # Usando un menu para cada accion
    
    n = 0 # Sin notas
    
    opcion = '0'
    while not(opcion=='4'):
        print('1. Ingresar notas y Guardar archivo')
        print('2. Abrir archivo de notas')
        print('3. Calcular promedio y Guardar archivo notasfinal')
        print('4. Salir')
        
        opcion = input(' -- cual opcion: ')
    
        if (opcion=='1'):
            # Ingresar datos
            nota = []
            n = int(input('cuantos estudiantes: '))
            for i in range(0,n,1):
                matricula = input('matricula: ')
                apellido = input('apellido: ')
                nota1 = int(input('nota1 : '))
                nota2 = int(input('nota2 : '))
                nota.append([matricula,apellido,nota1,nota2])
    
            # Crear archivo 'notas.txt' datos separados por ','
            archivo = open('notas.txt','w')
            for i in range(0,n,1):
                linea = nota[i][0]+','+nota[i][1]+','
                linea = linea +str(nota[i][2])+','+str(nota[i][3])+'\n'
                archivo.write(linea)
                
            print('archivo almacenado')
            archivo.close()
            
        if (opcion=='2'):
            # Abrir archivo de notas
            nota = []
            archivo = open('notas.txt','r')
            linea = archivo.readline()
            
            #leer por linea hasta final ''
            while not(linea==''): 
                # Separa y convierte tipo de datos
                dato = linea.split(',')
                matricula = dato[0]
                apellido  = dato[1]
                nota1 = int(dato[2])
                nota2 = int(dato[3])
                nota.append([matricula,apellido,nota1,nota2])
    
                # Lee la siguiente linea
                linea = archivo.readline()
            archivo.close()
            print('Datos leidos desde archivo')
            print(nota)
    
        if (opcion=='3'):
            # Calcula promedio
            n = len(nota)
            promedio = []
            for i in range(0,n,1):
                prm = float((nota[i][2]+nota[i][3])/2)
                promedio.append([prm])
            # Crear archivo 'final.txt' datos separados por ','
            archivo = open('final.txt','w')
            for i in range(0,n,1):
                linea = nota[i][0]+','+nota[i][1]
                linea = linea +','+str(promedio[i])+'\n'
                archivo.write(linea)
            print('archivo almacenado')
            archivo.close()
            
        if (opcion=='4'):
            print('Mejoramiento I Término 2003, Tema 3')
            print('icm00794 Fundamentos de computacion')
    
  • 3Eva_IT2003_T3 Reportar notas desde un archivo

    Mejoramiento I Término 2003 - 2004. Septiembre 16, 2003 /ICM00794

    Tema 3. Se tienen los datos de 20 estudiantes almacenados en 'c:\notas\entrada.dat'. En el archivo, la estructura de cada registro para cada estudiante estudiante es:

    entrada.dat: 
    matricula (9 caracteres),apellido (10 caracteres), nota1 (entero), nota2 (entero), faltas (entero)

    Lea los datos de los estudiantes almacenados en 'c:\notas\entrada.dat', y genere el archivo 'c:\notas\salida.dat', donde para cada estudiante se consideran los siguientes datos:

    salida.dat:
    matricula (9 caracteres), apellido (10 caracteres), promedio (entero), estado (tipo caracter).
    • Promedio almacena el promedio de las 2 mejores notas.
    • Estado puede tomar el valor "A" si el estudiante aprueba, o "R" si reprueba.

    Un estudiante aprueba cuando el promedio es mayor o igual que 60 y el numero de faltas es menor que el 40% del total de clases dictadas (definido con una constante NUM_CLASES).
    Un estudiante reprueba en caso de no cumplir tal requisito de aprobación.

  • 3Eva_IT2003_T2 Verificar un cuadrado mágico

    Mejoramiento I Término 2003 - 2004. Septiembre 16, 2003 /ICM00794

    TEMA 2. Un cuadrado mágico es una matriz cuadrada de orden n, tal que sus elementos son los números 1, 2, 3, 4, ..., n2; sin repeticiones y ubicados de tal manera que la suma de los elementos de cada fila es igual a la suma de los elementos de cualquier columna e igual a la suma de los elementos de las diagonales.

    Por ejemplo, la matriz siguiente es un cuadrado mágico de tercer orden.

    4 9 2
    3 5 7
    8 1 6
    Ejemplo:
    Es un cuadrado mágico: 1

    Escriba un programa en C/C++ que permita leer los elementos de una matriz nxn, tal que n<10 y verifique si el cuadrado es mágico.

  • s3Eva_IT2003_T2 Verificar un cuadrado mágico

    Ejercicio: 3Eva_IT2003_T2 Verificar un cuadrado mágico

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

    El problema se separa en sus partes principales.

    Primero se revisa el número de veces que aparece cada número en el cuadrado. Luego se suma cada fila y columna, guardando los resultados en vectores.

    La suma de las diagonales se las hace aparte pues solo se necesita mover un índice; la diagonal principal tiene el mismo índice en la fila y columna; y la diagonal segundaria, en cambio la columna es decreciente.

    Se validan los resultados parciales con las condiciones para que sea mágico y se muestra el resultado.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2003_T2 Verificar un cuadrado mágico
    # Propuesta: edelros@espol.edu.ec
    
    import numpy as np
    
    # INGRESO
    n = int(input("tamaño cuadrado: "))
    
    while (n>10):
        n = int(input("tamaño cuadrado(n<10): "))
    
    cuadrado = np.zeros(shape=(n,n),dtype=int)
    for i in range(0,n,1):
        for j in range(0,n,1):
            cuadrado[i,j] = input("cuadrado ["+str(i+1)+","+str(j+1)+"]: ")
    
    # PROCEDIMIENTO
    # verifica numeros repetidos
    m = n*n
    repetido = np.zeros(m+1,dtype=int)
    masdeuno = 0
    for i in range(0,n,1):
        for j in range(0,n,1):
            k = cuadrado[i,j]
            repetido[k]=repetido[k]+1
            if (repetido[k]>1):
                masdeuno = k
                
    #suma de filas y columnas
    sfila = np.zeros(n,dtype=int)
    scolumna = np.zeros(n,dtype=int)
    for i in range(0,n,1):
        for j in range(0,n,1):
            sfila[i] = sfila[i] + cuadrado[i,j]
            scolumna[i] = scolumna[i] + cuadrado[j,i]
            
    # Suma diagonales
    sdiagonal  = 0
    sdiagonal2 = 0
    for i in range(0,n,1):
        sdiagonal  = sdiagonal + cuadrado[i,i]
        sdiagonal2 = sdiagonal2 + cuadrado[i,n-1-i]
    
    # verifica condiciones magico
    magico = 1
    if (masdeuno>0):
        magico = 0
    if not(sdiagonal==sdiagonal2):
        magico = 0
    for i in range(0,n,1):
        if not(sdiagonal==sfila[i]):
            magico = 0
        if not(sdiagonal==scolumna[i]):
            magico = 0
    
    # SALIDA
    print("El resultado es:")
    print(magico)
    

    resultado del algoritmo

    tamaño cuadrado: 3
    cuadrado [1,1]: 4
    cuadrado [1,2]: 9
    cuadrado [1,3]: 2
    cuadrado [2,1]: 3
    cuadrado [2,2]: 5
    cuadrado [2,3]: 7
    cuadrado [3,1]: 8
    cuadrado [3,2]: 1
    cuadrado [3,3]: 6
    El resultado es:
    1
    >>> 
    

    ejercicios resueltos Python mejo_it2003_t2 pdf

    ejercicios resueltos Matlab mejo_it2003_t2 pdf

  • 3Eva_IT2003_T1 Raíces enteras positivas del polinomio

    Mejoramiento I Término 2003 - 2004. Septiembre 16, 2003 /ICM00794

    Tema 1. Encuentre el número de raíces enteras positivas y diferentes menores que 20 que hay en la ecuación polinómica p(x)=0, donde:

    p(x) = - 336x + 356x + 208x  - 337x4   + 127x5  + 19x6 + x7

    término 1 2 3 4 5 6 7
    coeficiente [término] -336 356 208 -337 127 -19 1

    a) Escriba una función num_raices que:

    • reciba el grado del polinomio y un arreglo entero con los coeficientes de la ecuación y
    • retorne el número de raíces enteras positivas y diferentes menores que 20, de dicha ecuación.

    b) Escriba un programa en C/C++ que permita leer el grado y los coeficientes del polinomio p(x), llame a la función num_raices y presente el resultado.

  • s3Eva_IT2003_T1 Raíces enteras positivas del polinomio

    Ejercicio: 3Eva_IT2003_T1 Raíces enteras positivas del polinomio

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

    El problema se separa en sus partes principales.
    Primero la función para encontrar las raíces enteras, usando un contador que
    aumenta cuando encuentra que el polinomio evaluado en x tienen valor de 0.

    En el programa, para ingresar el polinomio se almacenan solo los coeficientes,
    el término i-ésimo también indica el exponente de coeficiente[i]*xi.

    Nota: No se incluye la forma de realizar la gráfica en la solución presentara
    para el examen.

    Algoritmo en Python

    # ICM00794-Fundamentos de Computación - FCNM-ESPOL
    # 3Eva_IT2003_T1 Raíces enteras positivas del polinomio
    # propuesta de solución: edelros@espol.edu.ec
    
    import numpy as np
    
    def numraices(grado,coeficiente,a,b):
        encontre=0
        x = a
        while (x<=b):
            p = 0
            i = 0
            while (i<=grado):
                p = p + coeficiente[i]*(x**i)
                i = i + 1
            if (p==0):
                encontre = encontre+1
            x = x + 1
        return (encontre)
    
    # PROGRAMA -----------------
    
    # INGRESO
    n = int(input("grado polinomio: "))
    coeficiente = np.zeros(n+1,dtype=float)
    for i in range(0,n+1,1):
        coeficiente[i] = float(input("coeficiente["+str(i)+"]: "))
    print("Rango de busqueda: [a,b]")
    a = int(input("a: "))
    b = int(input("b: "))
    
    # PROCEDIMIENTO
    resultado = numraices(n,coeficiente,a,b)
    
    # SALIDA
    print("numero de raices enteras:")
    print(resultado)
    

    resultado del algoritmo

    grado polinomio: 7
    coeficiente[0]: 0
    coeficiente[1]: -336
    coeficiente[2]: 356
    coeficiente[3]: 208
    coeficiente[4]: -337
    coeficiente[5]: 127
    coeficiente[6]: 19
    coeficiente[7]: 1
    Rango de busqueda: [a,b]
    a: -10
    b: 40
    numero de raices enteras:
    1
    >>> 
    

    ejercicios resueltos Python mejo_it2003_t1 pdf

    ejercicios resueltos Matlab mejo_it2003_t1 pdf

  • 3Eva_IT2002_T3 Determinar productos iguales entre vendedores

    Mejoramiento I Término 2002 - 2003. Septiembre 24, 2002 /ICM00794

    Tema 3. Suponga que existen en una unidad de almacenamiento los archivos :

    'A:\vendedor1.txt' y
    A:\vendedor2.txt'

    que contienen los registros de artículos de cada uno de los vendedores con la siguiente información:

     

    código de un artículo (entero) y 
    nombre del artículo (10 caracteres)

    a) Escriba un programa en C++ que lea desde el teclado dos listas conteniendo los códigos de los artículos que ofrecen dos vendedores.
    Luego las almacene en los archivos descritos.
    Cada lista puede tener hasta 20 códigos.

    b) Compare y muestre ¿cuales son los nombres de los artículos que están ofreciendo ambos vendedores?

    Sugerencia: almacene las listas en arreglos de una dimensión, encuentre la intersección de las dos listas y busque los nombres en el archivo A:\DATOS.

  • s3Eva_IT2002_T3 Determinar productos iguales entre vendedores

    Ejercicio: 3Eva_IT2002_T3 Determinar productos iguales entre vendedores

    Se usan listas de prueba para desarrollar el algoritmo, siendo:

    vendedor1 = ['pera','manzana','uva']
    vendedor2 = ['durazno','pera','naranja']
    

    se obtiene:

    ambos venden:
    pera
    >>> 
    

    Tarea: Desarrollar el literal a, usando archivos.

    Algoritmo en Python

    # 3Eva_IT2002_T3 Determinar productos iguales entre vendedores
    # desarrollo con listas, solo literal b
    # Tarea, desarrollar literal a
    
    # INGRESO
    vendedor1 = ['pera','manzana','uva']
    vendedor2 = ['durazno','pera','naranja']
    
    # PROCEDIMIENTO
    n = len(vendedor1)
    m = len(vendedor2)
    ambos = []
    for i in range(0,n,1):
        for j in range(0,m,1):
            if vendedor1[i] == vendedor2[j]:
                ambos.append(i)
    
    # SALIDA
    w = len(ambos)
    print('ambos venden:')
    for k in range(0,w,1):
        cual = ambos[k]
        print(vendedor1[cual])