aPracticasProgramacion

19
Programación y Métodos Numéricos Práctica 1: Introducción al lenguaje C 1. Escribir un programa que le pida al usuario las notas de dos exámenes parciales y que calcule el promedio de las dos notas, mostrando este promedio por pantalla con dos decimales. 2. Escribir un programa que le pida al usuario las notas de dos exámenes parciales y un trabajo práctico y que calcule la nota final de la materia, sabiendo que ésta se determina de la siguiente manera: la nota del primer parcial representa el 30% del total, la nota del segundo parcial representa el 20%, y la nota del trabajo práctico representa el 50%. 3. Se leen los coeficientes reales A, B y C correspondientes a una función cuadrática de la forma f(x) = Ax 2 + Bx + C que sabemos que tiene dos raíces reales. Escribir un programa que muestre estas dos raíces (qué hay que suponer sobre los datos de entrada?). 4. Luego de una carrera, se conocen la hora de largada y de llegada de un participante, expresadas como (horas, minutos). Ambas horas corresponden al mismo día. a) Escribir un programa que muestre el tiempo que tardó el participante en minutos. b) Escribir un programa que muestre este tiempo en horas y minutos. 5. Conociendo las tres notas obtenidas por un alumno en una materia, decidir y mostrar por pantalla si el alumno está aprobado o desaprobado, sabiendo que debe tener promedio mayor o igual a 6 para aprobar. a) ¿Cómo se modifica el programa si ahora se pide que todas las notas sean mayores o iguales a 6 para aprobar? 6. Escribir un programa para calcular el importe que se le facturará a un cliente por consumo de electricidad, sabiendo que la compañía cobra una tarifa fija de $20 pesos que incluye los primeros 200 KW consumidos, y los KW excedentes se cobran a $0.50 por KW. Además, se agregan $7.80 de impuestos. El programa

Transcript of aPracticasProgramacion

Programacin y Mtodos Numricos Prctica 1: Introduccin al lenguaje C 1. Escribir un programa que le pida al usuario las notas de dos exmenes parciales y que calcule el promedio de las dos notas, mostrando este promedio por pantalla con dos decimales. 2. Escribir un programa que le pida al usuario las notas de dos exmenes parciales y un trabajo prctico y que calcule la nota final de la materia, sabiendo que sta se determina de la siguiente manera: la nota del primer parcial representa el 30% del total, la nota del segundo parcial representa el 20%, y la nota del trabajo prctico representa el 50%. 3. Se leen los coeficientes reales A, B y C correspondientes a una funcin cuadrtica de la forma f(x) = Ax2 + Bx + C que sabemos que tiene dos races reales. Escribir un programa que muestre estas dos races (qu hay que suponer sobre los datos de entrada?). 4. Luego de una carrera, se conocen la hora de largada y de llegada de un participante, expresadas como (horas, minutos). Ambas horas corresponden al mismo da. a) Escribir un programa que muestre el tiempo que tard el participante en minutos. b) Escribir un programa que muestre este tiempo en horas y minutos. 5. Conociendo las tres notas obtenidas por un alumno en una materia, decidir y mostrar por pantalla si el alumno est aprobado o desaprobado, sabiendo que debe tener promedio mayor o igual a 6 para aprobar. a) Cmo se modifica el programa si ahora se pide que todas las notas sean mayores o iguales a 6 para aprobar? 6. Escribir un programa para calcular el importe que se le facturar a un cliente por consumo de electricidad, sabiendo que la compaa cobra una tarifa fija de $20 pesos que incluye los primeros 200 KW consumidos, y los KW excedentes se cobran a $0.50 por KW. Adems, se agregan $7.80 de impuestos. El programa debe tomar como entrada los valores del medidor al comienzo y al fin del perodo. 7. Un ao es bisiesto si es mltiplo de 4 pero no es mltiplo de 100. Como excepcin a esta regla, los aos que son mltiplos de 400 s son bisiestos (por ejemplo, el ao 1900 no fue bisiesto, pero el ao 2000 s lo fue). Escribir un programa que le pida un ao al usuario y que indique si ese ao fue o ser bisiesto. 8. Se leen los coeficientes reales A, B y C correspondientes a una funcin cuadrtica de la forma f(x) = Ax2 + Bx + C. Escribir un programa que determine la cantidad de races reales de la ecuacin, y que muestre las races reales en caso de que existan. a) Cmo se modifica el programa si ahora se pide calcular todas las races, sin importar si son reales o complejas?

