Professional Documents
Culture Documents
Fundamentos de Programacion Sesion 08
Fundamentos de Programacion Sesion 08
FUNDAMENTOS DE PROGRAMACIÓN
Problemas para la sesión 8
Utilizando el producto de Wallis se puede calcular fácilmente el valor de π. A medida que se incrementa
el número de términos de la productoria, se obtienen valores de π con menor error de aproximación. Se
le pide que elabore un algoritmo expresado en pseudocódigo y un programa en lenguaje C que solicite la
cantidad de términos con la que desea calcular el producto de Wallis, determine el valor aproximado de π
e indique el error absoluto si es que se sabe que el valor de π con 10 dı́gitos decimales es 3.1415926535. En
caso el usuario ingrese una cantidad de términos menor o igual a cero, deberá emitir el siguiente mensaje
de error La cantidad de términos debe ser mayor que cero.
Recuerde que:
Se le pide que diseñe un pseudocódigo y elabore un programa en lenguaje C que solicite el máximo
error absoluto permitido y teniendo en consideración este valor calcule el valor de π correspondiente,
indique la cantidad de términos que fueron necesarios añadir a la productoria e imprima el error
absoluto obtenido si es que se sabe que el valor de π con 10 dı́gitos decimales es 3.1415926535.
En caso el usuario ingrese un error absoluto menor o igual a cero, el programa deberá emitir el
siguiente mensaje de error El error absoluto debe ser mayor a cero.
Curiosidad matemática
El valor de π con una aproximación de 1000 dı́gitos decimales es:
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628
03482534211706798214808651328230664709384460955058223172535940812848111745028410270193
85211055596446229489549303819644288109756659334461284756482337867831652712019091456485
66923460348610454326648213393607260249141273724587006606315588174881520920962829254091
71536436789259036001133053054882046652138414695194151160943305727036575959195309218611
73819326117931051185480744623799627495673518857527248912279381830119491298336733624406
56643086021394946395224737190702179860943702770539217176293176752384674818467669405132
00056812714526356082778577134275778960917363717872146844090122495343014654958537105079
22796892589235420199561121290219608640344181598136297747713099605187072113499999983729
78049951059731732816096318595024459455346908302642522308253344685035261931188171010003
13783875288658753320838142061717766914730359825349042875546873115956286388235378759375
19577818577805321712268066130019278766111959092164201989
2. Transformación a base 10
El sistema hexadecimal HEX es el sistema de numeración posicional que tiene como base el 16. Su
uso actual está muy vinculado a la informática ya que las operaciones del CPU suelen usar el byte como
unidad básica de memoria pues un byte, representa 28 valores (0 − 255), y esto puede representarse como
28 = 24 ∗ 24 = 16 ∗ 16 = 162 = 1 ∗ 162 + 0 ∗ 161 + 0 ∗ 160 , que equivale al número 100 en base 16 (10016 ),
es decir, tres dı́gitos hexadecimales en lugar de los ocho dı́gitos que hubiéramos usado en base 2. En
principio, dado que el sistema usual de numeración es de base decimal y, por ello, solo se dispone de diez
dı́gitos, se adoptó la convención de usar las seis primeras letras del alfabeto latino para suplir los dı́gitos
que faltan. El conjunto de sı́mbolos es el siguiente: S = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F .
Se debe notar que A = 10, B = 11, C = 12, D = 13, E = 14 y F = 15. Asimismo, existe el sistema de
numeración octal y utiliza los dı́gitos del 0 al 7. En informática a veces la numeración octal es utilizada
en lugar de la hexadecimal, debido a la ventaja de que no es requerido utilizar sı́mbolos diferentes a los
dı́gitos. Como en cualquier sistema de numeración posicional, el valor numérico de cada dı́gito es alterado
dependiendo de su posición en la cadena de dı́gitos, quedando multiplicado por una cierta potencia de la
base del sistema.
Por ejemplo:
1203718 = 1 ∗ 85 + 2 ∗ 84 + 0 ∗ 83 + 3 ∗ 82 + 7 ∗ 81 + 1 ∗ 80 = 4120910
Recordar que:
Recuerde que el carácter ‘A’ es representado por el código ASCII 65, y tiene valor numérico 10.
Por otro lado, el carácter ‘0’ es representado por el código ASCII 48, y tiene valor numérico 0. Los
códigos ASCII son valores sucesivos por lo que ‘1’ tiene código ASCII 49 y ‘B’ tiene código ASCII
66. Recomendación: si se tiene el carácter ‘A’ y se desea obtener el valor numérico 10, bastarı́a con
restarle 55 al código ASCII correspondiente al carácter ‘A’.
Ingrese base: 16
Ingrese cantidad de dı́gitos: 4
Ingrese el dı́gito 1: 3
Ingrese el dı́gito 2: E
Ingrese el dı́gito 3: 0
Ingrese el dı́gito 4: A
El número en base 10 es 41187
Ingrese base: 16
Ingrese cantidad de dı́gitos: 4
Ingrese el dı́gito 1: 3
Ingrese el dı́gito 2: e
Ingrese el dı́gito 3: 0
Ingrese el dı́gito 4: a
El número en base 10 es 41187
Ingrese base: 2
Ingrese cantidad de dı́gitos: 5
Ingrese el dı́gito 1: 0
Ingrese el dı́gito 2: 1
Ingrese el dı́gito 3: 1
Ingrese el dı́gito 4: 0
Ingrese el dı́gito 5: 1
El número en base 10 es 22
Ingrese base: 8
Ingrese cantidad de dı́gitos: 6
Ingrese el dı́gito 1: 1
Ingrese el dı́gito 2: 7
Ingrese el dı́gito 3: 3
Ingrese el dı́gito 4: 0
Ingrese el dı́gito 5: 2
Ingrese el dı́gito 6: 1
El número en base 10 es 41209
Ingrese base: 16
Ingrese cantidad de dı́gitos: 6
Ingrese el dı́gito 1: A
Ingrese el dı́gito 2: 0
Ingrese el dı́gito 3: Z
Ha ingresado un dı́gito inválido para la base seleccionada
Ingrese a~
no de inicio: 1960
Ingrese a~
no fin: 1963
Resultado:
20-03-1960
15-04-1960
12-05-1960
10-06-1960
06-10-1960
05-12-1960
21-03-1963
09-07-1963
07-09-1963
En los números, existen los números capicúas, los cuales se comportan como las palabras ”palı́ndro-
mas”, es decir, el número leı́do de izquierda a derecha y de derecha a izquierda son iguales, por ejemplo:
12321
Para este ejercicio, vamos a realizar una similitud entre las palabras palı́ndromas, i-palindromas,
d-palindromas y distinguidas, trasladando el mismo concepto hacia los números capicúas, i-capicúas, d-
capicúas y distinguidos, por lo que tendrı́amos:
Un módulo principal que lea la cantidad de cifras de un número, el número y evalúe si el número
es distinguido. Debe realizar las validaciones que considere necesarias.
Un módulo evaluarDatos que reciba como parámetro la cantidad de cifras y un número y devuelva
si el número posee la cantidad de cifras ingresadas.
Un módulo evaluarCapicuas que reciba como parámetro la cantidad de cifras, un número y
devuelva, a través de parámetros que modifican su valor, si el número es capicúa, i-capicúa y d-
capicúa.
Un módulo evaluarSiEsCapicua que reciba como parámetro la cantidad de cifras, un número y
devuelva si el número es capicúa
La primera aportación relevante fue hecha por Jacobo Bernoulli en 1689 cuando demostró la conver-
gencia de dicha serie. Más tarde, en 1728–1729, D. Bernoulli calculó su valor con una precisión de una
centésima. Stirling aumentó la precisión hasta los ocho primeros decimales al año siguiente.
Cuatro años después, Euler calculó el valor con dieciocho cifras decimales y se dio cuenta de que
π2
coincidı́an con la expresión de . En años posteriores, Euler no sólo demostró que, efectivamente, ese
6
1 1 1
era el valor de dicha suma, sino que calculó 1 + k + k + k + ... para k par.
2 3 4
Sólo en contadas ocasiones es factible calcular de manera explı́cita la suma de una serie. La mayorı́a
de las veces serán necesarios medios indirectos. La dificultad radica en el cálculo explı́cito del valor de las
sumas parciales. Si sabemos cuánto valen, el problema de estudiar la convergencia de la serie se reduce a
un problema de cálculo de lı́mites, cosa normalmente mucho más sencilla.
Se desea elaborar un programa en lenguaje C que permita verificar que la serie cumpla la tendencia
hacia el número indicado cuando la sumatoria tiende al infinito, para ello debe utilizar la siguiente serie
(ver Figura 2 ):
Solicitar el valor de n.
Validar que la cantidad de términos leı́da sea mayor que cero y que el valor de n leı́do sea mayor
que 1, en caso contrario deberá mostrar un mensaje al usuario.
En caso de que la cantidad de términos ingresado sea mayor que cero y que el valor de n leı́do sea
mayor que 1, deberá invocar a una función para que realice la aproximación de la serie solicitada.
La función se llamará calcular serie.
La función calcular serie recibirá como parámetro la cantidad de términos y el valor de n. Deberá
calcular la sumatoria de la serie dada anteriormente. La función deberá retornar la sumatoria
calculada.
Deberá imprimir el valor devuelto por la función y el valor real en el programa principal.
En caso el valor absoluto de la diferencia del valor calculado por la función y el valor real sea
menor que 0.00001 deberá mostrar un mensaje indicando que la serie cumple la tendencia, en caso
contrario deberá mostrar un mensaje indicando que la serie no cumple con la tendencia definida.
Se sabe que cada lado del cuadrado tiene longitud de 4 unidades y sus vértices se encuentran son
A(-2,2), B(2,-2), C(2,2) y D(-2,2). Además, se sabe que la fórmula de la circunferencia (coloreado con
rojo) que se encuentra dentro del cuadrado es x2 + y 2 = 1.
Para calcular el área por el método de Montearlo deberá generar de forma aleatoria varios puntos que
se encuentren dentro del cuadrado. El área aproximada de la circunferencia estará dada por la cantidad
de puntos generados de forma pseudoaleatoria que se encuentran dentro de la circunferencia dividido
entre el total de puntos generados y este resultado se multiplica por el área del cuadrado.
En el programa que implemente deberá:
Validar que la cantidad leı́da sea mayor que cero, en caso contrario deberá mostrar un mensaje al
usuario.
En caso de que el número ingresado sea mayor que cero, deberá invocar a una función para que
realice la aproximación del área solicitada. La función se llamará metodo montecarlo.
En caso de que la función retorne un valor mayor que cero, deberá imprimir el resultado en el
programa principal (función main).
Para generar un número pseudoaleatorio de tipo double entre [-2,2] en lenguaje C incluya el archivo
de cabecera stdlib.h y use la siguiente expresión:
Recordar que:
Recuerde que, dado que se están usando números pseudoaleatorios, es altamente probable que
el área aproximada que le resulte a usted, no sea exactamente igual a los casos presentados a
continuación. Pero deberá ser un número muy aproximado a los valores mostrados.
Nombre: dos primeros dı́gitos de más a la izquierda que representan una letra entre la A y la Z
(código ASCII mayúsculas).
Apellido paterno: tercer y cuarto dı́gito contando desde la izquierda que representan una letra entre
la A y la Z (código ASCII mayúsculas).
Apellido materno: quinto y sexto dı́gito contando desde la izquierda que representan una letra entre
la A y la Z (código ASCII mayúsculas).
A: formada por Documento nacional de identidad, seguido por apellido materno, seguido por ape-
llido paterno y finalmente el nombre.
B: formada por apellido materno, seguido por apellido paterno, seguido del nombre y finalmente
el Documento nacional de identidad.
Tomar en cuenta:
Inicial nombre:b
Inicial apellido paterno:A
Inicial apellido materno:B
DNI:75453243
Usando el modo de encriptación A
Iniciales inválidas
Como el método requiere que tanto el Minuendo como el Sustraendo tengan la misma cantidad de
dı́gitos se debe completar al número obtenido en el paso anterior con nueves por la izquierda hasta
completar la cantidad de dı́gitos del Minuendo. Para el ejemplo 4,067 se convertirá en 9,994,067,
dado que el Minuendo del ejemplo (4,687,945) tiene siete dı́gitos. De esta manera hemos conseguido
el complemento a nueve del Sustraendo.
El siguiente paso consiste en sumar al Minuendo el complemento a nueve del Sustraendo obtenido
en el paso anterior. En el ejemplo al sumar 4,687,945 y 9,994,067 se obtiene 14,682,012.
El método termina omitiendo el primer dı́gito de la izquierda (que siempre será 1) y sumándole
uno a la cantidad obtenida. Por lo que en el ejemplo al número 14,682,012 primero se le omite el
primer dı́gito de la izquierda obteniendo 4,682,012 para después sumarle uno al número obteniendo
4,682,013 número que es el resultado de la resta del Minuendo y Sustraendo dados como ejemplo.
Recordar que:
Preparado por Andrés Melgar y Layla Hirsh, actualizado por Iván Caldas
Pando, 30 de setiembre de 2023