Está en la página 1de 15

Programación I

UNIVERSIDAD NACIONAL AUTÓNOMA DE HONDURAS


Facultad de Ciencias - Escuela de Matemática
Departamento de Matemática Aplicada
Tarea #2 de Programación I
Valor (5 %)

Los siguientes ejercicios propuestos hacen referencia a los temas visto durante el primer parcial. De-
berán realizar los ejercicios de forma clara y ordenada en hojas blancas y luego tomar una fotografía
o escanear para subir en el espacio correspondiente en la plataforma virtual.
El documento debe ser subido en un solo archivo PDF y según los ejercicios asignados por la termi-
nación de su número de cuenta que se muestra en la tabla siguiente.

Terminación de número de cuenta


0 1 2 3 4 5 6 7 8 9
P 1 2 3 4 1 2 3 4 1 2
r 5 6 7 8 8 7 6 5 6 7
o 9 10 11 9 10 11 9 10 11 9
b 14 13 12 12 13 14 14 13 12 13
l 15 16 15 16 15 16 15 16 15 16
e 17 18 19 17 18 19 17 18 19 17
m 20 21 22 23 24 20 21 22 23 24
a 29 28 27 26 25 29 28 27 26 25
s 30 30 30 30 30 30 30 30 30 30

I PAC - 2019 Lic. Angel Rivera


Programación I

- - - - - - - - - - - - - - - - - - - - - - - - - - - Teóricos - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Problema 1 En C++ el operador binario suma el operando de la izquierda con


el operando de la derecha y asigna este resultado al operando de la izquierda.

Problema 2 Si una función no tiene valor de retorno entonces es de tipo:

Problema 3 Para generar números aleatorios ocupamos la librería:

Problema 4 Las son un conjunto de instrucciones que realizan una tarea específica.
En general toman ciertos valores de entrada, llamados parámetros y proporcionan un valor de salida o valor de
retorno.

Problema 5 Los permiten agrupar datos usando un único identificador.

Problema 6 Si declaramos una variable como int vector[10] el compilador obtendrá espacio de me-
moria suficiente para almacenar:

Problema 7 El consiste en una presentación de la función, exactamente con la misma


estructura que la definición, pero sin cuerpo y terminada con un ";".

Problema 8 La sintaxis

int distancia(double, double);

es un prototipo de función válido (verdadero o falso):

I PAC - 2019 Lic. Angel Rivera


Programación I

- - - - - - - - - - - - - - - - - - - - - - - Pruebas de escritorio - - - - - - - - - - - - - - - - - - - - - - - - -
Problema 9 Realice la prueba de escritorio del siguiente código.
1 # include <iostrea m >
2 # include <iomanip>
3
4 using namespace s t d ;
5
6 i n t main ( ) {
7 i n t n=8;
8 cout << setw ( n ) << " 12 " << setw ( n ) << 123 << setw ( n )
9 << 12909 << setw ( n ) << 123456 <<endl ;
10 cout << setw ( n ) << " 000012 " << endl ;
11 return 0;
12 }
13

Problema 10 Realice la prueba de escritorio del siguiente problema.


1 # include <iostrea m >
2 # include <iomanip>
3 # include <cmath>
4 using namespace s t d ;
5 i n t main ( ) {
6 i n t n=1;
7 cout << s e t p r e c i s i o n ( n ) <<cos ( 1 ) <<endl ;
8 n=2;
9 cout << s e t p r e c i s i o n ( n ) <<cos ( 1 ) <<endl ;
10 n=4;
11 cout << s e t p r e c i s i o n ( n ) <<cos ( 1 ) <<endl ;
12 n=8;
13 cout << s e t p r e c i s i o n ( n ) <<cos ( 1 ) <<endl ;
14 return 0;
15 }
16

I PAC - 2019 Lic. Angel Rivera


Programación I

Problema 11 Realice la prueba de escritorio del siguiente programa:


