Documentos de Académico
Documentos de Profesional
Documentos de Cultura
EX1 2020-2
.MARCO TEÓRICO
ALGORITMIA
Pseudocódigo
El pseudocódigo es un lenguaje de especificación o descripción de algoritmos. Utiliza un conjunto de
palabras reservadas en lenguaje natural para representar cada paso que tendrá el algoritmo. Al desarrollar
el pseudocódigo, uno se concentra en la lógica del programa y en las estructuras de control que se
utilizarán. Posteriormente, se tendrá que traducir a un lenguaje de programación.
Ejemplo:
El siguiente algoritmo, en pseudocódigo, tiene una estructura secuencial y permite ingresar por teclado el
radio de una esfera. Luego calcula y muestra el área y el volumen de la esfera usando las siguientes
fórmulas:
2 4 3
area=4 π r volumen= π r
3
1
Algoritmo calculosEsfera
Escribir "Ingrese el radio de la esfera: "
Leer radio
area <- 4*3.141592654*radio^2
volumen <- (4/3)*3.141592654*radio^3
Escribir "El area de la esfera es: ", area
Escribir "El volumen de la esfera es: ", volumen
FinAlgoritmo
Ejemplo:
El siguiente algoritmo (en diagrama de flujo) tiene una estructura secuencial y permite ingresar por teclado
la velocidad inicial en m/s con la que una piedra es lanzada al agua desde un puente, y el tiempo (en
segundos) que tarda en llegar al agua. Luego calcula y muestra la velocidad con la que la piedra llega al
agua y la altura del puente utilizando las siguientes fórmulas:
1 2
v f =¿+v 0 h=v 0 t+ g t
2
Consideramos que la gravedad es g=9.8 m/s 2
ESTRUCTURAS SELECTIVAS
Las estructuras selectivas permiten controlar las instrucciones de un programa que requieran que se cumpla
una condición para poder ejecutarse. Las selectivas son “excluyentes”, es decir, si se cumple una condición
se ejecutará un conjunto de instrucciones mientras que el resto no.
En este tipo de estructuras se usan los operadores de comparación:
2
I. Estructura de selección simple: SI
La estructura de selección “Si” es utilizada para realizar una de dos acciones distintas en base a una
condición.
#include <stdio.h>
#include <math.h>
/* log(x) calcula ln(x)
log10(x) calcula logaritmo de x en base 10 */
int main(){
double base, numero, logaritmo;
3
#include <stdio.h>
int main(){
int a, b, c;
printf("Ingrese los lados de un triangulo: ");
scanf("%d %d %d", &a, &b, &c);
if (a+b>c && a+c>b && b+c>a)
pritnf("Los lados forman un triangulo.\n");
return 0;
}
Ejemplo: Año bisiesto
¿Cómo se puede determinar si un año es bisiesto? Un año bisiesto si el número que lo representa es divisible
entre 4, salvo que sea año secular -último de cada siglo, terminado en 00-, en cuyo caso también ha de ser
divisible entre 400.
Si tenemos las siguientes preposiciones:
p: El número que representa al año es divisible entre 4
q: El número que representa al año es divisible entre 100
r: El número que representa al año es divisible entre 400
La expresión lógica que permite determinar si un año es bisiesto es p ∧(∼ q ∨r ). En el
programa se puede apreciar la implementación de esta expresión lógica en ANSI C.
#include <stdio.h>
int main(){
int anio, p, q, r;
printf("Ingrese al anio: ");
scanf("%d", &anio);
p = (anio % 4 == 0);
q = (anio % 100 == 0);
r = (anio % 400 == 0);
if (p && (!q || r))
printf("El anio es bisiesto\n");
return 0;
}
II. Estructura de selección doble: SI - SINO
La estructura de selección “SI - SINO” es utilizada para realizar unas acciones en el caso de que una
condición sea verdadera y otras acciones cuando la condición sea falsa.
Ejemplo:
Supongamos que tenemos que traducir la siguiente situación:
Debemos imprimir “Aprobado” si el alumno obtiene una nota mayor o igual a 11, pero debemos imprimir
“Jalado” si es que su nota no es mayor o igual a 11.
En pseudocódigo será:
Si (nota_alumno >= 11) Entonces
Escribir “Aprobado”
Sino
Escribir “Jalado”
Fin Si
En este caso, tenemos que:
La condición “la nota del alumno es mayor o igual a 11” tiene dos posibilidades: es
verdadera o es falsa.
Si la condición es verdadera:
Se ejecuta la acción de Escribir la palabra “Aprobado” y el programa continúa al siguiente
enunciado.
Si la condición es falsa:
Se ejecuta la acción de Escribir la palabra “Jalado” y el programa continúa al siguiente enunciado
4
En Diagrama de flujo será:
En lenguaje C será:
if ( nota_alumno >= 11 )
printf( ”Aprobado\n" );
else
printf( ”Jalado\n" );
ESTRUCTURAS ITERATIVAS
Las estructuras iterativas sirven para repetir un conjunto de instrucciones mientras una determinada
condición se cumpla.
Estas estructuras pueden ser de 2 tipos:
1. Ciclo iterativo con entrada controlada.
2. Ciclo iterativo con salida controlada.
En el ciclo iterativo con entrada controlada, la evaluación de la condición del ciclo se realiza antes de la
ejecución del conjunto de instrucciones. Dependiendo de la condición, puede que el conjunto de
instrucciones no se ejecute.
Los ciclos que usaremos aquí serán los que tengan entrada controlada.
El ciclo iterativo con entrada controlada se puede implementar en el ANSI C mediante la instrucción while.
Siempre que se realiza un ciclo iterativo con entrada controlada debe de:
1. Inicializarse la(s) variable(s) de control de flujo.
2. Elaborar una condición para el control del flujo.
3. Actualizar la(s) variable(s) de control para asegurarse que en algún momento la condición de control
de flujo falle y se termine el bucle.
La inicialización de la(s) variable(s) de control de flujo se suele realizar antes de iniciar el ciclo y la
actualización se suele realizar en la última instrucción del ciclo.
inicialización de variable(s) de control;
while (condición de control de flujo) {
conjunto de instrucciones;
actualización de variable(s) de control
}
5
Estructuras iterativas más usadas:
PROGRAMACIÓN MODULAR
Para modularizar programas en el lenguaje C se utilizan las funciones, debido a que no incluye a los
procedimientos 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.
6
FUNCIONES
I. En Pseudocódigo:
Una función se representa de la siguiente manera:
Ejemplo:
Funcion area <- calcArea(radio)
area <- 4*3.141592654*radio^2
FinFuncion
Ejemplo: La siguiente función calcula el volumen de una esfera y la pasa por referencia mediante la
variable volumen, mientras que el radio no se altera y es un parámetro por valor.
Funcion calcVol(radio, volumen Por Referencia)
volumen <- (4/3)*3.141592654*radio^3
FinFuncion
II. En Lenguaje C:
La representación de una función en el lenguaje C se puede apreciar en el programa:
7
Ejemplo: El prototipo para una función que calcula el factorial de un número podría ser:
int calcularFactorial ( int numero );
2. Definición de funciones:
Corresponde a la implementación de una función luego de su declaración. Su sintaxis es:
8
Observación importante:
En estos ejemplos, se puede notar que: Si la función tiene como tipo de dato void, la invocación
consiste en colocar sólo el nombre de la función con sus parámetros (si los tuviera); mientras que si el
tipo de dato es int o char o double, entonces se debe invocar asignando su valor a una variable (en el
primer ejemplo, la variable era fact).
#include <stdio.h>
void intercambia(int *p, int *q); /* Prototipo o declaración de la función */
int main() {
int a, b;
a = 666;
b = 999;
printf(“a y b antes del intercambio: %d %d\n”, a, b);
intercambiar(&a, &b); /* aquí se invoca a la función intercambiar */
printf(“a y b luego del intercambio: %d %d\n”, a, b);
return 0;
}
Observaciones importantes:
1. Un parámetro por referencia se usa cuando se necesita que la función devuelva varios valores
que resultan de los cálculos que hará.
2. Cuando se trabaja con un parámetro por referencia se debe tomar en cuenta que:
Al momento de invocar a la función, el parámetro por referencia va acompañado con el
símbolo & delante de su nombre.
Al momento de declarar e implementar la función, el parámetro por referencia va
acompañado de un *.
3. Cuando se va a calcular el parámetro por referencia, dentro de la función, siempre va precedido
con el carácter *.
4. Cuando se va a leer el parámetro por referencia, usando scanf, se debe colocar sólo el nombre
del parámetro por referencia SIN colocar & ni *.
9
Ejemplo:
Se desea calcular el número e usando una función. Para esto, se debe tener en cuenta que el valor de e se
logra mediante la siguiente serie:
∞
Para implementar el cálculo de e, el usuario ingresará el número de iteraciones que deberán realizarse.
Solución:
#include <stdio.h>
int main() {
double valorNumeroE;
int numIteraciones;
printf(“Ingrese la cantidad de iteraciones: ”);
scanf(“%d”, &numIteraciones);
10
FUNCIONES MÁS USADAS
1. Leer datos:
void leerDatos(int *a, double *b) {
printf(“Ingrese a y b: ”);
scanf(“%d %lf”, a, b);
}
11
5. Cambio de base: de un número en base 10 a un número de base b (2<b<=9):
int cambioBase (int num, int base){
int nuevoNum, copia, cifra, potencia;
nuevoNum = 0;
copia = num;
potencia = 1; /* inicializa la potencia en 10^0 */
while (copia > 0){
cifra = copia % base;
/* almacena en nuevoNum el numero en la base deseada */
/* la cifra extraida la va colocando delante de la anterior */
nuevoNum = nuevoNum + cifra*potencia;
potencia = potencia * 10; /* actualiza la potencia a 10^n */
copia = copia / base;
}
return nuevoNum;
}
Pseudocódigo
1. (EX1 2019-0)
Se pueden clasificar a los triángulos de acuerdo a la magnitud de sus lados tal como se muestra a
continuación:
Tipos de triángulo según sus lados
(4)
area= √ a2 , a : lado
Equilátero Tiene los 3 lados iguales 3
(√ )
Isósceles Tiene dos lados iguales y el
b2 a 2 ,
tercero distinto area= b a 2− a : lados iguales , b : lado distinto
4 2
12
Se le pide escribir un algoritmo que permita ingresar la magnitud de los lados del triángulo. Si todos los
datos ingresados son válidos, debe determinar el tipo de triángulo según el criterio de clasificación y calcular
el área de acuerdo a la fórmula.
2. (EX1 2019-1)
Se pide implemente el pseudocódigo o diagrama de flujo que permita calcular el valor de la derivada o de la
integral de una ecuación: El usuario deberá ingresar el carácter D o I para especificar el tipo de operación a
realizar.
En el caso de la integral: debe leer una función de la forma: k x n +b
donde el usuario ingresa los valores para k, x, n, b y una constante C y se muestre el valor de la
integral resultante. Por ejemplo, si el usuario ingresa I 0 3 0 4 1 se debe mostrar el valor 13.0 como
resultado.
Las reglas de integración inmediatas a considerar en su solución se muestran más adelante.
Recuerde que debe mostrar mensajes adecuados para solicitar datos al usuario, considerando mayúsculas y
minúsculas, mostrar las salidas, posibles mensajes de error o advertencia.
Reglas de integración Reglas de Derivación
Descripción Función Integral Descripción Función Derivada
Integral b bx +C Derivada de una función lineal kx +b k
Integral n n+1 Derivada de una potencia n n−1
x , para n ≠ 1 x kx kn x
potencial +C
n+1
Integral 1 ln |x|+C Derivada de una raíz cuadrada √x 1
logarítmica x 2√ x
13
3. (EX1 2019-2)
En física, se conoce como refracción al cambio de dirección y velocidad que experimenta una onda al pasar
de un medio a otro. Mientras que la reflexión se define como el cambio de dirección que experimenta una
onda que, al entrar en contacto con la superficie de separación entre dos medios cambiantes, regresa al
medio donde se originó. En la figura 1 se puede apreciar un ejemplo de refracción y reflexión de una onda
que pasa por el agua hacia el aire. En la parte izquierda se aprecia un rayo refractado y en la parte derecha
se aprecia un rayo reflejado.
Cada medio, como por ejemplo el agua y el aire, posee una medida denominada índice de refracción que
permite saber cuánto se reduce la velocidad de la onda dentro de dicho medio. En la figura 1 el índice de
refracción del aire está representados por la variable n2 y el índice de refracción del agua por la variable n1 .
En óptica, cuando un rayo de luz atraviesa un medio que posee un índice de refracción menor, se puede
producir lo que se denomina reflexión interna total. La reflexión interna total se da cuando el rayo de luz
no es capaz de atravesar la superficie entre ambos medios reflejándose completamente.
El ángulo crítico θc es el menor ángulo en el cual se produce la reflexión interna total. Esto quiere decir que
si el ángulo de incidencia de la luz ( θ1 en la figura 1) es mayor que el ángulo crítico ( θc en la figura 1),
ocurre la reflexión interna total. En la figura 1 se puede apreciar el ángulo crítico en la parte del medio. El
Para calcular el ángulo de la luz refractado, se puede utilizar la ley de Snell de la refracción. Esta ley fue
descubierta experimentalmente por Willebrod Snell en el año 1621 y dice que los ángulos de incidencia y
refracción vienen relacionados por n1 × sen ( θ1 ) =n2 × sen ( θ2 ).
Se pide elaborar un algoritmo expresado en pseudocódigo (sin utilizar módulos) que dado un índice de
refracción de un medio n1, un índice de refracción de un medio n2 y un ángulo de incidencia θ1 en grados
sexagesimales de una onda de luz que se encuentra en el medio 1, determine si ocurre reflexión interna
total o si ocurre refracción.
En esta pregunta deberá validar los datos de entrada y mostrar mensajes específicos ante las siguientes
situaciones:
El índice de refracción de la luz en el vacío es 1 por lo que es el menor valor que puede tener este
índice.
En caso el usuario ingrese un valor menor a éste, se deberá emitir el siguiente mensaje “Los índices
de refracción deben ser números mayores o iguales a uno”.
En caso el usuario ingrese un ángulo de incidencia menor o igual a cero, se deberá emitir el
siguiente mensaje: “El ángulo de incidencia debe ser mayor que cero”.
En caso el usuario ingrese un ángulo de incidencia mayor o igual a 90 grados, se deberá emitir el
siguiente mensaje: “El ángulo de incidencia debe ser menor que 90”.
14
Para que ocurra la reflexión interna total debe cumplirse que el índice de refracción del medio 1 sea
mayor que el índice de refracción del medio 2 ( n1 >n 2). En cado el usuario ingrese valores de índices
de refracción que no cumplan esta condición, se deberá emitir el siguiente mensaje: “El índice del
medio 1 debe ser mayor que el medio 2”.
4. (EX1 2020-0)
En geometría analítica, las líneas rectas en un plano pueden ser expresadas mediante una ecuación del tipo
y=mx+b . En esta ecuación, m es denominada la pendiente de la recta y está relacionada con la
inclinación que toma la recta respecto a un par de ejes que definen el plano. La pendiente de la recta que
pasa por los puntos P( x 1 , y 1 ) y Q(x 2 , y 2 ) se puede calcular de la siguiente manera:
m=( y 2− y 1 )/( x 2−x 1)
Se sabe que 2 rectas son paralelas si sus pendientes son iguales y son perpendiculares si la multiplicación de
sus pendientes es igual a -1.
En el plano cartesiano, un rectángulo puede ser formado por 4 puntos que son A(x a , y a ), B( x b , y b ),
C ( x c , y c ) y D( x d , y d ). Podríamos considerar que se trata de un rectángulo si las rectas formadas por los
puntos AB y CD sin paralelas entre sí y las rectas formadas por los puntos BC y DA también son paralelas
15
entre sí. Además las rectas formadas por AB y BC deben ser perpendiculares, al igual que las rectas
formadas por los puntos AD y CD. Considerar que los casos a evaluar son aquellos rectángulos cuyos lados
no son paralelos a los ejes X o Y.
Se le pide elaborar un algoritmo expresado en pseudocódigo que, dados los puntos A, B, C y D, permita
evaluar si los puntos ingresados forman un rectángulo, considerando sólo las rectas paralelas y
perpendiculares que se pueden formar con ellos, de acuerdo a lo indicado en el enunciado. Además se
deben validar todas las condiciones descritas anteriormente.
A continuación se presentan algunos ejemplos de ejecución del algoritmo:
5. (EX1-2019-1)
Sea b un número real positivo no nulo distinto de 1, y x otro número positivo no nulo. Se denomina
logaritmo del número x en la base b, al exponente L a que debe elevarse la base b para obtener dicho
número x. El logaritmo se expresa de la siguiente manera log b x y
L
log b x=L ↔ b =x . Por ejemplo,
log 5 625=4 ya que 54 =625 . El logaritmo es la operación inversa a la exponenciación.
En el logaritmo natural, se toma como base b al número e, cuyo valor es aproximadamente 2.718281828.
Como todos los logaritmos, el dominio de esta función viene dado por ¿ 0 ,+ ∞¿ y el rango por ¿−∞ ,+ ∞ ¿ .
Cuando x tiende a 0, el límite de esta función es −∞ .
Se pide que elabore un programa en ANSI C que permita calcular el valor del logaritmo natural de un
determinado número usando la siguiente serie:
16
( )
∞ 2 n+ 1
1 x−1
ln ( x )=2 ∑
n=0 2n+ 1 x +1
El programa deberá:
Solicitar el valor de x.
Solicitar la cantidad de términos n que usará en la serie.
Si el valor de x es igual a 0, deberá imprimirse -inf que corresponde con −∞ .
Si el valor de x es menor que 0, deberá imprimirse nan que es un acrónimo para Not a Number.
Si el valor de x es mayor que cero, deberá imprimirse el valor del logaritmo natural usando la serie
antes mencionada sumando los n primeros términos.
17
6. (EX2 2019-0)
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 1665, Jhon Wallis descubrió una productoria
π
(conocida como el producto de Wallis) que aproxima el valor de .
2
Utilizando el producto de Wallis se puede calcular fácilmente el valor de π . A medida que se incrementa el
número de términos de la productoria, se obtienen valores de π con menor error de aproximación. Se le
pide que desarrolle un programa en ANSI C que permita imprimir el valor aproximado de π usando el
producto de Wallis con 200 términos y 20000 términos.
A continuación sigue un ejemplo de una posible salida de este programa para los primeros números:
7. (EX1 2018-1)
El sistema hexadecimal HEX es el sistema de numeración posicional que tiene como base el 16. Su uso
actual está muy vinculado a la informática ya que las operaciones del CPU suelen usar el byte como unidad
básica de memoria pues un byte, representa 28 valores (0 – 255), y esto puede representarse como
28=24 × 24 =16 ×16=162=1∗162 +0∗161 +0∗160,
Que equivale al número 100 en base 16 (100 16), es decir, tres dígitos hexadecimales en lugar de los 8 dígitos
que hubiéramos usado en base 2. En principio, dado que el sistema usual de numeración es de base decimal
y, por ello, sólo se dispone de diez dígitos, se adoptó la convención de usar las seis primeras letras del
alfabeto latino para suplir los dígitos que faltan. El conjunto de símbolos es el siguiente:
S=0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
Se debe notar que A=10, B=11, C=12, D=13, E=14 y F=15. Asimismo, existe el sistema de numeración
octal y utiliza los dígitos del 0 al 7. En informática a veces la numeración octal es utilizada en lugar de la
hexadecimal, debido a la ventaja de que no es requerido utilizar símbolos diferentes a los dígitos. Como en
cualquier sistema de numeración posicional, el valor numérico de cada dígito es alterado dependiendo de su
posición en la cadena de dígitos, quedando multiplicado por una cierta potencia de la base del sistema.
Por ejemplo:
A0E316 = 10*163 + 0*162 + 14*161 + 3*160 = 4118710
101102 = 1*24 + 0*23 + 1*22 + 1*21 + 0*20 = 2210
1203718 = 1*85 + 2*84 + 0*83 + 7*82 + 1*80 = 4120910
18
Se le pide elaborar un programa en ANSI que permita transformar un número que se encuentra en
cualquier base a la base 10. Para esto deberá leer la base en donde se encuentra el número así como la
cantidad de dígito del número a leer. Luego deberá leer cada dígito del número empezando por el dígito
menos significativo.
A continuación, se presentan algunos ejemplos de ejecución:
Ejemplo 1:
Ingrese base: 16
Ingrese cantidad de dígitos: 4
Ingrese el dígito1: 3
Ingrese el dígito2: E
Ingrese el dígito3: 0
Ingrese el dígito4: A
El número en base 10 es 41187
Ejemplo 2:
Ingrese base: 16
Ingrese cantidad de dígitos: 4
Ingrese el dígito1: 3
Ingrese el dígito2: e
Ingrese el dígito3: 0
Ingrese el dígito4: a
El número en base 10 es 41187
Ejemplo 3:
Ingrese base: 2
Ingrese cantidad de dígitos: 5
Ingrese el dígito1: 0
Ingrese el dígito2: 1
Ingrese el dígito3: 1
Ingrese el dígito4: 0
Ingrese el dígito5: 1
El número en base 10 es 22
Ejemplo 4:
Ingrese base: 8
Ingrese cantidad de dígitos: 6
Ingrese el dígito1: 1
Ingrese el dígito2: 7
Ingrese el dígito3: 3
Ingrese el dígito4: 0
Ingrese el dígito5: 2
Ingrese el dígito6: 1
El número en base 10 es 41209
Ejemplo 5:
Ingrese base: 8
19
Ingrese cantidad de dígitos: 4
Ingrese el dígito1: 2
Ingrese el dígito2: -
Los dígitos deben estar en el rango [A..Z], [a..z], [0..9]
Ejemplo 6:
Ingrese base: 16
Ingrese cantidad de dígitos: 6
Ingrese el dígito1: A
Ingrese el dígito2: 0
Ingrese el dígito3: Z
Ha ingresado un dígito inválido para la base seleccionada
PROGRAMACIÓN MODULAR
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 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 CONVERTIR A BASE 10 los números.
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)):
Realice la lectura del primer número.
Ingrese el primer número:
Realice la lectura del segundo número.
Ingrese el segundo número:
Si la base no es correcta o los números no son válidos, es decir, la cantidad de su cifras no
corresponde a máximo 3 cifras, 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.
Lo siento, error en la base. 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.
Si la base y los números son válidos, se realiza la suma y se muestra el resultado en pantalla.
20
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 valido(int base, int n) //Función que valida si el número n es de máximo 3 cifras y está bien
escrito en la base dada por base.
int suma(int base, int n1, int n2) //Función que suma dos números en la base dada por base.
Se le pide a usted que elabore un programa en ANSI C que, haciendo uso de la programación modular con
21
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 NO ESTÁ PERMITIDO CONVERTIR A BASE 10 los números.
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)):
Realice la lectura del primer número.
Ingrese el primer número:
Realice la lectura del segundo número.
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 su 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. Los posibles mensajes son:
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.
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.
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 base, int n) //Función que valida si el 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.
22
10. (EX1 2018-1)
Los triángulos se pueden clasificar de acuerdo a la magnitud de sus ángulos y de acuerdo a la magnitud de
sus lados tal como se muestra a continuación:
Considere un triángulo como el que se muestra en la figura. Se le pide escribir un algoritmo en lenguaje C
que permita ingresar la magnitud de los lados A y B del triángulo y el ángulo α que forman (en grados
sexagesimales). También se debe ingresar el criterio de clasificación que se utilizará (A: según los ángulos
o L: según los lados). Si todos los datos ingresados son válidos, debe calcular y mostrar la magnitud del
tercer lado del triángulo (lado C) y los dos ángulos restantes ( β y θ ). Así mismo debe determinar el tipo de
triángulo que es según el criterio de clasificación que se haya ingresado (A o L).
Utilice la librería matemática para poder utilizar las funciones sqrt, asin, acos, sin, cos, pow. No obstante,
recuerde que las funciones de esa librería devuelven un tipo particular de datos y que las funciones asin,
acos, sin, cos usan los parámetros en radianes.
Recuerde que:
π
1 ° grado sexagesimal= grados radianes
180
Considere que, si seno de x es igual a y, entonces arcoseno de y es igual a x.
Se le pide desarrollar los siguientes módulos:
Módulo de lectura de datos, que se encargue de leer los lados A y B del triángulo y el ángulo α .
Módulo que calcule el lado C del triángulo.
Módulo que calcule los ángulos β y θ .
Módulo para determinar el tipo de triángulo en base a sus ángulos.
Módulo para determinar el tipo de triángulo en base a sus lados.
Módulo main
23
Para la evaluación se considerará el uso correcto de comentarios, variables descriptivas,
mensajes al usuario y el mensaje de salidas solicitado. De elaborar el diseño en pseudocódigo
la solución propuesta no será considerada.
24
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 ANSI 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:
Ingresar un número: 0
Los números catalanes correspondientes son: 1
Ingresar un número: 4
Los números catalanes correspondientes son: 1, 1, 2, 5, 14
25
10 es deficiente porque sus divisores propios, 1, 2 y 5 suman 8 que es menor que 10.
Un número natural es abundante cuando la suma de sus divisores propios es mayor que él. Por ejemplo:
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:
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.
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:
void leer_datos(int *n) //Función que, mediante el paso de parámetro por referencia, lee el valor de n
ingresado por teclado .
int es_valido(int n) //Función que verifica si el valor de n es mayor que 0 y menor que 30.
int sum_divisores_propios(int n) //Función que retorna la suma de los divisores propios de n.
int es_deficiente(int n, int sum_div_propios) //Función que evalúa si n es deficiente, y recibe como
parámetros, el valor de n y el valor de la suma de divisores propios.
int es_abundante(int n, int sum_div_propios) //Función que evalúa si n es abundante, y recibe como
parámetros, el valor de n y el valor de la suma de divisores propios.
int es_perfecto(int n, int sum_div_propios) //Función que evalúa si n es perfecto, y recibe como
parámetros, el valor de n y el valor de la suma de divisores propios.
int es_semi_perfecto(int n, int sum_div_propios) //Función que evalúa si n es semiperfecto, y recibe
como parámetros, el valor de n y el valor de la suma de divisores propios.
26
14. 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
2 2
4 +9 =97
92 +7 2=130
12 +32 +02=10
12 +02=1
Si n no es feliz, la suma de los cuadrados luego de 8 iteraciones no llegaría a 1. Por ejemplo, 4 es infeliz,
porque luego de 8 iteraciones no llega a 1:
void leer_datos(int *n) //Función que lee el valor de n ingresado por teclado simulando el paso de
parámetro por referencia.
27
int es_feliz(int n) //Función que evalúa si n es feliz o no.
int sum_digits_al_cuadrado(int n) //Función que retorna la suma de los cuadrados de los dígitos de
n.
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.
int es_primo(int n) //Función que evalúa si n es primo.
28