Programacin y Mtodos Numricos Prctica 2: Ciclos y funciones Primera parte: ciclos

1. Escribir un programa que tome como parmetro un nmero entero positivo n, y que calcule lasuma 1 + 2 + 3 + + n. 2. Escribir un programa que le pida al usuario un nmero entero positivo y que calcule el factorial de ese nmero, informndolo por pantalla. 3. Escribir un programa que tome como parmetro un nmero entero positivo, y que calcule la suma de los divisores positivos del nmero ingresado (sin contar el mismo nmero). 4. Un nmero entero es primo si tiene exactamente dos divisores positivos. a) Escribir un programa que le pida al usuario un nmero entero positivo, y que informe si el nmero ingresado es primo. b) Repetir el punto anterior, pero ahora suponiendo que el nmero que ingresa el usuario puede ser negativo. 5. Modificar el programa del punto 1 para protestar en caso de que el nmero ingresado por el usuario no sea positivo, impidiendo continuar con las acciones hasta que el usuario ingrese un nmero positivo. 6. Escribir un programa que le permita a dos usuarios jugar a adivinar un nmero. El primer usuario introduce un nmero entre 1 y 100, y a continuacin el segundo usuario debe adivinar el nmero ingresado. Cada vez que el segundo usuario hace un intento, el programa debe informar si el nmero a adivinar es mayor o menor que el intento. El programa debe detenerse con un mensaje de felicitacin cuando el segundo usuario adivina el nmero. a) Modificar el programa para que al terminar informe la cantidad de intentos que fueron necesarios para adivinar el nmero.

b) Modificar el programa para que, adems del nmero a adivinar, el primer usuario informetambin el rango de nmeros donde el segundo usuario debe buscar (es decir, en lugar de buscar entre 1 y 100, el segundo usuario deber buscar entre n y m, siendo n y m dos nmeros introducidos por el primer usuario). El programa debe protestar si el segundo usuario introduce un nmero que no est en el rango indicado. 7. Escribir un programa que permita ingresar las notas de los 25 alumnos de una comisin, y que calcule la cantidad de alumnos con nota 10, la cantidad con nota 9, etc., informando estas cantidades al finalizar la carga de notas. 8. Escribir un programa que permita al usuario introducir una cantidad indeterminada de notas de un examen. El programa debe aceptar una nota continuamente mientras no se introduzcan notas invlidas (una nota vlida es una nota entre 1 y 10). Cuando se introduce una nota invlida, el programa debe terminar y mostrar por pantalla el promedio de las notas ingresadas.

9. Un negocio va a realizar un descuento del 25 % en todos sus precios. Escribir un programa que pregunte continuamente los precios de cada artculo, mostrando para cada uno el precio con el descuento. El programa se debe detener cuando se ingresa un artculo con precio igual a cero. a) Modificar el programa para que al comenzar solicite el porcentaje de descuento que se aplicar a todos los artculos. b) Modificar el programa para que al ingresar un artculo con precio negativo, se pida al usuario un nuevo porcentaje de descuento.

10. El nmero se puede aproximar por medio de la siguiente serie: = 2 1/3 + 1/5 1/7 + 1/9 1/11 + 1/13 1/15 + ... a) Escribir un programa que le pregunte al usuario la cantidad de trminos a sumar de la serie, y que muestre la aproximacin con esa cantidad de trminos.

