Está en la página 1de 117

Pontificia Universidad Católica del Perú

Estudios Generales Ciencias

1INF01 - Fundamentos de Programación

N

AC
Guía de laboratorio #4


M

AS
Programación Modular

PE
RA

CI
G

L
EN

DE
O
PR

CI

CA
ES
DE

LI
L


S

A
TO

ER

CA
EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN
IA
IC
IF
NT
PO

8 de septiembre de 2022
i

Índice general

Historial de revisiones 1

N

Siglas 2

AC


1. Guía de Laboratorio #4 3

AS
1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

PE
RA

CI
1.2. Materiales y métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
G

L
EN
1.3. Programación modular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

DE
O
PR

1.4. Tipos de subprogramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


CI 4

CA
1.5. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
ES
DE

1.5.1. Declaración de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

LI
L

1.5.2. Definición de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6



S

A
TO

ER

1.5.3. Accesos a una función . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6


CA
EN

1.5.4. Argumentos de las funciones, llamadas por valor y por referencia . . . . . . . . . . . . . 8


EN

1.6. Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
AM

DA

1.7. Cálculo del número e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10


S
ND

SI

1.7.1. Cálculo del número e en una función . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11


DI

ER

1.8. Cálculo del seno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15


FU

TU

1.8.1. Cálculo del seno con una función . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16


IV
ES

1.9. Cálculo del crecimiento exponencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18


UN

1.9.1. Leyendo los datos de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18


IA

1.9.2. Usando la función numero_e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19


IC

1.9.3. Solución propuesta para el cálculo del crecimiento exponencial . . . . . . . . . . . . . . 21


IF

1.10. Los números casi primos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22


NT

1.10.1. Leyendo los datos de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22


1.10.2. Creamos la función evaluar_casi_primo . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
PO

1.10.3. Usando la función evaluar_si_es_primo . . . . . . . . . . . . . . . . . . . . . . . . . . 24

2. Ejercicios propuestos 26
2.1. Nivel básico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
ii

2.1.1. Los polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26


2.1.2. Movimiento armónico simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.1.3. Máximo común divisor de 2 números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.1.4. Mínimo común múltiplo de 2 números . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.1.5. El pentágono regular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.6. Los intervalos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.1.7. Implementación de un menú con diferentes operaciones . . . . . . . . . . . . . . . . . . 31
2.1.8. Tres números consecutivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.1.9. Función Gaussiana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

N
2.1.10. Cálculo del número Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36


2.2. Nivel intermedio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

AC
2.2.1. La conjetura de Collatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36


M
2.2.2. Las rectas paralelas y perpendiculares . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

AS

PE
2.2.3. Los números catalanes
RA
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

CI
2.2.4. Lejos de los primos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
G

L
EN

DE
O

2.2.5. Los primos truncables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38


PR

CI
2.2.6. La conjetura de Goldbach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

CA
2.2.7. Encontrar el capicúa más cercano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
ES
DE

LI
2.2.8. Rotación de números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
L


S

2.2.9. El reloj digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41


TO

ER

CA

2.2.10. Coordenadas polares y cartesianas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42


EN

EN

2.3. Nivel avanzado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43


D
AM

2.3.1. Números deficientes, abundantes, perfectos y semiperfectos . . . . . . . . . . . . . . . . 43


G

DA

2.3.2. Números felices e infelices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45


S
ND

SI

2.3.3. Conversión de un número en base 10 a una base inferior . . . . . . . . . . . . . . . . . . 46


DI

ER
FU

2.3.4. Suma de números de máximo 3 cifras hasta la base 10 . . . . . . . . . . . . . . . . . . . 47


TU

IV

2.3.5. Resta de números de máximo 3 cifras hasta la base 10 . . . . . . . . . . . . . . . . . . . 49


ES

UN

2.3.6. Límite de una función mediante aproximaciones . . . . . . . . . . . . . . . . . . . . . . . 50


2.3.7. Número de pasos para llegar a la constante de Kaprekar de 3 cifras . . . . . . . . . . . . 52
IA

2.3.8. Número Lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54


IC

2.3.9. Sumatoria de primeros números compañeros de Pell . . . . . . . . . . . . . . . . . . . . 55


IF

2.3.10. Validación de una contraseña numérica . . . . . . . . . . . . . . . . . . . . . . . . . . . 56


NT

2.3.11. Misteriosos números múltiplos de 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58


PO

2.3.12. Número Harshad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59


