Sunteți pe pagina 1din 20

Guía de ejercicios.

1. Dado el siguiente programa, determine los diferentes estados por los que transitan las variables x e y para
los valores de entrada por el usuario 1 y 6 respectivamente.
double PPP (int x, int y){
double s=0;
for(int i=x;i<=y;i++)
s+=i*(i+1)*(i+2);
return s;
}
int main(){

int x,y;

double s=0;

cin>>x;

cin>>y;

s = PPP (x, y);

cout<<(s%100);

return 0;
2. Diseñe e implemente un programa para determinar la persistencia de un número entero no negativo, para
ello:
a) Desarrolle un subprograma que dado un número entero no negativo devuelva el producto de sus cifras.
b) Desarrolle un programa principal que lea de consola un número entero no negativo y haciendo uso del
subprograma desarrollado en el inciso a) determine e imprima en consola la persistencia de dicho
número. Se le conoce con el nombre de persistencia a la cantidad de veces que se ejecute el proceso
de descomposición y multiplicación de las cifras de un número. Ej: 715 → (7*1*5) =35 → (3*5) =15 →
(1*5) =5 entonces 715 tiene persistencia 3.
3. Diseñe e implemente un programa que lea un número entero num y una opción (a – h, t) de modo que:
 Si la opción es 'a' muestre la raíz cúbica de la cifra especificada por el usuario perteneciente al
número num.
 Si la opción es 'b' muestre la mayor cifra perteneciente al número num.
 Si la opción es 'c' muestre la menor cifra perteneciente al número num.
 Si la opción es 'd' determine la mayor diferencia entre las cifras perteneciente al número num.
 Si la opción es 'e' muestre la suma de las cifras pertenecientes al número num.
 Si la opción es 'f' muestre si el número num es de amstrong.
 Si la opción es 'g' muestre si el número num es capicúa.
 Si la opción es 'h' solicite un nuevo número num.

Y que este proceso solo termine en caso de que se introduzca una 't' como opción. Para ello:

a) Identifique, declare e implemente los subprogramas que considera necesarios para reutilizar en su
programa principal.
b) Identifique, declare e implemente los subprogramas que considera necesarios para simplificar su
programa principal.
c) Implemente el programa principal haciendo uso de los subprogramas identificados, declarados e
implementados en los incisos anteriores.
4. Suponiendo que ya existe un subprograma ( int parteEntera(double numero) ) que dado un número REAL
este determina su parte entera, desarrolle un programa lo más simplificado posible que halle y muestre en
consola la raíz cuadrada de un número entrado por el usuario y luego busque e imprima en consola, de su
parte entera, la mayor cifra.

5. Implemente un programa que permita calcular la suma de los factoriales de dos números enteros no
negativos entrados por el usuario. Para ello implemente un subprograma que devuelva el factorial de un
número entero no negativo pasado por parámetro y haga uso de este en su programa.

6. Recientemente La Habana(Cuba) clasificó entre las 28 finalistas para ser una de las Siete Nuevas Maravillas
del Mundo. Se quiere un programa que capture la respuesta de la población mundial (S o N), hasta que se
informe que la encuesta está cerrada (C), a la interrogante siguiente:
¿Considera que La Habana(Cuba) cuenta con valores arquitectónicos, geográficos, culturales y
elementos identificatorios únicos como para ser una de las 7 Nuevas Maravillas del Mundo?
Finalmente se muestre a la población:
 El porciento de personas que consideran que La Habana merece esta distinción.
 El porciento de personas que consideran que La Habana no merece esta distinción.
 Una valoración general, de si La Habana merece o no esta distinción, a partir de los
porcientos anteriormente determinados.
a) Teniendo en cuenta que ya existe un subprograma (double PorcientoPositivo(int cantSi, int
CantNo)) que dada la cantidad de encuestados que respondieron que Si y la cantidad que
respondieron que No retorna el porciento que representa los Si sobre el total de encuestados,
desarrolle un programa que de respuesta al planteamiento antes descrito.

7. Una empresa de ventas por correo, vende cinco productos distintos, cuyos precios se muestran en la
siguiente tabla:
Número del producto Precio
1 2,98
2 4,50
3 9,98
4 4,49
5 6,87

a) Desarrolle un subprograma que dado el número del producto y la cantidad vendida de este en el día,
retorne el dinero que obtuvo la empresa por esta venta.
b) Desarrolle un programa principal que haciendo uso del subprograma desarrollado en el inciso anterior
determine e imprima en consola el total de dinero recaudado por la empresa al realizar 35 ventas.
8. Teniendo en cuenta que se le da implementado el subprograma boolean esPrimo(int numero) el cual dado
un número entero retorna true si este es primo y false en otro caso; se quiere un programa que dado un
número entero M entrado por consola, sea capaz de:
 Si es un número primo, mostrar un mensaje notificando que es primo.
 Si es un número par, pedir por consola un nuevo número hasta tanto la diferencia entre M y este
nuevo número sea menor o igual que cero. Al finalizar debe mostrar un mensaje que diga la
cantidad de iteraciones necesarias para llevar el número M a cero o menor.
 Finalmente debe mostrar un mensaje dando las gracias al usuario por el tiempo prestado.