b) Escribir un programa que le pida al usuario una tolerancia , y que sume todos lostrminos que sean mayores que la tolerancia. Segunda parte: funciones 11. Escribir una funcin que tome como parmetro un nmero entero y que retorne el factorial de ese nmero. Utilizar la funcin en un programa que calcule nmeros combinatorios. 12. Utilizando la funcin del ejercicio anterior, escribir un programa que aproxime el valor del nmero e por medio de la siguiente serie:e = 2+ 1 1 1 1 + + + +... 2! 3! 4! 5!

13. Escribir una funcin que tome como parmetro un nmero entero y que determine si el nmero es primo o no. Utilizar esta funcin para escribir un programa que calcule la cantidad de nmeros primos entre 1 y 1000. 14. Escribir una funcin que tome como parmetro un nmero real y que calcule el mdulo del nmero ingresado. Utilizar esta funcin para escribir un programa que le pida al usuario tres nmeros y que muestre por pantalla el promedio de los mdulos de estos nmeros.

Programacin y Mtodos Numricos Prctica 3 Aritmtica de punto flotante 1. Listar todos los nmeros que se pueden representar en un sistema de punto flotante binario con tres bits de mantisa, un bit de signo y dos bits en el exponente. Graficar estos nmeros en la recta real. 2. Escribir los siguientes nmeros en binario: a. b. c. d. e. f. x = 18 x = 25 x = 0.25 x = 0.625 x = 0.1 x = 0.2

En funcin de estos resultados, qu nmeros pueden ser expresados con un nmero finito de dgitos binarios a la derecha de la coma binaria? 3. Encontrar dos nmeros cuya representacin en punto flotante de simple precisin (23 bits en la mantisa) no sea exacta (es decir, que tengan error de representacin). 4. Encontrar dos nmeros cuya representacin en punto flotante de simple precisin sea exacta, pero cuya suma en esta representacin no sea exacta. 5. Es posible encontrar dos nmeros positivos cuya suma en punto flotante de simple precisin sea menor que el mayor de ambos nmeros? 6. Se deben sumar 10 nmeros reales positivos de distintas magnitudes. Con cul de las siguientes estrategias se obtiene un menor error absoluto? a. Sumarlos de mayor a menor b. Sumarlos de menor a mayor c. Sumarlos en un orden aleatorio 7. Qu significa un error absoluto de 0.5 unidades? Qu significa un error relativo de 0.01? Qu significa un error porcentual de 0.01? Cul de estas medidas de error es preferible en general?

Programacin y Mtodos Numricos Prctica 4 Bsqueda de races de funciones

1. Escribir un programa que aproxime el valor de la raz cuadrada de 2 por medio del mtodo debiseccin aplicado a la funcin f(x) = x2 2, tomando como datos de entrada el intervalo donde ejecutar el mtodo y la cantidad de iteraciones. a. Modificar el programa para que proteste en caso de que la funcin no cambie de signo en el intervalo especificado. b. Modificar el programa para que en lugar de tomar como dato de entrada la cantidad de iteraciones, tome como dato la precisin requerida para la raz, y que interrumpa la bsqueda cuando se alcanz la precisin especificada.

2. Escribir un programa que aproxime el valor de la raz cuadrada de 2 por medio del mtodo deNewton-Raphson aplicado a la funcin f(x) = x2 2, tomando como datos de entrada el punto inicial para el mtodo y la cantidad de iteraciones. Cmo se compara la convergencia de este mtodo con el implementado en el punto anterior?

3. Escribir una funcin que resuelva la ecuacin x = tg(x) por medio del mtodo de NewtonRaphson, tomando como parmetro el punto inicial para el mtodo y la tolerancia para el valor de la funcin en la raz hallada (es decir, si x es la raz encontrada por el mtodo, debe cumplirse que | f(x) | < ). 4. El coeficiente de friccin para el flujo de una suspensin de partculas fibrosas se puede relacionar con el nmero de Reynolds mediante la siguiente ecuacin emprica:1 f = 1 ln(R e k f ) +(14 5.6 ). k