2.3.13. Trabajo realizado para extraer el líquido de un cilindro (adaptado del laboratorio 3 del
ciclo 2020-2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
2.3.14. Trabajo realizado para extraer el líquido de un cono (adaptado del laboratorio 3 del ciclo
2020-2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Capítulo 0: Índice general iii

2.3.15. Trabajo realizado para comprimir o alargar un resorte (adaptado del laboratorio 3 del
ciclo 2020-2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.3.16. Trabajo realizado por una fuerza variable (adaptado del laboratorio 3 del ciclo 2020-2) . 68
2.3.17. Desplazamiento, velocidad promedio y velocidad instantánea (adaptado del laboratorio
3 del ciclo 2020-2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
2.3.18. Aceleración promedio e instantánea (adaptado del laboratorio 3 del ciclo 2020-2) . . . . 72
2.3.19. Centro de masa de un sistema bidimensional (adaptado del laboratorio 3 del ciclo 2020-2) 74
2.3.20. Centro de masa de una placa delimitada entres dos curvas (adaptado del laboratorio 3
del ciclo 2020-2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
2.3.21. Fuerza y presión de un fluido (adaptado del laboratorio 3 del ciclo 2020-2) . . . . . . . . 79

N
2.3.22. Fuerza y presión de un fluido sobre una cara vertical de un hexaedro regular (adaptado


del laboratorio 3 del ciclo 2020-2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
2.3.23. Fuerza y presión de un fluido sobre una pared vertical de un semicilindro horizontal

AC
(adaptado del laboratorio 3 del ciclo 2020-2) . . . . . . . . . . . . . . . . . . . . . . . . 83


M

AS
2.3.24. Desplazamiento en base a la velocidad y el tiempo (adaptado del laboratorio 3 del ciclo

PE
RA
2020-2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

CI
2.3.25. Longitud de arco (adaptado del laboratorio 3 del ciclo 2020-2) . . . . . . . . . . . . . . 88
G

L
EN

DE
O

2.3.26. Cálculos matemáticos (adaptado del laboratorio 3 del ciclo 2021-1) . . . . . . . . . . . . 90


PR

CI
2.3.27. Números capicúas (adaptado del laboratorio 3 del ciclo 2021-1) . . . . . . . . . . . . . . 91

CA
2.3.28. Números narcisista (adaptado del laboratorio 3 del ciclo 2021-1) . . . . . . . . . . . . . 92
ES
DE

LI
2.3.29. Números primos y abundantes (adaptado del laboratorio 3 del ciclo 2021-1) . . . . . . . 93
L


S

2.3.30. Operaciones matemáticas (adaptado del laboratorio 3 del ciclo 2021-1) . . . . . . . . . . 94


TO

ER

CA

2.4. Área bajo la curva - Riemman y Simpson (adaptado del laboratorio 5 del ciclo 2021-2) . . . . . 96
EN

EN

2.5. Área bajo la curva - Simpson y método del trapecio (adaptado del laboratorio 5 del ciclo 2021-2)100
D
AM

2.6. Circunferencias y rectas (adaptado del laboratorio 5 del ciclo 2021-2) . . . . . . . . . . . . . . . 103
G

DA

2.7. Sumatorias (adaptado del laboratorio 5 del ciclo 2021-2) . . . . . . . . . . . . . . . . . . . . . . 108


S
ND

SI
DI

ER

Bibliografía 113
FU

TU

IV
ES

UN
IA
IC
IF
NT
PO
1

Historial de Revisiones

Revisión Fecha Autor(es) Descripción


1.0 30.08.2019 C.Aguilera Versión inicial.

N
1.0 30.08.2019 D.Allasi Versión inicial.


2.0 10.05.2020 J.Baldeón Se actualizó la parte teórica y los ejemplos.

AC
2.1 10.05.2020 C.Aguilera Se actualizaron los ejercicios propuestos.


2.2 11.05.2020 I.Brossard Se actualizaron los ejercicios propuestos.

M
2.3 12.05.2020 J.Baldeón Se realizó la integración y revisión de los ejercicios a la guía.

AS

PE
2.4 29.09.2020 J.Baldeón
RA
Se incrementó la cantidad de problemas propuestos y se

CI
clasificaron en las categorías de nivel básico, nivel interme-
G

L
dio y nivel avanzado.

EN

DE
O

2.5 14.04.2021 J.Zárate Se incrementó la cantidad de problemas propuestos.


PR

2.6 24.09.2021 J.Zárate Se incrementó la cantidad de problemas propuestos de nivel


CI
avanzado.

CA
2.7 25.04.2022 J.Zárate Se incrementó la cantidad de problemas propuestos de nivel
ES
DE

avanzado.

LI
L

2.7.1 07.09.2022 R.Latorraca Se realizó la revisión para el semestre 2022-2.



S

A
TO

ER

CA
EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN
IA
IC
IF
NT
PO
2

Siglas

ASCII American Standard Code for Information Interchange

N
EEGGCC Estudios Generales Ciencias


IDE Entorno de Desarrollo Integrado

AC
Organización Mundial de la Salud


OMS

AS
PUCP Pontificia Universidad Católica del Perú

PE
RA

CI
RAE Real Academia Española
G

L
EN

DE
O
PR

CI

CA
ES
DE

LI
L


S

A
TO

ER

CA
EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN
IA
IC
IF
NT
PO
3

Capítulo 1

Guía de Laboratorio #4

N

AC
1.1. Introducción


M

AS
Esta guía ha sido diseñada para que sirva como una herramienta de aprendizaje y práctica para el curso de

PE
RA
Fundamentos de Programación de los Estudios Generales Ciencias (EEGGCC) en la Pontificia Universidad

CI
Católica del Perú (PUCP). En particular se focaliza en el tema “Programación Modular”.
G

L
EN

DE
O

Se busca que el alumno resuelva paso a paso las indicaciones dadas en esta guía contribuyendo de esta manera
PR

a los objetivos de aprendizaje del curso, en particular con la comprensión de la programación modular. Al
CI
finalizar el desarrollo de esta guía, complementado con la realización del correspondiente laboratorio, se espera

CA
que el alumno:
ES
DE

LI
L

Construya programas apoyados en la programación modular que utilice el paso de parámetros por valor

S

A
TO

y simule el paso de parámetros por referencia.


ER

CA
EN

EN

1.2. Materiales y métodos


D
AM

DA

Como herramienta para el diseño de pseudocódigos y diagramas de flujo se utilizará PSeInt1 . El PSeInt deberá
S
ND

SI

estar configurado usando el perfil PUCP definido por los profesores del curso. Como lenguaje de programación
DI

imperativo se utilizará el lenguaje C. Como Entorno de Desarrollo Integrado (IDE) para el lenguaje C se
ER
FU

utilizará Dev C++2 . No obstante, es posible utilizar otros IDEs como Netbeans, CLion o Eclipse.
TU

IV
ES

UN

1.3. Programación modular


IA

Hasta el momento, la construcción de cada programa se ha realizado en una única función (main) que contiene
todas las instrucciones. Y cada vez que se requiere reutilizar bloques de código se suele copiar, pegar y
IC

editar dichos bloques. A pesar de que esta técnica reduce las posibilidades de cometer errores, hay una mejor
IF

manera [13].
NT

Cuando el código de un programa se hace muy largo, se vuelve necesario optar por una estrategia que divida el
problema en subproblemas que luego sean abordados puntual e independientemente, enfocándose en resolver
PO

tareas específicas, que contribuyan al cumplimiento del objetivo general del programa principal.
La programación modular es un enfoque que consiste en dividir el desarrollo de un programa en elementos más
pequeños como subprogramas para así lograr resolver problemas más simples que sean fáciles de afrontar [1].
Cabe señalar que estos módulos o subprogramas se estructuran e integran jerárquicamente, ver figura 1.1,
1 http://pseint.sourceforge.net/
2 http://www.bloodshed.net/dev/devcpp.html
Capítulo 1: Guía de Laboratorio #4 4

como si fuera el organigrama de una empresa en el que se presenta la relación jerárquica de funciones en sus
miembros [3].

N

Figura 1.1: Diseño Top/Down: Diagrama de estructura o de módulos - Organigrama de una empresa.

AC
Un módulo es una abstracción que proporciona encapsulación lógica alrededor de una declaración, modelando


una o más abstracciones de datos y los subprogramas correspondientes que realizan ciertas operaciones útiles [1].

AS
Según Louden [9], un módulo es una unidad de programa con una interfaz pública y una implementación

PE
privada.
RA

CI
Cuando se proponen subprogramas que resuelvan abstracciones del programa, se habla de un diseño modular,
G

L
EN
que permite compartir funcionalidades con otros desarrolladores, permite la compilación separada y brinda

DE
O

la capacidad de expansión cuando se agregan nuevos módulos al sistema [2]. Adicionlamente, Kernighan [7]
PR

destaca las siguientes ventajas en el uso de subprogramas: CI

CA
ES
DE

Divide tareas grandes en varias pequeñas.

LI
L

Permiten nuevos desarrollos sobre lo ya hecho, en lugar de comenzar desde cero.



S

A
TO

Ocultan los detalles de operación de las partes del programa que no necesitan saber acerca de ello.
ER

CA

Permiten la legibilidad en la totalidad del código.


EN

EN

Facilitan la realización de cambios en el código.


D
AM

DA
S

1.4. Tipos de subprogramas


ND

SI
DI

ER

Los subprogramas son los bloques de construcción fundamentales de programas [14] y tienen las siguientes
FU

TU

características:
IV

Cada subprograma tiene un único punto de entrada.


ES

UN

La unidad del programa que invoca se suspende durante la ejecución del subprograma llamado, lo que
implica que solo hay un subprograma en ejecución en un momento dado.
IA

El control siempre vuelve al que lo invoca cuando finaliza la ejecución del subprograma.
IC
IF

Además, los subprogramas permiten al desarrollador considerar una secuencia de acciones como una acción
única que se puede invocar desde muchos otros puntos de un programa [9].
NT

De acuerdo con Sebesta [14], hay dos tipos fundamentales de subprogramas:


PO

Funciones, que retornan un valor.


Procedimientos, que no retornan ningún valor.

Para modularizar programas en el lenguaje C se utilizan las funciones [3], debido que no incluye a los proce-
dimientos como una forma separada de subprogramas. Es por ello que en el lenguaje C las funciones pueden
ser definidas sin valores de retorno para que puedan ser usadas como procedimientos [14].
Capítulo 1: Guía de Laboratorio #4 5

1.5. Funciones
Encontraremos algo común en los programas bien escritos: la función. Hemos venido utilizando en casi todos
nuestros programas las rutinas printf y scanf, que son ejemplos de funciones. De hecho, cada uno de los
programas también usó una función llamada main. Y es que una función proporciona el mecanismo para
producir programas que sean fáciles de escribir, leer, comprender, depurar, modificar y mantener [8].
En el lenguaje C, una función es un bloque de código en el que ocurre la actividad de un subprograma [12].
Cada programa en C puede considerarse como una colección de estas funciones. Usar una función es algo así
como contratar a una persona para que haga un trabajo específico para usted. A veces la interacción con esta
persona es muy simple, y a veces es compleja [6].
Supongamos que tenemos una tarea que siempre se realiza exactamente de la misma manera, como por ejemplo
el lavado de nuestro vehículo en un taller ya conocido. Nos dirigimos al taller y diríamos algo así: "Lávelo como
siempre por favor". No necesitaríamos dar más instrucciones, y estaríamos despreocupados, porque el personal

N
conoce su trabajo y simplemente recibiríamos el vehículo limpio. Una función en el lenguaje C opera similar


al taller de lavado.

AC
La representación de una función en el lenguaje C se puede apreciar en el programa 1.1.


M

AS
Programa 1.1: Forma general de una función en el lenguaje C

PE
1 tipo_retorno nombre_de_función(lista de parámetros, si los hay)
RA

CI
2 {
G

L
declaraciones;

EN
3

DE
instrucciones;
O
4
}
PR

CI

CA
El tipo_retorno especifica el tipo de dato que devuelve la función. La lista de parámetros es una lista separada
ES
DE

por comas de nombres de variables y sus tipos asociados. Los parámetros reciben los valores de los argumentos

LI
cuando se invoca a la función. Una función puede estar sin parámetros, en cuyo caso la lista de parámetros
L


S

está vacía. Además, una lista de parámetros vacía se puede especificar explícitamente como tal colocando la
A
TO

palabra reservada void dentro de los paréntesis [3].


ER

CA

La implementación de funciones en el lenguaje C debe considerar lo siguiente:


EN

EN

D
AM

DA

1.5.1. Declaración de funciones


S
ND

SI

Consiste en declarar los prototipos (hacer un catálogo) de las funciones sin programarlas y que serán utilizadas
DI

en el programa. Se hace previo a la definición de la función main, y su sintaxis se aprecia en el programa 1.2.
ER
FU

TU

Programa 1.2: Forma general de la declaración de una función en el lenguaje C


IV

tipo_de_retorno nombre_de_la_función(lista_de_parámetros);
ES

1
UN

Donde:
IA

tipo_de_retorno: es el tipo de dato del valor devuelto por la función. Si la función no devuelve ningún
IC

valor, se usa la palabra reservada void.


IF

nombre_de_la_función: es el nombre o identificador de la función.


NT

lista_de_parámetros: es la lista, separada por comas, de los parámetros que la función necesita para
PO

operar. Si la función no necesita parámetros, se puede colocar la palabra reservada void o dejar vacío.

En el prototipo de una función no se especifican las sentencias que forman parte de la misma, sino sus carac-
terísticas. Veamos el ejemplo de declaración de la función calcular_factorial en el programa 1.3:

Programa 1.3: Declaración de la función calcular_factorial en el lenguaje C


1 int calcular_factorial(int numero);
Capítulo 1: Guía de Laboratorio #4 6

El motivo por el que se necesita la declaración de la función, es porque luego el compilador compara la
invocación a la función calcular_factorial con el prototipo de la función para asegurar que:

El número de argumentos sea el correcto.


Los argumentos coinciden con los tipos definidos en el prototipo.

Los tipos de argumentos están en el orden correcto.


El tipo de retorno es consistente con el contexto en el cual la función es invocada.

1.5.2. Definición de funciones

Corresponde a la implementación de una función luego de su declaración. En el programa 1.4 se aprecia su

N
sintaxis.


Programa 1.4: Forma general de la definición de una función en el lenguaje C

AC


1 tipo_de_retorno nombre_de_la_función (lista_de_parámetros) {
conjunto de instrucciones de la función;

M
2

AS
3 return <expresión>; /∗Opcional si el tipo es void∗/

PE
4 }
RA

CI
G

L
Veamos el ejemplo de definición de la función calcular_factorial en el programa 1.5:

EN

DE
O

Programa 1.5: Definición de la función calcular_factorial en el lenguaje C


PR

int calcular_factorial(int numero) {


CI

CA
1
int i=1, fact=1;
ES
DE

2
3 while (i<=numero){

LI
fact = fact ∗ i;
L

4
i++;

S

5
}
TO

6
ER

7 return fact;
CA

8 }
EN

EN

D
AM

DA

1.5.3. Accesos a una función


S
ND

SI

Para que una función realice la tarea para la cual fue creada, se le debe de invocar desde un programa o
DI

subprograma. En el programa 1.6 se aprecia el ejemplo de invocación a la función calcular_factorial desde la


ER
FU

función main().
TU

IV

Programa 1.6: Ejemplo de invocación a la función calcular_factorial en el lenguaje C


ES

UN

1 #include <stdio.h>
2
3 int calcular_factorial(int numero) {
IA

4 int i=1, fact=1;


while (i<=numero){
IC

5
6 fact = fact ∗ i;
i++;
IF

7
8 }
NT

9 return fact;
10 }
11
PO

12 int main () {
13 int num,fact;
14 printf("Ingrese un numero: ");
15 scanf(" %d",&num);
16 fact = calcular_factorial(num);
17 printf("El factorial de %d es %d",num,fact);
18 return 0;
19 }
Capítulo 1: Guía de Laboratorio #4 7

Importante

Los parámetros que se declaran en la definición del subprograma se denominan parámetros formales y
se comportan como cualquier otra variable local dentro de la función [12].
Los parámetros que se pasan al subprograma en la invocación se denominan parámetros actuales o
reales [4].

Ahora veamos otro ejemplo, analicemos el programa 1.7 en el lenguaje C desde dos perspectivas, desde el cómo
se invoca y el cómo se define :

Programa 1.7: Ejemplo de cómo se invoca y define una función en el lenguaje C


1 #include <stdio.h>
2 /∗Prototipo o declaración de la función: ∗/
3 void message();

N
4
int main() {


5
6 message();
printf("¡Divide y vencerás!\n");

AC
7
8 return 0;


9 }

M
void message(){

AS
10
printf("Si el problema es complejo, recuerda...\n");

PE
RA
11
12 }

CI
G

L
EN
La salida de este programa sería:

DE
O
PR

Si el problema es complejo, recuerda...


CI

CA
¡Divide y vencerás!
ES
DE

LI
L


Concentrémonos en el desarrollo de la función main(), que a su vez invoca a la función message(). ¿Qué
S

A
TO

significa cuando decimos que main() “invoca” a la función message()? Queremos decir que el control pasa
ER

CA

a la función message(). La actividad de main() se suspende temporalmente; se queda dormido mientras la


EN

función message() se despierta y se pone a trabajar. Cuando la función message() se queda sin instrucciones
EN

por ejecutar, el control vuelve a main(), que se despierta y comienza a ejecutar su código en el punto exacto
D
AM

donde lo dejó. Por lo tanto, main() se convierte en la función “invocante”, mientras que message() se convierte
DA

en la función “invocada”.
S
ND

SI

Si se entendió el concepto de “invocar” una función, estamos listos para invocar a más de una función. Anali-
DI

cemos ahora el programa 1.8 en el lenguaje C:


ER
FU

TU

Programa 1.8: Otro ejemplo de cómo se invoca y define una función en el lenguaje C
IV

#include <stdio.h>
ES

1
UN

2 void message1();
3 void message2();
4 void message3();
IA

5
6 int main() {
IC

7 printf("Se ejecuta la función main.\n");


8 message1();
IF

9 message2();
message3();
NT

10
11 return 0;
12 }
PO

13 void message1(){
14 printf("FunPro es divertido.\n");
15 }
16 void message2(){
17 printf("La clave está en practicar.\n");
18 }
19 void message3(){
20 printf("¡Y así podré triunfar!\n");
21 }
Capítulo 1: Guía de Laboratorio #4 8

La salida de este programa sería:

Se ejecuta la función main.


FunPro es divertido.
La clave está en practicar.
¡Y así podré triunfar!

Para este último programa se pueden obtener las siguientes conclusiones [6]:

Cualquier programa en el lenguaje C contiene al menos una función.

Si un programa contiene solo una función, debe ser main().

N
Si un programa en el lenguaje C contiene más de una función, entonces una (y solo una) de estas funciones


debe ser main(), porque la ejecución del programa siempre comienza con main().

AC
No hay límite en el número de funciones que pueden estar presentes en un programa en el lenguaje C.


M
Cada función en un programa es invocada en la secuencia especificada por la función que hizo el llamado

AS

PE
RA
a la función (típicamente la invocación se hace desde la función main(), pero también es posible invocar
funciones dentro de otras funciones).

CI
G

L
EN
Después de que cada función haya hecho lo suyo, el control vuelve a la función que hizo la invocación,

DE
O

que en este caso es la función main(). Cuando main() se quede sin instrucciones o invocaciones a función,
PR

el programa finalizará. CI

CA
ES
DE

Nota

LI
L

La biblioteca estándar de C proporciona una variada colección de funciones para realizar cálculos ma-

S

temáticos, manipulación de cadenas y caracteres, entrada / salida y muchas otras operaciones útiles.
TO

ER

A este conjunto de funciones se les conoce también como funciones de biblioteca. Esto facilita el tra-
CA

bajo del desarrollador, porque proporcionan muchas de las capacidades que necesita. Mientras que las
EN

EN

funciones definidas por el programador se les conoce como funciones de usuario [3].
D
AM

DA
S
ND

1.5.4. Argumentos de las funciones, llamadas por valor y por referencia


SI
DI

ER
FU

En el lenguaje C siempre los argumentos se pasan por valor a una función [3]. Este método consiste en copiar
TU

el valor de un argumento en el parámetro formal de la función. Entonces, los cambios hechos al parámetro no
IV

tienen efecto sobre el argumento [12].


ES

UN

En el programa 1.6 se puede apreciar el paso de parámetro por valor cuando se invoca a la función Calcular-
Factorial, porque lo que interesa para la ejecución de la función es contar con solo el valor del argumento.
IA

La segunda forma de pasar argumentos a un subprograma es mediante la invocación por referencia. En


IC

este método, la dirección de un argumento se copia en el parámetro. Dentro del subprograma, la dirección se
utiliza para acceder al argumento real utilizado en la llamada. Esto significa que los cambios realizados en el
IF

parámetro afectan el argumento [12].


NT

En el programa 1.9, se puede apreciar la definición de la función intercambiar que, mediante la técnica de paso
de parámetros por referencia, se logra modificar los valores de cada variable. Pero lo que en realidad se definen
PO

como parámetros formales son variables de tipo dirección de memoria o punteros, y será así como se logrará
acceder a los valores en memoria de las variables.

Programa 1.9: Intercambiar los valores de dos variables


1 #include <stdio.h>
2
3 void intercambiar(int ∗p, int ∗q);
Capítulo 1: Guía de Laboratorio #4 9

4
5 int main() {
6 int a,b;
7 a = 666;
8 b = 999;
9 printf("a y b antes del intercambio: %d %d\n", a, b);
10 intercambiar(&a, &b); /∗ Se pasan las direcciones de a y b ∗/
11 printf("a y b luego del intercambio: %d %d\n", a, b);
12 }
13
14 void intercambiar(int ∗p, int ∗q) {
15 int temp;
16 temp = ∗p; /∗ Se guarda en temp el valor apuntado por la dirección p ∗/
17 ∗p = ∗q; /∗ Se asigna el valor apuntado por la dir. q en la variable apuntado por la dir. p ∗/
18 ∗q = temp; /∗ Se asigna el valor de temp en la variable apuntado por la dirección q ∗/
19 return;
20 }

N

La salida de este programa sería:

AC


a y b antes del intercambio: 666 999

AS
a y b luego del intercambio: 999 666

PE
RA

CI
G
En este ejemplo podemos ver, en la línea 3, el uso del operador * para la definición de argumentos por referencia

L
EN

DE
y, en la línea 10, el uso del operador & para realizar la llamada a la función con parámetros por referencia.
O
PR

CI
Al implementar programas en el lenguaje C, se pueden combinar ambas llamadas (valor y referencia) sin

CA
ningún problema, siendo ésta una práctica muy usual en programación.
ES
DE

Operadores de puntero:

LI
L


S

Es posible lograr el paso por referencia utilizando el operador de dirección (&) y el operador de indi-
TO

ER

rección (*).
CA

El &, u operador dirección, es un operador unario que retorna la dirección de su operando. Por ejemplo,
EN

EN

si asumimos las definiciones


D

int a = 666;
AM

DA

int *aPtr;
la instrucción
S
ND

SI

aPtr = &a;
DI

asigna la dirección de la variable a a la variable puntero aPtr. La variable aPtr se dice que “apunta
ER
FU

a” a. La figura 1.2 muestra una representación esquemática de la memoria después de que la última
TU

intrucción de asignación se ha ejecutado.


IV

La representación del puntero en memoria se muestra en la figura 1.3, asumiendo que la variable entera
ES

UN

es almacenada en la ubicación 700000, y la variable puntero aPtr es almacenada en la ubicación 600000.


Tenga en cuenta que el operando del operador dirección debe ser una variable, el operador dirección no
puede ser aplicado a constantes o expresiones.
IA

El operador unario *, conocido también como el operador indirección u operador desreferencia, retorna
IC

el valor del objeto al cual su operando (puntero) apunta. Por ejemplo, la sentencia
IF

printf("%d", *aPtr);
imprime el valor de la variable a (666). Usando * en esta manera se denomina desreferenciando un
NT

puntero.
PO

1.6. Procedimientos
De acuerdo con Sebesta [14], los procedimientos son un tipo subprogramas que ejecutan un proceso en específico
y no tiene un valor de retorno. Mediante los procedimientos se pueden ejecutar un conjunto de instrucciones que
Capítulo 1: Guía de Laboratorio #4 10

Figura 1.2: Representación gráfica de un puntero apuntando a una variable entera en memoria.

N

Figura 1.3: Representación de a y aPtr en memoria.

AC


M
no devuelven ningún valor. En el lenguaje C los procedimientos se consideran como funciones que devuelven

AS

PE
un resultado de tipo void.
RA

CI
A continuación, en el programa 1.10, que calcula la suma de dos números, se presenta un ejemplo del proce-
G

L
EN
dimiento mostrar_datos que imprime en pantalla los datos ingresados y el resultado.

DE
O
PR

Programa 1.10: Cálculo de la suma de dos números que utiliza un procedimiento para mostrar el resultado
CI

CA
1 #include <stdio.h>
ES
DE

2
void mostrar_datos(int a, int b,int c){

LI
3
printf("La suma de %d y %d es %d",a,b,c);
L

4
}

S

5
TO

6
ER

7 int main() {
CA

8 int a,b,c;
EN

EN

9 printf("Ingrese dos números: ");


10 scanf(" %d %d",&a,&b);
D

c = a+b;
AM

11
DA

12 mostrar_datos(a,b,c);
}
S

13
ND

SI
DI

La salida que genera este programa es la siguiente:


ER
FU

TU

IV

Ingrese dos números: 123 543


ES

La suma de 123 y 543 es 666


UN
IA

1.7. Cálculo del número e


IC
IF

El número e es un número muy usado en las ciencias3 , jugando un papel importante en el cálculo de la
NT

función exponencial. Las primeras referencias a este número datan del año 1618 en un trabajo de John Napier
sobre logaritmos. Al igual que π, el número e es un número irracional del cual no podemos conocer su valor
PO

exacto porque tiene infinitas cifras decimales. El valor aproximado de este número es 2, 71828 (aproximado a
5 decimales).
 n
Existen varias definiciones del número e siendo la más común el lı́m 1 + n 1 . Este límite puede aproximarse
n→∞
con la siguiente serie:
3 Para entender un poco más a profundidad qué es el número e, se recomienda el siguiente video https://www.youtube.com/

watch?v=Z5czpA-fyMU.
Capítulo 1: Guía de Laboratorio #4 11

1 1 1 1 1 1
1+ + + + + + + ···
1! 2! 3! 4! 5! 6!
A continuación, se muestra el programa 1.11 en el lenguaje C que permite el cálculo aproximado del número
e usando la fórmula antes descrita aproximando el número a 6 decimales:

Programa 1.11: Cálculo del número e


1 #include <stdio.h>
2
3 int main() {
4 int i = 0;
5 double suma = 0;
6 double factorial = 1;
7 double termino=1;
8 while (termino>=0.0000001) {

N
9 if (i == 0)


10 suma = suma + 1;
11 else {

AC
12 factorial = factorial∗i;
termino = 1 / factorial;


13
suma = suma + termino;

M
14

AS
15 }

PE
16
}
i++;
RA

CI
17
printf("El valor del número e es = %1.6lf", suma);
G
18

L
EN
19 return 0;

DE
O

20 }
PR

La salida que genera este programa es la siguiente:


CI

CA
ES
DE

LI
L

El valor del número e es = 2.718282 TÓ


S

A
TO

ER

Recordar que:
CA
EN

EN

El desarrollo en el lenguaje C del algoritmo presentado en el programa 1.11 se encuentra ampliamente


D

descrito en las guías anteriores.


AM

DA
S

Si surge la necesidad de usar el valor de e que acabamos de generar como parte de otros programas, o incluso,
ND

SI

se desea obtener el valor de e con diferentes precisiones, entonces, se puede definir un bloque de código que
DI

ER

facilite su obtención y dicho bloque sería parte de una función que permita obtener su valor de acuerdo con el
FU

TU

número de iteraciones que reciba como parámetro en su invocación.


IV

A continuación, desarrollaremos una función en el lenguaje C que permita obtener el valor de e después de
ES

UN

una determinada cantidad de iteraciones, dicha cantidad será parámetro de la función. Tengamos en cuenta
que mientras mayor sea la cantidad de iteraciones, más exacto será el valor que obtengamos. Sin embargo, más
iteraciones también significan más tiempo de procesamiento.
IA
IC

1.7.1. Cálculo del número e en una función


IF
NT

Podemos modificar el programa 1.11 de manera que el cálculo del número e se realice dentro de una función
numero_e que retorne el valor aproximado de e para su posterior uso. La modificación se presenta en el
PO

programa 1.12.

Programa 1.12: Cálculo del número e dentro de una función


1 #include<stdio.h>
2 /∗ Prototipo de la función numero_e ∗/
3 double numero_e(int iteraciones);
4
5 int main(){
Capítulo 1: Guía de Laboratorio #4 12

6 double valor_numero_e;
7 int num_iteraciones;
8 printf("Ingrese la cantidad de iteraciones: ");
9 scanf(" %d",&num_iteraciones);
10 /∗ Se invoca a la función numero_e pasando, como parámetro real y por valor, el valor de la variable
num_iteraciones ∗/
11 valor_numero_e = numero_e(num_iteraciones);
12 printf("El valor del numero e es = %.6lf\n", valor_numero_e);
13 return 0;
14 }
15
16 /∗ Definición de la función numero_e con el parámetro formal iteraciones de tipo entero ∗/
17 double numero_e(int iteraciones){
18 double suma, factorial, termino;
19 int i;
20 i=0;
21 suma=0;

N
22 factorial=1;
termino=1;


23
24 while (i<iteraciones){
if (i==0)

AC
25
suma = suma+1;


26
27 else{

M
factorial = factorial∗i;

AS
28

PE
termino=(double)1/factorial;
RA
29
suma=suma+termino;

CI
30
31 }
G

L
i++;

EN
32

DE
O
33 }
return suma;
PR

34
35 } CI

CA
ES
DE

Vemos que la función main cambió considerablemente, en la línea 6 vemos la declaración de la variable

LI
valor_numero_e y en la linea 11 se asigna el valor devuelto por la función numero_e a la variable va-
L

lor_numero_e . A partir de este momento, podemos obtener el valor del número e con solo llamar a la función

S

A
TO

que acabamos de crear, pasando como parámetro la cantidad de iteraciones que queremos realizar.
ER

CA

La salida que genera este programa es la siguiente:


EN

EN

D
AM

Ingrese la cantidad de iteraciones: 100


DA

El valor del número e es = 2.718282


S
ND

SI
DI

ER

Si revisamos la estructura de nuestro programa, podemos apreciar que:


FU

TU

IV

El prototipo de la función numero_e declarada en la línea 3 tiene tipo de retorno double.


ES

UN

La función numero_e recibe solo un parámetro de tipo entero, sin embargo, debemos recordar que otras
funciones podrían recibir una cantidad diferente de parámetros.
IA

La invocación a la función numero_e en la línea 11 coincide con la declaración del prototipo en el número
IC

y tipo de parámetros.
IF

Como el retorno de la invocación a la función numero_e en la línea 11 es un valor de tipo double, éste
es asignado a la variable valor_numero_e del mismo tipo double.
NT

La definición de la función numero_e en la línea 17 se hace luego de la definición de la función main.


PO

Sin embargo, también se podría haber definido antes de la función main.


El parámetro usado en la definición de la función numero_e en la línea 17 indica que el número e se
calculará usando una cantidad de iteraciones en particular.

Sobre la solución realizada y para ejemplificar aún más el paso de parámetros por valor, vamos a modificar el
programa 1.12 para que la tarea de mostrar el resultado sea delegada a una función encargada para ello.
Capítulo 1: Guía de Laboratorio #4 13

A continuación, crearemos la función imprime_resultado que muestre en la pantalla del usuario el mensaje
final con el resultado. En el programa 1.13 se puede apreciar la versión del programa 1.12 que define y utiliza
la función imprime_resultado definida por el usuario para dicha tarea.

Programa 1.13: Cálculo del número e dentro de una función con la impresión del resultado en otra función
1 #include<stdio.h>
2 /∗ Prototipos de las funciones numero_e e imprime_resultado ∗/
3 double numero_e(int iteraciones);
4 void imprime_resultado(double numero_e);
5
6 int main(){
7 double valor_numero_e;
8 int num_iteraciones;
9 printf("Ingrese la cantidad de iteraciones: ");
10 scanf(" %d",&num_iteraciones);
11 /∗ Se invoca a la función numero_e pasando, como parámetro real y por valor, el valor de la variable

N
num_iteraciones ∗/


12 valor_numero_e = numero_e(num_iteraciones);
13 imprime_resultado(valor_numero_e);

AC
14 return 0;
}


15

M
16
/∗ Definición de la función numero_e con el parámetro formal iteraciones de tipo entero ∗/

AS
17

PE
RA
18 double numero_e(int iteraciones){
double suma, factorial, termino;

CI
19
20 int i;
G

L
i=0;

EN
21

DE
O

22 suma=0;
factorial=1;
PR

23
24 termino=1; CI

CA
25 while (i<iteraciones){
if (i==0)
ES
DE

26
suma = suma+1;

LI
27
else{
L

28
factorial = factorial∗i;

S

29
termino=(double)1/factorial;
TO

30
ER

31 suma=suma+termino;
CA

32 }
EN

EN

33 i++;
34 }
D

return suma;
AM

35
DA

36 }
S

37
/∗ Definición de la función imprime_resultado con el parámetro formal numero_e de tipo double ∗/
ND

38
SI

39 void imprime_resultado(double numero_e){


DI

printf("El valor del número e es = %.6lf\n", numero_e);


ER

40
FU

41 return;
TU

42 }
IV
ES

UN

La salida que genera este programa es la siguiente:


IA

Ingrese la cantidad de iteraciones: 100


El valor del número e es = 2.718282
IC
IF

Se puede observar que la salida es la misma. Sin embargo, si revisamos la estructura de nuestro programa,
NT

podemos apreciar que:


PO

Se ha añadido la declaración de la función imprime_resultado en la zona de prototipos.


El prototipo de la función imprime_resultado declarada en la línea 4 tiene tipo de retorno void.
La función imprime_resultado recibe solo un parámetro de tipo double.
La invocación a la función imprime_resultado en la línea 13 coincide con la declaración del prototipo en
el número y tipo de parámetros.
R
Capítulo 1: Guía de Laboratorio #4 14

OG
Como la invocación a la función imprime_resultado en la línea 13 no tiene un valor de retorno no se
asigna a ninguna variable.
La definición de la función imprime_resultado en la línea 39 se hace luego de la definición de la función
main. Sin embargo, también se podría haber definido antes de la función main.

PR
El parámetro usado en la definición de la función imprime_resultado en la línea 39 indica que el número
e se mostrará en la pantalla del usuario acompañado de un mensaje final.

CI
Sobre el programa 1.13 y para ejemplificar el paso de parámetros por referencia vamos a modificar el programa
para que la tarea de leer los datos de entrada sea delegada a una función encargada para ello.
A continuación, crearemos la función leer_datos que muestre en la pantalla del usuario el mensaje solicitándole
el ingreso de los datos y permita la captura del valor ingresado por teclado en una variable. En el programa
1.14 se puede apreciar la nueva versión del programa 1.13 que define y utiliza la función leer_datos definida
DE
por el usuario para dicha tarea.
Programa 1.14: Cálculo del número e dentro de una función con la lectura de datos en otra función simulando
un paso de parámetros por referencia

ES
1 #include<stdio.h>
2 /∗ Prototipos de las funciones numero_e, imprime_resultado y leer_datos ∗/
3 double numero_e(int iteraciones);
4 void imprime_resultado(double numero_e);
5 void leer_datos(int ∗dir_num_iteraciones);
6
int main(){
S

7
8 double valor_numero_e;
9
10
11
int num_iteraciones;
AL
/∗ Se invoca a la función leer_datos pasando, como parámetro real, la dirección de la variable num_iteraciones. ∗/
leer_datos (&num_iteraciones);
12 valor_numero_e = numero_e(num_iteraciones);
13 imprime_resultado(valor_numero_e);
14 return 0;
15 }
ER
16
17 double numero_e(int iteraciones){
18 double suma, factorial, termino;
19 int i;
20 i=0;
21 suma=0;
22 factorial=1;
23 termino=1;
while (i<iteraciones){
N

24
25 if (i==0)
26 suma = suma+1;
27 else{
GE

28 factorial = factorial∗i;
29 termino=(double)1/factorial;
30 suma=suma+termino;
31 }
i++;
AD
32
33 }
34 return suma;
35 }
36
37 void imprime_resultado(double numero_e){
38 printf("El valor del número e es = %.6lf\n", numero_e);
39 return;
OS

}
ID
40
41
42 /∗ Definición de la función leer_datos con el parámetro formal dir_num_iteraciones de tipo dirección a un entero. ∗/
43 void leer_datos(int ∗dir_num_iteraciones){
44 printf("Ingrese la cantidad de iteraciones: ");
45 scanf(" %d", dir_num_iteraciones);
46 }
DI

La salida que genera este programa es la siguiente:


ER
Capítulo 1: Guía de Laboratorio #4 15

Ingrese la cantidad de iteraciones: 100


El valor del número e es = 2.718282

Se puede observar que la salida es la misma. Sin embargo, si revisamos la estructura de nuestro programa,
podemos apreciar que:

Se ha añadido la declaración de la función leer_datos en la zona de prototipos.


El prototipo de la función leer_datos declarada en la línea 5 tiene tipo de retorno void.
La función leer_datos recibe solo un parámetro de tipo dirección a un entero.
La invocación a la función leer_datos en la línea 11 coincide con la declaración del prototipo en el número

N
y tipo de parámetros.


Como la invocación a la función leer_datos en la línea 11 no tiene un valor de retorno no se asigna a

AC
ninguna variable.


M
La definición de la función leer_datos en la línea 43 se hace luego de la definición de la función main.

AS

PE
Sin embargo, también se podría haber definido antes de la función main.
RA

CI
El parámetro usado en la definición de la función leer_datos en la línea 43 indica que el parámetro
G

L
EN
dir_num_iteraciones es una dirección a un entero, y será mediante esa dirección que se puede acceder

DE
O

al valor para luego modificarla.


PR

CI
La invocación a la función scanf en la línea 45 ya no requerirá que se le anteponga el operador dirección

CA
(&) al segundo parámetro, porque la variable dir_num_iteraciones ya es una dirección.
ES
DE

LI
Esta técnica de paso de direcciones como parámetros a una función permite lo que se conoce como paso
L


S

de parámetros por referencia, debido a que lo que se pretende es modificar el valor de la variable definida
TO

ER

en el programa o subprograma que invoca a la función.


CA
EN

EN

Para pensar
D
AM

A pesar que la última versión que utiliza funciones para leer los datos entrada, calcular el número e e
DA

imprimir el resultado posee más líneas de código, ¿qué versión es más entendible al ojo humano?
S
ND

SI
DI

ER
FU

TU

1.8. Cálculo del seno


IV
ES

UN

El seno es una de las funciones trigonométricas más conocidas y usadas en las ciencias. Se utiliza por ejemplo
para calcular la trayectoría de un proyectil.
IA

El seno de un ángulo α se define como la razón entre el cateto opuesto a dicho ángulo α y la hipotenusa. Se
puede calcular de diversas maneras, entre ellas, la serie de Taylor. Usando esta serie el seno de un grado x,
IC

3 5 7 9 11 13
expresado en radianes, se puede calcular de la siguiente manera : x − x + x − x + x − x + x + · · ·
IF

3! 5! 7! 9! 11! 13!
A continuación, se muestra el programa 1.15 en el lenguaje C que calcula el valor aproximado del seno usando
NT

la serie de Taylor descrita previamente. El programa considera solamente términos que en su valor absoluto
tengan hasta 6 dígitos significativos.
PO

Recordar que:

Un radián (rad) es la medida de un ángulo central que subtiende un arco cuya longitud es igual al del
radio de la circunferencia. Puesto que la longitud de una circunferencia de radio r es igual a 2π, se tiene
que 360◦ =2π radianes.
Capítulo 1: Guía de Laboratorio #4 16

Programa 1.15: Cálculo del seno


1 #include <stdio.h>
2 #include <math.h>
3
4 int main() {
5 int i = 1, signo=1;
6 double x, suma=0, factorial=1, termino=1;
7 printf("Ingrese ángulo en radianes: ");
8 scanf(" %lf", &x);
9 while (fabs(termino)>=0.0000001){
10 factorial = factorial ∗ i;
11 if (i %2==1){
12 termino = signo∗pow(x,i)/factorial;
13 suma = suma + termino;
14 signo = signo∗(−1);
15 }
i++;

N
16
17 }


18 printf("suma = %lf\n", suma);
19 return 0;

AC
20 }


M
La salida que genera este programa es la siguiente:

AS

PE
RA

CI
Ingrese ángulo en radianes: 1.57
G

L
EN
suma = 1.000000

DE
O
PR

Recordar que:
CI

CA
ES
DE

El algoritmo presentado en el programa 1.15 se encuentra ampliamente descrito en las guías anteriores.

LI
L


S

Si surge la necesidad de usar el valor del seno que acabamos de generar, como parte de otros programas, o
TO

ER

incluso, se desea obtener el valor del seno con diferentes precisiones, entonces, se puede definir un bloque de
CA

código que facilite su obtención y dicho bloque sería parte de una función que permita obtener su valor de
EN

EN

acuerdo con el número de dígitos de precisión que reciba como parámetro en su invocación.
D
AM

A continuación, desarrollaremos una función en el lenguaje C que permita obtener el valor del seno de un ángulo
G

DA

en radianes con una cantidad de dígitos significativos; el ángulo y la cantidad de dígitos serán parámetros de
S

la función.
ND

SI
DI

ER
FU

1.8.1. Cálculo del seno con una función


TU

IV

Podemos modificar el programa 1.15 de manera que, el cálculo del seno de un ángulo en radianes se realice
ES

UN

dentro de una función seno que recibe como parámetros el ángulo en radianes y la cantidad de dígitos signifi-
cativos, y retorne el valor aproximado del seno para su posterior uso. En el programa 1.16 se puede apreciar la
IA

nueva versión del programa 1.15 que define y utiliza la función seno definida por el usuario para dicha tarea.
IC

Programa 1.16: Cálculo del seno dentro de una función


IF

1 #include <stdio.h>
2 #include <math.h>
NT

3 /∗ Prototipo de la función seno ∗/


4 double seno (double x, int num_digitos_signif);
PO

5
6 int main() {
7 int num_digitos_signif;
8 double x, valor_seno;
9 printf("Ingrese ángulo en radianes y un número para la cantidad de dígitos significativos: ");
10 scanf(" %lf %d", &x, &num_digitos_signif);
11 valor_seno = seno(x, num_digitos_signif);
12 printf("Seno( %.2lf) = %lf\n", x, valor_seno);
13 return 0;
Capítulo 1: Guía de Laboratorio #4 17

14 }
15
16 /∗ Definición de la función seno con parámetros formales, el valor del ángulo en grados sexagesimales y el número de dígitos
significativos. ∗/
17 double seno (double x, int num_digitos_signif){
18 int i = 1, signo = 1;
19 double suma = 0, factorial = 1, termino = 1, limite;
20 limite = 1 / pow(10, num_digitos_signif+1);
21 /∗ Si num_digitos_signif es 6, entonces límite = 0.0000001 ∗/
22 while (fabs(termino)>=limite){
23 factorial = factorial ∗ i;
24 if (i %2==1){
25 termino = signo∗pow(x,i)/factorial;
26 suma = suma + termino;
27 signo = signo∗(−1);
28 }
29 i++;

N
30 }
return suma;


31
32 }

AC


Vemos que la función main del programa 1.16 cambió considerablemente, en la línea 7 vemos la declaración

M
de una variable num_digitos_signif, en la línea 8 la declaración de la variable valor_seno, y en la linea 11

AS

PE
RA
se asigna el valor devuelto por la función seno a la variable valor_seno considerando los dos parámetros que

CI
requiere para el cálculo. A partir de este momento, podemos obtener el valor del seno con solo llamar a la
G
función que acabamos de crear, pasando como parámetros reales y por valor, el valor del ángulo en radianes

L
EN

DE
y el número de dígitos significativos.
O
PR

La salida que genera este programa es la siguiente: CI

CA
ES
DE

Ingrese ángulo en radianes y un número para la cantidad de dígitos significativos: 1.57 6

LI
L

Seno(1.57) = 1.000000 TÓ
S

A
TO

ER

CA

Si revisamos la estructura de nuestro programa, podemos apreciar que:


EN

EN

El prototipo de la función seno declarada en la línea 4 tiene tipo de retorno double.


D
AM

DA

La función seno recibe dos parámetros por valor, el primero es un parámetro de tipo double y el segundo
S

es de tipo entero.
ND

SI
DI

La invocación a la función seno en la línea 11 coincide con la declaración del prototipo en el número y
ER
FU

tipo de parámetros.
TU

IV

Como el retorno de la invocación a la función seno en la línea 11 es un valor de tipo double, éste es
ES

UN

asignado a la variable valor_seno del mismo tipo double.


La definición de la función seno en la línea 17 se hace luego de la definición de la función main. Sin
IA

embargo, también se podría haber definido antes de la función main.


IC

Los parámetros de la definición de la función seno en la línea 17, que coinciden con el prototipo de la
IF

función, indican que el primer parámetro corresponde con el ángulo x en radianes, y el segundo parámetro
corresponde con el número de dígitos significativos num_digitos_signif que debe tener cada término
NT

como máximo en su valor absoluto.


PO

El desarrollo del cuerpo de la función seno se realiza en las líneas 18 hasta la 31.

Para poner en práctica

Realice el desarrollo del programa 1.16 considerando funciones que permitan la lectura de datos,
el cálculo del seno y la impresión del resultado, similar a la estrategia tomada en el programa 1.14
Capítulo 1: Guía de Laboratorio #4 18

1.9. Cálculo del crecimiento exponencial


Una de las múltiples aplicaciones en biología del número e es el crecimiento exponencial. Este tiene lugar en
situaciones en las que no hay factores que limiten el crecimiento de la magnitud de interés (por ejemplo, la
cantidad de bacterias en un medio determinado).
El valor de la magnitud, por lo tanto, crece cada vez más rápido en el tiempo, de acuerdo con la siguiente
fórmula:

M agnitud_instante_mayor_0 = M agnitud_instante_igual_0 · et

Donde:
M agnitud_instante_mayor_0: valor de la magnitud en el instante t > 0
M agnitud_instante_igual_0: valor de la magnitud en el instante t = 0

N

Teniendo en cuenta este concepto, podemos implementar una aplicación que nos permita calcular el valor final

AC
de la magnitud en el tiempo t > 0. En la figura 1.4 se propone un diagrama de estructura o de módulos.


M

AS

PE
RA

CI
G

L
EN

DE
O
PR

CI

CA
ES
DE

LI
L


S

A
TO

ER

Figura 1.4: Módulos del programa de cálculo del Crecimiento Exponencial


CA
EN

EN

Diagrama de estructura o de módulos:


D
AM

El diagrama de estructura o de módulos sirve para el modelamiento top-down de un programa y sus


DA

subprogramas mediante un árbol de invocación de módulos [5, 11, 16]


S
ND

SI
DI

ER
FU

TU

1.9.1. Leyendo los datos de entrada


IV
ES

Para resolver el problema usando la fórmula de crecimiento exponencial, será necesario conocer los valores M0
UN

y t. Estos valores serán ingresados a través de la consola para luego ser usados en la fórmula Mt = M0 ·et . Dado
que necesitamos calcular una potencia, incluiremos la libreria math.h en nuestro programa, que inicialmente
IA

se vería como el programa 1.17.


IC

Programa 1.17: Estructura inicial del programa


IF

1 #include <stdio.h>
#include <math.h>
NT

2
3
4
PO

5 int main() {
6 int tiempo;
7 double magnitud_instante_mayor_0, magnitud_instante_igual_0;
8
9 printf("Ingrese el valor de la magnitud en el instante 0: ");
10 scanf(" %lf", &magnitud_instante_igual_0);
11
12 printf("Ingrese el tiempo final (t>0): ");
13 scanf(" %d", &tiempo);
Capítulo 1: Guía de Laboratorio #4 19

14
15 if (tiempo > 0 && magnitud_instante_igual_0 > 0) {
16 /∗Conjunto de instrucciones para el
17 cálculo del valor final de la magnitud∗/
18 } else {
19 printf("Los valores para el tiempo y la magnitud inicial deben ser positivos");
20 }
21 }

Hasta este punto hemos leído los datos para las variables tiempo y magnitud_instante_igual_0 pero podemos
notar que la fórmula además hace uso del número e. Por lo tanto, necesitamos una forma de obtener el valor
del número e antes de poder aplicar la fórmula.

1.9.2. Usando la función numero_e

N

Ya que la fórmula que usaremos necesita del número e y antes ya habíamos implementado una función que
calcule su valor con un determinado número de iteraciones, podemos incluir dicha función en nuestro programa

AC
y llamarla desde donde sea necesario.


M
Podemos ver que en la línea 27 del programa 1.18 se le asigna el valor de la función numero_e(100) a la

AS
variable valor_numero_e. A partir de ese momento, esta variable tendrá el valor aproximado del número e

PE
después de 100 iteraciones. RA

CI
G

L
Programa 1.18: Cálculo del crecimiento exponencial

EN

DE
O

1 #include <stdio.h>
PR

2 #include <math.h> CI

CA
3
double numero_e(int iteraciones) {
ES
4
DE

5 int i = 0;

LI
6 double suma = 0;
L

double factorial = 1;
7

S

8 double termino = 1;
TO

ER

9 while (i <= iteraciones) {


CA

10 if (i == 0)
suma = suma + 1;
EN

EN

11
12 else {
D

13 factorial = factorial ∗ i;
AM

termino = (double) 1 / factorial;


DA

14
15 suma = suma + termino;
S

}
ND

16
O

SI

17 i++;
DI

}
ER

18
FU

19 return suma;
TU

20 }
IV

21
int main() {
ES

22
UN

23 int tiempo;
24 double magnitud_instante_mayor_0, magnitud_instante_igual_0, valor_numero_e;
25
IA

26 /∗Obtenemos el valor del número e usando la función f_numero_e()∗/


27 valor_numero_e = numero_e(100);
IC

28
29 printf("Ingrese el valor de la magnitud en el instante 0: ");
IF

30 scanf(" %lf", &magnitud_instante_igual_0);


NT

31
32 printf("Ingrese el tiempo final (t>0): ");
33 scanf(" %d", &tiempo);
PO

34
35 if (tiempo > 0 && magnitud_instante_igual_0 > 0) {
36 /∗Aplicamos la fórmula usando los datos de entrada y el valor del número e∗/
37 magnitud_instante_mayor_0 = magnitud_instante_igual_0 ∗ pow(valor_numero_e, tiempo);
38 printf("El valor de la magnitud para t= %d es %lf", tiempo, magnitud_instante_mayor_0);
39 } else {
40 printf("Los valores para el tiempo y la magnitud inicial deben ser positivos");
41 }
42 }
Capítulo 1: Guía de Laboratorio #4 20

Si bien el programa 1.18 realiza el cálculo del crecimiento exponencial correctamente, su implementación no
corresponde al diagrama de estructura o de módulos presentado inicialmente. Es necesario recordar que al
momento de realizar la implementación, cada rectángulo del diagrama corresponde a un subprograma. Por lo
tanto, tenemos que realizar el cálculo del valor de la magnitud Mt en el instante t > 0 en una nueva función.
Para tal fin, encapsularemos el cálculo del crecimiento exponencial en la función calcular_crecimiento_exponencial.
Esta función deberá recibir los parámetros de la fórmula: tiempo, valor de la magnitud inicial, y valor del nú-
mero e.
A continuación, se muestra la implementación del programa con la nueva función calcular_crecimiento_exponencial :

Programa 1.19: Cálculo del crecimiento exponencial


1 #include <stdio.h>
2 #include <math.h>
3
double numero_e(int iteraciones) {

N
4
int i = 0;


5
6 double suma = 0;
double factorial = 1;

AC
7
8 double termino = 1;


9 while (i <= iteraciones) {

M
if (i == 0)

AS
10
suma = suma + 1;

PE
RA
11
12 else {

CI
13 factorial = factorial ∗ i;
G
termino = (double) 1 / factorial;

L
14

EN
suma = suma + termino;

DE
O
15
16 }
PR

17
}
i++; CI

CA
18
return suma;
ES
19
DE

20 }

LI
21
L

double calcular_crecimiento_exponencial(int valor_tiempo, double valor_magnitud_instante_igual_0, double


22

S

valor_numero_e) {
TO

ER

23
CA

24 double magnitud_instante_mayor_0;
magnitud_instante_mayor_0 = valor_magnitud_instante_igual_0 ∗ pow(valor_numero_e, valor_tiempo);
EN

EN

25
26 return magnitud_instante_mayor_0;
D

27 }
AM

DA

28
29 int main() {
S

int tiempo;
ND

30
O

SI

31 double magnitud_instante_mayor_0, magnitud_instante_igual_0, valor_numero_e;


DI

ER

32
FU

33 /∗Obtenemos el valor del número e usando la función numero_e()∗/


TU

34 valor_numero_e = numero_e(100);
IV

35
36 printf("Ingrese el valor de la magnitud en el instante 0: ");
ES

UN

37 scanf(" %lf", &magnitud_instante_igual_0);


38
39 printf("Ingrese el tiempo final (t>0): ");
IA

40 scanf(" %d", &tiempo);


41
IC

42 if (tiempo > 0 && magnitud_instante_igual_0 > 0) {


43
IF

44 /∗Obtenemos el valor de la magnitud en tiempo > 0 usando la función calcular_crecimiento_exponencial()∗/


45 magnitud_instante_mayor_0 = calcular_crecimiento_exponencial(tiempo, magnitud_instante_igual_0,
NT

valor_numero_e);
46 printf("El valor de la magnitud para t= %d es %lf", tiempo, magnitud_instante_mayor_0);
PO

47 } else {
48 printf("Los valores para el tiempo y la magnitud inicial deben ser positivos");
49 }
50 }

Si volvemos a revisar el diagrama de estructura o de módulos, podemos notar que nuestra implementación
todavía no coincide con el diagrama. Para que nuestra solución esté completa, debemos realizar la salida del
programa en una nueva función que llamaremos mostrar_magnitud_final_con_parametro_e.
Capítulo 1: Guía de Laboratorio #4 21

1.9.3. Solución propuesta para el cálculo del crecimiento exponencial

Nuestro último subprograma debe mostrar el resultado de la magnitud para el tiempo t > 0 (magnitud final),
y además debe mostrar también cuál fue el valor del número e que se usó en la fórmula.
En el programa 1.20 se muestra la solución propuesta al problema del cálculo del crecimiento exponencial. Es
importante notar que la última función mostrar_magnitud_final_con_parametro_e no devuelve ningún valor
ya que solo imprime en pantalla los datos requeridos. Por lo tanto, la función tiene un tipo de retorno void y
no hace uso de la instrucción return:

Programa 1.20: Cálculo del crecimiento exponencial


1 #include <stdio.h>
2 #include <math.h>
3
4 double numero_e(int iteraciones) {

N
5 int i = 0;


6 double suma = 0;
7 double factorial = 1;

AC
8 double termino = 1;
while (i <= iteraciones) {


9
if (i == 0)

M
10
suma = suma + 1;

AS
11

PE
RA
12 else {
factorial = factorial ∗ i;

CI
13
14 termino = (double) 1 / factorial;
G

L
suma = suma + termino;

EN
15

DE
O

16 }
i++;
PR

17
18 } CI

CA
19 return suma;
}
ES
DE

20

LI
21
double calcular_crecimiento_exponencial(int valor_tiempo, double valor_magnitud_instante_igual_0, double
L

22
valor_numero_e) {

S

A
TO

23
ER

24 double magnitud_instante_mayor_0;
CA

25 magnitud_instante_mayor_0 = valor_magnitud_instante_igual_0 ∗ pow(valor_numero_e, valor_tiempo);


EN

EN

26 return magnitud_instante_mayor_0;
27 }
D
AM

28
DA

29 void mostrar_magnitud_final_con_parametro_e(int tiempo, double magnitud_instante_mayor_0, double valor_numero_e){


S

30
printf("El valor de la magnitud en el instante t= %d es: %lf\n", tiempo, magnitud_instante_mayor_0);
ND

31
SI

32 printf("El valor aproximado del número e que ha usado es: %lf", valor_numero_e);
DI

}
ER

33
FU

34
TU

35 int main() {
IV

36 int tiempo;
double magnitud_instante_mayor_0, magnitud_instante_igual_0, valor_numero_e;
ES

UN

37
38
39 /∗Obtenemos el valor del número e usando la funcion f_numero_e()∗/
40 valor_numero_e = numero_e(100);
IA

41
42 printf("Ingrese el valor de la magnitud en el instante 0: ");
IC

43 scanf(" %lf", &magnitud_instante_igual_0);


IF

44
45 printf("Ingrese el tiempo final (t>0): ");
scanf(" %d", &tiempo);
NT

46
47
48 if (tiempo > 0 && magnitud_instante_igual_0 > 0) {
PO

49
50 /∗Obtenemos el valor de la magnitud en tiempo > 0 usando la función calcular_crecimiento_exponencial()∗/
51 magnitud_instante_mayor_0 = calcular_crecimiento_exponencial(tiempo, magnitud_instante_igual_0,
valor_numero_e);
52
53 /∗Mostramos el valor de la magnitud final (tiempo >0) junto con el valor del número e usado en el cálculo∗/
54 mostrar_magnitud_final_con_parametro_e(tiempo, magnitud_instante_mayor_0, valor_numero_e);
55 } else {
56 printf("Los valores para el tiempo y la magnitud inicial deben ser positivos");
Capítulo 1: Guía de Laboratorio #4 22

57 }
58 }

La salida que genera este programa es la siguiente:

Ingrese el valor de la magnitud en el instante 0: 10


Ingrese el tiempo final (t>0): 5
El valor de la magnitud en el instante t=5 es: 1484.131591
El valor aproximado del numero e que ha usado es: 2.718282

Para pensar

¿Es posible aplicar la estrategia de dividir para vencer y obtener un diagrama de estructura o de

N
módulos diferente al propuesto?


AC


1.10. Los números casi primos

AS

PE
RA

CI
En diversos concursos de programación, la definición del número casi primo está presente y suele variar algunas
G
veces. Un número casi primo es aquel número que no es primo y que dentro de sus divisores solo tiene un

L
EN

DE
O

número primo.
PR

Por ejemplo: CI

CA
ES
DE

El número 4 es un número casi primo, debido a que no es primo y dentro de sus divisores que son el 1,

LI
2 y 4 solo tiene un número primo, que es el 2.
L


S

El número 6 no es un número casi primo, debido a que si bien es cierto no es un número primo, dentro
TO

ER

de sus divisores que son el 1, 2, 3 y 6 tiene 2 divisores que son primos, el 2 y 3.


CA
EN

EN

El usuario ingresará 2 números a y b, donde a>0 y textitb>0 y textita<b, con lo cual se busca representar
D
AM

un rango de números. El programa debe mostrar los números casi primos que existen en ese rango e indicar
G

DA

cuántos son.
S
ND

SI
DI

ER

1.10.1. Leyendo los datos de entrada


FU

TU

IV

Para resolver el problema será necesario conocer los valores de a y b que representan el rango de números a
evaluar. Estos valores serán ingresados a través de la consola para luego ser usados en nuestro programa. Para
ES

UN

ello, crearemos una función leer_datos que permita leer los valores de a y b. Al ser leer_datos una función que
devuelve 2 valores, los mismos deben ser argumentos por referencia para que puedan modificarse al momento
IA

de realizar el scanf y volver al main con los valores leídos. Una versión inicial de nuestro programa se encuentra
en el programa 1.21.
IC

Programa 1.21: Lectura y validación de datos


IF

#include <stdio.h>
NT

1
2
3 void leer_datos(int ∗a, int ∗b);
PO

4
5 int main(){
6 int i,a,b;
7 leer_datos(&a,&b);
8 if (a>0 && b>0 && a<b){
9 /∗ Completar ∗/
10 }
11 else
12 printf("Los datos ingresados no son correctos");
Capítulo 1: Guía de Laboratorio #4 23

13 return 0;
14 }
15
16 void leer_datos(int ∗a, int ∗b){
17 printf("Ingrese el rango a y b: ");
18 scanf(" %d %d",a,b);
19 }

1.10.2. Creamos la función evaluar_casi_primo

Lo que se solicita en el problema es hallar los números casi primos que existen en un rango, por lo que sería
una buena idea encapsular la evaluación de si un número es casi primo en una función, la cual recibiría como
parámetro el número a evaluar y devolvería 1 si el número en evaluación es casi primo o 0 si no lo es. Esta
función sería utilizada en la función main.

N

Una segunda versión de nuestro programa podría ser la presentada en el programa 1.22.

AC
Programa 1.22: Invocación de la función evaluar_casi_primo para cada número del rango


#include <stdio.h>

M
1

AS
2

PE
3 void leer_datos(int ∗a, int ∗b);
RA

CI
4 int evaluar_casi_primo(int numero);
G

L
5

EN
6 int main(){

DE
O

7 int i,a,b,cont_casi_primos=0,es_casi_primo;
PR

leer_datos(&a,&b);
8
9 if (a>0 && b>0 && a<b){ CI

CA
10 /∗Aquí recorremos con la variable i todos los números que están en el rango de a y b∗/
ES
DE

11 i=a;
while (i<=b) {

LI
12
L

13 es_casi_primo = evaluar_casi_primo(i); TÓ
S

14 if (es_casi_primo){
TO

printf("El número %d es casi primo\n", i);


ER

15
cont_casi_primos++;
CA

16
}
EN

17
EN

18 i++;
}
D

19
AM

printf("En el rango de %d a %d existen %d números casi primos",a,b,cont_casi_primos);


G

20
DA

21 }
else
S

22
ND

printf("Los datos ingresados no son correctos");


SI

23
return 0;
DI

24
ER

}
FU

25
TU

26
void leer_datos(int ∗a, int ∗b){
IV

27
28 printf("Ingrese el rango a y b: ");
ES

scanf(" %d %d",a,b);
UN

29
30 }
31
int evaluar_casi_primo(int numero) {
IA

32
33 int es_casi_primo=1; /∗Partiremos asumiendo que el número sí es casi primo∗/
/∗ Debemos evaluar las condiciones de casi primo utilizando los conceptos de números primos∗/
IC

34
35 /∗ Completar ∗/
IF

36
37 return es_casi_primo;
NT

38 }
PO

De la definición de un número casi primo podemos inferir que, para determinar si un número es casi primo
debemos considerar dentro de la evaluación si dicho número es primo o no, y en caso no lo fuese debemos
saber cuantos divisores primos tiene. Entonces vemos claramente que dentro de esta función utilizaremos una
función que permita evaluar si el número es primo, esta función será evaluar_si_es_primo.
Capítulo 1: Guía de Laboratorio #4 24

1.10.3. Usando la función evaluar_si_es_primo

Dentro de la evaluación de si un número es casi primo se necesita evaluar si dicho número no es primo y si
tiene exactamente solo 1 divisor primo.
Entonces se implementará la función evaluar_si_es_primo que evalúa si un número es primo. Esta función
será invocada dentro de la lógica de la función evaluar_casi_primo, además, puede ser invocada donde sea
necesaria.
Con este cambio, la versión final del programa se presenta en el programa 1.23.

Programa 1.23: Presenta los números casi primos en un determinado rango


1 #include <stdio.h>
2

N
3 void leer_datos(int ∗a, int ∗b);


4 int evaluar_casi_primo(int numero);
5 int evaluar_si_es_primo(int numero);

AC
6
int main(){


7
int i,a,b,cont_casi_primos=0,es_casi_primo;

M
8
leer_datos(&a,&b);

AS
9

PE
RA
10 if (a>0 && b>0 && a<b){
/∗Aqui recorremos con la variable i todos los números que están en el rango de a y b∗/

CI
11
12 for (i=a; i<=b; i++){
G

L
es_casi_primo = evaluar_casi_primo(i);

EN
13

DE
O

14 if (es_casi_primo){
printf("El número %d es casi primo\n",i);
PR

15
16 cont_casi_primos++; CI

CA
17 }
}
ES
DE

18
printf("En el rango de %d a %d existen %d números casi primos",a,b,cont_casi_primos);

LI
19
}
L

20
else

S

21
printf("Los datos ingresados no son correctos");
TO

22
ER

23 return 0;
CA

24 }
EN

EN

25
26 void leer_datos(int ∗a, int ∗b){
D

printf("Ingrese el rango a y b: ");


AM

27
DA

28 scanf(" %d %d",a,b);
}
S

29
ND

30
SI

31 int evaluar_si_es_primo(int numero){


DI

int cant_divisores=0, i, es_primo=0;


ER

32
FU

33 if (numero>1){
TU

34 i=1;
IV

35 while (i<=numero){ /∗Se calcula la cantidad de divisores del número∗/


if (numero %i==0)
ES

UN

36
37 cant_divisores++;
38 i++;
39 }
IA

40 if (cant_divisores==2)
41 es_primo = 1;
IC

42 }
return es_primo;
IF

43
44 }
NT

45
46 int evaluar_casi_primo(int numero) {
47 int es_casi_primo=0,cant_div_primos=0, i, es_primo, es_divisor_primo;
PO

48 es_primo = evaluar_si_es_primo(numero);
49 if (!es_primo){
50 i=1;
51 while (i<=numero) {
52 if (numero %i==0){
53 es_divisor_primo = evaluar_si_es_primo(i);
54 if (es_divisor_primo==1)
55 cant_div_primos++;
56 }
Capítulo 1: Guía de Laboratorio #4 25

57 i++;
58 }
59 /∗Se cumple ambas condiciones, el número no es primo y solo tiene 1 divisor primo∗/
60 if (cant_div_primos==1)
61 es_casi_primo=1;
62 }
63 return es_casi_primo;
64 }

La salida que genera este programa es la siguiente:

Ingrese el rango a y b: 1 20
El número 4 es casi primo
El número 8 es casi primo

N
El número 9 es casi primo


El número 16 es casi primo
En el rango de 1 a 20 existen 4 números casi primos

AC


M
Para pensar

AS

PE
¿Será posible obtener una solución distinta a la propuesta? RA

CI
G

L
EN

DE
O
PR

CI

CA
ES
DE

LI
L


S

A
TO

ER

CA
EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN
IA
IC
IF
NT
PO
R
26

OG
Capítulo 2
PR

CI
Ejercicios propuestos
DE
Para cada uno de los ejercicios propuestos se solicita que implemente un programa en el lenguaje C conforme
con los temas revisados en las guías preliminar, #1, #2 y #3 del curso de Fundamentos de Programación.

ES
Además, debe de utilizar el paradigma de programación modular revisado en esta guía.

2.1. Nivel básico


S

2.1.1. Los polinomios


AL
Un polinomio es una expresión algebraica formada a partir de dos o más términos que contienen coeficientes
y variables. Estos términos están vinculados por medio de operadores como la suma o la resta. Se dice que
un polinomio es un polinomio completo cuando existen todos sus términos (contando desde el término inde-
pendiente hasta el término de mayor grado), es decir, cuando todos las coeficientes de todos los términos son
ER
diferentes a cero.
Se le pide implementar un programa en el lenguaje C que lea el grado de un polinomio, junto con los coeficientes
asociados a cada término, y determine si se trata de un polinomio completo o no. En caso un coeficiente que
se ingrese sea 0, se considerará que dicho término no se encuentra en el polinomio. Se deberán ingresar los
coeficientes comenzando por el término independiente.
Recuerde que el grado de un polinomio es el mayor exponente al que se encuentra elevada una variable del
N

polinomio.
Su solución deberá incluir 3 funciones adicionales a la función main. Una función para la lectura de datos, una
GE

función para validar si un coeficiente es diferente de 0, y una función para la salida del mensaje final, tal y
como se muestra en los ejemplos de ejecución.
Un ejemplo de ejecución para el polinomio 3x3 + 2x + 5 sería:
AD
Ingrese el grado del polinomio: 3
Ingrese el coeficiente del término 0: 5
Ingrese el coeficiente del término 1: 2
Ingrese el coeficiente del término 2: 0
OS

Ingrese el coeficiente del término 3: 3


ID

El polinomio ingresado NO es completo.

Otro ejemplo de ejecución, esta vez para el polinimo 5x4 − 2x3 + x2 + 8x − 5 sería:
DI

Ingrese el grado del polinomio: 4


S

Ingrese el coeficiente del término 0: -5


ER
Capítulo 2: Ejercicios propuestos 27

Ingrese el coeficiente del término 1: 8


Ingrese el coeficiente del término 2: 1
Ingrese el coeficiente del término 3: -2
Ingrese el coeficiente del término 4: 5
El polinomio ingresado SÍ es completo.

Sugerencia:

Su función de lectura puede contener el ingreso de todos los valores de su solución, incluyendo
tanto el grado como los coeficientes (estos últimos de manera iterativa) y su función de validación
puede ser usada inmediatamente después de la lectura de cada coeficiente.

N
2.1.2. Movimiento armónico simple


AC
El movimiento armónico simple (M.A.S.), llamado también movimiento vibratorio armónico simple (M.V.A.S.)


es un movimiento caracterizado por ser periódico (y oscilatorio) en ausencia de fricción. El móvil que realiza

M
un M.A.S oscilará alejándose y acercándose de algún punto situado en el centro de su trayectoria.

AS

PE
RA
Algunas fórmulas usadas para realizar cálculos de este movimiento son se presentan a continuación:

CI
G

L
EN
∗ π.
T = 2w

DE
O
PR

f = T1 . CI

CA
ES
DE

Donde T = período, f = frecuencia de oscilación y w = frecuencia cíclica.

LI
L

Se le pide implementar un programa en el lenguaje C que solicite al usuario ingresar la frecuencia de oscilación

S

de un MAS, calcule y muestre su período y frecuencia cíclica.


TO

ER

CA

Su programa deberá incluir una función para la lectura de la frecuencia de oscilación f, una función para el
EN

cálculo del período T (a partir de la frecuencia de oscilación ingresada), una función para el cálculo de la
EN

frecuencia cíclica (a partir del período calculado) y una función de salida que imprima los 2 valores solicitados
D
AM

en el párrafo anterior.
DA
S
ND

SI

Sugerencia:
DI

ER
FU

Para trabajar con el número π, usted debería utilizar una directiva de preprocesamiento que
TU

realice una sustitución simbólica en base a una secuencia de caracteres.


IV
ES

UN

2.1.3. Máximo común divisor de 2 números


IA

Existen varias formas de calcular el máximo común divisor (MCD) de 2 números. Una de estas formas es listar
IC

todos los divisores de cada uno de estos 2 números y determinar cuál es la mayor coincidencia entre estas 2
IF

listas.
NT

Una variante de esta técnica, es solamente listar los divisores del menor de los 2 números a evaluar, y, trabajando
con esta lista de atrás hacia adelante (es decir, partiendo del mayor divisor, y terminando en el menor divisor),
PO

evaluar si cada uno de los elementos de esta lista son divisores del otro número a evaluar.
Se le pide implementar un programa en el lenguaje C que contenga:

La función main
Una función que permita determinar la cantidad de divisores que tiene un número.
Capítulo 2: Ejercicios propuestos 28

Una función que retorne el divisor número n de algún entero positivo. Su función deberá recibir como
parámetros el entero positivo a evaluar, y un número correspondiente al orden o posición del divisor a
devolver. Por ejemplo, los divisores del entero positivo 18 son 1, 2, 3, 6, 9 y 18. Por lo que su función
deberá poder devolver 6 resultados diferentes, en base al valor de n ingresado. En nuestro ejemplo, si
ingresa n=6, entonces el valor a retornar sera 18, si ingresa n=5, entonces el valor a retornar será 9.
Una función que reciba 2 números enteros como parámetros, y determine si el primero es divisor del
segundo. Por ejemplo, si recibe 6 y 48, dado que 6 es divisor de 48, la función retornará 1, en cambio, si
recibe 9 y 48, dado que 9 no es divisor de 48, la función retornará 0.

Su programa deberá leer 2 números A y B, y hacer uso de una estructura iterativa que itere tantas veces como
divisores tenga el número menor a evaluar, permitiendo hallar el MCD entre A y B. Por ejemplo, si A < B,
entonces en la primera vuelta, deberá generar el maximo divisor de A y evaluar si ese divisor de A es, además,
divisor de B. En la segunda vuelta, deberá generar el segundo mayor divisor A y evaluar si dicho divisor de a

N
es divisor de B, y así sucesivamente. La primera incidencia que encuentre, será el MCD de A y B.


A continuación, un ejemplo de ejecución para los números 48 y 18:

AC


Ingrese dos números (A B): 48 18

AS
el MCD de 48 y 18 es 6

PE
RA

CI
G
Su programa determinará que el número 48 tiene 10 divisores (1, 2, 3, 4, 6, 8, 12, 16 ,24, 48) y el número

L
EN

DE
O

18 tiene 6 divisores (1, 2, 3, 6, 9, 18). En seguida, dado que 48 es mayor a 18, su programa se dispondrá a
PR

generar los 6 divisores de 18, empezando por el mayor. El mayor divisor de 18 es el mismo 18, por lo tanto,
CI
su programa comparará este 18 (es decir, el sexto elemento de la lista de divisores de 18) contra el número 48

CA
preguntándose si 18 es divisor de 48.
ES
DE

LI
Dado que 18 no es divisor de 48, su programa comparará el siguiente máximo divisor de 18 (es decir, el quinto
L

elemento de la lista de divisores de 18) y repetirá el mismo proceso, es decir, trabajará con el 9, y se preguntará

S

si 9 es divisor de 48.
TO

ER

CA

Nuevamente, dado que el número evaluado no es divisor de 48, el programa generará ahora el tercer mayor
EN

EN

divisor de 18, que vale 6 (es decir, el cuarto elemento de la lista de divisores de 18) y al enfrentarlo contra 48,
encontrará que ese 6 sí es divisor de 48. En ese momento su programa dejará de iterar y mostrará un mensaje
D
AM

indicando cuál es el MCD entre 48 y 18.


DA
S
ND

Sugerencia
O

SI
DI

ER

Debido a lo extenso que es este ejercicio, no considerar el caso de 2 números que no tienen MCD.
FU

TU

Es decir, asuma que el usuario ingresará siempre una pareja de 2 números que tienen MCD.
IV

Asuma que el usuario ingresará siempre valores mayores o iguales a 2. No se preocupe por esta
ES

UN

validación.
IA

2.1.4. Mínimo común múltiplo de 2 números


IC
IF

Existen varias formas de calcular el mínimo común múltiplo (mcm) de 2 números. Una de estas formas es
comenzar a listar todos los posibles múltiplos de cada uno de estos 2 números y determinar cuál es la menor
NT

coincidencia entre estas 2 listas infinitas.


PO

Una variante de esta técnica es comenzar a generar solamente los múltiplos del mayor de los 2 números a
evaluar, y determinar si cada número generado es múltiplo del otro número. El primer número generado que
cumpla la condición de ser múltiplo del otro, será el mcm.
Se le pide implementar un programa en el lenguaje C que contenga:

La función main
Capítulo 2: Ejercicios propuestos 29

Una función que determine si un número A es múltiplo de otro número B (debe retornar 1 si es que A
es múltiplo de B, y 0 si es que A no es múltiplo de B).

Su programa deberá contener una estructura iterativa que, partiendo de dos números ingresados por teclado,
evalúe los 100 primeros múltiplos del mayor de ellos para determinar, haciendo uso de la función señalada en
la viñeta anterior, el mcm de los números ingresados.
A continuación, un ejemplo de ejecución para los números 6 y 8:

Ingrese dos números (A B): 6 8


el mcm de 6 y 8 es 24

En este ejemplo de ejecución, dado que 8 es mayor que 6, su programa comenzará a generar todos los posibles
múltiplos de 8, y cada uno de ellos será evaluado para determinar si se cumple que también es múltiplo de 6.

N
El primer valor múltplo de 8 generado que cumpla con la condición de ser múltiplo de 6 fue el número 24.


Sugerencia

AC


Asuma que todos los números ingresados permitirán encontrar un mcm dentro de los 100 primeros

AS
múltiplos comparados.

PE
RA

CI
Asuma que el usuario ingresará siempre valores mayores o iguales a 2. No se preocupe por esta
G
validación.

L
EN

DE
O

La solución natural de este problema es mediante el uso de una estructura iterativa controlada por
PR

CI
contador. En caso de que usted decida trabajar la iteración por medio de un centinela, no olvide

CA
la condición de generar solo los 100 primeros múltiplos del número mayor, para evitar iteraciones
ES
DE

infinitas.

LI
L


S

A
TO

ER

2.1.5. El pentágono regular


CA
EN

EN

Se dice que un pentágono es regular cuando todos sus lados son iguales y, además, todos sus ángulos internos
son congruentes. Ver Figura2.1.
D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN

Figura 2.1: Pentágono Regular


IA

En la figura 2.1, se puede apreciar que l es la longitud de sus lados, el ángulo interno es 108° y ap representa
IC

a la apotema del pentágono.


IF

Para realizar el cálculo del área del pentágono regular se utiliza la siguiente fórmula:
NT

5 ∗ l ∗ ap
Area = 2
PO

q
Para el cálculo del apotema se utiliza la siguiente fórmula: ap = r2 − ( 2l )2 , donde r es la distancia que
hay desde el centro del polígono a uno de los vértices del polígono.

Se le pide implementar un programa en el lenguaje C que solicite al usuario ingresar el lado del pentágono
regular y la distancia que hay desde el centro del pentágono a uno de sus vértices, calcule y muestre su apotema
y el área del pentágono regular.
R
Capítulo 2: Ejercicios propuestos 30

OG
Su solución deberá incluir una función para el cálculo del área del pentágono, la cual será llamada desde la
función main, y otra función para el cálculo del apotema, la cual será llamada desde la función que calcula el
área del pentágono.

Sugerencia

PR
Adicionalmente, puede considerar el uso de un módulo para la lectura de datos y otro módulo para la
impresión de los valores calculados.

CI
2.1.6. Los intervalos

Se denomina intervalo a un conjunto de números reales comprendidos entre un valor llamado límite inferior
y otro valor llamado límite superior. Si el intervalo incluye estos valores se dice que el intervalo es cerrado.
DE
Se le pide que implemente un programa en el lenguaje C que realice las siguientes operaciones con intervalos
cerrados:

El usuario podrá ingresar los límites inferior y superior de dos intervalos.

ES
Debe verificar, mediante una función, si dichos intervalos son válidos, es decir, deberá controlar que el
límite superior sea mayor o igual al límite inferior. Si alguno de los intervalos no es válido, debe mostrar
un mensaje de error indicando claramente cuál fue el intervalo inválido.
En el caso que ambos intervalos sean válidos, se deberá comprobar (mediante una función) si los inter-
S

valos se intersecan. Esta comprobación deberá incluir mensajes hacia el usuario para informarle si hay
intersección o no.
AL
En el caso que los intervalos se intersequen, debe obtenerse los límites inferior y superior del intervalo
resultante de la intersección.

Para la implementación utilice el diagrama de estructura o de módulos de la figura 2.2.


N ER
GE

AD
Figura 2.2: Diagrama de estructura o de módulos - Los intervalos

A continuación, se muestra un ejemplo de la ejecución del programa solicitado:

Ingrese límite inferior y superior del primer intervalo: -12.6 34.7


OS

ID
Ingrese límite inferior y superior del segundo intervalo: 5.4 63.9
El intervalo A es válido.
El intervalo B es válido.
¿Los intervalos A y B se intersecan? Sí.
Los datos del intervalo resultante de la intersección son:
Límite inferior: 5.4
DI

Límite Superior: 34.7


ER
Capítulo 2: Ejercicios propuestos 31

Ingrese límite inferior y superior del primer intervalo: -12.6 5.4


Ingrese límite inferior y superior del segundo intervalo: 34.7 63.9
El intervalo A es válido.
El intervalo B es válido.
¿Los intervalos A y B se intersecan? No.

2.1.7. Implementación de un menú con diferentes operaciones

En determinadas situaciones, vamos a requerir que nuestros programas realicen diferentes actividades, según
la necesidad del usuario. Para atender diferentes necesidades con un solo programa, es posible crear un menú
en el que se le presenta al usuario las diferentes funcionalidades de nuestros programas, para que ellos elijan
qué hacer.

N

Para explicar este concepto, vamos a apoyarnos de dos ejercicios muy sencillos, el primero correspondiente a
la distancia entre dos puntos, y el segundo correspondiente a la distancia entre un punto y una recta.

AC


Como se puede apreciar, estas dos tareas corresponden a diferentes cálculos de distancias en el plano cartesiano.

M
Usted podría elaborar un solo programa en el que se le muestre al usuario un menú con las dos posibles formas

AS

PE
RA
de calcular distancias, y el usuario pueda elegir entre las opciones del menú según su necesidad.

CI
G

L
EN
Recordar que:

DE
O
PR

En el plano cartesiano, un punto P está representado por una coordenada x y una coordenada y,
CI
denotándose de la siguiente forma: P(x,y). En geometría analítica, las líneas rectas en un plano pueden

CA
ES
ser expresadas mediante una ecuación del tipo Ax + By + C = 0, donde x e y son coordenadas de un
DE

punto en un plano cartesiano.

LI
L


S

Utilizando ambos conceptos, podemos calcular la distancia que existe entre 2 puntos y la distancia
TO

ER

mínima que existe de un punto a una recta.


CA
EN

EN

Para calcular la distancia que existe entre 2 puntos P (x1, y1) y Q(x2, y2) se cuenta con la siguiente
D

fórmula :
AM

DA

p
d = (x2 − x1 )2 + (y2 − y1 )2
S
ND

Para calcular la distancia mínima de un punto P (x1, y1) a una recta con ecuación Ax+By+C = 0
SI
DI

se tiene la siguiente fórmula:


ER
FU

|Ax1 + By1 + C|
TU

Dp l = p
IV

A2 + B 2
ES

UN

Se le pide elaborar un programa en el lenguaje C que le permita calcular la distancia entre 2 puntos y la
IA

distancia mínima de un punto a una recta. Para ello deberá imprimir un texto que le presente al usuario las
opciones que tiene su programa de cálculo de distancias y le permita seleccionar la funcionalidad que quiera.
IC

Un mensaje apropiado puede ser el siguiente: Ingrese 1 para calcular la distancia entre dos puntos, o ingrese
IF

2 para calcular la distancia entre un punto y una recta.


NT

Dependiendo del número que ingrese el usuario, su programa deberá realizar lo siguiente:
PO

Si ingresa la opción 1 se calculará e imprimirá la distancia entre 2 puntos, para realizar esta tarea, su
programa deberá leer las coordenadas correspondientes a 2 puntos, es decir, leerá cuatro coordenadas.
Además su pograma deberá determinar (mediante el uso de una función) si es que es mayor la distancia de
las abscisas (el par de coordenadas x), o la distancia de las ordenadas (el par de coordenadas y). Deberá
imprimir el mensaje correspondiente, considerando también la posibilidad de que ambas distancias sean
iguales.
R
Capítulo 2: Ejercicios propuestos 32

OG
Si ingresa la opción 2, se calculará la distancia mínima de un punto a una recta (para ello se ingresará
las coordenadas x e y de un punto, y luego los valores para los coeficientes A, B y C correspondientes
a la recta). En seguida, deberá reemplazar estos 5 valores en la fórmula correspondiente e imprimir la
distancia solicitada.

PR
Considere el siguiente diagrama de estructura o de módulos para resolver el problema:

CI
DE

ES
S

AL
Figura 2.3: Diagrama de estructura o de módulos - Puntos en el plano cartesiano.

A continuación, se muestran algunos ejemplos de ejecución:


ER
Ingrese 1 para calcular la distancia entre dos puntos, o ingrese 2 para calcular la distancia
entre un punto y una recta: 1
Ingrese las coordenadas del primer punto (x1 y1): 4 1
Ingrese las coordenadas del segundo punto (x2 y2): 7 5
La distancia entre el punto (4,1) y el punto (7,5) es 5
N

La diferencia mayor estuvo en las coordenadas Y


GE

Ingrese 1 para calcular la distancia entre dos puntos, o ingrese 2 para calcular la distancia
entre un punto y una recta: 2
Ingrese las coordenadas del punto (x y): 4 3
AD
Ingrese los 3 coeficientes de la recta Ax+By+C=0: 5 -12 -10
La menor distancia entre el punto (4,1) y la recta (5)x+(-12)y+(-10) = 0 es: 3

Sugerencia:

El cálculo de cada distancia deberá ser implementado en una función aparte.


OS

ID

Usted puede agregar dos funciones de lectura de datos (una para leer 2 puntos, y otra para leer un
punto y una recta), y dos funciones para la salida de datos (una para la distancia entre 2 puntos
y la diferencia mayor, y otra para la menor distancia entre un punto y una recta).

Usted puede agregar una tercera opción a su menú que diga: Para finalizar el programa, ingrese
9, y programar una impresión de mensaje de finalización en caso el usuario ingrese dicho número.
DI

S
ER
Capítulo 2: Ejercicios propuestos 33

A continuación, se muestran un ejemplo de ejecución con el cambio propuesto:

Ingrese 1 para calcular la distancia entre dos puntos, ingrese 2 para calcular la distancia
entre un punto y una recta, o ingrese 9 para finalizar: 9

Gracias por usar nuestros servicios, hasta luego.

2.1.8. Tres números consecutivos

Se le pide realizar un programa en el lenguaje C que solicite al usuario una lista de 20 números positivos y
que indique el mensaje ¡Felicitaciones, ha ingresado 3 números consecutivos! cada vez que se identifique que
se han introducido 3 números consecutivos. Después de haber ingresado los 20 números, el programa deberá

N
indicar cuántas veces se imprimió el mensaje de felicitaciones. No considerar una misma lectura de datos para


dos triadas diferentes, es decir, si ingresa los números 3, 4, 5, 6, 7, 1 solo debe considerar la secuencia 3, 4, 5 en
su mensaje de bienvenida e ignorar las triadas 4, 5, 6 y 5, 6, 7. Por lo tanto, en este ejemplo solo se imprime

AC
1 mensaje de felicitaciones. En cambio, si se ingresan los números 3, 4, 5, 6, 7, 8, entonces se imprimirían 2


mensajes de felicitaciones.

AS
Su solución debe incluir las siguientes funciones:

PE
RA

CI
La función main.
G

L
EN

DE
O

Una función que lea 1 número.


PR

Una función que recuerde los 3 últimos números leídos.


CI

CA
ES
DE

Una función que verifique si 3 números son consecutivos.

LI
L

Otras funciones que usted considere importantes tanto para la impresión de mensajs, como para el conteo

S

de coincidencias.
TO

ER

CA

A continuación se presenta un ejemplo de ejecución:


EN

EN

D
AM

Ingrese un número: 3
DA

Ingrese un número: 4
S
ND

Ingrese un número: 6
O

SI

Ingrese un número: 7
DI

ER

Ingrese un número: 8
FU

TU

¡Felicitaciones, ha ingresado 3 números consecutivos!


IV

Ingrese un número: 9
ES

Ingrese un número: 4
UN

Ingrese un número: 1
Ingrese un número: 2
IA

Ingrese un número: 5
Ingrese un número: 3
IC

Ingrese un número: 4
IF

Ingrese un número: 8
NT

Ingrese un número: 9
Ingrese un número: 10
PO

¡Felicitaciones, ha ingresado 3 números consecutivos!


Ingrese un número: 9
Ingrese un número: 14
Ingrese un número: 1
Ingrese un número: 22
Ingrese un número: 5
Se imprimió un total de 2 mensajes de felicitaciones.
Capítulo 2: Ejercicios propuestos 34

Sugerencia

Puede probar una variante con estructura iterativa controlada por centinela, en la que se soliciten
infinitos números y el programa termine cuando el usuario ingrese el valor de -1. En este caso, el
número de intentos ya no estaría limitado por el número 20.

A continuación se presenta un ejemplo de ejecución con esta variante:

Ingrese un número: 6
Ingrese un número: 7
Ingrese un número: 8
¡Felicitaciones, ha ingresado 3 números consecutivos!
Ingrese un número: 9

N
Ingrese un número: 4


Ingrese un número: 5
Ingrese un número: 6

AC
¡Felicitaciones, ha ingresado 3 números consecutivos!


Ingrese un número: 7

AS
Ingrese un número: 8

PE
Ingrese un número: 4
RA

CI
Ingrese un número: -1
G

L
Se imprimió un total de 2 mensajes de felicitaciones.

EN

DE
O
PR

2.1.9. Función Gaussiana


CI

CA
ES
DE

La función Gaussiana (en honor a Carl Friedrich Gauss) es una función ampliamente usada en estadística cuya

LI
L

gráfica tiene una foma característica de campana como puede apreciarse en la figura 2.4.

S

A
TO

ER

CA
EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN
IA

Figura 2.4: Curva de distribución normal - Campana de Gauss


IC

A esta curva también se le conoce como curva de distribución normal dado que permite modelar muchos
IF

fenómenos naturales, sociales y psicológicos.


NT

La función Gaussiana está definida por la siguiente fórmula:


PO


(x − b)2
f (x) = ae 2c2

Donde:

a determina el valor del punto más alto de la campana


Capítulo 2: Ejercicios propuestos 35

b determina el centro de la campana


c determina el ancho de la campana

En Estadística, se utiliza mucho una función gaussiana en la que:

1
a= √
c 2π
Pues, esta función Gaussiana permite modelar la función de densidad de una variable aleatoria, con media
µ = b y varianza σ 2 = c2 . Tendríamos, entonces, una función Gaussiana con las siguientes características:


(x − µ)2
1
f (x) = √ e 2σ 2
σ 2π

N

Donde:

AC


f (x) es el valor de la función para el punto x

AS
µ es media de los valores del conjunto de datos X = {x1 , x2 , ..., xn }

PE
RA

CI
σ es el valor de la desviación estándar del conjunto de datos X = {x1 , x2 , ..., xn }
G

L
EN

DE
O

Se le pide implementar un programa en el lenguaje C que permita conocer el valor de la función f (x) para un
PR

punto dado x considerando que se conocen los valores de la media µ y desviación estándar σ. Su solución deberá
CI
incluir una función para el cálculo de f (x) y otra para la impresión de un mensaje que indique claramente

CA
cuál es el resultado de la función, y cuál valor de x se usó para calcular dicho resultado. El valor de π debe
ES
DE

ser tratado como una constante simbólica con su respectiva directiva de pre procesamiento.

LI
L


Con el objetivo de entender mejor cómo funciona el paradigma de programación modular, utilice la función
S

A
TO

descrita en la sección 1.7 que permite el cálculo del número e.


ER

CA

En la figura 2.5, se muestra el diagrama de estructura o de módulos sugerido para el diseño del programa.
EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN
IA
IC

Figura 2.5: Diagrama de estructura o de módulos - Función Gaussiana


IF
NT

Sugerencia
PO

Con el objetivo de entender mejor cómo funciona el paradigma, considere también implementar una
función ficticia para el cálculo del número π, es decir, en vez de usar una directiva de pre procesamiento,
deberá cargar su variable π mediante una función que lo único que hace es retornar 3.141593. Más
adelante, trabajaremos una función que estima el valor de este número y la implementaremos como parte
de nuestros programas, pero este ejercicio le ayudará a comprender mejor cómo es que se comunican 2
o más funciones para cumplir un objetivo.
R
Capítulo 2: Ejercicios propuestos 36

OG
2.1.10. Cálculo del número Pi

El cálculo del número π siempre ha sido una tarea desafiante. Para este fin se han utilizado distintas series como
la de Gregory, Newton, Sharp, Euler, entre otras. En 1655, Jhon Wallis descubrió una productoria (conocida
como el producto de Wallis) que aproxima el valor de π.

PR El producto de Wallis establece que

CI
∞  
Y 2n 2n 2 2 4 4 6 6 8 8 π
· = · · · · · · · =
n=1
2n − 1 2n + 1 1 3 3 5 5 7 7 9 2
DE
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 menos error de aproximación.
Se le pide que desarrolle un programa en el lenguaje C que permita imprimir el valor aproximado de π usando
el producto de Wallis con 200 términos y 2000 términos. Su solución deberá incluir una función que retorne

ES
la aproximación de π en base a un número determinado de términos. Deberá hacer un llamado a esta función
tanto para la aproximación con 200 términos y la aproximación con 2000 términos.
A continuación, se presenta un ejemplo de una posible salida de este programa:
S

El número PI (200 términos) es: 3.137678


El número PI (2000 términos) es: 3.141200
AL
2.2. Nivel intermedio
ER
2.2.1. La conjetura de Collatz

En 1937, el matemático alemán Lothar Collatz, enunció la conjetura de Collatz, también conocida como el
problema de Ulam, conjetura 3n + 1, entre otros. Collatz enunció que, a partir de cualquier número natural,
siempre se puede llegar a la unidad siguiendo el mismo procedimiento: Si el número es par, hay que dividirlo
entre 2, en cambio, si no es par, solo hay que multiplicarlo por 3 y sumarle 1. Repetir este procedimiento hasta
N

obtener 1 como respuesta.


Por ejemplo, si se toma el número 13, se obtiene el siguientes resultado: 40, 20, 10, 5, 16, 8, 4, 2, 1; y si se
GE

toma el número 6, se obtiene el siguiente resultado: 3, 10, 5, 16, 8, 4, 2, 1


Se le pide que desarrolle un programa en el lenguaje C que permita imprimir el valor de la serie cuando se
ingresa un número entero positivo. Su solución deberá contener una función que reciba un número n, y retorne
AD
n/2 si se trata de un número par, y 3n+1 si se trata de un número impar. Para eso, esta función deberá hacer
un llamado a otra función que valide si un número es par o impar.
Deberá hacer uso de una estructura iterativa que le permita generar la serie de Collatz de un número ingresado
por teclado, invocando múltiples veces a las funciones descritas en el párrafo anterior.

Sugerencia
OS

ID

Si decide usar una función con parámetros por valor, deberá iterar con dos variables que almacenen el
término actual y el término de la iteración anterior. Si decide usar una función que simule el paso de
parámetros por referencia, deberá sobrescribir repetidas veces el valor a evaluar. No olvide imprimirlo
antes de volver a sobrescribirlo.
DI

A continuación sigue un ejemplo de una posible salida de este programa para un determinado número:
S
ER
Capítulo 2: Ejercicios propuestos 37

Ingresa número a evaluar: 6


La serie es: 3,10,5,16,8,4,2,1.

2.2.2. Las rectas paralelas y perpendiculares

Es muy frecuente que, al graficar dos ecuaciones lineales en un plano de coordenadas, estas se crucen. En el
caso de que se crucen en un ángulo recto, se dice que estas rectas son perpendiculares. Para saber si se cruzarán
formando un ángulo recto, basta con calcular el producto de las pendientes de ambas rectas, si este producto
es igual a -1, podemos afirmar que estamos frente a dos rectas perpendiculares.
Por otro lado, existen también algunas rectas que nunca se cruzan. Estas son llamadas rectas paralelas y
pueden identificarse rápidamente comparando sus pendientes. Dos rectas serán paralelas si sus pendientes son

N
iguales.


Se le pide desarrollar un programa en el lenguaje C que permita leer el valor de 4 puntos P(x1,y1), Q(x2,y2),

AC
R(x3,y3), S(x4,y4) y determine si la recta formada por los puntos P y Q es paralela, perpendicular o simple-
mente se cruza con la recta formada por los puntos S y R. Debe mostrar un mensaje indicando de cuál de


M
estos posibles 3 casos se trata.

AS

PE
RA
A continuación, se muestra un ejemplo de una posible salida de este programa para 4 puntos:

CI
G

L
EN
Ingresa los valores x e y para el punto P: 3 7

DE
O

Ingresa los valores x e y para el punto Q: -5 -1


PR

Ingresa los valores x e y para el punto R: -3 5 CI

CA
Ingresa los valores x e y para el punto S: 4 -4
ES
DE

La recta formada por los puntos P y Q es perpendicular a la recta formada por los puntos R y S.

LI
L


S

Sugerencia
TO

ER

CA

Puede considerar las siguientes funciones:


EN

EN

Una función que calcule la pendiente de una recta.


D
AM

DA

Una función que determine si dos rectas son paralelas.


S
ND

Una función que determine si dos rectas son perpendiculares.


O

SI
DI

ER

Una función que lea las 2 coordenadas de un punto. Esta función deberá imprimir un mensaje
FU

como el que se muestra en el ejemplo de ejecución, por lo que deberá estar preparada para imprimir
TU

IV

el nombre del punto a leer, en base a un parámetro dado (de tipo caracter).
ES

UN

2.2.3. Los números catalanes


IA
IC

Los números catalanes son los números que están asociados a la fórmula:
IF

 
1 2i
Ci =
NT

i+1 i
PO

Recordemos que para trabajar con combinatorias sin repetición, se puede usar la siguiente fórmula:
 
n n!
=
p p! (n − p)!

Por lo tanto:  
2i (2i)! (2i)!
= =
i i! (2i − i)! i! × i!
Capítulo 2: Ejercicios propuestos 38

Reemplazando en nuestra fórmula de número catalán, teneos que:


   
1 2i 1 (2i)! (2i)!
Ci = = =
i+1 i i + 1 i! × i! (i + 1)! × i!

Siguiendo esta fórmula, es posible determinar que los primeros números catalanes son: 1,1,2,5,14,42,132,429...
Se le pide implementar un programa en el lenguaje C que al ingresar un número i, calcule e imprima todos los
números catalanes desde C0 hasta Ci
Su solución deberá incluir una función para el cálculo del factorial de un número, y una función para el cálculo
de un número catalán. Estas funciones deberán ser llamadas repetidas veces desde una estructura iterativa con
entrada controlada.
A continuación, se muestran dos ejemplos de ejecución:

N

Ingresar un número: 0

AC
Los números catalanes correspondientes son: 1


M

AS
Ingresar un número: 4

PE
Los números catalanes correspondientes son: 1, 1, 2, 5, 14 RA

CI
G

L
EN

DE
O

2.2.4. Lejos de los primos


PR

CI

CA
Un número primo es un entero mayor que 1 cuyos únicos divisores son él mismo, y la unidad. Algunos ejemplos
ES
DE

de números primos son: 2, 3, 5, 7, 11, 13y17. Un número N se considera lejano de un número primo si es que no

LI
existen números primos desde N − 10 hasta N + 10. Es decir, ninguno de los números N − 10, N − 9, ..., N −
L


S

1, N, N + 1, ..., N + 9, N + 10 deberá ser primo para considerar a N como un número lejano de los primos.
TO

ER

Se le pide: dado un entero A y un entero B. Devuelva la cantidad de números lejanos de primos contenidos
CA

entre A y B inclusive. Por ejemplo, si se ingresaran los números A = 3328 y B = 4100, encontraríamos que
EN

EN

existen 4 números lejanos de primos que son los números 3480, 3750, 3978 y 4038.
D
AM

En la salida deberá imprimir la cantidad de números lejano de primos que existen entre A y B, acompañada
DA

de un mensaje, tal y como se aprecia en el ejemplo de ejecución. Su solución deberá incluir una función que
S
ND

determine si un númro es primo o no, la cual será invocada para evaluar a todos los números comprendidos
O

SI

entre N − 10 y N + 10 inclusive.
DI

ER
FU

A continuación se muestra un ejemplo de una posible salida de este programa:


TU

IV
ES

UN

Ingrese los valores del rango: 3328 4100


Cantidad de números lejanos de los primos: 4
IA

Ingrese los valores del rango: 10 1000


IC

Cantidad de números lejanos de los primos: 0


IF
NT

2.2.5. Los primos truncables


PO

El número n=3797 tiene una propiedad muy interesante. Siendo n un número primo es posible quitar conti-
nuamente sus dígitos de izquierda a derecha o de derecha a izquierda, y cada uno de los números remanentes
también será primo. Por ejemplo, de izquierda a derecha, después de cada retiro de dígitos, se obtendrían
los valores 3797, 797, 97 y 7, los cuales son todos números primos. Similarmente si trabajamos de derecha a
izquierda, se obtendrían los valores 3797, 379, 37 y 3, todos primos.
Capítulo 2: Ejercicios propuestos 39

Sugerencia

No considerar números de 1 cifra, es decir, los números 2, 3, 5 y 7 no se consideran primos truncables.


Asimismo, recuerde que el número 1 no es primo.

Se le pide implementar un programa que solicite al usuario el ingreso de un rango de dos números enteros
mayores que 1, y retorne un mensaje con todos los números primos truncables que hay dentro del rango
ingresado. Si no hay ningún primo truncable su programa deberá imprimir un mensaje indicando lo sucedido.
Su solución deberá implementar una función que realice el retiro de dígitos de izquierda a derecha y otra
función que realize el retiro de dígitos de derecha a izquierda:

Ingrese los valores del rango: 0 50


23 31 37

N

Ingrese los valores del rango: 3700 3800

AC
3797


M

AS

PE
2.2.6. La conjetura de Goldbach
RA

CI
La conjetura de Goldbach es un teorema que señala que todo número par mayor que 2 puede escribirse como la
G

L
EN
suma de dos números primos. Por ejemplo, el número 8 puede escribirse escribirse como la suma de los primos

DE
O

3 y 5.
PR

CI

CA
Se le solicita implementar un programa en el lenguaje C que determine si un número ingresado por teclado
ES
DE

cumple con la conjetura de Goldbach. Usted debe asumir que el usuario únicamente ingresará números pares

LI
mayores a 2, es decir, no debe validar que el número ingresado cumpla esta condición, y deberá únicamente
L

validar si el número ingresado cumple con la conjetura o no.



S

A
TO

ER

Al evaluar si su número cumpla la conjetura deberá, además, imprimir los números primos que permiten que se
CA

cumple dicha conjetura. En caso un número pueda ser representado por dos o más sumas diferentes de primos,
EN

EN

todas estas deberán ser impresas (cada una en una línea diferente).
D

Su solución deberá incluir una función que determine si un número es primo o no, la cual deberá ser invocada
AM

DA

repetidas veces dentro de una estructura iterativa que genere todas las posibles parejas de sumas de primos
S

a comparar con el valor ingresado por teclado. En caso de que un número par mayor a 2 no cumpla con esta
ND

SI

conjetura, su programa deberá imprimir un mensaje de alerta, caso contrario, deberá imprimir el mensaje "Se
DI

ER

cumple la conjetura de Goldbach".


FU

TU

A continuación, se muestra un ejemplo de ejecución:


IV
ES

UN

Ingrese un número: 10
10 = 3 + 7
IA

10 = 5 + 5
10 = 7 + 3
IC

Se cumple la conjetura de Goldbach


IF
NT

2.2.7. Encontrar el capicúa más cercano


PO

Un número N es capicúa, cuando se lee igual de izquierda a derecha que de derecha a izquierda. Se le solicita
implementar un programa en el lenguaje C que lea un número y determine si es capicúa o no. En caso de que
no lo sea, su solución deberá encontrar el capicúa más cercano, indicando cuánto se tiene que restar o sumar
para hallar dicho número capicúa.
Su solución deberá hacer uso de una estructura algorítmicas iterativa para realizar la búsqueda del número
capicúa más cercano, generando nuevos números mayores o menores al número ingresado por teclado.
Capítulo 2: Ejercicios propuestos 40

Su solución deberá incluir una función que verifique si un número es capicúa o no. Esta función deberá volver
a ser llamada cada vez que se generan números mayores o menores al número ingresado por teclado, para que
sean evaluados también. En caso de que un número ingresado por teclado esté igual de cerca de dos números
capicúas, su programa deberá imprimir los dos.
En el caso propuesto, se cumple ver Figura 2.6.

Figura 2.6: Ejemplo capicúa cercano

A continuación se muetran dos ejemplos de ejecución de este programa:

N
Ingresar número: 124


Capicúa más cercano es 121, se tiene que restar 3.

AC


M
Ingresar número: 126

AS
Capicúa más cercano es 121, se tiene que restar 5.

PE
Capicúa más cercano es 131, se tiene que sumar 5. RA

CI
G

L
EN

DE
O

Ingresar número: 121


PR

El número ingresado es capicúa. CI

CA
ES
DE

2.2.8. Rotación de números

LI
L


S

Llamemos rotación de un número al proceso por el cual tomamos un número y corremos una posición todos
TO

ER

sus dígitos (para el caso del dígito que quede fuera, este toma el lugar de la posición que quedó vacía al
CA

hacer el cambio). Por ejemplo, el número 45678 puede rotar hacia la derecha, moviendo sus primeros 4 dígitos
EN

EN

una posición hacia la derecha, y el quinto dígito (el número 8) a la posición inicial, es decir, quedaria 84567.
D

Asimismo, este número podría rotar hacia la izquierda si corremos sus últimos 4 digitos una posición hacia la
AM

DA

izquierda, y movemos el primer dígito a la posición de la unidad, de la siguiente manera: 56784.


S

Se le pide implementar un programa que reciba como datos un número a rotar, el número de veces que se quiere
ND

SI

hacer la rotación, y un caracter que permita al usuario indicar hacia qué dirección desea hacer la rotación:
DI

ER

rotando hacia la derecha si el usuario ingresa la letra D y hacia la izquierda si el usuario ingresa la letra I
FU

TU

(considere mayúsculas y minúsculas).


IV

Su solución deberá hacer uso de una función que, simulando el paso de parámetros por referencia, permita
ES

UN

realizar la rotación dentro de una misma variable, es decir, su función deberá sobrescribir al número ingresado
cada vez que este sea rotado.
IA

A continuación, un ejemplo de ejecución:


IC

Ingrese el número a rotar: 789456


IF

Ingresar la cantidad de veces:2


NT

Ingresar sentido de la rotación: I


El resultado es: 945678
PO

Sugerencia

Puede considerar una función que convierta la «D» mayúscula en «d» minúscula, y la «I» mayúscula
por «i» minúscula para facilitar la elección de la dirección de la rotación. De hacer esto, luego solo
tendría que validar contra minúsculas.
Capítulo 2: Ejercicios propuestos 41

2.2.9. El reloj digital

En un reloj digital, la hora se representa por tres números enteros: las horas h, los minutos m y los segundos
s. En cambio, en un reloj analógico se utilizan 3 agujas para representar la hora: el horario, el minutero y el
segundero; cada una de ellas forma un ángulo respecto al origen (una aguja imaginaria que apunta hacia las
12). Si se conociera la hora del reloj digital, se podría determinar los ángulos que forma cada aguja del reloj
analógico, con respecto al origen (aguja imaginaria que señala las 12):

AngH = 30 h + m/2 + s/120

AngM = 6m +s/10
AngS = 6s

N
Donde AngH es el ángulo del horario, AngM es el ángulo del minutero y AngS es el ángulo del segundero. Se


le solicita implementar un programa que requiere el ingreso de la hora en un reloj digital, y calcule en qué

AC
posición se deberán colocar las agujas de un relog analógico para que este señale la hora ingresada por teclado.


Deberá asumir que se trata de un reloj analógico nuevo, por lo que al comenzar su programa, las 3 agujas se

AS
encontrarán apuntando hacia las 12. Su salida de datos deberá indicar cuántos ángulos se debe mover cada

PE
RA
aguja. Considere tres funciones para el cálculo de los tres ángulos finales en los que deberán estar cada una de

CI
las tres agujas (pues cada aguja obedece a una fórmula diferente) y, además, una función que calcule cuántos
G

L
ángulos debe moverse una aguja cualquiera para llegar desde su posición inicial hasta su posición final.

EN

DE
O

Para este ejercicio, dado que las tres agujas se encuentran inicialmente apuntando hacia las 12, esta función
PR

CI
siempre retornará un valor idéntico al ángulo correspondiente a la posición final de la aguja evaluada. Por

CA
ejemplo, si desea que el minutero señale 15 minutos (es decir, que apunte hacia las 3), esta función recibirá
ES
DE

como parámetros la posición inicial en ángulos (cero, pues la aguja inicialmente apunta hacia las 12) y la

LI
posición final en ángulos (90, pues en su posición final debe apuntar hacia las 3), motivo por el cual la función
L


retornará 90, ya que 90 - 0 = 90.
S

A
TO

ER

A continuación, se presenta un gráfico que muestra las tres agujas del reloj analógico, así como también una
CA

aguja ficticia que señala a las 12. Su programa deberá siempre calcular las diferencias entre el ángulo de cada
EN

EN

aguja y el ángulo de la aguja imaginaria representada por una línea punteada. Ver figura 2.7.
D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN
IA
IC

Figura 2.7: Reloj analógico


IF
NT

A continuación, un ejemplo de ejecución:


PO

Ingrese una hora en formato hh:mm:ss 03:00:00


El horario debe moverse 90 grados
El minutero debe moverse 0 grados
El segundero debe moverse 0 grados
R
Capítulo 2: Ejercicios propuestos 42

OG
Sugerencia

Asuma que el usuario siempre ingresa valores entre 00:00:00 y 11:59:59. Asuma que el usuario siempre
ingresará horas menores o iguales a 11, minutos menores o iguales a 59 y segundos menores o iguales a
59.

PR
Para pensar

Considere implementar este mismo ejercicio para situaciones en las que las manecillas inicialmente no

CI
se encuentran apuntando hacia las 12. Puede agregar una lectura para el ingreso de la hora inicial (y
calcular el ángulo en el que se encuentra cada aguja al comienzo del ejercicio) y otra lectura para el
ingreso de la hora final (y calcular el ángulo en el que se deben encontrar cada una de las agujas al
finalizar del ejercicio), e imprimir cuántos grados se debería mover cada aguja (puede escribir los grados
negativos para el caso de las agujas que tengan que retroceder).
DE
Para pensar

Considere implementar un programa que lea la hora inicial y múltiples horas finales. El programa

ES
indicará los grados que deben moverse las agujas frente a cada nuevo ingreso de datos. Su programa
deberá terminar cuando el usuario ingrese la hora 99:99:99.
S

2.2.10. Coordenadas polares y cartesianas


AL
Existen dos sitemas de coordenadas bidimensionales muy conocidos: las coordenadas polares y las coordenadas
cartesianas.

Un punto P en coordenadas polares se representa por un par de números (r;θ) donde r es la distancia
del origen O al punto dado P y donde θ es el ángulo de inclinación del radio vector OP con respecto al
ER
eje polar (eje equivalente al eje x del sistema cartesiano), tal y como se muestra en la figura 2.8.
Un punto P en coordenadas cartesianas se representa por un par de número (a,b) donde a es una posición
en el plano X y b es una posición en el plano Y.

Para transformar un punto P(x,y) a su representación polar, o un punto P(r,θ) a su representación cartesiana,
se pueden las siguientes fórmulas:
N

r2 = x2 + y 2
GE

y
θ = arctg( x )
x = r*cos(θ)
AD
y = r*sen(θ)

Se le pide implementar un programa en el lenguaje C que lea un punto P(x,y), calcule y muestre su repre-
sentación en coordenadas polares, o un punto P(r,θ) y calcule y muestre su representación en coordenadas
cartesianas, según lo solicite el usuario. Las fórmulas listadas en este enunciado solo son válidas para coorde-
OS

nadas cartesianas que correspondan a un punto ubicado en el primer cuadrante, por lo tanto, usted deberá
ID

asumir que el usuario siempre ingresa puntos ubicados en dicho cuadrante.


Su solución deberá incluir: la función main, una constante simbólica para establecer el valor de PI, una función
que transforme un punto de coordenadas polares a coordenadas cartesianas, una función que transforme un
punto de coordenadas cartesianas a coordenadas polares, y otras funciones que usted considere conveniente.
Su solución deberá, además, incluir un menú inicial para que el usuario elija qué tipo de conversión desea
DI

realizar. A continuación, se muestran dos ejemplos de ejecución:


ER
Capítulo 2: Ejercicios propuestos 43

Figura 2.8: Punto en el sistema de coordenadas polar

Coordenadas Polares y Cartesianas

N
Ingrese 1 para convertir un punto de coordenadas cartesianas a polares


Ingrese 2 para convertir un punto de coordenadas polares a cartesianas
1

AC
Eligió convertir un punto de coordenadas cartesianas a polares


Por favor, ingrese un punto X, Y: 12, 5

AS
Resultado: P(13, 22.6)

PE
RA

CI
G
Coordenadas Polares y Cartesianas

L
EN

DE
O
Ingrese 1 para convertir un punto de coordenadas cartesianas a polares
PR

Ingrese 2 para convertir un punto de coordenadas polares a cartesianas


2 CI

CA
Eligió convertir un punto de coordenadas polares a cartesianas
ES
DE

Por favor, ingrese un punto r, zeta: 13, 22.6

LI
L

Resultado: P(12, 5) TÓ
S

A
TO

ER

CA

Sugerencia
EN

EN

Recuerde que la función atan() retorna el arcotangente de un argumento (ángulo en radianes). Usted
D

deberá hacer las conversiones necesarias para la resolución de este problema.


AM

DA
S
ND

SI
DI

ER

2.3. Nivel avanzado


FU

TU

IV

2.3.1. Números deficientes, abundantes, perfectos y semiperfectos


ES

UN

Un número natural es deficiente cuando la suma de sus divisores propios es menor que él. Se denomina divisor
propio de un número natural n, a otro número también natural que es divisor de n, pero diferente de n. Por
IA

ejemplo:
IC

10 es deficiente porque sus divisores propios, 1, 2 y 5 suman 8 que es menor que 10.
IF
NT

Un número natural es abundante cuando la suma de sus divisores propios es mayor que él. Por ejemplo:
PO

12 es abundante porque sus divisores propios, 1, 2, 3, 4 y 6 suman 16 que es mayor que 12.

Un número natural es perfecto, cuando la suma de sus divisores propios es igual a él. Por ejemplo:

6 es perfecto porque sus divisores propios, 1, 2 y 3 suman 6 que es igual a 6.


Capítulo 2: Ejercicios propuestos 44

Un número natural es semiperfecto, cuando la suma de algunos de sus divisores propios es igual a él. Para
números naturales menores que 30, una forma para determinar si el número es semiperfecto es restar a la suma
de divisores propios, uno de los divisores propios, si uno de esos resultados es igual al número, entonces se
puede decir que el número es semiperfecto. Por ejemplo:

12 es semiperfecto porque algunos de sus divisores propios, 1, 2, 3 y 6 suman 12 que es igual a 12.

Los números perfectos son también semiperfectos.


Se le pide a usted que elabore un programa en ANSI C que, haciendo uso de la programación modular con
estructuras algorítmicas selectivas e iterativas, realice lo siguiente:

Realice la lectura de un número n (0 < n < 30).

N
Verifique que el número natural ingresado sea mayor que 0 y menor que 30. Si no está en el rango,


muestra el mensaje El valor ingresado no pertenece al rango 0<n<30 y el programa termina.

AC
Si el número ingresado pertenece al rango válido, imprima en pantalla si el número es deficiente, abun-


dante o perfecto, si el número es también semiperfecto deberá indicarlo.

AS

PE
RA
Su solución deberá incluir las siguientes funciones, además de la función main:

CI
G

L
void leer_datos(int *n) //Función que, mediante el paso de parámetro por referencia, lee el valor de

EN

DE
O

n ingresado por teclado


PR

CI
int es_valido(int n) //Función que verifica si el valor de n es mayor que 0 y menor que 30.

CA
ES
DE

int sum_divisores_propios(int n) //Función que retorna la suma de los divisores propios de n.

LI
L

int es_deficiente(int n, int sum_div_propios) //Función que evalúa si n es deficiente, y recibe



S

como parámetros, el valor de n y el valor de la suma de divisores propios.


TO

ER

CA

int es_abundante(int n, int sum_div_propios) //Función que evalúa si n es abundante, y recibe


EN

EN

como parámetros, el valor de n y el valor de la suma de divisores propios.


D
AM

int es_perfecto(int n, int sum_div_propios) //Función que evalúa si n es perfecto, y recibe como
G

DA

parámetros, el valor de n y el valor de la suma de divisores propios.


S
ND

SI

int es_semi_perfecto(int n, int sum_div_propios) //Función que evalúa si n es semiperfecto, y


DI

recibe como parámetros, el valor de n y el valor de la suma de divisores propios.


ER
FU

TU

IV

Casos de prueba para verificación de solución


ES

UN

Use los siguientes casos de prueba para verificar si su solución es correcta.


IA

n Impresión
30 No es un número válido.
IC

6 6 es un número perfecto y semiperfecto.


IF

10 10 es un número deficiente.
12 12 es abundante y semiperfecto.
NT

18 18 es abundante y semiperfecto.
19 19 es un número deficiente.
PO
Capítulo 2: Ejercicios propuestos 45

2.3.2. Números felices e infelices

Los números, cómo las personas, pueden ser felices o infelices. Para determinar si un número es feliz se sigue
el siguiente procedimiento: se suman los cuadrados de sus dígitos, y se repite el proceso cuantas veces sea
necesario; si en algún momento obtenemos un 1, hemos terminado y entonces se puede decir que el número
original es feliz :). En caso de que la cantidad de repeticiones del proceso sobrepase las 8 iteraciones, entonces
se dice que el número original es infeliz :(. Por ejemplo:
7 es un número feliz, ya que:

72 = 49
42 + 92 = 97

92 + 72 = 130

N
12 + 32 + 02 = 10


12 + 0 2 = 1

AC


M
Si n no es feliz, la suma de los cuadrados luego de 8 iteraciones no llegaría a 1. Por ejemplo, 4 es infeliz,

AS
porque luego de 8 iteraciones no llega a 1:

PE
RA

CI
4, 16, 37, 58, 89, 145, 42, 20, 4, ...
G

L
EN
Algunos números felices de dos cifras son: 10, 13, 19, 23, ...

DE
O
PR

Cuando un número es feliz y a la vez es primo, se dice que es un primo feliz. Algunos primos felices de dos
CI
cifras son: 13, 19, 23, ...

CA
ES
DE

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular

LI
con estructuras algorítmicas selectivas e iterativas, determine si un número de dos cifras es feliz o infeliz; en el
L


caso de ser primo, determine si es un primo feliz o infeliz. Su programa debe considerar lo siguiente:
S

A
TO

ER

CA

Realice la lectura de un número n de dos cifras.


EN

EN

Verifique que el número natural ingresado sea de dos cifras.


D
AM

DA

Imprima en pantalla si el número n es feliz o infeliz. Adicional a ello, si es feliz y primo se imprimirá que
es un primo feliz, y si no es feliz y es primo, deberá imprimirse que es un primo infeliz.
S
ND

SI
DI

Su solución deberá incluir las siguientes funciones, además de la función main:


ER
FU

TU

IV

void leer_datos(int *n) /* Función que lee el valor de n ingresado por teclado simulando el paso de
parámetro por referencia. */
ES

UN

int es_feliz(int n) /* Función que evalúa si n es feliz o no. */


IA

int sum_digits_al_cuadrado(int n) /* Función que retorna la suma de los cuadrados de los dígitos de
IC

n. */
IF

int cant_digitos(int n); /* Función que retorna la cantidad de dígitos de n, sabiendo que n a lo más
puede tener 3 dígitos. */
NT

int es_primo(int n) /* Función que evalúa si n es primo. */


PO
R
Capítulo 2: Ejercicios propuestos 46

OG
Casos de prueba para verificación de solución

Use los siguientes casos para verificar si su solución es correcta.

n Impresión

PR 8
10
11
12
8 no es un número de dos cifras. (Y finaliza el programa)
10 es un número feliz.
11 es un primo infeliz.
12 es un número infeliz.

CI
13 13 es un primo feliz.
94 94 es un número feliz.
97 97 es un primo feliz.
98 98 es un número infeliz.
DE
2.3.3. Conversión de un número en base 10 a una base inferior

ES
Para realizar la conversión de un número natural en base 10 a una base inferior se puede hacer mediante
la técnica de divisiones sucesivas, en el que el número se divide entre la base destino, si el cociente entero no
es cero, dicho cociente se vuelve a dividir entre la base destino, y así sucesivamente hasta lograr un cociente
igual a cero. El número en la base destino se consigue concatenando las cifras de los residuos comenzando con
el último residuo hasta el primer residuo. El número natural en base 10 a convertir debe ser menor a 1024 y
la cantidad máxima de divisiones sucesivas es 10.
S

AL
Por ejemplo: Si se desea convertir el número 29 en base 10 a base 3, a continuación se presenta la secuencia
de divisiones sucesivas y la formación del nuevo número concatenando los residuos.
ER

Para realizar la conversión de un número de base inferior a la base 10, se siguen los siguientes pasos:
N

1. Iniciamos por el lado derecho hasta el izquierdo del número en base inferior, cada cifra se multiplica por
la base elevado a la potencia consecutiva (comenzando por la potencia 0, es decir; base0 ).
GE

2. Después de realizar cada una de las multiplicaciones, se suman todas y el número resultante será el
equivalente al sistema decimal.
AD
Por ejemplo: Si se desea convertir el número 1002 en base 3 a la base decimal, a continuación, se presenta la
secuencia siguiendo los pasos del algoritmo previamente descrito.
OS

ID

Se le pide a usted que elabore un programa en ANSI C que, haciendo uso de la programación modular con
estructuras algorítmicas selectivas e iterativas, realice lo siguiente:

Realice la lectura del número a convertir.


DI

Ingrese el número a convertir (0 <= número <= 1023):


ER
Capítulo 2: Ejercicios propuestos 47

Luego realice la lectura de la base destino que tiene que ser menor que 10 y mayor que 1.

Ingrese la base destino (1 < base < 10):

Realice la conversión del número en base 10 a la nueva base, debe validar que el número en base 10 sea
mayor igual que 0 y menor igual que 1023, y también que la base destino debe ser menor que 10 y mayor
que 1.
Imprima en pantalla el número en la nueva base menor que 10.

Inmediatamente después, realice la conversión del número obtenido previamente y que está en la nueva
base, a la base decimal. Durante la conversión valide que el número obtenido previamente sea un número
válido y que la base siga siendo mayor que 1 y menor que 10.
Finalmente, imprima en pantalla el número en base decimal luego de la conversión.

N

Su solución deberá incluir las siguientes funciones, además de la función main:

AC


void leer_datos(int *n, int *base) //Función que lee el número n a convertir y la base destino,

M
simulando el paso de parámetros por referencia.

AS

PE
RA
int convertir_de_base_10_a_base_destino(int n, int base) //Función que convierte el número n de

CI
base 10 a base destino. En el caso que el número n no está en el rango permitido, retorna -1. En el caso
G

L
EN
que la base sea incorrecta, retorna -2.

DE
O
PR

int convertir_de_base_origen_a_base_10(int n, int base) //Función que convierte el número n de


CI
base origen a base 10. En el caso que el número ingresado sea -1 o -2 o la base sea incorrecta, retorna -1.

CA
ES
DE

LI
Casos de prueba para verificación de solución
L


S

Use los siguiente casos para verificar si su solución es correcta.


TO

ER

CA
EN

EN

Número a Base Impresión


D
AM

convertir
G

DA

29 10 No se ha logrado convertir porque la base es mayor que 9 o es menor que 2.


S

1024 2 El número ingresado no está en el rango permitido.


ND

SI

29 3 El número 29 en base 10 tiene como equivalente a 1002 en base 3.


DI

ER

Luego, el número 1002 en base 3 tiene como equivalente a 29 en base 10.


FU

1023 2 El número 1023 en base 10 tiene como equivalente a 1111111111 en base 2.


TU

IV

Luego, el número 1111111111 en base 2 tiene como equivalente a 1023 en base


10.
ES

UN

66 9 El número 66 en base 10 tiene como equivalente a 73 en base 9.


Luego, el número 73 en base 9 tiene como equivalente a 66 en base 10.
IA

69 2 El número 69 en base 10 tiene como equivalente a 1000101 en base 2.


Luego, el número 1000101 en base 2 tiene como equivalente a 69 en base 10.
IC

666 6 El número 666 en base 10 tiene como equivalente a 3030 en base 6.


IF

Luego, el número 3030 en base 6 tiene como equivalente a 666 en base 10.
NT
PO

2.3.4. Suma de números de máximo 3 cifras hasta la base 10

Los pasos para realizar la suma de dos números de varias cifras la conocemos todos desde el colegio. A
continuación, se presentan algunos ejemplos de sumas de varias cifras en diferentes bases.
Capítulo 2: Ejercicios propuestos 48

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
con estructuras algorítmicas selectivas e iterativas, realice la suma de dos números de máximo 3 cifras en
cualquier base menor o igual que 10 y mayor que 1. El procedimiento a seguir es el mismo que usted aplica
para sumar dos números de varias cifras, sumando unidades con unidades, decenas con decenas, centenas con
centenas, etc., y llevando una cifra cuando se tenga que llevar. En todo el programa NO ESTÁ PERMITIDO

N
CONVERTIR A BASE 10 los números.


El programa debe considerar lo siguiente:

AC


M
Realice la lectura de la base de numeración, la base debe ser mayor que 1 y menor igual que 10.

AS

PE
Ingrese la base (1 < base <= 10)): RA

CI
G

L
EN
Realice la lectura del primer número.

DE
O
PR

Ingrese el primer número: CI

CA
ES
DE

Realice la lectura del segundo número.

LI
L


S

Ingrese el segundo número:


TO

ER

CA

Si la base no es correcta o los números no son válidos, es decir, la cantidad de su cifras no corresponde
EN

a máximo 3 cifras, o sus cifras no corresponden al sistema de numeración permitidos por la base, se
EN

muestra un mensaje dependiendo de qué número es el incorrecto y el programa termina.


D
AM

DA

Lo siento, error en la base. O


S
ND

Lo siento, el primer número no es válido. O


O

SI

Lo siento, el segundo número no es válido. O


DI

ER
FU

Lo siento, los números no son válidos.


TU

IV

Si la base y los números son válidos, se realiza la suma y se muestra el resultado en pantalla.
ES

UN

Su solución deberá incluir las siguientes funciones, además de la función main:


IA

void leer_datos(int *base, int *n1, int *n2) //Función que lee la base menor igual que 10 y mayor
IC

que 1, y los números n1 y n2, ambos de la misma base.


IF

int es_valido(int base, int n) //Función que valida si el número el número n es de máximo 3 cifras
y está bien escrito en la base dada por base.
NT

int suma(int base, int n1, int n2) //Función que suma dos números en la base dada por base.
PO
R
Capítulo 2: Ejercicios propuestos 49

OG
Casos de prueba para verificación de solución

Use los siguiente casos para verificar si su solución está correcta.

Base Núm. Núm. Impresión

11
3
9
PR1
666
33
666
2
777
2
99
Lo
Lo
Lo
siento, error en la base. (Y finaliza el programa)
siento, el primer número no es válido. (Y finaliza el programa)
siento, el segundo número no es válido. (Y finaliza el programa)

CI
8 8 99 Lo siento, los números no son válidos. (Y finaliza el programa)
9 666 666 La suma de 666 y 666 en base 9 da como resultado 1443 en base 9.
7 6 66 La suma de 6 y 66 en base 7 da como resultado 105 en base 7.
8 666 66 La suma de 666 y 66 en base 8 da como resultado 754 en base 8.
7 666 66 La suma de 666 y 66 en base 7 da como resultado 1065 en base 7.
DE
3 1002 1002 La suma de 1002 y 1002 en base 3 da como resultado 2011 en base 3.

ES
2.3.5. Resta de números de máximo 3 cifras hasta la base 10

Los pasos para realizar la resta o sustracción de dos números de varias cifras la conocemos todos desde el
colegio. A continuación, se presentan algunos ejemplos de restas de varias cifras en diferentes bases.
S

AL
ER
Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
con estructuras algorítmicas selectivas e iterativas, realice la resta de dos números de máximo 3 cifras en
cualquier base menor o igual que 10 y mayor que 1. El procedimiento a seguir es el mismo que usted aplica
para restar dos números de varias cifras, restando unidades con unidades, decenas con decenas, centenas con
centenas, etc., y prestando una cifra cuando el minuendo es menor que el sustraendo. En todo el programa
N

NO ESTÁ PERMITIDO CONVERTIR A BASE 10 los números.


El programa debe considerar lo siguiente:
GE

Realice la lectura de la base de numeración, la base debe ser mayor que 1 y menor igual que 10.

Ingrese la base (1 < base <= 10):


AD
Realice la lectura del primer número.

Ingrese el primer número:

Realice la lectura del segundo número.


OS

ID

Ingrese el segundo número:

Si la base ingresada no es válida, se muestra un mensaje y termina el programa. Si los números no


son válidos, es decir, la cantidad de sus cifras excede a 3 o sus cifras no corresponden al sistema de
numeración permitidos por la base, se muestra un mensaje dependiendo de qué número es el incorrecto
y el programa termina. También debe validar que el primer número sea mayor que el segundo número.
DI

Los posibles mensajes son:


ER
Capítulo 2: Ejercicios propuestos 50

Lo siento, la base es incorrecta. O


Lo siento, el primer número no es válido. O
Lo siento, el segundo número no es válido. O
Lo siento, los números no son válidos. O
Lo siento, el primer número debe ser mayor que el segundo número.

Si la base y los números son válidos, se realiza la resta y se muestra el resultado en pantalla.

Su solución deberá incluir las siguientes funciones, además de la función main:

void leer_datos(int *base, int *n1, int *n2) //Función que lee la base menor igual que 10 y mayor
que 1, y los números n1 y n2, ambos de la misma base.
int es_de_3_digitos_y_esta_en_su_base_correcta(int n, int base) //Función que valida si el nú-

N
mero n es de máximo 3 cifras y está bien escrito en la base dada por base.


int resta(int base, int n1, int n2) //Función que resta dos números en la base dada por base.

AC


Casos de prueba para verificación de solución

AS

PE
Use los siguiente casos para verificar si su solución es correcta.
RA

CI
G

L
EN
Base Núm. Núm. Impresión

DE
O

1 2
PR

11 6 7 Lo CI
siento, la base es incorrecta. (Y el programa finaliza)

CA
9 76 69 Lo siento, el segundo número no es válido. (Y el programa finaliza)
ES
DE

8 758 99 Lo siento, los números no son válidos. (Y el programa finaliza)

LI
7 66 666 Lo siento, el primer número tiene que ser mayor que el segundo número.
L


4 1001 1 Lo siento, el primer número no es válido. (Y el programa finaliza)
S

A
TO

4 100 1001 Lo siento, el segundo número no es válido. (Y el programa finaliza)


ER

CA

9 654 66 La resta de 654 y 66, ambas en base 9, da como resultado 577.


EN

EN

8 654 66 La resta de 654 y 66, ambas en base 8, da como resultado 566.


7 654 66 La resta de 654 y 66, ambas en base 7, da como resultado 555.
D
AM

3 21 12 La resta de 21 y 12, ambas en base 3, da como resultado 2.


DA
S
ND

SI
DI

2.3.6. Límite de una función mediante aproximaciones


ER
FU

TU

El límite de una función f(x), cuando x tiende a c es L si y sólo si para todo ε > 0 , existe un δ > 0 tal que
IV

para todo número real x en el dominio de la función, si 0 < |x − c| < δ entonces |f (x) − L| < ε.
ES

UN

Esto es:
IA

lı́m f (x) = L ⇐⇒ ∀ε > 0, ∃δ > 0 | ∀x ∈ Dom(f ), 0 < |x − c| < δ −→ |f (x) − L| < ε


x→c
IC

y
IF
NT

L
PO

c x

Figura 2.9: Definición de límite. Fuente: https://upload.wikimedia.org/wikipedia/commons/d/d1/Límite_01.svg

Mediante aproximaciones sucesivas se desea hallar el límite para la siguiente función cuando x tiende a 2.
Capítulo 2: Ejercicios propuestos 51

2
lı́mx→2 2xx −− 4x
2

Si se considera un δ mínimo de 0.001 para el cálculo del límite y se desea hallar dicho límite en 5 aproxi-
maciones, en la figura 2.10 se presenta una tabla con los datos por cada aproximación.

Figura 2.10: Tabla de aproximaciones para el cálculo del límite cuando x tiende a 2, con un δ mínimo de 0.001.

N

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular

AC
con estructuras algorítmicas selectivas e iterativas, realice lo siguiente:


M

AS
Realice la lectura del valor al que tiende x (c), la cantidad de aproximaciones (n) para hallar el límite

PE
(0 < n), y el valor del δ mínimo (d ) para la aproximación final.
RA

CI
Realice las n aproximaciones, y por cada aproximación (i ) muestre los valores del número de aproximación
G

L
EN
i, 2n−i δ, c − 2n−i δ, f (c − 2n−i δ), c + 2n−i δ y f (c + 2n−i δ)

DE
O
PR

CI
Solo si el valor de la diferencia entre f (c + 2n−i δ) y f (c − 2n−i δ) decrece o se mantienen iguales en

CA
todas las aproximaciones (se aproximan los respectivos f(x)), obtenga el límite de la función mediante el
ES
DE

promedio de ambas y muestre dicho límite de la función cuando x tiende a c. En el caso que no decrezca

LI
en todas las aproximaciones muestre el mensaje que es probable que no haya un único límite de la función
L

cuando x tiende a c.

S

A
TO

ER

CA

Su solución deberá incluir las siguientes funciones, además de la función main:


EN

EN

void leer_datos(double *c, int *num_aproximaciones, double *delta_min) //Función que, simu-
D
AM

lando el paso de parámetros por referencia, lee el valor de c, el número de aproximaciones y el delta
DA

mínimo.
S
ND

SI

void calcular_limite_funcion_cuando_x_tiende_a(double c, int n, double d,


DI

ER

double *limite, int *se_aproxima)


FU

/*Función que calcula el límite de una función dada por aproximaciones sucesivas y muestra dichas
TU

IV

aproximaciones. Recibe cinco parámetros, los 3 primeros son por valor, y los 2 últimos simula el paso
de parámetros por referencia. El primer parámetro es el valor de c, el segundo parámetro es la cantidad
ES

UN

de aproximaciones n, el tercer parámetro es el delta mínimo d, mediante el cuarto parámetro se puede


obtener el valor del límite solo si la diferencia de los f(x) en cada aproximación va decreciendo o se
IA

mantienen iguales, y mediante el último parámetro se obtiene si se aproxima o no a un único valor el


valor de f(x) cuando x tiende a c. Por cada aproximación se imprime en pantalla los siguientes valores:
IC

número de aproximación (i ), 2n−i d, c − 2n−i d, f (c − 2n−i d), c + 2n−i d y f (c + 2n−i d) */


IF

double funcion(double x) //Función que calcula el valor de la función f (x) = (2x2 − 4x)/(x − 2) para
NT

un determinado x diferente de 2.
PO
Capítulo 2: Ejercicios propuestos 52

Casos de prueba para verificación de solución

Use los siguientes casos para verificar si su solución es correcta.

c Núm. δmín Impresión


aprox. (d)
(n)
2 5 0.001 Aprx.1: 16d=0.016, c-16d=1.984, f(1.984)=3.968, c+16d=2.016, f(2.016)=4.032
Aprx.2: 8d=0.008, c-8d=1.992, f(1.992)=3.984, c+8d=2.008, f(2.008)=4.016
Aprx.3: 4d=0.004, c-4d=1.996, f(1.996)=3.992, c+4d=2.004, f(2.004)=4.008
Aprx.4: 2d=0.002, c-2d=1.998, f(1.998)=3.996, c+2d=2.002, f(2.002)=4.004
Aprx.5: 1d=0.001, c-1d=1.999, f(1.999)=3.998, c+1d=2.001, f(2.001)=4.002
Como la diferencia de los f(x) en cada aproximación decrece o se mantienen

N
iguales, entonces el valor del límite de la función cuando x tiende a 2.000


es 4.000.

AC


M

AS
2.3.7. Número de pasos para llegar a la constante de Kaprekar de 3 cifras

PE
RA

CI
Si tomamos cualquier número de 3 cifras (que no sean todas iguales) y generamos el número más grande
G

L
que se pueda formar con esas cifras, y el más pequeño, y los restamos, y hacemos este proceso repetidas veces

EN

DE
O

con el número resultante, después de 6 o menos rondas de restas, siempre llegaremos al número 495. Al llegar
PR

a este punto, cada vez que volvamos a repetir este proceso, siempre obtendremos 495, ya que el número más
CI
grande posible que se puede generar con sus cifras es el 954, y el menor es el 459, y al restarlos, da 495 otra

CA
vez.
ES
DE

LI
954 − 459 = 495
L


S

Cabe resaltar que, en el caso que después de realizar una resta se obtenga un número menor a 100, se debe
TO

ER

completar con ceros a la izquierda hasta tener 3 dígitos. Por ejemplo, si partimos del número 121, el máximo
CA

número posible es 211 y el mínimo es 112, y al restar 211 - 112 se obtiene 99, por lo que al momento de generar
EN

EN

las nuevas parejas de números, se deberá interpretar ese 99 como si fuera un 099 de modo que el mayor número
D

que se pueda formar con esas cifras sea el 990 y el menor sea el 99.
AM

DA

A este número 495 se le conoce como la Constante de Kaprekar para números de 3 cifras, pues, fue Dattatreya
S

Ramchandra Kaprekar (1905-1986) quien descubrió un comportamiento similar para los números de 4 cifras
ND

SI

que siempre llegan a 6174 y lo presentó en la Conferencia Matemática de Madrás en 1949.


DI

ER
FU

Se le pide:
TU

Elaborar un programa en lenguaje C usando el paradigma de programación modular, que permita ingresar un
IV

número de 3 cifras, y verifique que se puede llegar a 495 en 6 pasos o menos. En su solución, no será necesario
ES

UN

que usted valide que el número ingresado sea de 3 cifras o que no tenga 3 dígitos iguales. Es decir usted deberá
asumir que el usuario siempre ingresa números de 3 cifras, y deberá asumir que nunca ingresa números de 3
dígitos iguales (tales como el 111, el 222, el 333, entre otros).
IA

Para cualquier número de 3 cifras ingresado por teclado, su programa deberá mostrar un mensaje indicando
IC

el número de pasos que necesitó para llegar a 495, así como también un mensaje indicando si se cumplió la
IF

premisa de que se requieren 6 pasos o menos.


NT
PO
Capítulo 2: Ejercicios propuestos 53

A tener en cuenta
Si usted desea analizar el número 121, su análisis deberá consistir en los siguientes pasos:
Paso 1: 211 - 112 = 99

Paso 2: 990 - 99 = 891


Paso 3: 981 - 189 = 792
Paso 4: 972 - 279 = 693

Paso 5: 963 – 369 = 594


Paso 6: 954 – 459 = 495

N
Se dice que el número 121 necesita 6 pasos para llegar a 495, debido a que a partir del paso 7 en adelante,


siempre se obtendrá nuevamente el valor 495 de manera repetida.

AC
Su programa deberá incluir:


M
La función main.

AS

PE
RA
Una función que permita extraer la unidad, decena y centena de un número de 3 cifras (simular el paso

CI
de parámetros por referencia enviando las direcciones de las variables de su función main).
G

L
EN

DE
O

Desde la función main, deberá ordenar las unidades, decenas y centenas de menor a mayor en tres
PR

variables nuevas llamadas cifra_menor, cifra_medio y cifra_mayor. CI

CA
Una función que genere el máximo número posible y el mínimo número posible a partir de 3 cifras (deberá
ES
DE

generar ambos valores en una sola función de tipo void).

LI
L


Una función que reciba un número entero de pasos y verifique si es que dicho número es menor o igual
S

A
TO

a 6.
ER

CA
EN

EN

Casos de prueba para verificación de solución


D
AM

Use los siguiente casos para verificar si su solución está correcta.


DA
S
ND

Número Pasos Impresión


O

SI

121 6 El número 121 requiere 6 pasos para llegar a 495. 6 es menor o igual a 6.
DI

ER

279 3 El número 279 requiere 3 pasos para llegar a 495. 3 es menor o igual a 6.
FU

TU

IV
ES

UN

Dado que usted solo sabe usar estructuras iterativas con entrada controlada, controladas por contador, usted
deberá siempre hacer 6 iteraciones. Para el caso de números que requieran menos de 6 pasos para llegar a 495,
se obtendrán repetidas veces 495 en los pasos adicionales. Por ejemplo, el número 279 requiere solo 3 pasos
IA

para llegar a 495, y desde el paso 4 hasta el paso 6 se volverá a obtener el mismo valor:
IC

Paso 1: 972 - 279 = 693


IF
NT

Paso 2: 963 – 369 = 594


Paso 3: 954 – 459 = 495
PO

Paso 4: 954 – 459 = 495 (valor repetido)


Paso 5: 954 – 459 = 495 (valor repetido)
Paso 6: 954 – 459 = 495 (valor repetido)
Capítulo 2: Ejercicios propuestos 54

Su solución deberá contar cuántos pasos se están realizando hasta obtener el número 495 por primera vez.
Cuando una iteración genere el 495 por primera vez, usted deberá idear un mecanismo para salvaguardar el
valor del contador de pasos.

Tenga en cuenta que en la siguiente iteración se volverá a obtener 495 por lo que su mecanismo no puede
consistir en validar si la diferencia del máximo número generado menos el mínimo número generado es igual a
495 (en nuestro ejemplo, esto daría verdadero en los pasos 3, 4, 5 y 6, pero usted solo desea salvar el 3, debido
a que el paso 3 es el primer paso en el que se obtuvo 495). Usted deberá implementar un mecanismo que le
permita conocer cuál es el número de pasos necesario para llegar a 495 por primera vez.

Artículo tomado de: https://www.bbc.com/mundo/noticias-49426284


El misterioso número 6174 que ha intrigado a matemáticos durante 70 años
Dalia Ventura

N
BBC News Mundo


AC
2.3.8. Número Lambda


M

AS
Se conoce como números lambda (λ) a los términos de la sucesión: 0, 1, 2, 5, 12, 29, 70, 169, 408, 985,

PE
RA
2378, 5741, 13860, 33461, 80782, 195025, 470832, 1136689, 3215042, 7761798, 18738638, 45239074, 109216786,

CI
263672646, 636562078, 1536796802, ..., que se obtienen mediante la siguiente relación de recurrencia:
G

L
EN

DE
O


0 si n = 0;
PR


λn = 1 si n = 1;
CI

CA
otros casos.

ES
2λn−1 + λn−2
DE

LI
L

Donde, la secuencia de números λ comienza con 0 y 1 si n es 0 o 1 respectivamente, y luego cada número



S

lambda (λn ) se obtiene a partir de los dos anteriores, sumando dos veces el número lambda anterior (λn−1 ) y
TO

ER

el número lambda previo a este (λn−2 ) .


CA
EN

Un número lambda de n (λn ) también se puede obtener mediante el redondeo al resultado de la siguiente
EN

fórmula:
D
AM

DA

 √ n  √ n
1+ 2 − 1− 2
S
ND


O

λn =
SI

2 2
DI

ER
FU

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
TU

IV

con estructuras algorítmicas selectivas e iterativas, realice lo siguiente:


ES

UN

Realice la lectura de un número n (0 ≤ n ≤ 25).


Calcule el número lambda λn utilizando la primera definición recurrente.
IA

Calcule el número lambda λn utilizando la segunda fórmula. Para realizar el redondeo del número, use la
IC

función round. En el lenguaje C la declaración de la función round se encuentra en el archivo de cabecera


IF

math.h.
NT

Muestre ambos números obtenidos.


PO

En el caso que n no pertenezca al rango permitido (0 ≤ n ≤ 25), se debe mostrar en pantalla el mensaje
“n debe ser mayor igual que 0 y menor igual que 25.”

Su solución deberá incluir las siguientes funciones, además de la función main:

void leer_datos(int *n) //Función que, simulando el paso de parámetros por referencia, lee del teclado
el valor de n.
Capítulo 2: Ejercicios propuestos 55

int numero_lambda(int n) //Función que obtiene el número lambda de n mediante la relación de


recurrencia. Retorna -1 si n no es válido.
int numero_lambda_con_formula(int n) //Función que obtiene el número lambda de n aplicando la
fórmula. Retorna -1 si n no es válido.

Casos de prueba para verificación de solución

Use los siguiente casos para verificar si su solución es correcta.

n Impresión
-1 n debe ser mayor igual que 0 y menor que 25.
26 n debe ser mayor igual que 0 y menor que 25.
0 Número lambda (0): 0

N
El número lambda (0) usando la fórmula es 0


1 Número lambda (1): 1
El número lambda (1) usando la fórmula es 1

AC
2 Número lambda (2): 2


El número lambda (2) usando la fórmula es 2

AS
3 Número lambda (3): 5

PE
El número lambda (3) usando la fórmula es 5
RA

CI
5 Número lambda (5): 29
G

L
EN
El número lambda (5) usando la fórmula es 29

DE
O

10 Número lambda (10): 2378


PR

CI
El número lambda (10) usando la fórmula es 2378

CA
25 Número lambda (25): 1311738121
ES
DE

El número lambda (25) usando la fórmula es 1311738121

LI
L


S

A
TO

ER

2.3.9. Sumatoria de primeros números compañeros de Pell


CA
EN

EN

Se conoce como los números compañeros de Pell (Qn ) a los términos de la sucesión: 2, 2, 6, 14, 34, 82, 198,
D

478, 1154, 2786, 6726, 16238, 39202, 94642, 228486, 551614, 1331714, 3215042, 7761798, 18738638, 45239074,
AM

DA

109216786, 263672646, 636562078, 1536796802, ..., que se obtienen mediante la siguiente relación de recurrencia:
S
ND

SI


2 si n = 0;
DI


ER

si n = 1;
FU

Qn = 2
TU

en otros casos.

2Qn−1 + Qn−2

IV
ES

UN

Donde, la secuencia de números compañeros de Pell (Qn ) comienza con 2 y 2 si n es 0 o 1 respectivamente,


luego cada número Qn se obtiene a partir de los dos anteriores, sumando dos veces el número compañero de
Pell anterior (Qn−1 ) y el número compañero de Pell previo a éste (Qn−2 ) .
IA

Un número compañero de Pell de n (Qn ) también se puede obtener mediante el redondeo al resultado de la
IC

siguiente fórmula:
IF

√ n  √ n
NT


Qn = 1 + 2 + 1 − 2
PO

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
con estructuras algorítmicas selectivas e iterativas, muestre la suma de los n primeros números compañeros de
Pell. El programa debe realizar lo siguiente:

Realice la lectura del número n que será la cantidad de los primeros n números compañeros de Pell que
se deben sumar (0 < n < 25).
Capítulo 2: Ejercicios propuestos 56

Calcule la suma de los primeros n números compañeros de Pell utilizando la primera definición recurrente.
Calcule la suma de los primeros n números compañeros de Pell utilizando la segunda fórmula. Para
realizar el redondeo del número, use la función round. En el lenguaje C la declaración de la función
round se encuentra en el archivo de cabecera math.h.
Muestre ambas sumas obtenidas.
En el caso que n no pertenezca al rango permitido (0 < n < 25), se debe mostrar en pantalla el mensaje
“El valor ingresado de n es incorrecto.”

Su solución deberá incluir las siguientes funciones, además de la función main:

void leer_datos(int *n) //Función que, simulando el paso de parámetros por referencia, lee del teclado
el valor de n.

N

int sumatoria_primeros_numeros_companheros_pell(int n) //Función que obtiene la suma de los
primeros n números compañeros de Pell mediante la relación de recurrencia. Retorna -1 si n no es válido.

AC


int sumatoria_primeros_numeros_companheros_pell_aplicando_formula(int n) //Función que obtie-

AS
ne la suma de los primeros n números compañeros de Pell aplicando la fórmula. Retorna -1 si n no es

PE
válido.
RA

CI
G

L
EN
Casos de prueba para verificación de solución

DE
O
PR

Use los siguiente casos para verificar si su solución es correcta. CI

CA
ES
DE

n Impresión
0 El valor de n ingresado es incorrecto.

LI
L

25 El valor de n ingresado es incorrecto.



S

1 La suma del primer número compañero de Pell es 2


TO

ER

La suma del primer número compañero de Pell usando la fórmula es 2


CA

2 La suma de los primeros 2 números compañeros de Pell es 4


EN

EN

La suma de los primeros 2 números compañeros de Pell usando la fórmula es 4


D

3 La suma de los primeros 3 números compañeros de Pell es 10


AM

DA

La suma de los primeros 3 números compañeros de Pell usando la fórmula es 10


S

4 La suma de los primeros 4 números compañeros de Pell es 24


ND

SI

La suma de los primeros 4 números compañeros de Pell usando la fórmula es 24


DI

ER

5 La suma de los primeros 5 números compañeros de Pell es 58


FU

La suma de los primeros 5 números compañeros de Pell usando la fórmula es 58


TU

IV

10 La suma de los primeros 10 números compañeros de Pell es 4756


La suma de los primeros 10 números compañeros de Pell usando la fórmula es 4756
ES

UN

24 La suma de los primeros 24 números compañeros de Pell es 1086679440


La suma de los primeros 24 números compañeros de Pell usando la fórmula es 1086679440
IA
IC

2.3.10. Validación de una contraseña numérica


IF
NT

Cuando se intenta acceder por primera vez al sistema web de un determinado banco, primero debe registrar
un usuario y una contraseña (password) numérica de 6 dígitos. Se le ha encomendado desarrollar un programa
PO

que valide la contraseña a registrar por el usuario con las siguientes reglas:

Debe tener solo 6 cifras.


Las cifras no deben ser repetidas.
No deben haber ningún cero en la contraseña.
Capítulo 2: Ejercicios propuestos 57

El valor de la primera cifra no debe ser la menor de todas las demás cifras. Es decir, el menor dígito no
puede estar en la primera cifra comenzando por la izquierda.

Si se cumplen todas las condiciones, la contraseña es válida, caso contrario, no la es. Por ejemplo:

45024 no es una contraseña válida porque solo tiene 5 cifras.


333333 no es una contraseña válida porque todas sus cifras son iguales.
435702 no es una contraseña válida porque hay un cero en una de sus cifras.

135214 no es una contraseña válida porque el menor dígito se encuentra en dos posiciones, y una de ellas
es la 1era posición.
465982 es una contraseña válida.

N

Se le pide a usted desarrollar un programa en el lenguaje C que, haciendo uso de la programación modular

AC
con estructuras algorítmicas selectivas e iterativas, valide que la contraseña o password ingresado sea válido.


Además debe mostrar si tiene 6 cifras, si son todas sus cifras iguales, si contiene ceros, y presentar al dígito

M
menor con su respectiva posición comenzando por la izquierda. De encontrarse el dígito menor repetido, se

AS

PE
muestra la posición de más a la izquierda. El programa debe considerar lo siguiente:
RA

CI
G
Realice la lectura de una contraseña numérica de 6 cifras. Tenga en cuenta que si ingresa una contraseña

L
EN

DE
O

que inicia con cero, dicho cero no será considerado como una cifra de la contraseña leída.
PR

Muestre si tiene o no 6 cifras. CI

CA
ES
Si es de 6 cifras y todas sus cifras son iguales, muestre “Todas sus cifras son iguales”.
DE

LI
L

Si es de 6 cifras y contiene al cero en alguna de sus cifras, muestre “Contiene cero(s)”.



S

A
TO

Solo si es de 6 cifras y el dígito menor se encuentra en la primera cifra, muestre el dígito menor indicando
ER

CA

que está en la primera cifra de la contraseña.


EN

EN

Verifique que la contraseña ingresada sea válida. Si cumple con todas las reglas previamente descritas,
D

se dice que es válida y muestra el mensaje “El password ingresado es válido”, caso contrario, se muestra
AM

DA

el mensaje “Lo sentimos, el password ingresado no es válido”.


S
ND

SI

Su solución deberá incluir las siguientes funciones, además de la función main:


DI

ER
FU

TU

void leer_datos(int *password) //Función que, simulando el paso de parámetro por referencia, lee el
IV

valor de la contraseña o password ingresado por teclado.


ES

UN

int es_de_seis_cifras(int password) //Función que verifica si el password es de 6 cifras.


int tiene_ceros(int password) //Función que verifica si el password contiene al 0 en alguna de sus
IA

cifras.
IC

int todas_cifras_iguales(int password) //Función que verifica si el password tiene todas sus cifras
IF

iguales.
NT

void menor_digito(int password, int *min_digit, int *pos_min_digit


//Función que, dado el password, retorna su dígito menor y la posición en el que se encuentra. Si hay
PO

repetidos, retorna la posición del que está más a la izquierda. El password ya tiene 6 cifras.
Capítulo 2: Ejercicios propuestos 58

Casos de prueba para verificación de solución

Use los siguientes casos de prueba para verificar si su solución es correcta.

Password Impresión
45024 No tiene 6 cifras.
Lo sentimos, el password ingresado no es válido.
333333 Tiene 6 cifras.
Todas sus cifras son iguales.
El dígito menor es 3 y está en la posición 1.
Lo sentimos, el password ingresado no es válido.
435702 Tiene 6 cifras.
Contiene cero(s).
Lo sentimos, el password ingresado no es válido.

N
135214 Tiene 6 cifras.


El dígito menor es 1 y está en la primera posición.
Lo sentimos, el password ingresado no es válido.

AC
465982 Tiene 6 cifras.


El password ingresado es válido.

AS

PE
RA

CI
G

L
2.3.11. Misteriosos números múltiplos de 9

EN

DE
O
PR

Para todo número de 2 cifras, se sabe que si al mayor número posible formado por dichas cifras se le resta
CI
el menor número posible formado por dichas cifras, siempre se obtiene un múltiplo de 9 (incluyendo el cero).

CA
ES
DE

Se le pide implementar un programa en lenguaje C que solicite un rango de dos números a y b, ambos de 2

LI
cifras, y compruebe que todos los números dentro de dicho rango (incluyendo los límites del rango) cumplan con
L


esta condición. Para cada número procesado, su programa deberá mostrar la decena, la unidad, la cifra mayor,
S

A
TO

la cifra menor, el máximo número generado, el mínimo número generado, la diferencia del máximo número
ER

CA

generado menos el mínimo número generado, y el factor que hace posible que esta diferencia corresponda a un
EN

EN

número múltiplo de 9. Por ejemplo, para el número 24, se tiene que la decena es 2, la unidad es 4, la cifra mayor
es 4, la cifra menor es 2, el máximo número generado es 42, el menor número generado es 24, la diferencia
D
AM

entre el máximo y el mínimo es 18, y el factor que hace posible que 18 sea múltiplo de 9 es el número 2 (ya
DA

que 9 x 2 = 18).
S
ND

SI

Su solución deberá indicar si el número evaluado cumple con esta condición o no. Asimismo, deberá contar
DI

cuántos números de su rango (incluyendo los límites del rango) cumplieron con la condición, cuántos no, y cuál
ER
FU

es el porcentaje de números que cumplieron con esta condición respecto al total de números evaluados. Debe
TU

asumir que el usuario siempre ingresa un rango válido (es decir, usted no debe validar que a y b tengan 2 digitos
IV

ni tampoco debe validar que b sea mayor o igual que a). Recuerde que para poder imprimir el símbolo « %»
ES

UN

como parte de la cadena de salida de un printf usted debe utilizar la combinación % % (doble porcentaje).
Su solución debe incluir las siguientes funciones:
IA
IC

La función main.
IF

Una función que permita extraer la decena y la unidad de un número de 2 cifras (deberá simular el paso
de parámetros por referencia).
NT

Una función que permita generar el mayor y menor número posible a partir de 2 cifras (deberá simular
PO

el paso de parámetros por referencia).

Una función que valide si un número es múltiplo de 9.


Una función que retorne el factor que hace posible que un número sea múltiplo de 9 (por ejemplo, el
factor que hace que el 18 sea múltiplo de 18 es 2, ya que 2 x 9 = 18).
Capítulo 2: Ejercicios propuestos 59

Una función que reciba una frecuencia y un total, y calcule el valor del porcentaje que representa dicha
frecuencia respecto al total. Por ejemplo, si la frecuencia es 3 y el total es 8, esta fucción retornará 37.5,
pues 3 es el 37.5 % de 8 (note que esta función retorna solo el valor 37.5 sin el símbolo de porcentaje).

Casos de prueba para verificación de solución

Use los siguiente casos para verificar si su solución está correcta.

a b Impresión
71 74 Número 71: decena = 7, unidad = 1, mayor = 7, menor = 1
máx = 71, mín = 17, dif = 54. Cumple condición (9x6=54)

Número 72: decena = 7, unidad = 2, mayor = 7, menor = 2


máx = 72, mín = 27, dif = 45. Cumple condición (9x5=45)

N

Número 73: decena = 7, unidad = 3, mayor = 7, menor = 3
máx = 73, mín = 37, dif = 36. Cumple condición (9x4=36)

AC


M
Número 74: decena = 7, unidad = 4, mayor = 7, menor = 4

AS
máx = 74, mín = 47, dif = 27. Cumple condición (9x3=27)

PE
RA

CI
Se encontraron 4 números que cumplen con la condición
G

L
EN
Se encontraron 0 números que no cumplen la condición

DE
O

Porcentaje de números que cumplen la condición: 100.00 %


PR

18 24 CI
Número 18: decena = 1, unidad = 8, mayor = 8, menor = 1

CA
máx = 81, mín = 18, dif = 63. Cumple condición (9x7=63)
ES
DE

LI
Número 19: decena = 1, unidad = 9, mayor = 9, menor = 1
L


máx = 91, mín = 19, dif = 72. Cumple condición (9x8=72)
S

A
TO

ER

CA

Número 20: decena = 2, unidad = 0, mayor = 2, menor = 0


EN

máx = 20, mín = 2, dif = 27. Cumple condición (9x2=18)


EN

D
AM

Número 21: decena = 2, unidad = 1, mayor = 2, menor = 1


G

DA

máx = 21, mín = 12, dif = 9. Cumple condición (9x1=9)


S
ND

SI

Número 22: decena = 2, unidad = 2, mayor = 2, menor = 2


DI

ER

máx = 22, mín = 22, dif = 0. Cumple condición (9x0=0)


FU

TU

IV

Número 23: decena = 2, unidad = 3, mayor = 3, menor = 2


ES

máx = 32, mín = 23, dif = 9. Cumple condición (9x1=9)


UN

Número 24: decena = 2, unidad = 4, mayor = 4, menor = 2


IA

máx = 42, mín = 24, dif = 18. Cumple condición (9x2=18)


IC

Se encontraron 7 números que cumplen con la condición


IF

Se encontraron 0 números que no cumplen la condición


Porcentaje de números que cumplen la condición: 100.00 %
NT
PO

2.3.12. Número Harshad

Un Número de Harshad es aquel número que es divisible por la suma de sus dígitos. Algunos números que
cumplen con esta condición son: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 18, 20, 21,24, 27, 30, 36, 40, 42, 45, 48, 50, 54,
60, 63, 70, 72, 80, 81, 84, 90, 100, 102, 108, 110, 111, 112, 114, 117, 120, 126, 132, 133, 135, 140, 144, 150, 152,
153, 156, 162, 171, 180, 190, 192, 195, 198, 200, 201, 204, entre otros.
Capítulo 2: Ejercicios propuestos 60

Es muy común creer que todos los múltiplos de 9, son también números Harshad, debido a la presencia de
números como el 9, el 18, el 27, el 36, el 45, el 54, el 63, el 72 o el 81. Sin embargo esto no es así (por ejemplo,
el número 99 no es divisible entre 18, resultado de sumar 9+9).
Se le pide implementar un programa en lenguaje C que solicite al usuario un número entero positivo de
máximo 10 dígitos, y evalúe si se trata de un número Harshad o no, y si es múltiplo de 9 o no. Deberá imprimir
los mensajes correspondientes ante cada validación (es Harshad, no es Harshad, es múltiplo de 9, no es múltiplo
de 9). Para el caso de encontrar algún número múltiplo de 9 que no sea Harshad, su programa además deberá
imprimir el mensaje “Sorprendente!”.
Finalmente, debe multiplicar todas las cifras del número y luego restar todas sus cifras, dicho resultado
también debe mostrarse.
Su solución deberá incluir las siguientes funciones:

N
La función main.


Una función que, simulando el paso de parámetro por referencia, lea el número ingresado por teclado del

AC
usuario.


M
Una función que valide si un número es Harshad o no.

AS

PE
RA
Una función que sume todos los dígitos de un número, que funcione para cualquier número de n cifras,

CI
donde 0 < n ≤ 10.
G

L
EN

DE
O

Una función que valide si un número es múltiplo de 9 o no.


PR

CI
Una función que multiplique y luego reste todas las cifras de cualquier número de n cifras, donde 0 <

CA
n ≤ 10.
ES
DE

LI
L

Casos de prueba para verificación de solución TÓ


S

A
TO

ER

Use los siguiente casos para verificar si su solución está correcta.


CA
EN

EN

Número ingresado Impresión


89 89 no es Harshad. No es múltiplo de 9.
D
AM

Si se multiplican todas sus cifras y luego se restan, se obtiene 55.


G

DA

90 90 es Harshad. Es múltiplo de 9.
S

Si se multiplican todas sus cifras y luego se restan, se obtiene -9.


ND

SI

97 97 no es Harshad. No es múltiplo de 9.
DI

ER

Si se multiplican todas sus cifras y luego se restan, se obtiene 47.


FU

TU

99 99 no es Harshad. Es múltiplo de 9. ¡Sorprendente!


IV

Si se multiplican todas sus cifras y luego se restan, se obtiene 63.


ES

100 100 es Harshad. No es múltiplo de 9.


UN

Si se multiplican todas sus cifras y luego se restan, se obtiene -1.


111 111 es Harshad. No es múltiplo de 9. Y además es capicúa!
IA

Si se multiplican todas sus cifras y luego se restan, se obtiene -2.


IC

171 171 es Harshad. No es múltiplo de 9. Y además es capicúa!


Si se multiplican todas sus cifras y luego se restan, se obtiene -2.
IF
NT

2.3.13. Trabajo realizado para extraer el líquido de un cilindro (adaptado del


PO

laboratorio 3 del ciclo 2020-2)

(Adaptado de [10])
En la figura 2.11 se muestra un recipiente cilíndrico con base circular de radio r m y altura H m que contiene
un líquido. Si el líquido en el interior del recipiente tiene una altura de L m, ¿cuál es el trabajo requerido en
Capítulo 2: Ejercicios propuestos 61

N

AC


M

AS

PE
RA

CI
G

L
EN

DE
O
PR

Figura 2.11: Recipiente con un fluido en su interior. CI

CA
Fuente: http://canek.uam.mx/Integral/Cap03.Aplicaciones/3.5.Trabajo/FTTrabajo.pdf
ES
DE

LI
L

kJ para bombear todo el líquido hasta la parte superior del recipiente? Considere que la densidad del líquido

S

es ρ kg/m3 .
TO

ER

CA

Para resolver el problema se deberá tener en cuenta un conjunto de n capas de líquido, cada una con un
EN

EN

mismo grosor ∆y, como se muestra en la figura 2.12 en la cual se resalta la i-ésima capa de líquido a una
distancia yi∗ con respecto de la parte superior del recipiente. El origen del eje vertical será la parte superior
D
AM

del recipiente con el sentido positivo hacia abajo.


DA
S

Si el número n de capas tiende a ser muy grande, entonces el grosor ∆y de cada capa tiende a ser muy
ND

SI

pequeño. Para este caso, el trabajo Wi que realiza la fuerza Fi al elevar hasta la parte superior del recipiente
DI

ER

la i-ésima capa es
FU

TU

IV

Wi = Fi yi∗
ES

UN

La fuerza Fi debe ser igual a la fuerza de atracción gravitacional que actúa sobre la i-ésima capa:
IA

Fi = mi g
IC
IF

donde g es la aceleración de la gravedad (9.8 m/s2 ) y mi es la masa de la i-ésima capa en forma de un


NT

pequeño cilindro de altura ∆y, es decir:


PO

mi = (ρ)(volumen de la i-ésima capa)

Considerando que el radio r de la i-ésima capa es igual al radio r del recipiente, el cálculo del volumen Vi
de la i-ésima capa es

Vi = πr2 ∆y
Capítulo 2: Ejercicios propuestos 62

N

AC


M

AS

PE
RA

CI
Figura 2.12: Análisis del líquido por capas de grosor ∆y.
G

L
EN
Fuente: http://canek.uam.mx/Integral/Cap03.Aplicaciones/3.5.Trabajo/FTTrabajo.pdf

DE
O
PR

CI

CA
Además:
ES
DE

LI
Wi = Fi yi∗
L


S

A
TO

El trabajo total que se requiere para elevar, a la parte superior del recipiente, todo el líquido (las n capas)
ER

CA

es
EN

EN

Pn
D

W = lı́m Wi
AM

n→∞ i=1
DA
S

Para hallar el límite, considere como ∆y → 0 si ∆y = 0.00001 e ∞ = L/∆y.


ND

SI
DI

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
ER
FU

con estructuras algorítmicas selectivas e iterativas, realice lo siguiente:


TU

IV

Determine el trabajo requerido en kJ para bombear todo el líquido hasta la parte superior del recipiente.
ES

UN

Su solución deberá incluir solo las siguientes funciones, además de la función main:
IA
IC

void leer_datos(double *altura_cilindro, double *altura_liquido, double *radio_base, double


*densidad)
IF

/*Función que, simulando el paso de parámetros por referencia, lee los valores de la altura del cilindro,
NT

la altura del líquido, el radio de la base del cilindro y la densidad del líquido en kg/m3 . Las longitudes
están en m.*/
PO

double calcular_volumen_capa_i(double radio_i)


/* Función que calcula el volumen de la capa i de acuerdo con su radio ri . */
double calcular_masa_capa_i(double radio_i, double densidad)
/* Función que calcula la masa de la capa i de acuerdo con su radio ri y densidad del líquido. Esta
función debe invocar a la función calcular_volumen_capa_i.*/
Capítulo 2: Ejercicios propuestos 63

double calcular_fuerza_capa_i(double radio, double densidad)


/* Función que calcula la fuerza para bombear la capa i de acuerdo con el radio r y la densidad del
líquido. Esta función debe invocar a la función calcular_masa_capa_i. */
double calcular_trabajo_capa_i(double radio_base, double densidad, double y_i)
/* Función que calcula el trabajo realizado por la fuerza para bombear la capa i de acuerdo con su
radio r, la densidad del líquido y la posición yi en el eje y. Esta función debe invocar a la función
calcular_fuerza_capa_i. */
double calcular_trabajo_fluido(double altura_cilindro, double altura_liquido, double radio_base,
double densidad)
/* Función que calcula el trabajo requerido en Joules (J) para bombear todo el líquido hasta la parte
superior del recipiente. 1J = 1 N m y 1N = 1 kg.m/s2 */

N
No debe usar estructuras algorítmicas selectivas ni iterativas anidadas.


Casos de prueba para verificación de solución

AC


Use los siguientes casos para verificar si su solución es correcta.

AS

PE
H L r ρ Impresión
RA

CI
3 4 1 1000 La altura del líquido debe ser menor que la altura del cilindro.
G

L
3 2 0 1000 Los datos deben ser mayores que cero.

EN

DE
O

3 2 1 1000 El trabajo total que se requiere para elevar a la parte superior del recipiente
PR

todo el líquido es 123.15 kJ. CI


8 7 4 900 El trabajo total que se requiere para elevar a la parte superior del recipiente

CA
todo el líquido es 13965.24 kJ.
ES
DE

LI
L


S

A
TO

ER

2.3.14. Trabajo realizado para extraer el líquido de un cono (adaptado del labo-
CA

ratorio 3 del ciclo 2020-2)


EN

EN

(Adaptado de [10])
D
AM

DA

En la figura 2.13 se muestra un recipiente de forma cónica con la base circular en la parte superior y cuyo
S

radio es r m, su altura es H m. En su interior se encuentra un líquido con altura de L m, ¿cuál es el trabajo


ND

SI

requerido en kJ para bombear todo el líquido hasta la parte superior del recipiente? Considere que la densidad
DI

ER

del líquido es ρ kg/m3 .


FU

TU

Para resolver el problema se deberá tener en cuenta un conjunto de n capas de líquido, cada una con un
IV

mismo grosor ∆y, como se muestra en la figura 2.14 en la cual se resalta la i-ésima capa de líquido a una
ES

UN

distancia yi∗ con respecto de la parte superior del recipiente. El origen del eje vertical será la parte superior
del recipiente con el sentido positivo hacia abajo.
IA

Si el número n de capas tiende a ser muy grande, entonces el grosor ∆y de cada capa tiende a ser muy
pequeño. Para este caso, el trabajo Wi que realiza la fuerza Fi al elevar hasta la parte superior del recipiente
IC

la i-ésima capa es
IF
NT

Wi = Fi yi∗
PO

La fuerza Fi es igual a la fuerza de atracción gravitacional que actúa sobre la i-ésima capa = mi g:

Fi = mi g

g es la aceleración de la gravedad (9.8 m/s2 ).


mi es la masa de la i-ésima capa:
Capítulo 2: Ejercicios propuestos 64

N

AC


M

AS
Figura 2.13: Recipiente cónico con un fluido en su interior.

PE
RA
Fuente: http://canek.uam.mx/Integral/Cap03.Aplicaciones/3.5.Trabajo/FTTrabajo.pdf

CI
G

L
EN

DE
O
PR

CI

CA
ES
DE

LI
L


S

A
TO

ER

CA
EN

EN

D
AM

DA
S
ND

SI

Figura 2.14: Análisis del líquido por capas de grosor ∆y.


DI

ER

Fuente: http://canek.uam.mx/Integral/Cap03.Aplicaciones/3.5.Trabajo/FTTrabajo.pdf
FU

TU

IV

mi = (ρ)(volumen de la i-ésima capa)


ES

UN

Considerando que el radio de la i-ésima capa es ri y el ∆y es muy pequeño, el cálculo del volumen Vi de la
IA

i-ésima capa sería como si fuera un cilindro circular de radio ri :


IC

Vi = π(ri )2 ∆y
IF
NT

Aplicando el concepto de triángulos semejantes en la figura 2.15, se puede hallar ri


Entonces:
PO

r = ri r(H − yi∗ )
∗ ⇒ ri =
H H − yi H

Finalmente, el trabajo total que se requiere para elevar, a la parte superior del recipiente, todo el líquido
(las n capas) es :
Capítulo 2: Ejercicios propuestos 65

N

AC
Figura 2.15: Análisis de triángulos semejantes ∆y.


Fuente: http://canek.uam.mx/Integral/Cap03.Aplicaciones/3.5.Trabajo/FTTrabajo.pdf

AS

PE
W = lı́m
Pn
Wi RA

CI
n→∞ i=1
G

L
EN
Para hallar el límite, considere como ∆y → 0 si ∆y = 0.00001 e ∞ = L/∆y.

DE
O
PR

CI
Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular

CA
con estructuras algorítmicas selectivas e iterativas, realice lo siguiente:
ES
DE

LI
Determine el trabajo requerido en kJ para bombear todo el líquido hasta la parte superior del recipiente.
L


S

Su solución deberá incluir solo las siguientes funciones, además de la función main:
TO

ER

CA
EN

void leer_datos(double *altura_cono, double *altura_liquido, double *radio_cono, double


EN

*densidad)
D

/*Función que, simulando el paso de parámetros por referencia, lee los valores de la altura del cono, la
AM

DA

altura del líquido, el radio de la base superior del cono y la densidad del líquido en kg/m3 . Las longitudes
S

están en m.*/
ND

SI
DI

double calcular_volumen_capa_i(double radio_i)


ER
FU

/* Función que calcula el volumen de la capa i de acuerdo con su radio ri . */


TU

IV

double calcular_masa_capa_i(double radio_i, double densidad)


/* Función que calcula la masa de la capa i de acuerdo con su radio ri y densidad del líquido. Esta
ES

UN

función debe invocar a la función calcular_volumen_capa_i.*/


double calcular_radio_capa_i(double altura_cono, double radio_base_cono, double y_i)
IA

/* Función que calcula el radio de la capa i de acuerdo con la altura H del cono, su radio r y la posición
IC

yi en el eje y.*/
IF

double calcular_fuerza_capa_i(double altura_cono, double radio_base_cono, double densidad,


NT

double y_i)
/* Función que calcula la fuerza para bombear la capa i de acuerdo con la altura H del cono, su
radio r, la densidad del líquido y la posición yi en el eje y. Esta función debe invocar a la función
PO

calcular_radio_capa_i y calcular_masa_capa_i. */
double calcular_trabajo_capa_i(double altura_cono, double radio_base_cono, double densidad,
double y_i)
/* Función que calcula el trabajo realizado por la fuerza para bombear la capa i de acuerdo con la altura
H del cono, su radio r, la densidad del líquido y la posición yi en el eje y. Esta función debe invocar a
la función calcular_fuerza_capa_i. */
Capítulo 2: Ejercicios propuestos 66

double calcular_trabajo_fluido(double altura_cono, double altura_liquido, double radio_base,


double densidad)
/* Función que calcula el trabajo requerido en Joules (J) para bombear todo el líquido hasta la parte
superior del recipiente. 1J = 1 N m y 1N = 1 kg.m/s2 */

No debe usar estructuras algorítmicas selectivas ni iterativas anidadas.

Casos de prueba para verificación de solución

Use los siguientes casos para verificar si su solución es correcta.

H L r ρ Impresión
8 10 6 1000 La altura del líquido debe ser menor que la altura del cono.
12 10 0 1000 Los datos deben ser mayores que cero.

N
12 10 6 1000 El trabajo total que se requiere para elevar a la parte superior del recipiente


todo el líquido es 11545.36 kJ.

AC
2 1.8 1 900 El trabajo total que se requiere para elevar a la parte superior del recipiente


todo el líquido es 8.75 kJ.

AS

PE
RA

CI
2.3.15. Trabajo realizado para comprimir o alargar un resorte (adaptado del
G

L
EN

DE
laboratorio 3 del ciclo 2020-2)
O
PR

(Adaptado de [10])
CI

CA
ES
DE

En la figura 2.16 se muestra un resorte en 3 posibles estados (natural, alargado y comprimido). El resorte

LI
se alarga una longitud x por la acción de una fuerza F o se comprime una longitud x por la acción de una
L

fuerza F , ¿cuál es el trabajo W en J o N m que realiza la fuerza F en el extremo derecho para el alargamiento

S

del resorte?
TO

ER

CA
EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN
IA
IC
IF
NT
PO

Figura 2.16: Resorte en 3 posibles estados (natural, alargado y comprimido).


Fuente: http://canek.uam.mx/Integral/Cap03.Aplicaciones/3.5.Trabajo/FTTrabajo.pdf
Capítulo 2: Ejercicios propuestos 67

Para alargar un resorte una longitud x sin llegar a su límite de elasticidad, se debe aplicar una fuerza F
directamente proporcional a la longitud x:

F = kx

k en N/m se conoce como la constante del resorte. La fuerza que se requiere para comprimir un resorte es
directamente proporcional a la longitud que se comprime o encoge. Tanto para el alargamiento como para la
compresión de un resorte, la expresión F = kx representa la fuerza aplicada conocida como la Ley de Hooke.
En la figura 2.17 se muestra un resorte en su estado natural de longitud a sujeto a una pared. Se desea
estirar hasta la longitud de b aplicando una fuerza f en el extremo derecho, analicemos como hallar el trabajo
que realiza la fuerza f para el alargamiento del resorte.

N

AC


M

AS

PE
RA

CI
G

L
EN

DE
O
PR

CI

CA
Figura 2.17: Se desea estirar un resorte desde su estado natural con longitud a hasta b, aplicando una fuerza
ES
DE

F en el extremo derecho.

LI
Fuente: http://canek.uam.mx/Integral/Cap03.Aplicaciones/3.5.Trabajo/FTTrabajo.pdf
L


S

A
TO

ER

Se divide el intervalo [a, b] en n-subintervalos, todos ellos con la misma longitud ∆x = b − a


n , considerando
CA

a < b (ver figura 2.18). En dicha recta, xi es un punto cualquiera en el intervalo [xi−1 , xi ] y la fuerza que se

EN

EN

requiere para alargar el resorte hasta x∗i es f (x∗i ).


D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN

Figura 2.18: Análisis en un punto cualquiera del intervalo [xi−1 , xi ].


Fuente: http://canek.uam.mx/Integral/Cap03.Aplicaciones/3.5.Trabajo/FTTrabajo.pdf
IA

Si ∆x es muy pequeño, el número n de subintervalos tiende a ser muy grande. Entonces f (x∗i ) en [xi−1 , xi ]
IC

no varía mucho y se podría decir que f (x∗i ) es casi constante. Por lo tanto, el trabajo Wi que realiza la fuerza
f (x∗i ) para alargar el resorte desde xi−1 hasta xi es aproximadamente:
IF
NT

Wi ≈ f (x∗i )∆x
PO

Si se considera una cantidad grande de n subintervalos en [a,b], el trabajo W que realiza la fuerza f al
estirar el resorte desde a hasta b sería:
Pn
W = lı́m i=1 Wi
n→∞

Para hallar el límite, considere como ∆x → 0 si ∆x = 0.00001 e ∞ = (b − a)/∆x.


Capítulo 2: Ejercicios propuestos 68

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
con estructuras algorítmicas selectivas e iterativas, realice lo siguiente:

Determine el trabajo en J o N m que realiza la fuerza f para el alargamiento del resorte desde a hasta b.

Su solución deberá incluir solo las siguientes funciones, además de la función main:

void leer_datos(double *constante_resorte, double *pos_a, double *pos_b)


/*Función que, simulando el paso de parámetros por referencia, lee los valores de la constante k en N/m
del resorte, la posición inicial a en el eje X y la posición final b en el eje X. Las longitudes están en m.*/
double calcular_f_x_i(double x_i, double cte_resorte)
/* Función que calcula la fuerza f (x∗i ) que se requiere para alargar el resorte hasta x∗i . */

N
double calcular_trabajo_i(double x_i, double cte_resorte, double delta_x)


/* Función que calcula el trabajo Wi que realiza la fuerza f (x∗i ) para alargar el resorte desde xi−1 hasta

AC
xi . */


M
double calcular_trabajo(double pos_ini, double pos_fin, double cte_resorte)

AS
/* Función que calcula el trabajo en Joules (J) que realiza la fuerza f al estirar el resorte desde una

PE
RA
posición inicial a hasta una posición final b. 1J = 1 N m y 1N = 1 kg.m/s2 */

CI
G

L
EN
No debe usar estructuras algorítmicas selectivas ni iterativas anidadas.

DE
O
PR

Casos de prueba para verificación de solución


CI

CA
ES
DE

Use los siguientes casos para verificar si su solución es correcta.

LI
L

K a b

Impresión
S

A
TO

0 -1 2 Los datos no son válidos.


ER

CA

8.3 4 2 La posición final (b) debe ser mayor que la posición inicial (a)..
EN

8.3 0 30 El trabajo total que realiza la fuerza F para alargar 30.00 cm es 37.35 Nm.
EN

7.5 1 8 El trabajo total que realiza la fuerza F para alargar 7.00 cm es 2.36 Nm.
D
AM

DA
S
ND

SI

2.3.16. Trabajo realizado por una fuerza variable (adaptado del laboratorio 3 del
DI

ER

ciclo 2020-2)
FU

TU

IV

(Adaptado de [15])
ES

UN

Considere una partícula que se desplaza a lo largo del eje x bajo la acción de una fuerza que varía con la
posición. La figura 2.19 muestra una fuerza variable aplicada en una partícula que se mueve desde la posición
inicial xi a la posición final xf .
IA

Imagine una partícula que se somete a un desplazamiento muy pequeño ∆x, mostrado en la figura. La
IC

componente Fx de la fuerza Fx , es aproximadamente constante en este intervalo pequeño; para este pequeño
IF

desplazamiento, se puede aproximar el trabajo realizado en la partícula por la fuerza utilizando la siguiente
ecuación:
NT
PO

W ≈ Fx ∆x

que es el área del rectángulo sombreado en la figura 2.19. Si la curva Fx en términos de x se divide en un gran
número de tales intervalos, el trabajo total realizado para el desplazamiento de xi a xf es aproximadamente
igual a la suma de un gran número de tales términos

Pxf
W ≈ xi Fx ∆x
Capítulo 2: Ejercicios propuestos 69

Si se hace que el tamaño de los desplazamientos pequeños se aproxime a cero, el número de términos en la
suma aumenta sin límite, pero el valor de la suma se aproxima a un valor definido que es igual al área limitada
por la curva Fx y el eje x, expresado como:
Pxf
W = lı́m xi Fx ∆x
∆x→0

Para hallar el límite, considere como ∆x → 0 si ∆x = 0.00001.

N

AC


M

AS

PE
RA

CI
G

L
EN

DE
O
PR

CI

CA
ES
DE

LI
L


S

A
TO

ER

CA
EN

EN

D
AM

Figura 2.19: El trabajo realizado en una partícula por la componente de fuerza Fx para el pequeño desplaza-
DA

miento ∆x es Fx ∆x, que es igual al área de rectángulo sombreado. Fuente: [15]


S
ND

SI

Si la fuerza que se aplica a una partícula varía con la posición de acuerdo con la expresión Fx = f (x) =
DI

ER
FU

ax3 +bx2 +cx+d, donde Fx está en N = mkgs−2 . ¿Cuánto trabajo se realiza en la partícula por la componente
TU

de fuerza Fx para moverla desde xi hasta xf ? El trabajo (W ) se expresa en newton metro o joule (J = N m =
IV

m2 kgs− 2).
ES

UN

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
con estructuras algorítmicas selectivas e iterativas, realice lo siguiente:
IA

Determine el trabajo realizado por la fuerza sobre la partícula en el desplazamiento desde xi cm hasta
IC

xf cm.
IF

Determine en qué punto a lo largo del eje x se presentó la menor Fuerza en la componente Fx .
NT

Determine en qué punto a lo largo del eje x se presentó la mayor Fuerza en la componente Fx .
PO

Su solución deberá incluir solo las siguientes funciones, además de la función main:

void leer_datos(double *a, double *b, double *c, double *d, double *xi, double *xf) /*Función
que, simulando el paso de parámetros por referencia, lee los valores de los coeficientes a, b, c y d, así
como las posiciones de inicio (xi) y de fin (xf) en cm para determinar el trabajo realizado por la fuerza
variable.*/
Capítulo 2: Ejercicios propuestos 70

double calcular_fuerza(double x, double a, double b, double c, double d)


/* Función que calcula la fuerza que se aplica a una partícula en la posición x. */

No debe usar estructuras algorítmicas selectivas ni iterativas anidadas.

Casos de prueba para verificación de solución

Use los siguientes casos para verificar si su solución es correcta.

a b c d xi xf Impresión
1 0 0 1 3 2 x_f debe ser mayor que x_i.
1 0 0 1 0 500 El trabajo realizado por la fuerza variable sobre la partícula desde
x_i=0.00 cm hasta x_f=500.00 cm es 161.25 J.

N
La menor fuerza en la componente Fx fue de 1.00 N y se presentó en


x=0.00 cm.
La mayor fuerza en la componente Fx fue de 126.00 N y se presentó

AC
en x=500.00 cm.


6 0 0 0 100 200 El trabajo realizado por la fuerza variable sobre la partícula desde

AS
x_i=100.00 cm hasta x_f=200.00 cm es 22.55 J.

PE
RA
La menor fuerza en la componente Fx fue de 6.00 N y se presentó en

CI
x=100.00 cm.
G

L
EN
La mayor fuerza en la componente Fx fue de 48.07 N y se presentó

DE
O

en x=200.10 cm.
PR

2 -4 -1 1 300 600 CI
El trabajo realizado por la fuerza variable sobre la partícula desde

CA
x_i=300.00 cm hasta x_f=600.00 cm es 0.29 J.
ES
DE

La menor fuerza en la componente Fx fue de 16 N y se presentó en

LI
x=300.00 cm.
L

La mayor fuerza en la componente Fx fue de 283.00 N y se presentó



S

A
TO

en x=600.00 cm.
ER

CA
EN

EN

2.3.17. Desplazamiento, velocidad promedio y velocidad instantánea (adaptado


D
AM

DA

del laboratorio 3 del ciclo 2020-2)


S
ND

SI

Una partícula se mueve a lo largo del eje x. Su posición varía con el tiempo de acuerdo con la expresión
DI

x = f (t) = at2 + bt + c, donde x está en metros y t está en segundos. Como la posición de la partícula está
ER
FU

dada por una función matemática, el movimiento de la partícula es completamente conocido.


TU

IV

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
ES

con estructuras algorítmicas selectivas e iterativas, realice lo siguiente:


UN

Determine el desplazamiento y la velocidad promedio de la partícula en una cantidad (n>0) de intervalos


IA

de tiempo t.
IC

Encuentre la velocidad instantánea de la partícula en el tiempo t medio de cada intervalo de tiempo.


IF

Determine la mayor de las velocidades promedio de todos los intervalos de tiempo.


NT

El desplazamiento ∆x de una partícula se define como su cambio en posición en algún intervalo de tiempo.
PO

Conforme la partícula se mueve desde una posición inicial xi a una posición final xf , su desplazamiento está
dado por

∆x = xf − xi

La velocidad promedio vx , prom de una partícula se define como el desplazamiento ∆x de la partícula


dividido entre el intervalo de tiempo ∆t durante el que ocurre dicho desplazamiento:
Capítulo 2: Ejercicios propuestos 71

vx,prom = ∆
∆t
x

La velocidad instantánea vx es igual al valor límite de la proporción ∆x /∆t conforme ∆t tiende a cero:

vx = lı́m∆t →0 ∆
∆t
x

Para hallar el límite, considere como ∆t → 0 si ∆t = 0.001.

Recuerde que:

El límite de una función f(x), cuando x tiende a c es L si y sólo si para todo ε > 0 , existe
un δ > 0 tal que para todo número real x en el dominio de la función, si 0 < |x − c| < δ

N
entonces |f (x) − L| < ε.


Esto es:

AC
lı́m f (x) = L ⇐⇒ ∀ε > 0, ∃δ > 0 | ∀x ∈ Dom(f ), 0 < |x − c| < δ −→ |f (x) − L| < ε
x→c
y


M

AS

PE
L
RA

CI
G

L
EN

DE
O

c x
PR

Definición de límite.
CI

CA
Fuente: https://upload.wikimedia.org/wikipedia/commons/d/d1/Límite_01.svg
ES
DE

Se puede hallar el límite para cualquier función, como por ejemplo: Si ∆t = t2 − t1 = 0.001

LI
L

y ∆x = x 2 − x 1 . TÓ
S

A
TO

x2 − x1 f (t2 ) − f (t1 )
lı́m∆t →0 ∆
ER

x
∆t = lı́m(t2 −t1 )→0 t2 − t1 = lı́m(t2 −t1 )→0 t2 − t1
CA
EN

EN

Su solución deberá incluir solo las siguientes funciones, además de la función main:
AM

DA
S

void leer_datos(double *a, double *b, double *c, int *n) /*Función que, simulando el paso de
ND

SI

parámetros por referencia, lee los valores de los coeficientes a, b y c, así como el número de intervalos. */
DI

ER
FU

double calcular_posicion(double t, double a, double b, double c)


TU

/*Función que calcula la posición en x de la partícula en un determinado tiempo t de acuerdo con la


IV

función f (t) = at2 + bt + c. */


ES

UN

double calcular_desplazamiento(double t1, double t2, double a, double b, double c)


/*Función que calcula el desplazamiento de la partícula en un determinado intervalo de tiempo ∆t =
IA

t2 − t1. Debe invocar a la función calcular_posicion.*/


IC

double calcular_velocidad_promedio(double t1, double t2, double delta_x)


IF

/* Función que calcula la velocidad promedio de la partícula en un determinado intervalo de tiempo


∆t = t2 − t1. */
NT

double calcular_velocidad_instantanea(double t, double a, double b, double c)


PO

/* Función que calcula la velocidad instantánea de la partícula en un determinado instante de tiempo t.


Debe invocar a la función calcular_posicion. Considere ∆t = 0.001. */

No debe usar estructuras algorítmicas selectivas ni iterativas anidadas.


Capítulo 2: Ejercicios propuestos 72

Casos de prueba para verificación de solución

Use los siguientes casos para verificar si su solución es correcta.

a b c n c/iteración Impresión
t1 t2
2 -4 0 -3 La cantidad de intervalos debe ser mayor que 0.
2 -4 0 2
0 1 El desplazamiento para el intervalo 1 es: -2.00 m.
La vel. promedio para el intervalo 1 es: -2.00 m/s.
La vel. instantánea de la partícula para el t = 0.50 s es: -2.00 m/s.
1 3 El desplazamiento para el intervalo 2 es: 8.00 m.
La vel. promedio para el intervalo 2 es: 4.00 m/s.

N
La vel. instantánea de la partícula para el t = 2.00 s es: 4.00 m/s.


La mayor de las velocidades promedio es 4.00 m/s.
-1 6 -3 3

AC
1 2 El desplazamiento para el intervalo 1 es: 3.00 m.


La vel. promedio para el intervalo 1 es: 3.00 m/s.

AS
La vel. instantánea de la partícula para el t = 1.50 s es: 3.00 m/s.

PE
2.5 3.5 RA
El desplazamiento para el intervalo 2 es: 0.00 m.

CI
La vel. promedio para el intervalo 2 es: 0.00 m/s.
G

L
EN
La vel. instantánea de la partícula para el t = 3.00 s es: 0.00 m/s.

DE
O

4 5 El desplazamiento para el intervalo 3 es: -3.00 m.


PR

CI
La vel. promedio para el intervalo 3 es: -3.00 m/s.

CA
La vel. instantánea de la partícula para el t = 4.50 s es: -3.00 m/s.
ES
DE

La mayor de las velocidades promedio es 3.00 m/s.

LI
L


S

A
TO

ER

2.3.18. Aceleración promedio e instantánea (adaptado del laboratorio 3 del ciclo


CA

2020-2)
EN

EN

La velocidad de una partícula que se mueve a lo largo del eje x varía de acuerdo con la expresión vx =
AM

DA

f (t) = at2 + bt + c, donde vx está en m/s, y t está en segundos.


S
ND

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
O

SI

con estructuras algorítmicas selectivas e iterativas, realice lo siguiente:


DI

ER
FU

TU

Determine la aceleración promedio de la partícula en una cantidad (n>0) de intervalos de tiempo t.


IV
ES

UN

Determine la aceleración instantánea de la partícula para cada tiempo t extremo de todos los intervalos
de tiempo.
IA

Determine la menor de las aceleraciones promedio de todos los intervalos de tiempo.


IC

La aceleración promedio ax,prom de la partícula se define como el cambio en velocidad ∆vx dividido por
IF

el intervalo de tiempo ∆t durante el que ocurre el cambio:


NT

vxf − vxi
ax,prom = ∆v x
∆t = tf − ti
PO

La aceleración instantánea ax es igual al valor límite de la aceleración promedio conforme ∆t tiende a


cero:

ax = lı́m∆t →0 ∆v x dvx
∆t = dt
Capítulo 2: Ejercicios propuestos 73

Para hallar el límite, considere como ∆t → 0 si ∆t = 0.001.

Recuerde que:

El límite de una función f(x), cuando x tiende a c es L si y sólo si para todo ε > 0 , existe
un δ > 0 tal que para todo número real x en el dominio de la función, si 0 < |x − c| < δ
entonces |f (x) − L| < ε.
Esto es:
lı́m f (x) = L ⇐⇒ ∀ε > 0, ∃δ > 0 | ∀x ∈ Dom(f ), 0 < |x − c| < δ −→ |f (x) − L| < ε
x→c
y

N

c x

AC
Definición de límite.


Fuente: https://upload.wikimedia.org/wikipedia/commons/d/d1/Límite_01.svg

AS
Se puede hallar el límite para cualquier función, como por ejemplo: Si ∆t = t2 − t1 = 0.001

PE
y ∆vx = vx2 − vx1 .
RA

CI
f (t2 ) − f (t1 )
G
lı́m∆t →0 ∆v vx2 − vx1

L
x

EN
∆t = lı́m(t2 −t1 )→0 t2 − t1 = lı́m(t2 −t1 )→0 t2 − t1

DE
O
PR

CI

CA
Su solución deberá incluir solo las siguientes funciones, además de la función main:
ES
DE

LI
void leer_datos(double *a, double *b, double *c, int *n) /*Función que, simulando el paso de
L


parámetros por referencia, lee los valores de los coeficientes a, b y c, así como el número de intervalos. */
S

A
TO

ER

CA

double calcular_velocidad(double t, double a, double b, double c)


/*Función que calcula la velocidad en x de la partícula en un determinado tiempo t de acuerdo con la
EN

EN

función f (t) = at2 + bt + c. */


D
AM

DA

double calcular_aceleracion_promedio(double t1, double t2, double v1, double v2)


/* Función que calcula la aceleración promedio de la partícula en un determinado intervalo de tiempo
S
ND

∆t = t2 − t1 y un ∆vx = v2 − v1. */
SI
DI

ER
FU

double calcular_aceleracion_instantanea(double t, double a, double b, double c)


TU

/* Función que calcula la aceleración instantánea de la partícula en un determinado instante de tiempo


IV

t. Debe invocar a la función calcular_velocidad. Considere ∆t = 0.001. */


ES

UN

No debe usar estructuras algorítmicas selectivas ni iterativas anidadas.


IA
IC
IF
NT
PO
Capítulo 2: Ejercicios propuestos 74

Casos de prueba para verificación de solución

Use los siguientes casos para verificar si su solución es correcta.

a b c n c/iteración Impresión
t1 t2
-5 0 40 -3 La cantidad de intervalos debe ser mayor que 0.
-5 0 40 2
0 2 La aceleración promedio para el intervalo 1 es -10.00 m/sˆ2.
La acel. instantánea de la partícula para el t=0.00 s es 0.00 m/sˆ2.
La acel. instantánea de la partícula para el t=2.00 s es -20.00 m/sˆ2.
1 3 La aceleración promedio para el intervalo 2 es -20.00 m/sˆ2.
La acel. instantánea de la partícula para el t=1.00 s es -10.00 m/sˆ2.

N
La acel. instantánea de la partícula para el t=3.00 s es -30.00 m/sˆ2.


La mín. acel. promedio de todos los intervalos es -20.00 m/sˆ2.
-1 6 -3 3

AC
1 2 La aceleración promedio para el intervalo 1 es 3.00 m/sˆ2.


La acel. instantánea de la partícula para el t=1.00 s es 4.00 m/sˆ2.

AS
La acel. instantánea de la partícula para el t=2.00 s es 3.00 m/sˆ2.

PE
2.5 3.5 La RA
aceleración promedio para el intervalo 2 es 0.00 m/sˆ2.

CI
La acel. instantánea de la partícula para el t=2.50 s es 1.00 m/sˆ2.
G

L
EN
La acel. instantánea de la partícula para el t=3.50 s es -1.00 m/sˆ2.

DE
O

4 5 La aceleración promedio para el intervalo 3 es -3.00 m/sˆ2.


PR

La CI
acel. instantánea de la partícula para el t=4.00 s es -2.00 m/sˆ2.

CA
La acel. instantánea de la partícula para el t=5.00 s es -4.00 m/sˆ2.
ES
DE

La mín. acel. promedio de todos los intervalos es -3.00 m/sˆ2.

LI
L


S

A
TO

ER

2.3.19. Centro de masa de un sistema bidimensional (adaptado del laboratorio 3


CA

del ciclo 2020-2)


EN

EN

(Adaptado de [10])
AM

DA

Para hallar el centro de masa de una placa con densidad constante δ cuya forma está delimitada en el plano
S
ND

xy por una función f (x), el eje x y las líneas verticales en los extremos desde a hasta f (a) y b hasta f (b) (ver
O

SI

figura 2.20), se divide la superficie de la lámina en n franjas verticales de igual anchura ∆x de acuerdo con la
DI

ER
FU

figura 2.21.
TU

IV

El área de la franja es ∆i A = f (x∗i )∆x


ES

UN

La masa de la franja es ∆i m = δ∆i A = δf (x∗i )∆x


Para un número de n de franjas verticales que tiende al infinito y las ∆x tienden a cero, la masa M de la
IA

placa es
IC

Pn
M = lı́m δf (x∗i )∆x
IF

n→∞ i=1
NT

El momento de la lámina con respecto al eje y es


PO

Pn
My = lı́m i=1 x∗i δf (x∗i )∆x
n→∞

El momento de la lámina con respecto al eje x es

Mx = lı́m
Pn δ ∗ 2
n→∞ i=1 2 [f (xi )] ∆x
Capítulo 2: Ejercicios propuestos 75

N

AC


M

AS

PE
RA

CI
G

L
Figura 2.20: Centro de masa de una placa delimitada por una función f (x), el eje x

EN

DE
O

y las líneaas verticales en los extremos desde xi hasta f (xi ) y xf hasta f (xf ). Fuente:
PR

CI
http://canek.uam.mx/Integral/Cap03.Aplicaciones/3.7.Momento/FTMomento.pdf

CA
.
ES
DE

LI
L


S

A
TO

ER

CA
EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN
IA
IC
IF
NT

Figura 2.21: Centro de masa de la franja vertical, con coordenadas x∗i y yi∗ , el ancho de la franja es ∆x y su
PO

altura es f (x∗i ). Fuente: http://canek.uam.mx/Integral/Cap03.Aplicaciones/3.7.Momento/FTMomento.pdf

Finalmente, las coordenadas x e x del centro de masa de la lámina con densidad constante δ son:

M
x = My
Capítulo 2: Ejercicios propuestos 76

y=M
M
x

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
con estructuras algorítmicas selectivas e iterativas, realice lo siguiente:

Determine el centro de masa de una placa delgada con densidad constante δ, cuya superficie está deli-
mitada por f (x) = ax2 + bx − c, el eje x del plano cartesiano y las líneas verticales en los extremos de a
hasta f (a) y b hasta f (b).

Para hallar el límite, considere como ∆x = 0.001, e ∞ = n sería la cantidad de franjas de ancho ∆x que
pueden entrar entre a y b.
Su solución deberá incluir solo las siguientes funciones, además de la función main:

N

void leer_datos(double *a, double *b, double *c, double *xi, double *xf, double *densidad)
/*Función que, simulando el paso de parámetros por referencia, lee los valores de los coeficientes a, b

AC
y c, así como las posiciones de inicio (xi) y de fin (xf) en m. para determinar el centro de masa, y la


densidad de la placa delgada.*/

AS

PE
double calcular_fx(double x, double a, double b, double c)
RA

CI
/*Función que calcula f (x) en una determinada posición x de acuerdo con la función f (x) = ax2 + bx + c.
G
*/

L
EN

DE
O

double calcular_masa(double a, double b, double c, double xi, double xf, double densidad)
PR

CI
/* Función que calcula la masa de la lámina delimitada por f (x), el eje x, y las líneas verticales de xi

CA
hasta f (xi) y de xf hasta f (xf ).*/
ES
DE

LI
double calcular_momento_y(double a, double b, double c, double xi, double xf, double densidad)
L

/* Función que calcula el momento de la lámina con respecto al eje y, con densidad constante δ y

S

delimitada por f (x), el eje x, y las líneas verticales de xi hasta f (xi) y de xf hasta f (xf ).*/
TO

ER

CA

double calcular_momento_x(double a, double b, double c, double xi, double xf, double densidad)
EN

EN

/* Función que calcula el momento de la lámina con respecto al eje x, con densidad constante δ y
delimitada por f (x), el eje x, y las líneas verticales de xi hasta f (xi) y de xf hasta f (xf ).*/
D
AM

DA

double calcular_centro_masa(double a, double b, double c, double xi, double xf, double


S
ND

densidad, *ptr_x_centro_masa, *ptr_y_centro_masa)


O

SI

/* Función que calcula las coordenadas x e y del centro de masa de la lámina con densidad constante
DI

ER

δ delimitada por f (x), el eje x, y las líneas verticales de xi hasta f (xi) y de xf hasta f (xf ). Tenga
FU

TU

en cuenta que en está función las coordenadas del centro de masa se retornan simulando el paso de
IV

parámetros por referencia.*/


ES

UN

No debe usar estructuras algorítmicas selectivas ni iterativas anidadas.


IA

Casos de prueba para verificación de solución


IC

Use los siguientes casos para verificar si su solución es correcta.


IF
NT

a b c δ xi xf Impresión
-1 6 -5 1.5 5 1 xi debe ser menor que xf.
PO

-1 6 -5 1.5 1 5 Las coordenadas del centro de masa [x, y] son [3.00 m, 1.60 m].
-1 6 -3 1.2 2 4 Las coordenadas del centro de masa [x, y] son [3.00 m, 2.84 m].
Capítulo 2: Ejercicios propuestos 77

2.3.20. Centro de masa de una placa delimitada entres dos curvas (adaptado del
laboratorio 3 del ciclo 2020-2)

(Adaptado de [10])
Para hallar el centro de masa de una placa con densidad constante δ en kg/m3 cuya forma está delimitada
en el plano xy por la gráfica de dos funciones f (x) y g(x), se divide la superficie de la placa en n franjas
verticales de igual anchura ∆x de acuerdo con la figura 2.22.

N

AC


M

AS

PE
RA

CI
G

L
EN

DE
O
PR

CI

CA
ES
DE

LI
L

Figura 2.22: Centro de masa de la franja vertical, con coordenadas x∗i y yi∗ , el ancho de la franja es ∆x y su altura

S

es f (x∗i ) − g(x∗i ). Fuente: http://canek.uam.mx/Integral/Cap03.Aplicaciones/3.7.Momento/FTMomento.pdf


TO

ER

CA

El área de la franja es ∆i A = [f (x∗i ) − g(x∗i )]∆x


EN

EN

La masa de la franja es ∆i m = δ∆i A = δ[f (x∗i ) − g(x∗i )]∆x


D
AM

DA

Observe que:
S
ND

SI

f (x∗i ) + g(x∗i )
DI

yi∗ =
ER

2
FU

TU

IV

Para un número de n de franjas verticales que tiende al infinito y las ∆x tienden a cero, la masa M de la
placa es
ES

UN

Pn
M = lı́m δ[f (x∗i ) − g(x∗i )]∆x
IA

n→∞ i=1
IC

El momento de la placa con respecto al eje y es


IF

Pn
NT

My = lı́m i=1 x∗i δ[f (x∗i ) − g(x∗i )]∆x


n→∞
PO

El momento de la placa con respecto al eje x es

Pn δ ∗ 2 ∗ 2
Mx = lı́m
n→∞ i=1 2 [[f (xi )] − [g(xi )] ]∆x

Finalmente, las coordenadas x e x del centro de masa de la placa con densidad constante δ son:
Capítulo 2: Ejercicios propuestos 78

M
x = My

y=M M
x

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
con estructuras algorítmicas selectivas e iterativas, realice lo siguiente:

Determine el centro de masa de una placa delgada con densidad constante δ, cuya superficie está de-
limitada por las gráficas de las funciones f (x) = ax2 + bx − c y g(x) = mx2 + nx − p desde xi hasta
xf .

Para hallar el límite, considere como ∆x = 0.001, e ∞ = n sería la cantidad de franjas de ancho ∆x que
pueden entrar entre a y b.

N

Su solución deberá incluir solo las siguientes funciones, además de la función main:

AC
void leer_datos(double *a, double *b, double *c, double *m, double *n, double *p, double


*xi, double *xf, double *densidad)

AS
/*Función que, simulando el paso de parámetros por referencia, lee los valores de los coeficientes a, b y

PE
RA
c, m, n, p, así como las posiciones de inicio (xi ) y de fin (xf ) en m. para determinar el centro de masa,

CI
y la densidad en kg/m3 de la placa delgada.*/
G

L
EN

DE
O

double calcular_funcion_x(double x, double coef_1, double coef_2, double coef_3)


PR

/*Función que calcula el resultado de una función cuadrática con coeficientes coef1 , coef2 y coef3 en
CI
una determinada posición x de acuerdo con la función coef1 x2 + coef2 x + coef3 . */

CA
ES
DE

double calcular_masa(double a, double b, double c, double m, double n, double p, double xi,

LI
double xf, double densidad)
L

/* Función que calcula la masa de la placa delimitada por las gráficas de las funciones f (x) y g(x) desde

S

A
TO

xi hasta xf .*/
ER

CA

double calcular_momento_y(double a, double b, double c, double m, double n, double p, double


EN

EN

xi, double xf, double densidad)


D

/* Función que calcula el momento de la placa con respecto al eje y, con densidad constante δ y delimitada
AM

DA

por las gráficas f (x) y g(x) desde xi f hasta xf .*/


S
ND

SI

double calcular_momento_x(double a, double b, double c, double m, double n, double p, double


DI

xi, double xf, double densidad)


ER
FU

/* Función que calcula el momento de la lámina con respecto al eje x, con densidad constante δ y
TU

delimitada por las gráficas de las funciones f (x) y g(x) desde xi hasta xf .*/
IV
ES

UN

double calcular_centro_masa(double a, double b, double c, double m, double n, double p,


double xi, double xf, double densidad, *ptr_x_centro_masa, *ptr_y_centro_masa)
/* Función que calcula las coordenadas x e y del centro de masa de la lámina con densidad constante
IA

δ delimitada por las gráficas de las funciones f (x) y g(x) desde xi hasta xf . Tenga en cuenta que las
coordenadas del centro de masa se retornan simulando el paso de parámetros por referencia.*/
IC
IF

No debe usar estructuras algorítmicas selectivas ni iterativas anidadas.


NT
PO
Capítulo 2: Ejercicios propuestos 79

Casos de prueba para verificación de solución

Use los siguientes casos para verificar si su solución es correcta.

a b c m n p δ xi xf Impresión
1 2 3 -1 6 -5 1.5 5 1 xi debe ser menor que xf.
0 1 0 0.142 0 0 1.5 0 7 Las coordenadas del centro de masa [x, y] son
[3.52 m, 2.82 m].
0 1 0 0.142 0 0 1.5 0 7 Las coordenadas del centro de masa [x, y] son
[3.52 m, 2.82 m].
-1 6 -3 1 -6 9 19304 1 5 Las coordenadas del centro de masa [x, y] son
[3.00 m, 3.00 m].

N
2.3.21. Fuerza y presión de un fluido (adaptado del laboratorio 3 del ciclo 2020-2)


AC
(Adaptado de [15])


El agua llena una altura H m detrás de un dique de ancho w m (ver figura 2.23). Determine la fuerza

AS
resultante en kN y la presión promedio en kP a que el agua ejerce sobre el dique. La densidad del agua es ρ =

PE
1 000 kg/m3 , 1P a ≡ 1N/m2 , 1g ≡ 9.8m/s2 . RA

CI
G

L
EN

DE
O
PR

CI

CA
ES
DE

LI
L


S

A
TO

ER

CA
EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN
IA
IC
IF

Figura 2.23: El agua ejerce una fuerza sobre un dique. Fuente: [15].
NT

La presión varía con la profundidad, entonces no se puede calcular la fuerza simplemente al multiplicar el
PO

área por la presión. Como la presión en el agua se incrementa con la profundidad, entonces también aumenta
la fuerza sobre la parte adyacente del dique.
Imagine un eje vertical y, con y = 0 en el fondo del dique. Divida la cara del dique en estrechas tiras
horizontales a una distancia y sobre el fondo, como la tira roja de la figura 2.23. La presión sobre cada tira
sólo se debe al agua; la presión atmosférica actúa sobre ambos lados del dique.
La presión debida al agua a la profundidad h es
Capítulo 2: Ejercicios propuestos 80

P = ρgh = ρg(H − y)

El área Ai de esta i-ésima franja es Ai = wdy . Si dy es muy pequeña, entonces la presión Pi sobre dicha
i-ésima franja es casi constante y se obtiene con la expresión:

Pi ≈ ρghi = ρg(H − yi )

Por otra parte, la fuerza total Fi del fluido sobre esta franja es, aproximadamente:

Fi = Pi Ai ≈ ρghi (dy .w) ⇒


⇒ Fi ≈ ρgwhi dy

Un conjunto de n franjas cubre la pared vertical del dique por lo que la fuerza total F del fluido sobre esta

N
superficie vertical es, aproximadamente:


AC
Pn
F ≈ i=1 Fi ⇒


Pn
⇒F ≈ Pi A i ⇒

M
i=1

AS

PE
Pn
⇒F ≈ i=1 ρgwhi dy
RA

CI
G
En esta última expresión, si el número n de franjas sobre la superficie vertical crece tanto como se quiera,

L
EN

DE
la estimación de la fuerza F será más certera.
O
PR

Por otra parte, si el número n de franjas tiende a infinito: CI

CA
n
ES
DE

X
F = lı́m ρgwhi dy (2.1)

LI
n→∞
L

i=1 TÓ
S

A
TO

La presión promedio debida al agua sobre la cara del dique es:


ER

CA

F F
EN

EN

Pprom = = (2.2)
A wH
D
AM

DA

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
S

con estructuras algorítmicas selectivas e iterativas, realice lo siguiente:


ND

SI
DI

ER

Determine la fuerza resultante que el agua ejerce sobre el dique.


FU

TU

Determine la presión promedio debida al agua sobre la cara del dique.


IV
ES

UN

Para hallar el límite, considere como dy = 0.00001, e ∞ = n sería la cantidad de franjas de altura dy que
pueden entrar entre 0 y la altura H del agua.
IA

Su solución deberá incluir solo las siguientes funciones, además de la función main:
IC

void leer_datos(double *altura_agua, double *altura_dique, double *ancho_dique)


IF

/*Función que, simulando el paso de parámetros por referencia, lee los valores de la altura del agua en
NT

m, la altura del dique en m y el ancho del dique en m.*/


PO

double calcular_fuerza(double altura_agua, double ancho_dique)


/* Función que recibe la altura del agua en m, el ancho del dique en m y calcula la fuerza resultante en
N que el agua ejerce sobre el dique. Debe resolverlo iterativamente usando la ecuación 2.1.*/
double calcular_presion(double fuerza, double altura_agua, double ancho_dique)
/* Función que recibe la fuerza resultante en N que el agua ejerce sobre el dique, la altura del agua en
m, el ancho del dique en m y calcula la presión promedio en P a debida al agua sobre la cara del dique.
*/
Capítulo 2: Ejercicios propuestos 81

No debe usar estructuras algorítmicas selectivas ni iterativas anidadas.

Casos de prueba para verificación de solución

Use los siguientes casos para verificar si su solución es correcta.

Alt. Alt. Ancho


agua dique dique Impresión
en m en m en m
90 80 80 La altura del agua no puede estar por encima de la altura del dique.
70 80 0 El ancho del dique tiene que ser mayor que 0.
70 80 80 La fuerza resultante que el agua ejerce sobre el dique es de 1920800.27 kN.
La presión promedio del agua sobre el dique es de 343.00 kPa.

N
8 14 30 La fuerza resultante que el agua ejerce sobre el dique es de 9408.01 kN.


La presión promedio del agua sobre el dique es de 39.20 kPa.

AC


M
2.3.22. Fuerza y presión de un fluido sobre una cara vertical de un hexaedro

AS

PE
regular (adaptado del laboratorio 3 del ciclo 2020-2)
RA

CI
(Adaptado de [10])
G

L
EN

DE
O

Se tiene un hexaedro regular (cubo) sumergido en un tanque con un líquido de densidad ρ en kg/m3 , como
PR

CI
se muestra en la figura 2.24. El nivel del líquido es de H m y la longitud de cada una de las aristas del cubo mide

CA
ℓ m. Tenga en cuenta que ℓ puede superar a H. Se busca calcular la fuerza total del fluido (fuerza hidrostática)
ES
en kN y la presión promedio en kP a sobre una de las superficies verticales del cubo. 1P a ≡ 1N/m2
DE

LI
L


S

A
TO

ER

CA
EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN
IA
IC
IF
NT

Figura 2.24: El líquido en un contenedor ejerce una fuerza sobre una de las caras verticales del cubo. Fuente:
PO

http://canek.uam.mx/Integral/Cap03.Aplicaciones/3.6.Presion/FTPresion.pdf.

La presión varía con la profundidad, entonces no se puede calcular la fuerza simplemente al multiplicar el
área por la presión.
Se representa una de las caras verticales del cubo en el plano cartesiano que se muestra en la figura 2.25,
donde el eje vertical tiene su origen en la parte superior del fluido y el sentido positivo hacia abajo.
Capítulo 2: Ejercicios propuestos 82

N

AC
Figura 2.25: Análisis de la i-ésima región rectangular horizontal en una de las caras verticales del cubo sumer-


gido en un fluido. Fuente: http://canek.uam.mx/Integral/Cap03.Aplicaciones/3.6.Presion/FTPresion.pdf.

AS

PE
RA
De acuerdo con la figura 2.25, si se considera una i-ésima región rectangular horizontal (una franja) con

CI
altura ∆y m y largo ℓ m, sobre una de las caras verticales del cubo, el área y el ∆y de la i-ésima región señalada
G

L
EN
es muy pequeña, entonces la presión Pi sobre dicha región es casi constante y se obtiene con la expresión

DE
O
PR

Pi = ρgyi CI

CA
ES
DE

Donde 1g ≡ 9.8m/s2 .

LI
L

La fuerza total Fi del fluido sobre esta región es, aproximadamente:



S

A
TO

ER

CA

Fi ≈ Pi Ai ≈ ρgyi (∆y.ℓ) ⇒
EN

EN

⇒ Fi ≈ ρgℓyi ∆y
AM

DA

Un conjunto de n franjas cubre la pared vertical del cubo por lo que la fuerza total F del fluido sobre esta
S
ND

SI

superficie vertical es, aproximadamente:


DI

ER
FU

Pn
F ≈ Fi ⇒
TU

i=1
IV

Pn
ES

⇒F ≈ Pi A i ⇒
UN

i=1

Pn
⇒F ≈ ρgℓyi ∆y
IA

i=1
IC

Si el número n de franjas tiende a infinito, se tiene una mejor estimación de la fuerza:


IF

n
NT

X
F = lı́m ρgℓyi ∆y (2.3)
n→∞
i=1
PO

La presión promedio debida al líquido sobre una cara vertical del cubo es:
F
Pprom = (2.4)
A

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
con estructuras algorítmicas selectivas e iterativas, realice lo siguiente:
Capítulo 2: Ejercicios propuestos 83

Determine la fuerza hidrostática total sobre una de las paredes verticales del hexaedro regular.
Determine la presión promedio debida al líquido sobre una de las paredes verticales del hexaedro regular.

Para hallar el límite, considere como ∆y = 0.00001, e ∞ = n sería la cantidad de franjas de altura ∆y que
pueden entrar entre el fondo del contenedor hasta la altura del cubo.
Su solución deberá incluir solo las siguientes funciones, además de la función main:

void leer_datos(double *alt_liquido, double *arista_cubo, double *densidad)


/*Función que, simulando el paso de parámetros por referencia, lee los valores de la altura del líquido en
m, la longitud de la arista del cubo en m y la densidad del líquido en kg/m3 . */
double calcular_fuerza_resultante(double alt_liquido, double arista_cubo, double densidad)
/* Función que recibe la altura del líquido en m, la longitud de la arista del cubo en m y la densidad en

N
kg/m3 del líquido, y calcula la fuerza resultante en N que el líquido ejerce sobre una cara vertical del


cubo. Considere también que la longitud de la arista ℓ del cubo podría ser mayor que la altura H del

AC
líquido. Debe resolverlo iterativamente usando la ecuación 2.3.*/


double calcular_presion(double fuerza, double altura_liquido, double arista_cubo)

AS
/* Función que recibe la fuerza resultante en N que el líquido ejerce sobre una cara vertical del cubo, la

PE
RA
altura en m del líquido, la longitud en m de la arista de una cara vertical del cubo, y calcula la presión

CI
promedio en P a debida al líquido sobre una de las caras verticales del cubo. Considere también que la
G

L
longitud de la arista ℓ del cubo podría ser mayor que la altura H del líquido.*/

EN

DE
O
PR

CI
No debe usar estructuras algorítmicas selectivas ni iterativas anidadas.

CA
ES
DE

Casos de prueba para verificación de solución

LI
L

Use los siguientes casos para verificar si su solución es correcta.



S

A
TO

ER

CA
EN

Alt. Arista Densi-


EN

líqu. cubo dad Impresión


D

Kg/m3
AM

m m
G

DA

0 5 1000 Todos los datos deben ser mayores que 0.


S

5 0 1000 Todos los datos deben ser mayores que 0.


ND

SI

5 3 1000 La fuerza resultante que el líquido ejerce sobre una cara vertical del cubo
DI

ER

es de 308.70 kN.
FU

La presión promedio del líquido sobre una cara vertical del cubo es de
TU

IV

34.30 kPa..
3 5 1000 La fuerza resultante que el líquido ejerce sobre una cara vertical del cubo
ES

UN

es de 220.50 kN.
La presión promedio del líquido sobre una cara vertical del cubo es de
IA

14.70 kPa.
IC
IF

2.3.23. Fuerza y presión de un fluido sobre una pared vertical de un semicilindro


NT

horizontal (adaptado del laboratorio 3 del ciclo 2020-2)


PO

(Adaptado de [10])
En un contenedor de forma de medio cilindro horizontal de radio r cm se encuentra un fluido de densidad
ρ km/m3 cuya altura es de h cm (ver figura 2.26). ¿Cuál es la fuerza en kN y la presión promedio en kP a que
ejerce el líquido sobre una de las paredes verticales del contenedor? 1P a ≡ 1N/m2 , 1g ≡ 9.8m/s2 .
La presión varía con la profundidad, entonces no se puede calcular la fuerza simplemente al multiplicar el
área por la presión.
Capítulo 2: Ejercicios propuestos 84

N

AC


M

AS

PE
RA
Figura 2.26: El líquido en un contenedor de forma semicilíndrica ejerce una fuerza sobre una de las paredes verti-
cales del contenedor. Fuente: http://canek.uam.mx/Integral/Cap03.Aplicaciones/3.6.Presion/FTPresion.pdf.

CI
G

L
EN

DE
O

Se representa una de las paredes verticales del contenedor en el plano cartesiano que se muestra en la figura
PR

CI
2.27, donde el eje vertical tiene su origen en la parte superior del recipiente y el sentido positivo hacia abajo.

CA
Observe que parte del contorno dep la pared vertical es la curva x2 + y 2 = r2 por lo que la abscisa del punto A
ES
DE

mostrado en la figura 2.27 es x = r2 − y 2 .

LI
L


S

A
TO

ER

CA
EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN
IA

Figura 2.27: Análisis de la i-ésima región rectangular horizontal en una


IC

de las paredes verticales del contenedor de forma semicilíndrica. Fuente:


http://canek.uam.mx/Integral/Cap03.Aplicaciones/3.6.Presion/FTPresion.pdf.
IF
NT

Si ∆y de la i-ésima región señalada es muy pequeña, entonces la presión Pi sobre dicha región es casi
constante y se obtiene con la expresión
PO

Pi = ρgyi

La fuerza total Fi del fluido sobre esta región es, aproximadamente:

Fi ≈ Pi Ai
Capítulo 2: Ejercicios propuestos 85

donde el área de la i-ésima región Ai es


p
Ai = ℓ∆y = 2 r2 − y 2 ∆y

Entonces:
p
Fi ≈ Pi Ai ≈ [ρgyi ][2 r2 − y 2 ]∆y

Un conjunto de n franjas cubre la pared vertical del contenedor, por lo que la fuerza total F del fluido sobre
dicha pared es, aproximadamente:

Pn
F ≈ i=1 Fi ⇒

N

Pn
⇒F ≈ i=1 Pi A i ⇒

AC


Pn p
⇒F ≈ i=1 [ρgyi ][2 r2 − yi2 ]∆y

AS

PE
RA
Si el número n de franjas tiende a infinito, se tiene una mejor estimación de la fuerza:

CI
G

L
EN
n

DE
O
X q
F = lı́m ρgyi 2 r2 − yi2 ∆y (2.5)
PR

n→∞
i=1 CI

CA
El área de una cara vertical del contenedor que cubre el líquido se puede calcular mediante la ecuación 2.6:
ES
DE

LI
n
L

X q
[2 r2 − yi2 ]∆y (2.6)
A = lı́m

S

n→∞
TO

ER

i=1
CA
EN

La presión promedio debida al líquido sobre una cara vertical del contenedor es:
EN

F
AM

Pprom = (2.7)
DA

A
S
ND

SI

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
DI

ER

con estructuras algorítmicas selectivas e iterativas, realice lo siguiente:


FU

TU

IV

Determine la fuerza resultante que el líquido ejerce sobre una de las paredes verticales del contenedor.
ES

UN

Determine la presión promedio debida al líquido sobre una de las paredes verticales del contenedor.
IA

Para hallar el límite, considere como ∆y = 0.00001, e ∞ = n sería la cantidad de franjas de altura ∆y que
pueden entrar entre el fondo del contenedor hasta la altura del líquido.
IC

Su solución deberá incluir solo las siguientes funciones, además de la función main:
IF
NT

void leer_datos(double *altura_liquido, double *altura_contenedor, double *densidad)


/*Función que, simulando el paso de parámetros por referencia, lee los valores de la alura del líquido en
PO

cm, la altura del contenedor en cm y la densidad del líquido en kg/m3 . */


double calcular_fuerza(double alt_liquido, double radio_pared_contenedor, double densidad)
/* Función que recibe la altura del líquido en m, el radio de una pared vertical del contenedor en m y
la densidad en kg/m3 , y calcula la fuerza resultante en N que el líquido ejerce sobre una pared vertical
del contenedor. Debe resolverlo iterativamente usando la ecuación 2.5.*/
Capítulo 2: Ejercicios propuestos 86

double calcular_area(double alt_liquido, double radio_pared_contenedor)


/* Función que recibe la altura del líquido en m y el radio de una pared vertical del contenedor en m,
y calcula el área en m2 que el líquido abarca sobre una pared vertical del contenedor. Debe resolverlo
iterativamente usando la ecuación 2.6.*/
double calcular_presion(double fuerza, double altura_liquido, double radio_pared_contenedor)
/* Función que recibe la fuerza resultante en N que el líquido ejerce sobre una pared vertical del conte-
nedor, la altura en m del líguido, el radio en m de una pared vertical del contenedor, y calcula la presión
promedio en P a debida al líquido sobre una de las paredes verticales del contenedor. */

No debe usar estructuras algorítmicas selectivas ni iterativas anidadas.

Casos de prueba para verificación de solución

N
Use los siguientes casos para verificar si su solución es correcta.


AC
Alt. Radio Densi-


líqu. conten. dad Impresión

AS
cm cm Kg/m3

PE
90 80 890
RA
La alt. del líquido no puede estar por encima de la alt. del contenedor.

CI
0 100 890 Todos los datos deben ser mayores que 0.
G

L
80 90 0 Todos los datos deben ser mayores que 0.

EN

DE
O

80 100 890 La fuerza res. que el líquido ejerce sobre una pared vertical es 5.47 kN.
PR

CI
La presión promedio del líquido sobre una pared vertical es de 4.66 kPa.

CA
100 100 890 La fuerza res. que el líquido ejerce sobre una pared vertical es 5.81 kN.
ES
DE

La presión promedio del líquido sobre una pared vertical es de 3.70 kPa.

LI
L


S

A
TO

ER

2.3.24. Desplazamiento en base a la velocidad y el tiempo (adaptado del labora-


CA

torio 3 del ciclo 2020-2)


EN

EN

(Adaptado de [15])
D
AM

DA

Una partícula se mueve a lo largo del eje x. Su velocidad varía con el tiempo de acuerdo con la expresión
S

vx = f (t) = at2 + bt + c, donde vx está en m/s y t está en segundos.


ND

SI

Suponga que la gráfica vx vs t para una partícula que se mueve a lo largo del eje x es como se muestra
DI

ER
FU

en la figura 2.28. Divida el intervalo de tiempo tf − ti en muchos pequeños intervalos, cada uno de duración
TU

∆tn . El desplazamiento de la partícula durante cualquier intervalo pequeño, como el sombreado en la figura
IV

2.28, está dado por ∆xn = vxn,prom ∆tn , donde vxn,prom es la velocidad promedio en dicho intervalo. En con-
ES

UN

secuencia, el desplazamiento durante este pequeño intervalo simplemente es el área del rectángulo sombreado.
El desplazamiento total para el intervalo tf − ti es la suma de las áreas de todos los rectángulos desde ti hasta
tf :
IA
IC

Pn
∆x = i=1 vxi,prom ∆tn
IF

Ahora, conforme los intervalos se hacen cada vez más pequeños, el número de términos en la suma aumenta
NT

y la suma tiende a un valor igual al área bajo la gráfica velocidad-tiempo. Debido a esto, en el límite n → ∞,
o ∆tn → 0, el desplazamiento es
PO

Pn
∆x = lı́m i=1 vxi,prom ∆tn
∆tn →0

Para hallar el límite, considere como ∆tn → 0 si ∆tn = 0.001.


La aceleración promedio ax , prom de una partícula se define como la relación de cambio en su velocidad
∆vx dividida por el intervalo de tiempo ∆t durante el que ocurre dicho cambio:
Capítulo 2: Ejercicios propuestos 87

N

AC


M

AS
Figura 2.28: Velocidad en función del tiempo para cualquier partícula que se mueve a lo largo del eje x. El

PE
RA
área total bajo la curva es el desplazamiento total de la partícula. Fuente: [15]

CI
G

L
EN

DE
O

vxf − vxi
ax,prom = ∆v x
∆t = tf − ti
PR

CI

CA
Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
ES
DE

con estructuras algorítmicas selectivas e iterativas, realice lo siguiente:

LI
L


S

Determine el desplazamiento de la partícula en un intervalo de tiempo definido por ti hasta tf .


TO

ER

CA

Determine la mínima aceleración promedio en el intervalo de tiempo, así como el instante de tiempo en
EN

EN

que ocurre ello.


D
AM

Determine la máxima aceleración promedio en el intervalo de tiempo, así como el instante de tiempo en
DA

que ocurre ello.


S
ND

SI
DI

Su solución deberá incluir solo las siguientes funciones, además de la función main:
ER
FU

TU

void leer_datos(double *a, double *b, double *c, double *ti, double *tf) /*Función que,
IV

simulando el paso de parámetros por referencia, lee los valores de los coeficientes a, b y c, así como los
ES

UN

tiempos de inicio (ti) y fin (tf).*/


double calcular_velocidad(double t, double a, double b, double c)
IA

/* Función que calcula la velocidad de la partícula en un determinado instante de tiempo t. */


IC

double calcular_aceleracion_promedio(double t1, double t2, double v1, double v2)


IF

/* Función que calcula la aceleración promedio de la partícula en un determinado intervalo de tiempo


entre t1 y t2. */
NT
PO

No debe usar estructuras algorítmicas selectivas ni iterativas anidadas.


Capítulo 2: Ejercicios propuestos 88

Casos de prueba para verificación de solución

Use los siguientes casos para verificar si su solución es correcta.

a b c ti tf Impresión
-5 0 40 3 2 tf debe ser mayor que ti.
-5 0 40 0 2 El desplazamiento en el intervalo [0.00 s, 2.00 s] es: 66.69 m.
La mín. acel. promedio es -20.00 m/sˆ2 para t=2.00 s.
La máx. acel. promedio es 0.00 m/sˆ2 para t=0.00 s.
-1 6 -3 1 5 El desplazamiento en el intervalo [1.00 s, 5.00 s] es: 18.67 m.
La mín. acel. promedio es -4.00 m/sˆ2 para t=5.00 s.
La máx. acel. promedio es 4.00 m/sˆ2 para t=1.00 s.

N

2.3.25. Longitud de arco (adaptado del laboratorio 3 del ciclo 2020-2)

AC
La longitud de arco es la distancia o camino recorrido a lo largo de una curva generada por la función


f (x). Para calcular la longitud de un arco contenido en el plano XY , se puede dividirla en segmentos muy

M
pequeños, escogiendo una cantidad finita de puntos para luego aproximar la longitud mediante la longitud

AS

PE
RA
de la poligonal que pasa por dichos puntos. Cuanto más cerca estén los puntos, el valor obtenido tendrá una

CI
mayor aproximación a la longitud del arco.
G

L
EN

DE
O
PR

CI

CA
ES
DE

LI
L


S

A
TO

ER

CA
EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV

Figura 2.29: Aproximación de la longitud de arco de una curva mediante segmentos de recta. Fuente:
https://calculo21.com/wp-content/uploads/2019/12/6.1_40.png
ES

UN

.
IA

Para aproximar el valor de la longitud del arco de una curva, se puede considerar una serie de puntos en
el intervalo [a, b] como en la figura 2.29. Luego, si se traza una línea poligonal con los puntos [x0 ,f (x0 )],
IC

[x1 ,f (x1 )], ..., [xn , f (xn )], la suma de todas las longitudes de segmentos sería:
IF

Pn p
(xi − xi−1 )2 + [f (xi ) − f (xi−1 )]2
NT

i=1

En la figura 2.30 se muestra un segmento de recta representativo que aproxima la curva sobre el intervalo
PO

cerrado [xi−1 ,xi ], y si ∆x = xi − xi−1 es muy pequeño, entonces:


Pn p
L(f, [a, b]) = lı́m i=1 (∆x)2 + [f (xi−1 + ∆x) − f (xi−1 )]2
n→∞

Se le pide a usted que elabore un programa en el lenguaje C que, haciendo uso de la programación modular
con estructuras algorítmicas selectivas e iterativas, realice lo siguiente:
Capítulo 2: Ejercicios propuestos 89

N

AC


M

AS
Figura 2.30: Segmento de recta que aproxima la curva sobre el intervalo cerrado [xi−1 ,xi ].

PE
Fuente: https://calculo21.com/wp-content/uploads/2019/12/6.1_41.png RA

CI
G

L
EN

DE
O

Determine la longitud de arco generado por la función f (x) desde x0 = a hasta xn = b.


PR

CI

CA
Para hallar el límite, considere como ∆x → 0 si ∆x = 0.00001 e ∞ = (b − a)/∆x.
ES
DE

Su solución deberá incluir solo las siguientes funciones, además de la función main:

LI
L


S

void leer_datos(double *a, double *b, double *c, double *x_ini, double *x_fin) /*Función que,
TO

ER

simulando el paso de parámetros por referencia, lee los valores de los coeficientes a, b y c de la función
CA

f (x) = ax2 + bx + c, así como el valor de x_0 de inicio y el x_n final. */


EN

EN

double calcular_fx(double a, double b, double c, double x)


AM

DA

/*Función que calcula el valor de y de acuerdo con la función f (x) = ax2 + bx + c. */


S
ND

double calcular_distancia(double x_1, double y_1, double x_2, double y_2)


SI

/*Función que calcula la distancia entre los puntos [x_1, y_1] y [x_2, y_2].*/
DI

ER
FU

TU

double calcular_longitud_arco(double a, double b, double c, double x_ini, double x_fin)


IV

/* Función que calcula la longitud del arco de la curva formada por la gráfica de la función f (x) =
ax2 + bx + c en el intervalo [x_ini, x_fin].*/
ES

UN

No debe usar estructuras algorítmicas selectivas ni iterativas anidadas.


IA
IC

Casos de prueba para verificación de solución


IF

Use los siguientes casos para verificar si su solución es correcta.


NT

a b c x0 xn Impresión
PO

-1 6 -3 5.5 2.5 x_0 debe ser menor que x_n.


-1 6 -3 1.5 5.5 La longitud del arco es 9.778204.
0 1.5 -2 0 5 La longitud del arco es 9.013878.
1 -6 9 2 5 La longitud del arco es 6.125727.
Capítulo 2: Ejercicios propuestos 90

2.3.26. Cálculos matemáticos (adaptado del laboratorio 3 del ciclo 2021-1)

Conforme ha pasado el tiempo, se ha logrado identificar distintos cálculos matemáticos que permiten obtener
resultados en base a sumatorias o fórmulas. Estas combinaciones numéricas ayudan a identificar ciertos patrones
porque se repiten una y otra vez.
Se le pide elaborar un programa en lenguaje C que permita evaluar determinados cálculos matemáticos
dependiendo de lo que el usuario desee. Para ello, el usuario ingresará una opción, y dependiendo de ella,
solicitará algunos datos para poder realizar la operación. Asuma que siempre se ingresa una opción correcta.

Opción ‘P’: Deberá leer la cantidad N de números a evaluar y hallar y mostrar la suma de números
pares e impares de los primeros N números naturales. Deberá usar estructuras iterativas.

Opción ‘S: Deberá leer dos valores a y b y calcular y mostrar la suma de ambos elevada al cubo

N
utilizando la siguiente fórmula: a3 + 3a2 b + 3ab2 + b3 .


.

AC


Se le pide implementar su solución que coincida con el siguiente diagrama de módulos:

AS

PE
RA

CI
G

L
EN

DE
O
PR

CI

CA
ES
DE

LI
L


S

A
TO

ER

CA
EN

EN

D
AM

DA

Nota: al menos un subprograma debe tener dos parámetros por referencia como mínimo.
S
ND

SI

Caso de prueba 1
DI

ER
FU

Ingrese la opción: S
TU

Ingrese los números para evaluar la suma de cubos: 4 6


IV

El cubo de la sumatoria a través de la fórmula para 4 y 6 es 1000


ES

UN

Caso de prueba 2
IA

Ingrese la opción: P
IC

Ingrese la cantidad de números a evaluar: 5


La sumatoria de los primeros 5 números pares es 30 y de los primeros 5 números impares es 25
IF
NT

Caso de prueba 3
PO

Ingrese la opción: P
Ingrese la cantidad de números a evaluar: 20
La sumatoria de los primeros 20 números pares es 420 y de los primeros 20 números impares es 400
Capítulo 2: Ejercicios propuestos 91

Caso de prueba 4

Ingrese la opción: S
Ingrese los números para evaluar la suma de cubos: 15 22
El cubo de la sumatoria a través de la fórmula para 15 y 22 es 50653

2.3.27. Números capicúas (adaptado del laboratorio 3 del ciclo 2021-1)

Pese a la cantidad de idiomas que existe para lograr la comunicación entre distintos países y culturas, existe
un lenguaje que es universal y es a través de las matemáticas, específicamente de los números. A lo largo
del tiempo, distintos científicos fueron descubriendo distintos tipos de números, entre ellos se encuentran los
capicúas.

N

La palabra capicúa proviene del catalán cap i cua y significa “cabeza y cola” y se refiere a cualquier cadena
de caracteres o número que se lee de igual manera de izquierda a derecha o de derecha a izquierda.

AC


Si hablamos de número capicúa, se puede afirmar que todos los números de base 10 con un dígito {0, 1, 2,

M
3, 4, 5, 6, 7, 8, 9} son capicúas.

AS

PE
RA
Se le pide implementar un programa en lenguaje C que, dados tres números ingresados por el usuario,

CI
permita evaluar si son capicúas. La implementación deberá validar que los datos ingresados sean de 5 cifras,
G

L
EN
caso contrario, deberá enviar un mensaje de error: “Los números ingresados no son válidos”

DE
O

Luego de obtener si los números son o no capicúa, deberá enviar un mensaje si solo alguno de ellos lo es y
PR

CI
otro mensaje si es que los tres son a la vez de acuerdo a lo indicado en los casos de prueba.

CA
ES
DE

Se le pide implementar su solución que coincida con el siguiente diagrama de módulos:

LI
L


S

A
TO

ER

CA
EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV

Nota: al menos un subprograma debe tener al menos dos parámetros por referencia.
ES

UN

Caso de prueba 1
IA

Ingrese los tres números a evaluar de 5 cifras: 23432 58085 94949


Los tres números son capicúas
IC
IF

Caso de prueba 2
NT

Ingrese los tres números a evaluar de 5 cifras: 60706 76547 98841


PO

Solo el número 60706 es capicúa

Caso de prueba 3

Ingrese los tres números a evaluar de 5 cifras: 46564 78187 34202


Los números 46564 y 78187 son capicúas
Capítulo 2: Ejercicios propuestos 92

Caso de prueba 4

Ingrese los tres números a evaluar de 5 cifras: 89012 54366 38983


Solo el número 38983 es capicúa

Caso de prueba 5

Ingrese los tres números a evaluar de 5 cifras: 23451 134529 4664


Los números ingresados no son válidos

2.3.28. Números narcisista (adaptado del laboratorio 3 del ciclo 2021-1)

N
Encontramos número en gran parte de nuestras actividades y hoy en día son fundamentales para explicar


distintos comportamientos. Los números más antiguos fueron usados por los chinos y posteriormente fueron
adaptados por los japoneses.

AC


Para implementar el sistema de numeración se identificó que existan símbolos para los números del 1 al 9 y

M
para las decenas, centenas y millares. Los chinos escribían verticalmente y leían de arriba abajo y así existen

AS

PE
distintas maneras de identificarlos.
RA

CI
Pueden realizarse múltiples combinaciones entre ellos y así identificar distintos tipos de números. Por ejem-
G

L
plo: los números primos, compuestos, narcisista entre otros.

EN

DE
O

Se le pide implementar un programa en lenguaje C que permita evaluar y mostrar si el número ingresado
PR

CI
por el usuario es un número narcisista. Se dice que un número es narcisista cuando se cumple que el número

CA
es igual a la suma de los números formados por cada dígito elevado a la cantidad de dígitos del número. Por
ES
DE

ejemplo, 153 es un número narcisista de 3 dígitos, ya que 13 + 53 + 33 = 153

LI
L

Para ello solicitará el número a evaluar y deberá validar que el número ingresado sea positivo y tenga de

S

tres a seis dígitos, caso contrario, deberá enviar un mensaje de error: “El número ingresado no es positivo y/o
TO

ER

no tiene de 3 a 6 dígitos.”
CA
EN

EN

Se le pide implementar su solución que coincida con el siguiente diagrama de módulos:


D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN
IA
IC
IF

Nota: El subprograma “Validar si un número es narcisista” debe utilizar estructuras iterativas con entrada
controlada y por contador.
NT

Caso de prueba 1
PO

Ingrese un número que tenga de tres a seis dígitos: 153


El número 153 es narcisista.
Capítulo 2: Ejercicios propuestos 93

Caso de prueba 2

Ingrese un número que tenga de tres a seis dígitos: 1547


El número 1547 no es narcisista.

Caso de prueba 3

Ingrese un número que tenga de tres a seis dígitos: 84


El número ingresado no es positivo y/o no tiene de 3 a 6 dígitos.

Caso de prueba 4

Ingrese un número que tenga de tres a seis dígitos: 54748


El número 54748 es narcisista.

N

AC
2.3.29. Números primos y abundantes (adaptado del laboratorio 3 del ciclo 2021-


1)

AS

PE
RA
A lo largo de los años, los científicos han ido descubriendo algunas peculiaridades entre los números. En

CI
base a ello, se han ido creando tipos de números. Dentro de todos los tipos de números que existen, cada uno
G

L
EN
tiene características particulares si cumple algunas condiciones.

DE
O

Se le pide elaborar un programa en lenguaje C que permita evaluar si un grupo de números son de un
PR

CI
determinado tipo. Para ello, el usuario ingresará una opción y tres números, dependiendo de la acción, su

CA
programa realizará alguna acción. Asuma que siempre se ingresa una opción correcta.
ES
DE

LI
L

Opción ‘#’: Deberá evaluar y mostrar si los números son primos o no.

S

A
TO

ER

Opción ‘ %’: Deberá evaluar y mostrar si al menos uno de los números es abundante. Un número
CA

abundante si cumple que la suma de sus divisores sin contar al mismo número, es mayor que el propio
EN

EN

número. Por ejemplo: el número 12 tiene como divisores {1,2,3,4,6} y se cumple que dicha suma es mayor
que 12, por lo tanto, es abundante.
D
AM

DA
S

.
ND

SI

Se le pide implementar su solución que coincida con el siguiente diagrama de módulos:


DI

ER
FU

TU

IV
ES

UN
IA
IC
IF
NT
PO

Nota: al menos un subprograma debe tener dos parámetros por referencia como mínimo.
Capítulo 2: Ejercicios propuestos 94

Caso de prueba 1

Ingrese la opción: #
Ingrese los números a evaluar: 45 37 99
Evaluación del número 45 si es primo (1 si es verdadero y 0 si es falso) = 0
Evaluación del número 37 si es primo (1 si es verdadero y 0 si es falso) = 1
Evaluación del número 99 si es primo (1 si es verdadero y 0 si es falso) = 0

Caso de prueba 2

Ingrese la opción: %
Ingrese los números a evaluar: 9 12 100
Al menos uno de los números ingresados es abundante (1 si es verdadero y 0 si es falso) = 1

N

Caso de prueba 3

AC
Ingrese la opción: #


Ingrese los números a evaluar: 31 83 47

AS
Evaluación del número 31 si es primo (1 si es verdadero y 0 si es falso) = 1

PE
RA
Evaluación del número 83 si es primo (1 si es verdadero y 0 si es falso) = 1

CI
Evaluación del número 47 si es primo (1 si es verdadero y 0 si es falso) = 1
G

L
EN

DE
O

Caso de prueba 4
PR

CI

CA
Ingrese la opción: %
ES
DE

Ingrese los números a evaluar: 99 15 77

LI
Al menos uno de los números ingresados es abundante (1 si es verdadero y 0 si es falso) = 0
L


S

A
TO

ER

CA

2.3.30. Operaciones matemáticas (adaptado del laboratorio 3 del ciclo 2021-1)


EN

EN

A lo largo del tiempo, los científicos han ido descubriendo que los números pueden agruparse de distintas
AM

maneras y a través de ellos se pueden realizar muchas operaciones que permiten obtener resultados.
DA
S

Se le pide elaborar un programa en lenguaje C que permita evaluar determinadas operaciones dependiendo
ND

SI

de lo que el usuario desee. Para ello, el usuario ingresará una opción, y dependiendo de ella, solicitará algunos
DI

ER

datos para poder realizar la operación. Asuma que siempre se ingresa una opción correcta.
FU

TU

IV

Opción ‘A’: Deberá leer la cantidad N de números a evaluar y calcular y mostrar la suma de cubos de
ES

UN

los N primeros números naturales. Deberá usar una estructura iterativa.


Opción ‘B: Deberá leer una cantidad de números que se evaluará. Luego, leerá cada número de tres cifras
IA

y finalmente obtendrá el menor y mayor de los números ingresados. Asuma que los números ingresados
son de tres cifras.
IC
IF

. Se le pide implementar su solución que coincida con el siguiente diagrama de módulos:


NT

Nota: al menos un subprograma debe tener dos parámetros por referencia como mínimo.
PO
Capítulo 2: Ejercicios propuestos 95

Caso de prueba 1

N
Ingrese la opción: B


Ingrese la cantidad de números a evaluar: 7
Ingrese el número 1 a evaluar de tres dígitos: 890

AC
Ingrese el número 2 a evaluar de tres dígitos: 237


M
Ingrese el número 3 a evaluar de tres dígitos: 100

AS
Ingrese el número 4 a evaluar de tres dígitos: 890

PE
Ingrese el número 5 a evaluar de tres dígitos: 456 RA

CI
Ingrese el número 6 a evaluar de tres dígitos: 999
G

L
EN
Ingrese el número 7 a evaluar de tres dígitos: 232

DE
O

De la lista de 7 números, el número menor es 100 y el número mayor es 999


PR

CI

CA
Caso de prueba 2
ES
DE

LI
Ingrese la opción: A
L


S

Ingrese la cantidad de números a evaluar: 5


TO

ER

La sumatoria de cubos de los 5 números es: 225


CA
EN

EN

Caso de prueba 3
D
AM

Ingrese la opción: A
DA

Ingrese la cantidad de números a evaluar: 20


S
ND

La sumatoria de cubos de los 20 números es: 44100


O

SI
DI

ER
FU

Caso de prueba 4
TU

IV

Ingrese la opción: B
ES

UN

Ingrese la cantidad de números a evaluar: 4


Ingrese el número 1 a evaluar de tres dígitos: 456
Ingrese el número 2 a evaluar de tres dígitos: 789
IA

Ingrese el número 3 a evaluar de tres dígitos: 122


IC

Ingrese el número 4 a evaluar de tres dígitos: 390


De la lista de 4 números, el número menor es 122 y el número mayor es 789
IF
NT
PO
Capítulo 2: Ejercicios propuestos 96

2.4. Área bajo la curva - Riemman y Simpson (adaptado del labo-


ratorio 5 del ciclo 2021-2)
Una suma de Riemann es una aproximación del área bajo la curva al dividirla en varios rectángulos dentro
de un rango [a,b] (ver figura 1). Podemos aproximar el área bajo la curva al dividirla en varios rectángulos del
mismo ancho donde la altura de cada rectángulo es igual al valor de la función en el extremo izquierdo de su
base.

N

AC


M

AS

PE
RA

CI
G

L
EN

DE
O
PR

CI

CA
ES
DE

Figura 2.31: Ilustración de las sumas de Riemann (tomado de: https://www.lifeder.com/suma-de-riemann/)

LI
L


S

Finalmente para calcular el área utilizando las sumas de Riemann, debe tener en cuenta lo siguiente:
TO

ER

CA
EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN

Figura 2.32: Fórmula para calcular el área en un intervalo [a,b] con n subintervalos utilizando sumas de
IA

Riemann (tomado de: https://www.lifeder.com/suma-de-riemann/)


IC
IF

La regla o método de Simpson (nombrada así en honor de Thomas Simpson) es un método de integración
numérica que se utiliza para obtener la aproximación de una integral en el rango [a,b] (ver figura 3). El método
NT

utilizado para la regla de Simpson aproxima los subintervalos mediante polinomios de segundo grado cuya área
es la que calculamos y sumamos.
PO
Capítulo 2: Ejercicios propuestos 97

Figura 2.33: La función f (x) (azul) es aproximada por una función cuadrática P (x) (rojo) (tomado de:
https://es.wikipedia.org/wiki/Reglad eS impson)

N

Existen variantes de la regla de Simpson para calcular el área bajo la curva dentro de un intervalo [a,b] y

AC
una de ellas es la regla de Simpson 3/8 compuesta.


Para calcular el área bajo la curva utilizando la regla de Simpson 3/8 compuesta se divide el intervalo [a,b]

AS
en n subintervalos iguales (n debe ser múltiplo de 3) de manera que xi = a + ih, donde h = (b − a)/n es la

PE
longitud de cada intervalo para i = 0, 1, ..., n RA

CI
G
Luego de realizar todo el proceso matemático, la fórmula es la siguiente:

L
EN

DE
O
PR

CI

CA
ES
DE

LI
L


S

A
TO

ER

Figura 2.34: Fórmula para calcular el área bajo la curva f (x) mediante la regla de Simpson 3/8 compuesta
CA
EN

EN

Se le pide implementar un programa en lenguaje C que permita al usuario ingresar la letra “R” o “T”
D
AM

(también podría ingresar la letra en minúscula) para elegir uno de los métodos para calcular el área bajo una
G

DA

curva de la forma:
S
ND

SI
DI

Ax3 + Bx2 + Cx + D
ER
FU

TU

IV

Si ingresa la opción “R” o “r” deberá calcular el área utilizando la Suma de Riemann.
ES

UN

Si ingresa la opción “T” o “t” deberá calcular el área utilizando el la regla de Simpson 3/8 compuesta.
IA

El programa debe solicitar al usuario ingresar lo siguiente:


IC

Los coeficientes A, B, C y D.
IF

El rango del intervalo inferior y superior.


NT

La cantidad de subintervalos (n) en los que se dividirá el área que deseamos calcular.
PO

El programa debe mostrar mensajes específicos ante las siguientes situaciones:

Al ingresar la opción debe verificar que sea “R” o “T” (también podría ingresar la letra en minúscula).
En caso no se cumpla, se deberá emitir el siguiente mensaje “La opción ingresada no es correcta” y el
programa debe terminar.
Capítulo 2: Ejercicios propuestos 98

Debe validar que el rango inferior del intervalo es menor que el rango superior del intervalo, caso contrario
mostrar el mensaje “El valor del límite inferior no puede ser mayor que el superior”.
Debe validar que la cantidad de subintervalos (n) sea mayor que 0, caso contrario mostrar el mensaje
“El valor de n debe ser un número mayor que 0”.
Para el caso de la regla de Simpson 3/8 compuesta, debe validar que la cantidad de subintervalos (n)
sea un número múltiplo de 3, caso contrario mostrar el mensaje “Para utilizar la regla de Simpson 3/8
compuesta n debe ser múltiplo de 3”.

Debe implementar por lo menos los siguientes módulos:

Un módulo que lea los coeficientes A, B, C y D que el usuario ingrese.


Un módulo que lea el rango inferior y superior del intervalo y el valor del subintervalo.

N

Un módulo que calcule el área mediante la suma de Riemann.

AC
Un módulo que calcule el área mediante la regla de Simpson 3/8 compuesta.


M

AS
Caso de prueba 1

PE
RA

CI
Ingrese la opción con la que desea calcular el área de la función:
G

L
EN
Suma de Riemann (R o r)

DE
O

Regla de Simpson 3/8 compuesta (T o t)


PR

p CI

CA
La opción ingresada no es correcta
ES
DE

LI
Caso de prueba 2
L


S

A
TO

Ingrese la opción con la que desea calcular el área de la función:


ER

CA

Suma de Riemann (R o r)
EN

Regla de Simpson 3/8 compuesta (T o t)


EN

r
D
AM

Ingrese los coeficientes de la función (Ax3 + Bx2 + Cx+ D):


G

DA

1 -6 11 -6
S

Ingrese el límite inferior y superior del intervalo:


ND

SI

31
DI

ER

Ingrese la cantidad de subintervalos (n):


FU

TU

10
IV

El valor del límite inferior no puede ser mayor que el superior


ES

UN

Caso de prueba 3
IA

Ingrese la opción con la que desea calcular el área de la función:


IC

Suma de Riemann (R o r)
Regla de Simpson 3/8 compuesta (T o t)
IF

t
NT

Ingrese los coeficientes de la función (Ax3 + Bx2 + Cx+ D):


1 5 -3.4 1
PO

Ingrese el límite inferior y superior del intervalo:


0 10
Ingrese la cantidad de subintervalos (n):
-4
El valor de n debe ser un número mayor que 0
Capítulo 2: Ejercicios propuestos 99

Caso de prueba 4

Ingrese la opción con la que desea calcular el área de la función:


Suma de Riemann (R o r)
Regla de Simpson 3/8 compuesta (T o t)
R
Ingrese los coeficientes de la función (Ax3 + Bx2 + Cx+ D):
1 -6 11 -6
Ingrese el límite inferior y superior del intervalo:
1.3 1.8
Ingrese la cantidad de subintervalos (n):
10000
El área calculando mediante las sumas de Riemann es: 0.165379

N
Caso de prueba 5


Ingrese la opción con la que desea calcular el área de la función:

AC
Suma de Riemann (R o r)


Regla de Simpson 3/8 compuesta (T o t)

AS
t

PE
Ingrese los coeficientes de la función (Ax3 + Bx2 + Cx+ D): RA

CI
4500
G

L
EN
Ingrese el limite inferior y superior del intervalo:

DE
O

15
PR

Ingrese la cantidad de subintervalos (n): CI

CA
14
ES
DE

Para utilizar la regla de Simpson 3/8 compuesta n debe ser múltiplo de 3.

LI
L


S

Caso de prueba 6
TO

ER

CA

Ingrese la opción con la que desea calcular el área de la función:


EN

EN

Suma de Riemann (R o r)
Regla de Simpson 3/8 compuesta (T o t)
D
AM

t
DA

Ingrese los coeficientes de la función (Ax3 + Bx2 + Cx+ D):


S
ND

1 5 -3.4 1
O

SI

Ingrese el limite inferior y superior del intervalo:


DI

ER
FU

0 10
TU

Ingrese la cantidad de subintervalos (n):


IV

-4
ES

UN

El valor de n debe ser un número mayor que 0

Caso de prueba 7
IA
IC

Ingrese la opción con la que desea calcular el área de la función:


Suma de Riemann (R o r)
IF

Regla de Simpson 3/8 compuesta (T o t)


NT

T
Ingrese los coeficientes de la función (Ax3 + Bx2 + Cx+ D):
PO

3 -8.5 7 0
Ingrese el limite inferior y superior del intervalo:
02
Ingrese la cantidad de subintervalos (n):
561
El área calculando mediante la regla de Simpson 3/8 compuesta es: 3.333333
Capítulo 2: Ejercicios propuestos 100

2.5. Área bajo la curva - Simpson y método del trapecio (adaptado


del laboratorio 5 del ciclo 2021-2)
La regla o método de Simpson (nombrada así en honor de Thomas Simpson) es un método de integración
numérica que se utiliza para obtener la aproximación de una integral en el rango [a,b]. El método utilizado
para la regla de Simpson aproxima los subintervalos mediante polinomios de segundo grado cuya área es la
que calculamos y sumamos.

N

AC


M

AS

PE
RA

CI
Figura 2.35: La función f (x) (azul) es aproximada por una función cuadrática P (x) (rojo) (tomado de:
G

L
EN
https://es.wikipedia.org/wiki/Reglad eS impson)

DE
O
PR

CI
Existen variantes de la regla de Simpson para calcular el área bajo la curva dentro de un intervalo [a,b] y

CA
una de ellas es la regla de Simpson 1/3 compuesta.
ES
DE

LI
Para el caso de la Regla de Simpson 1/3 compuesta se divide el intervalo [a,b] en n subintervalos iguales
L

(n debe ser un número par) de manera que xj = a + jh, donde h = (b − a)/n es la longitud de cada intervalo

S

A
TO

para j = 0, 1, ..., n
ER

CA

Luego de realizar todo el proceso matemático, la fórmula es la siguiente:


EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV

Figura 2.36: Fórmula para calcular el área bajo la curva f (x) mediante la regla de Simpson 1/3 compuesta
ES

UN

En el método del trapecio compuesto se puede aproximar el área bajo la curva utilizando varios trapecios
dentro de un rango [a,b] (ver figura 3), el área bajo la curva se puede aproximar por el de la función lineal que
IA

pasa a través de los puntos (a,f (a)) y (b,f (b)) para cada uno de los trapecios. El área bajo la curva será igual
IC

a la suma de las áreas de los trapecios bajo la gráfica.


IF
NT
PO
Capítulo 2: Ejercicios propuestos 101

Figura 2.37: Ilustración del método del trapecio compuesto (tomado de:
https://es.wikipedia.org/wiki/Reglad elt rapecio)

Luego de realizar todo el proceso matemático, la fórmula es la siguiente:

N

AC


M

AS
Figura 2.38: Fórmula para calcular el área en un intervalo [a,b] con n subintervalos utilizando el método del

PE
RA
trapecio compuesto (tomado de: https://es.wikipedia.org/wiki/Reglad elt rapecio)

CI
G

L
EN
Se le pide implementar un programa en lenguaje C que permita al usuario ingresar la letra “G” o “S”

DE
O

(también podría ingresar la letra en minúscula) para elegir uno de los métodos para calcular el área bajo una
PR

curva de la forma: CI

CA
ES
DE

Ax3 + Bx2 + Cx + D

LI
L


S

Si ingresa la opción “G” o “g” deberá calcular el área utilizando la regla de Simpson 1/3 compuesta.
TO

ER

CA

Si ingresa la opción “S” o “s” deberá calcular el área utilizando el método del trapecio compuesto.
EN

EN

El programa debe solicitar al usuario ingresar lo siguiente:


AM

DA
S

Los coeficientes A, B, C y D.
ND

SI
DI

El rango del intervalo inferior y superior.


ER
FU

TU

La cantidad de subintervalos (n) en los que se dividirá el área que deseamos calcular.
IV
ES

UN

El programa debe mostrar mensajes específicos ante las siguientes situaciones:

Al ingresar la opción debe verificar que sea G” o “S” (también podría ingresar la letra en minúscula).
IA

En caso no se cumpla, se deberá emitir el siguiente mensaje “La opción ingresada no es correcta” y el
IC

programa debe terminar.


IF

Debe validar que el rango inferior del intervalo es menor que el rango superior del intervalo, caso contrario
NT

mostrar el mensaje “El valor del límite inferior no puede ser mayor que el superior”.
Debe validar que la cantidad de subintervalos (n) sea mayor que 0, caso contrario mostrar el mensaje
PO

“El valor de n debe ser un número mayor que 0”.


Para el caso de la regla de Simpson 1/3 compuesta, debe validar que la cantidad de subintervalos (n)
sea un número par, caso contrario mostrar el mensaje “Para utilizar la regla de Simpson 1/3 compuesta
n debe ser par”.

Debe implementar por lo menos los siguientes módulos:


Capítulo 2: Ejercicios propuestos 102

Un módulo que lea los coeficientes A, B, C y D que el usuario ingrese.


Un módulo que lea el rango inferior y superior del intervalo y el valor del subintervalo.
Un módulo que calcule el área mediante la regla de Simpson 1/3 compuesta.
Un módulo que calcule el área mediante el método del trapecio compuesto.

Caso de prueba 1

Ingrese la opción con la que desea calcular el área de la función:


Regla de Simpson 1/3 compuesta (G o g)
Método del trapecio compuesto (S o s)
p
La opción ingresada no es correcta

N

Caso de prueba 2

AC
Ingrese la opción con la que desea calcular el área de la función:


M
Regla de Simpson 1/3 compuesta (G o g)

AS
Método del trapecio compuesto (S o s)

PE
G RA

CI
Ingrese los coeficientes de la función (Ax3 + Bx2 + Cx+ D):
G

L
EN
3 6 -4 0

DE
O

Ingrese el limite inferior y superior del intervalo:


PR

3 20 CI

CA
Ingrese la cantidad de subintervalos (n):
ES
DE

21

LI
Para utilizar la regla de Simpson 1/3 compuesta, n debe ser múltiplo de 2.
L


S

A
TO

ER

Caso de prueba 3
CA
EN

EN

Ingrese la opción con la que desea calcular el área de la función:


Regla de Simpson 1/3 compuesta (G o g)
D
AM

Método del trapecio compuesto (S o s)


DA

s
S
ND

Ingrese los coeficientes de la función (Ax3 + Bx2 + Cx+ D):


O

SI

1 5 -3.4 1
DI

ER
FU

Ingrese el limite inferior y superior del intervalo:


TU

0 10
IV

Ingrese la cantidad de subintervalos (n):


ES

UN

-4
El valor de n debe ser un número mayor que 0
IA

Caso de prueba 4
IC

Ingrese la opción con la que desea calcular el área de la función:


IF

Regla de Simpson 1/3 compuesta (G o g)


NT

Método del trapecio compuesto (S o s)


G
PO

Ingrese los coeficientes de la función (Ax3 + Bx2 + Cx+ D):


1 -6 11 -6 Ingrese el límite inferior y superior del intervalo:
31
Ingrese la cantidad de subintervalos (n):
10
El valor del límite inferior no puede ser mayor que el superior
Capítulo 2: Ejercicios propuestos 103

Caso de prueba 5

Ingrese la opción con la que desea calcular el área de la función:


Regla de Simpson 1/3 compuesta (G o g)
Método del trapecio compuesto (S o s)
S
Ingrese los coeficientes de la función (Ax3 + Bx2 + Cx+ D):
3 -8.5 7 0
Ingrese el limite inferior y superior del intervalo:
02
Ingrese la cantidad de subintervalos (n):
999
El área calculando mediante el método del Trapecio compuesto es: 3.325390

N
Caso de prueba 6


AC
Ingrese la opción con la que desea calcular el área de la función:


Regla de Simpson 1/3 compuesta (G o g)

M
Método del trapecio compuesto (S o s)

AS

PE
g
Ingrese los coeficientes de la función: RA

CI
1 -6 11 -6
G

L
EN
Ingrese el límite inferior y superior del intervalo:

DE
O

1.3 1.8
PR

Ingrese la cantidad de subintervalos (n): CI

CA
10000
ES
DE

El área calculando mediante la regla de Simpson 1/3 compuesta es: 0.165390

LI
L


S

Caso de prueba 7
TO

ER

CA

Ingrese la opción con la que desea calcular el área de la función:


EN

EN

Regla de Simpson 1/3 compuesta (G o g)


Método del trapecio compuesto (S o s)
D
AM

g
DA

Ingrese los coeficientes de la función (Ax3 + Bx2 + Cx+ D):


S
ND

3 -8.5 7 0
SI
DI

Ingrese el limite inferior y superior del intervalo:


ER
FU

02
TU

Ingrese la cantidad de subintervalos (n):


IV

560
ES

UN

El área calculando mediante la regla de Simpson 1/3 compuesta es: 3.328694


IA
IC

2.6. Circunferencias y rectas (adaptado del laboratorio 5 del ciclo


IF

2021-2)
NT

Se le pide implementar un programa en lenguaje C que permita al usuario ingresar la letra “A” o “B”
PO

(también podría ingresar la letra en minúscula) para elegir entre: determinar si dos circunferencias se cruzan
o determinar la relación entre dos rectas.
Si ingresa la opción “A” o “a” debe determinar si dos circunferencias de la forma x2 + y 2 + Cx + Dy + E = 0
se cruzan; además, debe realizar lo siguiente:

Solicitar al usuario la cantidad de veces (n) que desea realizar el cálculo (n debe encontrarse entre 1 y
20).
Capítulo 2: Ejercicios propuestos 104

Por cada iteración deberá ingresar los coeficientes C, D y E de dos circunferencias de la forma x2 + y 2 +
Cx + Dy + E = 0.
Por cada iteración deberá mostrar si las circunferencias se cruzan o no.

Al finalizar debe mostrar cuantas veces en total se identificaron circunferencias que se cruzan, también
debe mostrar para cada cuadrante la cantidad de puntos que son centro de una circunferencia.

Para ello deberá implementar, por lo menos, los siguientes módulos:

Un módulo que lea los coeficientes C, D y E.


Un módulo que permita obtener el centro de la circunferencia y el radio.
Un módulo que permita calcular la distancia entre dos puntos.

N

Un módulo que cuente los puntos que se encuentren en un determinado cuadrante.

AC
Si ingresa la opción “B” o “b” debe determinar si las rectas ingresadas son coincidentes, paralelas o secantes;


para ello debe realizar lo siguiente:

AS

PE
RA
Solicitar a usuario la cantidad de veces (n) que desea realizar el cálculo (n debe encontrarse entre 1 y

CI
20).
G

L
EN

DE
O

Por cada iteración deberá ingresar los coeficientes de dos rectas de la forma Ax + By + C = 0.
PR

CI
Por cada iteración deberá mostrar si las rectas son coincidentes, paralelas o secantes.

CA
ES
DE

LI
Deberá implementar, por lo menos, los siguientes módulos:
L


S

A
TO

Un módulo que lea los coeficientes A, B y C.


ER

CA

Un módulo que determine e imprima si las rectas son coincidentes, paralelas o secantes.
EN

EN

El programa debe mostrar mensajes específicos ante las siguientes situaciones:


AM

DA
S

Al ingresar la opción debe verificar que sea “A” o “B” (también podría ingresar la letra en minúscula). En
ND

SI

caso no se cumpla, se deberá emitir el siguiente mensaje “Error en la opción ingresada.” y el programa
DI

ER

debe terminar.
FU

TU

IV

Debe validar que el usuario ingrese datos correctos según corresponda y mostrar el mensaje de error
respectivo (ver los casos de prueba).
ES

UN

Recordar que:
IA

Para determinar si dos circunferencias se cruzan debe tener en cuenta lo siguiente:


IC

Si la suma de los radios de las circunferencias es mayor o igual que la distancia entre sus centros,
IF

entonces las circunferencias se cruzan; es decir:


NT

radio1 + radio2 >= distancia


PO

donde:

• radio1 es el radio de la circunferencia 1.


• radio2 es el radio de la circunferencia 2.
• distancia es la distancia entre los centros de las circunferencias.
Capítulo 2: Ejercicios propuestos 105

Recordar que:

Para calcular el radio (r) y el centro de la circunferencia (h,k) debe tener en cuenta que:
• h = −(C/2)
• k = −(D/2)

• r = h2 + k 2 − E

La distancia entre dos puntos se calcula mediante:


p
distancia = (x2 − x1 )2 + (y2 − y1 )2

Dadas dos rectas: A1 x + B1 y + C1 = 0 y A2 x + B2 y + C2 = 0

N
Son coincidentes si:


A1 B1 C1

AC
= =
A2 B2 C2


M
Son paralelas si:

AS

PE
A1 B1 C1 RA

CI
= ̸=
G
A2 B2 C2

L
EN

DE
O

Son secantes si:


PR

CI

CA
A1 B1
̸=
ES
DE

A2 B2

LI
L

Para conocer en qué cuadrante del plano cartesiano se encuentra el punto P (x, y) debe trabajar

S

de la siguiente manera:
TO

ER

CA

• Cuadrante 1:
EN

EN

x>0yy>0
D
AM

• Cuadrante 2:
DA
S

x<0yy>0
ND

SI

• Cuadrante 3:
DI

ER
FU

x<0yy<0
TU

IV

• Cuadrante 4:
ES

UN

x>0yy<0
IA
IC
IF
NT
PO

Figura 2.39: Plano cartesiano


Capítulo 2: Ejercicios propuestos 106

Nota:
En el problema planteado, para comparar dos números decimales considere que son iguales si la dife-
rencia entre ellos es menor o igual a un margen de error establecido de 0,01.

Caso de prueba 1

Ingrese la opcion que desea calcular:


Circunferencias que se intersectan (A o a)
Relación entre rectas (B o b)
R
Error en la opción ingresada.

N
Caso de prueba 2


AC
Ingrese la opcion que desea calcular:
Circunferencias que se intersectan (A o a)


M
Relación entre rectas (B o b)

AS
a

PE
RA
Ingrese la cantidad de veces que desea validar si 2 circunferencias de la forma x2 + y 2 + Cx + Dy + E

CI
se cruzan:21
G

L
EN
El valor de n no se encuentra dentro del rango solicitado.

DE
O
PR

Caso de prueba 3
CI

CA
ES
DE

Ingrese la opcion que desea calcular:

LI
Circunferencias que se cruzan (A o a)
L


S

Relación entre rectas (B o b)


TO

ER

a
CA

Ingrese la cantidad de veces que desea validar si 2 circunferencias de la forma x2 + y 2 + Cx + Dy + E


EN

EN

se cruzan:1
Ingrese los coeficientes C, D y E de la circunferencia 1 (x2 + y 2 + Cx + Dy + E):2 -8 13
D
AM

Ingrese los coeficientes C, D y E de la circunferencia 2 (x2 + y 2 + Cx + Dy + E):-40 8 79


DA

Las circunferencias no se cruzan.


S
ND

Se encontraron 0 cruces entre circunferencias.


O

SI

En el cuadrante 1 se encontraron 0 puntos que son centro de una circunferencia


DI

ER
FU

En el cuadrante 2 se encontraron 1 puntos que son centro de una circunferencia


TU

En el cuadrante 3 se encontraron 0 puntos que son centro de una circunferencia


IV

En el cuadrante 4 se encontraron 1 puntos que son centro de una circunferencia


ES

UN
IA
IC
IF
NT
PO
Capítulo 2: Ejercicios propuestos 107

Caso de prueba 4

Ingrese la opcion que desea calcular:


Circunferencias que se cruzan (A o a)
Relación entre rectas (B o b)
A
Ingrese la cantidad de veces que desea validar si 2 circunferencias de la forma x2 + y 2 + Cx + Dy + E
se cruzan:3
Ingrese los coeficientes C, D y E de la circunferencia 1 (x2 + y 2 + Cx + Dy + E):10 5 -1
Ingrese los coeficientes C, D y E de la circunferencia 2 (x2 + y 2 + Cx + Dy + E):4 -5 1
Las circunferencias se cruzan
Ingrese los coeficientes C, D y E de la circunferencia 2 (x2 + y 2 + Cx + Dy + E):5 1 -2
Ingrese los coeficientes C, D y E de la circunferencia 3 (x2 + y 2 + Cx + Dy + E):2 -8 7
Las circunferencias se cruzan

N
Ingrese los coeficientes C, D y E de la circunferencia 3 (x2 + y 2 + Cx + Dy + E):1 2 3


Ingrese los coeficientes C, D y E de la circunferencia 4 (x2 + y 2 + Cx + Dy + E):3 -4 1
Las circunferencias se cruzan

AC
Se encontraron 3 cruces entre circunferencias.


En el cuadrante 1 se encontraron 0 puntos que son centro de una circunferencia

AS
En el cuadrante 2 se encontraron 3 puntos que son centro de una circunferencia

PE
RA
En el cuadrante 3 se encontraron 3 puntos que son centro de una circunferencia

CI
En el cuadrante 4 se encontraron 0 puntos que son centro de una circunferencia
G

L
EN

DE
O

Caso de prueba 5
PR

CI

CA
Ingrese la opcion que desea calcular:
ES
DE

Circunferencias que se intersectan (A o a)

LI
Relación entre rectas (B o b)
L


b
S

A
TO

Ingrese la cantidad de veces que desea validar si 2 rectas son secantes, paralelas o coincidentes: 31
ER

CA

El valor de n no se encuentra dentro del rango solicitado.


EN

EN

Caso de prueba 6
AM

DA

Ingrese la opcion que desea calcular:


S
ND

Circunferencias que se intersectan (A o a)


SI

Relación entre rectas (B o b)


DI

ER
FU

b
TU

Ingrese la cantidad de veces que desea validar si 2 rectas son secantes, paralelas o coincidentes: 1
IV

Ingrese los coeficientes A, B y C de la recta 1 (Ax + By + C = 0):62.82 62.94 -11202.84


ES

UN

Ingrese los coeficientes A, B y C de la recta 2 (Ax + By + C = 0):-23.42 -30.74 7445.18


Las rectas son secantes.
IA

Caso de prueba 7
IC

Ingrese la opcion que desea calcular:


IF

Circunferencias que se intersectan (A o a)


NT

Relación entre rectas (B o b)


b
PO

Ingrese la cantidad de veces que desea validar si 2 rectas son secantes, paralelas o coincidentes: 1
Ingrese los coeficientes A, B y C de la recta 1 (Ax + By + C = 0):67.82 62.94 -30776.65
Ingrese los coeficientes A, B y C de la recta 2 (Ax + By + C = 0):67.82 62.94 -47813.37
Las rectas son paralelas.
Capítulo 2: Ejercicios propuestos 108

Caso de prueba 8

Ingrese la opcion que desea calcular:


Circunferencias que se intersectan (A o a)
Relación entre rectas (B o b)
b
Ingrese la cantidad de veces que desea validar si 2 rectas son secantes, paralelas o coincidentes: 1
Ingrese los coeficientes A, B y C de la recta 1 (Ax + By + C = 0):1 -2 3
Ingrese los coeficientes A, B y C de la recta 2 (Ax + By + C = 0):-2 4 -6
Las rectas son coincidentes.

Caso de prueba 9

Ingrese la opcion que desea calcular:

N
Circunferencias que se intersectan (A o a)


Relación entre rectas (B o b)
b

AC
Ingrese la cantidad de veces que desea validar si 2 rectas son secantes, paralelas o coincidentes: 3


Ingrese los coeficientes A, B y C de la recta 1 (Ax + By + C = 0):2 3 -1

AS
Ingrese los coeficientes A, B y C de la recta 2 (Ax + By + C = 0):4 6 -5

PE
Las rectas son paralelas. RA

CI
Ingrese los coeficientes A, B y C de la recta 2 (Ax + By + C = 0):1 -2 3
G

L
EN
Ingrese los coeficientes A, B y C de la recta 3 (Ax + By + C = 0):-2 4 -6

DE
O

Las rectas son coincidentes.


PR

CI
Ingrese los coeficientes A, B y C de la recta 3 (Ax + By + C = 0):15 6 -1

CA
Ingrese los coeficientes A, B y C de la recta 4 (Ax + By + C = 0):54 -13 6
ES
DE

Las rectas son secantes.

LI
L


S

A
TO

ER

2.7. Sumatorias (adaptado del laboratorio 5 del ciclo 2021-2)


CA
EN

EN

Se le pide implementar un programa en lenguaje C que permita al usuario ingresar la letra “A” o “B” (también
D
AM

podría ingresar la letra en minúscula) para elegir una opción de cálculo de una determinada sumatoria:
DA

Si ingresa la opción “A” o “a” debe realizar el siguiente cálculo:


S
ND

SI
DI

ER
FU

TU

IV
ES

UN

Figura 2.40: Sumatoria 1


IA

Donde:
IC

La cantidad de términos está representada por la n cuyo rango es 1 <= n <= 10.
IF
NT

a es un número entre 2 y 6.
b es un número entre 1 y 5
PO

a es mayor que b
S es el resultado de sumar los n términos.

Si ingresa la opción “B” o “b” debe realizar el siguiente cálculo:


Capítulo 2: Ejercicios propuestos 109

Figura 2.41: Sumatoria 2

Donde:

La cantidad de términos está representada por la n cuyo rango es 1 <= n <= 20.
a es un número entre 1 y 3.

N

S es el resultado de sumar los n términos.

AC
El programa debe mostrar mensajes específicos ante las siguientes situaciones:


M

AS
Al ingresar la opción debe verificar que sea “A” o “B” (también podría ingresar la letra en minúscula). En

PE
RA
caso no se cumpla, se deberá emitir el siguiente mensaje “Error en la opción ingresada.” y el programa

CI
debe terminar.
G

L
EN

DE
O

Debe validar que el usuario ingrese datos correctos para las variables n, a, b según corresponda y mostrar
PR

el mensaje de error respectivo (ver los casos de prueba). CI

CA
ES
DE

Debe implementar por lo menos los siguientes módulos:

LI
L

Un módulo que solicite ingresar los datos para las variables a, b y n para el caso de la sumatoria 1.

S

A
TO

ER

Un módulo que solicite ingresar los datos para las variables a y n para el caso de la sumatoria 2.
CA
EN

EN

Un módulo que calcule la sumatoria 1.


D
AM

Un módulo que calcule la sumatoria 2.


G

DA
S
ND

Caso de prueba 1
O

SI
DI

ER

Ingrese la sumatoria que desea calcular:


FU

TU

Sumatoria 1 (A o a)
IV

Sumatoria 2 (B o b)
ES

s
UN

Error en la opción ingresada.


IA

Caso de prueba 2
IC

Ingrese la sumatoria que desea calcular:


IF

Sumatoria 1 (A o a)
NT

Sumatoria 2 (B o b)
A
PO

Ingrese el valor n:
15
La cantidad de términos debe estar entre 1 y 10.
Capítulo 2: Ejercicios propuestos 110

Caso de prueba 3

Ingrese la sumatoria que desea calcular:


Sumatoria 1 (A o a)
Sumatoria 2 (B o b)
A
Ingrese el valor n:
7
Ingrese los valores de a y b:
14
El valor de a no se encuentra en el rango solicitado y no es mayor que b.

Caso de prueba 4

N
Ingrese la sumatoria que desea calcular:


Sumatoria 1 (A o a)

AC
Sumatoria 2 (B o b)


a

M
Ingrese el valor n:

AS

PE
8
Ingrese los valores de a y b: RA

CI
26
G

L
EN
El valor de b no se encuentra en el rango solicitado y a no es mayor que b.

DE
O
PR

Caso de prueba 5
CI

CA
ES
DE

Ingrese la sumatoria que desea calcular:

LI
L

Sumatoria 1 (A o a) TÓ
S

Sumatoria 2 (B o b) a
TO

ER

Ingrese el valor n:
CA

5
EN

EN

Ingrese los valores de a y b:


72
D
AM

el valor de a no se encuentra dentro del rango solicitado.


DA
S
ND

SI

Caso de prueba 6
DI

ER
FU

Ingrese la sumatoria que desea calcular:


TU

Sumatoria 1 (A o a)
IV

Sumatoria 2 (B o b)
ES

UN

A
Ingrese el valor n:
5
IA

Ingrese los valores de a y b:


IC

34
el valor de a debe ser mayor que el de b.
IF
NT
PO
Capítulo 2: Ejercicios propuestos 111

Caso de prueba 7

Ingrese la sumatoria que desea calcular:


Sumatoria 1 (A o a)
Sumatoria 2 (B o b)
b
Ingrese los valores de a y n:
2 21
La cantidad de términos debe estar entre 1 y 20.

Caso de prueba 8

Ingrese la sumatoria que desea calcular:


Sumatoria 1 (A o a)

N
Sumatoria 2 (B o b)


b

AC
Ingrese los valores de a y n:


30 30

M
El valor de a y n no se encuentran dentro del rango solicitado.

AS

PE
RA

CI
Caso de prueba 9
G

L
EN

DE
O

Ingrese la sumatoria que desea calcular:


PR

Sumatoria 1 (A o a)
Sumatoria 2 (B o b)
CI

CA
B
ES
DE

Ingrese los valores de a y n:

LI
L

4 19 TÓ
S

El valor de a no se encuentra en el rango solicitado.


TO

ER

CA

Caso de prueba 10
EN

EN

Ingrese la sumatoria que desea calcular:


AM

DA

Sumatoria 1 (A o a)
Sumatoria 2 (B o b)
S
ND

SI

A
DI

Ingrese el valor n:
ER
FU

5
TU

Ingrese los valores de a y b:


IV

21
ES

UN

El resultado de la sumatoria “A” es: 24.042614


IA

Caso de prueba 11
IC

Ingrese la sumatoria que desea calcular:


Sumatoria 1 (A o a)
IF

Sumatoria 2 (B o b)
NT

a
Ingrese el valor n:
PO

7
Ingrese los valores de a y b:
31
El resultado de la sumatoria “a” es: 1584.123262
Capítulo 2: Ejercicios propuestos 112

Caso de prueba 12

Ingrese la sumatoria que desea calcular:


Sumatoria 1 (A o a)
Sumatoria 2 (B o b)
b
Ingrese los valores de a y n:
2 10
El resultado de la sumatoria “b” es: 221.832707

N

AC


M

AS

PE
RA

CI
G

L
EN

DE
O
PR

CI

CA
ES
DE

LI
L


S

A
TO

ER

CA
EN

EN

D
AM

DA
S
ND

SI
DI

ER
FU

TU

IV
ES

UN
IA
IC
IF
NT
PO
113

Bibliografía

[1] A. Bansal. Introduction to programming languages. CRC Press, Boca Raton, FL, 2014.

N
[2] Y. Chen. Introduction to Programming Languages Programming in C C++ Scheme Prolog C# and Soa.


Kendall Hunt Pub Co, City, 2016.

AC
[3] P. Deitel and H. Deitel. C how to program : with an introduction to C++. Pearson, Boston, 2016.


M
[4] B. Gottfried. Schaum’s Outline of Programming with C. McGraw-Hill, 2 edition, 1996.

AS

PE
RA
[5] M. A. Jackson. Principles of program design. Academic Press, London New York, 1975.

CI
G

L
[6] Y. Kanetkar. Let Us C. BPB Publications, 5th edition, 2004.

EN

DE
O

[7] B. Kernighan and D. Ritchie. The C programming language. Prentice Hall, Englewood Cliffs, N.J, 1988.
PR

CI

CA
[8] S. Kochan. Programming in C. Developer’s Library/Sams Pub, Indianapolis, Ind, 2005.
ES
DE

[9] K. Louden and K. Lambert. Programming languages : principles and practice. Course Technology/Cengage

LI
L

Learning, Boston, MA, 2012.



S

A
TO

[10] U. A. Metropolitana. Canek: Portal de matemática. urlhttp://canek.uam.mx/.


ER

CA

[11] G. Myers. Reliable software through composite design. Petrocelli/Charter, New York, 1975.
EN

EN

[12] H. Schildt. C, the complete reference. Osborne/McGraw-Hill, Berkeley, 2000.


AM

DA

[13] T. Schultz. C and the 8051. Prentice Hall PTR, Upper Saddle River, N.J, 1998.
S
ND

SI

[14] R. Sebesta. Concepts of programming languages. Pearson Education Limited, Harlow, 2016.
DI

ER
FU

[15] R. Serway. Física para ciencias e ingeniería 1 (10a. ed). CENGAGE Learning, Ciudad de México, 2018.
TU

IV

[16] E. Yourdon. Modern structured analysis. Prentice-Hall International, Englewood Cliffs, N.J. London,
ES

1989.
UN
IA
IC
IF
NT
PO

También podría gustarte