1 # include <iostrea m >
2 # include < c s t d i o >
3 # include < c s t d l i b >
4 # include <iomanip>
5 # include <cmath>
6 # include <ctime >
7
8 using namespace s t d ;
9
10 i n t main ( ) {
11 srand ( time (NULL) ) ;
12 int x , z ;
13 f o r ( i n t i = 1 ; i < 6 ; i ++) {
14 z = pow( 1 0 , i ) ;
15 x = 1 + rand ( ) % z ; //Tome un numero a l e a t o r i o dentro d e l rango
16 cout <<setw ( 7 ) <<x ;
17 }
18
19 cout <<endl ;
20 return 0;
21 }
22

Problema 12 Realice una prueba de escritorio:


1 # include <iostrea m >
2 # include <iomanip>
3 # include <cmath>
4 using namespace s t d ;
5
6 int factorial ( int n) ;
7
8 i n t main ( ) {
9 i n t N= 5 ;
10 i n t techo ;

I PAC - 2019 Lic. Angel Rivera


Programación I

11 t e c h o= c e i l ( log ( f a c t o r i a l (N) /( f a c t o r i a l ( f l o o r (N/2) ) ∗ f a c t o r i a l (N− f l o o r (N/2) ) ) )


/ log ( 1 0 ) ) + 1 ;
12 cout << " E s t e es e l t e c h o " <<techo <<endl ;
13 f o r ( i n t i = 0 ; i <=N; i ++) {
14 cout <<setw ( t e c h o ∗ (N− i ) +1)<< " " ;
15 f o r ( i n t j = 0 ; j <= i ; j ++)
16 cout <<setw ( t e c h o ) << f a c t o r i a l ( i ) /( f a c t o r i a l ( j ) ∗ f a c t o r i a l ( i − j ) ) <<setw (
t e c h o ) << " " ;
17 cout <<endl ;
18 }
19 return 0;
20 }
21
22 int factorial ( int n) {
23 i f ( n==0||n==1)
24 return 1;
25 else
26 r e t u r n n∗ f a c t o r i a l ( n − 1) ;
27 }
28

Problema 13 Realice la prueba de escritorio del programa.


1 # i n c l u d e <iostrea m >
2
3 using namespace s t d ;
4
5 // v a r i a b l e s g l o b a l e s
6 const i n t M = 4 ;
7 const i n t N = 4 ;
8
9 // p r o t o t i p o s
10 void tm ( double m1 [ ] [M] , double m2 [ ] [M] ) ;
11 void im ( double m[ ] [M] ) ;
12
13 i n t main ( )

I PAC - 2019 Lic. Angel Rivera


Programación I

14 {
15 double A[N] [M] , B [N] [M] ;
16
17 f o r ( i n t i = 0 ; i < N; i ++) {
18 f o r ( i n t j = 0 ; j <M; j ++) {
19 A[ i ] [ j ] = i ∗ i + j ;
20 B[ i ] [ j ] = 0 . 0 ;
21 }
22 }
23
24 tm (A, B ) ;
25 im (A) ;
26 cout << " \n\n " ;
27 im ( B ) ;
28
29 return 0;
30 }
31
32 void tm ( double m1 [ ] [M] , double m2 [ ] [M] ) {
33 f o r ( i n t i = 0 ; i <M; i ++) {
34 f o r ( i n t j = 0 ; j <N; j ++) {
35 m2[ i ] [ j ] = m1[ j ] [ i ] ;
36 }
37 }
38 }
39
40 void im ( double m[ ] [M] ) {
41 f o r ( i n t i = 0 ; i <M; i ++) {
42 f o r ( i n t j = 0 ; j <N; j ++) {
43 cout << m[ i ] [ j ] << " \ t " ;
44 }
45 cout << endl ;
46 }
47 }
48

I PAC - 2019 Lic. Angel Rivera


Programación I

Problema 14 Realice la prueba de escritorio del programa.