a) Identifique, declare e implemente los subprogramas que considere necesario para simplificar el
desarrollo del problema antes planteado.
b) Desarrolle un programa principal que haciendo uso de los subprogramas dados e identificados por
usted en el inciso anterior, de solución al problema antes descrito.
9. Teniendo en cuenta que se le da implementado el subprograma boolean esPrimo(int numero) el cual dado
un número entero retorna true si este es primo y false en otro caso; se quiere que usted confeccione un
programa que dado dos números enteros de cualquier cantidad de cifras se muestre el número que
contenga la mayor cifra si y solo si ambos números son primos.

Ejemplo: Sean N1=71 y N2=653 números primos, entonces 71 es el número que contiene la mayor cifra.

a) Identifique, declare e implemente los subprogramas que considere necesario para simplificar el
desarrollo del problema antes planteado.

b) Desarrolle un programa principal que de solución al problema antes descrito, haciendo uso de los
subprogramas dados e identificados por usted en el inciso anterior.

12. Se desea un programa que al ser entrados por el usuario 3 número reales correspondientes a las
amplitudes de los ángulos de un triángulo, si estos conforman un triángulo, se muestre en consola su
clasificación según sus ángulos.

a) Desarrolle un subprograma que reciba las 3 amplitudes por parámetro y devuelva si conforman
o no un triángulo, teniendo en cuenta que para ser triángulo la suma de las amplitudes tiene
que ser igual a 180 y ninguna de las amplitudes puede ser cero.

b) Desarrolle un subprograma que reciba las 3 amplitudes por parámetro y devuelva su


clasificación basado en la amplitud de sus ángulos (“Rectángulo”, “Obtusángulos” o
“Acutángulos”).
13. Se desea un programa que al ser entrados por el usuario 6 número reales correspondientes a las longitudes
de los lados de dos triángulo, si estos conforman dos triángulos y los triángulos son semejantes entre sí, se
muestre en consola:

 La clasificación de uno de los triángulos, atendiendo a la similitud entre sus lados.

 La razón entre sus áreas.

En caso de no conformar dos triángulos mostrar al usuario un mensaje de error. Para ello:

a) Desarrolle un subprograma que reciba 3 longitudes por parámetro y devuelva si conforman o


no un triángulo, basado en la definición del teorema de desigualdad triangular.

b) Desarrolle un subprograma que reciba 3 longitudes por parámetro y devuelva su clasificación


basado en la similitud de la longitud de sus lados (“Equilátero”, “Isósceles” o “Escaleno”).
Recursividad:

1. Determine qué calcula el siguiente algortimo recursivo:


int Incognita(int pNum){

if (pNum==0)

return 0;

else

return pNum+ Incognita(pNum-1);

2. Tracear el siguiente programa recursivo


int potencia(int a, int b)

if (b == 0) return 1;

else return a * potencia(a, b-1);

3. Tracear el siguiente programa recursivo, para Recursivo(5 , 2 ,10);


int Recursivo (int v, int i1, int i2) {
int aux1, aux2;

if (i1==i2) /* Caso Base */

return (i1+i2);

else { /* Caso General */

aux1 = Recursivo (v, i1, (i1+i2) /2 );

aux2 = Recursivo (v, ((i1+i2)/2)+1, i2);

cout << aux1 << "-" << aux2 << endl;

if (aux1 > aux2)

return (aux1);

else

return (aux2);

4. Escriba un método recursivo para calcular el Lucas de aNum sabiendo que el término n-ésimo de la
secuencia de Lucas: 1, 3, 4, 7, 11, 18, 29, 47,... que se calcula de la siguiente forma:
Lucas(1)=1

Lucas(2)=3

Lucas(n)= Lucas(n-1) + Lucas(n-2) si n >2

Nota: use si considera necesario un método auxiliar.

5. Programe la función (utilizando recursividad) int Potencia(int k, int n) que devuelva el resultado de


elevar k a la n.
6. Programe la función (utilizando recursividad) int Producto(int a, int b) que devuelva el producto
a*b. Asuma que no existe el operador *.
7. Programe la función (utilizando recursividad) string DecimalABinario(int pvalor) que dado un
número permita devolver en una cadena el valor pasado como parámetro convertirlo a Binario.
8. Programe la función (utilizando recursividad)  int Serie (int pterminos) la cual calcula el resultado
de la siguiente serie:
1*2*3 + 2*3*4 + 3*4*5 + 4*5*6.....
Conociendo la cantidad de términos que debe calcular.

Arreglos
Ejercicio # 1: Dado el siguiente fragmento de código, donde cant = 5, n = 3 y lista es un arreglo de enteros:
for (int k= 0; k < cant; k++)
{
int p=k;
for(int h= 1; h < n; h++)
p *= k;
lista[k]= p;
}
a) Analice qué hace y diga qué queda almacenado en el arreglo lista.
b) ¿Diga si el siguiente fragmento de código es equivalente al mostrado anteriormente?
for (int k= 0; k < cant; k++)
{
int p=1;
for(int h= 1; h <= n; h++)
p *= k;
lista[k]= p;
}
Ejercicio # 2: Dado el siguiente programa, analice y escriba el resultado de su evaluación para los datos que se
especifican.

void main()
{
int aAc[8]={100,0,0,120,0,100,0,85};
int aC[8];
int txt = 8;
for(int i=0; i<8; i++)
aC[i] = aAc[i];
int c = 0;
for (int i=0; i<txt; i++)
if (aC [i] == 0)
c++;
cout << c << endl;
}

Ejercicio # 3: Dada la implementación del método main diga que valores se imprimen por consola:
int main(){
int numeros[] = {7, 5 , -1, -2, 3, 8, 1000 , 2, 3, 3};
int c = 0;
for(int i = 0; i < 10; i++)
if (numeros[i] >= n)
c++;
int aux[c];
c = 0;
for(int i = 0; i < 10 ; i++)
{
if (numeros[i] >= n)
{
aux[c] = numeros[i];
c++;
}
}
for(int i = 0; i < arr.Length; i++){
cout << arr[i] << “ ”;
}

Ejercicio # 4: Desarrollar un programa que:


a) Llene un arreglo de N elementos enteros pidiendo al usuario el valor de cada elemento en la posición i-
ésima.
b) Luego imprima en pantalla cada elemento del arreglo.
c) Imprima en pantalla la cantidad de ceros en el arreglo.
d) Imprima en pantalla la cantidad de elementos negativos y positivos.
e) Invierta el signo a cada elemento del arreglo e imprima cómo quedó el arreglo finalmente.
f) Incremente en uno cada número impar presente en el arreglo.
g) Imprima la suma de los elementos en posiciones pares, asuma que el 0 es par.
h) Imprima el mayor elemento del arreglo.
i) Calcule la diferencia entre la suma de los elementos pares y la suma entre los impares.
j) Calcule la diferencia entre el mayor y el menor de los elementos.
k) Calcule el elemento de mayor frecuencia de aparición.