En esta ecuacin, f es el coeficiente de friccin, Re es el nmero de Reynolds y k es una constante determinada por la concentracin de la suspensin. Para una suspensin con 0.08 % de concentracin, se tiene que k = 0.28. Cul es el valor de f si Re = 3750? 5. En estudios sobre recoleccin de energa solar al enfocar un campo de espejos planos en un colector central, se obtiene la siguiente ecuacin para el factor de concentracin geomtrica C:C = F 0.5 D (1 +sen(A - 0.5 cos(A ) ))2

(h / cos(A ))

2

,

donde A es el ngulo del anillo del campo, F es la cobertura fraccionaria del campo con los espejos, D es el dimetro del colector y h es la altura del mismo. Encontrar el valor de A, si h = 300, C = 1200, F = 0.8 y D = 14.

6. La razn de flujo de agua en una corriente a veces se mide mediante la instalacin de una presa.Esto supone la construccin de un dique a travs de la corriente con una muesca en forma de V cerca del centro (la punta de la muesca est hacia abajo). Si se desprecia la velocidad contracorriente, el flujo Q est relacionado con la distancia h de la superficie del agua a

contracorriente al punto de la V y con el ngulo (en grados) entre los lados de la muesca mediante la frmula:Q = 0.59 * 8 tg( ) 15 2 2g h 2.5 ,

donde g = 9.8 es la constante gravitacional. Si Q = 200, escribir un programa que genere una tabla que muestre cmo est relacionada h con para valores de entre 20 y 130 grados.

Programacin y Mtodos Numricos Prctica 5 Integracin numrica 1. Escribir un programa que le pida al usuario dos nmeros reales a y b, junto con el paso de integracin h > 0, y que calcule la siguiente integral por el mtodo de suma de rectngulos, el mtodo del trapezoide y el mtodo de Simpson:I =b

a

x sen(x) dx

Comparar la precisin de los tres mtodos en funcin del paso de integracin. 2. Cmo se modifica el programa del punto anterior si, en lugar del paso de integracin, el programa pide al usuario la cantidad de subintervalos en la cual se debe dividir el intervalo de integracin? 3. Escribir tres funciones que tomen como parmetros tres nmeros reales a, b, h, y que calculen la siguiente integral numrica por medio del mtodo de suma de rectngulos, el mtodo del trapecio y el mtodo de Simpson, respectivamente, tomando h como paso de integracin:I = e -xa b2

/2

dx

El programa debe llamar a las tres funciones con distintos valores de h, mostrando los resultados por pantalla en forma de tabla, de manera de poder compararlos. Qu conclusiones se pueden obtener en cuanto a la precisin de estos mtodos?

4. Escribir un programa para calcular la integral del ejercicio 1, pero que tome dos pasos deintegracin h1 y h2, tales que h1 < h2. El programa debe usar el segundo paso de integracin cuando el mdulo de la derivada de la funcin a integrar es menor que 2, y el primer paso de integracin en caso contrario. Por qu es conveniente usar este mtodo? 5. A pesar de que los mtodos de integracin numrica proporcionan resultados aproximados, puede suceder que para algunas funciones estos mtodos encuentren el valor exacto de la integral si no se tienen en cuenta los errores numricos. a. Encontrar una funcin para la cual el mtodo del trapezoide encuentre la integral exacta pero tal que el mtodo de Simpson no encuentre la integral en forma exacta. b. Encontrar una funcin para la cual el mtodo de Simpson encuentre el valor exacto de la integral, pero tal que el mtodo del trapezoide no encuentre el valor exacto.

Programacin y Mtodos Numricos Prctica 6 Arreglos y matrices Primera parte: Arreglos 1. Escribir un programa que le pida al usuario un conjunto de nmeros y que muestre por pantalla el promedio de los valores introducidos. El programa debe preguntarle primero al usuario cuntos nmeros desea ingresar. a) Modificar el programa para que muestre tambin la varianza de los valores introducidos por el usuario. 2. Escribir un programa que le pida al usuario un conjunto de nmeros y que muestre por pantalla el mximo y el mnimo valor ingresados. El programa debe preguntarle primero al usuario cuntos nmeros desea ingresar. a) Modificar el programa para que muestre tambin en qu posicin del arreglo se encuentran los valores mximo y mnimo. 3. Escribir un programa que le pida al usuario un conjunto de nmeros y que encuentre la moda de los nmeros introducidos (la moda de una muestra es el valor que ms se repite en la muestra).