1 # i n c l u d e <iostrea m >
2
3 using namespace s t d ;
4
5 // v a r i a b l e s g l o b a l e s
6 const i n t M = 2 ;
7 const i n t N = 2 ;
8
9 // p r o t o t i p o s
10 void mm( double m1 [ ] [M] , double m2 [ ] [M] , double m3 [ ] [M] ) ;
11 void im ( double m[ ] [M] ) ;
12
13 i n t main ( )
14 {
15 double A[N] [M] , B [N] [M] , C[N] [M] ;
16
17 f o r ( i n t i = 0 ; i < N; i ++) {
18 f o r ( i n t j = 0 ; j <M; j ++) {
19 A[ i ] [ j ] = i ∗ i + j ;
20 B[ i ] [ j ] = i ∗ ( j + 1) ;
21 C[ i ] [ j ] = 0 . 0 ;
22 }
23 }
24
25 mm(A, B , C) ;
26 cout << "A es : \ n " ;
27 im (A) ;
28 cout << " B es : \ n " ;
29 im ( B ) ;
30 cout << " \nLa f u n c i o n mm r e a l i z o l o s i g u i e n t e : \ n\n " ;
31 im (C) ;
32
33 return 0;
34 }

I PAC - 2019 Lic. Angel Rivera


Programación I

35
36 void mm( double m1 [ ] [M] , double m2 [ ] [M] , double m3 [ ] [M] ) {
37 f o r ( i n t i = 0 ; i <N; i ++) {
38 f o r ( i n t j = 0 ; j <M; j ++) {
39 f o r ( i n t k = 0 ; k<N; k++) {
40 m3[ i ] [ j ] += m1[ i ] [ k ] + m2[ k ] [ j ] ;
41 }
42 }
43 }
44 }
45
46 void im ( double m[ ] [M] ) {
47 f o r ( i n t i = 0 ; i <N; i ++) {
48 f o r ( i n t j = 0 ; j <M; j ++) {
49 cout << m[ i ] [ j ] << " \ t " ;
50 }
51 cout << endl ;
52 }
53 }
54

Problema 15 Realice la prueba de escritorio del siguiente programa.

1 # i n c l u d e <iostrea m >
2
3 using namespace s t d ;
4
5 // v a r i a b l e s g l o b a l e s
6 const i n t M = 3 ;
7 const i n t N = 3 ;
8
9 // p r o t o t i p o s
10 void mm( double m1 [ ] [M] , double m2 [ ] [M] , double m3 [ ] [M] ) ;
11 void im ( double m[ ] [M] ) ;
12

I PAC - 2019 Lic. Angel Rivera


Programación I

13 i n t main ( )
14 {
15 double A[N] [M] , B [N] [M] , C[N] [M] ;
16
17 f o r ( i n t i = 0 ; i < N; i ++) {
18 f o r ( i n t j = 0 ; j < M; j ++) {
19 A[ i ] [ j ] = i ∗ i + j ;
20 B[ i ] [ j ] = i ∗ ( j + 1) ;
21 C[ i ] [ j ] = 0 . 0 ;
22 }
23 }
24
25 mm(A, B , C) ;
26 cout << "A es : \ n " ;
27 im (A) ;
28 cout << " B es : \ n " ;
29 im ( B ) ;
30 cout << " \nLa f u n c i o n mm r e a l i z o l o s i g u i e n t e : \ n\n " ;
31 im (C) ;
32
33 return 0;
34 }
35
36 void mm( double m1 [ ] [M] , double m2 [ ] [M] , double m3 [ ] [M] ) {
37 f o r ( i n t i = 0 ; i <N; i ++) {
38 f o r ( i n t j = 0 ; j <M; j ++) {
39 f o r ( i n t k = 0 ; k<N; k++) {
40 m3[ i ] [ j ] += m1[ i ] [ k ] ∗ m2[ k ] [ j ] ;
41 }
42 }
43 }
44 }
45
46 void im ( double m[ ] [M] ) {
47 f o r ( i n t i = 0 ; i <N; i ++) {
48 f o r ( i n t j = 0 ; j <M; j ++) {

I PAC - 2019 Lic. Angel Rivera


Programación I

49 cout << m[ i ] [ j ] << " \ t " ;


50 }
51 cout << endl ;
52 }
53 }
54
55

Problema 16 Realice la prueba de escritorio del siguiente programa.