Ejercicio # 5:

a) Haga un método que dado un arreglo elimine el elemento de la 1ra posición, y devuelva el arreglo
modificado.
b) Haga un método que, dado un arreglo, y una posición, elimine el elemento que se encuentra en esa
posición, y devuelva el arreglo modificado.
c) Haga un método que, dado un arreglo y un elemento, elimine a todos los elementos del arreglo iguales al
elemento entrado, y devuelva el arreglo modificado.
d) Desarrolle un programa principal que:
e) Cree un arreglo de enteros de tamaño N elementos enteros y lo llene.
f) Aplique las operaciones de eliminación anteriores al arreglo.
g) Al final imprima como queda el arreglo

Ejercicio # 6:

a) Implemente el método int Pos(int[] a, int x). Este método debe devolver la posición del elemento x en el
array a si el array a contiene al elemento x, -1 en otro caso.
b) Implemente el método int PosBinaria(int[] a, int x). Este método debe devolver la posición del elemento x
en el array a si el array a contiene al elemento x, -1 en otro caso, asumiendo que los elementos en el array
a están ordenados.
c) Implemente el método void Ordena(int[] a) que ordene los elementos del array a utilizando alguno de los
siguientes algoritmos de ordenación: por selección, por burbuja o por inserción.
d) Implemente el método int SubSumaMaxima(int[] a) que devuelve el valor de la subsecuencia de suma
máxima del array a. Si todos los elementos del array son negativos debe devolver 0. Por ejemplo, el valor
de la subsecuencia de suma máxima de {1, 1, -3, 4, 2, 2, -1, 2, -3, 2} es 9.

Ejercicio#2
a) Hacer un método llamado clonarArreglo que toma un arreglo de enteros como parámetro, crea un
nuevo arreglo del mismo tamaño, copia los elementos del primer arreglo al nuevo, y retorna un
objeto que referencia al nuevo arreglo.
b) Hacer un método llamado Redimensionar que toma un arreglo de enteros como parámetro, crea un
nuevo arreglo de longitud mayor, copia los elementos del primer arreglo al nuevo, y retorna el
nuevo arreglo redimensionado.

Nota: necesito redimensionar el arreglo:


1. Crear un nuevo arreglo con tamaño + 1
2. Copiar los elementos del anterior al nuevo arreglo

c) Haga un método que reciba un arreglo por parámetro, y un elemento, inserte el elemento al final y
devuelva el arreglo modificado.
d) Haga un método que reciba un arreglo por parámetro, y un elemento, inserte el elemento al
principio y devuelva el arreglo modificado.
e) Haga un método que reciba un arreglo por parámetro, un elemento y una posición, inserte en esa
posición el elemento, y devuelva el arreglo modificado.

Desarrolle un programa principal que:


f) Cree un arreglo de enteros de tamaño N y pida al usuario que lo llene.

g) Luego le pida al usuario un elemento y lo inserte al final.


h) Luego le pida al usuario un elemento y lo inserte al principio

i) Luego le pida al usuario un elemento y una posición y lo inserte en esa posición.

j) Al final imprima como queda el arreglo.

Ejercicio#3
• Haga un método que dado un arreglo elimine el elemento de la 1ra posición, y devuelva el arreglo
modificado.