4. Escribir cuatro funciones que tomen como parmetro un arreglo de enteros b y un entero x, yque implementen las siguientes operaciones:

a) b) c) d)

Determinar si el nmero x aparece en el arreglo. Determinar la cantidad de veces que el nmero x se encuentra en el arreglo. Determinar la posicin de la primera aparicin de x en el arreglo. Determinar la posicin de la ltima aparicin de x en el arreglo.

5. Escribir una funcin que implemente el mtodo de ordenamiento por burbujeo. Utilizar esta funcin en un programa que le pida al usuario un conjunto de nmeros y que los muestre ordenados. Segunda parte: Matrices

6. La traza de una matriz cuadrada es la suma de los elementos de su diagonal. Escribir unafuncin que tome como parmetro una matriz cuadrada y que calcule su traza.

7. La norma de Frobenius de una matriz cuadrada A nxn se define como:|| A || F =

ai =1 j=1

n

n

2 ij

.

Escribir una funcin que tome como parmetro una matriz cuadrada y que calcule su norma de Frobenius.

8. Escribir una funcin que tome como parmetro una matriz y que calcule la densidad de la matriz (es decir, la proporcin de celdas no nulas de la matriz). 9. Escribir un programa que le permita al usuario calcular el producto de una matriz por un vector. El usuario debe ingresar la matriz y el vector, y el programa debe mostrar por pantalla el resultado del producto. 10. Escribir un programa que le permita al usuario calcular el producto de dos matrices de dimensiones adecuadas. El usuario debe ingresar las dos matrices, y el programa debe mostrar por pantalla el resultado del producto.

Programacin y Mtodos Numricos Prctica 7 Sistemas de ecuaciones lineales 1. Escribir una funcin que tome como parmetro una matriz cuadrada y que triangule la matriz segn el mtodo de Gauss-Jordan sin pivoteo.

a. Modificar la funcin para que detecte la existencia de pivotes nulos, y que interrumpael proceso mostrando un mensaje de error en ese caso. Para este punto, consideramos que un pivote aii es nulo si | aii | < 10-8. b. Modificar la funcin para que tome como parmetro una matriz extendida, que representa un sistema de ecuaciones lineales. 2. Escribir una funcin que tome como parmetro una matriz extendida (que representa un sistema de ecuaciones) triangular superior y que calcule la solucin del sistema de ecuaciones. 3. Combinar las funciones de los dos puntos anteriores para escribir un programa que le pida al usuario un sistema de ecuaciones cuadrado y que muestre por pantalla la solucin del sistema, obtenida por el mtodo de Gauss-Jordan sin pivoteo. Utilizando este programa, resolver los siguientes sistemas de ecuaciones diagonal dominantes:4 1 Ax = b, con A = 0 1 5 1 A = 1 Ax = b, con 0 0 1 4 1 1 1 5 1 1 0 0 1 4 1 1 1 5 1 1 0 2 0 3 y b = 2 . 1 1 4 0 1 1 5 1 0 2 0 2 1 y b =5 . 1 2 1 5

a.

b.

4. Modificar el programa del punto anterior para realizar la resolucin del sistema de ecuaciones (que debe ser cuadrado) por medio del mtodo de Gauss-Jordan con pivoteo parcial. a. Graficar el tiempo que tarda la resolucin del sistema en funcin de la cantidad de filas de la matriz. Cul es el tamao del sistema ms grande que el programa puede resolver en un tiempo de 2 minutos? 5. Si se detecta un pivote nulo durante el proceso de pivoteo parcial, entonces se puede afirmar que el sistema no es compatible determinado. Modificar el programa del punto anterior para detectar esta situacin.

Programacin y Mtodos Numricos Prctica 8 Interpolacin

