Documentos de Académico
Documentos de Profesional
Documentos de Cultura
EjerciciosdeProgramacinenJava
Condicionales,Bucles,TablasyFunciones
F.M.PrezMontes
Esta obra est publicada bajo una licencia:
Creative Commons Reconocimiento-No Comercial-Sin Obra Derivada 3.0 Espaa,
que le permite copiar, distribuir y comunicar pblicamente la obra, siempre y cuando reconozca el
crdito 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.
AmihijaClaudia,
lasolucinatodoslosproblemas.
AGRADECIMIENTOS
Atodoslosquehanhechoposibleestelibro.
Enespecialamiamigoycompaero:AlfonsoJimnez,
porsusinnumerablescorreccionesyporlaclaseEntrada.
NDICE
I
PRLOGO
Volviendo al piano: una vez que dominamos la relacin tecla/nota, un pianista debe
aprender muchas otras cosas para que aquello que est tocando suene bien; esto sera saber
tocar el piano. Para saber programar, no basta saber cmo funciona una instruccin sino saber
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 prctica facilita la asimilacin
de las tcnicas de programacin. Para aprender a programar la mejor forma es desvincular la
lgica de la aplicacin (cmo hacerlo) del lenguaje utilizado para implementarlo. Dicho en
otras palabras: lo mejor es utilizar seudocdigo (un lenguaje terico de alto nivel) donde no
tengamos que preocuparnos por las particularidades del lenguaje de programacin, ni por la
rigidez de su sintaxis. El inconveniente de utilizar seudocdigo es que el lector no tiene
nada tangible, nada con lo que se pueda comprobar el buen funcionamiento de la aplicacin;
por este motivo se ha decidido utilizar Java. Esta eleccin se justifica frente a otras
alternativas, como el lenguaje C, que tambin es muy didctico, simplemente por el hecho de
que con Java podemos abstraernos un poco ms, al ser un lenguaje de ms alto nivel. Tambin
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 prctica y hemos
de trabajar con los detalles.
Para finalizar, deseara comentar que el libro se estructura como un conjunto de
boletines de ejercicios que se resuelven de la forma ms didctica posible. Un programador
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 tcnica o ciclo formativo de grado
superior, sern 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 prctica.
Este libro est compuesto como una coleccin de boletines de ejercicios (se encuentran
disponibles en el Apndice I). En cada boletn se resuelven ejercicios con una temtica comn, de la
siguiente forma:
Los ejercicios no tienen solucin nica, aqu se plantea la ms didctica y fcil de entender,
dejando de lado la eficiencia. Cuando existen distintas soluciones, utilizando distintos enfoques, se
incluye ms de una solucin por ejercicio.
La resolucin de los ejercicios de programacin, son el complemento ideal para las clases de
programacin impartidas en una facultas, escuela tcnica o ciclo formativo de grado superior.
Por todo esto, se ha diseado la clase Entrada, que permite realizar de forma transparente la
entrada por teclado. Aprender a utilizarla es sencillo y proporciona una herramienta cmoda y fiable
para dejar de preocuparnos por la entrada de datos. La clase Entrada se encuentra en el Apndice II.
Las funciones que proporciona la clase Entrada son:
1. Pedir los coeficientes de una ecuacin 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.
x1=(-b+Math.sqrt(d))/(2*a);
x2=(-b-Math.sqrt(d))/(2*a);
System.out.println("Solucin: " + x1);
System.out.println("Solucin: " + x2);
}
}
}
package bol01ej02;
System.out.println("El rea de una circunferencia de radio " + r+ " es: " + a);
}
}
package bol01ej03;
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");
}
}
package bol01ej05;
package bol01ej06;
package bol01ej07;
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;
if(n1>n2)
System.out.println(n1 + " y " + n2);
else
System.out.println(n2 + " y " + n1);
}
}
package bol01ej10;
package bol01ej11;
if(num<10)
System.out.println("tiene 1 cifra");
12. Pedir un nmero entre 0 y 9.999 y mostrarlo con las cifras al revs.
package bol01ej12;
// 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 revs:
System.out.println (u + " " + d + " " + c + " " + um + " " + dm);
package bol01ej13;
// 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 nmero ser capica si las cifras son iguales dos a dos por los extremos
// las centenas no las tenemos en cuenta
// hay que tener en cuenta que en este ejercicio el nmero 121 es similar al 00121 y
// resulta que 121 es capica, pero nuestro cdigo lo identifica como NO capica. Ya
// que trabajamos con el 00121. No tendremos en cuenta este pequeo error.
}
}
package bol01ej13;
// En esta versin haremos que el nmero 121 el 33 sea visto como capica.
// La idea es no tener en cuenta los ceros por la derecha.
// unidad
u = 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 nmero es capica");
}
}
package bol01ej14;
// tanto los if's como los else's encierran a una sola instruccin
// y no es necesario utilizar llaves { }
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:
15. Pedir el da, mes y ao de una fecha e indicar si la fecha es correcta. Suponiendo todos los meses de
30 das.
package bol01ej15;
}
}
16. Pedir el da, mes y ao de una fecha e indicar si la fecha es correcta. Con meses de 28, 30 y 31 das.
Sin aos bisiestos.
package bol01ej16;
}
}
}
}
}
package bol01ej16;
int dias_del_mes;
boolean fecha_correcta=true;
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 + "/" + ao+": Fecha correcta");
else
System.out.println("Fecha incorrecta");
}
}
17. Pedir el da, mes y ao de una fecha correcta y mostrar la fecha del da siguiente. suponer que todos
los meses tienen 30 das.
package bol01ej17;
// incrementamos el da
dia ++;
if (ao == 0)
ao = 1;
18. dem que el ej. 17, suponiendo que cada mes tiene un nmero distinto de das (suponer que febrero tiene
siempre 28 das).
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 da
dia ++;
if (ao == 0)
ao = 1;
19. Pedir dos fechas y mostrar el nmero de das que hay de diferencia. Suponiendo todos los meses de 30
das.
package bol01ej19;
20. Pedir una hora de la forma hora, minutos y segundos, y mostrar la hora en el segundo siguiente.
package bol01ej20;
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;
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 nmero de 0 a 99 y mostrarlo escrito. Por ejemplo, para 56 mostrar: cincuenta y seis.
package bol01ej22;
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");
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");
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;
}
}
}
package bol02ej02;
3. Leer nmeros hasta que se introduzca un 0. Para cada uno indicar si es par o impar.
package bol02ej03;
4. Pedir nmeros hasta que se teclee uno negativo, y mostrar cuntos nmeros se han introducido.
package bol02ej04;
5. Realizar un juego para adivinar un nmero. Para ello pedir un nmero N, y luego ir pidiendo
nmeros indicando mayor o menor segn sea mayor o menor con respecto a N. El proceso termina
cuando el usuario acierta.
package bol02ej05;
System.out.print("Introduce N: ");
n =Entrada.entero();
System.out.println("acertaste...");
}
}
package bol02ej05;
System.out.println("acertaste...");
}
}
6. Pedir nmeros hasta que se teclee un 0, mostrar la suma de todos los nmeros introducidos.
package bol02ej06;
do
{
System.out.print("Introduzca un nmero: ");
num=Entrada.entero();
suma=suma+num;
}
while(num!=0);
}
}
package bol02ej07;
suma= 0;
elementos= 0;
package bol02ej08;
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);
package bol02ej10;
suma_total=0;
suma_total=suma_total+num;
}
System.out.println("La suma total es de: "+suma_total);
}
}
11. Disear un programa que muestre el producto de los 10 primeros nmeros impares.
package bol02ej11;
}
}
package bol02ej12;
13. Pedir 10 nmeros. Mostrar la media de los nmeros positivos, la media de los nmeros negativos y
la cantidad de ceros.
package bol02ej13;
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;
}
}
}
package bol02ej14;
15. Dadas las edades y alturas de 5 alumnos, mostrar la edad y la estatura media, la cantidad de
alumnos mayores de 18 aos, y la cantidad de alumnos que miden ms de 1.75.
package bol02ej15;
mayor_edad=0;
media_altura=0;
mayor_175=0;
suma_edad=0;
suma_alt=0;
suma_edad=suma_edad+edad;
suma_alt=suma_alt+altura;
}
media_edad=suma_edad/5;
media_altura=suma_alt/5;
16. Pide un nmero (que debe estar entre 0 y 10) y mostrar la tabla de multiplicar de dicho nmero.
package bol02ej16;
do
{
System.out.print("Introduce nmero (de 0 a 10): ");
num=Entrada.entero();
}
}
}
}
17. Una empresa que se dedica a la venta de desinfectantes necesita un programa para gestionar las
facturas. En cada factura figura: el cdigo del artculo, la cantidad vendida en litros y el
precio por litro.
Se pide de 5 facturas introducidas: Facturacin total, cantidad en litros vendidos del artculo 1
y cuantas facturas se emitieron de ms de 600 .
package bol02ej17;
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");
// facturacin total
System.out.println("La facturacin total es de: " +facturacion_total + "");
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
ms de 600
facturacion_total = 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)
}
}
19. Dadas 6 notas, escribir la cantidad de alumnos aprobados, condicionados (=4) y suspensos.
package bol02ej19;
aprobados=0;
suspensos=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;
System.out.println("--------");
package bol02ej20;
primer_sueldo_asignado = false;
System.out.println("--------");
if (primer_sueldo_asignado == false)
{
// asignamos como mximo el primer sueldo ledo
sueldo_max = sueldo;
primer_sueldo_asignado = true;
}
package bol02ej21;
hay_negativo =false;
// suponemos que no habr ningn 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 algn nmero negativo");
else
System.out.println("No hay ningn nmero negativo");
}
}
package bol02ej22;
if(notas<5)
suspensos=true;
}
if(suspensos)
System.out.println("Hay alumnos suspensos");
else
System.out.println("No hay suspensos");
}
}
package bol02ej23;
multiplo_3=false;
if(num %3 == 0)
multiplo_3=true; // si se ejecuta esta instruccin significa que al menos hay un mltiplo
de 3.
}
if(multiplo_3 == false)
System.out.println("no existen mltiplos de 3");
else
System.out.println("Hay mltiplos de 3");
}
}
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. Disea una aplicacin que muestre las tablas de multiplicar del 1 al 10.
package bol03ej03;
for (i=1;i<=10;i++)
package bol03ej04;
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)
System.out.println(" ");
}
}
}
}
}
}
}
6. Realizar un programa que nos pida un nmero n, y nos diga cuantos nmeros hay entre 1 y n que son
primos.
package bol03ej06;
cont_pri=0;
System.out.print("Introduce numero: ");
num=Entrada.entero();
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 + " nmeros primos");
}
}
package bol04ej01;
t = new int[5];
package bol04ej02;
3. Leer 5 nmeros por teclado y a continuacin realizar la media de los nmeros positivos, la media
de los negativos y contar el nmero de ceros.
package bol04ej03;
if(cont_neg==0)
System.out.println("No se puede realizar la media de nmeros negativos");
else
4. Leer 10 nmeros enteros. Debemos mostrarlos en el siguiente orden: el primero, el ltimo, el segundo, el
penltimo, 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 nmero por el principio
System.out.println(t[9-i]); // y el i-simo por el final
}
}
}
5. Leer por teclado dos tablas de 10 nmeros 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("nmero: ");
a[i]=Entrada.entero();
}
// leemos la tabla b
for (i=0;i<10;i++){
System.out.print("nmero: ");
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 numricos, 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;
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("nmero: ");
a[i]=Entrada.entero();
}
// leemos la tabla b
System.out.println("Leyendo la tabla b");
for (i=0;i<12;i++){
System.out.print("nmero: ");
b[i]=Entrada.entero();
}
j=0;
i=0;
// copiamos 3 de b
for (int k=0;k<3;k++)
{
c[j]=b[i+k];
j++;
}
System.out.println("");
}
}
package bol04ej07;
/* creciente decreciente
* false false -> cuando todos los nmeros sean idnticos
* false true -> orden decreciente
* true false -> orden creciente
* true true -> desordenado
*
* si, para algn 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;
for (i=0;i<10;i++){
System.out.print("nmero: ");
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 estn en orden creciente
System.out.println("Serie creciente.");
if (creciente ==false && decreciente ==true) // todas la parejas estn en orden decreciente
System.out.println("Serie decreciente.");
}
}
package bol04ej08;
// leemos 8 nmeros
System.out.println("Leyendo datos...");
for (int i=0;i<8;i++){
System.out.print("Introduzca nmero: ");
t[i]=Entrada.entero();
}
9. Crear un programa que lea por teclado una tabla de 10 nmeros enteros y la desplace una posicin 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 nmero: ");
t[i]=Entrada.entero();
}
package bol04ej10;
// leemos la tabla
for (int i=0;i<10;i++){
System.out.print("Introduzca nmero: ");
t[i]=Entrada.entero();
}
// del ejercicio anterior tenemos una versin que desplaza una sola
// posicin. Si repetimos este proceso n veces, conseguiremos
// desplazar n veces.
// este algoritmo es muy fcil de implementar, pero es muy costoso en tiempo.
// un algoritmo ms eficiente
package bol04ej10;
// leemos la tabla
for (int i=0;i<10;i++){
System.out.print("Introduzca nmero: ");
t[i]=Entrada.entero();
}
// en el caso de desplazar una posicin: necesitamos guardar solo un elemento (el ltimo que
// pasa a ser el primero)
// en el caso de desplazar dos posiciones: necesitamos guardar dos elementos (penltimo y
// ltimo, que pasarn a ser primero y segundo)
// como a priori no sabemos cuantos elementos vamos a desplazar, ni cuantos elementos tenemos
// que guardar. Una buena solucin es hacer una copia de la tabla completa
package bol04ej11;
System.out.println();
System.out.print("Nmero a insertar entre los anteriores: ");
num=Entrada.entero();
sitio_num=0;
j=0;
// 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 numricos enteros y una posicin (entre 0 y 9). Eliminar el
elemento situado en la posicin dada sin dejar huecos.
package bol04ej12;
// desplazamos desde posicin hasta el final todos los elementos un lugar hacia la izquierda
// con lo que el elemento que est en posicin se pierde (se borra)
}
}
13. Leer 10 enteros. Guardar en otra tabla los elementos pares de la primera, y a continuacin los elementos
impares.
Realizar dos versiones: una trabajando con los valores y otra trabajando con los ndices.
package bol04ej13;
t = new int[10];
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 versin nos fijaremos en los ndices pares e impares
* en par se incluir t[2],t[4]...
* en impar t[1], t[2],...
*/
t = new int[10];
for (int i=1;i<10;i+=2) // la divisin entera redondeada hacia el entero ms prximo 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]);
}
}
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
// 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
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 posicin en que
se encuentra. Si no est, indicarlo con un mensaje.
package bol04ej15;
System.out.println();
16. Queremos desarrollar una aplicacin 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 posicin N (N se lee por teclado).
package bol04ej16;
// el programa consta de dos partes: entrada de datos y procesado. Se podran procesar las
// notas mientras se leen. Preferimos utilizar dos bloques por tener un cdigo ms legible.
// 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();
package bol05ej01;
System.out.println("TABLA: ");
}
}
}
}
2. Crear y cargar una tabla de tamao 4x4 y decir si es simtrica 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();
}
//una solucin es mirar todos los elementos de la matriz, pero se hacen comprobaciones
// dobles, un ejemplo: comprobamos t[1][2] con t[2][1]... pero ms 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");
}
}
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();
}
}
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;
}
}
// 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 quedara exactamente igual.
System.out.println();
System.out.println("---------------------");
System.out.println ("Matriz transpuesta");
5. Crear una tabla de tamao 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
// mostramos la matriz
// la forma de ver la matriz no es la tpica que estamos acostumbrados en
// matemtica... 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 tamao 10x10, mostrar la suma de cada fila y de cada columna.
package bol05ej06;
t = new int[tamao][tamao];
for (i=0;i<tamao;i++){
for (j=0;j<tamao;j++){
System.out.print("Elemento ["+i+"]["+j+"]: ");
7. utilizando dos tablas de tamao 5x9 y 9x5, cargar la primera y trasponerla en la segunda.
package bol05ej07;
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) nmeros, 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 ();
}
}
}
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.
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 (" -------------- ");
}
10. Los siguientes programas piden una serie de datos y tras procesarlos ofrecen unos resultados por
pantalla. Mostrar el resultado:
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;
/* la idea de este ejercicio es hacer una traza de forma manual, y tras sta, escribir el cdigo
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;
1- Inscribir un participante.
2- Mostrar listado de datos.
3- Mostrar listado por marcas.
4- Finalizar el programa.
Si se selecciona 1, se introducirn 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 opcin 2, se debe mostrar un listado por nmero de dorsal.
La opcin 3 mostrar un listado ordenado por la marca del 2002, de mayor a menor.
Tras procesar cada opcin, se debe mostrar de nuevo el men inicial, hasta que se seleccione la
opcin 4, que terminar el programa.
package bol05ej11;
int opc,numc,dorsal,i,aux;
boolean d_rep,inter;
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();
case 3:
package bol06ej01;
package bol06ej02;
static int maximo(int a, int b){ // suponemos que los tres nmeros sern distintos
int max;
if(a>b)
max=a;
else
max=b;
return(max);
}
package bol06ej03;
return(max);
}
package bol06ej04;
/**
* Esto funciona solo para tablas con un tamao mnimo de 1
*
*/
static int maximo(int t[]){
int max;
max = t[0];
return(max);
}
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. Funcin a la que se le pasan dos enteros y muestra todos los nmeros comprendidos entre ellos,
inclusive.
package bo0l6ej05;
System.out.println();
}
mostrar(a,b);
}
}
6. Funcin que muestra en pantalla el doble del valor que se le pasa como parmetro.
package bol06ej06;
7. Realizar una funcin que calcule (muestre en pantalla) el rea o el volumen de un cilindro, segn
se especifique. Para distinguir un caso de otro se le pasar el carcter 'a' (para rea) o 'v'
(para el volumen). Adems hemos de pasarle a la funcin 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);
System.out.println("");
area_o_volumen_cilindro(radio,alt,tipo_calculo);
}
}
package bol06ej08;
calculo = new double [2]; // [0] para el volumen y [1] para el rea
return (calculo);
}
}
}
package bol06ej09;
i=2;
while(i<num && primo==true) // en realidad bastara probar hasta la raz cuadrada de num
{
if( num %i == 0) // si es divisible
primo=false; // si hemos entrado aqu significa que el nmero no es primo
i++;
}
return(primo);
}
return(cont);
}
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 nmero no es primo
i++;
}
return(primo);
}
return(cont);
}
return(div);
}
System.out.println("");
}
}
11.Escribir una funcin que calcule el mximo comn divisor de dos nmeros.
package bol06ej11;
return(mcd);
}
if(a>b)
min=b;
else
min=a;
return(min);
}
System.out.println("");
package bol06ej12;
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: ");
System.out.println("");
}
}
package bol06ej13;
return(mcd);
}
if(a>b)
min=b;
else
min=a;
return(min);
System.out.println("");
}
}
14.Escribir una funcin que calcule el mnimo comn mltiplo de dos nmeros.
package bol06ej14;
return(mcm);
}
if(a>b)
max=a;
return(max);
}
System.out.println("");
}
}
package bol06ej14;
return (mcm);
}
return(mcd);
}
if(a>b)
min=b;
else
return(min);
}
System.out.print("Introduce a: ");
a=Entrada.entero();
System.out.print("Introduce b: ");
b=Entrada.entero();
System.out.println("");
}
}
package bol06ej15;
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;
System.out.println("");
}
}
package bol06ej15;
return(mcm);
}
if(a>b)
max=a;
else
return(max);
}
System.out.println("");
}
}
package bol06ej16;
return(mcm);
if(a>b)
max=a;
else
max=b;
return(max);
}
t = new int[4];
System.out.println("");
mcm = t[0];
}
}
17.Escriba una funcin que decida si dos nmeros enteros positivos son amigos. Dos nmeros son
amigos, si la suma de sus divisores (distintos de ellos mismos) son iguales.
package bol06ej17;
i=2;
while(i<num && primo==true)
{
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);
}
System.out.print("Introduce b: ");
b=Entrada.entero();
}
}
18.Disea una funcin (en adelante DUF) que decida si un nmero es primo.
package bol06ej18;
primo=true;
i=2;
return(primo);
}
if(es_primo(num))
System.out.println("Es primo");
else
System.out.println("No es primo");
}
}
package bol06ej19;
return(res);
}
res=a_elevado_n (num,exp);
System.out.println(num + " elevado a " + exp +" = " +res);
}
}
package bol06ej20;
if (num<0 || 255<num)
System.out.println("Nmero 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("");
}
binario(num);
}
}
21. Escriba una funcin que sume los n primeros nmeros impares.
package bol06ej21;
return (suma);
}
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));
}
}
package bol06ej22;
angulo =Entrada.real();
informacion_angulo (angulo);
}
}
23. Disear una funcin que calcule la distancia eucldea de dos puntos.
static double distancia_euclidea (int x1, int y1, int x2, int y2)
{
// aqu no hay ms que tirar de la frmula de la distancia eucldea
// 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();
}
}
24. DUF a la que se le pasa como parmetro una tabla que debe rellenar. Se leer por teclado una
serie de nmeros: guardaremos solo los pares e ignoraremos los impares. Tambin 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++;
}
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 nmero. Debemos buscar el nmero en la tabla e
indicar si se encuentra o no.
package bol06ej25;
i=0;
return(esta);
}
}
}
26. Igual que el ejercicio anterior, pero suponiendo que la tabla no est siempre llena, y el nmero
de elementos se pasa tambin como parmetro.
package bol06ej26;
i=0;
return(esta);
}
a[0] = 1;
a[1] = 12;
a[2] = 38;
a[3] = 5;
a[4] = 11;
tam = 5;
}
}
27.Disear la funcin opera_tabla, a la que se le pasa dos tablas, el nmero de elementos tiles y
que operacin se desea realizar: sumar, restar, multiplicar o dividir (mediante un carcter: 's',
'r', 'm', 'd'). La funcin 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;
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++)
for(int i=0;i<num_datos_utiles;i++)
System.out.println (resultado[i]);
}
}
package bol06ej28;
}
}
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);
}
}
package bol06ej29;
aciertos=0;
// se podra hacer con un for, pero con el while evitamos vueltas innecesarias
while(p<premiado.length && apuesta[a]!=premiado[p])
p++;
aciertos=primitiva(primitiva,apuesta);
if (aciertos == 0)
System.out.println("Lo importante no es ganar... es participar.\n");
}
}
package bol06ej30;
return (res);
}
return (res);
}
package bol06ej31;
return(res);
}
resultado=factorial(num);
32. DUF que calcule el valor mximo de una tabla de forma recursiva.
package bol06ej32;
return(res);
}
max =maximo(datos);
package bol06ej32;
max =maximo(t);
33. DUF que calcule el n-simo trmino 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;
return(res);
}
}
34. Igual que el ejercicio anterior, pero pudiendo configurar los valores de los dos primeros trmino
de la serie.
package bol06ej34;
/**
* sobrecargamos la funcin para que funcione de la siguiente forma:
* - si solo se le pasa el trmino a calcular: utiliza los casos bases tpicos
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, tambin configurable
res=fibo1;
else
res=fibo(num-1,fibo0, fibo1)+fibo(num-2, fibo0, fibo1);
// caso general recursivo
// hemos de acordarnos de utilizar la funcin fibo que
// tiene 3 parmetros
}
35. DUF que realice la bsqueda dicotmica en una tabla, de forma recursiva.
package bol06ej35;
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 sern -1, y se coger el valor de pos2 (-1)
}
return(pos);
if (pos == -1)
36. DUF que toma una tabla bidimensional de enteros, representando un tablero de ajedrez. Disponemos
de las constantes PB (pen blanco), TN (torre negra), etc. (P, T, C, A, R, D). Dicho mdulo debe
devolver un valor booleano, que indique si el rey negro est amenazado.
package bol06ej36;
// 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;
return (amenaza);
}
return (posicion);
}
// esta funcin busca la primera pieza que existe desde la posicin pos,
// en la direccin indicada por dx, dy.
// Los valores de dx, dy son:
// dx dy direccin
// 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; //posicin del tablero en la que estamos mirando
int pieza;
posx =pos[0];
posy =pos[1];
posx += dx;
posy += dy;
}
return (pieza);
}
// Desde la posicin 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) ||
return (amenaza);
}
37. Igual que el ejercicio anterior, pero indicando si existe jaque mate a las negras.
package bol06ej37;
int num_jaque=0;
int pos_rey[];
pos_rey = busca_rey(tablero);
// AHORA
// miraremos hacia la derecha (dx:1, dy:0)
// aqu no puede amenazar una torre o dama
return (amenaza);
}
return (posicion);
}
// esta funcin busca la primera pieza que existe desde la posicin pos,
// en la direccin indicada por dx, dy.
// Los valores de dx, dy son:
// dx dy direccin
// 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; //posicin del tablero en la que estamos mirando
int pieza;
posx =pos[0];
posy =pos[1];
posx += dx;
posy += dy;
}
return (pieza);
}
// Desde la posicin 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;
int pos[];
pos = new int [2];
pos = busca_rey(tablero);
}
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);
}
BOLETN 1
Variables y condicionales
1. Pedir los coeficientes de una ecuacin se 2 grado, y muestre sus soluciones reales. Si no existen,
debe indicarlo.
12. Pedir un nmero entre 0 y 9.999 y mostrarlo con las cifras al revs.
15. Pedir el da, mes y ao de una fecha e indicar si la fecha es correcta. Suponiendo todos los meses de
30 das.
16. Pedir el da, mes y ao de una fecha e indicar si la fecha es correcta. Con meses de 28, 30 y 31
das. Sin aos bisiestos.
17. Pedir el da, mes y ao de una fecha correcta y mostrar la fecha del da siguiente. suponer que todos
los meses tienen 30 das.
18. dem que el ej. 17, suponiendo que cada mes tiene un nmero distinto de das (suponer que febrero
tiene siempre 28 das).
19. Pedir dos fechas y mostrar el nmero de das que hay de diferencia. Suponiendo todos los meses de 30
das.
20. Pedir una hora de la forma hora, minutos y segundos, y mostrar la hora en el segundo siguiente.
21. Pedir una nota numrica entera entre 0 y 10, y mostrar dicha nota de la forma: cero, uno, dos,
tres...
22. Pedir un nmero de 0 a 99 y mostrarlo escrito. Por ejemplo, para 56 mostrar: cincuenta y seis.
1. Leer un nmero y mostrar su cuadrado, repetir el proceso hasta que se introduzca un nmero negativo.
2. Leer un nmero e indicar si es positivo o negativo. El proceso se repetir hasta que se introduzca un
0.
3. Leer nmeros hasta que se introduzca un 0. Para cada uno indicar si es par o impar.
4. Pedir nmeros hasta que se teclee uno negativo, y mostrar cuntos nmeros se han introducido.
5. Realizar un juego para adivinar un nmero. Para ello pedir un nmero N, y luego ir pidiendo nmeros
indicando mayor o menor segn sea mayor o menor con respecto a N. El proceso termina cuando el
usuario acierta.
6. Pedir nmeros hasta que se teclee un 0, mostrar la suma de todos los nmeros introducidos.
11. Disear un programa que muestre el producto de los 10 primeros nmeros impares.
13. Pedir 10 nmeros. Mostrar la media de los nmeros positivos, la media de los nmeros negativos y la
cantidad de ceros.
16. Pide un nmero (que debe estar entre 0 y 10) y mostrar la tabla de multiplicar de dicho nmero.
17. Una empresa que se dedica a la venta de desinfectantes necesita un programa para gestionar las
facturas. En cada factura figura: el cdigo del artculo, la cantidad vendida en litros y el precio
por litro.
Se pide de 5 facturas introducidas: Facturacin total, cantidad en litros vendidos del artculo 1 y
cuantas facturas se emitieron de ms 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.
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. Disea una aplicacin que muestre las tablas de multiplicar del 1 al 10.
5. Necesitamos mostrar un contador con 5 dgitos (X-X-X-X-X), que muestre los nmeros 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 nmero n, y nos diga cuantos nmeros hay entre 1 y n que son
primos.
3. Leer 5 nmeros por teclado y a continuacin realizar la media de los nmeros positivos, la
media de los negativos y contar el nmero de ceros.
4. Leer 10 nmeros enteros. Debemos mostrarlos en el siguiente orden: el primero, el ltimo, el segundo,
el penltimo, el tercero, etc.
5. Leer por teclado dos tablas de 10 nmeros 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 numricos, 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 nmeros enteros. La aplicacin debe indicarnos si los nmeros estn
ordenados de forma creciente, decreciente, o si estn desordenados.
8. Disear una aplicacin que declare una tabla de 10 elementos enteros. Leer mediante el teclado 8
nmeros. Despus se debe pedir un nmero y una posicin, insertarlo en la posicin indicada, desplazando
los que estn detrs.
9. Crear un programa que lea por teclado una tabla de 10 nmeros enteros y la desplace una posicin
hacia abajo (el ltimo pasa a ser el primero).
11. Leer 5 elementos numricos que se introducirn ordenados de forma creciente. stos los guardaremos
en una tabla de tamao 10. Leer un nmero N, e insertarlo en el lugar adecuado para que la tabla
contine ordenada.
12. Leer por teclado una tabla de 10 elementos numricos enteros y leer una posicin (entre 0 y 9).
Eliminar el elemento situado en la posicin dada sin dejar huecos.
13. Leer 10 enteros. Guardar en otra tabla los elementos pares de la primera, y a continuacin 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 estarn 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 posicin
en que se encuentra. Si no est, indicarlo con un mensaje.
16. Queremos desarrollar una aplicacin 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 posicin N (N se lee por teclado).
1. Crear una tabla bidimensional de tamao 5x5 y rellenarla de la siguiente forma: la posicin T[n,m]
debe contener n+m. Despus se debe mostrar su contenido.
2. Crear y cargar una tabla de tamao 4x4 y decir si es simtrica o no, es decir, si se obtiene la misma
tabla al cambiar filas por columnas.
5. Crear una tabla de tamao 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 tamao 10x10, mostrar la suma de cada fila y de cada columna.
7. utilizando dos tablas de tamao 5x9 y 9x5, cargar la primera y trasponerla en la segunda.
8. Crear una matriz marco de tamao 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:
11-Se pretende realizar un programa para gestionar la lista de participaciones en una competicin de
salto de longitud. El nmero de plazas disponible es de 10. Sus datos se irn introduciendo en el mismo
orden que vayan inscribindose los atletas. Disear 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 introducirn 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 opcin 2, se debe mostrar un listado por nmero de dorsal.
La opcin 3 mostrar un listado ordenado por la marca del 2002, de mayor a menor.
Tras procesar cada opcin, se debe mostrar de nuevo el men inicial, hasta que se seleccione la opcin
4, que terminar el programa.
1. Realizar una funcin, a la que se le pase como parmetro un nmero N, y muestre por pantalla
N veces, el mensaje: Mdulo ejecutndose
2. Disear una funcin que tenga como parmetros dos nmeros, y que calcule el mximo.
5. Funcin a la que se le pasan dos enteros y muestra todos los nmeros comprendidos entre
ellos, inclusive.
6. Funcin que muestra en pantalla el doble del valor que se le pasa como parmetro.
7. Realizar una funcin que calcule (muestre en pantalla) el rea o el volumen de un cilindro,
segn se especifique. Para distinguir un caso de otro se le pasar el carcter 'a' (para
rea) o 'v' (para el volumen). Adems hemos de pasarle a la funcin el radio y la altura.
9. Mdulo al que se le pasa un nmero entero y devuelve el nmero de divisores primos que
tiene.
10.dem disear una funcin que devuelve una tabla con los divisores.
11.Escribir una funcin que calcule el mximo comn divisor de dos nmeros.
14.Escribir una funcin que calcule el mnimo comn mltiplo de dos nmeros.
17.Escriba una funcin que decida si dos nmeros enteros positivos son amigos. Dos nmeros son
amigos, si la suma de sus divisores (distintos de ellos mismos) son iguales.
18.Disea una funcin (en adelante DUF) que decida si un nmero es primo.
21. Escriba una funcin que sume los n primeros nmeros impares.
22. Dado el valor de un ngulo, sera interesante saber su seno, coseno y tangente. Escribir
una funcin que muestre en pantalla los datos anteriores.
23. Disear una funcin que calcule la distancia eucldea de dos puntos.
24. DUF a la que se le pasa como parmetro una tabla que debe rellenar. Se leer por teclado
una serie de nmeros: guardaremos solo los pares e ignoraremos los impares. Tambin hay que
devolver la cantidad de impares ignorados.
25. DUF a la que se le pasa una tabla de enteros y un nmero. Debemos buscar el nmero en la
tabla e indicar si se encuentra o no.
29. DUF que toma como parmetros dos tablas. La primera con los 6 nmeros de una apuesta de la
primitiva, y la segunda con los 6 nmeros ganadores. La funcin debe devolver el nmero de
aciertos.
32. DUF que calcule el valor mximo de una tabla de forma recursiva.
33. DUF que calcule el n-simo trmino 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
trmino de la serie.
35. DUF que realice la bsqueda dicotmica 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 (pen blanco), TN (torre negra), etc. (P, T, C, A, R, D).
37. Igual que el ejercicio anterior, pero indicando si existe jaque mate a las negras.
import java.io.*;