• Haga un método que dado un arreglo, y una posición, elimine el elemento que se encuentra en
esa posición, y devuelva el arreglo modificado.

• Haga un método que dado un arreglo, y un elemento, elimine a todos los elementos del arreglo
iguales al elemento entrado, y devuelva el arreglo modificado.

Desarrolle un programa principal que:


• 1. Cree un arreglo de enteros de tamaño N elementos enteros y lo llene.

• 2. Aplique las operaciones de eliminación anteriores al arreglo.

• 3. Al final imprima como queda el arreglo.

Ejercicio#4
El sistema de gestión universitaria de la UCI, necesita realizar un módulo encargado de sumar las notas de
las asignaturas de los estudiantes. Se conoce que las notas de cada estudiante se guardan en el arreglo
notas []. A los estudiantes de la FICI se le ha encargado la tarea de desarrollar dicho modulo. Tenga en
cuenta que el nombre que deberá recibir el modulo es “SumaNotas”.

Ejercicio#5
La serie nacional de béisbol y el INDER, necesitan desarrollar una aplicación principal que controle las
estadísticas de cada juego que se desarrolla en la serie. Este programa principal se conoce que tiene
varios arreglos donde se almacenan informaciones importantes de dichas estadísticas. Unos de estos
arreglos es el de los “jonrones” de cada juego, este arreglo está declarado como jr[] y almacena los
jonrones de cada juego en la temporada.
Ejemplo del arreglo:
a) Se necesita saber la cantidad de jonrones que se dieron en toda la temporada. Esta funcionalidad debe
de estar fuera del programa principal con el nombre “TotalJ”.
b) Se desea conocer la cantidad de juegos donde se dio más de 2 jonrones. Tenga en cuenta que se desea
realizar esta funcionalidad aparte del programa principal, con el nombre “JuegosMas2J”.
c) Es necesario realizar un módulo que lleve la cuenta de los juegos donde no se hayan anotado jonrones.
A esta funcionalidad llámela “CantJuegosSinJonron”.

Ejercicio#6
El famoso programa “Super Copier”, es utilizado para acelerar el proceso de copia de archivos entre
diferentes dispositivos. Este programa almacena en un arreglo llamado info[] el tamaño de todos los
archivos copiados al sistema durante 1 día. Uno de los desarrolladores del programa desea realizar otras
funcionalidades que utilicen dicho arreglo.
a) Termina el código del programador, si se sabe que desea realizar una función que devuelva el
archivo más grande copiado en 1 día.
b) De igual forma el programador desea conocer cuál es el archivo de menor peso copiado en un día.

Ejercicio#7
Se desea realizar una función que dado un arreglo entero de números y dado dos números enteros X e Y
devuelva un arreglo llamado contenedor[] que almacene los números que se encuentren entre la posición
X e Y. Tenga en cuenta que la posición X debe de ser menor que la posición Y, y que ambas deben de estar
entre el rango real del tamaño del arreglo.

Ejercicio#8
El sistema de control de alimentos de un comedor X, guarda en un arreglo llamado estad[], los nombres
de los trabajadores que luego del horario de almuerzo pasan nuevamente al comedor para almorzar
doble. El sistema aún tiene algunas deficiencias y está incompleto, por lo que se desean agregar nuevas
funcionalidades. Entre ellas se encuentra:

a) Dado un nombre entrado por el usuario ver cuántas veces esa persona paso en el doble.
b) Conocer cuál fue la primera persona en pasar al doble, y si la misma paso otras veces.

Bidimensionales:
1. Leer el arreglo bidimensional del ejercicio 1 y determinar en qué fila y en qué columna se
encuentra el número mayor.
2. Leer el arreglo bidimensional del ejercicio 1 y determinar cuántas veces se repita en ella el
número mayor.
3. Leer el arreglo bidimensional del ejercicio 1 y determinar cuántos números pares hay en este.
4. Leer el arreglo bidimensional del ejercicio 1 y determinar en qué posiciones exactas se encuentran
los números primos.
5. Leer el arreglo bidimensional del ejercicio 1 y calcular la suma de los elementos de cada fila y
determinar cuál es la fila que tiene la mayor suma.
6. Leer el arreglo bidimensional del ejercicio 1 y calcular el promedio de los números mayores de
cada fila.
7. Leer el arreglo bidimensional del ejercicio 1 y determinar en qué posiciones están los números
terminados en 0.
8. Leer el arreglo bidimensional del ejercicio 1 y determinar cuántos números múltiplos de 5 hay
almacenados en este.
9. Leer el arreglo bidimensional del ejercicio 1 y y determinar cuántos números almacenados en ella
terminan en 34.

