Ejercicios de Programación en Java
Ejercicios de Programación en Java
Ejercicios de Programación en Java
Condicionales, Bucles, Tablas y Funciones
F.M. Pérez Montes
www.detodoprogramacion.com
Esta obra está publicada bajo una licencia:
Creative Commons Reconocimiento-No Comercial-Sin Obra Derivada 3.0 España,
que le permite copiar, distribuir y comunicar públicamente la obra, siempre y cuando reconozca el
crédito del autor, lo haga sin fines comerciales y no altere, transforme o genere una obra derivada a partir de ésta.
ISBN: 978-84-614-7595-7.
www.detodoprogramacion.com
A mi hija Claudia,
la solución a todos los problemas.
www.detodoprogramacion.com
www.detodoprogramacion.com
AGRADECIMIENTOS
A todos los que han hecho posible este libro.
En especial a mi amigo y compañero: Alfonso Jiménez,
por sus innumerables correcciones y por la clase Entrada.
www.detodoprogramacion.com
ÍNDICE
www.detodoprogramacion.com
PRÓLOGO
Volviendo al piano: una vez que dominamos la relación tecla/nota, un pianista debe
aprender muchas otras cosas para que aquello que está tocando suene bien; esto sería saber
tocar el piano. Para saber programar, no basta saber cómo funciona una instrucción sino saber
www.detodoprogramacion.com
utilizarla conjuntamente con otras, en el orden y la forma adecuadas para que la aplicación
que estamos creando suene bien.
Esta obra no es un libro para aprender java ni sus numerosas bibliotecas, es un libro
que por medio de ejercicios resueltos, desde cero, y con la práctica facilita la asimilación
de las técnicas de programación. Para aprender a programar la mejor forma es desvincular la
lógica de la aplicación (cómo hacerlo) del lenguaje utilizado para implementarlo. Dicho en
otras palabras: lo mejor es utilizar seudocódigo (un lenguaje teórico de alto nivel) donde no
tengamos que preocuparnos por las particularidades del lenguaje de programación, ni por la
rigidez de su sintaxis. El inconveniente de utilizar seudocódigo es que el lector no tiene
nada tangible, nada con lo que se pueda comprobar el buen funcionamiento de la aplicación;
por este motivo se ha decidido utilizar Java. Esta elección se justifica frente a otras
alternativas, como el lenguaje C, que también es muy didáctico, simplemente por el hecho de
que con Java podemos abstraernos un poco más, al ser un lenguaje de más alto nivel. También
hay que decir que en la medida de lo posible no profundizaremos en las bibliotecas del
lenguaje; en otras ocasiones esto será totalmente imposible de llevar a la práctica y hemos
de trabajar con los detalles.
Para finalizar, desearía comentar que el libro se estructura como un conjunto de
boletines de ejercicios que se resuelven de la forma más didáctica posible. Un programador
www.detodoprogramacion.com
experto seguramente encontrará soluciones mucho más elegantes y eficientes. Aquí nuestro
principal objetivo es que el lector entienda qué está haciendo y por qué lo hace.
Si el lector se enfrenta a la tarea de aprender a programar, este libro, junto con las
clases que pueda recibir en una facultad, escuela técnica o ciclo formativo de grado
superior, serán una ayuda eficaz para llevar a cabo su objetivo. Esta tarea debe tomarse sin
prisas, entendiendo los detalles sutiles y dedicando mucho tiempo a la práctica.
www.detodoprogramacion.com
INTRODUCCIÓN
Este libro está compuesto como una colección de boletines de ejercicios (se encuentran
disponibles en el Apéndice I). En cada boletín se resuelven ejercicios con una temática común, de la
siguiente forma:
Los ejercicios no tienen solución única, aquí se plantea la más didáctica y fácil de entender,
dejando de lado la eficiencia. Cuando existen distintas soluciones, utilizando distintos enfoques, se
incluye más de una solución por ejercicio.
La resolución de los ejercicios de programación, son el complemento ideal para las clases de
programación impartidas en una facultas, escuela técnica o ciclo formativo de grado superior.
www.detodoprogramacion.com
Otro aspecto importante es la entrada por teclado, algo primordial para poder introducir datos y
probar nuestros programas. En un principio el alumno no debe tener los conocimientos necesarios para
escribir el código que le proporcione dicha entrada. Algo similar ocurre en las asignaturas de
programación, lo que plantea el problema de empezar a explicar código y funciones que se escapan al
programador novel.
Por todo esto, se ha diseñado la clase Entrada, que permite realizar de forma transparente la
entrada por teclado. Aprender a utilizarla es sencillo y proporciona una herramienta cómoda y fiable
para dejar de preocuparnos por la entrada de datos. La clase Entrada se encuentra en el Apéndice II.
Las funciones que proporciona la clase Entrada son:
www.detodoprogramacion.com
Boletín 1
Variables y condicionales
1. Pedir los coeficientes de una ecuación se 2º grado, y muestre sus soluciones reales. Si no existen,
debe indicarlo.
package bol01ej01;
// calculamos el determinante
d=((b*b)-4*a*c);
if(d<0)
System.out.println("No existen soluciones reales");
else{
// queda confirmar que a sea distinto de 0.
www.detodoprogramacion.com
// si a=0 nos encontramos una división por cero.
x1=(-b+Math.sqrt(d))/(2*a);
x2=(-b-Math.sqrt(d))/(2*a);
System.out.println("Solución: " + x1);
System.out.println("Solución: " + x2);
}
}
}
package bol01ej02;
System.out.println("El área de una circunferencia de radio " + r+ " es: " + a);
}
}
package bol01ej03;
www.detodoprogramacion.com
public static void main(String[] args) {
double l,r; // longitud y radio
l=2*Math.PI*r;
System.out.println("La longitud de una circunferencia de radio " + r+ " es: " + l);
}
}
package bol01ej04;
if(n1==n2)
System.out.println("Son iguales");
else
System.out.println("No son iguales");
}
}
www.detodoprogramacion.com
5. Pedir un número e indicar si es positivo o negativo.
package bol01ej05;
package bol01ej06;
www.detodoprogramacion.com
if(n1%n2==0)
System.out.println("Son múltiplos");
else
System.out.println("No son múltiplos");
}
}
package bol01ej07;
www.detodoprogramacion.com
8. Pedir dos números y decir cual es el mayor o si son iguales.
package bol01ej08;
if(n1==n2)
System.out.println("Son iguales");
else
{
if(n1>n2)
System.out.println(n1 + " es mayor que " + n2);
else
System.out.println(n2 + " es mayor que " + n1);
}
}
}
package bol01ej09;
www.detodoprogramacion.com
System.out.print("Introduce un número: ");
n1=Entrada.entero();
System.out.print("Introduce otro número: ");
n2=Entrada.entero();
if(n1>n2)
System.out.println(n1 + " y " + n2);
else
System.out.println(n2 + " y " + n1);
}
}
package bol01ej10;
www.detodoprogramacion.com
else{
if(b>a && a>c)
System.out.println(b+", "+a+", "+c);
else{
if(b>c && c>a)
System.out.println(b+", "+c+", "+a);
else{
if(c>a && a>b)
System.out.println(c+", "+a+", "+b);
else{
if(c>b && b>a)
System.out.println(c+", "+b+", "+a);
}
}
}
}
}
}
}
package bol01ej11;
if(num<10)
System.out.println("tiene 1 cifra");
www.detodoprogramacion.com
else{
if(num<100)
System.out.println("tiene 2 cifras");
else{
if(num<1000)
System.out.println("tiene 3 cifras");
else{
if(num<10000)
System.out.println("tiene 4 cifras");
else{
if(num<100000)
System.out.println("tiene 5 cifras");
}
}
}
}
}
}
12. Pedir un número entre 0 y 9.999 y mostrarlo con las cifras al revés.
package bol01ej12;
www.detodoprogramacion.com
System.out.print("Introduzca un número entre 0 y 99.999: ");
num=Entrada.entero();
// unidad
u = num % 10;
num = num / 10;
// decenas
d = num % 10;
num = num / 10;
// centenas
c = num % 10;
num = num / 10;
// unidades de millar
um = num % 10;
num = num / 10;
// decenas de millar
dm = num;
// lo imprimimos al revés:
System.out.println (u + " " + d + " " + c + " " + um + " " + dm);
package bol01ej13;
www.detodoprogramacion.com
public class Main {
// unidad
u = num % 10;
num = num / 10;
// decenas
d = num % 10;
num = num / 10;
// centenas
c = num % 10;
num = num / 10;
// unidades de millar
um = num % 10;
num = num / 10;
// decenas de millar
dm = num;
// el número será capicúa si las cifras son iguales dos a dos por los extremos
// las centenas no las tenemos en cuenta
www.detodoprogramacion.com
if (dm == u && um == d)
System.out.println ("el número es capicúa");
else
System.out.println ("el número NO es capicúa");
// hay que tener en cuenta que en este ejercicio el número 121 es similar al 00121 y
// resulta que 121 es capicúa, pero nuestro código lo identifica como NO capicúa. Ya
// que trabajamos con el 00121. No tendremos en cuenta este pequeño error.
}
}
package bol01ej13;
// En esta versión haremos que el número 121 ó el 33 sea visto como capicúa.
// La idea es no tener en cuenta los ceros por la derecha.
// unidad
u = num % 10;
num = num / 10;
www.detodoprogramacion.com
// decenas
d = num % 10;
num = num / 10;
// centenas
c = num % 10;
num = num / 10;
// unidades de millar
um = num % 10;
num = num / 10;
// decenas de millar
dm = num;
if (capicua)
System.out.println ("el número es capicúa");
www.detodoprogramacion.com
else
System.out.println ("el número NO es capicúa");
}
}
package bol01ej14;
// tanto los if's como los else's encierran a una sola instrucción
// y no es necesario utilizar llaves { }
www.detodoprogramacion.com
if(nota==9 || nota==10 )
System.out.println("SOBRESALIENTE");
}
}
package bol01ej14b;
switch(nota){
case 0:
case 1:
case 2:
case 3:
case 4:
System.out.println("INSUFICIENTE");
break;
case 5:
System.out.println("SUFICIENTE");
break;
case 6:
System.out.println("BIEN");
break;
case 7:
case 8:
System.out.println("NOTABLE");
break;
case 9:
www.detodoprogramacion.com
case 10:
System.out.println("SOBRESALIENTE");
break;
default:
System.out.println("ERROR");
break;
}
}
}
15. Pedir el día, mes y año de una fecha e indicar si la fecha es correcta. Suponiendo todos los meses de
30 días.
package bol01ej15;
www.detodoprogramacion.com
if (año != 0)
System.out.println ("Fecha correcta");
else
System.out.println ("Año incorrecto");
else
System.out.println("Mes incorrecto");
else
System.out.println("Día incorrecto");
}
}
16. Pedir el día, mes y año de una fecha e indicar si la fecha es correcta. Con meses de 28, 30 y 31 días.
Sin años bisiestos.
package bol01ej16;
www.detodoprogramacion.com
System.out.println(dia + "/" + mes + "/" + año+": Fecha correcta");
else{
if((mes==4 || mes==6 || mes==9 || mes==11) &&
(dia>=1 && dia<=30))
System.out.println(dia + "/" + mes + "/" + año+": Fecha correcta");
else{
if( (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12) &&
(dia>=1 && dia<=31))
System.out.println(dia + "/" + mes + "/" + año+": Fecha correcta");
else
System.out.println("Fecha incorrecta");
}
}
}
}
}
package bol01ej16;
int dias_del_mes;
boolean fecha_correcta=true;
www.detodoprogramacion.com
dias_del_mes = 0; // si se utiliza un mes fuera del rango 1..12
// supondremos que los días del mes son 0.
if(mes==2 )
dias_del_mes = 28;
if(mes==4 || mes==6 || mes==9 || mes==11)
dias_del_mes = 30;
if(mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12)
dias_del_mes = 31;
if (fecha_correcta)
System.out.println(dia + "/" + mes + "/" + año+": Fecha correcta");
else
System.out.println("Fecha incorrecta");
}
}
17. Pedir el día, mes y año de una fecha correcta y mostrar la fecha del día siguiente. suponer que todos
los meses tienen 30 días.
package bol01ej17;
www.detodoprogramacion.com
public static void main(String[] args) {
int dia,mes,año;
// incrementamos el día
dia ++;
if (año == 0)
año = 1;
www.detodoprogramacion.com
System.out.println (dia + "/"+ mes + "/" + año);
}
}
18. Ídem que el ej. 17, suponiendo que cada mes tiene un número distinto de días (suponer que febrero tiene
siempre 28 días).
package bol01ej18;
if(mes==2 )
dias_del_mes = 28;
if(mes==4 || mes==6 || mes==9 || mes==11)
dias_del_mes = 30;
if(mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12)
dias_del_mes = 31;
// incrementamos el día
dia ++;
www.detodoprogramacion.com
// si el día supera el número de días del mes,
// lo reiniciamos a 1 e incrementamos el mes
if (año == 0)
año = 1;
19. Pedir dos fechas y mostrar el número de días que hay de diferencia. Suponiendo todos los meses de 30
días.
package bol01ej19;
www.detodoprogramacion.com
public static void main(String[] args) {
int dia1,mes1,año1;
int dia2,mes2,año2;
int total_dias;
20. Pedir una hora de la forma hora, minutos y segundos, y mostrar la hora en el segundo siguiente.
package bol01ej20;
www.detodoprogramacion.com
public class Main {
www.detodoprogramacion.com
21. Pedir una nota numérica entera entre 0 y 10, y mostrar dicha nota de la forma: cero, uno, dos, tres...
package bol01ej21;
case 1:
System.out.println("UNO");
break;
case 2:
System.out.println("DOS");
break;
case 3:
System.out.println("TRES");
break;
case 4:
System.out.println("CUATRO");
break;
case 5:
System.out.println("CINCO");
break;
www.detodoprogramacion.com
case 6:
System.out.println("SEIS");
break;
case 7:
System.out.println("SIETE");
break;
case 8:
System.out.println("OCHO");
break;
case 9:
System.out.println("NUEVE");
break;
case 10:
System.out.println("DIEZ");
break;
}
}
}
22. Pedir un número de 0 a 99 y mostrarlo escrito. Por ejemplo, para 56 mostrar: cincuenta y seis.
package bol01ej22;
www.detodoprogramacion.com
// se puede poner algunos condicionales para los números especiales: 11,12,...
// y otro condicional para mostrar "y"
switch(decenas){
case 0:
System.out.print("");
break;
case 1:
System.out.print("diez");
break;
case 2:
System.out.print("veinte");
break;
case 3:
System.out.print("treinta");
break;
case 4:
System.out.print("cuarenta");
break;
case 5:
System.out.print("cincuenta");
break;
case 6:
System.out.print("sesenta");
www.detodoprogramacion.com
break;
case 7:
System.out.print("setenta");
break;
case 8:
System.out.print("ochenta");
break;
case 9:
System.out.print("noventa");
break;
}
switch(unidades){
case 0:
System.out.println("");
break;
case 1:
System.out.println("uno");
break;
case 2:
System.out.println("dos");
break;
case 3:
System.out.println("tres");
break;
case 4:
System.out.println("cuatro");
www.detodoprogramacion.com
break;
case 5:
System.out.println("cinco");
break;
case 6:
System.out.println("seis");
break;
case 7:
System.out.println("siete");
break;
case 8:
System.out.println("ocho");
break;
case 9:
System.out.println("nueva");
break;
}
}
}
www.detodoprogramacion.com
Boletín 2
Condicionales y bucles
1. Leer un número y mostrar su cuadrado, repetir el proceso hasta que se introduzca un número
negativo.
package bol02ej01;
www.detodoprogramacion.com
2. Leer un número e indicar si es positivo o negativo. El proceso se repetirá hasta que se introduzca
un 0.
package bol02ej02;
3. Leer números hasta que se introduzca un 0. Para cada uno indicar si es par o impar.
package bol02ej03;
www.detodoprogramacion.com
public class Main {
4. Pedir números hasta que se teclee uno negativo, y mostrar cuántos números se han introducido.
package bol02ej04;
www.detodoprogramacion.com
// num guardará los números introducidos
// y contador se incrementará para llevar la cuenta de los números introducidos
5. Realizar un juego para adivinar un número. Para ello pedir un número N, y luego ir pidiendo
números indicando “mayor” o “menor” según sea mayor o menor con respecto a N. El proceso termina
cuando el usuario acierta.
package bol02ej05;
www.detodoprogramacion.com
// n es el número que hay que acertar
// num guarda los números introducidos
System.out.print("Introduce N: ");
n =Entrada.entero();
System.out.println("acertaste...");
}
}
package bol02ej05;
www.detodoprogramacion.com
n=(int)(Math.random()*100)+1;
// en lugar de pedir n... podemos hacer que se n tome un valor
// aleatorio entre 1 y 100.
// Así el juego es algo más entretenido.
System.out.println("acertaste...");
}
}
6. Pedir números hasta que se teclee un 0, mostrar la suma de todos los números introducidos.
package bol02ej06;
www.detodoprogramacion.com
int num,suma;
suma=0;
do
{
System.out.print("Introduzca un número: ");
num=Entrada.entero();
suma=suma+num;
}
while(num!=0);
}
}
package bol02ej07;
www.detodoprogramacion.com
System.out.print("Introduzca un número: ");
num=Entrada.entero();
suma= 0;
elementos= 0;
package bol02ej08;
www.detodoprogramacion.com
int i,num;
i=1;
// i es el contador que tomará los valores de 1 a n
while(i<=num){
System.out.println(i);
i++;
}
}
}
package bol02ej09;
// inicializamos la i a 100
// mientras la i sea mayor o igual a 0
// y en cada vuelta del for la i se decrementa en 7
for (int i=100;i>=0;i-=7)
System.out.println(i);
www.detodoprogramacion.com
10. Pedir 15 números y escribir la suma total.
package bol02ej10;
suma_total=0;
suma_total=suma_total+num;
}
System.out.println("La suma total es de: "+suma_total);
}
}
11. Diseñar un programa que muestre el producto de los 10 primeros números impares.
package bol02ej11;
www.detodoprogramacion.com
el producto siempre valdrá 0.
}
}
package bol02ej12;
www.detodoprogramacion.com
factorial=1; // es importante inicializarlo a 1, ya que multiplicará-
13. Pedir 10 números. Mostrar la media de los números positivos, la media de los números negativos y
la cantidad de ceros.
package bol02ej13;
www.detodoprogramacion.com
cont_ceros=0;
cont_pos=0;
cont_neg=0;
suma_pos=0;
suma_neg=0;
if(num==0)
cont_ceros++;
else
{
if(num>0)
{
cont_pos++;
suma_pos+=num;
}
else
{
cont_neg++;
suma_neg+=num;
}
}
}
www.detodoprogramacion.com
else
{
media_pos= (float)suma_pos/cont_pos;
System.out.println("Media de los positivos: "+ media_pos);
}
package bol02ej14;
www.detodoprogramacion.com
suma=suma+sueldo;
}
System.out.println("Mayores de 1000 hay: "+mayor_1000);
System.out.println("la suma es de: "+suma);
}
}
15. Dadas las edades y alturas de 5 alumnos, mostrar la edad y la estatura media, la cantidad de
alumnos mayores de 18 años, y la cantidad de alumnos que miden más de 1.75.
package bol02ej15;
mayor_edad=0;
media_altura=0;
mayor_175=0;
suma_edad=0;
suma_alt=0;
www.detodoprogramacion.com
if(altura>1.75)
mayor_175++;
suma_edad=suma_edad+edad;
suma_alt=suma_alt+altura;
}
media_edad=suma_edad/5;
media_altura=suma_alt/5;
16. Pide un número (que debe estar entre 0 y 10) y mostrar la tabla de multiplicar de dicho número.
package bol02ej16;
do
{
System.out.print("Introduce número (de 0 a 10): ");
num=Entrada.entero();
}
www.detodoprogramacion.com
while ( ! (0<=num && num<=10));
}
}
}
17. Una empresa que se dedica a la venta de desinfectantes necesita un programa para gestionar las
facturas. En cada factura figura: el código del artículo, la cantidad vendida en litros y el
precio por litro.
Se pide de 5 facturas introducidas: Facturación total, cantidad en litros vendidos del artículo 1
y cuantas facturas se emitieron de más de 600 €.
package bol02ej17;
www.detodoprogramacion.com
int mas_600; // contador que sirve para llevar la cuenta de cuantas facturas hay de
más de 600 €
facturacion_total = 0;
litros_cod1 = 0;
mas_600 = 0;
importe_factura = litros*precio;
facturacion_total += importe_factura;
if (codigo == 1)
litros_cod1 += litros;
System.out.println("\n\n\nResumen de ventas\n");
// facturación total
System.out.println("La facturación total es de: " +facturacion_total + "€");
www.detodoprogramacion.com
// litros del articulo 1
System.out.println("Ventas del producto 1: " + litros_cod1 + " litros");
18. Igual que el anterior pero suponiendo que no se introduce el precio por litro. Solo existen tres
productos con precios:
1- 0,6 €/litro, 2- 3 €/litro y 3- 1,25 €/litro.
package bol02ej18;
int mas_600; // contador que sirve para llevar la cuenta de cuantas facturas hay de
más de 600 €
facturacion_total = 0;
www.detodoprogramacion.com
litros_cod1 = 0;
mas_600 = 0;
switch (codigo)
{
case 1:
precio = 0.6f;
break;
case 2:
precio = 3f;
break;
case 3:
precio = 1.25f;
break;
default:
precio = 0; // este caso no debe darse
}
importe_factura = litros*precio;
facturacion_total += importe_factura;
if (codigo == 1)
www.detodoprogramacion.com
litros_cod1 += litros;
}
}
19. Dadas 6 notas, escribir la cantidad de alumnos aprobados, condicionados (=4) y suspensos.
package bol02ej19;
aprobados=0;
suspensos=0;
www.detodoprogramacion.com
condicionados=0;
if(nota == 4)
condicionados++;
else
if(nota >= 5)
aprobados++;
else
if(nota < 4) // este if sobra, ya que es el único caso posible
suspensos++;
package bol02ej20;
www.detodoprogramacion.com
int sueldo, sueldo_max;
int n;
System.out.println("--------");
package bol02ej20;
www.detodoprogramacion.com
boolean primer_sueldo_asignado;
// esta bandera indica si hemos asignado el primer sueldo como sueldo máximo
// con esto podremos tener sueldos negativos
primer_sueldo_asignado = false;
System.out.println("--------");
if (primer_sueldo_asignado == false)
{
// asignamos como máximo el primer sueldo leído
sueldo_max = sueldo;
primer_sueldo_asignado = true;
}
www.detodoprogramacion.com
21. Pedir 10 números, y mostrar al final si se ha introducido alguno negativo.
package bol02ej21;
hay_negativo =false;
// suponemos que no habrá ningún negativo
if(num<0)
hay_negativo =true;
// si num es menor que cero, cambiamos el valor de hay_negativo a true
if(hay_negativo == true)
System.out.println("Se ha introducido algún número negativo");
else
System.out.println("No hay ningún número negativo");
}
}
www.detodoprogramacion.com
22. Pedir 5 calificaciones de alumnos y decir al final si hay algún suspenso.
package bol02ej22;
if(notas<5)
suspensos=true;
}
if(suspensos)
System.out.println("Hay alumnos suspensos");
else
System.out.println("No hay suspensos");
}
}
package bol02ej23;
www.detodoprogramacion.com
public static void main(String[] args) {
int num;
boolean multiplo_3;
multiplo_3=false;
if(num %3 == 0)
multiplo_3=true; // si se ejecuta esta instrucción significa que al menos hay un múltiplo
de 3.
}
if(multiplo_3 == false)
System.out.println("no existen múltiplos de 3");
else
System.out.println("Hay múltiplos de 3");
}
}
www.detodoprogramacion.com
Boletín 3
Bucles anidados
1. Realiza detenidamente una traza al siguiente programa y muestra cual seria la salida por pantalla:
PROGRAMA ej_1
VARIABLES
suma, i, j: ENTERO
COMIENZO
PARA i <- 1 HASTA 4
PARA j <- 3 HASTA 0 INC -1
suma <- i*10+j
escribir (suma)
FIN PARA
FIN PARA
FIN
www.detodoprogramacion.com
package bol03ej01;
2. Realiza una traza del siguiente algoritmo y muestra la salida generada por pantalla.
PROGRAMA ej_1
VARIABLES
i, j: ENTERO
COMIENZO
PARA i <- 1 HASTA 3
j <- i+1
MIENTRAS j < 4
escribir (j-i)
j <- j+1
FIN MIENTRAS
FIN PARA
FIN
www.detodoprogramacion.com
package bol03ej02;
3. Diseña una aplicación que muestre las tablas de multiplicar del 1 al 10.
package bol03ej03;
for (i=1;i<=10;i++)
www.detodoprogramacion.com
{
System.out.println (tabla + " x " + i + " = " + tabla*i);
}
}
}
}
package bol03ej04;
www.detodoprogramacion.com
5. Necesitamos mostrar un contador con 5 dígitos (X-X-X-X-X), que muestre los números del 0-0-0-0-0
al 9-9-9-9-9, con la particularidad que cada vez que aparezca un 3 lo sustituya por una E.
package bol03ej05;
if(i==3)
System.out.print("E");
else
System.out.print(i);
if(j==3)
System.out.print("E");
else
System.out.print(j);
if(k==3)
System.out.print("E");
else
System.out.print(k);
if(l==3)
System.out.print("E");
else
System.out.print(l);
if(m==3)
www.detodoprogramacion.com
System.out.print("E");
else
System.out.print(m);
System.out.println(" ");
}
}
}
}
}
}
}
6. Realizar un programa que nos pida un número n, y nos diga cuantos números hay entre 1 y n que son
primos.
package bol03ej06;
cont_pri=0;
System.out.print("Introduce numero: ");
num=Entrada.entero();
www.detodoprogramacion.com
// para cada número i, calcularemos si es primo
// veremos si el número i es divisible en el rango 2..i-1
// El bucle while se puede hacer con menos vuelta... consultar algoritmos para primos
primo=true;
j=2;
while (j<=i-1 && primo==true)
{
if (i%j==0)
primo=false;
j++;
}
if (primo==true){
cont_pri++; // si es primo incrementamos el contador de primos
System.out.println(i+(" es primo"));
}
}
System.out.println("En el rango 1.." + num + ", hay "+ cont_pri + " números primos");
}
}
www.detodoprogramacion.com
Boletín 4
Tablas
package bol04ej01;
t = new int[5];
www.detodoprogramacion.com
2. Leer 5 números y mostrarlos en orden inverso al introducido.
package bol04ej02;
3. Leer 5 números por teclado y a continuación realizar la media de los números positivos, la media
de los negativos y contar el número de ceros.
package bol04ej03;
www.detodoprogramacion.com
suma_pos=0;
cont_pos=0;
suma_neg=0;
cont_neg=0;
cont_cero=0;
if(cont_neg==0)
System.out.println("No se puede realizar la media de números negativos");
else
www.detodoprogramacion.com
System.out.println("La media de los negativos: " + (float)suma_neg/cont_neg);
4. Leer 10 números enteros. Debemos mostrarlos en el siguiente orden: el primero, el último, el segundo, el
penúltimo, el tercero, etc.
package bol04ej04;
t = new int[10];
for (i=0;i<10;i++){
System.out.print("Introduzca numero: ");
t[i]=Entrada.entero();
}
for (i=0;i<=4;i++){
System.out.println (t[i]); // mostramos el i-ésimo número por el principio
System.out.println(t[9-i]); // y el i-ésimo por el final
}
www.detodoprogramacion.com
// como en cada vuelta de for se muestran dos números
// para mostrarlos todos, solo necesitaremos la mitad de vueltas.
}
}
5. Leer por teclado dos tablas de 10 números enteros y mezclarlas en una tercera de la forma: el 1º de A, el 1º
de B, el 2º de A, el 2º de B, etc.
package bol04ej05;
a=new int[10];
b=new int[10];
// leemos la tabla a
System.out.println("Leyendo la tabla a");
for (i=0;i<10;i++){
System.out.print("número: ");
a[i]=Entrada.entero();
}
// leemos la tabla b
www.detodoprogramacion.com
System.out.println("Leyendo la tabla b");
for (i=0;i<10;i++){
System.out.print("número: ");
b[i]=Entrada.entero();
}
j=0;
for (i=0;i<10;i++){
c[j]=a[i];
j++;
c[j]=b[i];
j++;
}
System.out.println("");
}
}
6. Leer los datos correspondiente a dos tablas de 12 elementos numéricos, y mezclarlos en una tercera de la
forma: 3 de la tabla A, 3 de la B, otros 3 de A, otros 3 de la B, etc.
package bol04ej06;
www.detodoprogramacion.com
public class Main {
a=new int[12];
b=new int[12];
// leemos la tabla a
System.out.println("Leyendo la tabla a");
for (i=0;i<12;i++){
System.out.print("número: ");
a[i]=Entrada.entero();
}
// leemos la tabla b
System.out.println("Leyendo la tabla b");
for (i=0;i<12;i++){
System.out.print("número: ");
b[i]=Entrada.entero();
}
j=0;
i=0;
www.detodoprogramacion.com
while (i<12)
{
// copiamos 3 de a
for (int k=0;k<3; k++)
{
c[j]=a[i+k];
j++;
}
// copiamos 3 de b
for (int k=0;k<3;k++)
{
c[j]=b[i+k];
j++;
}
System.out.println("");
}
}
www.detodoprogramacion.com
7. Leer por teclado una serie de 10 números enteros. La aplicación debe indicarnos si los números están
ordenados de forma creciente, decreciente, o si están desordenados.
package bol04ej07;
/* creciente decreciente
* false false -> cuando todos los números sean idénticos
* false true -> orden decreciente
* true false -> orden creciente
* true true -> desordenado
*
* si, para algún i, se cumple t[i]>t[i+1]: la serie t[i], t[i+1] es decreciente
*
* o el caso contrario.
*
*/
creciente = false;
decreciente = false;
www.detodoprogramacion.com
// leemos los números
System.out.println("Leyendo números:");
for (i=0;i<10;i++){
System.out.print("número: ");
numeros[i]=Entrada.entero();
}
// comprobaremos el orden
for (i=0;i<9;i++) // usamos i e i+1, por lo que la i solo podrá llegar hasta 8 (ó <9)
{
if (numeros[i] > numeros[i+1]) // en este momento es decreciente
decreciente = true;
if (creciente ==true && decreciente ==false) //toda las parejas están en orden creciente
System.out.println("Serie creciente.");
if (creciente ==false && decreciente ==true) // todas la parejas están en orden decreciente
System.out.println("Serie decreciente.");
}
}
www.detodoprogramacion.com
8. Diseñar una aplicación que declare una tabla de 10 elementos enteros. Leer mediante el teclado 8 números.
Después se debe pedir un número y una posición, insertarlo en la posición indicada, desplazando los que estén
detrás.
package bol04ej08;
// leemos 8 números
System.out.println("Leyendo datos...");
for (int i=0;i<8;i++){
System.out.print("Introduzca número: ");
t[i]=Entrada.entero();
}
www.detodoprogramacion.com
for (int i=7;i>=posicion;i--)
t[i+1]=t[i];
9. Crear un programa que lea por teclado una tabla de 10 números enteros y la desplace una posición hacia
abajo: el primero pasa a ser el segundo, el segundo pasa a ser el tercero y así sucesivamente. El último pasa a
ser el primero.
package bol04ej09;
// leemos la tabla
for (int i=0;i<10;i++){
System.out.print("Introduzca número: ");
t[i]=Entrada.entero();
}
www.detodoprogramacion.com
// desplazamos hacia abajo (de 0 hacia la última posición)
// al desplazar perdemos el último valor, por eso lo hemos guardado antes.
for (int i=8;i>=0;i--)
t[i+1]=t[i];
package bol04ej10;
// leemos la tabla
for (int i=0;i<10;i++){
System.out.print("Introduzca número: ");
t[i]=Entrada.entero();
}
www.detodoprogramacion.com
n = Entrada.entero();
// del ejercicio anterior tenemos una versión que desplaza una sola
// posición. Si repetimos este proceso n veces, conseguiremos
// desplazar n veces.
// este algoritmo es muy fácil de implementar, pero es muy costoso en tiempo.
www.detodoprogramacion.com
public static void main(String[] args) {
int t[]=new int[10];
int n;
// leemos la tabla
for (int i=0;i<10;i++){
System.out.print("Introduzca número: ");
t[i]=Entrada.entero();
}
// en el caso de desplazar una posición: necesitamos guardar solo un elemento (el último que
// pasa a ser el primero)
// en el caso de desplazar dos posiciones: necesitamos guardar dos elementos (penúltimo y
// último, que pasarán a ser primero y segundo)
// como a priori no sabemos cuantos elementos vamos a desplazar, ni cuantos elementos tenemos
// que guardar. Una buena solución es hacer una copia de la tabla completa
www.detodoprogramacion.com
11. Leer 5 elementos numéricos que se introducirán ordenados de forma creciente. Éstos los guardaremos en una
tabla de tamaño 10. Leer un número N, e insertarlo en el lugar adecuado para que la tabla continúe ordenada.
package bol04ej11;
System.out.println();
System.out.print("Número a insertar entre los anteriores: ");
num=Entrada.entero();
sitio_num=0;
j=0;
www.detodoprogramacion.com
for (int i=4; i>=sitio_num; i--)
t[i+1]=t[i];
// por último ponemos num en su sitio para que todo siga ordenado
t[sitio_num]=num;
}
}
12. Leer por teclado una tabla de 10 elementos numéricos enteros y una posición (entre 0 y 9). Eliminar el
elemento situado en la posición dada sin dejar huecos.
package bol04ej12;
www.detodoprogramacion.com
System.out.println();
// desplazamos desde posición hasta el final todos los elementos un lugar hacia la izquierda
// con lo que el elemento que está en posición se pierde (se borra)
}
}
13. Leer 10 enteros. Guardar en otra tabla los elementos pares de la primera, y a continuación los elementos
impares.
Realizar dos versiones: una trabajando con los valores y otra trabajando con los índices.
package bol04ej13;
www.detodoprogramacion.com
*/
t = new int[10];
www.detodoprogramacion.com
if(t[i]%2==0)
{
par[cont_par]=t[i];
cont_par++;
}
else
{
impar[cont_impar]=t[i];
cont_impar++;
}
System.out.println("\n\nTabla par:");
for (int i=0;i<cont_par;i++)
System.out.println(par[i]);
System.out.println("Tabla impar:");
for (int i=0;i<cont_impar;i++)
System.out.println(impar[i]);
}
}
package bol04ej13;
/*
* En esta versión nos fijaremos en los índices pares e impares
* en par se incluirá t[2],t[4]...
* en impar t[1], t[2],...
*/
www.detodoprogramacion.com
int impar[];
t = new int[10];
for (int i=1;i<10;i+=2) // la división entera redondeada hacia el entero más próximo por
impar[i/2] = t[i]; // debajo: 1/2 =0, 3/2 =1, etc.
System.out.println("\n\nTabla par:");
for (int i=0;i<5;i++)
System.out.println(par[i]);
System.out.println("Tabla impar:");
for (int i=0;i<5;i++)
System.out.println(impar[i]);
}
}
www.detodoprogramacion.com
14. Leer dos series de 10 enteros, que estarán ordenados crecientemente. Copiar (fusionar) las dos tablas en
una tercera, de forma que sigan ordenados.
package bol04ej14;
a =new int[10];
b =new int[10];
// leemos a
System.out.println("Datos para a:");
for (i=0;i<10;i++){
System.out.print("Introduzca numero (orden creciente): ");
a[i]=Entrada.entero();
}
// leemos b
System.out.println("\nDatos para b:");
for (i=0;i<10;i++){
System.out.print("Introduzca numero (orden creciente): ");
b[i]=Entrada.entero();
}
System.out.println();
// creamos c
www.detodoprogramacion.com
c = new int [20];
// comenzamos a fusionar a y b en c
i=0; // utilizaremos i como índice de a;
j=0; // utilizaremos j como índice de b;
k=0; // utilizaremos k como índice de c
// cuando salimos de while es por que alguna de las tablas (a o b) ha llegado al final
www.detodoprogramacion.com
{
c[k] = a[i];
i++;
k++;
}
for (k=0;k<20;k++)
System.out.print(c[k] + " ");
System.out.println("");
}
}
15. Leer 10 enteros ordenados crecientemente. Leer N y buscarlo en la tabla. Se debe mostrar la posición en que
se encuentra. Si no está, indicarlo con un mensaje.
package bol04ej15;
System.out.println();
www.detodoprogramacion.com
System.out.println("Introduzca numero a buscar: ");
num=Entrada.entero();
j=0;
while(j<10 && t[j]<num){
j++;
}
16. Queremos desarrollar una aplicación que nos ayude a gestionar las notas de un centro educativo. Cada grupo
(o clase) está compuesto por 5 alumnos. Se pide leer las notas del primer, segundo y tercer trimestre de un
grupo. Debemos mostrar al final: la nota media del grupo en cada trimestre, y la media del alumno que se
encuentra en la posición N (N se lee por teclado).
package bol04ej16;
www.detodoprogramacion.com
public static void main(String[] args) {
int primer[], segundo[], tercer[]; // notas del primer, segundo y tercer trimestre
int num,i;
// el programa consta de dos partes: entrada de datos y procesado. Se podrían procesar las
// notas mientras se leen. Preferimos utilizar dos bloques por tener un código más legible.
www.detodoprogramacion.com
}
// mostramos datos
System.out.println("Media primer trimestre: "+ suma_primer/5.0);
System.out.println("Media segundo trimestre: "+ suma_segundo/5.0);
System.out.println("Media tercer trimestre: "+ suma_tercer/5.0);
System.out.println();
www.detodoprogramacion.com
Boletín 5
Tablas n-dimensionales
1. Crear una tabla bidimensional de tamaño 5x5 y rellenarla de la siguiente forma: la posición T[n,m]
debe contener n+m. Después se debe mostrar su contenido.
package bol05ej01;
System.out.println("TABLA: ");
www.detodoprogramacion.com
for (int i=4;i>=0;i--)
{
System.out.println();
for (int j=0;j<5;j++)
{
System.out.print(t[i][j]+" ");
}
}
}
}
2. Crear y cargar una tabla de tamaño 4x4 y decir si es simétrica o no, es decir si se obtiene la
misma tabla al cambiar las filas por columnas.
package bol05ej02;
t = new int[4][4];
for (i=0;i<4;i++)
{
for (j=0;j<4;j++)
{
System.out.print("Introduzca elemento ["+i+"]["+j+"]: ");
t[i][j]=Entrada.entero();
}
www.detodoprogramacion.com
}
//una solución es mirar todos los elementos de la matriz, pero se hacen comprobaciones
// dobles, un ejemplo: comprobamos t[1][2] con t[2][1]... pero más tarde comprobaremos
// t[2][1] con t[1][2]
i=0;
while(i<4 && simetrica==true){
j=0;
while(j<i && simetrica==true){
if(t[i][j]!=t[j][i])
simetrica=false;
j++;
}
i++;
}
if(simetrica)
System.out.println("SIMETRICA");
else
System.out.println("NO ES SIMETRICA");
}
}
www.detodoprogramacion.com
3. Crear y cargar dos matrices de tamaño 3x3, sumarlas y mostrar su suma.
package bol05ej03;
a = new int[3][3];
b = new int[3][3];
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
System.out.print("A["+i+"]["+j+"]: ");
a[i][j]=Entrada.entero();
}
}
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
System.out.print("B["+i+"]["+j+"]: ");
b[i][j]=Entrada.entero();
}
}
www.detodoprogramacion.com
// hacemos la suma
suma = new int[3][3];
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
suma[i][j] = a[i][j] + b[i][j];
}
}
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
System.out.print (suma[i][j] + " ");
}
System.out.println ();
}
}
}
package bol05ej04;
www.detodoprogramacion.com
int aux;
}
}
// trasponemos la matriz
// no podemos transponer todos los elementos. Un ejemplo el elemento t[1][2]
// se convierte en el [2][1]... pero cuando transpongamos el elemento [2][1] se convierte
// en el [1][2]. Al intercambiar dos veces los elemento, la matriz se quedaría exactamente igual.
www.detodoprogramacion.com
// mostramos la matriz transpuesta
System.out.println();
System.out.println("---------------------");
System.out.println ("Matriz transpuesta");
5. Crear una tabla de tamaño 7x7 y rellenarla de forma que los elementos de la diagonal principal sean
1 y el resto 0.
package bol05ej05;
for (i=0;i<7;i++)
for (j=0;j<7;j++)
if (i==j)
t[i][j] = 1;
else
t[i][j] = 0; // en java, al crear una tabla de enteros, todos los elementos se
www.detodoprogramacion.com
// inicializan a 0. Por lo que esta instrucción no es necesaria. Se aña_
// de para que el código sea más comprensible.
// mostramos la matriz
// la forma de ver la matriz no es la típica que estamos acostumbrados en
// matemática... pero desde el punto de vista del algoritmo no es relevante.
System.out.println ("Matriz:");
for (i=0;i<7;i++)
{
for (j=0;j<7;j++)
System.out.print(t[i][j]+" ");
System.out.println ();
}
}
}
6. Crear y cargar una tabla de tamaño 10x10, mostrar la suma de cada fila y de cada columna.
package bol05ej06;
t = new int[tamaño][tamaño];
for (i=0;i<tamaño;i++){
for (j=0;j<tamaño;j++){
System.out.print("Elemento ["+i+"]["+j+"]: ");
www.detodoprogramacion.com
t[i][j]=Entrada.entero();
}
}
7. utilizando dos tablas de tamaño 5x9 y 9x5, cargar la primera y trasponerla en la segunda.
package bol05ej07;
www.detodoprogramacion.com
int i,j;
a = new int[5][9];
b = new int [9][5];
for (i=0;i<5;i++){
for (j=0;j<9;j++){
System.out.print("Elemento ["+i+"]["+j+"]: ");
a[i][j]=Entrada.entero();
// si queremos ahorrarnos introducir 5x9 (45) números, podemos comentar las
// dos lineas anteriores y utilizar (por ejemplo):
// a[i][j] = 10*i+j;
}
}
// trasponemos
for (i=0;i<5;i++){
for (j=0;j<9;j++){
b[j][i] = a[i][j];
}
}
for (i=0;i<9;i++){
for (j=0;j<5;j++)
System.out.print (b[i][j] + " ");
System.out.println ();
}
}
}
www.detodoprogramacion.com
8. Crear una matriz “marco” de tamaño 8x6: todos sus elementos deben ser 0 salvo los de los bordes que
deben ser 1. Mostrarla.
package bol05ej08;
for (i=0;i<8;i++){
System.out.println();
for (j=0;j<6;j++){
System.out.print (t[i][j]+" ");
}
}
System.out.println ();
}
}
9. Hacer lo mismo que el ejercicio anterior, pero con una matriz 9x9x9. Creamos un cubo con las caras
puestas a 1 y el interior a 0.
www.detodoprogramacion.com
package bol05ej09;
t = new int[9][9][9];
for (i=0;i<9;i++){
for (j=0;j<9;j++){
for (k=0;k<9;k++){
if(i==0 || i==8 || j==0 || j==8 || k==0 || k==8)
// si estamos en la primera o última columna, fila o capa de la matriz
t[i][j][k]=1;
}
}
}
// Mostramos la matriz capa a capa
System.out.println("Matriz: ");
for (i=0;i<9;i++)
{
System.out.println("Capa: " +i);
for (j=0;j<9;j++)
{
for (k=0;k<9;k++)
{
System.out.print(t[i][j][k] + " ");
}
System.out.println ();
}
System.out.println (" -------------- ");
}
www.detodoprogramacion.com
}
}
10. Los siguientes programas piden una serie de datos y tras procesarlos ofrecen unos resultados por
pantalla. Mostrar el resultado:
www.detodoprogramacion.com
package bol05ej10;
m = 0;
for (i=0; i<=4; i++)
if (t[i] > m )
m = t[i];
a = t[4-m];
t[4-m] = t[m];
t[m] = a;
www.detodoprogramacion.com
package bol05ej10;
/* la idea de este ejercicio es hacer una traza de forma manual, y tras ésta, escribir el código
equivalente para comprobar el resultado. Debemos destacar que este algoritmo no tiene sentido
ni hace nada en concreto incluso con otros datos de entrada el algoritmo puede dar un error,
al utilizar datos como índices de tablas sin las pertinentes comprobaciones.
*/
n = 10;
www.detodoprogramacion.com
11-Se pretende realizar un programa para gestionar la lista de participaciones en una competición de
salto de longitud. El número de plazas disponible es de 10. Sus datos se irán introduciendo en el
mismo orden que vayan inscribiéndose los atletas. Diseñar el programa que muestre las siguientes
opciones:
1- Inscribir un participante.
2- Mostrar listado de datos.
3- Mostrar listado por marcas.
4- Finalizar el programa.
Si se selecciona 1, se introducirán los datos de uno de los participantes: Nombre, mejor marca del
2002, mejor marca del 2001 y mejor marca del 2000.
Si se elige la opción 2, se debe mostrar un listado por número de dorsal.
La opción 3 mostrará un listado ordenado por la marca del 2002, de mayor a menor.
Tras procesar cada opción, se debe mostrar de nuevo el menú inicial, hasta que se seleccione la
opción 4, que terminará el programa.
package bol05ej11;
int opc,numc,dorsal,i,aux;
boolean d_rep,inter;
www.detodoprogramacion.com
do{
System.out.println();
System.out.println("--------------------------------");
System.out.println("1. Inscribir participantes");
System.out.println("2. Mostrar listado por datos");
System.out.println("3. Mostrar listado por marcas");
System.out.println("4. Salir");
System.out.println("--------------------------------");
System.out.print("Por favor, introduzca una opción: ");
opc=Entrada.entero();
System.out.println();
switch(opc){
case 1:
if(numc==20)
System.out.println("Listado completo");
else{
do{
System.out.print("Introduzca dorsal: ");
dorsal=Entrada.entero();
d_rep=false;
i=0;
while(i<numc && d_rep==false){
if(part[i][D]==dorsal){
System.out.print("Dorsal registrado.");
System.out.println("Por favor intente de nuevo");
d_rep=true;
}
i++;
}
}while(d_rep==true);
if(d_rep==false){
part[numc][D]=dorsal;
System.out.print("Introduzca marca del 2000: ");
part[numc][M0]=Entrada.entero();
www.detodoprogramacion.com
System.out.print("Introduzca marca del 2001: ");
part[numc][M1]=Entrada.entero();
System.out.print("Introduzca marca del 2002: ");
part[numc][M2]=Entrada.entero();
System.out.println();
numc++;
}
}
break;
case 3:
www.detodoprogramacion.com
inter=true;
while(inter==true){
inter=false;
for (int j=0;j<=numc-1-1;j++){
if(part[j][M2]>part[j+1][M2]){
for (int k=0;k<4;k++){
aux=part[j][k];
part[j][k]=part[j+1][k];
part[j+1][k]=aux;
}
inter=true;
}
}
}
System.out.println("LISTADO POR MARCAS :");
System.out.println ("dorsal - marcas");
for (int j=0;j<numc;j++){
System.out.println();
for (int k=0;k<4;k++){
System.out.print(part[j][k]+" ");
}
}
break;
}
}
while(opc!=4);
}
}
www.detodoprogramacion.com
Boletín 6
Funciones
1. Realizar una función, a la que se le pase como parámetro un número N, y muestre por pantalla N
veces, el mensaje: “Módulo ejecutándose”
package bol06ej01;
www.detodoprogramacion.com
2. Diseñar una función que tenga como parámetros dos números, y que calcule el máximo.
package bol06ej02;
static int maximo(int a, int b){ // suponemos que los tres números serán distintos
int max;
if(a>b)
max=a;
else
max=b;
return(max);
}
www.detodoprogramacion.com
3. Ídem una versión que calcule el máximo de 3 números.
package bol06ej03;
return(max);
}
www.detodoprogramacion.com
System.out.println("");
package bol06ej04;
/**
* Esto funciona solo para tablas con un tamaño mínimo de 1
*
*/
static int maximo(int t[]){
int max;
max = t[0];
return(max);
}
www.detodoprogramacion.com
t=new int [6];
for (int i = 0; i < t.length; i++) // llenamos la tabla con valores aleatorios entre 1 y 100
t[i]=(int)(Math.random()*100+1);
5. Función a la que se le pasan dos enteros y muestra todos los números comprendidos entre ellos,
inclusive.
package bo0l6ej05;
www.detodoprogramacion.com
mayor=b;
menor=a;
}
System.out.println();
}
mostrar(a,b);
}
}
6. Función que muestra en pantalla el doble del valor que se le pasa como parámetro.
package bol06ej06;
www.detodoprogramacion.com
int doble;
7. Realizar una función que calcule (muestre en pantalla) el área o el volumen de un cilindro, según
se especifique. Para distinguir un caso de otro se le pasará el carácter 'a' (para área) o 'v'
(para el volumen). Además hemos de pasarle a la función el radio y la altura.
package bol06ej07;
double volumen,area;
switch (opcion)
{
case 'v':
volumen =Math.PI*radio*radio*altura; // radio*radio es el radio al cuadrado
System.out.println("El volumen es de: " +volumen);
www.detodoprogramacion.com
break;
case 'a':
area = 2*Math.PI*radio*altura + 2*Math.PI*radio*radio;
System.out.println("El área es de: "+area);
break;
default:
System.out.println("Indicador del cálculo erróneo");
}
}
System.out.println("");
area_o_volumen_cilindro(radio,alt,tipo_calculo);
}
}
package bol06ej08;
www.detodoprogramacion.com
static double[] area_y_volumen_cilindro(double radio, double altura)
{
double volumen,area;
double calculo[];
calculo = new double [2]; // [0] para el volumen y [1] para el área
return (calculo);
}
}
}
www.detodoprogramacion.com
9. Módulo al que se le pasa un número entero y devuelve el número de divisores primos que tiene.
package bol06ej09;
i=2;
while(i<num && primo==true) // en realidad bastaría probar hasta la raíz cuadrada de num
{
if( num %i == 0) // si es divisible
primo=false; // si hemos entrado aquí significa que el número no es primo
i++;
}
return(primo);
}
www.detodoprogramacion.com
// esta función devuelve el número de divisores primos del número pasado como parámetro.
//
// un ejemplo:
// los divisores de 24 son: 2 y 3
// aunque 4 y 6 también dividen a 24, no se consideran divisores primos, al no ser primos
// por lo que 24 tiene tres divisores primos: el 1, el 2 y el 3.
return(cont);
}
www.detodoprogramacion.com
10.Ídem diseñar una función que devuelve una tabla con los divisores.
package bol06ej10;
i=2;
while(i<num && primo==true)
{
if( num %i == 0) // si es divisible
primo=false; // si hemos entrado aquí significa que el número no es primo
i++;
}
return(primo);
}
www.detodoprogramacion.com
// esta función me devuelve el número de divisores del número
// los divisores a tener en cuenta solo son aquellos que son primos
//
// un ejemplo:
// los divisores de 24 son: 2 y 3
// aunque 4 y 6 también dividen a 24, no se consideran divisores, al no ser primos
// por lo que 24 tiene tres divisores (el 1, el 2 y el 3)
return(cont);
}
www.detodoprogramacion.com
{
div[cont] =i; // incrementamos el número de divisores
cont++;
}
return(div);
}
System.out.println("");
}
}
11.Escribir una función que calcule el máximo común divisor de dos números.
package bol06ej11;
www.detodoprogramacion.com
// La idea es dividir por todos los números desde 1 hasta mínimo(a, b)
// y quedarnos con el mayor.
return(mcd);
}
if(a>b)
min=b;
else
min=a;
return(min);
}
www.detodoprogramacion.com
System.out.print("Introduce numero: ");
a=Entrada.entero();
System.out.println("");
package bol06ej12;
www.detodoprogramacion.com
// utilizaremos la función con solo dos parámetros;
min = minimo (a,minimo(b,c));
return(mcd);
}
if(a>b)
min=b;
else
min=a;
return(min);
}
System.out.print("Introduce a: ");
a=Entrada.entero();
System.out.print("Introduce b: ");
b=Entrada.entero();
System.out.print("Introduce c: ");
www.detodoprogramacion.com
c=Entrada.entero();
System.out.println("");
}
}
package bol06ej13;
www.detodoprogramacion.com
// esto funciona para tabla con al menos un valor
min = t[0];
return(mcd);
}
if(a>b)
min=b;
else
min=a;
return(min);
www.detodoprogramacion.com
}
public static void main(String[] args) {
int t[], mcd;
System.out.println("");
}
}
14.Escribir una función que calcule el mínimo común múltiplo de dos números.
package bol06ej14;
www.detodoprogramacion.com
/* el mínimo común múltiplo de a y b, es el número más pequeño que
es divisible por a y b.
Para calcularlo podríamos utilizar algún algoritmo existente o hacerlo
un poco por la "cuenta de la vieja".
La idea es elegir el mayor de a y b, y multiplicarlo por i, hasta que
el número resultante sea divisible por el menor de a y b */
return(mcm);
}
if(a>b)
max=a;
www.detodoprogramacion.com
else
max=b;
return(max);
}
System.out.println("");
}
}
package bol06ej14;
www.detodoprogramacion.com
// el mínimo común múltiplo de dos números como la multiplicación de ambos
// divido por el mcd
return (mcm);
}
return(mcd);
}
if(a>b)
min=b;
else
www.detodoprogramacion.com
min=a;
return(min);
}
System.out.print("Introduce a: ");
a=Entrada.entero();
System.out.print("Introduce b: ");
b=Entrada.entero();
System.out.println("");
}
}
package bol06ej15;
www.detodoprogramacion.com
// Para calcularlo podríamos utilizar algún algoritmo existente o hacerlo
// un poco por la "cuenta de la vieja".
// La idea es elegir el mayor de ellos, y multiplicarlo por i (1..), hasta que
// el número resultante sea divisible por todos
while (mcm%a!=0 || mcm%b!=0 || mcm%c!=0) // mientras el mcm no sea divisible por todos
{
i++;
mcm=max*i; // el nuevo mcm sera el mayor por i
return(mcm);
}
if(a>b)
max=a;
else
max=b;
www.detodoprogramacion.com
return(max);
}
System.out.println("");
}
}
package bol06ej15;
www.detodoprogramacion.com
// es divisible por a y b.
// Para calcularlo podríamos utilizar algún algoritmo existente o hacerlo
// un poco por la "cuenta de la vieja".
// La idea es elegir el mayor de a y b, y multiplicarlo por i, hasta que
// el número resultante sea divisible por el menor(a,b)
return(mcm);
}
if(a>b)
max=a;
else
www.detodoprogramacion.com
max=b;
return(max);
}
System.out.println("");
}
}
www.detodoprogramacion.com
16.Ídem con una tabla.
package bol06ej16;
return(mcm);
www.detodoprogramacion.com
}
if(a>b)
max=a;
else
max=b;
return(max);
}
t = new int[4];
System.out.println("");
mcm = t[0];
www.detodoprogramacion.com
System.out.println("El mcm es: " +mcm);
}
}
17.Escriba una función que decida si dos números enteros positivos son amigos. Dos números son
amigos, si la suma de sus divisores (distintos de ellos mismos) son iguales.
package bol06ej17;
i=2;
while(i<num && primo==true)
{
www.detodoprogramacion.com
if( num %i == 0) // si es divisible
primo=false; // si hemos entrado aquí significa que el número no es primo
i++;
}
return(primo);
}
suma=0;
for (int i=1;i<num;i++) // al ser hasta i<num no tenemos en cuenta el propio num
if(num %i == 0) // si i divide a num
suma+=i; // acumulamos i
return(suma);
}
www.detodoprogramacion.com
System.out.print("Introduce a: ");
a=Entrada.entero();
System.out.print("Introduce b: ");
b=Entrada.entero();
}
}
18.Diseña una función (en adelante DUF) que decida si un número es primo.
package bol06ej18;
primo=true;
i=2;
www.detodoprogramacion.com
i++;
}
return(primo);
}
if(es_primo(num))
System.out.println("Es primo");
else
System.out.println("No es primo");
}
}
package bol06ej19;
www.detodoprogramacion.com
res=1;
else
for (int i=1;i<=n;i++)
res=res*a;
return(res);
}
res=a_elevado_n (num,exp);
System.out.println(num + " elevado a " + exp +" = " +res);
}
}
package bol06ej20;
www.detodoprogramacion.com
int t[]; // en t guardaremos los dígitos binarios
int cont;
if (num<0 || 255<num)
System.out.println("Número fuera de rango (0..255)");
else
{
cont =0;
if (num==0)
{
t[cont]=0;
cont++;
}
while(num!=0)
{
t[cont] =num%2;
num =num/2;
cont++;
}
System.out.println("");
}
www.detodoprogramacion.com
}
binario(num);
}
}
21. Escriba una función que sume los n primeros números impares.
package bol06ej21;
return (suma);
}
www.detodoprogramacion.com
n =Entrada.entero();
System.out.println("La suma de los " +n+ " primeros impares es: " +suma_n_impares (n));
}
}
package bol06ej21;
return (suma);
}
System.out.println("La suma de los " +n+ " primeros impares es: " +suma_n_impares (n));
}
}
www.detodoprogramacion.com
22. Dado el valor de un ángulo, sería interesante saber su seno, coseno y tangente. Escribir una
función que muestre en pantalla los datos anteriores.
package bol06ej22;
angulo =Entrada.real();
informacion_angulo (angulo);
}
}
23. Diseñar una función que calcule la distancia euclídea de dos puntos.
www.detodoprogramacion.com
package bol06ej23;
static double distancia_euclidea (int x1, int y1, int x2, int y2)
{
// aquí no hay más que tirar de la fórmula de la distancia euclídea
// y desempolvarla de los apuntes
System.out.println("Punto 1");
System.out.print("x: ");
x1 = Entrada.entero();
System.out.print("y: ");
y1 = Entrada.entero();
System.out.println("\nPunto 2");
System.out.print("x: ");
x2 = Entrada.entero();
System.out.print("y: ");
y2 = Entrada.entero();
www.detodoprogramacion.com
System.out.println("\nDistancia euclídea: " +l);
}
}
24. DUF a la que se le pasa como parámetro una tabla que debe rellenar. Se leerá por teclado una
serie de números: guardaremos solo los pares e ignoraremos los impares. También hay que devolver la
cantidad de impares ignorados.
package bol06ej24;
i = 0;
impares_ignorados = 0;
if(num %2 == 0) // si es par
{
t[i] = num; // lo guardamos
i++;
}
else
impares_ignorados++;
}
www.detodoprogramacion.com
return(impares_ignorados);
}
igno = rellena_tabla_pares(t);
for(int i=0;i<5;i++)
System.out.print(t[i]+ " ");
System.out.println("");
}
}
25. DUF a la que se le pasa una tabla de enteros y un número. Debemos buscar el número en la tabla e
indicar si se encuentra o no.
package bol06ej25;
www.detodoprogramacion.com
boolean esta;
i=0;
return(esta);
}
www.detodoprogramacion.com
esta=busca(a,num);
if (esta)
System.out.println("EL número está");
else
System.out.println("El número no está");
}
}
26. Igual que el ejercicio anterior, pero suponiendo que la tabla no está siempre llena, y el número
de elementos se pasa también como parámetro.
package bol06ej26;
i=0;
www.detodoprogramacion.com
if (i<tam) // si no llego al final de la tabla es por que lo he encontrado
// t[i] == num no es válido, ya que si i está fuera de rango
// t[i] es basura
esta =true;
else
esta =false;
return(esta);
}
a[0] = 1;
a[1] = 12;
a[2] = 38;
a[3] = 5;
a[4] = 11;
tam = 5;
www.detodoprogramacion.com
if (esta)
System.out.println("El número está");
else
System.out.println("El número no está");
}
}
27.Diseñar la función opera_tabla, a la que se le pasa dos tablas, el número de elementos útiles y
que operación se desea realizar: sumar, restar, multiplicar o dividir (mediante un carácter: 's',
'r', 'm', 'd'). La función debe devolver una tabla con los resultados.
package bol06ej27;
static int[] opera_tabla(int a[], int b[], char opc, int nelem){
int i, result[];
switch(opc)
{
case 's':
for(i=0;i<=nelem-1;i++)
result[i] = a[i] + b[i];
break;
case 'r':
for(i=0;i<=nelem-1;i++)
result[i] = a[i] - b[i];
break;
www.detodoprogramacion.com
case 'm':
for(i=0;i<=nelem-1;i++)
result[i] =a[i] * b[i];
break;
case 'd':
for(i=0;i<=nelem-1;i++)
result[i] = a[i] / b[i];
break;
}
return (result);
}
public static void main(String[] args) {
int num_datos_utiles;
char operacion;
int tabla1[], tabla2[], resultado[];
tabla1[0] =4;
tabla1[1] =7;
tabla1[2] =2;
tabla1[3] =7;
tabla2[0] =-3;
tabla2[1] =3;
tabla2[2] =6;
tabla2[3] =17;
num_datos_utiles =4;
System.out.println("tabla1 tabla2");
for(int i=0;i<num_datos_utiles;i++)
www.detodoprogramacion.com
System.out.println (tabla1[i]+ " " +tabla2[i]);
for(int i=0;i<num_datos_utiles;i++)
System.out.println (resultado[i]);
}
}
package bol06ej28;
www.detodoprogramacion.com
a[j]=a[j+1];
a[j+1]=aux;
}
}
}
}
static void mostrar_tabla(int t[]){
int tam=t.length;
System.out.println("Tabla aleatoria");
mostrar_tabla(t);
System.out.println("\n\nTabla ordenada");
ordenar(t);
mostrar_tabla(t);
}
}
www.detodoprogramacion.com
29. DUF que toma como parámetros dos tablas. La primera con los 6 números de una apuesta de la
primitiva, y la segunda con los 6 números ganadores. La función debe devolver el número de
aciertos.
package bol06ej29;
aciertos=0;
// se podría hacer con un for, pero con el while evitamos vueltas innecesarias
while(p<premiado.length && apuesta[a]!=premiado[p])
p++;
www.detodoprogramacion.com
return(aciertos);
}
public static void main(String[] args) {
int primitiva[]=new int[6];
int apuesta[]=new int[6];
int aciertos=0;
aciertos=primitiva(primitiva,apuesta);
if (aciertos == 0)
System.out.println("Lo importante no es ganar... es participar.\n");
}
}
www.detodoprogramacion.com
30. DUF recursiva que calcule an.
package bol06ej30;
return (res);
}
return (res);
}
www.detodoprogramacion.com
public static void main(String[] args) {
double num, resultado;
int potencia;
System.out.print("Introduzca base (real): ");
num = Entrada.real();
System.out.print("Introduzca la potencia: ");
potencia = Entrada.entero();
package bol06ej31;
return(res);
}
www.detodoprogramacion.com
public static void main(String[] args) {
int num,resultado;
resultado=factorial(num);
32. DUF que calcule el valor máximo de una tabla de forma recursiva.
package bol06ej32;
www.detodoprogramacion.com
k = maximo (t,pos+1); // k será el mayor desde la posición pos+1 hasta el último elemento
return(res);
}
max =maximo(datos);
www.detodoprogramacion.com
System.out.println("\n\nEl máximo es: " + max);
}
}
package bol06ej32;
max =maximo(t);
www.detodoprogramacion.com
static int maximo(int t[], int desde, int hasta)
{
int mayor;
33. DUF que calcule el n-ésimo término de la serie de Fibonacci. En esta serie el n-ésimo valor se
calcula sumando los dos valores anteriores. Es decir fibonacci(n) = fibonacci(n-
1)+fibonacci(n-2), siendo fibonacci(0)=1 y fibonacci(1)=1.
package bol06ej33;
www.detodoprogramacion.com
res=1;
else
res=fibo(num-1)+fibo(num-2); // caso general recursivo
}
return(res);
}
}
34. Igual que el ejercicio anterior, pero pudiendo configurar los valores de los dos primeros término
de la serie.
package bol06ej34;
/**
* sobrecargamos la función para que funcione de la siguiente forma:
* - si solo se le pasa el término a calcular: utiliza los casos bases típicos
www.detodoprogramacion.com
* - se le puede pasar los valores de los casos bases: fibo(0) y fibo(1)
*/
return(res);
if(num==0) // primer caso base, que tendrá el valor indicado por el usuario
res=fibo0;
else{
if(num==1) // segundo caso base, también configurable
res=fibo1;
else
res=fibo(num-1,fibo0, fibo1)+fibo(num-2, fibo0, fibo1);
// caso general recursivo
// hemos de acordarnos de utilizar la función fibo que
// tiene 3 parámetros
}
www.detodoprogramacion.com
return(res);
35. DUF que realice la búsqueda dicotómica en una tabla, de forma recursiva.
package bol06ej35;
www.detodoprogramacion.com
// a la función se le pasa, la tabla, el elemento a buscar, y la primera
// y última posición donde buscar.
static int busca (int t[], int elem, int primero, int ultimo)
{
int pos;
if(primero >= ultimo) // caso base: solo hay un elemento donde buscar
if (t[primero]==elem)
pos =primero;
else
pos =-1;
else
{
int pos1, pos2;
// llamada recursiva
// en caso de no encontrarse pos1 y pos2 serán -1, y se cogerá el valor de pos2 (-1)
}
return(pos);
www.detodoprogramacion.com
}
if (pos == -1)
www.detodoprogramacion.com
System.out.println("\n\nNo encontrado");
else
System.out.println("\n\nEncontrado en la posición: " +pos);
}
}
36. DUF que toma una tabla bidimensional de enteros, representando un tablero de ajedrez. Disponemos
de las constantes PB (peón blanco), TN (torre negra), etc. (P, T, C, A, R, D). Dicho módulo debe
devolver un valor booleano, que indique si el rey negro está amenazado.
package bol06ej36;
www.detodoprogramacion.com
final int tablero[][] = { {V, V, V, V, V, V, V, V},
{V, V, V, V, V, V, V, V},
{V, V, V, V, V, V, V, AN},
{V, V, V, V, V, V, T, V},
{V, V, DN, V, V, V, V, V},
{V, V, V, CN, V, V, V, V},
{V, V, P, P, V, V, V, V},
{V, V, R, V, V, V, V, V}};
www.detodoprogramacion.com
// en primer lugar veremos si nos amenaza un caballo:
amenaza =amenaza_caballo (tablero, pos_rey);
// AHORA
// miraremos hacia la derecha (dx:1, dy:0)
// aquí no puede amenazar una torre o dama
pieza =primera_pieza(tablero, pos_rey, 1, 0);
if (pieza ==DN || pieza ==TN)
amenaza=true;
www.detodoprogramacion.com
pieza =primera_pieza(tablero, pos_rey, 1, -1);
if (pieza ==DN || pieza ==AN)
amenaza=true;
return (amenaza);
}
www.detodoprogramacion.com
posicion = new int [2];
return (posicion);
}
// esta función busca la primera pieza que existe desde la posición pos,
// en la dirección indicada por dx, dy.
// Los valores de dx, dy son:
// dx dy dirección
// 1 1 diagonal derecha arriba
// 1 0 derecha
// 1 -1 diagonal derecha abajo
// 0 1 hacia arriba
// 0 0 ESTE CASO NO SE DARÁ NUNCA
// 0 -1 hacia abajo
// -1 1 diagonal izquierda arriba
// -1 0 hacia la izquierda
// -1 -1 diagonal izquierda abajo
static int primera_pieza (int tablero[][], int pos[], int dx, int dy)
{
int posx, posy; //posición del tablero en la que estamos mirando
int pieza;
posx =pos[0];
posy =pos[1];
www.detodoprogramacion.com
pieza = V; // en principio suponemos que no hay ninguna pieza
posx += dx;
posy += dy;
}
return (pieza);
}
// Desde la posición actual vemos los posibles ocho posiciones desde donde
// puede amenazarnos un caballo.
// Algunas de estas posiciones pueden estar "fuera" del tablero
if ( ( pos[0]+2 <8 && pos[1]+1 <8 && tablero[pos[0]+2][pos[1]+1] ==CN) ||
( pos[0]+2 <8 && 0<= pos[1]-1 && tablero[pos[0]+2][pos[1]-1] ==CN) ||
(0<= pos[0]-2 && pos[1]+1 <8 && tablero[pos[0]-2][pos[1]+1] ==CN) ||
(0<= pos[0]-2 && 0<= pos[1]-1 && tablero[pos[0]-2][pos[1]-1] ==CN) ||
www.detodoprogramacion.com
( pos[0]+1 <8 && pos[1]+2 <8 && tablero[pos[0]+1][pos[1]+2] ==CN) ||
( pos[0]+1 <8 && 0<= pos[1]-2 && tablero[pos[0]+1][pos[1]-2] ==CN) ||
(0<= pos[0]-1 && pos[1]+2 <8 && tablero[pos[0]-1][pos[1]+2] ==CN) ||
(0<= pos[0]-1 && 0<= pos[1]-2 && tablero[pos[0]-1][pos[1]-2] ==CN) )
amenaza = true;
return (amenaza);
}
37. Igual que el ejercicio anterior, pero indicando si existe jaque mate a las negras.
package bol06ej37;
www.detodoprogramacion.com
public static void main(String[] args)
{
int tablero[][] = { { V, V, V, V, V, V, V, V},
{ V, V, V, V, V, V, V, V},
{ V, V, V, V, V, V, V, V},
{ V, V, V, V, V, V, V, DN},
{ V, V, V, V, V, V, V, V},
{CN, V, V, DN, V, V, V, V},
{ V, P, P, PN, V, V, V, V},
{ V, V, R, V, V, V, V, V}};
int num_jaque=0;
int pos_rey[];
pos_rey = busca_rey(tablero);
www.detodoprogramacion.com
num_jaque += mover_rey (tablero, 1, 0);
num_jaque += mover_rey (tablero, 1, 1);
num_jaque += mover_rey (tablero, -1, -1);
num_jaque += mover_rey (tablero, -1, 0);
num_jaque += mover_rey (tablero, -1, 1);
}
// AHORA
// miraremos hacia la derecha (dx:1, dy:0)
// aquí no puede amenazar una torre o dama
www.detodoprogramacion.com
pieza =primera_pieza(tablero, pos_rey, 1, 0);
if (pieza ==DN || pieza ==TN)
amenaza=true;
www.detodoprogramacion.com
pieza =primera_pieza(tablero, pos_rey, -1, 1);
if (pieza ==DN || pieza ==AN)
amenaza=true;
return (amenaza);
}
www.detodoprogramacion.com
{
posicion[0] =i;
posicion[1] =j;
}
return (posicion);
}
// esta función busca la primera pieza que existe desde la posición pos,
// en la dirección indicada por dx, dy.
// Los valores de dx, dy son:
// dx dy dirección
// 1 1 diagonal derecha arriba
// 1 0 derecha
// 1 -1 diagonal derecha abajo
// 0 1 hacia arriba
// 0 0 ESTE CASO NO SE DARÁ NUNCA
// 0 -1 hacia abajo
// -1 1 diagonal izquierda arriba
// -1 0 hacia la izquierda
// -1 -1 diagonal izquierda abajo
static int primera_pieza (int tablero[][], int pos[], int dx, int dy)
{
int posx, posy; //posición del tablero en la que estamos mirando
int pieza;
posx =pos[0];
posy =pos[1];
www.detodoprogramacion.com
// mientras no nos salgamos del tablero y no encontremos una pieza
while ( 0<=posx && posx<=7 &&
0<=posy && posy<=7 &&
pieza ==V)
{
pieza = tablero[posx][posy];
posx += dx;
posy += dy;
}
return (pieza);
}
// Desde la posición actual vemos los posibles ocho posiciones desde donde
// puede amenazarnos un caballo.
// Algunas de estas posiciones pueden estar "fuera" del tablero
if ( ( pos[0]+2 <8 && pos[1]+1 <8 && tablero[pos[0]+2][pos[1]+1] ==CN) ||
( pos[0]+2 <8 && 0<= pos[1]-1 && tablero[pos[0]+2][pos[1]-1] ==CN) ||
(0<= pos[0]-2 && pos[1]+1 <8 && tablero[pos[0]-2][pos[1]+1] ==CN) ||
(0<= pos[0]-2 && 0<= pos[1]-1 && tablero[pos[0]-2][pos[1]-1] ==CN) ||
( pos[0]+1 <8 && pos[1]+2 <8 && tablero[pos[0]+1][pos[1]+2] ==CN) ||
( pos[0]+1 <8 && 0<= pos[1]-2 && tablero[pos[0]+1][pos[1]-2] ==CN) ||
(0<= pos[0]-1 && pos[1]+2 <8 && tablero[pos[0]-1][pos[1]+2] ==CN) ||
(0<= pos[0]-1 && 0<= pos[1]-2 && tablero[pos[0]-1][pos[1]-2] ==CN) )
amenaza = true;
www.detodoprogramacion.com
return (amenaza);
}
int pos[];
pos = new int [2];
pos = busca_rey(tablero);
www.detodoprogramacion.com
//volvemos el rey a su posición inicial
tablero[pos[0]][pos[1]] =R;
tablero[pos[0]+dx][pos[1]+dy] =pieza;
}
else
// no podemos mover el rey, en la practica esta casilla no es utilizable
// por el rey para escapar... es lo mismo que una amenaza (jaque).
existe_jaque=1;
return (existe_jaque);
}
www.detodoprogramacion.com
Apéndice I
Boletines completos
BOLETÍN 1
Variables y condicionales
1. Pedir los coeficientes de una ecuación se 2º grado, y muestre sus soluciones reales. Si no existen,
debe indicarlo.
www.detodoprogramacion.com
10. Pedir tres números y mostrarlos ordenados de mayor a menor.
12. Pedir un número entre 0 y 9.999 y mostrarlo con las cifras al revés.
15. Pedir el día, mes y año de una fecha e indicar si la fecha es correcta. Suponiendo todos los meses de
30 días.
16. Pedir el día, mes y año de una fecha e indicar si la fecha es correcta. Con meses de 28, 30 y 31
días. Sin años bisiestos.
17. Pedir el día, mes y año de una fecha correcta y mostrar la fecha del día siguiente. suponer que todos
los meses tienen 30 días.
18. Ídem que el ej. 17, suponiendo que cada mes tiene un número distinto de días (suponer que febrero
tiene siempre 28 días).
19. Pedir dos fechas y mostrar el número de días que hay de diferencia. Suponiendo todos los meses de 30
días.
20. Pedir una hora de la forma hora, minutos y segundos, y mostrar la hora en el segundo siguiente.
21. Pedir una nota numérica entera entre 0 y 10, y mostrar dicha nota de la forma: cero, uno, dos,
tres...
22. Pedir un número de 0 a 99 y mostrarlo escrito. Por ejemplo, para 56 mostrar: cincuenta y seis.
www.detodoprogramacion.com
BOLETÍN 2
Condicionales y bucles
1. Leer un número y mostrar su cuadrado, repetir el proceso hasta que se introduzca un número negativo.
2. Leer un número e indicar si es positivo o negativo. El proceso se repetirá hasta que se introduzca un
0.
3. Leer números hasta que se introduzca un 0. Para cada uno indicar si es par o impar.
4. Pedir números hasta que se teclee uno negativo, y mostrar cuántos números se han introducido.
5. Realizar un juego para adivinar un número. Para ello pedir un número N, y luego ir pidiendo números
indicando “mayor” o “menor” según sea mayor o menor con respecto a N. El proceso termina cuando el
usuario acierta.
6. Pedir números hasta que se teclee un 0, mostrar la suma de todos los números introducidos.
11. Diseñar un programa que muestre el producto de los 10 primeros números impares.
13. Pedir 10 números. Mostrar la media de los números positivos, la media de los números negativos y la
cantidad de ceros.
www.detodoprogramacion.com
15. Dadas las edades y alturas de 5 alumnos, mostrar la edad y la estatura media, la cantidad de alumnos
mayores de 18 años, y la cantidad de alumnos que miden más de 1.75.
16. Pide un número (que debe estar entre 0 y 10) y mostrar la tabla de multiplicar de dicho número.
17. Una empresa que se dedica a la venta de desinfectantes necesita un programa para gestionar las
facturas. En cada factura figura: el código del artículo, la cantidad vendida en litros y el precio
por litro.
Se pide de 5 facturas introducidas: Facturación total, cantidad en litros vendidos del artículo 1 y
cuantas facturas se emitieron de más de 600 €.
18. Igual que el anterior pero suponiendo que no se introduce el precio por litro. Solo existen tres
productos con precios:
1- 0,6 €/litro, 2- 3 €/litro y 3- 1,25 €/litro.
19. Dadas 6 notas, escribir la cantidad de alumnos aprobados, condicionados (=4) y suspensos.
www.detodoprogramacion.com
BOLETÍN 3
Bucles anidados
1. Realiza detenidamente una traza al siguiente programa y muestra cual seria la salida por pantalla:
PROGRAMA ej_1
VARIABLES
suma, i, j: ENTERO
COMIENZO
PARA i <- 1 HASTA 4
PARA j <- 3 HASTA 0 INC -1
suma <- i*10+j
escribir (suma)
FIN PARA
FIN PARA
FIN
2. Realiza una traza del siguiente algoritmo y muestra la salida generada por pantalla.
PROGRAMA ej_1
VARIABLES
i, j: ENTERO
COMIENZO
PARA i <- 1 HASTA 3
j <- i+1
MIENTRAS j < 4
escribir (j-i)
j <- j+1
FIN MIENTRAS
FIN PARA
FIN
3. Diseña una aplicación que muestre las tablas de multiplicar del 1 al 10.
www.detodoprogramacion.com
4. Dibuja un cuadrado de n elementos de lado utilizando *.
5. Necesitamos mostrar un contador con 5 dígitos (X-X-X-X-X), que muestre los números del 0-0-0-0-0 al
9-9-9-9-9, con la particularidad que cada vez que aparezca un 3 lo sustituya por una E.
6. Realizar un programa que nos pida un número n, y nos diga cuantos números hay entre 1 y n que son
primos.
www.detodoprogramacion.com
BOLETÍN 4
Tablas
3. Leer 5 números por teclado y a continuación realizar la media de los números positivos, la
media de los negativos y contar el número de ceros.
4. Leer 10 números enteros. Debemos mostrarlos en el siguiente orden: el primero, el último, el segundo,
el penúltimo, el tercero, etc.
5. Leer por teclado dos tablas de 10 números enteros y mezclarlas en una tercera de la forma: el 1º de
A, el 1º de B, el 2º de A, el 2º de B, etc.
6. Leer los datos correspondiente a dos tablas de 12 elementos numéricos, y mezclarlos en una tercera de
la forma: 3 de la tabla A, 3 de la B, otros 3 de A, otros 3 de la B, etc.
7. Leer por teclado una serie de 10 números enteros. La aplicación debe indicarnos si los números están
ordenados de forma creciente, decreciente, o si están desordenados.
8. Diseñar una aplicación que declare una tabla de 10 elementos enteros. Leer mediante el teclado 8
números. Después se debe pedir un número y una posición, insertarlo en la posición indicada, desplazando
los que estén detrás.
9. Crear un programa que lea por teclado una tabla de 10 números enteros y la desplace una posición
hacia abajo (el último pasa a ser el primero).
www.detodoprogramacion.com
10. Ídem, desplazar N posiciones (N es introducido por el usuario).
11. Leer 5 elementos numéricos que se introducirán ordenados de forma creciente. Éstos los guardaremos
en una tabla de tamaño 10. Leer un número N, e insertarlo en el lugar adecuado para que la tabla
continúe ordenada.
12. Leer por teclado una tabla de 10 elementos numéricos enteros y leer una posición (entre 0 y 9).
Eliminar el elemento situado en la posición dada sin dejar huecos.
13. Leer 10 enteros. Guardar en otra tabla los elementos pares de la primera, y a continuación los
elementos impares.
Realizar dos versiones: una trabajando con los valores y otra trabajando con los índices.
14. Leer dos series de 10 enteros, que estarán ordenados crecientemente. Copiar (fusionar) las dos
tablas en una tercera, de forma que sigan ordenados.
15. Leer 10 enteros ordenados crecientemente. Leer N y buscarlo en la tabla. Se debe mostrar la posición
en que se encuentra. Si no está, indicarlo con un mensaje.
16. Queremos desarrollar una aplicación que nos ayude a gestionar las notas de un centro educativo. Cada
grupo (o clase) está compuesto por 5 alumnos. Se pide leer las notas del primer, segundo y tercer
trimestre de un grupo. Debemos mostrar al final: la nota media del grupo en cada trimestre, y la media
del alumno que se encuentra en la posición N (N se lee por teclado).
www.detodoprogramacion.com
BOLETÍN 5
Tablas n-dimensionales
1. Crear una tabla bidimensional de tamaño 5x5 y rellenarla de la siguiente forma: la posición T[n,m]
debe contener n+m. Después se debe mostrar su contenido.
2. Crear y cargar una tabla de tamaño 4x4 y decir si es simétrica o no, es decir, si se obtiene la misma
tabla al cambiar filas por columnas.
5. Crear una tabla de tamaño 7x7 y rellenarla de forma que los elementos de la diagonal principal sean 1
y el resto 0.
6. Crear y cargar una tabla de tamaño 10x10, mostrar la suma de cada fila y de cada columna.
7. utilizando dos tablas de tamaño 5x9 y 9x5, cargar la primera y trasponerla en la segunda.
8. Crear una matriz “marco” de tamaño 8x6: todos sus elementos deben ser 0 salvo los de los bordes que
deben ser 1. Mostrarla.
9. Hacer lo mismo que el ejercicio anterior, pero con una matriz 9x9x9. Es decir, creamos un cubo con
las caras puestas a 1 y el interior a 0.
10. Los siguientes programas piden una serie de datos y tras procesarlos ofrecen unos resultados por
pantalla. Mostrar el resultado:
www.detodoprogramacion.com
FIN PARA PARA i0 HASTA n-1
m 0 leer (a[i])
PARA i 0 HASTA 4 FIN PARA
SI t[i] > m PARA i 0 HASTA n/2
m t[i] b[i] a[n-1-i]
FIN SI b[n-1-i] a[i]
FIN PARA FIN PARA
a t[4-m] PARA i 0 HASTA n-1
t[4-m] t[m] SI i mod 2 = 0
t[m] a escribir (a[i])
PARA i 0 HASTA 4 SINO
escribir (t[i]) escribir (b[i])
FIN PARA FIN SI
FIN PROGRAMA FIN PARA
FIN PROGRAMA
Datos de entrada:
-4, 0, 1, 3 y 2. Datos de entrada:
6, 2, 8, 9, 2, 5, 8, 2, 6 y 1.
11-Se pretende realizar un programa para gestionar la lista de participaciones en una competición de
salto de longitud. El número de plazas disponible es de 10. Sus datos se irán introduciendo en el mismo
orden que vayan inscribiéndose los atletas. Diseñar el programa que muestre las siguientes opciones:
1- Inscribir un participante.
2- Mostrar listado de datos.
3- Mostrar listado por marcas.
4- Finalizar el programa.
Si se selecciona 1, se introducirán los datos de uno de los participantes: Nombre, mejor marca del
2002, mejor marca del 2001 y mejor marca del 2000.
Si se elige la opción 2, se debe mostrar un listado por número de dorsal.
La opción 3 mostrará un listado ordenado por la marca del 2002, de mayor a menor.
Tras procesar cada opción, se debe mostrar de nuevo el menú inicial, hasta que se seleccione la opción
4, que terminará el programa.
www.detodoprogramacion.com
BOLETÍN 6
Funciones
1. Realizar una función, a la que se le pase como parámetro un número N, y muestre por pantalla
N veces, el mensaje: “Módulo ejecutándose”
2. Diseñar una función que tenga como parámetros dos números, y que calcule el máximo.
5. Función a la que se le pasan dos enteros y muestra todos los números comprendidos entre
ellos, inclusive.
6. Función que muestra en pantalla el doble del valor que se le pasa como parámetro.
7. Realizar una función que calcule (muestre en pantalla) el área o el volumen de un cilindro,
según se especifique. Para distinguir un caso de otro se le pasará el carácter 'a' (para
área) o 'v' (para el volumen). Además hemos de pasarle a la función el radio y la altura.
9. Módulo al que se le pasa un número entero y devuelve el número de divisores primos que
tiene.
10.Ídem diseñar una función que devuelve una tabla con los divisores.
11.Escribir una función que calcule el máximo común divisor de dos números.
www.detodoprogramacion.com
13.Ídem con una tabla.
14.Escribir una función que calcule el mínimo común múltiplo de dos números.
17.Escriba una función que decida si dos números enteros positivos son amigos. Dos números son
amigos, si la suma de sus divisores (distintos de ellos mismos) son iguales.
18.Diseña una función (en adelante DUF) que decida si un número es primo.
21. Escriba una función que sume los n primeros números impares.
22. Dado el valor de un ángulo, sería interesante saber su seno, coseno y tangente. Escribir
una función que muestre en pantalla los datos anteriores.
23. Diseñar una función que calcule la distancia euclídea de dos puntos.
24. DUF a la que se le pasa como parámetro una tabla que debe rellenar. Se leerá por teclado
una serie de números: guardaremos solo los pares e ignoraremos los impares. También hay que
devolver la cantidad de impares ignorados.
25. DUF a la que se le pasa una tabla de enteros y un número. Debemos buscar el número en la
tabla e indicar si se encuentra o no.
www.detodoprogramacion.com
26. Igual que el ejercicio anterior, pero suponiendo que la tabla no está siempre llena, y el
número de elementos se pasa también como parámetro.
29. DUF que toma como parámetros dos tablas. La primera con los 6 números de una apuesta de la
primitiva, y la segunda con los 6 números ganadores. La función debe devolver el número de
aciertos.
32. DUF que calcule el valor máximo de una tabla de forma recursiva.
33. DUF que calcule el n-ésimo término de la serie de Fibonacci. En esta serie el n-ésimo
valor se calcula sumando los dos valores anteriores. Es decir
fibonacci(n) = fibonacci(n-1)+fibonacci(n-2), siendo fibonacci(0)=1 y fibonacci(1)=1.
34. Igual que el ejercicio anterior, pero pudiendo configurar los valores de los dos primeros
término de la serie.
35. DUF que realice la búsqueda dicotómica en una tabla, de forma recursiva.
36. DUF que toma una tabla bidimensional de enteros, representando un tablero de ajedrez.
Disponemos de las constantes PB (peón blanco), TN (torre negra), etc. (P, T, C, A, R, D).
www.detodoprogramacion.com
Dicho módulo debe devolver un valor booleano, que indique si el rey negro está amenazado.
37. Igual que el ejercicio anterior, pero indicando si existe jaque mate a las negras.
www.detodoprogramacion.com
Apéndice II
Clase Entrada
import java.io.*;
www.detodoprogramacion.com
return valor;
}
www.detodoprogramacion.com