1 # i n c l u d e <iostrea m >
2
3 using namespace s t d ;
4
5 // v a r i a b l e s g l o b a l e s
6 const i n t M = 3 ;
7 const i n t N = 3 ;
8
9 // p r o t o t i p o s
10 void mm( double m1 [ ] [M] , double m2 [ ] [M] , double m3 [ ] [M] ) ;
11 void im ( double m[ ] [M] ) ;
12
13 i n t main ( )
14 {
15 double A[N] [M] , B [N] [M] , C[N] [M] ;
16
17 f o r ( i n t i = 0 ; i < N; i ++) {
18 f o r ( i n t j = 0 ; j < M; j ++) {
19 A[ i ] [ j ] = i ∗ i + j ∗ j ;
20 B[ i ] [ j ] = i + j + 1;
21 C[ i ] [ j ] = 0 . 0 ;
22 }
23 }
24
25 mm(A, B , C) ;

I PAC - 2019 Lic. Angel Rivera


Programación I

26 cout << "A es : \ n " ;


27 im (A) ;
28 cout << " B es : \ n " ;
29 im ( B ) ;
30 cout << " \nLa f u n c i o n mm r e a l i z o l o s i g u i e n t e : \ n\n " ;
31 im (C) ;
32
33 return 0;
34 }
35
36 void mm( double m1 [ ] [M] , double m2 [ ] [M] , double m3 [ ] [M] ) {
37 f o r ( i n t i = 0 ; i <N; i ++) {
38 f o r ( i n t j = 0 ; j <M; j ++) {
39 f o r ( i n t k = 0 ; k<N; k++) {
40 m3[ i ] [ j ] += m1[ i ] [ k ] ∗ m2[ k ] [ j ] ;
41 }
42 }
43 }
44 }
45
46 void im ( double m[ ] [M] ) {
47 f o r ( i n t i = 0 ; i <N; i ++) {
48 f o r ( i n t j = 0 ; j <M; j ++) {
49 cout << m[ i ] [ j ] << " \ t " ;
50 }
51 cout << endl ;
52 }
53 }
54
55

I PAC - 2019 Lic. Angel Rivera


Programación I

- - - - - - - - - - - - - - - - - - - - - - - - - - - - Prácticos - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Problema 17 Diseñar una función que sume los primeros m números, donde m es ingresado por el
usuario.

Problema 18 Escriba un programa que cambie números de base decimal a base binaria. Para ello
cree una función que tome un número en base 10 y devuelva el número en base binaria

Problema 19 Escribir un programa que invierta los dígitos de un entero positivo dado, leído del
teclado. Para ello cree una función que reciba el número y devuelva el número invertido.

Problema 20 Escriba un programa que lea un número n > 0 del teclado, el valor a y el valor de r. Y
luego mediante una función determine la suma de la serie siguiente
n
∑ arn
i =1

Problema 21 Escriba un programa que calcule e imprima la suma de los enteros pares del 2 a m
(ingresado por el usuario).

Problema 22 Diseñe un programa que simule el juego LOTO. Para ello el usuario debe ingresar los
6 números a apostar y el programa debe generar los 6 números aleatorios y decirle al jugador si ha
ganado el superpremio o no. Utilice funciones para la legibilidad del programa.

Problema 23 Diseñe un programa que le pida al usuario que deba ingresar dos vectores en R3 . Lue-
go un menú donde aparezcan las operaciones básicas (magnitud de ambos vectores, suma, resta,
multiplicación por escalar, producto punto), todas las operaciones deben codificarse en funciones.

Problema 24 Escriba un programa que pida al usuario los valores de una tabla de elementos enteros
de dimensión 4 filas por 3 columnas, y muestre en pantalla la mayor de las sumas de sus columnas.

Problema 25 Escriba un programa que calcule el indice de un alumno de la UNAH, para ello debe
pedirle al usuario el número de asignaturas a ingresar, las unidades valorativas y el promedio obte-
nido en cada clase. La información debe ser ingresada en un arreglo bidimensional de tamaño fijo y
debe mostrarse el promedio en pantalla.

I PAC - 2019 Lic. Angel Rivera


Programación I