1. A partir de los valores para la matriz y el fragmento de código siguiente, determine los estados que
1 2 5
asumen las variables i, j y res. C= 2 1 8
5 7 9 [ ]
public static void main(String[] args) { (continuación de la columna anterior
int k = 3;
boolean res; if ( !res )
for ( int i = 0; i < k; i++ ) { break;
for ( int j = 0; j <= i; j++ ) }
if ( FuncionX ( m[i][j], m[j][i] ) ) { System.out.println(res);
res = false; }
break;
} else public static boolean FuncionX ( int a, int b ) {
res = true; if ( a == b )
return false;
else
return true;
}

3. Implemente el subprograma ReadMatINT(int f, int c) que devuelve una referencia a una matriz de
números enteros. Este subprograma debe crear una matriz y llenarla con los datos introducidos por el
usuario usando el teclado, y finalmente devolver la referencia a la mencionada matriz. La función debe
recibir por parámetros dos enteros f y c que permitan especificar la cantidad de filas y columnas del
arreglo bidimensional que se estará definiendo.

4. Dado un arreglo bidimensional mat que almacena valores enteros, realice las siguientes orientaciones:
a. Cree un subprograma que reciba como parámetros un arreglo bidimensional y muestre en pantalla
cada elemento del arreglo.
b. Cuente la cantidad de 0 presentes en la matriz.
c. Imprima en pantalla la cantidad de elementos negativos y positivos.
d. Invierta el signo a cada elemento de la matriz e imprima cómo quedó el arreglo finalmente.
e. Incremente en uno cada número impar presente en el arreglo bidimensional.
f. Imprima la suma de los elementos en las columnas que ocupen posiciones pares, asuma que el 0 es
par.
g. Determine e imprima el mayor elemento para las filas impares.

2. A partir de los valores para las matrices y el fragmento de código siguiente, determine los estados que
asume la matriz D:

MatrixIO matWorker = new MatrixIO();


int A[][] = matWorker.ReadMatINT(2, 3);
int B[][] = matWorker.ReadMatINT(3, 4);
int D[][] = new int[A.length][B[0].length];

for (int i = 0; i < D.length; i++)


for (int j = 0; j < D[0].length; j++)
for (int k = 0; k < A[0].length; k++) {
if ( k == 0 )
D[i][j] = 0;

D[i][j] += A[i][k] * B[k][j];


}

Ejercicios de mediana complejidad


Ejercicio#1

El Centro Nacional de Meteorología desea registrar, por cada mes en el período 2000 – 2009, las temperaturas
promedio, como se indica en la siguiente tabla.
• Haga un método llamado ObtenerTemperatura, que reciba como parámetro una matriz (arreglo
bidimensional) de enteros correspondientes a las temperaturas promedio, la cantidad de filas y columnas,
un año y un mes, y retorne la temperatura promedio que hizo en ese mes y ese año
• Haga un método llamado MesMásFrío que reciba como parámetro un arreglo bidimensional de enteros
correspondientes a las temperaturas promedios, la cantidad de filas y columnas del arreglo, y un año, el
método debe retornar el número del mes en el cual hizo la temperatura más baja en ese año.
• Haga un método llamado añoMasCaliente, que reciba como parámetro un arreglo bidimensional de
enteros correspondientes a las temperaturas promedios, y la cantidad de filas y columnas del arreglo, el
método debe retornar el número del año cuya temperatura promedio fue la mayor de todas. La
temperatura promedio de un año es el promedio de las temperaturas de cada uno de sus meses.
• En el programa principal:
1. Cree un arreglo bidimensional de tamaño 10x12 donde las filas corresponden a los años y las columnas a
los meses. Llénelo con números enteros entrados por el usuario que corresponden a las temperaturas
promedio.
2. Use todos los métodos anteriores para:
a. Dado un año y un mes, imprimir la temperatura promedio que hizo en ese mes y ese año.
b. Dado un año, imprimir el número del mes en el cual hizo la temperatura más baja en ese año.
c. Imprima el número del año cuya temperatura promedio fue la mayor de todas.

Ejercicio#2

El informe de ventas por cada inicio de temporada en el año, es una información de especial
interés a las compañías manufactureras de la moda, pues permite orientar sus producciones
en el resto de la temporada. Una tienda perteneciente a la industria del vestido y calzado,
registra el precio total por productos de temporada vendidos durante todo el mes de Abril.

Producto 1/4/2014 2/4/2014 3/4/2014 4/4/2014 ... 30/4/2014


(CODIGO)
Blusa (01) 1236,25 108,23 1236,52 125,85 125,30
Tacones (02) 125,24 235,69 125,56 12,53 121,54
Minifalda (03) 88,40 452,36 125,36 125,54 125,51
...

Sobre esta información se necesita realizar un conjunto de operaciones. Para esto:


 Programe un método llamado obtenerCodigo, que reciba como parámetro una cadena
con el nombre de un producto y retorne el código entero de este en el inventario de la
tienda.
 Programe un método llamado obtenerVenta, que reciba como parámetro una matriz
(arreglo bidimensional) de números reales correspondientes a las ventas diarias, la
cantidad de filas y columnas, un día y el código entero de un producto, y retorne la
venta que hubo en ese día del producto.
 Programe un método llamado díaMenorVenta que reciba como parámetro un arreglo
bidimensional de números reales correspondientes a las ventas diarias, la cantidad de
filas y columnas, el código entero de un producto, y retorne el número del día en el cual
ese producto tuvo la menor venta.
 Programe un método llamado productoMasVendido, que reciba como parámetro un
arreglo bidimensional de números reales correspondientes a las ventas diarias, la
cantidad de filas y columnas, y retorne el nombre del producto cuya venta total en el
mes de Abril fue la mayor de todas. La venta total del mes para un producto es la suma
de sus ventas diarias.

En el programa principal:

1. Cree un arreglo bidimensional donde las filas corresponden a 12 productos y las


columnas a los 30 días del mes. Llénelo con números reales entrados por el usuario que
corresponden a las ventas diarias.
2. Programa un menú recurrente que termine al solicitar el usuario que no desea realizar
ninguna operación y que brinde la posibilidad de calcular:
1) Dado un día y el nombre de un producto, imprimir la venta del producto.
2) Dado un producto, imprimir el número del día en el cual tuvo la menor venta.
3) Imprima el nombre del producto más vendido en la temporada.