1. Consideremos la funcin f(x) = ex, definida en el intervalo 0 x 2. a. Aproximar f(0.25) interpolando linealmente los valores de f en x0 = 0 y x1 = 0.5. b. Aproximar f(0.75) interpolando linealmente los valores de f en x0 = 0.5 y x1 = 1. c. Aproximar f(0.25) y f(0.75) interpolando ahora con un polinomio cuadrtico los valoresde f en x0 = 0, x1 = 1 y x2 = 2. d. Comparar los resultados obtenidos con los valores reales de la funcin. 2. Mostrar un ejemplo de puntos provenientes de una funcin cuya interpolacin con el polinomio interpolador de Lagrange no sea satisfactoria. a. En qu casos se puede garantizar de antemano que la interpolacin obtenida con este mtodo se ajustar a la funcin que origin los datos?

3. Encontrar el spline cbico natural que interpola los datos f(0) = 0, f(1) = 1 y f(2) = 2. 4. Muestrear la funcin f(x) = sen(x) en los puntos xi = 0.5 i, para i = 0, , 8 e interpolar lospuntos obtenidos por medio de un spline cbico natural. Qu puede decir de la aproximacin obtenida por medio de la interpolacin? 5. Si los datos a interpolar se encuentran alineados en una recta, qu podemos decir del spline cbico natural que los interpola? 6. La siguiente tabla registra las variaciones en la magnitud aparente de una estrella, en funcin de su fase: Fase Magnitud -110 7.98 -80 8.95 -40 10.7 1 -10 11.7 0 30 10.0 1 80 8.23 110 7.86

a. Los datos son peridicos en el sentido de que la magnitud para la fase -120 es igual que para la fase +120. Tomando esto en cuenta, interpolar por medio de un spline los datos precedentes. b. Los siguientes datos corresponden a otras mediciones de la misma estrella: Fase Magnitud -100 8.37 -60 9.40 -20 11.3 9 20 10.8 4 60 8.53 100 7.89

Con cunta precisin se pueden estimar estos nuevos valores con la interpolacin realizada en el punto anterior?

Programacin y Mtodos Numricos Prctica 9 Tcnicas de diseo de algoritmos 1. Implementar un programa que permita resolver el problema de la mochila por medio de programacin dinmica. 2. La serie final de la NBA consiste en una secuencia de partidos entre los dos equipos finalistas, y el primer equipo en ganar n partidos es el ganador de la serie. Suponemos que los dos equipos tienen la misma probabilidad 0.5 de ganar cada partido. Sea P(i,j) la probabilidad de que el equipo A gane la serie, considerando que A necesita ganar i partidos para ganar la serie y que B necesita j partidos para ganar la serie. a. Formular una relacin de recurrencia para calcular los valores de P(i,j). b. Implementar un programa basado en programacin dinmica que permita obtener P(i,j) para valores de i y j dados por el usuario. c. Cunto vale P(n,n)? Verifique su respuesta con el programa implementado. 3. Proponer un algoritmo basado en backtracking para determinar la mejor jugada en un juego de ta-te-ti, y realizar un seguimiento del algoritmo propuesto partiendo de las siguientes configuraciones: a. Una configuracin ganadora. b. Una configuracin perdedora. c. Una configuracin neutral. 4. Proponer un algoritmo basado en backtracking para el problema de las n reinas, y realizar un seguimiento del algoritmo para el caso n = 5. 5. Supongamos que f(x) toma valores entre 0 y 1 en el intervalo [0,1]. Implementar una forma general del mtodo de Montecarlo para el clculo de la siguiente integral:I = f(x d . ) x0 1

Implementar un programa que le pida al usuario el nmero de puntos a generar y que aproxime esta integral para f(x) = cos(x). Ejecutar el programa para distintos nmeros de puntos y comparar con el valor real de la integral. Qu conclusiones se pueden obtener? 6. Sea f(x) una funcin acotada en el intervalo [a,b], y supongamos que f(x) toma valores entre c y d en este intervalo. Generalizar el mtodo del ejercicio anterior para calcular la siguiente integral en forma numrica:I = f(x d . ) x0 1