Problema 26 Escribir un programa que permita gestionar una máquina expendedora. El programa
deberá pedir al usuario el precio del producto que va a comprar y el dinero que ha pagado y cal-
cular el vuelto correspondiente. El programa debe mostrar cuántos billetes de cada tipo deben ser
el cambio. Los tipos de billetes a considerar deben ser 1, 2, 5, 10, 20 y 50 lempiras, y se asume que
hay suficientes billetes de todos los tipos para devolver el cambio. Utilizar funciones para facilitar la
legibilidad del programa principal.

Problema 27 Escriba un programa que declare un array llamado tabla, cuadrado y de dos dimen-
siones, rellene todos sus elementos con el valor 1 y muestre dicho array. Luego el programa deberá
poner a 0 todos los elementos de la diagonal principal y volver a mostrar el resultado.

Problema 28 Escriba un programa que, tratando una fracción como un estructura de 2 componen-
tes, permita realizar las operaciones suma, multiplicación, división, opuesto e inverso. El programa
deberá preguntar la operación a realizar y después los datos para ejecutarla, y repetir estos pasos
hasta que se seleccione entre las operaciones la opción terminar. Cada una de las operaciones se
implementará como una función.

Problema 29 Escribir un programa que acepte tres puntos con coordenadas ( x, y) en el plano carte-
siano de tal manera que formen un triángulo; y luego despliegue en pantalla los puntos del triángulo
y el área del mismo. Utilice funciones y arreglos para desarrollar el programa e investigue sobre la
fórmula de Herón.

I PAC - 2019 Lic. Angel Rivera


Programación I

Problema desafío

Problema 30 Una empresa informática nos ha solicitado que desarrollemos una versión simplificada
del juego de los barquitos. Para su diseño nos dan las siguientes especificaciones:

El tablero es una cuadrícula de 12 × 12 casillas.

Al inicio del juego se generará aleatoriamente las coordenadas de cada uno de los barquitos
y su orientación (horizontal (0) o vertical (1)). Por simplicidad se admitirá que hay 10 barqui-
tos, que cada uno está colocado en una fila o en una columna, y que el número de casillas que
ocupa cada barquito es 2. Por tanto, para situar un barquito en el tablero bastará con dar una
coordenada y la orientación admitiéndose que la segunda casilla ocupada por el barquito se
corresponde con la casilla que está situada a la derecha o abajo de la indicada. Así, si las coor-
denadas son (3,4) y la orientación es 0 las casillas ocupadas por el barquito serán (3,4) y (3,5),
pero si la orientación es 1 las casillas ocupadas serán (3,4) y (4,4). Para posicionar un barquito
en el tablero el sistema debe comprobar que las coordenadas introducidas son válidas.

Una vez posicionados los 10 barquitos en el tablero comienza el juego. El juego constará de 8
rondas. En cada ronda el jugador dará las coordenadas de una casilla:

• Si la casilla está ocupada por un barquito, el barquito se considerará hundido y, por tanto,
las 2 casillas ocupadas por este barquito serán casillas “libres” en las siguientes rondas.
Además, al hundir un barquito, el sistema otorgará al usuario una ronda de juego adicio-
nal. Es decir, las rondas en las que el usuario hunde un barquito no serán descontadas del
total de rondas disponibles.

• Si la casilla está libre, no es una casilla válida o está ocupada por un barquito ya hundido,
se considerará que el usuario ha consumido una ronda.

El juego finaliza cuando se han hundido todos los barquitos o se han agotado todas las rondas.

Una vez finalizado el juego se indicará por pantalla si el jugador ha ganado o ha perdido. Si el
jugador pierde la partida se mostrará por pantalla la distribución de barquitos inicial. Se pide
desarrollar un programa en C que implemente el juego de los barquitos teniendo en cuenta las
especificaciones pedidas.

I PAC - 2019 Lic. Angel Rivera


Programación I

1
1 1 1 1 1

1 1 1 1 1
1

1 1
1 1 1
1 1 1
1 1
1 1

Figura 1: Ejemplo de la disposición de los barquitos

I PAC - 2019 Lic. Angel Rivera

También podría gustarte