Ejercicio#3

Para el control de resultados de una prueba parcial, se ha elaborado una tabla donde por cada grupo perteneciente
al bloque se registra su matrícula, y la cantidad de estudiantes que alcanzaron las notas 2, 3, 4 y 5 en el examen.
Estudiantes Estudiantes Estudiantes Estudiantes
evaluados evaluados evaluados evaluados
Matrícula con 2 con 3 con 4 con 5
Grupo Inicial puntos puntos puntos puntos
1 30 11 8 6 4
2 26 10 9 4 3
3 27 9 10 5 2
4 29 12 9 4 3
5 25 11 10 2 2
6 24 6 14 2 2
**
Expressio ** ** ** **
Total
n is Expression Expression Expression Expression
faulty ** is faulty ** is faulty ** is faulty ** is faulty **
• Haga un método llamado cantidadEstudiantesNota, que reciba como parámetro una matriz (arreglo
bidimensional) de enteros correspondientes a los resultados de los grupos en una asignatura, el número
del grupo y una nota (2, 3, 4, 5), y retorne la cantidad de estudiantes que obtuvieron esa nota en ese grupo.
• Haga un método llamado obtenerNotaPromedio, que reciba como parámetro una matriz (arreglo
bidimensional) de enteros correspondientes a los resultados de los grupos del bloque en una asignatura y
el número de un grupo, y retorne la nota promedio que tuvieron los estudiantes de ese grupo.
• Haga un método llamado grupoMayorPorCientoAprobados que reciba como parámetro un arreglo
bidimensional de enteros correspondientes a los resultados de los grupos en una asignatura. El método
debe retornar el número del grupo que mayor cantidad de aprobados tiene respecto a los presentados en
el examen (se consideran aprobados los estudiantes con 3, 4 y 5). Tenga en cuenta que la primera columna
almacena el dato de la Matrícula inicial del grupo que no necesariamente es la cantidad de presentados al
examen.
• Haga un método llamado calidadAprobados, que reciba como parámetro un arreglo bidimensional de
enteros correspondientes a los resultados de los grupos en una asignatura y el número de una facultad. El
método debe retornar el porciento de calidad de la nota de los estudiantes que obtuvieron 4 o 5 con
respecto al número de estudiantes aprobados en ese grupo.
• En el programa principal:
3. Cree un arreglo bidimensional de tamaño 6x5 donde las filas corresponden a los grupos y las columnas se
llenarían de la siguiente manera: la primera columna con la matrícula inicial de la facultad y las columnas
de la segunda a la quinta con las cantidades de estudiantes con notas 2, 3, 4 y 5 respectivamente como se
muestra en la figura. Llénelo con números enteros entrados por el usuario que corresponden a las
cantidades de estudiantes para cada caso.
4. Use todos los métodos anteriores para:
a. Dado un grupo y una nota entrada por el usuario imprimir por pantalla la cantidad de estudiantes
que obtuvieron esa nota en ese grupo.
b. Determine cuántos estudiantes del bloque no se presentaron al examen.
c. Dado un grupo, imprimir la nota promedio de los estudiantes de ese grupo.
d. Imprima el número del grupo de mayor porciento de aprobados respecto a los presentados.
e. Imprima un listado ordenado con los números de los grupos según el porciento de calidad de la
nota de sus estudiantes. En dicho listado el grupo de mayor calidad en la nota estaría de primero, el
segundo de mejor calidad estaría a continuación y de último el grupo que tiene menor calidad de la
nota de sus aprobados.

Ejercicio#4

Se quiere analizar un grupo de estudiantes de 1er año según sus notas en las 7 asignaturas del semestre. Para esta
situación se escogieron 5 estudiantes al azar, por lo que quedaría una matriz de 5x7 donde las filas son los
estudiantes (0..4) y las columnas sus asignaturas (0..6). Haga un programa que:

a) Determine cuál(es) son los estudiantes (fila+1) que tienen la mayor nota de los 5 que forman parte del
análisis.
b) Determine el promedio de cada estudiante, almacénelos en un arreglo y muestre los promedios de cada
uno de ellos.
c) Se quiere saber la cantidad de notas de 2 puntos que hay en la matriz.
Ejercicios de alta complejidad

Ejercicio#1

El hospital Carlos Gómez tiene 6 salas y en cada sala existen 10 camas, para el ingreso de pacientes. En
el hospital se desea llevar el control de la cantidad de días que lleva ingresado cada paciente.
Para ello se ha almacenado la información en una matriz de 6x10, donde las filas son las salas y las
columnas el número de la cama. En cada celda se registra la cantidad de días que lleva ingresado el
paciente, sabiendo que un paciente se encuentra en una sala y le pertenece una cama. A continuación se
muestra un ejemplo:

