4. MANUAL DE PRÁCTICAS FUNDAMENTOS DE PROGRAMACIÓN
3VHXGRFyGLJR
inicio
leer Galones, Precio
hacer Total = Galones * 3.780 * Precio
escribir Total
fin
3URJUDPD HQ -DYD
import java.io.*;
public class Practica_2{
public static void main (String args[])throws IOException{
double Galones, Total, Precio;
InputStreamReader res=new InputStreamReader(System.in);
BufferedReader calculo=new BufferedReader(res);
System.out.println(quot;Introduzca los galones de gasolinaquot;);
Galones=Float.parseFloat(calculo.readLine());
System.out.println(quot;Introduzca el precio del litro de gasolinaquot;);
Precio=Float.parseFloat(calculo.readLine());
Total=Galones*3.785*Precio;
System.out.println(quot;Total a pagar del cliente es:quot;+Total);
}
}
35È7,$
Calcular e imprimir el área y volumen de un cilindro, dados su radio y altura.
2EMHWLYR GH OD SUiFWLFD
,PSOHPHQWDU XQ JUXSR GH FODVHV TXH XWLOLFHQ FRQVWUXFWRUHV PRGLILFDGRUHV GH DFFHVR SDUD
DQDOL]DU GH TXp IRUPD DIHFWDQ HO IXQFLRQDPLHQWR GH ODV FODVHV FXDQGR VRQ UHFRPHQGDEOHV FDGD XQR
GH HOORV
$QiOLVLV GHO SUREOHPD
Para el cálculo de los valores del área y volumen de un cilindro, es necesaria la lectura de dos
variables Radio y Altura de tipo GRXEOH, así como dos variables de asignación de los valores de área y
volumen, ambos de tipo GRXEOH.
El área del cilindro lo calculamos aplicando la siguiente formula:
UDGLR
DOWXUD
Área = 2 *
'RQGH
El volumen del cilindro lo calculamos aplicando la siguiente formula:
9ROXPHQ
UDGLR2 * altura
132
6. MANUAL DE PRÁCTICAS FUNDAMENTOS DE PROGRAMACIÓN
19 public Cilindro(double h, double r) {
20 area = 2 * r * PI * h;
21 volumen = PI * r * r * h;
22 }
23 }
En esta práctica se hace uso de dos clases, Practica_3 y Cilindro; la primera contiene la función
PDLQ, en la cual realizamos la solicitud de las variables Radio y Altura, como se muestra de la línea 7 a
la 10; la segunda clase es Cilindro, en donde inicialmente se define la variable PI como SXEOLF VWDWLF
ILQDO, que indica que el valor no puede ser modificado, o lo que es lo mismo, es una FRQVWDQWH. La
sentencia 18 nos muestra el modificador de acceso SXEOLF el cual nos indica que los atributos area y
volumen son visibles fuera de la clase, contrario a si fueran declarados como SULYDWH. La sentencia 19
define el constructor general de la clase Cilindro, que recibe como argumentos (K U
8. FUNDAMENTOS DE PROGRAMACIÓN MANUAL DE PRÁCTICAS
3VHXGRFyGLJR
inicio
leer Centigrados
hacer Fahrenheit = 1.8 * Centigrados +32
escribir Fahrenheit
fin
3URJUDPD HQ -DYD
import java.io.*;
public class Practica_4{
public static void main (String args[])throws IOException{
double Centigrado;
InputStreamReader res=new InputStreamReader(System.in);
BufferedReader calculo=new BufferedReader(res);
System.out.println(quot;Introduzca el grados centigradosquot;);
Centigrado=Float.parseFloat(calculo.readLine());
Grados grados = new Grados (Centigrado);
System.out.println(quot;Los grados Fahrenheit son: quot;+grados.fahrenheit);
}
}
class Grados{
public double fahrenheit;
public Grados(double c) {
fahrenheit = 1.8 * c + 32;
}
}
35È7,$
Construya un programa que tomando como dato la calificación de un alumno en un examen,
escriba “Aprobado” en caso de que esa calificación sea mayor o igual a 8.
2EMHWLYR GH OD SUiFWLFD
,PSOHPHQWDU FODVHV TXH UHTXLHUDQ GH HVWUXFWXUDV VHOHFWLYDV SDUD SUREDUODV HQ XQD DSOLFDFLyQ
$QiOLVLV GHO SUREOHPD
Para este ejercicio solo hacemos solicitud de una variable de tipo IORDW llamada calificación, que
compararemos en una estructura selectiva LI simple. Solo si la condición resulta verdadera mostrara el
mensaje “Aprobado”.
135
12. FUNDAMENTOS DE PROGRAMACIÓN MANUAL DE PRÁCTICAS
3VHXGRFyGLJR
inicio
leer Salario
si Salario 1000
escribir Salario = Salario * 1.15
sino
escribir Salario = Salario * 1.12
fin_si
fin
3URJUDPD HQ -DYD
import java.io.*;
public class Practica_7{
public static void main (String args[])throws IOException{
double Salario;
BufferedReader Calc = new BufferedReader(new InputStreamReader(System.in));
System.out.println(quot;Introduzca el salario del trabajadorquot;);
Salario = Float.parseFloat(Calc.readLine());
if (Salario 1000)
Salario = Salario*1.15;
else
Salario = Salario*1.12;
System.out.println(quot;El nuevo sueldo del trabajador es:quot;+ Salario);
}
}
35È7,$
Imprimir tres números enteros diferentes leídos desde el teclado en forma descendente.
2EMHWLYR GH OD SUiFWLFD
,PSOHPHQWDU FODVHV TXH UHTXLHUDQ GH HVWUXFWXUDV VHOHFWLYDV DQLGDGDV SDUD SUREDUODV HQ XQD
DSOLFDFLyQ
$QiOLVLV GHO 3UREOHPD
Dados los datos A, B, C que representan variables de tipo LQW, ordenarlos en forma descendentes,
esto con ayuda de varias estructuras selectivas LI HOVH anidadas
139
14. FUNDAMENTOS DE PROGRAMACIÓN MANUAL DE PRÁCTICAS
3URJUDPD HQ -DYD
import java.io.*;
public class Practica_8{
public static void main (String args[])throws IOException{
int A,B,C;
InputStreamReader res = new InputStreamReader (System.in);
BufferedReader calculo = new BufferedReader(res);
System.out.println(quot;Introduzca el valor de Aquot;);
A=Integer.parseInt(calculo.readLine());
System.out.println(quot;Introduzca el valor de Bquot;);
B=Integer.parseInt(calculo.readLine());
System.out.println(quot;Introduzca el valor de Cquot;);
C=Integer.parseInt(calculo.readLine());
if (AB)
if (AC)
if (BC)
System.out.println(A+quot; quot;+B+quot; quot;+C);
else
System.out.println(A+quot; quot;+C+quot; quot;+B);
else
System.out.println(C+quot; quot;+A+quot; quot;+B);
else
if (BC)
if (AC)
System.out.println(B+quot; quot;+A+quot; quot;+C);
else
System.out.println(B+quot; quot;+C+quot; quot;+A);
else
System.out.println(C+quot; quot;+ B+quot; quot;+A);
}
}
35È7,$
Imprimir los nombres de los días de la semana, en función del valor de una variable Dia
introducida por el teclado.
2EMHWLYR GH OD SUiFWLFD
,PSOHPHQWDU FODVHV TXH UHTXLHUDQ GH HVWUXFWXUDV VHOHFWLYDV P~OWLSOHV SDUD LPSOHPHQWDUODV HQ HO
GHVDUUROOR GH DSOLFDFLRQHV
$QiOLVLV GHO 3UREOHPD
La variable Día introducida por el usuario será de tipo LQW, y a partir de ella obtendremos el día de
la semana correspondiente, para ello haremos uso de la estructura selectiva múltiple VZLWFK, debido a
que cada sentencia FDVH se corresponde con un único valor de H[SUHVLyQ No se pueden establecer
rangos o condiciones, como en el caso del LI HOVH, sino que se debe comparar con valores concretos.
141
16. FUNDAMENTOS DE PROGRAMACIÓN MANUAL DE PRÁCTICAS
case 3: System.out.println(quot;Miercolesquot;);break;
case 4: System.out.println(quot;Juevesquot;); break;
case 5: System.out.println(quot;Viernesquot;); break;
case 6: System.out.println(quot;Sabadoquot;); break;
case 7: System.out.println(quot;Domingoquot;); break;
default: System.out.println(quot;Errorquot;); break;
}
}
}
Los valores no comprendidos en ninguna sentencia FDVH se pueden gestionar en GHIDXOW, que es
opcional. En ausencia de EUHDN, cuando se ejecuta una sentencia FDVH se ejecutan también todas las que
van a continuación, hasta que se llega a un EUHDN o hasta que se termina el VZLWFK.
35È7,$
Imprimir el número de días de un mes, en función del número de orden dentro del calendario
(1= Enero, 2 = Febrero, etc.) y teniendo en cuenta si el año es bisiesto o no.
2EMHWLYR GH OD SUiFWLFD
,PSOHPHQWDU FODVHV TXH UHTXLHUDQ GH HVWUXFWXUDV VHOHFWLYDV P~OWLSOHV SDUD LPSOHPHQWDUODV HQ HO
GHVDUUROOR GH DSOLFDFLRQHV
$QiOLVLV GHO SUREOHPD
La obtención del número de días con los que cuenta un mes, requiere de dos variables de tipo LQW,
Mes, la palabra Año no puede ser utilizada como identificador válido porque la mayoría de los
compiladores no reconoce la letra x, para este caso utilizaremos el identificador Anio y para ello
debemos tomar en consideración si el año es o no bisiesto, esto se llevara a cabo a partir de las
siguientes reglas:
5HJOD Los años exactamente divisibles entre 4 VRQ años bisiestos.
•
5HJOD Los años exactamente divisibles entre 100 QR VRQ años bisiestos.
•
5HJOD Los años exactamente divisibles entre 400 VRQ años bisiestos
•
Decidir si utilizar la sentencia LI o VZLWFK es a consideración del programador, el cual puede decidir
cuál usar basado en la legibilidad y otros factores. La sentencia LI se puede utilizar para tomar las
decisiones basadas en gamas de valores o de condiciones, mientras que la sentencia VZLWFK puede tomar
las decisiones basadas solamente en un solo número entero, un valor enumerado o único.
Otro punto de interés es la sentencia EUHDN después de cada FDVH. Cada sentencia EUHDN termina la
declaración FDVH que incluye, y el flujo del control continúa con la siguiente declaración FDVH Las
declaraciones EUHDN son necesarias porque sin ellas el control fluiría secuencialmente con declaraciones
FDVH subsecuentes. Esta práctica nos ilustra una de las utilidades de la sentencia FDVH dentro de la
estructura secuencial múltiple VZLWFK
143
17. MANUAL DE PRÁCTICAS FUNDAMENTOS DE PROGRAMACIÓN
inicio
leer Mes, Anio
Mes
4, 6, 9, 11
1, 3, 5, 7, 8, 10, 12 2 Otro
Escribir Escribir Escribir
“ 31” “ 30” “ No existe”
6)
0
[(Anio 4 = 0)
Si No
7
6 07 6)
0
(Anio 100 = 0)]
6
( 6)
0
(Anio 400 = 0)
Escribir Escribir
“ 29” “ 28”
fin
#¥4 ¨§¥ ¢$
65 3 2 1 0 ) ( ' % Práctica 10
3VHXGRFyGLJR
inicio
leer Mes, Anio
según sea Mes
1, 3, 5, 7, 8, 10, 12: escribir “ 31”
4, 6, 9, 11: escribir “ 30”
2: si ((Anio % 4 = 0 !Anio % 100 = 0) || Anio % 400 = 0)
escribir “ 29”
sino
escribir “ 30”
fin_si
otro: escribir “ No existe”
fin_segun
fin
144
18. FUNDAMENTOS DE PROGRAMACIÓN MANUAL DE PRÁCTICAS
3URJUDPD HQ MDYD
import java.io.*;
public class Practica_10 {
public static void main(String[] args) throws IOException {
int Mes;
int Anio;
BufferedReader Oper= new BufferedReader (new InputStreamReader(System.in));
System.out.println (quot;Introduzca el numero del mesquot;);
Mes = Integer.parseInt(Oper.readLine());
System.out.println (quot;Introduzca el anioquot;);
Anio = Integer.parseInt(Oper.readLine());
switch (Mes) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(quot;Numero de dias = 31 quot;); break;
case 4:
case 6:
case 9:
case 11:
System.out.println(quot;Numero de dias = 30 quot;); break;
case 2:
if (((Anio % 4 == 0) !(Anio % 100 == 0)) || (Anio % 400 == 0))
System.out.println(quot;Numero de dias = 29 quot;);
else
System.out.println(quot;Numero de dias = 28 quot;);
break;
default:
System.out.println(quot;No existequot;); break;
}
}
}
35È7,$
Desarrolle un programa que invierta un número entero N dado por el usuario.
2EMHWLYR GH OD SUiFWLFD
RPSUHQGHU HO XVR IXQFLRQDPLHQWR GH ODV HVWUXFWXUDV GH UHSHWLFLyQ HQ HO PRPHQWR GH
LPSOHPHQWDU FODVHV TXH LPSOLTXHQ HO GLVHxR GH DOJRULWPRV SDUD SUREDUODV HQ XQD DSOLFDFLyQ
$QiOLVLV GHO SUREOHPD
El fin de la práctica es mostrar el número invertido de una cifra, por ejemplo, de 12345 su número
invertido es 54321.
145
19. MANUAL DE PRÁCTICAS FUNDAMENTOS DE PROGRAMACIÓN
Para esta circunstancia, definimos las variables num_inv = 0, div_entera = num,
resto_div = 0; el procedimiento a seguir es obtener el residuo de las divisiones sucesivas de la
variable num de tipo LQW entre 10, para posteriormente sumar este residuo a la variable resto_div
multiplicada por 10.
inicio
leer num
num_inv = 0
div_entera = num
resto_div = 0
No
div_entera != 0
Si
resto_div = div_entera mod 10
div_entera = div_entera / 10
num_inv = num_inv * 10 + resto_div
escribir
num_inv
fin
#¥4 ¨§¥ ¢$
65 3 2 1 0 ) ( ' % Práctica 11
3VHXGRFyGLJR
Inicio
escribir “ Ingrese número”
leer num
num_inv = 0
div_entera = num
resto_div = 0
mientras div_entera != 0
hacer resto_div = div_entera mod 10
hacer div_entera = div_entera / 10
hacer num_inv = num_inv * 10 + resto_div
fin_mientras
escribir quot;El numero quot; + num + quot; invertido es quot; + num_inv
fin
146
20. FUNDAMENTOS DE PROGRAMACIÓN MANUAL DE PRÁCTICAS
3URJUDPD HQ -DYD
import java.io.*;
class Practica_11{
public static void main(String Arg[ ]) throws IOException {
int num , num_inv , div_entera , resto_div;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.print(quot;Ingrese numero : quot;);
num = Integer.parseInt(in.readLine());
num_inv = 0;
div_entera = num;
resto_div = 0;
while (div_entera != 0) {
resto_div = div_entera % 10;
div_entera = div_entera / 10;
num_inv = num_inv * 10 + resto_div;
}
System.out.println(quot;El numero quot; + num + quot; invertido es quot; + num_inv);
}
}
35È7,$
Calcular e imprimir la media de N números dados por el usuario.
2EMHWLYR GH OD SUiFWLFD
RPSUHQGHU HO XVR IXQFLRQDPLHQWR GH ODV HVWUXFWXUDV GH UHSHWLFLyQ HQ HO PRPHQWR GH
LPSOHPHQWDU FODVHV TXH LPSOLTXHQ HO GLVHxR GH DOJRULWPRV SDUD SUREDUODV HQ XQD DSOLFDFLyQ
$QiOLVLV GHO SUREOHPD
Para realizar el cálculo del promedio de una cierta cantidad de números definiremos las siguientes
variables:
N : tipo LQW, determinará el número de veces que la estructura de repetición se efectuará;
Contador: tipo LQW un contador es una variable que incrementa de forma constante dentro de la
estructura de repetición.
Acumulador: tipo GRXEOH, almacena la suma de los números introducidos desde el teclado;
Promedio: tipo GRXEOH guarda la media de los números dados, mediante la formula:
Promedio = Acumulador / N
147
21. MANUAL DE PRÁCTICAS FUNDAMENTOS DE PROGRAMACIÓN
inicio
N = 0, Contador =1, x = 0
Acumulador =0, Promedio = 0
leer N
No
Contador = N
Si
leer x
Acumulador = Acumulador + x
Contador = Contador + 1
Promedio = Acumulador / N
escribir
Promedio
fin
#¥4 ¨§¥ ¢$
65 3 2 1 0 ) ( ' % Práctica 12
3VHXGRFyGLJR
inicio
N = 0, x = 0, Acumulador = 0, Promedio = 0, Contador = 1
leer N
mientras Contador = N
leer x
hacer Acumulador =Acumulador + x
hacer Contador = Contador + 1
fin_mientras
hacer Promedio = Acumulador / N
escribir Promedio
fin
148
22. FUNDAMENTOS DE PROGRAMACIÓN MANUAL DE PRÁCTICAS
3URJUDPD HQ -DYD
import java.io.*;
public class Practica_12{
public static void main(String arg[]) throws IOException{
int N = 0, Contador = 1;
double Acumulador = 0, Promedio = 0, x = 0;
BufferedReader calc = new BufferedReader (new InputStreamReader(System.in));
System.out.println(quot;Dame un numero: quot;);
N = Integer.parseInt(calc.readLine());
while (Contador = N){
System.out.println(quot;Numero quot;+Contador);
x = Float.parseFloat(calc.readLine());
Acumulador= Acumulador + x;
Contador=Contador+1;
}
Promedio = Acumulador / N;
System.out.println(quot;El promedio es: quot; + Promedio);
}
}
35È7,$
Imprimir los números impares menores o iguales a N.
2EMHWLYR GH OD SUiFWLFD
RPSUHQGHU HO XVR IXQFLRQDPLHQWR GH ODV HVWUXFWXUDV GH UHSHWLFLyQ HQ HO PRPHQWR GH
LPSOHPHQWDU FODVHV TXH LPSOLTXHQ HO GLVHxR GH DOJRULWPRV SDUD SUREDUODV HQ XQD DSOLFDFLyQ
$QiOLVLV GHO SUREOHPD
Para resolver este ejercicio necesitaremos de una variable Contador de tipo LQW y un variable N que
delimitara el numero de iteraciones de la estructura repetitiva ZKLOH Incrementaremos el contador en
dos unidades en cada iteración para desplegar el número impar correspondiente.
149
23. MANUAL DE PRÁCTICAS FUNDAMENTOS DE PROGRAMACIÓN
inicio
N = 0, Contador =1
leer N
No
Contador = N
Si
escribir
Contador
Contador = Contador + 2
fin
#¥4 ¨§¥ ¢$
65 3 2 1 0 ) ( ' % Práctica 13
3VHXGRFyGLJR
inicio
N = 0, Contador = 1
leer N
mientras Contador = N
imprimir Contador
hacer Contador = Contador + 2
fin_mientras
fin
3URJUDPD HQ -DYD
import java.io.*;
public class Practica_13{
public static void main(String arg[]) throws IOException{
int N = 0, Contador = 1;
BufferedReader calc = new BufferedReader (new InputStreamReader(System.in));
System.out.println(quot;Dame un numero: quot;);
N = Integer.parseInt(calc.readLine());
while (Contador = N){
System.out.println(Contador);
Contador=Contador + 2;
}
}
}
150
24. FUNDAMENTOS DE PROGRAMACIÓN MANUAL DE PRÁCTICAS
35È7,$
Imprimir la tabla de Multiplicar de N.
2EMHWLYR GH OD SUiFWLFD
RPSUHQGHU HO XVR IXQFLRQDPLHQWR GH ODV HVWUXFWXUDV GH UHSHWLFLyQ HQ HO PRPHQWR GH
LPSOHPHQWDU FODVHV TXH LPSOLTXHQ HO GLVHxR GH DOJRULWPRV SDUD SUREDUODV HQ XQD DSOLFDFLyQ
$QiOLVLV GHO SUREOHPD
Se desea mostrar la tabla de multiplicar de un número dado, a partir de una estructura cíclica ZKLOH
con la cual utilizaremos una variable de tipo LQW llamada Contador que incrementa su valor en uno, para
esto aplicaremos un operador de incremento Contador++; que es similar a la expresión aritmética
Contador = Contador + 1, observe que el resultado es idéntico en ambos casos.
inicio
N = 0, Contador =1
leer N
No
Contador = N
Si
escribir
N + “ * ” + Contador + “ = ” + N * Contador
Contador++
fin
#¥4 ¨§¥ ¢$
65 3 2 1 0 ) ( ' % Práctica 14
151
25. MANUAL DE PRÁCTICAS FUNDAMENTOS DE PROGRAMACIÓN
3VHXGRFyGLJR
inicio
N = 0, Contador = 1
leer N
mientras Contador = 10
imprimir N + “ * ” + Contador + “ = “ + N*Contador
hacer Contador ++
fin_mientras
fin
3URJUDPD HQ -DYD
import java.io.*;
public class Practica_14{
public static void main(String arg[]) throws IOException{
int N = 0, Contador = 1;
BufferedReader calc = new BufferedReader (new InputStreamReader(System.in));
System.out.println(quot;Dame un numero: quot;);
N = Integer.parseInt(calc.readLine());
while (Contador = 10){
System.out.println(N+ quot; * quot; +Contador+quot; = quot; + N*Contador);
Contador++;
}
}
}
35È7,$
Imprimir y calcular el cociente y el resto de dos números enteros.
2EMHWLYR GH OD SUiFWLFD
RPSUHQGHU HO XVR IXQFLRQDPLHQWR GH ODV HVWUXFWXUDV GH UHSHWLFLyQ HQ HO PRPHQWR GH
LPSOHPHQWDU FODVHV TXH LPSOLTXHQ HO GLVHxR GH DOJRULWPRV SDUD SUREDUODV HQ XQD DSOLFDFLyQ
$QiOLVLV GHO SUREOHPD
El método de obtener el cociente y el resto es por restas sucesivas, el cual consiste en restar
sucesivamente el divisor del dividendo hasta obtener un resultado menor o igual que el divisor y que
será el resto de la división, el número de restas efectuadas será el cociente.
152
26. FUNDAMENTOS DE PROGRAMACIÓN MANUAL DE PRÁCTICAS
inicio
Dividendo = 0, Divisor = 0
Cociente = 0, Resto = 0
leer Dividendo, Divisor
Resto = Dividendo
Resto -= Divisor
Cociente++
Si
Resto = Divisor
No
Cociente, Resto
fin
#¥4 ¨§¥ ¢$
65 3 2 1 0 ) ( ' % Práctica 15
3VHXGRFyGLJR
inicio
Dividendo = 0, Divisor = 0, Cociente = 0, Resto = 0
leer Dividendo, Divisor
Resto = Dividendo
repetir
Resto – = Divisor
Cociente++
hasta que (Resto = Divisor)
escribir “ El cociente es : ” + Cociente
escribir “ El resto es : ” + Resto
fin
153
27. MANUAL DE PRÁCTICAS FUNDAMENTOS DE PROGRAMACIÓN
3URJUDPD HQ -DYD
import java.io.*;
public class Practica_15{
public static void main(String arg[]) throws IOException{
int Dividendo = 0, Divisor = 0, Cociente = 0, Resto = 0;
BufferedReader calc = new BufferedReader (new InputStreamReader(System.in));
System.out.println(quot;Dame el dividendo: quot;);
Dividendo = Integer.parseInt(calc.readLine());
System.out.println(quot;Dame el divisor: quot;);
Divisor = Integer.parseInt(calc.readLine());
Resto = Dividendo;
do{
Resto –= Divisor;
Cociente++;
} while (Resto = Divisor);
System.out.println(quot;El Cociente es:quot; +Cociente+quot; El Resto es: quot;+Resto);
}
}
35È7,$
Construya un programa que indique al usuario los números primos comprendidos entre 1 y N.
2EMHWLYR GH OD SUiFWLFD
RPSUHQGHU HO XVR IXQFLRQDPLHQWR GH ODV HVWUXFWXUDV GH UHSHWLFLyQ HQ HO PRPHQWR GH
LPSOHPHQWDU FODVHV TXH LPSOLTXHQ HO GLVHxR GH DOJRULWPRV SDUD SUREDUODV HQ XQD DSOLFDFLyQ
$QiOLVLV GHO SUREOHPD
La característica principal de un número primo consiste en que éste solo es divisible entre si mismo
y uno, por lo tanto, el algoritmo consiste en buscar si el entero tiene un divisor diferente de los dos
anteriores; el proceso se lleva a cabo KDVWD la mitad entera del valor a evaluar ya que después de esta
cualquier valor no divide a éste.
Un FRQWDGRU es una variable cuyo valor se incrementa o decrementa en una cantidad fija en cada
iteración, en este caso el contador lo inicializaremos en 1 e irá incrementando su valor hasta N, para
mostrar los números primos existentes, esta es una variable de tipo LQW.
Para identificar si el número dentro del rango, es primo o no, se define la clase 3ULPR, la cual
devuelve una variable de tipo ERROHDQ o lógico (WUXH R IDOVH).
154
28. FUNDAMENTOS DE PROGRAMACIÓN MANUAL DE PRÁCTICAS
inicio Primo (N)
Contador = 1
primo = true, i=2
leer Numero
No Si
(N mod i == 0)
escribir and (N3)
“ Los número primos son:”
primo = false
No Si
Numero. primo
i++
escribir Contador
Si
iN/2
Contador++ No
fin
Si
Contador = Numero
No
fin
#¥4 ¨§¥ ¢$
65 3 2 1 0 ) ( ' % Práctica 16
3VHXGRFyGLJR
inicio
escribir “ Escribe un número”
leer Numero
escribir “ Los números primos son:”
Contador = 1
repetir
Num = Contador
Si (Num es SULPR)
Escribir Contador
Fin_si
Contador++
hasta que (Contador = Numero)
fin
155
29. MANUAL DE PRÁCTICAS FUNDAMENTOS DE PROGRAMACIÓN
clase 3ULPR
inicio
primo = verdadero
i=2
Constructor Primo (N): entero
inicio
repetir
si (N mod i = 0) and (N3)
primo = falso
fin_si
i++
hasta que (i N / 2)
fin
fin
3URJUDPD HQ -DYD
import java.io.*;
public class Practica_16{
public static void main (String arg[]) throws IOException{
int Numero, Contador;
BufferedReader tecl = new BufferedReader(new InputStreamReader(System.in));
System.out.println (quot;Escribe un numero:quot;);
Numero = Integer.parseInt(tecl.readLine());
System.out.println(quot;nLos numeros primos son:quot;);
Contador = 1;
do{
Primo Num = new Primo(Contador);
if (Num.primo)
System.out.println(Contador);
Contador++;
} while (Contador = Numero);
}
}
class Primo{
public boolean primo = true;
private int i=2;
public Primo(int N){
do{
if ((N % i == 0)(N 3))
primo = false;
i++;
}while(i N / 2);
}
}
Al enviar información de salida hay ocasiones en que resulta útil agregar algo de formato con
VHFXHQFLDV GH HVFDSH,
caracteres especiales llamado un ejemplo es
System.out.println(quot;?QLos números primos son:quot;), en donde ?Q representa
una nueva línea, es decir, coloca el cursor al principio de la siguiente línea.
156
30. FUNDAMENTOS DE PROGRAMACIÓN MANUAL DE PRÁCTICAS
35È7,$
Construya un programa que calcule la función Factorial de un número N (N!).
2EMHWLYR GH OD SUiFWLFD
RPSUHQGHU HO XVR IXQFLRQDPLHQWR GH ODV HVWUXFWXUDV GH UHSHWLFLyQ HQ HO PRPHQWR GH
LPSOHPHQWDU FODVHV TXH LPSOLTXHQ HO GLVHxR GH DOJRULWPRV SDUD SUREDUODV HQ XQD DSOLFDFLyQ
$QiOLVLV GHO SUREOHPD
El factorial de un número entero positivo se define como el producto de todos los números
naturales anteriores o iguales a él. Se escribe n! y se lee “ n factorial” , por definición establecida el
factorial de 0 es 1. Por ejemplo:
5! = 1 * 2 * 3 * 4 * 5
5! = 120
Para realizar el factorial del número, hacemos uso de una clase )DFWRULDO, que recibe el argumento
de tipo LQW 1, se definen también dos variables, la primera SXEOLF llamada IDFW inicializada en 1, y la
segunda SULYDWH L; y en el constructor )DFWRULDO es donde se realizan las iteraciones del ciclo IRU cuyo
valor inicial es 2, el valor final 1 y su incremento en 1 de L.
inicio Factorial (N)
escribir Fact = 1
“ Introduzca un número”
No
i = 2 ; i = N ; i++
leer Numero
Si
Fact += i
escribir
“ El factorial de ” Numero “ es ” Num.fact
fin fin
#¥H @¨§¥@ ¢8
PI G F E D C @B A 9 Práctica 17
157
31. MANUAL DE PRÁCTICAS FUNDAMENTOS DE PROGRAMACIÓN
3VHXGRFyGLJR
inicio
escribir “ Introduzca un número”
leer Numero
Factorial Num (Numero)
escribir “ El factorial de “ Numero “ es “ Num.fact
fin
clase Factorial
inicio
fact = 1
contructor Factorial (N): entero
inicio
desde i=2 hasta i = N hacer i++
hacer fact *= i
fin_desde
fin
fin
3URJUDPD HQ -DYD
import java.io.*;
public class Practica_17{
public static void main (String arg[] ) throws IOException{
int Numero;
BufferedReader tecl= new BufferedReader (new InputStreamReader(System.in));
System.out.println (quot;Introduzca un numero entero:quot;);
Numero = Integer.parseInt(tecl.readLine());
Factorial Num = new Factorial(Numero);
System.out.println(quot;Factorial de quot;+ Numero +quot; es quot;+Num.fact);
}
}
class Factorial{
public double fact=1;
private int i;
public Factorial(int N) {
for (i=2; i=N; i++){
fact *= i;
}
}
}
La expresión fact *= i utiliza un operador de asignación
que es similar a la expresión
fact = fact * i.
158
32. FUNDAMENTOS DE PROGRAMACIÓN MANUAL DE PRÁCTICAS
35È7,$
Construya un programa que realice e imprima el método de Fibonacci de un número N.
2EMHWLYR GH OD SUiFWLFD
RPSUHQGHU HO XVR IXQFLRQDPLHQWR GH ODV HVWUXFWXUDV GH UHSHWLFLyQ HQ HO PRPHQWR GH
LPSOHPHQWDU FODVHV TXH LPSOLTXHQ HO GLVHxR GH DOJRULWPRV SDUD SUREDUODV HQ XQD DSOLFDFLyQ
$QiOLVLV GHO SUREOHPD
Leonardo Pisan Fibonacci probablemente se conoce mejor por descubrir la sucesión de Fibonacci,
una sucesión de números que existe en la naturaleza. La serie de Fibonacci es la siguiente:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377,…
El próximo número en la serie simplemente es la suma de los dos números anteriores. Los números
de arranque son 0 y 1. El tercer número se calculó de la suma 0+1 (ya que no hay ningún número antes
del primer 1) y es de nuevo 1. El próximo número es 1+1 = 2, luego 1+2 = 3, luego 2+3 = 5 y 5+3 = 8,
etc., esta serie es consecutiva e infinita.
inicio Fibonacci (N)
escribir Fib = 0 , Sig = 1
“ Introduzca un número”
escribir “ – “ + Fib
leer Numero
No
i = 1; i N; i++
Fibonacci (Numero)
Si
Aux = Sig
fin
Sig += Fib
Fib = Aux
escribir “ – “ + Fib
fin
#¥H @¨§¥@ ¢8
PI G F E D C @B A 9 Práctica 18
159
33. MANUAL DE PRÁCTICAS FUNDAMENTOS DE PROGRAMACIÓN
3VHXGRFyGLJR
inicio
escribir “ Introduce un numero entero”
leer Numero
Fibonacci (Numero)
fin
Funcion Fibonacci(N): entero
inicio
Fib = 0, Sig = 1
escribir Fib
desde i = 1 hasta i N hacer i++
hacer Aux = Sig
hacer Sig += Fib
hacer Fib = Aux
escribir “ - ” + Fib
fin_desde
fin
3URJUDPD HQ -DYD
import java.io.*;
public class Practica_18{
public static void main (String args[]) throws IOException{
int Numero;
BufferedReader tecl = new BufferedReader (new InputStreamReader(System.in));
System.out.println(quot;Introduzca un numeroquot;);
Numero = Integer.parseInt(tecl.readLine());
Fibonacci(Numero);
}
public static void Fibonacci(int n){
int fib=0, sig = 1;
System.out.print(fib);
for( int i = 1; i n; i++){
int aux = sig;
sig += fib;
fib = aux;
System.out.print(quot; - quot;+fib);
}
}
}
Es importante resaltar la definición de una función para calcular y mostrar la serie de Fibonacci
dentro de la cual se observa la inicialización de variables en la sentencia for( int i = 1; i
n; i++) y int aux = sig; que también es una forma válida para la declaración de variables.
160
34. FUNDAMENTOS DE PROGRAMACIÓN MANUAL DE PRÁCTICAS
35È7,$
Construya un programa que muestre los múltiplos de 3 en orden descendente a partir de 99.
2EMHWLYR GH OD SUiFWLFD
RPSUHQGHU HO XVR IXQFLRQDPLHQWR GH ODV HVWUXFWXUDV GH UHSHWLFLyQ HQ HO PRPHQWR GH
LPSOHPHQWDU FODVHV TXH LPSOLTXHQ HO GLVHxR GH DOJRULWPRV SDUD SUREDUODV HQ XQD DSOLFDFLyQ
$QiOLVLV GHO SUREOHPD
La práctica consiste en decrementar el valor final del ciclo IRU en 3, con la expresión i-=, esta
es una de las características relevantes de la sentencia IRU, en donde el “ incremento” de la estructura
IRU puede ser negativo, en cuyo caso será realmente un decremento y el ciclo contará hacia atrás.
inicio
No
i = 99; i =1; i - =3
Si
escribir “ – “ + i
fin
#¥H @¨§¥@ ¢8
PI G F E D C @B A 9 Práctica 19
3VHXGRFyGLJR
inicio
desde i=99 hasta i=1 hacer i-=3
escribir “ -“ + i
fin_desde
fin
3URJUDPD HQ -DYD
public class Practica_19{
public static void main (String args[]){
for( int i = 99; i =1;i-=3){
System.out.print(quot;-quot;+ i);
}
}
}
161
35. MANUAL DE PRÁCTICAS FUNDAMENTOS DE PROGRAMACIÓN
35È7,$
Construya un programa que despliegue las tablas de multiplicar del 1 al 10.
2EMHWLYR GH OD SUiFWLFD
RPSUHQGHU HO XVR IXQFLRQDPLHQWR GH ODV HVWUXFWXUDV GH UHSHWLFLyQ DQLGDGDV HQ HO PRPHQWR GH
LPSOHPHQWDU FODVHV TXH LPSOLTXHQ HO GLVHxR GH DOJRULWPRV SDUD SUREDUODV HQ XQD DSOLFDFLyQ
$QiOLVLV GHO SUREOHPD
Aunque la realización de esta práctica aparenta ser sencilla el programador requiere de práctica y
experiencia en estructuras de repetición para poder anidarlas.
inicio
No
i = 1; i =10; i ++
Si
No
j = 1; j =10; j++
Si
escribir
i + ” *” + j + ” =” + i *j
fin
#¥H @¨§¥@ ¢8
PI G F E D C @B A 9 Práctica 20
3VHXGRFyGLJR
inicio
desde i=1 hasta i=10 hacer i++
desde j=1 hasta j=10 hacer j++
escribir i +“ *” + j +” =” + i * j
fin_desde
fin_desde
fin
162
36. FUNDAMENTOS DE PROGRAMACIÓN MANUAL DE PRÁCTICAS
3URJUDPD HQ -DYD
public class Practica_20{
public static void main (String args[]){
for( int i = 1; i =10;i++){
for( int j=1; j= 10; j++)
System.out.println(i+quot; * quot;+ j +quot; = quot;+ i*j);
System.out.println(quot;nquot;);
}
}
}
163
37. MANUAL DE PRÁCTICAS FUNDAMENTOS DE PROGRAMACIÓN
35È7,$6 35238(67$6
1. Se definen los números triangulares como los obtenidos de sumar los números naturales
sucesivos 1, 2, 3, ...; es decir, los primeros números triangulares son 1, 3, 6, 10, .... Elaborar un
algoritmo para imprimir el N-ésimo número triangular. Describir el algoritmo mediante
diagrama de flujo y Pseudocódigo.
2. Diseñar un algoritmo que, dados 10 números enteros, indique cuantos de ellos son números
pares, nos muestre estos y calcule la media aritmética de los impares.
3. Se desea un algoritmo que realice la operación de suma o resta de so números leídos del teclado
en función de la respuesta S/N a un mensaje de petición de datos.
4. Diseñar el algoritmo de Euclides que calcule el M.C.D. (Máximo común divisor) de dos
números A y B. Este método se basa en dos teoremas:
• Si dos números son divisibles el uno por el otro, el menor es su máximo común divisor.
• Si dos números a y b (ab) no son divisibles el uno por el otro, los divisores comunes de
a y b son los mismos que los de b y r, siendo r el resto de la división entera de a entre b.
5. Elabore un programa para imprimir el triángulo de Floyd con un número dado de filas
completas.
1
2 3
4 5 6
7 8 9 10
6. La multiplicación ``a la rusa'' permite realizar el producto de dos números enteros utilizando
solo sumas y divisiones o productos por dos. El método consiste en realizar sucesivamente las
siguientes operaciones: multiplicar uno de los números por dos y obtener la división entera del
otro, también por dos. Se detiene el proceso al obtener como cociente de la división un uno. Por
ejemplo, para multiplicar 22 por 64 se obtienen las dos columnas siguientes:
22 64
11 128
5 256
2 512
1 1024
22 x 64 = 1408
A continuación sumamos los números de la columna de la derecha que corresponden a números
impares en la columna de la izquierda, esto es en nuestro caso: 128+256+1.024=1.408 y el
resultado de la suma es el producto de los números iniciales. Elaborar un programa en Pascal
que multiplique mediante este método dos números enteros introducidos por pantalla.
164
38. FUNDAMENTOS DE PROGRAMACIÓN MANUAL DE PRÁCTICAS
35È7,$6 35238(67$6
7. Dado un número entero, N, si la suma de sus divisores (sin contar a si mismo) es igual a N se
dice que ese número es perfecto. Si la suma es inferior, se dice que es deficiente, y si es superior
se dice que es abundante. Por ejemplo:
6 tiene como divisores 1, 2, 3: Su suma es 6, por lo tanto es perfecto.
o
8 tiene como divisores 1, 2, 4: Su suma es 7, por lo tanto es deficiente.
o
24 tiene como divisores 1, 2, 3, 4, 6, 8, 12: Su suma es 36, por lo tanto es abundante.
o
Escribir un programa que reciba un número entero como parámetro y devuelva un valor que lo
clasifique como perfecto, deficiente o abundante.
8. Diseñar un algoritmo que determine el precio de un billete de ida y vuelta en ferrocarril, dando
la distancia a recorrer y el número de días en destino, sabiendo que si la estancia es superior a 7
días y la distancia es superior a 800 km. el billete tiene una reducción del 30%. El precio por
kilómetro es de 8,5 pesos.
9. Diseñar un programa que cuente e imprima los dígitos de un número dado. Por ejemplo, 17568
tiene 5 dígitos.
10. Calcule el valor de PI (
39. D SDUWLU GH OD VHULH LQILQLWD
4 4 4 4 4
- + - + -…
1 3 5 7 9
Imprima una tabla que muestre el valor de PI aproximado a un termino de esta serie, a dos, a
tres, a cuatro, hasta N.
11. Ternas Pitagóricas. Un triangulo rectángulo puede tener lados que sean todos enteros. El
conjunto de tres valores enteros para los lados de un triangulo rectángulo se conoce como una
terna pitagórica. Estos tres lados deben de satisfacer la relación de que la suma de los cuadrados
de dos de los lados es igual al cuadrado de la hipotenusa. Encuentre todas las ternas pitagóricas
para lado1, lado2 e hipotenusa, todos ellos no mayores de 500. utilice un ciclo IRU de triple
anidamiento que pruebe todas la posibilidades.
165