Documente Academic
Documente Profesional
Documente Cultură
mayo de 2018
§Ejercicios Introductorios
1. La siguiente oración no es una proposición.
2. Imagine que una moneda es lanzada 10 veces, la negación a la proposición p : salieron algunas
caras y algunas cruces es:
3. Sean las proposiciones p : hoy es lunes, q: está lloviendo, r: hace calor, la proposición
compuesta ((p ∧ q) ∨ r) ∧ (r ∨ (q ∨ p)) corresponde con la oración:
(a) hoy es lunes o está lloviendo. (b) hoy es lunes o está lloviendo o está haciendo calor.
(c) hoy llueve y es lunes, o hace calor. (d) hoy llueve y hace calor.
(e) hoy llueve.
1
p q r p∧q q∨p (p ∧ q) ∨ r r ∨ (q ∨ p) ((p ∧ q) ∨ r) ∧ (r ∨ (q ∨ p))
v v v v v v v v
v v f v v v v v
v f v f v v v v
v f f f v f v f
f v v f v v v v
f v f f v f v f
f f v f f v v v
f f f f f f f f
(a) Si hoy es un lunes lluvioso o un lunes caluroso entonces hoy es lunes o hace mucho
calor pero extrañamente llueve a cántaros.
(b) Si hoy es un lunes lluvioso o un lunes caluroso entonces hoy es lunes o llueve pero
hace calor.
(c) Si hoy es un lunes lluvioso o un lunes caluroso entonces hoy es un lunes lluvioso o es
un lunes caluroso o es un día lluvioso y caluroso.
(d) Si hoy es un lunes lluvioso o caluroso entonces hoy es lunes o está lloviendo o hace
mucho calor.
(e) Si hoy es un lunes lluvioso caluroso entonces hoy es lunes o llueve pero hace calor.
6. Suponiendo que A, B, C son proposiciones verdaderas y X, Y, Z son proposiciones falsas,
encierre aquellas proposiciones que sean verdaderas.
No
Inicio leer a y b a=0 a←a−1 b←b+1
Si
imprimir b
Fin
2
(a) Las tres estructuras. (b) Secuencia y decisión únicamente.
(c) Solo secuencia. (d) Solo selección. (e) Secuencia y repeti-
ción únicamente.
(a) No tiene ningún sentido. (b) Este algoritmo suma los dos valores ingresados e
imprime la suma. (c) Solo vuelve a imprimir el valor de b.
(d) Este algoritmo hace algo solo si a es cero. (e) Este algoritmo imprime la resta
de los dos valores ingresados.
10. Considere la siguiente función definida por partes donde n es un número entero.
(
3n + 1 si n es impar
t(n) =
n/2 si n es par
Si
Inicio leer n ¿n es par? imprimir 3n + 1
No
imprimir n/2 Fin
11. Suponga que se lee n = 12, ¿Cuál es la salida en pantalla del siguiente algoritmo?
(a) 298 (b) 297 (c) 296 (d) 299 (e) 300
12. En el algoritmo del ejercicio anterior se puede identificar una estructura de repetición:
(a) Mientras (b) Hacer Mientras (c) Para (d) Ninguna de las
anteriores.
3
13. Al suponer que a = 4 y b = 7 la salida en pantalla es:
Inicio
Leer a y b
Imprimir a a=b
Si
No
No
a<b a←a−b
Si Si No
b←b−a
a=b
Final
Inicio
escribir "Cuantas hamburguesas desea freir";
leer n;
si n=1 Entonces
escribir "Freir una hamburguesa en la parrilla";
sino
mientras n>2 Hacer
escribir "Tome dos hamburguesas para freirlas en la parrilla";
finmientras
escribir "freir dos hamburguesas en la parrilla";
finsi
Fin
4
15. El algoritmo del ejercicio anterior no fríe las hamburguesas en el menor tiempo posible,
es decir, existe otra forma de freír todas las hamburguesas en un menor tiempo.
[(p ∧ q) ∨ r] → (p ∨ r)
5
§Estructura Secuencial
1. Escriba un programa que visualice la letra A mediante asteriscos.
5. La cantidad de líneas que se pueden imprimir en un papel depende del tamaño del papel,
el tamaño del punto de cada carácter en una línea, si las líneas están a doble espacio o
espaciado simple, el margen superior e inferior, y los márgenes izquierdo y derecho de el
papel. Suponga que todos los caracteres tienen el mismo tamaño de punto y todas las
líneas son a espacio simple o a doble espacio. Tenga en cuenta que 1 pulgada = 72 puntos.
Además, supongamos que las líneas se imprimen a lo largo del ancho del papel. Por
ejemplo, si la longitud del papel es de 11 pulgadas y el ancho es de 8.5 pulgadas, entonces
la longitud máxima de una línea es 8.5 pulgadas. Escribe un programa que calcula la
cantidad de caracteres en una línea y el número de líneas que se pueden imprimir en un
papel basado en la siguiente información dada por el usuario:
6. El número de día de año es la posición que ocupa este día respecto a los 365 días del año.
Por ejemplo, el 2 de febrero representa la posición 33, por lo tanto el número de día de
año del 2 de febrero es 33. Escriba un programa que reciba el número de día de año e
imprima en pantalla el número de día y el mes correspondiente; así, si alguien ingresa 33
entonces el programa deberá imprimir 2 de febrero.(Asuma que el año a considerar no es
bisiesto.)
8. Escribir un programa que acepte un año escrito en cifras arábigas y visualice el año escrito
en números romanos, dentro del rango 1000 a 2100.
9. Escribir un programa que lea 4 números dados por el usuario y determine la siguiente
información:
6
(f) El número que está más lejos del promedio.
10 Escriba un programa que calcule e imprima f (x), para un número real x ingresado por el
usuario, dado que: (
x3 + 1 x < 0
f (x) =
|x| x≥0
11. Una compañía telefónica cobra a sus usuarios 40 lempiras por derecho a línea y cobra el
número de pulsos según la cantidad de pulsos realizadas, a continuación se presenta la
tarifa de pago por pulso según la cantidad de pulsos realizados por mes:
12. Escriba un programa que determine el tipo de huracán con ayuda de la siguiente tabla.
Para lo anterior considere que un usuario ingresa la velocidad del viento.(Use una estruc-
tura switch).
13. Escriba un programa que determine si tres pares ordenados representan los vértices de
un triángulo isósceles.
§Estructura For
1. Escriba un programa que despliegue en pantalla todos los números pares comprendidos
entre 1 y 50.
2. Calcular todos los números de tres cifras tales que la suma de los cubos de las cifras sea
igual al valor del número.
Tome n = 30.
4. Considere el siguiente conjunto de puntos del plano, C = {(x, y)| 2x2 + y 2 ≤ 10014}. Es-
criba en C++ un programa que cuente el número de pares ordenados (x, y) perteneciente
a C tales que x e y sean números enteros.
7
!
n
6. Escriba un programa que calcule el número combinatorio . La fórmula del número
m
combinatorio se muestra a continuación:
!
n n!
=
m m!(n − m)!
Tome n = 50.
8. Escriba un programa que haga uso de la estructura for para imprimir las siguientes 4
figuras:
* * **
*** * * ****
***** * * ********
******* * * ****************
********* * * ********************************
* * *
*** * * * ***************
***** * * *** *************
******* * * ***** ***********
********* * * ******* *********
* * * ********* *******
*** * * *********** *****
***** * * ************* ***
******* * * *************** *
********* *
√ N
(−1)n (2n)!
xn .
X
x+1 ≈ n
n=0 (1 − 2n)(n!) 4
2
Tome N = 20
§Estructura While
1. Escriba un programa que lea un conjunto de números. Después se debe desplegar en
pantalla el número de datos que son positivos.
8
(a) Primero escoge un número al azar x.
(b) Luego has la siguiente asignación: r = n/x
(c) Reajusta el valor de x a x = (x + r)/2
(d) Repite los pasos (b) y (c) "cuantas veces sea necesario."
Escriba un programa que pida al usuario el número n, el programa deberá repetir los
pasos (b) y (c) hasta que la diferencia entre el nuevo valor de x y el viejo valor de x sea
menor el 1% del viejo valor de x.
4. Escriba un programa donde el usuario ingresa una secuencia de número enteros positivos
que corresponden a las edades de personas. El usuario termina de ingresar las edades
cuando se ingresa un número negativo. El programa debe calcular el promedio de las
edades ingresadas y además debe decir cuál es la mayor edad ingresada.
Modifique su programa para que reciba el siguiente conjunto de edades
{1, 1.1, 1.2, 1.3, 1.4, ..., 2, 2.1, 2.2, 2.3, ..., 99.8, 99.9, 100}
¿Cuál es el promedio de las edades anteriores?
5. La población de un pueblo A es menor que la población del pueblo B. Sin embargo, la
población de la ciudad A está creciendo más rápido que la población de la ciudad B. Es-
criba un programa que solicite al usuario ingresar la población y tasa de crecimiento anual
de cada pueblo. El programa muestra después en cuántos años la población de la ciudad
A será mayor o igual a la población de la ciudad B y las poblaciones de ambas ciudades
en ese momento. (Una muestra de entrada es: Población de Angola es 24,300,000, tasa
de crecimiento anual de Angola 3.52%, la población de China es 1,369,811,000, y la tasa
de crecimiento de anual de china 0.41%.)
6. Escriba un programa que reciba como entrada un número entero positivo, a continuación
el programa deberá calcular cuantos dígitos posee el número ingresado.
7. Escriba un programa que convierta un número natural positivo escrito en base 10 a su
correspondiente representación en base binaria.
8. Escriba un programa que determine si un número natural dado es compuesto o primo.
9. Se llama números triangulares a los obtenidos como suma de los n primeros números
naturales, esto es 1, 1+2, 1+2+3, ... Elabore un programa que calcule el n-ésimo número
triangular.
10. Elabore un programa que determine si un número natural es triangular.
11. Elabore un programa que calcule el máximo común divisor de dos números.
12. Elabore un programa que calcule el mínimo común múltiplo de dos números.
13. Elabore un programa que despliegue la factorización completa de un número natural dado
por el usuario. Ejemplo, si alguien ingresa el número natural 24, entonces el programa
deberá desplegar en pantalla lo siguiente:
24 = 2 × 2 × 2 × 3
9
§Misceláneos
1.
Cf = Ci(1 + r)n
(a) Calcular Cf
(b) Calcular Ci
(c) Calcular r
(d) Calcular n
(e) Salir
Luego el programa solicitará al usuario una de las opciones del menú(a, b, c, d o e). Al
ingresar cualquiera de las 4 primera opciones el usuario estará solicitando calcular el
valor de dicha variable, para ello le solicitará las restantes tres variables involucradas.
Por ejemplo, si el usuario ingresa la opción b entonces se solicitará el valor de Cf , r y
n, con esa información se calculará Ci. Use la estructura de selección switch. *Nota:
Para este programa se deben usar simples operaciones aritméticas, no se permite usar la
librería de matemática.
3.
10
los pares ordenados ingresados. Ingrese la primera abscisa:-1
P endiente, calculará la pendiente de la recta Ingrese la primera ordenada:1
que pasa por esos dos puntos. Ingrese la segunda abscisa:1
T riangulo se imprimirá un mensaje que nos Ingrese la segunda ordenada:1
diga si el triángulo formado por los dos puntos Operaciones
y el origen es escaleno, isósceles o equilátero. 1. Distancia.
A continuación se ve un ejemplo del diálogo 2. Punto medio.
entre el usuario y el programa. 3. Pendiente.
4. Triangulo.
Elija una opcion: 4
El triangulo formado con el origen es
isosceles.
4.
Suponga que en una tienda se venden úni- inmediatamente después de escoger alguna
camente dos tipos de pares de calzados, ten- de las opciones se solicitará el número de za-
nis y botas, los tennis tienen un precio de pato. Luego de haber leído varios pedidos
600 + 4N, donde N representa el número se generará una factura como la siguiente:
de zapato (este número va en un rango de
35 a 48) y las botas tienen un precio de
1000 + 10N donde N tiene el mismo signifi-
Factura
cado que antes. Diseñe un programa que lea
Numero de tennis: 30
el siguiente menú varias veces:
Total tennis: 22800 lps
Tienda de zapatos Numero de botas: 10
1. Tennis Total botas: 14100 lps
2. Botas Impuesto sobre venta: 5535 lps
Ingrese una de las opciones:_ Total a pagar: 42435 lps
7. Elabore un programa en C++ que calcule el seno de un número real x. Para ello sírvase
de la siguiente fórmula truncada:
n
X x2k+1
k x x3 n x
2n+1
sin(x) ≈ (−1) = − + ... + (−1)
k=0 (2k + 1)! 1! 3! (2n + 1)!
11
8 Se pide al usuario cuatro pares ordenados. A continuación se solicita escribir un programa
que determine si estos cuatro puntos forman un paralelogramo.
§Ejercicios de investigación
1. Algoritmo de Luhn Escriba un algoritmo en C++ que verifique si un número de
cuenta de 15 dígitos(incluyendo el número de chequeo) es o no valido según el algoritmo
de chequeo de Luhn.
• Sx = ni=1 xi
P Sx • b = ŷ − mx̂
• x̂ =
• Sy = ni=1 yi
P n nSxy − Sx Sy
• m=
• Sxx = ni=1 x2i
P
nSxx − Sx Sy
Sy
• Sxy = ni=1 yi xi
P
• ŷ =
n
Escriba un algoritmo que reciba n pares ordenados y a continuación calcule los valores de
m y b.
3. Método de regla falsa. Use el método de la regla falsa para encontrar una aproximación
de la raíz de la siguiente ecuación:
x5 + x3 − 4 = 0
5. Números amigos. Escriba un programa que determine si dos número son amigos.(Haga
una prueba con 10744 y 10856)
6. Números sociables. Escriba un programa que determine si cuatro números son socia-
bles.(Haga una prueba con la siguiente lista: 1264460,1547860,1727636,1305184)
12
§Pruebas de escritorio
1. Suponga que en el siguiente programa el usuario ingresa los valores de 23 y 23.1. Realice
la prueba de escritorio correspondiente.
2. Realice una prueba de escritorio para el siguiente programa. Suponga que la entrada de
datos para este programa se da en el siguiente orden: C,t
#include <i o s t r e a m >
#include < s t d l i b . h>
using namespace s t d ;
i nt main ( ) {
char r e s p u e s t a , t i p o ;
double ISV ,TOT, Sub ;
bool i n d i c a d o r a =1;
cout<<" ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗∗ ∗∗ ∗∗ ∗∗ ∗∗ ∗∗ ∗ ∗∗Menu∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗∗ ∗∗ ∗∗ ∗∗∗ ∗∗ "<<e n d l ;
cout<<"Combo A: \ t "<<" 1 b a l e a d a \ t 1 r e f r e s c o \ t 30 l p s "<<e n d l ;
cout<<"Combo B : \ t "<<" 2 b a l e a d a \ t 1 r e f r e s c o \ t 31 l p s "<<e n d l ;
cout<<"Combo C: \ t "<<" 1 pupusa \ t 1 r e f r e s c o \ t 40 l p s "<<e n d l ;
cout<<"Combo D: \ t "<<" 2 pupusa \ t 1 r e f r e s c o \ t 41 l p s "<<e n d l ;
cout<<"Combo E : \ t "<<" 1 t a c o \ t \ t 1 r e f r e s c o \ t 52 l p s "<<e n d l ;
cout<<" I n g r e s a r Combo : " ;
c i n >>r e s p u e s t a ;
switch ( r e s p u e s t a ) {
case ’ a ’ : Sub=30;
break ;
case ’ b ’ : Sub=31;
break ;
case ’ c ’ : Sub=40;
break ;
13
case ’ d ’ : Sub =41;
break ;
case ’ e ’ : Sub =52;
break ;
case ’A ’ : Sub =30;
break ;
case ’B ’ : Sub =31;
break ;
case ’C ’ : Sub =40;
break ;
case ’D ’ : Sub =41;
break ;
case ’E ’ : Sub =52;
break ;
default : cout<<" Usted no ha e s c o g i d o ningun combo . \n " ;
i n d i c a d o r a =0;
}
i f ( indicadora ){
cout<<" E f e c t i v o : \ t M"<<e n d l ;
cout<<" T a r j e t a : \ t T"<<e n d l ;
cout<<" I n g r e s a r t i p o de pago : " ;
c i n >>t i p o ;
system ( " c l e a r " ) ; /∗ syst em ( " c l s " ) ∗/
cout<<" ∗ ∗ ∗ ∗ ∗ ∗ ∗∗∗∗FACTURA∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗∗∗∗ "<<e n d l ;
ISV =0.15∗ Sub ;
TOT=ISV+Sub ;
i f ( t i p o== ’M’ | | t i p o== ’m’ )
cout<<" Forma de pago : \ t E f e c t i v o \n " ;
else{
cout<<" Forma de pago : \ t T a r j e t a \n " ;
double d e s c u e n t o =0.01∗ Sub ;
cout<<" Descuento : \ t "<<descuento <<" \n " ;
TOT=TOT−d e s c u e n t o ;
}
cout<<" S u b t o t a l : \ t "<<Sub<<e n d l ;
cout<<" ISV : \ t \ t "<<ISV<<e n d l ;
cout<<"TOTAL: \ t \ t "<<TOT<<e n d l ;
cout<<" ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗∗ ∗∗ ∗ ∗∗ ∗∗ ∗∗ ∗∗ ∗∗ "<<e n d l ;
}
return 0 ;
}
3. Realice una prueba de escritorio del siguiente programa. Entrada de datos: 10,
#include <i o s t r e a m >
using namespace s t d ;
i nt main ( ) {
char C e n t i n e l a= ’ S ’ ;
i nt x ;
while ( C e n t i n e l a != ’ s ’ | | C e n t i n e l a != ’ S ’ ) {
cout<<" I n g r e s e un numero e n t e r o : " ;
c i n >>x ;
i nt i =1;
while ( i<=x ) {
i f ( x==i ∗ i ) {
cout<<" x e s un cuadrado "<<e n d l ;
break ; }
i ++;}
cout<<" S i d e s e a s a l i r d e l c i c l o p r e s i o n e l a l e t r a s , s i n o p r e s i o n e
cualquier otra t e c l a : " ;
c i n >>C e n t i n e l a ; }
return 0 ;
}
14
4. Muestre cual es la salida en pantalla del siguiente programa.
15