Sala\Cama C 1 C2 C3 C4 C5 C6 C7 C8 C9 C 10
S1 2 6 23 12 1 0 9 5 14 2
S2 8 9 7 3 9 16 1 6 7 6
S3 23 6 4 5 15 0 3 3 4 8
S4 7 4 5 17 8 2 6 19 6 9
S5 9 7 25 16 0 9 8 7 3 7
S6 5 12 0 23 6 12 10 20 25 14

Realice un programa teniendo en cuenta que existe un arreglo bidimensional de nombre matriz, que
almacena la información anterior, realice las siguientes acciones sobre dicho arreglo:

a) Implemente un método que dada una sala, imprima el número de la cama que contiene al
paciente con la mayor cantidad de días de ingreso.
b) Implemente un método que dada una sala, imprima cuántas camas contienen un paciente con
más de 10 días de ingreso.
c) Implemente un método que dada una sala, imprima cuántas camas contienen un paciente con
más de n días de ingreso. Donde n es un valor entrado por el usuario.
d) Implemente un método que dada una sala, imprima cuántas camas contienen un paciente cuya
cantidad de días de ingreso se encuentre en un rango de días entrado por el usuario.
e) Implemente un método que imprima el promedio de días de ingreso que llevan todos los pacientes
del hospital.
f) Implemente un método que imprima cuántas salas tienen al menos una cama vacía.
g) Implemente un método que imprima cuantas salas tienen al menos n camas vacías, donde n es
un valor entrado por el usuario.
h) Implemente un método que imprima la sala que tiene como promedio la mayor cantidad de
pacientes ingresados.

Ejercicio#2
La oficina nacional de transporte desea poder realizar la gestión y análisis estadístico de las vías
terrestres, aéreas, férreas o marítimas existentes entre los municipios de nuestro país.
Para ello se cuenta con una matriz booleana de NxN donde N es la cantidad de municipios del país. Cada
elemento de la matriz almacena true si existe un camino adyacente del municipio i al municipio j y false
en otro caso, donde i es el número correspondiente a la fila y j es el número correspondiente a la columna
de la matriz.

Ejemplo: Sean los municipios del país Fomento, Cabaiguán, Placetas y Sancti Spíritus, entonces la
matriz es de 4x4. Donde para la representación de vías siguiente existe camino del municipio 0
(Fomento) al municipio 2 (Placetas) pero no existe camino del municipio 2(Placetas) al municipio 0
(Fomento):

Sancti
Fomento Cabaiguán Placetas
Municipio Spíritus
0 1 2
3
Fomento
true true true false
0
Cabaiguán
true true true true
1
Placetas
false true true false
2
Sancti
Spíritus false true false true
3

a) Implemente un método de nombre InsertarVia, que reciba como parámetro una matriz de
boolean y dos números enteros que representan la fila correspondiente al municipio origen y la
columna correspondiente al municipio destino. Y permita registrar (poner en valor true) una vía
adyacente de el municipio origen al municipio destino pasados por parámetro.
b) Implemente un método de nombre EliminarVia, que reciba como parámetro una matriz de
boolean y dos números enteros que representan la fila correspondiente al municipio origen y la
columna correspondiente al municipio destino. Y permita eliminar (poner en valor false) una vía
adyacente de el municipio origen al municipio destino pasados por parámetro.
c) Implemente un método de nombre ExisteViaAdyacente, que reciba como parámetro una matriz
de boolean y dos números enteros que representan la fila correspondiente al municipio origen y la
columna correspondiente al municipio destino. Y permita verificar si existe vía adyacente del
municipio origen al municipio destino pasados por parámetro.
d) Realice un programa principal que:
1. Dada una cantidad de municipios entrada por el usuario cree una matriz de cantidad de
municipios X cantidad de municipios.
2. Permita Insertar una vía entre dos municipios (origen, destino) entrados por el usuario.
3. Dado un origen A y un destino B muestre si existe o no vía adyacente de A a B.

Agregue al ejercicio 2 de la CP las siguientes funcionalidades

a) Implemente un método de nombre ExisteCamino, que reciba como parámetro una matriz
de boolean y 3 números enteros que representan al municipio origen, al municipio
intermedio al municipio destino. Retorna true si existe camino del municipio origen al
municipio destino pasando únicamente por el municipio intermedio pasados por parámetro.
Retorna false en otro caso.
b) Implemente un método de nombre CantDestinoDesde, que reciba como parámetro una
matriz de boolean y un número entero que representa al municipio origen. Retorna a
cuántos municipios destino se puede ir desde el municipio origen pasado por parámetro.
c) Implemente un método de nombre CantOrigenLleganA, que reciba como parámetro una
matriz de boolean y un número entero que representa al municipio destino. Retorna desde
cuántos municipios origen se puede llegar al municipio destino pasado por parámetro.
d) Implemente un método de nombre
PosLugarConMayorNroViasSalientes, que reciba como parámetro una matriz de
boolean y retorne la posición de la región con mayor número de vías saliente.
e) Implemente un método de nombre
PosLugarConMayorNroViasEntrantes, que reciba como parámetro una matriz de
boolean y retorne la posición de la región con mayor número de vías entrantes.

Agregue al programa principal creado para el ejercicio 2, las siguientes operaciones:

1. Dado un origen A, un destino B y un municipio intermedio C muestre si existe o no camino


de A a B pasando únicamente por C.
2. Muestre a cuántos destinos se pueden ir desde un origen entrado por el usuario.
3. Muestre de cuántos orígenes se puede llegar a un destino entrado por el usuario.
4. Muestre la posición del municipio con mayor número de vías salientes.

3. Entre 1990 y 2015 el forzamiento radiativo –que provoca un efecto de calentamiento del clima–
experimentó un incremento del 37% a causa de los gases de efecto invernadero de larga duración, tales
como el dióxido de carbono (CO2), el metano (CH4) y el óxido nitroso (N2O), resultantes de las
actividades industriales, agrícolas y domésticas. En 2015 la concentración atmosférica media mundial
de dióxido de carbono en la atmósfera alcanzó por primera vez el umbral simbólico y, a la vez,
significativo de 400 partes por millón, y se disparó de nuevo en 2016, alcanzando nuevos récords. En la
tabla mostrada a continuación se referencia datos emitidos por la Organización Meteorológica Mundial
(OMM) sobre la concentración quinquenal de CO2, CH4 y N2O medidos en ppmm (parte por miles de
millones de moléculas de aire) en la atmosfera desde el año 1985. Dada la información anterior,
codifique la solución para los siguientes problemas:
Gases 1985 1990 1995 2000 2005 2010 2015
Dióxido de carbono (CO2) 345000 354000 361000 371000 380000 390000 401000
Metano (CH4) 1650 1725 1760 1790 1795 1810 1860
Óxidos nitrosos (N2O) 304 308 311 315 319 323 328
Tabla 1 Fuente Organización Meteorológica Mundial (http://public.wmo.int)

a. Si es conocido que los niveles de CO2 en la era preindustrial (antes de la Primera Revolución
Industrial), eran de un 278000 ppmm, determine en qué proporción ha aumentado para el año 2015
la concentración de este gas.
b. Los científicos han determinado que a partir de 1.8 ppm, la concentración de metano pudiese ser
irreversible. Determine en cuantos quinquenios la concentración de metano en la atmosfera ha
superado el umbral de las 1800 ppm.
c. Como muestra la tabla, la concentración del metano y los óxidos nitrosos en la atmósfera es mucho
menor en comparación con el CO2. Determine para el año 2005, que porciento le corresponde a
cada cual del total de la concentración para estos tres gases.
d. Calcule para cada quinquenio, cuál ha sido la variación en el aumento de la concentración del
dióxido de carbono comenzando desde el 2015 hasta el 1990. Muestre esa información a los
usuarios.

1. La Empresa Forestal Habana (EFH) lleva un registro mensual del Valor Agregado Bruto (indicador
económico, índice que toma valores entre 0 y 1) desde el año 2000 hasta el 2009. Este valor es el
principal indicador para la formación del salario para el Pago por Resultados, en correspondencia con la
Resolución 6/2016 del Ministerio de Trabajo y Seguridad Social. El pago de los salarios se realiza
según los siguientes datos:

Usted debe de ayudar a los compañeros de la EFH a analizar cómo se hubiese comportado el Pago por
Resultados de haberse comenzado a aplicar desde el año 2000, con las siguientes problemáticas:

a. Los datos mostrados en la tabla no se adecuan a los valores de un índice pues deberían de estar
entre 0 y 1. Convierta cada valor almacenado en la matriz que describe el problema, para que se
comporte como un índice. Para esto usted debe dividir cada valor entre 100.
b. Determine cuántas veces se hubiese tenido que pagar el salario básico durante toda la década.
c. De las tres categorías (Salario Básico, Salario Doble y Salario triple), diga cuál es la que más se
hubiese repetido en
d. Determine cuál de los dos semestres hubiese sido más provechoso para los trabajadores desde el
año 2000 hasta el 2005.
6 – Desarrolle un subprograma que reciba dos arreglos por parámetro y retorne un arreglo con la multiplicación
vectorial de los arreglos recibidos inicialmente.

7 – Desarrolle un subprograma que dado dos arreglos de las notas de los estudiantes de los grupos FT115 y FT116
respectivamente, retorne un arreglo con las notas de los estudiantes aprobados.

12 – En un tablero de ajedrez son ubicados un rey y varias torres. Se desea conocer si el rey está en jaque por
alguna de las torres. La posición del rey y las torres en el tablero está descrito por una matriz de caracteres de 8 X 8.
El carácter R representa la posición del rey en el tablero, cada T representa la posición de una torre, el # representa
una casilla vacía en el tablero. Dada la descripción del tablero desarrolle un programa que imprima YES o NO en
caso de que el rey se encuentre en jaque.

Ejemplo de entrada:

##T####T
###R#T##
######T#
###T####
########
######T#
TT######
######T#
Salida:
YES