Metodologia de La Programacion
Metodologia de La Programacion
Metodologia de La Programacion
CAPITULO I
METODOLOGIA DE LA PROGRAMACION
______________________________________________________ 5
Manual de Algoritmia
puede considerar una serie de fases o pasos comunes, que generalmente
deben seguir todos los programadores.
Las fases de resolución de un problema con computadora son:
______________________________________________________ 6
Manual de Algoritmia
Las fases de compilación y ejecución traducen y ejecutan el
programa. En las fases de verificación y depuración el programador
busca errores de las etapas anteriores y los elimina. Comprobara que
mientras más tiempo se gaste en la fase de análisis y diseño, menos se
gastará en la depuración del programa. Por último, se debe realizar la
documentación del programa.
Antes de conocer las tareas a realizar en cada fase, vamos a
considerar el concepto y significado de la palabra algoritmo. La palabra
algoritmo se deriva de la traducción al latín de la palabra Alkho-warizmi,
nombre de un matemático y astrónomo árabe que escribió un tratado
sobre la manipulación de números y ecuaciones en el siglo IX. Un
algoritmo es un método para resolver un problema mediante una serie
de pasos precisos, definidos y finitos.
Características de un algoritmo
______________________________________________________ 7
Manual de Algoritmia
1.2.1. Análisis del Problema
La primera fase de la resolución de un problema con computadora
es el análisis del problema. Esta fase requiere una clara
definición, donde se contemple exactamente lo que debe hacer el
programa y el resultado o solución deseada.
Dado que se busca una solución por computadora, se precisan
especificaciones detalladas de entrada y salida. La Figura 1
muestra los requisitos que se deben definir en el análisis.
Resolución
de un problema
Ejemplo:
Se desea obtener una tabla con las depreciaciones acumuladas y
los valores reales de cada año, de un automovil comprado en
1,800.00 soles en el año 1985, durante los seis años siguientes
suponiendo un valor de recuperación o rescate de 120.00. Realizar
______________________________________________________ 8
Manual de Algoritmia
el análisis del problema, conociendo la fórmula de la depreciación
anula constante D para cada año de vida útil.
Costo original
Entrada Vida útil
Valor de recuperación
Depreciación acumulada
Depreciación anual
Salida Depreciación acumulada en cada año
Valor del automovil en cada año
1. Programar un módulo.
2. Comprobar el módulo.
3. Si es necesario, depurar el modulo.
4. Combinar el módulo con los módulos anteriores.
______________________________________________________ 10
Manual de Algoritmia
Entrada/
Terminal Subprograma Salida
Proceso
Si
Decisión
No
Conectores
Si
Figura 2. Símbolos más utilizados en los diagramas de flujo
Ejemplo:
Algoritmo que permite calcular el mayor valor de dos números
ingresados por teclado, en el caso de ser iguales mostrara un
mensaje que no existe numero mayor, los números son iguales.
______________________________________________________ 11
Manual de Algoritmia
Inicio:
Leer n1, n2
Si n1 = n2 entonces
Imprimir No existe número mayor, los números son
iguales
Caso contario:
Si n1>n2 entonces
Imprimir El número mayor es n1
Caso contrario:
Imprimir El número mayor es n2
Fin de si
Fin de si
Fin
______________________________________________________ 13
Manual de Algoritmia
Raíz
Modulo 1 Modulo 2
______________________________________________________ 18
Manual de Algoritmia
Secuenciales,
Selectivas,
Repetitivas.
Un programa se define como propio si cumple las
siguientes características:
Posee un solo punto de entrada y uno de salida o fin
para control del programa.
Existen caminos desde la entrada hasta la salida que se
pueden seguir y que pasan por todas las partes del
programa.
Todas las instrucciones son ejecutables y no existen
lazos o bucles infinitos (sin fin).
______________________________________________________ 20
Manual de Algoritmia
Los pasos para la resolución de un problema son:
1. Diseño del algoritmo, que describe la secuencia ordenada de
pasos sin ambigüedades que conducen a la solución de un
problema dado(análisis del problema y desarrollo del
algoritmo)
2. Expresar el algoritmo como un programa en un lenguaje de
programación adecuado(Fase de codificación)
3. Ejecución y validación del programa por la computadora.
______________________________________________________ 21
Manual de Algoritmia
______________________________________________________ 22
Manual de Algoritmia
Superficie y
longitud de
circunferencia
Entrada
Radio (R) S = PI * R2 L = 2 * PI
*R
______________________________________________________ 23
Manual de Algoritmia
Diseño de un
algoritmo
1.6.1. Pseudocódigo
Secuencial
Inicio
acción1
acción2
acción n
Fin
Decisión Simple
si condición entonces
acción1
acción2
acción n
______________________________________________________ 26
Manual de Algoritmia
Decisión Doble
si condición entonces
acción1
acción2
.
en caso contrario
acción1
acción2
Iteración Fija
acción1
acción2
acción n
______________________________________________________ 27
Manual de Algoritmia
Condicional al Inicio
acción1
acción2
acción n
Condicional al Final
repita
acción1
acción2
acción n
______________________________________________________ 28
Manual de Algoritmia
Selección
casos selector de
valor 1 : acción1
acción2
valor 2 : acción1
acción2
...
valor n : acción1
acción2
______________________________________________________ 29
Manual de Algoritmia
Ejemplos de Algoritmos:
Inicio
Dormir
haga 1 hasta que suene el despertador (o lo llame la mamá).
Mirar la hora.
¿Hay tiempo suficiente?
Si hay, entonces
Bañarse.
Vestirse.
Desayunar.
Sino,
Vestirse.
Cepillarse los dientes.
Despedirse de la mamá y el papá.
¿Hay tiempo suficiente?
Si, Caminar al paradero.
Sino, Correr al paradero.
Hasta que pase un bus para la universidad haga:
Esperar el bus
Ver a las demás personas que esperan un bus.
Tomar el bus.
Mientras no llegue a la universidad haga:
Seguir en el bus.
Pelear mentalmente con el conductor.
Timbrar.
Bajarse.
Entrar a la universidad.
Fin
______________________________________________________ 30
Manual de Algoritmia
Inicio
PASO 1. Aflojar los tornillos de la rueda pinchada con la llave
inglesa.
PASO 2. Ubicar el gato mecánico en su sitio.
PASO 3. Levantar el gato hasta que la rueda pinchada pueda girar
libremente.
PASO 4. Quitar los tornillos y la rueda pinchada.
PASO 5. Poner rueda de repuesto y los tornillos.
PASO 6. Bajar el gato hasta que se pueda liberar.
PASO 7. Sacar el gato de su sitio.
PASO 8. Apretar los tornillos con la llave inglesa.
Fin
Inicio
PASO 1. Colocar los números el primero encima del segundo, de tal
manera que las unidades, decenas, centenas, etc., de los números que
den alineadas. Trazar una línea debajo del segundo número.
PASO 2. Empezar por la columna más a la derecha.
PASO 3. Sumar los dígitos de dicha columna.
PASO 4. Si la suma es mayor a 9 anotar un 1 encima de la siguiente
columna a la izquierda y anotar debajo de la línea las unidades de la
suma. Si no es mayor anotar la suma debajo de la línea.
PASO 5. Si hay más columnas a la izquierda, pasar a la siguiente
columna a la izquierda y volver a 3.
PASO 6. El número debajo de la línea es la solución.
Fin
______________________________________________________ 31
Manual de Algoritmia
4. Sean los puntos P=(a,b) y Q=(c,d) que definen una recta, encontrar un
segmento de recta perpendicular a la anterior que pasa por el punto
medio de los puntos dados.
ALGORITMO:
Inicio
______________________________________________________ 32
Manual de Algoritmia
______________________________________________________ 33
Manual de Algoritmia
5. Escribir un algoritmo que lea las cuatro notas de un estudiante e
imprima la nota definitiva.
ALGORITMO:
1. Inicio
2. leer n1, n2, n3, n4
3. suma = n1 + n2 + n3 + n4
4. parcial = suma*4/100
5. notadef = parcial + 1
6. Imprimir notadef
7. fin
Inicio
leer datos: base, altura
Calcular area: area = (base*altura)/2
Imprimir base, altura, area
fin
7. Un vendedor recibe una comisión del 10% del total de ventas del mes.
El quiere saber cuanto ganará en un mes que tuvo tres ventas:
ALGORITMO:
Inicio
leer sueldobase, venta1, venta2, venta3
subtotal = venta1 + venta2 + venta3
comision = subtotal *0,10
total = sueldobase + comision
imprimir total
fin
______________________________________________________ 34
Manual de Algoritmia
8. Una tienda ofrece un 15% de descuento por cada compra. Un cliente
desea saber cuanto deberá pagar por su compra:
ALGORITMO:
Inicio
leer monto
descuento = monto * 0,15
total = monto - descuento
imprimir total
Fin
1. Inicio
2. leer nombre1 y edad1
3. leer nombre2 y edad2
4. comparar edad1 con edad2:
5. Si edad1 > edad2 imprimir nombre1, ” es mayor”
6. si edad2 > edad1 imprimir nombre2, ” es mayor”
7. Si edad1 = edad2 imprimir
8. Fin
______________________________________________________ 35
Manual de Algoritmia
ALGORITMO:
1. Inicio
2. Leer datos: N, N1,N2,X,Y,P1,P2
3. Calcular la cantidad de conejos vendida: CNV = X + Y
4. Imprimir la cantidad de conejos vendida: Imprimir CNV
5. Calcular el monto de la venta: MV = X * P2 + Y * P1
6. Imprimir monto de la venta: Imprimir MV
7. Si X > Y entonces
Imprimir “Se vendieron mas conejos negros”
en otro caso
Imprimir “Se vendieron mas conejos blancos”
8. Fin
1. Inicio
2. Leer importeb
3. Calcular descuento:
Si importeb >= 20000 entonces
descuento =importeb * 0.15;
en otro caso
descuento = 0
finsi
4. fin
______________________________________________________ 36
Manual de Algoritmia
Ejercicios Propuestos:
10. Tres personas deciden invertir su dinero para formar una empresa.
Cada una de ellas invierte una cantidad distinta. Hacer un algoritmo que
imprima el porcentaje que cada quien invierte con respecto al total de la
inversión
______________________________________________________ 38
Manual de Algoritmia
Símbolos:
______________________________________________________ 39
Manual de Algoritmia
Entrada/Salida
Proceso
Decisión
Procedimiento/Subrutina
Línea de flujo
Inicio y Fin
Este símbolo representa el
inicio y fin del diagrama de
flujo.
Conectoren Página
Un diagrama de flujo se
puede dividir en partes
cuando muchas líneas del
flujo lo hacen ilegible. Este
símbolo representa la
conexión entre estas partes
del un diagrama de flujo en
una misma página. Este
símbolo es etiquetado con
letras en mayúsculas, por
ejemplo A.
______________________________________________________ 41
Manual de Algoritmia
ConectorFuera de Página
Visualización
______________________________________________________ 42
Manual de Algoritmia
Ejemplos
______________________________________________________ 43
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
El siguiente diagrama de flujo acepta dos números, y muestra
el mayor de ellos después de compararlos.
______________________________________________________ 44
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
El siguiente es el diagrama de flujo dado en el manual de
una televisión proporciona las recomendaciones para resolver el
problema de mal funcionamiento del control remoto.
______________________________________________________ 45
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
______________________________________________________ 46
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
______________________________________________________ 47
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
CAPITULO II
______________________________________________________ 48
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Valores numéricos, como 25, 78 y 90.45. Esto quiere decir que los valores
numericos pueden clasificarse en enteros y reales
______________________________________________________ 49
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Cuando las instrucciones son ejecutadas, el valor del primer número es
aceptado y almacenado en la memoria. De manera similar, el valor del
segundo número es también aceptado y almacenado en la memoria. El
computador hace referencia a los números almacenado en memoria, calcula
la suma, y almacena el resultado obtenido en una localización diferente
de la memoria. El computador hace referencia al resultado
almacenado en memoria, para mostrarlo en la pantalla. Por lo tanto,
el computador necesita identificar las localizaciones de memoria para
almacenar los valores o recuperar los valores almacenados.
Las localizaciones cuando el primer número, el segundo número, y el
resultado son almacenados pueden ser referenciadas como nNumero1,
nNumero2 y nSuma respectivamente. Cada vez que el conjunto de
instrucciones son ejecutadas; los valores de nNumero1, nNumero2, y
nSuma variará, dependiendo de los valor ingresados por el usuario. Por
consiguiente, nNumero1, nNumero2, y nSuma son conocidos como
variables.
Tipos de Datos
______________________________________________________ 50
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
memoria. Este tipo de valor es denominado tipo de dato. Los tipos de datos
están clasificados en:
Declaración de Variables
char nombre
int edad, telefono
Aunque no hay convenciones para dar nombre a las variables, las siguientes
pautas pueden resultar útiles:
2.3. CONSTANTES
Así como las variables la s contantes tambien se almacenan en la memoria
del computador al momento de ejecutarlas, con la diferencia que las
constantes son valores predefinidos en un programa que nuncan cambian su
valor y tambien pueden clasificarse en valores numericos (enteros y reales)
y valores de carácter. Por ejemplo:
Valores numéricos, como 34, 22 y 33.22. Esto quiere decir que los valores
numericos pueden clasificarse en enteros y reales
2.4. CONTADORES
Los contadores son otro tipo de variables muy utilizados dentro de
estructuras repetitivas. Su función principal es contar una serie de valores
numericos ya sea de uno en uno, dos en dos, etc. Por ejemplo:
Sintaxis:
c= c+1; c=c+2; c=c-3……..etc.
2.5. ACUMULADORES
Los acumuladores son otro tipo de variables muy utilizados dentro de
estructuras repetitivas. Su función principal es acumular valores numericos
que se an ingresado o procesado en alguna variable, etc. Por ejemplo:
Sintaxis:
ac= ac + N ; t= t + M
2.6. OPERADORES
Los operadores determinan el tipo de operación que se quiere realizar
con los elementos de una expresión. En una expresión, el elemento sobre el
cual actúa un operador se llama operando. Por ejemplo, en la expresión, a +
b, a y b son conocidos como operandos.
Operadores aritméticos
Operadores Relacionales
Operadores lógicos
Operadores Aritméticos
______________________________________________________ 53
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Resta (-) Resta el operando derecho del c=a-b
operando izquierdo
Multiplicación (*) Multiplica los operandos c=a*b
Inicio
Int nNum1, nNum2, nNum3
nNum1 = 15
nNum2 = 2
nNum3 = nNum1 % nNum2
Mostrar nNum3
Fin
Operadores Relacionales
______________________________________________________ 54
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Operadores Lógicos
Precedencia de Operadores
______________________________________________________ 56
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Nivel de
Operador Descripción Asociatividad Precedencia
() Paréntesis 1
! Lógica NOT 2
* Multiplicación
De Izquierda
/ División a Derecha 3
% Módulo
+ Suma De Izquierda
a Derecha 4
- Resta
______________________________________________________ 57
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
evaluados mientras construimos la expresión para obtener la salida
deseada. Por ejemplo, consideremos la siguiente expresión:
nResultado = 8 + 90 / 45
El operador "/" tiene precedencia alta que "+". Por lo tanto, 90/45 es
evaluado primero.
El resultado de la expresión es:
nResultado = 8 + 2
nResultado = 10
______________________________________________________ 58
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
CAPITULO III
Ejemplos:
______________________________________________________ 59
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.1:
Muestre un algoritmo lea dos valores a, b, y los intercambie. Por ejemplo si a = 2 y b=
5, el algoritmo debe hacer que a = 5 y b= 2.
Solución:
Definición de variables:
Diagrama N/S
Leer a, b
t=a
a=b
b=t
Imprimir a, b
______________________________________________________ 60
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.2:
A una reunión asistieron n personas ¿Cuántos apretones de manos hubieron?
Solución:
Definición de variables:
n : número de personas
a : número de apretones de mano
Se sabe que cada persona debe saludar a las (n - 1) restantes, por lo que habrá
n*(n-l) saludos como en cada saludo intervienen 2 personas la cantidad de
apretones de mano será:
a= n*(n-l)/2
Diagrama N/S
Leer n
a=n*(n- l)/2
Imprimir a
______________________________________________________ 61
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.3:
Hallar la suma de los n primeros números naurales
Solución:
Definición de variables:
n : cantidad de números naturales
s : suma de los primeros n números naturales
Se pide lo siguiente:
s = 1 + 2 + 3 + 4 + 5 + 6 + ...+ (n-4)+ (n-3)+ (n-2) +(n-l) + n
s = l + 2 + 3 + 4 + 5 + . . . + (n-4)+(n-3)+(n-2)+(n-l)+ n
s = n + (n-1) + (n-2) + (n-3) + (n-4) + . . . + 5 + 4 + 3 + 2 + 1
n l n l n l n 1 n l ...
2s
... n l n l n l n l n l
n términos
De donde: s n n 1 / 2
Diagrama N/S
Leer n
s = n*(n+l)/2
Imprimir s
______________________________________________________ 62
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.4:
Calcule la suma de los cuadrados de los primeros números naturales.
Solución:
Definición de variables:
n : cantidad de números naturales
s : suma de los cuadrados de los primeros n números naturales
Se pide lo siguiente:
s = l2 + 22 + 32 + 42+ 52 + 62 + . . . + (n - 4)2 + (n - 3)2 + (n - 2)2 + (n - l)2 + n2
3 12 22 32 ... ( n 2) 2 ( n 1) 2 ( n) 2
3 1 2 3 ... ( n 2) ( n 1) ( n) n(1)3
(n+1)3 = l3 + 3s + 3[ n(n+l)/2 ] + n
______________________________________________________ 63
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
n(n 1)(2n 1)
s
6
Diagrama N/S
Leer n
s = n(n+l)(2n+l)/6
Imprimir s
______________________________________________________ 64
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.5:
Calcular la suma de los cubos de los n primeros números naturales.
Solución:
Definición de variables:
n : cantidad de números naturales
s : suma de los cubos de los primeros n números naturales
Se pide lo siguiente:
14 24 34 ... (n 2) 4 (n 1) 4 ( n) 4
______________________________________________________ 65
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Simplificando y remplazando por sus equivalentes:
(n+1)4 = l4 + 4s + 6[ n(n+l)(2n+l)/6 ] + 4 [n(n+l)/2] + n
2
n n l
s
2
Diagrama N/S
Leer n
s = {n(n+l)/2}2
Imprimir s
______________________________________________________ 66
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.6:
En un cuadrado cuyo lado es a, se unen los puntos medios de sus 4 lados,
formándose otro cuadrado cuyos puntos medios se unen también formando otro
cuadrado, y así sucesivamente. Calcule la suma de las áreas de todos los
cuadrados así formados.
Solución:
Definición de variables:
a: lado del primer cuadrado
s: suma de las áreas formadas
Diagrama N/S
Leer a
s=2a2
Imprimir s
______________________________________________________ 67
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.7:
Calcule el área de un rombo de diagonales conocidas
Solución:
Definición de variables:
De donde:
AreaRombo dl d2 / 2
Diagrama N/S
Leer dl,d2
Calcular
AreaRombo=dl*d2/2
Imprimir
AreaRombo
______________________________________________________ 68
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.8:
Calcule el volumen de un cilindro recto conociendo su radio y su altura.
Solución:
Definición de variables:
Esto es:
VolCilindro r 2h
Diagrama N/S
Leer r, h
Calcular
VolCilindro= 3.14159*r*r*h
Imprimir
VolCilindro
______________________________________________________ 69
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.9:
Calcule el área total de un cilindro recto de radio y altura conocidos.
Solución:
Definición de variables:
AreaTota1Ci1: área total
del cilindro
r: radio de la base
h: altura
El área de la base y el área del techo, son iguales y vienen a ser el área de un
círculo:
Area de la base = Area del techo = π r2
Remplazando tenemos:
AreaTotalCil = πr2+ πr2+ 2πrh
donde:
AreaTotalCil 2 r r h
Diagrania N/S
Leer r, h
AreaTotalCil= 6.28*r*(r+h)
Imprimir AreaTotalCil
______________________________________________________ 70
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.10
Se tiene una circunferencia de radio r, inscrita en un triángulo de lados a ,b, c.
Encuentre el área de este triángulo en función de a, b, c y r.
Solución;
Definición de variables:
a, b, c: lados del triángulo
r: radio de
circunferencia inscrita
Tenemos:
Área del ΔABC = Área del ΔBOA + Área del ΔBOC + Área del ΔAOC
c r a r b r
Área del ABC
2 2 2
de donde:
a b c
Area del ABC r
2
Diagrama N/S
Leer a, b, c, r
Calcular
area = (a + b + c). r/2
Imprimir
area
______________________________________________________ 71
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.11:
El área del triangulo en función del semiperimetro, dada por Herón es:
area p( p a)( p b)( p c) , donde a, b y c son los lados del triángulo y
p (a b c) / 2 el semiperimetro. Calcular el área del triángulo aplicando
esta fórmula.
Solución:
Definición de variables:
Diagrama N/S
Leer a, b, c
p = (a+b+c)/2
AreaTriang p( p a)( p b)( p c)
Imprimir AreaTriang
______________________________________________________ 72
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.12:
En un triángulo rectángulo, calcule la longitud de la hipotenusa conociendo las
longitudes de sus catetos.
Solución:
Definición de variables:
Diagrama N/S
Leer a, b
Calcular
c= a a b b
Imprimir c
______________________________________________________ 73
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.13:
El teorema del coseno es muy utilizado en geometría para calcular la longitud
del te rcer lado de un triángulo, cuando se conocen los otros 2 lados y el ángulo
que forman. Siendo a el lado desconocido, b y c los lados conocidos, α el
ángulo formado por b y c; el teorema del coseno se enuncia como:
a b 2 c 2 2 b c cos
Calcule el tercer lado de un triángulo aplicando esteteorema.
Solución:
Definición de variables:
a: lado desconocido
b, c: lados conocidos
alfa: ángulo formado por b y c
Diagrama N/S
Leer b, c, alfa
2
a b c2 2 b c cos (alfa )
Imprimir a
______________________________________________________ 74
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.14:
Calcule la distancia entre 2 puntos de coordenadas conocidas
Solución:
Definición de variables:
xl: abscisa del primer
punto
yl: ordenada del primer
punto
x2: abscisa del segundo
punto
y2: ordenada del segundo
punto
Sabemos que la distancia entre 2 puntos de coordenadas (xl, yl) y (x2, y2)
está dada por:
2 2
d x2 xl y2 yl
Diagrama N/S
______________________________________________________ 75
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.15:
Convierta el complejo c =a + bi, a sus coordenadas polares.
Solución:
Definición de variables:
ω: ángulo formado por recta que
une (a, b) con el origen (0,0).
a : parte real del complejo
b : parte imaginaria del complejo
ρ: distancia del punto al origen
En donde :
arctg (b / a ) y a2 b2
Definición de variables:
c : capital tomado en préstamo
t : tasa de interés en decimales
n : número de periodos
m: monto a devolver
Sabemos que:
m = c(l+t)n
Diagrama N/S
Leer c, n t
m =c (l +t)n
Imprimir m
______________________________________________________ 77
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.17:
En todo triángulo se cumple que cada lado es proporcional al seno del
ángulo opuesto. Esta ley se llama “ley de los senos", matemáticamente:
a b c
= =
sen sen sen
Solución:
Definición de variables:
a, b, c : lados del triángulo
α, β y γ: ángulos opuestos a a, b y c respectivamente
Despejando de la fórmula:
a = c(sen / sen )
b = c(sen / sen )
Diagrama N/S
______________________________________________________ 78
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.18
Existen muchas maneras de medir ángulos. El Sistema Sexagesimal divide
circunferencia en 360 partes llamándola a cada una "grado sexagesimal”
cada grado sexagesimal está dividido en 60 minutos y cada minuto en 60
segundos, (por ejemplo 20°15’21").
El Sistema Centesimal considera como unidad de medida "el grado
centesimal" y equivale a la 400 ava. parte de la circunferencia, cada grupo
centesimal está dividido en 100 minutos centesimales y cada minuto en 100
segundos centesimales, (por ejemplo 20g15m21s).
El Sistema Radial utiliza como unidad de medida un arco cuya longitud es
igual a su radio, como la longitud de la circunferencia es l = 2πr; en
trigonometría se considera un círculo base con radio r = 1, entonces toda la
circunferencia tendrá 2π radianes.
Deduzca la relación entre los diferentes sistemas de medidasde ángulos, use la
proporción entre la cantidad de grados requeridos y el total degrados de toda
la circunferencia.
Solución:
Definición de variables
______________________________________________________ 79
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Por lo que:
S C R
360 400 2
Diagrama N/S
Leer S
C = (10/9)*S
R = (π/180)*S
Imprimir C, R
______________________________________________________ 80
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.19:
Convierta el ángulo sexagesimal UºV´W” a grados, minutos y segundos.
Definición de variables:
gra = entero(C)
seg =( (C-gra)*100-min)*100
______________________________________________________ 81
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.20:
Para medir la temperatura existen 4 escalas, las cuales guardan la siguiente
proporción:
Solución:
Definición de variables:
a, b: longitudes cualesquiera de la escala
C : valor de la temperatura en grados Celsius
F : valor de la temperatura en grados Farenheit
K : valor de la temperatura en grados Kelvin
R : valor de la temperatura en grados Rankine
a C 0 F 32 K 273 R 492
b 100 0 212 32 373 273 672 492
______________________________________________________ 82
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
De donde:
C F 32 K 273 R 492
5 9 5 9
Finalmente:
F = (9/5) C + 32
K = C +273
R = (9/5) C + 492
Diagrama N/S
Leer C
F = (9/5)*C + 32
K = C + 273
R = (9/5)*C + 492
Imprimir F, K, R
______________________________________________________ 83
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.2.21;
Haga un diagrama N/S que permita leer 3 temperaturas una en ºF, otra en K
y la otra en ºR y las convierta a sus equivalentes en grados Celsius.
Solución:
Definición de variables:
CF= (5/9)(F-32)
CK = K – 273
CR= (5/9)(R-492)
Diagrama N/S
Leer F, K, R
CF = (5/9)*(F-32)
CK = K - 273
CR = (5/9)*(R-492)
Imprimir CF, CK,
CR
______________________________________________________ 84
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejercicios Propuestos:
Lea atentamente cada enunciado y plantee su solución. Luego construya un
diagrama N/S.
a b c
= =
sen sen sen
______________________________________________________ 85
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
considere minutos, ni segundos sexagesimales.
19) Lea dos números. El primero representará el día y mes de su nacimiento
(por ejemplo 1 de julio será 107), el segundo número vendrá dado por su
edad, luego realice los siguientes cálculos: Multiplique el primer número por
2, Adiciónele 5, multiplíqueío por 50, súmele el segundo número, súmele 365
y réstele 615. El resultado vendrá a ser la unión del primer número con el
segundo. Este juego es conocido en los círculos matemáticos como "juego de
sociedad".
20) En un cuadrado cuyo lado es a, se unen los puntos medios de sus 4 lados,
formándose otro cuadrado cuyos puntos medios se unen también formando
otro cuadrado, y así sucesivamente. Calcule la suma de los perímetros de
todos los cuadrados así formados.
21) Un inversionista está pensando invertir C dólares a una tasa de interés T.
¿Cuántos periodos (N) necesita para tener al final M dólares.
22) ¿A cuánto dinero de hoy (C) equivalen M dólares del futuro, sabiendo que
la tasa de interés es T y el número de periodos N.
23) ¿Cuántas billetes de 5, 10, 20, 50 y 100 soles y monedas de 0.01, 0.05, 0.1,
0.5 y 1 sol recibirá un empleado como pago por su trabajo?. Suponga que se
le debe entregar la máxima cantidad posible de billetes y monedas de cada
denominación.
24) Calcule la media aritmética de los n primeros números enteros positivos.
______________________________________________________ 86
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
3.3. ESTRUCTURA CONDICIONAL SIMPLE
La estructura condicional simple se caracteriza por mostrar problemas en
base a preguntas, con respuestas para un caso verdadero y falso y en
algunas veces solo para casos verdaderos, dependera mucho del algoritmo
que se propone.
Ejemplos:
Ejemplo 3.3.1:
Elabore un algoritmo que resuelva una ecuación de primer grado.
Solución:
Definición de variables:
Diagrama N/S
Leer a, b
a==0
V
Imprimir "No F x = -b/a
es de primer Imprimir
grado" X
______________________________________________________ 87
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.2:
Una llamada telefónica en cualquier teléfono público cuesta S/. 0.50 por los
primeros 3 minutos o menos. Cada minuto adicional es un paso de contador y
cuesta S/.0.l.Calcule el monto de una llamada cualquiera.
Solución:
Definición de variables:
duración: duración de la llamada
costo: costo total de la llamada
Diagrama N/S
Leer duración
duración <= 3
V F
Imprimir
costo
______________________________________________________ 88
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.3:
Una llamada de un teléfono fijo a otro, también fijo, en HORARIO NORMAL
(todos los días de 7:00 a 22:59 horas), cuesta sin IGV S/. 0.078, mientras que
en el HORARIO REDUCIDO (todos los días de 23:00 a 6:59hrs), cuesta sin
IGV S/. 0.039 hrs.
Solución:
Definición de variables:
hora: hora de inicio de la llamada
min: minuto de inicio de la llamada
inicio: minuto de inicio en el día
dura: duración de la llamada
Por lo tanto, basta con preguntar si la hora de inicio en minutos esta dentro de
ese rango y calcular el costo total de la llamada. Además hay que tener en
cuenta que el impuesto general a las ventas es de 18%.
Diagrama N/S
______________________________________________________ 89
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.4:
Un número puede ser menor, igual o mayor que otro. Describa describa un
algoritmo que lea 2 números y determine cómo es uno respecto a otro.
Solución:
Definición de variables:
a, b: números ingresados
Diagrama N/S
Leer a, b
a==b
V F
Imprimir a>b
a, "es V
igual a", b F
Imprimir Imprimir b,
a, "es mayor "es mayor
que", b que", a
______________________________________________________ 90
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.5:
Ordene de mayor a menor, 3 números ingresados por teclado.
Solución:
Definición de variables: a, b, c : números que deseamos ordenar.
a b c
a c b
b a c
b c a
c b a
Diagrama N/S
Leer a, b, c
a ≥ b AND b ≥ c
V F
Imprimir a ≥ c AND c ≥ b
a, b, c V F
b ≥ a AND a ≥ c
V F
Imprimir b≥c AND c≥a
Imprimir b, a, c V F
a, c, b c≥ a AND ≥b
Imprimir V F
b, c, a Imprimir Imprimi r
c, a, b c, b, a
______________________________________________________ 91
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.6:
Encuentre el mayor valorde 3 números dados
Solución:
Definición de variables:
Diagrama N/S
Leer a, b, c
a≥b
V F
a≥c b≥c
V F V F
m=a m=a m=a m=a
Imprimir m
______________________________________________________ 92
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.7
Elabore un algoritmo que obtenga las raices reales de una ecuación de
segundo grado.
Solución:
Definición de variables:
Diagrama N/S
Completando cuadrados:
ax2 + bx =-c multiplicando por 4a 4a2x2 + 4abx = - 4ac sumando b2 a ambos
lados
4a2x2+ 4abx+b2=-4ac + b2
factorizando:
(2ax + b)2 = b2 - 4ac 2ax + b = b2 4ac
de donde:
b b 2 4ac
x
2a
______________________________________________________ 93
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.8:
Un año bisiesto es aquel que tiene 366 días. Mediante un decreto del Papa
Gregorio XIII, dado en 1582, se reforma el Calendario Juliano que nos
regía, para que pasen a considerarse bisiestos aquellos años múltiplos de 4,
pero no los múltiplos de 100, excepto los múltiplos de 400. Escriba un
algoritmo que diga si un año es o no bisiesto.
Solución:
Definición de variables:
annio: Año del que deseamos determinar si es bisiesto.
Diagrama N/S
Leer annio
Imprimir Imprimir
"Año no bisiesto" "Año Bisiesto"
______________________________________________________ 94
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.9:
Los 3 números q, r y s, y determine si q es el multiplo de r y s.
Solución:
Definición de variables:
q: número cualquiera
r, s: posibles divisores
Diagrama N/S
Leer q, r, s
(q MOD r==0)AND
(q MOD s == 0)
V F
Imprimir Imprimir
q, " es múltiplo de ", r, q, " no es múltiplo de ",
" y de ", s r, " y de ", s
______________________________________________________ 95
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.10:
Conociendo x, encuentre el valor numérico de la siguiente expresión:
y ( x 3)( x2 25)
Solución:
Definición de variables:
x: variable independiente
y: variable dependiente
Diagrama N/S
Leer x
x == 5 OR x = -5
V F
y = (x-3)/(x2-25)
Imprimir "lo siento, la
función es discontinua
en ese punto" Imprimir
y
______________________________________________________ 96
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.11
Muestre un algoritmo que nos permita evaluar la función.
log( x 8), si x
g ( x) 2 x ln x, si 0 x
x sin x, si x
Solución:
Definición de variables:
x: variable independiente
y: variable dependiente
Diagrama N/S
Leer x
x <= 0
V F
x <= 8
y = x + sen x V F
y = 2x - ln x y = log(x-8)
Imprimir y
______________________________________________________ 97
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.12:
Dados 3 longitudes, diga si pueden formar un triángulo.
Solución:
Definición de variables:
Suponga que desea atravesar un cerro. Si pasa por el túnel que tiene una
longitud a, recorrerá menor distancia que si sube la pendiente b y baja por la
c.
Matemáticamente: a< b + c. Esto debe cumplirse tanto cuando a sea la
longitud del túnel, como cuando b ó c lo sean. De donde deducimos que para
que exista el cerro (triángulo) debe cumplirse que:
a< b + c
b< a + c
c< a + b
Diagrama N/S
Leer a, b, c
(a < b + c) AND (b < a + c) AND (c < a+ b)
V F
Imprimir Imprimir
“Forman triángulo” “No forman triángulo”
______________________________________________________ 98
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.13:
Dados 3 longitudes, compruebe si pueden formara un triángulo y luego
clasifiqueel triángulo según sus lados.
Solución:
Definición de variables:
Diagrama N/S
Leer a, b, c
(a < b + c) AND (b < a + c) AND (c < a+ b)
V F
(a == b) AND (b == c)
V F
(a == b) AND (b == c)
OR (a == c) Imprimir
Imprimir
V F “No forman
“Triángulo
Imprimir Imprimir triángulo”
equilátero”
“Triángulo “Triángulo
isósceles” escaleno”
______________________________________________________ 99
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.14:
El rendimiento de un alumno se califica según lo siguiente:
Bueno si su promedio esta entre 16 y 20
Regular si su promedio está entre 11 y 15
Deficiente si su promedio está entre 6 y 10
Pésimo si su promedio está entre O y 5
Escriba un algoritmo que lea el promedio de un alumno y diga cuál es su
rendimiento.
Solución:
Definición de variables:
Prom:
Es la nota Promedio del alumno.
Diagrama N/S
Leer prom
______________________________________________________ 100
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.15:
Lea un número y obtenga el signo, su parte entera y su parte fraccionaria.
Solución:
Definición de variables:
x: Es el número a evaluar
Para obtener el signo, basta con preguntar si es mayor que cero, en cuyo caso
será positivo, encaso contrario será negativo. Todos los lenguajes de
programación incluyen funciones que obtienen la parte entera de un número.
En C++, esta función es floor().
Diagrama N/S
Leer x
x >= 0
V F
Imprimir Imprimir
“signo positivo" "signo negativo”
Imprimir
"Parte entera", entero (x)
"Parte fraccionaria", x - entero(x)
______________________________________________________ 101
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.16:
Si compramos por mayor100 o más articulos nos descuentan el 40%, si
compramos entre 25 y 100 nos descuentan un 20%, y si compramos entre10 y
25 un 10%. No hay descuento si adquirimos menos de 10 artículos. Diga
cuanto debemos pagar por nuestra compra.
Solución:
Definición de variables:
x: cantidad de artículos.
p: precio unitario del artículo.
d: descuento obtenido.
y: monto a pagar.
Diagrama N/S
Leer x, p
x >= 100
V F
d = 0.40 x >= 25
V F
x >= 10
V F
d = 0.20 x >= 0
d = 0.10 V F
d = 0.0
Imprimir
y = p * x * (1 - d)
“cantidad erronea”
Imprimir y
______________________________________________________ 102
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.17:
Si el sueldo de un empleado es de 1000 o menos se le descuenta el 10%. Si
esta entre 1000 y 2000 el 5% sobre el adicional, y si está arriba de 2000, el
3% sobre el adicional. Ecriba un algoritmo que lea el sueldo y muestre el
salario neto y el impuesto.
Solución:
Definición de variables:
sb: sueldo bruto del trabajador.
d: descuento al sueldo.
sn: sueldo neto del trabajador.
En este caso si el trabajador gana más de 1000 y hasta 2000, el descuento por
los primeros 1000 se mantendrá en 10% lo que equivale a 0.1*1000=100,
mientras que el descuento por lo que gana arriba de 1000 será 0.05(sb-1000).
Lo mismo ocurre cuando el trabajador gana más de 2000, puesto que se le
descuento 0.1*1000 = 100 por los primeros 1000, y 0.05*(2000-1000)=50,
por los siguientes 1000, el descuento será 100+50 +0.03(sb-2000).
Estos casos de descuentos adicionales por lo general se aplican en el caso de
pago de impuestos, con la intensión de que el pago sea más equitativo.
Entonces tenemos:
Si sb<=1000, d = 0.1sb
Si 1000<sb<=2000, d=l 00+0.05(sb-1000)
Si sb> 2000, d=150+0.03(sb-2000)
El salario neto será sn = sb -d
Diagrama N/S
Leer sb
sb<0
V F
sb<=1000
Imprimir V F
"sueldo sb<=2000
d=0.1*sb
bruto V F
incorrecto d=l00+0.05(sb-1000) d=150+0.03(sb-2000)
sn = sb -d
Imprimir sb, sn, d
______________________________________________________ 103
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.3.18:
Dada la hora y el día en horas, minutos y segundos encuentre la hora del
siguiente segundo.
Solución:
Definición de variables:
h: horas
m: minutos
s: segundos
Diagrama N/S
Leer h, m, s
s = s +1
s==60
V F
s =0
m=m+1
m==60
V F
m=0
h = h+l
h==24
V F
h=0
Imprimir h, m, s
______________________________________________________ 104
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejercicíos Propuestos:
A p p a p b p c .
x2 1 , si x 0
2
f(x) x 3x 2 , si 0 x 3
x 1 , si x 3
2a b , si a 2 b 2 0
2 2 2
f x a 2b , si a b 0
2 2
a b , si a b 0
______________________________________________________ 105
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
12) Diga si un número n es múltiplo de m.
13) Lea 3 números e indique cual es el valor intermedio.
14) Dada la hora en horas, minutos y segundos encuentre la hora del segundo
anterior.
15) En una Universidad tienen como política considerar 3 notas en cada
curso la nota de trabajos T, la nota de medio ciclo M y la de fin de ciclo
F, cada una tiene un peso de 50%, 20% y 30% respectivamente. Un
alumno es calificado según lo siguiente:
Bueno si su promedio esta entre 16 y 20
Regular si su promedio está entre 11 y 15
Malo si su promedio está entre 6 y 10
Pésimo si su promedio está entre O y 5
Escriba un algoritmo que lea las 3 notas de un alumno y en un curso y
diga cómo ha sido catalogado el alumno.
16) Los trabajadores de una fábrica tienen 3 turnos: mañana, tarde y noche.
La tarifa de los turnos de mañana y tarde son iguales, mientras que de
noche son 30% mayores. Construya un diagrama que lea el número de
horas laboradas por un trabajador y la tarifa calcule el salario semana
Considere que durante la semana el trabajador se encuentra siempre en el
mismo turno.
17) Un trabajador es contratado bajo las siguientes condiciones. Por las horas
normales se le paga una tarifa fija. Se consideran horas normales a todas
las horas trabajadas hasta un total de 140 al mes. Las horas adicionales a
140 se consideran como extras y una hora extra se paga el equivalente
1.5 horas normales. Los impuestos están en función del monto obtenído
por el trabajador. Si el sueldo es menor o igual a S/. 20,000 no paga
impuestos, por los siguientes S/. 20,000 paga el 10%, mientras que para
montos mayores a S/. 40,000 paga el 15% sobre el adicional. ¿Cuál es el
sueldo neto del trabajador y cuál es el monto en impuestos que debe
pagar?
18) Una llamada de un teléfono fijo a otro, también fijo, en HORARIO
NORMAL (todos los días de 7:00 a 22.59 hrs), cuesta sin IGV S/. 0.078
mientras que en HORARIO REDUCIDO (todos los días de 23:00 a 6:59
hrs), cuesta S/. 0.039. Calcule el costo total de una llamada telefónica,si
considera 1 minuto adicional de cargo por establecimiento de llamada.
Si la llamada se realiza justo en la transición de un horario a otro,
______________________________________________________ 106
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
calcule el monto según cuantos minutos se realizaron en cada horario.
19) Dado un número de día de un determinado año, encuentre el día, mes y
año al que corresponde. Por ejemplo el día número 300 del año 2000 es
el 26/10/2000.
______________________________________________________ 107
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
3.4. ESTRUCTURA DE SELECCIÓN MULTIPLE
La estructura de selección multiple se caracteriza por agrupar varios
problemas en casos diferentes. Una estructura de selección tambien es
utilizada para problemas con respuestas multiples.
Ejemplos:
Ejemplo 3.4.1:
Construya una calculadora que lea 2 números y un operador, y efectue la
operación indicada. La calculadora será capaz de realizar las siguientes
operaciones: + (surna), - (resta), * (multiplicación), / (división) y # (potencia)
Solución:
Definición de variables:
Diagrama N/S
______________________________________________________ 108
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.4.2:
Los signos del zodiaco son 12: aries (marzo 21 - abril 20), tauro (abril 21 –
mayo 20 ), géminis (mayo 21 -junio 21), cáncer (junio 22 -julio 22), leo (julio
23 - agosto 22), virgo (agosto 23 - setiembre 22), libra (setiembre 23),
escorpio (octubre 23 - noviembre 21), sagitario (noviembre 22 -
diciembre 21), capricornio (diciembre 22 - enero 20), acuario (ener 21 –
febrero 19) y piscis (febrero 20 - marzo 20). Escriba un programa que lea el
día y mes de su nacimiento y determine a que signo pertenece.
Solución:
Definición de variables:
día: día de nacimiento
mes: mes de nacimiento
Diagrama N/S
Leer día, mes
otro
mes ___ caso
1 2 3 4 5 6 7 8 9 10 11 12
día<21 día 20 dia<21 dia<21 dia<21 dia<22 dia<23 dia<23 dia<23 dia<21 dia<22 dia<22 E
r
V F V F V F V F V F V F V V F V F V F V F V F r
F o
r
"Capricornio"
"Escoprpio"
"Sagitario"
“capricornio”
"Sagitario"
"Géminis"
"Escopio"
"Gemins"
"acuario"
"acuario"
"Cáncer"
"Cáncer"
"Virgo"
"Virgo"
"piscis"
"piscis"
"Libra"
"Libra"
"tauro"
"tauro"
"aries"
"aries"
"Leo"
"Leo"
______________________________________________________ 109
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3. 4.3
Lea un día y un mes cualquiera y determine a que estación pertenece.
Considere que primavera inicia el 23 de setiembre, verano inicia el 21 de
diciembre, otoño empieza el 21 de marzo e invieno el 22 de junio.
Solución:
Diagrama N/S
1 2 3 4 5 6 7 8 9 10 11 12 Otro caso
día<21 día<22 día<23 día<21
VF V F V F V F “mes incorrecto”
“Verano" “Otoño” “Invierno” “Primavera” “Verano”
______________________________________________________ 110
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.4.4:
Lea un mes y un año y determine cuántos días tiene ese mes.
Solucion:
Definición de variables:
m: mes
a: año
días: número de días que tiene el mes.
Podemos construir nuestro diagrama N/S sabiendo que enero, marzo, mayo,
julio, agosto, octubre y diciembre tienen 31 días, y que abril, junio, setiembre
y noviembre 30 días, además febrero tendrá 28 ó 29 días, según sea un año
normal o un año bisiesto respectivamente.
Diagrama N/S
Leer m, a
m
1 3 5 7 8 10 12 4 6 9 11 2
(a MOD 4 = = 0) AND
((a MOD 100 ≠ 0= OR
(a MOD 400 = = 0))
días = 31 días = 30
V F
días = 29 días = 28
Imprimir días
______________________________________________________ 111
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3. 4.5:
Lea tres números que representen el día, el mes y el año, y diga si forman una
fecha correcta. Considere años bisiestos
Solución:
Definición de variables:
Diagrama N/S
______________________________________________________ 112
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.4.6:
Dada una fecha válida determine la fecha del día siguiente.
Solución:
Definición de variables:
Diagrama N/S
______________________________________________________ 113
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.4.7:
Lea un número menor a 4000 y conviértalo a números romanos.
Solución:
Definición de variables:
n: número arábigo que deseamos mostrar en romanos.
El diagrama N/S muestra el algoritmo pedido. Debe tener en cuenta que el
operador MOD devuelve el resto de la división entera, mientras que el
operador DIV devuelve el cociente entero de la división entera.
Diagrama N/S
Leer n
unidades = n MOD 10 n = n DIV 10
decenas = n MOD 10 n = n DIV 10
centenas = n MOD 10 n = n DIV 10
millares = n MOD 10
1 mi11ares
2 3
Imprimir Imprimir Imprimir
"M" "MM" "MMM"
Centenas
1 2 3 4 5 6 7 8 9
Imprimir Imprimir Imprimir Imprimir Imprimir Imprimir Imprimir Imprimir Imprimir
"C" "CC" "CCC" "CD" "D" "DC" "DCC" "DCCC" "CM"
Decenas
1 2 3 4 5 6 7 8 9
Imprimir Imprimir Imprimir Imprimir Imprimir Imprimir Imprimi Imprimi Imprimir
"X" "XX" "XXX" "XL" "L" "LX" r "LXX" r "XC”
Unidades "LXXX"
1 2 3 4 5 6 7 8 9
Imprimir Imprimir Imprimir Imprimir Imprimir Imprimir Imprimir Imprimir Imprimir
"I" "II" "III" "IV" "V" "VI" "VII" "VIII" "IX”
______________________________________________________ 114
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.4.8:
Una Universidad Privada tiene una política de descuento en porcentajes
sobre el pago de pensiones de enseñanza, que se basa en la profesión del
tutor (policía, profesor de colegio, docente universitario, trabajador no
docente y otros) y, el rendimiento del alumno (bueno, regular, deficiente), tal
como se muestra en el cuadro siguiente:
Tabla de descuento (en.%)
Solución:
Definición de variables:
ocup: ocupación del tutor
rend: clasificación según rendimiento
Diagrama N/S
„A‟ „B‟ „C‟ „A‟ „B‟ „C‟ „A‟ „B‟ „C‟ „A‟ „B‟ „C‟ „A‟ „B‟ „C‟
d=0.6 d=0.3 d=0.l d=0.5 d=0.2 d=0.l d=0.4 d=0.2 d=0.0 d=0.4 d=0.1 d=0.0 d=0.3 d=0.0 d=0.0
Imprimir
d
______________________________________________________ 115
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejercicios Propuestos
Lea atentamente cada enunciadoy plantee una solución. Luego construya un
diagrama N/S y codifiquelo en Java.
Además se sabe que los clientes de tipo E y B pueden pagar en efectivo con
cheque o al crédito, los de tipo R solo pueden hacerlo en efectivo o con
cheque, mientras que los de tipo M sólo pueden hacer compras en
efectivo. Lea el tipo de cliente, el tipo de artículo que desea adquirír e
indique el descuento y las alternativas de pago que le son permitidas.
9) Dada una fecha ¿cuántos días faltan para que termine el año?
10) Obtenga el número de días transcurridos entre dos fechas.
11) Todo el mundo sabe cuántos años tiene, pero ¿podría contestar a la
pregunta cuántos días tiene?
12) Dada una fecha diga que día de la semana fue, sabiendo que el primero de
enero de 1900 fue lunes.
______________________________________________________ 116
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
13) Dada una fecha obtenga el número de día dentro de ese año. Por ejemploel
26/10/2000 es el día 300 del año 2000.
______________________________________________________ 117
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
3.5. ESTRUCTURA REPETITIVA MIENTRAS
La estructura repetitiva mientras se caracteriza por realizar n iteraciones
mientras la pregunta condicional inicial se cumpla, en el caso que no se
cumple la condicion esta no realizra ninguna iteración.
Ejemplos:
Ejemplo 3.5.1:
Obtenga el cociente y el residuo de una división calculando la cantidad de
veces que un número está contenido en otro, mediante restas sucesiva:
Por ejemplo, si el dividendo es a = 5236 y el divisor b =1247, entonces
tendremos:
5236 - 1247 = 3989
3989 - 1247 = 2742
2742 - 1247 = 1495
1495 - 1247 = 248
Ya no seguimos restando pues 248 es menor que 1247. El cociente estará
dado por el número de restas (4) y el residuo por el último número obtenido
(248).
Definición de variables:
a: dividendo b: divisor Leer a, b
______________________________________________________ 118
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.5.2:
La secuencia de Fibonacci es muy conocida en los circulos matemáticos y
tiene la particularidad que cada número es igual a la suma de 2 anteriores
términos. La serie de Fibonacci comienza con los números 0 y 1,
produciendo la siguiente secuencia: 0, 1, 1, 2, 3,5, 8, 13,.,., etc. Muestre
todo. Muestre todos los números de Fibonacci que un número dado.
Solución:
Definición de variables:
Diagrama N/S
Leer m
a=0
b= 1
Imprimir a
mientras ( b < m)
Imprimir b
c=a+b
a=b
b=c
______________________________________________________ 119
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.5.3:
Calcule los divisores comunes de dos números.Por ejemplo los divisores
comunes de 6 y 18 1,2,3 y 6.
Solución:
Definición de variables:
a: primer número
b: segundo número
i: posibles divisores
Diagrama N/S
Leer a, b
i= 1
mientras ( i<= a AND i<=b )
a MOD i == 0 AND
b MOD i==0
V F
Imprimir i
i=i+1
______________________________________________________ 120
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.5.4:
Factorizar un número ingresado por teclado. Por ejemplo 8 = 2 x 2 x2.
Solución:
Definición de variables:
Diagrama N/S
Leer n
i=2
mientras (i< =n )
n MOD i == 0
V F
n = n/ i
Imprimir i i = i+ l
______________________________________________________ 121
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.5.5:
Escriba un algoritmo que diga si un númeroes primo.
Solución:
Definición de variables:
n: número a evaluar
i: posible divisor
band: 0 indica que no es primo
Diagrama N/S
Leer n
i=n/2
band =1
mientras (i >1 )
n MOD i == 0
V F
band = 0 i=i-l
band = =1
V F
Imprimir Imprimir
"Es primo” "No es primo"
______________________________________________________ 122
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.5.6:
Escriba un programa que permita reducir una fracción a su mínima
expresión. Por ejemplo: 28/64 = 7/16.
Solución:
Definición de variables:
a : numerador
b: denominador
i: posible divisor de a y b
Diagrama N/S
Leer a, b
i=2
mientras ( i< =a AND i<=b)
a MOD i == 0 AND
b MOD i= = 0
V F
a=a/i
i = i+ l
b=b/i
Imprimir
a, “∕”, b
______________________________________________________ 123
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.5.7:
Lea un número y forme otro número con las cifras en orden inverso. Así si el
número es 12345 el nuevo número será 54321.
Solución:
Definición de variables:
Para obtener un nuevo número inv, formado por los dígitos de n, pero en
orden invertido, debemos obtener cada uno de los dígitos de n, e ir
desplazándolos un valor posicional (unidad, decena, centena, etc.). Cada uno
de los dígitos, pueden ser obtenidos al buscar el resto de la división entera
entre 10 (n MOD 10) y se debe ir incrementando el valor posicional
mediante la multiplicación del resto por 10, y su acumulación en la variable
inv. Se puede usar la división entera (que de manera estándar se representa
mediante el operador DIV, y que en C++, se implementa con el operador /)
siempre y cuando sus argumentos sean de tipo entero. El ciclo se ejecuta
mientras el número aún tenga dígitos que obtener (mientras n sea mayor
que cero), luego del cual imprimimos inv.
Diagrama N/S
Leer n
inv = 0
mientras ( n >0 )
Imprimir
inv
______________________________________________________ 124
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.5.8:
Un número se considera perfecto cuando la suma de sus divisores es igual al
número. Por ejemplo 6 tiene como divisores a 1, 2 y 3 y como 1+2+3= 6, el
número 6 será perfecto; 28 tiene como divisores a 1,2, 4, 7, 14, luego 28 es
perfecto pues 1+2+ 4+7+14=28, lo mismo ocurre con 496 y 8128. Escriba
un programa que lea un número y diga si es perfecto
Solución;
Definición de variables:
n: numero a evaluar
s: suma de los divisores
i: posibles divisores
Diagrama N/S
Leer n
s=0
i=n/2
mientras (i >0 )
n MOD i == 0
V F
s=s+1
i=i-l
s = =1
V F
Imprimir Imprimir
"Es perfecto" "No es perfecto"
______________________________________________________ 125
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.5.9:
Los números Amstrong o cubos perfectos, son aquellos que sumados a los
cubos de sus dígitos nos dan el mismo número. Por ejemplo 153 es un cubo
perfecto pues 13 + 53 + 33 = 153. Lea un número y diga si es o no, un cubo
perfecto.
Solución:
Definición de variables:
n: número a evaluar
se: suma de los cubos de sus cifras
temp: se iguala inicialmente a n, y sirve para trabajar en el algoritmo sin
perder n
De manera similar al ejercicio anterior pero esta vez obtenemos cada dígito
para elevarlo al cubo y acumularlo en sc. Si se resulta ser igual a n, entonces
el número es un cubo perfecto.
Pruebe el algoritmo con los siguientes cubos perfectos: 1, 153, 370, 371 y
407.
Diagrama N/S
Leer n
sc = 0
temp = n
mientras (temp >0 )
sc = sc + (temp MOD 10)3
temp = temp DIV 10
n = = sc
V F
Imprimir Imprimir
"Cubo perfecto" "No es cubo perfecto”
______________________________________________________ 126
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.5.10:
Lea un número y una base de un sistema de nuemeración, y diga si el número
pertenece a ese sistema de numeración, teniendo en cuenta que para que un
número pertenesca a un sistema de numeración todos su digitos deben ser
menores que la base.
Solución:
Definición de variables:
Entonces, dado el número num y la base base, debemos encontrar cada dígito
de num. Si alguno de estos dígitos es mayor que base, entonces debemos
indicar que dicho número no es correcto activando la bandera haciendo band
=1 y, cuando terminemos de evaluar todos sus dígitos, preguntar si esa
bandera fue puesta a 1, en cuyo caso no será un número válido en dicho
sistema de numeración.
______________________________________________________ 127
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Diagrama N/S
______________________________________________________ 128
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.5.11:
Lea un número entero en la base 10, yconviertalo a otra base menor que 10.
Solución:
Por ejemplo sea el número 194 en base 10, al que deseamos convertir a base 5,
entonces:
194 5
(4) 38 5
(3) 7 5
(2) 1 5
(1) 0
______________________________________________________ 129
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Definición de variables:
n: número en base 10, además es utilizado como el número en la nueva
base
base: base a la cual se quiere convertir n
inv: variable de trabajo que almacena los sucesivos residuos
obtenidos al realizar la conversión.
Diagrama N/S
Leer n, base
inv = 0
mientras ( n > 0 )
inv = 10*inv + n MOD base
n = n DIV base
mientras (inv > 0 )
n= 10*n+ inv MOD 10
inv = inv Dív 10
Imprimir n
______________________________________________________ 130
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.5.12:
Lea un número entero en una base menor que 10, y conviertalo a base 10.
Solución:
Para convertir un número escrito en una base distinta a 10, debemos obtener sus
dígitos y multiplicarlos por la base de numeración en que se encuentran pero
elevada a la potencia según su valor posicional disminuido en una unidad. Por
ejemplo, para convertir el número 1234(5) a su equivalente en base 10, haremos lo
siguiente:
Definición de variables:
Diagrama N/S
Leer n, base
i=0
nuevo = 0
mientras ( n > 0)
nuevo= nuevo + (n MOD 10) (base1)
n = n DIV 10
i = i+1
Imprimir
nuevo
______________________________________________________ 131
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.5.13:
El máximo común divisor (mcd) de un conjunto de números es el máximo
número que divide exactamente a todos ellos. Encuentre el mcd de dos
númerospor el método de Euclides.
Solución:
Euclides ideó un algoritmo para encontrar el mcd, de dos números y consiste
en dividir sucesivamente ambos números hasta que el divisor sea cero.
1 6 1 2 1 1 2
306 221 85 51 34 17 0
Definición de variables:
a : primer número (dividendo)
b: segundo número (divisor)
r: resto de la división entera
Diagrama N/S
Leer a, b
mientras (b>0)
r = a MOD b
a=b
b=r
Imprimir a
______________________________________________________ 132
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.5.14:
Encuentre el mcd de dos numeros por restas sucesivas
Solución:
Definición de variables:
a: primer número
b: segundo número
Una forma alternativa de realizar una división es mediante restas tal como se
vio en el Problema 3.5.1. Así, el Algoritmo de Euclides, pero aplicando restas
sucesivas en vez de la división, puede implementarse tal como se observa en el
diagrama N/S.
Diagrama N/S
Leer a, b
mientras ( a≠b)
a>b
V F
a=a-b b=b-a
Imprimir a
______________________________________________________ 133
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.5.15
Obtenga el máximo común divisor mcd de dos números por
descomposición de factores. Tomemos los números 360 y 360 200 2
200 y procedemos a probar sucesivamente si los números i 180 100 2
= 2, 3, … dividen a ambos.Cuando la división de 360 y 200 90 50 2
entre i sea exacta, realizamos las divisiones y volvemos a 45 25 5
probar con el mismo i. 0 5
Solución:
Definición de variables:
a: primer número
b: segundo número
mcd: máximo común divisor
i: posibles divisores
Diagrama N/S
Leer a, b
mcd = 1
i =2
mientras ( i<= a AND i<=b )
a MOD i == 0 AND
b MOD i==0
V F
a =a/ i
b =b/i i = i+ 1
mcd = mcd * i
Imprimir
mcd
______________________________________________________ 134
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.5.16;
E1 mínimo común múltiplo (mcm) de 2 o más números, es el menor número
contiene a todos ellos una cantidad exacta de veces. Construya un algoritmo
para calcular el mcm de 2 números leídos por teclado.
Solución:
Definición de variables:
a: primer número
b: segundo número
mcm: mínimo común múltiplo
i: posibles divisores
band: 0 indica si i aumentará en 1
Diagrama N/S
Leer a, b
mcm =1 i=2 band = 0
mientras ( i<= a OR i<=b )
a MOD i = = 0 OR
b MOD i = = 0
V F
mcm = mcm*i
a MOD i = = 0
V F
a = a/ i i=i+1
b MOD i = = 0
V F
b =b/í
Imprimir
mcd
______________________________________________________ 135
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
360 200 2
180 100 2
90 50 2
45 25 3
15 25 3
5 25 5
1 5 5
1 1
A diferencia del mcd, basta que uno de los números sea dividido por i, para
entrar en el cálculo del mcm. De aquí el uso de OR en vez del AND.
______________________________________________________ 136
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejercicios Propuestos:
Lea atentamente cada enunciado y plantee su solución. Luego construya su
diagrama N-S coreespondiente.
______________________________________________________ 137
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
3.6. ESTRUCTURA REPETITIVA HACER MIENTRAS
La estructura secuencial se caracteriza por mostrar problemas con
caracteristicas secuenciales donde por ningún caso se hara uso de alguna
otra estructura. Los problemas plantados mayormente tienen ambito
matematico ó aritmetico cumpliendo los tre requisitos basicos de un
diagarama: Entrada, Proceso y Salida.
Ejemplos:
Ejemplo 3.6.1:
Encuentre el valor de π sabiendo que la suma de la serie: 1- 1/3 + 1/5 –
1/7+1/9 + ….es igual a π/4. Sugerencia: considere los términos cuyo valor
absoluto sea mayor a 0.000001.
Solución:
Diagrama N/S
i =1
Definición de variables: pi4 = 0
i: denominador varia de 2 en 2
signo = -1
pi4: cuarta parte de pi
hacer
signo: variable contiene el signo del término
signo = -signo
pi4 = pi4 + signo*(l/i)
i=i+2
En la serie mostrada el denominador aumenta en mientras ( 1/i > 0.000001)
2 para cada término, y los signos se alternan Imprimir
entre positivo y negativo. "Pi vale:", 4*pi4
Para este cálculo bastará con un bucle dentro del cual se haga el cambio de
signo, acumule el término y aumente en 2 el denominador (i), mientras el
valor absoluto del término actual (1/i) sea mayor a 0.000001.
Como la suma de todos los términos es π/4, debemos con multiplicar a pi4
por 4, para obtener π.
______________________________________________________ 138
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.6.2:
Hallar la raíz cuadrada de un número por el método de Newton.
Solución:
Definición de variables:
área: área del cuadrado
ladoO: lado inicial supuesto
ladol: lado calculado
Diagrama N/S
Una buena aproximación del lado0 es tomar la media aritmética entre los dos
valores obtenidos (lado0 y ladol) y asignarlo al nuevo lado0, tal expresión
sería: lado0 = (lado0 + ladol ) / 2, luego hay que volver a calcular el nuevo
ladol como ladol = área / lado0, y así sucesivamente hasta que la diferencia
entre lado0 y ladol sea despreciable.
______________________________________________________ 139
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.6.3:
Lea una serie de numeros hasta engresar el valor de cero.Luego indique
cuantos números positivos, negativos, pares e impares fueron ingresados.
Solución:
Definición de variables:
Diagrama N/S
______________________________________________________ 140
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.6.4:
Se tiene una lámina rectangular de largo y ancho conocidos a la que se
recorta un cuadrado de lado x en cada esquina con el objeto de formar una
caja. ¿Cuáles son las dimensiones de esta caja, si se desea que el volumen
sea el máximo posible?
Solución:
Definición de variables:
largo: largo de la lámina
ancho: ancho de la lámina
x: longitud del lado del cuadrado recortado
xmax: longitud del lado que hace máximo el volumen
vol: volumen de la caja
volmax: volumen máximo de la caja
______________________________________________________ 141
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
En muchos casos el aplicar cálculo diferencial, es muy difícil o sumamente
laborioso. Se puede demostrar que el máximo volumen de la caja se obtiene
cuando:
x= ((ancho + largo)· sqrt( ancho2 – ancho.largo + largo2) ∕ 6
Diagrama N/S
______________________________________________________ 142
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.6.5:
¿Cual es la máxima área de terreno que se pueda obtener si las longitudes de un
terreno son x y (20-x)?
Solución:
Como el área tiene que ser positiva, entonces debe cumplirse que 0 < x ≤ 20,
por lo que calculamos las áreas para todos los x desde 0 hasta 20 con
incrementos pequeños (0.0001) y obteniendo la mayor área, y el valor de x
que hace máxima el área (xmax).
______________________________________________________ 143
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejercicios Propuestos:
Lee atentamente cada enunciado y plantee su solución. Luego construya un
diagrama N-S.
______________________________________________________ 144
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
3.7. ESTRUCTURA REPETITIVA PARA
La estructura repetitiva para se caracteriza por realizar multiples
iteraciones consecutivas, basandose en un valor inicial, condicion final e
incremento ó decremento según sea el problema planteado.
Ejemplos:
Ejemplo 3.7.1:
Calcule la suma de la siguiente serie.
1 x x 2 x3 x4 xn
S
0! 1! 2! 3! 4! n!
Solución:
Definición de variables:
t: término cualquiera
s: acumulador indica la suma de términos
n: número de términos
i:indica el término actual
Diagrama N/S
t=l
s=l
Leer n, x
i = l; i<=n; i = 1 +l
t= t * x / i
s=s+t
Imprimir
s
______________________________________________________ 145
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.2:
Un vehículo recorre n distancias en n tiempos diferentes ¿cual será la
velocidad promedio para toda la trayectoria?
Solución:
Definición de variables:
n: cantidad de trayectos
i: indica el trayecto i
d: distancia recorrida en trayecto i
t: tiempo utilizado en trayecto i
dt: distancia total recorrida
tt: tiempo total utilizado
Diagrama N/S
Leer n
dt = tt = 0
i = 1; i<= n; i = i + 1
Leer d, t
dt = dt + d
tt = tt + t
Imprimir dt/tt
______________________________________________________ 146
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.3:
Encuentre el valor numérico de un polinomio de grado n.
Solución:
Definición de variables:
i: indica el exponente de x
n: grado del polinomio
coef: coeficiente de xi
valor: valor numérico del polinomio
Diagrama N/S
valor = 0
Leer n, x
i = n; i >= 0; i = i - 1
leer coef
valor = valor * x + coef
Imprimir
valor
Sea el polinomio f(x) = anxn + an-1xn-1+ an-2xn-2 + ... + a2x2 + a1x1 + a0x0
______________________________________________________ 147
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.4:
Encuentre el promedio de n números.
Solución:
Definición de variables:
Diagrama N/S
s =0
Leer n
i =1; i<=n; i = i + 1
Leer nro
s = s + nro
Imprimir
s/n
______________________________________________________ 148
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.5:
Encuentre el promedio ponderado de n números.
Solución:
Definición de variables:
nro p
Matemáticamente: Pp
p
Diagrama N/S
sn = 0
sp = 0
Leer n
i =1; i<=n; i = i + 1
Leer nro, p
sn = sn + nro*p
sp = sp + p
Imprimir
sn/sp
ASÍ pues, necesitamos leer cada uno de los n números con sus respectivos
pesos y calcular la sumatoria de todo los nro*p. Asimismo, debemos calcular
la sumatoria de todos los p.
______________________________________________________ 149
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.6:
Muestre las tablas de multiplicar del 1 al 15.
Solución:
Definición de variables:
Este algoritmo muestra como podemos anidar los bucles. Para ello se requiere de
un bucle externo (i), que indique la tabla de multiplicar que estamos obteniendo;
y de un bucle interno (j) que indique cada línea de la tabla de multiplicar i, tal
como se muestra.
Diagrama N/S
______________________________________________________ 150
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.7:
Simule un "reloj rápido”que muestre en pantalla, las horas minutos y
segundos.
Solución:
Definición de variables:
hor: horas
min: minutos
seg: segundos
Diagrama N/S
Este es otro ejemplo de como podemos anidar el bucle for. Las horas
solamente pueden tomar valores desde 0 hasta 23. Los minutos desde 0
hasta 59, los segundos desde 0 hasta 59. De estos 3 bucles, quien debe
cambiar más rápido es el bucle de los segundos, por lo tanto será el bucle
más interno, luego vendrían los minutos y finalmente las horas. Recuerde que
quien cambia más despacio es el bucle más externo. Por lo demás el
algoritmo no requiere mayor explicación.
______________________________________________________ 151
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.8:
¿Cuántos números de 4 cifras existen, tales que sean múltiplos de 3 y 7?
Solución:
Definición de variables:
i: números a evaluar
m : Cantidad de números de 4 cifras múltiplos de 3 y
7.
Diagrama N/S
m=0
i = 1000; i<=9999; i =i+l
i MOD 3== 0 AND
i MOD 7== 0
V F
m = m +1
Imprimir m
______________________________________________________ 152
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.9:
Los números enteros que satisfacen la ecuación a2 + b2 = c2, se les conoce
como ternas pitagóricas. Encuentre todas las ternas pitagóricas menores que
n.
Solución:
Definición de variables:
Diagrama N/S
Leer n
a=l; a<=n; a = a+ 1
b=l; b<=n; b = b+l
c= 1; c<=n; c = c + 1
a2 + b2 = =c2
V F
Imprimir
a, b, c
______________________________________________________ 153
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.10:
Cuatro artículos cuestan 3, 7, 19 y23 soles respectivamente ¿Cuáles son las
posibles cantidades que podemos adquirir de cada artículo, si disponemos de
113 soles y deseamos gastarlo todo?
Solución:
Definición de variables:
Diagrama N/S
Para esto hacemos uso de 4 bucles, uno para cada tipo de artículo. En el bucle
más interno preguntamos si la cantidad gastada es igual a 113 soles, en cuyo
caso imprimimos a, b, c y d.
______________________________________________________ 154
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.11:
Lea n números e indique cual es el mayor.
Definición de variables:
n: cantidad de números
i: sirve para llevar la cuenta de números
may: número mayor
nro: número leído
Sin embargo, tenemos una dificultad, el primer número tomado no tiene con
quien compararse, por lo tanto necesitamos asumir un valor para realizar la
primera comparación. Podemos inicializar may a un valor tan pequeño, para
que la primera vez que se compare siempre deba asignarse a may el primer
número leído, este es el procedimiento aplicado. En compiladores de 16 Bits
de C++ -32767 es el mínimo valor de tipo entero que podemos tener, y esta
es la razón que Inicializamos may a este valor. Otra forma es asumir que el
primer número leído es mayor y luego proceder a comparar los números
restantes.
Diagrama N/S
may = -32767
Leer n
i = 1; i<= n; i = i
+1
Leer nro
nro > may
V F
may = nro
Imprimir
may
______________________________________________________ 155
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.12
Muestre todos los números de 3 digitos tales que si invertimos sus cifras el
número original aumente en 297.
Solución:
Definición de variables:
i: es el número a evaluar
nro: es el número a invertir
inv: es el número invertido
Diagrama N/S
______________________________________________________ 156
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.13:
Obtenga el producto de n fracciones. De el resultado como una fracción
simplificada.
Solución:
Definición de variables:
Diagrama N/S
Leer nro
El algoritmo va obteniendo el producto pn = pd = 1
de las fracciones conforme se las va
ingresando. i = 1; i<= nro; i=i+l
Leer n, d
Una vez ingresados y multiplicados
todos los numeradores y denominadores, pn = pn * n
se procede a la simplificación de la
pd = pd * d
fracción, tal como se hizo en el
Problema 4.6. i=2
mientras (i<=pn AND i<=pd )
pn MOD 1 ==0 AND
pd MOD i ==0
V F
pn = pn /i
i = I +1
pd = pd /i
Imprimir pn,"/", pd
______________________________________________________ 157
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.14:
Suma n fracciones. De el resultado com una fracción simplificada.
Definición de variables:
Diagrama N/S
Leer nro
i = 1; i<= nro; i=i+l
Leer n, d
i ==1
V F
nr = n nr = d*nr + n*dr
dr =d dr = d*dr
i=2
mientras (i<=nr AND i<=dr)
nr MOD i == 0 AND
dt MOD i ==0
V F
nr = nr / i i = i +1
dr = dr / i
Imprimir nr, "/", dr
______________________________________________________ 158
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.15:
¿De cuántas maneras se pueden ordenar n objetos?
Solución:
Definición de variables:
Diagrama N/S
fact = l
Leer n
i = 1; i<=n; i = i +1
fact = fact * i
Imprimir fact
______________________________________________________ 159
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.16:
¿De cuantas maneras podemos colocar n objetos en r lugares diferentes?
(n≥r)
Solución:
Definición de variables:
i: indica el i-ésimo objeto
n: número de objetos
v: cantidad posible de ordenamientos
Diagrama N/S
v=l
Leer n, r
i = 1; i<=r; i = i +1
v = v * ( n - i + 1)
Imprimir
v
c=l
Leer n, r
i=l; i<=r; i = i+l
c = c * ( n - i + l)/i
Imprimir
c
El enunciado del problema no es otro que el cálculo de combinaciones de n
objetos tomados en grupos de r elementos. Las combinaciones se definen
como la cantidad de formas que podemos tomar r objetos de un total de n
objetos en donde la posición no es importante, aquí, decir ab es igual a decir
ba, pues son los mismos objetos. Sea Cnr el número de combinaciones
requerido, cada una He estas combinaciones consta de r objetos deferentes
los cuales pueden ordenarse entre si de r! maneras, por lo tanto Cnr .r! es
igual a Vnr
n!
De donde: C n r
r! n r !
Puede demostrarse que la relación que existe entre Cnr y Cnr-i, viene dada por:
n n! n n r 1
C C
r r! n r ! r 1 r
______________________________________________________ 161
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.7.18:
Los coeficientes que se obtienen al desarrollar el Binomio de Newton para
exponentes enteros pueden calcularse en base al coeficiente anterior mediante
relación coef = coef*(i-j+l)/j, donde coef, es el coeficiente del término
actúal; i es el exponente del binomio y, j indica que término se está
calculando. Escribe un programa para mostrar los coeficientes en forma de
triángulo. A este triángulo se le conoce como Triángulo de Pascal o
Tartaglia.
1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
Solución:
Definición de variables:
n: cantidad de filas del triángulo o exponente del binomio + 1
i: fila actual
j: columna actual
coef: coeficiente binomial
El Binomio de Newton (a+b)n tiene una forma conocida de desarrollo que nos
evita tener que multiplicar n veces (a+b). Dicho desarrollo esta dado por:
______________________________________________________ 162
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
De donde se puede observar que los coeficientes de cada uno de los términos,
son jrecisamente las combinaciones de n elementos tomados de r en r, esto es:
Cnr = n! / [r!. (n- r)! ], y por lo tanto la relación siguiente también se
cumple.
n n! n n r 1
C C
r r! n r ! r 1 r
Diagrama N/S
nro = 1
Leer n
Imprimir nro
i = 1; i<=n; i = i +1
Imprimir nro
j = l; j<=i; j=j+l
nro = nro* (i-j + l)/j
Imprimir nro
______________________________________________________ 163
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejercicios propuestos
______________________________________________________ 164
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
15. Escriba un programa que genere todos los números de 4 dígitos en base
6 y sus equivalentes en base 10.
16. Determinar la suma de los n primeros términos de la serie:
X/1 - X2/22 + X3/32 - X4I42 +X5/22 ...
______________________________________________________ 165
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplos:
Ejemplo 3.8.1:
Lea n números almacénelos en un array e imprímalos.
Solución:
Diagrama N/S
Definición de variables:
n: número de elementos del array Leer n
i: subíndice del término actual
x[ ]: array unidimensional i = 0; i<n; i = i+l
Leer x[ i ]
Un array es un conjunto de
i = 0; i<n; i = i+l
datos referenciados con el mismo
nombre, pero distinguidos mediante Imprimir x[i]
un subíndice, y en donde cada
elemento es del mismo tipo. Cada uno
de los elementos del array se referencia con el nombre del array (x) seguido
y de un subíndice ( i ). En JAVA, los subíndices van desde 0, hasta [el
límite declarado para el array menos uno.
Para poder leer cada uno de los elementos del array (x[i]),
necesitamos conocer cuántos datos vamos a leer (n) y luego hacer un bucle
para leer cada l uno de ellos haciendo variar el subíndice (i) desde cero hasta
n-1. Una vez ingresados los elementos solo debemos imprimirlos mediante
otro bucle.
______________________________________________________ 166
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.8.2:
Calcule la media aritmética de un cojunto de datos.
Solución:
Definición de variables:
n: número de elementos del array
i: subíndice del término actual
s: suma de los elementos
x[ ]: array unidimensional
Diagrama N/S
Leer n
i = 0; i<n; i = i +1
Leer x[i ]
s=0
i = 0; i<n; i = i+l
s = s + x[i]
Imprimir s/n
x i
media aritmética
n
______________________________________________________ 167
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.8.3:
Calcule la media armónica de un conjunto de datos.
Solución:
Definición de variables:
Diagrama N/S
Leer n
i = 0; i<n; i = i+l
Leer x[ i]
s=0
i = 0; i<n; i =i+l
s = s+ l/x[i]
Imprimir n/s
La media armónica se efine como "El inverso del promedio de los inversos".
Matemáticamente:
1
media armonica =
1/ x i
n
______________________________________________________ 168
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.8.4:
Calcule la media geométrica de un conjunto de datos.
Solución:
Definición de variables:
n: número de elementos del array
i: subíndice del dato actual
p: producto de los datos
x[ ]: array unidimensional
Diagrama N/S
Leer n
i = 0; i<n; i = i+l
Leer x[i ]
p=1
i = 0; i<n; i = i+1
p = p *x [ i ]
Imprimir p1/n
La media geométrica se define como la raíz enésima del producto de todos los
datos.
Matemáticamente:
______________________________________________________ 169
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.8.5:
Calcule el promedio ponderado de un conjunto de datos
Solución:
Definición de variables:
n: número de elementos del array
i: subíndice del término actual
valores[ ]: conjunto de elementos
pesos[ ]: ponderaciones de los valores[i]
sv: suma de los valores[i]
sp: suma de los pesos[i]
Diagrama N/S
Leer n
i = 0; i<n; i = i+l
Leer valores [i], pesosfi]
sv = 0
sp = 0
i = 0; i<n; i = i+l
sv = sv +valores[i] * pesos[i]
sp = sp + pesos [i]
Imprimir sv/sp
Matemáticamente:
valores i *pesos i
P. ponderado
pesos i
______________________________________________________ 170
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Finalmente, nos queda dividir lichas sumatorias e imprimir el Resultado.
______________________________________________________ 171
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.8.6:
Diga si un elemento sse encuentra en un array, utilice la busqueda secuencial.
Diagrama N/S
Leer n
i = 0; i<n; i = i+l
Leer x[ i ]
Leer elem
band = 0
i = 0; i<n; i = i+l
x[i] = elem
V F
Imprimir i
band = 1
band==0
V F
Imprimir
"No lo encontré"
Solución;
Definición de variables:
n: número de elementos del array
i: subíndice del término actual
x[ ]: array unidimensional
elem: elemento a buscar
______________________________________________________ 172
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.8.7:
Elimine los elementos repetidos de un array.
Bolución:
Definición de variables:
n: número de elementos del array
i: subíndice del término actual
j: subíndice del resto de términos desde i hasta n
k: subíndice de los términos desplazados
lista[ ]: array unidimensional
Diagrama N/S
Leer n
i = 0; i<n; i = i+l
Leer lista[ i ]
i = 0; i < n; i=i+1
j = i + l; j<n; j=j+l
lista[i] = lista[j]
V F
k=j;k<n-l;k=k+l
lista[k]=lista[k+l]
n = n- 1
j =i
Imprimir n
i = 0; i<n; i = i+1
Imprimir lista[ i ]
______________________________________________________ 173
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
(lista[i+l]) hasta el final de la lista. Esto se consigue en el bucle más interno (el
bucle j), donde j va desde i+1 hasta n-1. En este último bucle se realizan las
comparaciones entre lista[i] y Iista[j], si son iguales hay que copiar todos los
elementos siguientes a una posición anterior. De esto se encarga el bucle k, que va
ha empezar a desplazar la lista desde j hasta el elemento final. Al salir del bucle
es necesario disminuir n en 1 y hacer j = i, para volver a probar si el término que
buscamos se encuentra nuevamente repetido, al hacer j = i y volverse a ejecutar el
bucle j, éste automáticamente sumará 1 a j, ocasionando que se vuelva a ejecutar el
bucle j como si fuera la primera vez. Finalmente, imprimimos el número actual de
elementos (n) y cada uno de ellos (Iista[i]).
______________________________________________________ 174
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.8.8:
Solución;
La varianza y la desviación estándar son medidas de la dispersión de
los datos con respecto a la media. Si los datos son muy cercanos a la media, el
valor de la varianza y la desviación estándar es pequeño; sin embargo, si los
datos están muy dispersos ambas medidas serán grandes.
Matemáticamente:
2 2
x i x x i x
varianza = desviación estándar =
n n
Diagrama N/S
Leer n
i = 0; i<n; i = i +1
Leer x[ i ]
s=0
i = 0; i<n; i = i+l
s = s + x[i]
media = s/n
i = 0; i<n; i = i+l
suma = suma + (x[i] - media)2
Imprimir suma/n, (suma/n)1/2
______________________________________________________ 175
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Definición de variables:
______________________________________________________ 176
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.8.9:
Ajuste los pares de puntos (x,y) almacenados arrays x[ ], y [ ] a la recta
y = ax + b, por el método de regresión lineal.
Solución:
n xi , yi xi yi
a 2
2
n x i xi
yi x 2i xi xi , yi
b 2
2
n x i xi
Definición de variables:
n: número de elementos
i: subíndice del término actual
x[ ]: valores independientes
y[ ]: valores dependientes
sx: sumatoria de los x[i]
sy: sumatoria de los y[i]
sxx: sumatoria de los x[i]*x[i]
sxy: sumatoria de los x[i]*y[i]
a: coeficiente de x
b: término independiente de x
______________________________________________________ 177
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Diagrama N/S
Leer n
i = 0; i<n; i = i+l
Leer x [i]
i] i = 0; i<n; i = i+l
Leer y [i]
sx = 0
sy = 0
sxx = 0
sxy = 0
i = 0; i<n; i = i+l
sx = sx + x[i]
sy = sy + y[i]
sxx = sxx + x[i]*x[i]
sxy = sxy + *[i]*y[i]
a = ( n*sxy - sx*sy ) / ( n*sxx - sx* sx )
b = (sy*sxx - sx*sxy)/ ( n*sxx - sx* sx )
Imprimir
a, b
______________________________________________________ 178
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.8.10:
Ordene un conjunto de datos de menor a mayor por el método de la burbuja
array.
Diagrama N/S
Leer n
i = 0; i<n; i = i+l
Leer x[ i ]
i = 1; i < n; i=i+1
j = n - 1; j >=i; j = j -1
x[j-l] > x[j]
V F
temporal = x[j-l]
x[i-l] = x[j]
x[j] = temporal
Imprimir n
i = 0; i<n; i = i+1
Imprimir x[i]
______________________________________________________ 179
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
En los bucles anidados, el bucle más interno (el bucle j) recorre todos
los elementos del array desde la última posición (n-1) hasta la última
ubicación prdenada (i). En la primera iteración irá comparando cada elemento
con el anterior desde n-1 hasta i=l.
______________________________________________________ 180
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.8.11:
Ordene un conjunto de datos de menor a mayor por el método de de selección.
Solución:
Definición de variables:
Diagrama N/S
Leer n
i = 0; i<n; i = i+l
Leer x[ i ]
i = 0; i<n-1: i = i+l
k=i
temporal = x[i]
j=i+l; j<n; j=j + l
x[j] < temporal
V F
k=j
temporal = x[j]
x[k] = x[i]
x[i] = temporal
i = 0; i<n; i = i + 1
Imprimir x[i]
______________________________________________________ 181
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Una vez leídos los elementos y entrando al algoritmo de ordenamiento en sí,
la primera vez que se ejecuta el bucle i se hace la asignación k=0 y
temporal=x[0], aquí se está suponiendo que el menor elemento es el primero
y corresponde al subíndice 0 (esto es parte del algoritmo de buscar el menor
elemento de un array). Luego se inicia el bucle j, y sirve para encontrar el
menor elemento de todos, tomando como valor inicial de comparación al
primer elemento.
______________________________________________________ 182
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.8.12:
Ordene un conjunto de datos de mayor a menorpor el método de la inserción.
Solución:
Definición de variables:
n: número de elementos del array
i: indica cuantos elementos faltan ordenar j: sirve para comparar y
desplazar los elementos
x[ ]: array unidimensional
temporal: valor del elemento que será insertado.
DiagramaN/S
Leer n
i = 0; i<n; i = i+l
Leer x[ i ]
i = l; i<n; i = i +1
temporal = x[i]
j=i-l; j>=0 AND temporal <x[ j]; j=j-l
x[j+l]=x[j]
x[j+1] = temporal
i = 0; i<n; i = i + 1
Imprimir x[i]
______________________________________________________ 183
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
En cada iteración del bucle j, se desplaza el elemento comparado x[j]
hacia la posición x[j+l] para hacerle sitio al elemento a insertar (temporal).
Al término del bucle j, se habrá encontrado la posición adecuada para insertar
temporal y por lo tanto se realiza la asignación x[j+l] = temporal. Esta
secuencia se vuelve a repetir hasta que se hallan insertado los n-1 elementos
restantes (recuerde que se tomo el primero), en la posición correcta de
ordenamiento.
______________________________________________________ 184
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3.8.13:
Dado un número del día de un determinado año, encuentre el día, mes y año
al que corresponde, sabiendo que: enero, marzo,mayo, julio, octubre y
diciembre tienen 31 días; abril, junio, setiembre y noviembre tienen 30 días,
y que febrero tiene 28 y 29 días según sea un año normal o un año bisiesto.
Por ejemplo, el día número 300 del año 2000 es el 26/10/2000.
Solución:
Definición de variables:
i: indica el mes (0... 11)
annio: guarda el año
nrodia: número de día leído
dias[ ]: array. Almacena número de días de los meses
suma: acumulador. Indica número de días hasta esa fecha
Comenzamos inicializando los días que tiene cada mes en el array dias[ ].
Aquí hacemos la suposición que se trata de un año normal (dias[l]= 28) y en
caso no ser cierto se procederá a su cambio (dias[l]= 29). Para esto
mecesitamos recordar la condición de bisiesto (ver Problema 2.8):
Diagrama N/S
dias[ ] = { 31,28,31,3031,3031,31,3031,30,31}
Leer nrodia, annio
( annio MOD 4==0)AND( (annio MOD 100*0)
OR (annio MOD 400==0))
V F
días[l]=29
suma = 0
i=0
Mientras ( nrodia > suma )
suma = suma + dias[i]
i = i+l
suma = suma - dias[i-l]
Imprimir (nrodia - suma), " /" , i, " /", annio
______________________________________________________ 185
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
En caso de que la anterior expresión sea cierta febrero tendrá 29 días
debiendo realizarse la asignación dias[l] = 29.
Debemos averiguar primero hasta que mes transcurrió (i) para el número de
días ingresados (nrodia).
Esto se consigue acumulando todos los días de cada mes (suma), mientras el
número de días (nrodia) sea mayor que los días acumulados (nrodia>suma).
Como al término del bucle mientras, se acumuló los días de un mes de más,
es necesario restar esos días de suma, esto se consigue mediante suma =
suma -días[í-l], el subíndice resulta ser i-1, puesto que al término del bucle
mientras se incremento i en 1.
Luego, la fecha está compuesta por los días transcurridos del mes actual que
son nrodia-suma, el mes es i (puesto que se le aumento 1 antes de salir del
bucle), y el año es annio.
______________________________________________________ 186
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejercicios propuestos:
Lea atentamente cada enunciado y plantee su solución. Luego construya un
diagrama N/S.
187
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
CAPITULO IV
INTRODUCCIÓN A JAVA
188
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Aunque a Gosling no le importó la complejidad de lenguajes como
C++, tomo la sintaxis básica y la orientación a objetos del lenguaje.
Cuando terminó el nuevo lenguaje lo llamó Oak (se cuenta que el
nombre le vino a Gosling mientras veía un roble por la ventana de su
oficina.)
189
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
un navegador de Web que demostraría el poder del lenguaje, este
navegador es el HotJava.
Es orientado a objetos, porque como C++, Java usa clases para organizar
el código en módulos. En tiempo de ejecución, un programa crea objetos
a partir de las clases. Las clases en Java pueden heredar de otras clases,
pero la múltiple herencia, donde una clase hereda métodos y datos de
varias clases, no está permitida.
190
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
archivo byte-code y traduce los comandos en comandos de lenguaje
máquina que pueden ser ejecutados directamente por la computadora.
Ventajas de Java.
Es seguro.
Se aprende con facilidad.
Es orientado a objetos.
No bloquea el sistema.
191
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Aplicaciones para comunicación en red.
No tiene aritmética de apuntadores.
Es independiente de la plataforma.
Soportado por Microsoft.
Caracteristicas de Java
192
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
hay apuntadores a memoria donde el número de referencias es igual a
cero. Si hay algunos, el bloque de memoria marcado por el recolector es
liberado.
Comentarios
Identificadores
variable nombre
Usuario Nombre_Usuario
_numero
$cadena
193
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Los últimos tres ejemplos son muy poco usados en la generalidad de los
programas. Los identificadores pueden contener palabras reservadas,
pero no pueden ser palabras reservadas; por ejemplo, es valido integer,
pero no int.
Palabras reservadas
El tipo de datos boolean (8 bits) puede tomar dos valores posibles: true y
false
194
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
int i = 10 ; int i = 10 ;
if ( i ) if ( i != 0 )
{ ... } { ... }
195
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Tipo de datos Entero
Existen cuatro tipos de datos enteros: byte (8 bits), short (16 bits), int (32
bits) y long(64 bits)
El valor que toma por defecto una variable de tipo referencia es null
Cadenas de Caracteres
196
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
El literal String debe ir entre comillas dobles “ ”
X ????
32 bits
pc ????
32 bits
cadena ????
32 bits
reunion ????
197
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Conversión de Tipos
Ejemplo: short a , b , c ;
c=a+b; Error, + devuelve int
c = (short)(b + c) ; Correcto
Operadores Java(I)
Operadores unarios: +, -
198
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Operadores Java(III)
Procedencia de Operadores
199
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Tipo O pera do r
Operadores sufijos [] . (argumentos) expr++ expr--
Operadores unarios ++ expr – expr - expr – expr ~ !
Creacion y casting new (tipo) expr
Multiplicativos * / %
Aditivos + -
Desplazamiento << >> >>>
Relacional < > <= >= instanceof
Igualdad == !=
AND (bits) &
OR exclusivo
(bits) ^
OR inclusivo
(bits) I
AND lo gic o &&
OR lo gico II
Condicio na l ?:
Asignacio n = += -= *= /= %= &= ^= |=
<<= >>= >>>=
'a' Letra a
'\t' Un tabulador
'\u????' Un carácter especifico, ???? es reemplazado con
cuatro dígitos hexadecimales.
Modificadores
200
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
El modificador default da acceso a objetos que son parte del mismo
paquete. Sin embargo, en los programas no se especifica el modificador
porque no hay una palabra para ello.
int numero; // acceso default
Convenciones en la programación
class CuentaBancaria
interface Cuenta
void revisarCuenta()
201
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
primerUsuario
if(condición)
{
bloque
}
Ejemplo:
En detalle:
// primer programa en Java
202
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
public class HelloWorld
{
En las siguientes dos líneas se declara el inicio del programa. Para que
el intérprete de Java pueda ejecutar el programa debe tener la misma
sintaxis (excepto para el nombre del parámetro de main). Se declara
public para que lo pueda accesar el intérprete de Java. Se declara static
porque no se ha creado algún objeto y no se crea una instancia. Se
declara void porque no se regresa valor alguno. En este ejemplo no se
va a esperar parámetros de la línea de comandos. En argv[] se guardan
los parámetros y la primera posición contiene el primer parámetro, no
el nombre del programa:
argv[0] parametro1
argv[1] parametro2
System.out.println("Hello world!");
203
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
CAPITULO V
EL LENGUAJE
204
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Si algún objeto hace referencia a algo con valor de null, creará una
excepción (un error que es manejable). Para evitar que las variables
tengan valores indeseables, se debe asignárseles algún valor útil. El
compilador estudia el código para determinar que cada variable ha
sido inicializada antes de su primer uso. Si el compilador no puede
determinar esto, entonces ocurre un error en tiempo de compilación.
Expresiones lógicas
int i = 1;
if(i) // error en tiempo de compilación
if(i != 0) // correcto
Operadores y su Precedencia
205
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Separador . [] () ; ,
DaI ++ -- + - ~ ! I a D * / %
IaD + -
IaD << >>
IaD < > <= >= instanceof
IaD == != I a D &
IaD ^IaD |
IaD && I a D ||
DaI ?:
DaI = *= /= %= += -= <<= >>= &= ^= |=
Cast
Cuando la asignación de valores no es compatible por los tipos de datos,
se usa un cast para persuadir al compilador de reconocer tal asignación.
Esto se puede hacer para asignar un long a un int, por ejemplo.
206
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
long bigValue = 99L;
int smallValue = (int)(bigValue);
Flujo de programa
Sentencia if/else.
if ( <exprBooleana> )
<sentencia> ;
if ( <exprBooleana> )
{
<grupoSentencias 1> ;
}
else
{
<grupoSentencias 2> ;
}
if ( <exprBooleana> )
{
<grupoSentencias > ;
}
if ( <exprBooleana> )
{
<grupoSentencias > ;
}
207
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
else
{
if ( <exprBooleana> )
{
<grupoSentencias > ;
}
}
Ejemplo:
Sentencia Switch.
switch(expresión_a_evaluar)
{
case valor1:
instrucciones; break;
case valor2:
instrucciones; break;
case valor3:
instrucciones; break;
default:
instrucciones; break;
}
208
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
El valor de expresion_a_evaluar debe ser compatible con el tipo int,
como short, byte y char. No se permite evaluar long o valores de punto
flotante.
Ejemplo:
switch(colorNum)
{
La sentencia For.
for(inicialización;condición;alteración)
{
instrucciones;
}
Ejemplo:
int x;
for(x = 0;x < 10;x++)
{
System.out.println("dentro de for");
}
System.out.println("fin de for");
for(int x=0;x<10;x++)
{
...
}
// una vez terminado el ciclo, x ya no puede ser accesada
La sentencia While.
while(condición)
{
instrucciones;
}
Ejemplo:
int i = 0;
while(i<15)
{
System.out.println("dentro de while");
i+=2;
}
La sentencia do/while.
do
{
instrucciones;
}
while(condición);
210
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo:
int i = 0;
do
{
System.out.println("dentro de while");
i++;
}
while(i<10);
Paquetes
package empresa.sistemas;
import empresa.sistemas.*;
ARRAYS
Declaracion de arrays:
Instanciación de Arrays
length: 20
0 I I8 I9
0 0 ... 0 0
Inicialización de Arrays
equivale a
Arrays Multidimensionales
Ejemplos de Arrays
214
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Si se indica solo una dimension, ésta debe ser la primera
equivale a
215
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
CAPITULO VI
6.2. CLASE
Una clase es una plantilla o prototipo que define las variables y los
métodos comunes a todos los objetos de cierto tipo. Las clases definen
estado (variables) y comportamiento (métodos) de todos los objetos.
Las clases son el mecanismo por el que se pueden crear nuevos Tipos en
Java. Las clases son el punto central sobre el que giran la mayoría de los
conceptos de la Orientación a Objetos.
Una clase es una agrupación de datos y de código (métodos) que actúa
sobre esos datos, a la que se le da un nombre.
216
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Una clase contiene:
Datos (se denominan Datos Miembro). Estos pueden ser de tipos
primitivos o referencias.
Métodos (se denominan Métodos Miembro).
La sintaxis general para la declaración de una clase es:
import java.io.*;
class Rectangulo{
private double base;
private double altura;
public Rectangulo(double b, double h) // Constructor
{
base = b;
altura=h;
}
public void setBase(double b)
{
base=b;
}
public void setAltura(double h)
{
altura=h;
}
public double getBase()
{
return base;
}
public double getAltura()
{
return altura;
}
217
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
public double area()
{
return base*altura;
}
218
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
public class pruebaRectangulo{
public static void main(String args[]) throws IOException
{
BufferedReader br=new BufferedReader(new
InputStreamReader(System.in));
double b, h;
Rectangulo R;
System.out.print("Ingrese base : ");
b=Double.parseDouble(br.readLine());
System.out.print("Ingrese altura : ");
h=Double.parseDouble(br.readLine());
R = new Rectangulo(b,h);
System.out.println("Rectangulo : "+R);
System.out.println("Area : "+R.area());
System.out.println(“Perimetro : “+R.perimetro());
System.out.println("Diagonal : "+R.diagonal());
}
}
Dentro del metodo main de la clase PruebaRectangulo se ha declarado
dos variables de tipo primitivo b,h y una variable R que es de tipo
Rectangulo.
Al colocar :
Rectangulo R;
Se esta declarando a R como un Objeto de la Clase Rectangulo.
La declaración no crea nuevos objetos. En la declaración (Rectangulo R)
se declara una variable llamada R la cual será usada para referirnos a un
Objeto Rectangulo. La referencia esta vacía. Una referencia vacía es
conocida como referencia nula.
Al colocar :
R = new Rectangulo(3,4);
Con el operador new creamos un objeto de la clase Rectangulo.El
operador new instancia una clase asignando memoria para el nuevo
Objeto.
El operador new requiere una llamada a un constructor de la clase a
instanciar. El constructor inicializa el nuevo objeto.El operador new
retorna una referencia al objeto creado.
219
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Una vez creado el objeto para poder llamar a sus metodos usamos lo
siguiente
objeto.nombredeMétodo. Por ejemplo para calcular el area usamos
R.area(), para calcular el perímetro R.perimetro() y para calcular la
diagonal R.diagonal().
Al escribir System.out.println(“Rectangulo : “+R); en realidad se esta
llamando tácitamente al método toString de la clase R.
Si se deseara modificar el atributo base del Objeto se debe usar el
método setBase por ejemplo si después de crear el objeto queremos que
base tenga el valor 10, se colocaria la siguiente instrucción:
R.setBase(10); lo mismo se hace si se quiere modificar la altura.
Si se desea saber el valor de algún atributo del objeto se usa los métodos
get, por ejemplo si quisiera imprimir el valor de la base del objeto R se
tendria que escribir lo siguiente :
Ejercicios:
220
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
import java.io.*;
class Cilindro{
private double radio;
private double altura;
221
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
public double volumen()
{
return Math.PI*Math.pow(radio,2)*altura;
}
import java.io.*;
class Numeros{
private double numero1;
private double numero2;
public Numeros(double n1,double n2)
{
222
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
numero1=n1;
numero2=n2;
}
223
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
public double division()
{
return numero1/numero2;
}
class Alumno{
private String nombre;
private double nota1;
private double nota2;
import java.io.*;
class Trabajador{
private String nombre;
private double horasTrabajadas;
private double precioHora;
import java.io.*;
class Movil{
private double velocidadInicial;
private double aceleracion;
private double tiempo;
class Alpha {
private int x;
private void privateMethod() {
System.out.println("privateMethod");
}
}
Protected
Permite que las clases, subclases y todas las clases del mismo paquete
puedan acceder a sus miembros.
231
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Public
Cualquier clase en cualquier paquete tienen acceso a miembros publicos
de las clases.
Ejm:
package Greek;
import Greek.*;
class Beta {
void accessMethod() {
Alpha a = new Alpha();
a.iampublic = 10; // legal
a.publicMethod(); // legal
}
}
Package
El nivel de acceso package es el que se obtiene si no se coloca
explícitamente otros niveles de acceso. Este nivel de acceso permite a las
clases en el mismo paquete como su clases acceder a los miembros. Este
nivel de acceso asume que clases en el mismo paquete son amigas de
confianza.
Ejemplo:
package Greek;
class Alpha {
int iampackage;
void packageMethod() {
System.out.println("packageMethod");
}
232
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
}
Supongan que Alpha y Beta fueron declaradas como parte del paquete
Greek Package
package Greek;
class Beta {
void accessMethod() {
Alpha a = new Alpha();
a.iampackage = 10; // legal
a.packageMethod(); // legal
}
}
La referencia this
Cada objeto tiene acceso a una referencia a si mismo, llamada referencia
this.
La referencia this se usa explícitamente para referirse tanto a los
atributos como a los metodos de un objeto.
Ejemplo:
class Numero{
private int x;
public Numero(int x)
{
this.x = x;
}
public void setX(int x)
{
this.x = x;
}
public String toString()
{
233
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Return “x = “+this.x;
}
}
import java.io.*;
class Empleado{
private String nombres;
private String apellidos;
private static int contador;
234
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
public void setNombres(String nom)
{
nombres=nom;
}
6.4. HERENCIA
A través de la herencia, una clase nueva hereda los atributos y métodos
de una superclase previamente definida. En este caso decimos que la
nueva clase es una subclase.
En la herencia simple, una clase se hereda de una superclase. Java no
reconoce la herencia múltiple, pero si maneja el concepto de interfaces.
Las interfaces ayudan a java a lograr muchas de las ventajas de la
herencia múltiple.
Una subclase normalmente agrega sus propios atributos y métodos. De
modo que una subclase generalmente es mayor que su superclase. Una
subclase es más específica que su superclase y representa un grupo más
pequeño de objetos. El verdadero valor de la herencia radica en la
236
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
capacidad de definir en la subclase adiciones a las características
heredadas de la superclase o sustituciones de estas.
Todo objeto de una subclase es también un objeto de la superclase de esa
subclase. Sin embargo no se cumple lo opuesto: los objetos de una
superclase no son objetos de las subclases de esa superclase.
Las relaciones de herencia forman estructuras jerárquicas similares a un
árbol. Una superclase existe en una relación Jerárquica con sus
subclases. Sin duda, una clase puede existir sola, pero es cuando una
clase se emplea con el mecanismo de herencia que se convierte ya sea en
una superclase que proporciona atributos y comportamientos a otras
clases, o en una subclase que hereda dichos atributos y comportamientos.
Ejemplos:
Persona
Por ejemplo en una ciudad existen Personas las cuales pueden ser
Empleados, Estudiantes, Religiosos. Los Empleados pueden ser
Profesor, Contador. Los estudiantes pueden ser Universitarios, de
Institutos y Colegios.
Miembros Protected
Los miembros protected de una superclase sólo están accesibles para los
métodos de la superclase, los métodos de las subclases y los métodos de
otras clases del mismo paquete.
class Punto{
protected double x;
protected double y;
public Punto()
{
x=0;
y=0;
}
}
}
public Circulo()
{
super();
radio=0;
}
}
239
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
public class HerenciaPuntoCirculo{
public static void main(String args[]) throws IOException
{
Punto P= new Punto(3,4);
Circulo C=new Circulo(6,9,12);
System.out.println(P);
System.out.println(C);
P=C;
System.out.println("Circulo via Punto"+P);
// Si se trabaja con P para calcular el area primero debemos
// Convertir P a tipo Circulo.
System.out.println("Area del Circulo : "+((Circulo)P).area());
}
}
240
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Una referencia a un objeto de subclase puede convertirse implícitamente
en una referencia a un objeto de superclase porque un objeto de subclase
es un objeto de superclase gracias a la herencia
241
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
private String nombreEspecie;
public int volar(float velocidad)
{
// Aquí se especifica como hacer volar una abeja
}
}
6.6. POLIMORFISMO
Mediante el polimorfismo, se pueden escribir programas que procesen
genéricamente – como objetos de superclase- objetos de todas las clases
existentes en una jerarquía. Las clases que no existen durante el
desarrollo de los programas se pueden agregar con poca o ninguna
modificación de la parte genérica del programa, en tanto esas clases
formen parte de la jerarquía que se esta procesando genéricamente.
Ejemplos:
import java.io.*;
242
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
}
243
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
public double ganancias()
{
return salario;
}
245
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
public void setSalarioPorPieza(double sp)
{
salarioPorPieza = sp;
}
E = J;
System.out.println(E.toString()+" gano "+E.ganancias());
E = C;
System.out.println(E.toString()+" gano "+E.ganancias());
E = H;
System.out.println(E.toString()+" gano "+E.ganancias());
E = D;
System.out.println(E.toString()+" gano "+E.ganancias());
}
}
La Linea
E = J;
La expresion :
E.toString()
E.ganancias()
import java.io.*;
250
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
public double getRadio()
{
return radio;
}
251
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
public double area()
{
return 2*super.area()+2*Math.PI*radio*altura;
}
F[0]=p;
F[1]=c;
F[2]=k;
System.out.println(p.getNombre()+" : "+p);
System.out.println(c.getNombre()+" : "+c);
System.out.println(k.getNombre()+" : "+k);
252
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
// Procesamos ahora el arreglo de Figuras e imprimimos el
nombre, area y volumen
// de cada objeto
for(int i=0;i<3;i++)
{
System.out.println();
System.out.println(F[i].getNombre()+" : "+F[i]);
System.out.println("Area ="+F[i].area());
System.out.println("Volumen"+F[i].volumen());
System.out.println("=============");
}
}
6.7. INTERFACES
El concepto de interface lleva un paso más adelante la idea de las clases
abstractas. En Java una interface es una clase abstracta pura, es decir
una clase donde todos los métodos son abstractos (no se implementa
ninguno). Permite al diseñador de clases establecer la forma de una
clase (nombres de métodos, listas de argumentos y tipos de retorno,
pero no bloques de código). Una interface puede también contener datos
miembro, pero estos son siempre static y final. Una interface sirve para
establecer un 'protocolo' entre clases.
Para indicar que una clase implementa los métodos de una interface se
utiliza la palabra clave implements. El compilador se encargará de
verificar que la clase efectivamente declare e implemente todos los
métodos de la interface. Una clase puede implementar más de una
interface.
253
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
interface nombre_interface {
tipo_retorno nombre_metodo ( lista_argumentos ) ;
...
}
Por ejemplo:
interface InstrumentoMusical {
void tocar();
void afinar();
String tipoInstrumento();
}
Referencias a Interfaces
Es posible crear referencias a interfaces, pero las interfaces no pueden
ser instanciadas. Una referencia a una interface puede ser asignada a
cualquier objeto que implemente la interface. Por ejemplo:
Extensión de interfaces
Las interfaces pueden extender otras interfaces y, a diferencia de las
clases, una interface puede extender más de una interface. La sintaxis
es:
Agrupaciones de constantes
Dado que, por definición, todos los datos miembros que se definen en
una interface son static y final, y dado que las interfaces no pueden
instanciarse resultan una buena herramienta para implantar grupos de
constantes. Por ejemplo:
System.out.println(Meses.NOMBRES_MESES[ENERO]);
interface Oyente {
void botonPulsado(Boton b);
}
La interface define un único método botonPulsado. La idea es que este
método sea invocado por la clase Boton cuando el usuario pulse el
botón. Para que esto sea posible en algún momento hay que notificar al
Boton quien es el Oyente que debe ser notificado. La clase Boton
quedaría:
Con todo esto la clase que utiliza este mecanismo podría tener el
siguiente aspecto:
...
void botonPulsado(Boton x) {
// procesar click
...
}
}
257
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
implementa la interface Oyente . En términos clásicos de herencia
miAplicacion ES un Oyente .
6.8. PAQUETES
Claúsula Packaged:
package miPackage;
...
class miClase {
...
declara que la clase miClase pertenece al package miPackage.
258
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Claúsula import
Cuando se referencia cualquier clase dentro de otra se asume, si no se
indica otra cosa, que ésta otra está declarada en el mismo package. Por
ejemplo:
package Geometria;
...
class Circulo {
Punto centro;
...
}
package GeometriaBase;
class Punto {
int x , y;
}
package GeometriaAmpliada;
import GeometriaBase.*;
class Circulo {
Punto centro;
...
}
259
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Con la claúsula import GeometriaBase.*; se hacen accesibles todos los
nombres (todas las clases) declaradas en el package GeometriaBase. Si
sólo se quisiera tener accesible la clase Punto se podría declarar: import
GeometriaBase.Punto;
package GeometriaAmpliada;
class Circulo {
GeometriaBase.Punto centro;
...
}
Para que una clase pueda ser usada fuera del package donde se definió
debe ser declarada con el modificador de acceso public, de la siguiente
forma:
package GeometriaBase;
Si una clase no se declara public sólo puede ser usada por clases que
pertenezcan al mismo package
261
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
CAPITULO VII
262
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
7.1. PROBLEMAS RESUELTOS:
ESTRUCTURA SECUENCIAL
import java.io.*;
public class ejercicio32
{
public static void main(String[] args) throws IOException
{ String nom,ap;
double pm,pmt,pt;
BufferedReader leer = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("ingrese su nombre");
nom=(leer.readLine());
System.out.println("ingrese sus apellidos");
ap=(leer.readLine());
System.out.println("ingrese el pago mensual");
pm=Double.parseDouble(leer.readLine());
System.out.println("ingrese el pago de la matricula");
pmt=Double.parseDouble(leer.readLine());
pt=pm+pmt;
System.out.println("su nombre es:"+nom);
System.out.println("sus apellidos son:"+ap);
System.out.println("el pago total es:"+pt);
}
}
263
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 2: Programa que permite calcular el producto de un numero
ingresado por teclado.
import java.io.*;
public class Ejercicio02
{ public static void main(String Args[])throws IOException
{double num,res=0;
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese un numero:");
num=Double.parseDouble(in.readLine());
res=num*2*25;
System.out.print("El el resultado de multiplicar por 25 y duplicar
es:" + res);
}
}
import java.io.*;
public class Ejercicio03
{ public static void main(String Args[])throws IOException
{ double la,lb,p=0,area=0;
BufferedReader leer= new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese un lado:");
la=Double.parseDouble(leer.readLine());
System.out.println("Ingrese el otro lado:");
lb=Double.parseDouble(leer.readLine());
p = la*2 + lb*2;
area=la*lb;
System.out.println("El perimetro del rectangulo es:" + p);
System.out.println("El area del rectangulo es:" + area); }
}
264
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 3: Programa que permite convertir metros en pies y pulgadas.
import java.io.*;
public class Ejercicio09
{ public static void main(String Args[])throws IOException
{double me,pies=0,pul=0;
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese la cantidad en metros:");
me= Double.parseDouble(in.readLine());
pul=me*39.37;
pies=pul*12;
System.out.println("su convercion en pies es:"+pies+"pies");
System.out.println("su convercion en pulgadas
es:"+pul+"pulgadas");
}
}
import java.io.*;
public class Ejercicio07
{ public static void main(String Args[])throws IOException
{int Co,Ca;
double h,parcial;
BufferedReader leer= new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese la longitud del primer cateto:");
Co=Integer.parseInt(leer.readLine());
System.out.println("Ingrese la longitud del segundo cateto:");
Ca=Integer.parseInt(leer.readLine());
parcial= Co*Co+Ca*Ca;
h= Math.pow(parcial, 0.5);
System.out.print("LA hipotenusa es:"+h);
}
}
265
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 5: Programa que permite calcular el tiempo de demora de 3
tipos de examenes.
import java.io.*;
public class Ejercicio05
{public static void main(String Args[])throws IOException
{int EA,EB,EC;
int TM=0,h=0,min=0;
BufferedReader leer= new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese la cantidad de Examenes del tipo A:");
EA=Integer.parseInt(leer.readLine());
System.out.println("Ingrese la cantidad de Examenes del tipo B:");
EB=Integer.parseInt(leer.readLine());
System.out.println("Ingrese la cantidad de Examenes del tipo C:");
EC=Integer.parseInt(leer.readLine());
TM=EA*5+EB*8+EC*6;
h= TM/60;
min= TM/60;
System.out.print("Se va a demorar: "+h+" horas y "+min+"
minutos.");
}
}
import java.io.*;
public class Ejercicio04
{public static void main(String Args[])throws IOException
{double total=0,PV=0,PM=0,V,M;
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese la cantidad de varones:");
V=Double.parseDouble(in.readLine());
System.out.println("Ingrese la cantidad de mujeres:");
M=Double.parseDouble(in.readLine());
total = V +M;
PV=(V*total)/100;
PM=(M*total)/100;
266
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
System.out.println("El porcentaje de varones es:" +PV+"%");
System.out.println("El porcentaje de mujeres es:" +PM+"%");
}
}
import java.io.*;
public class Ejercicio11
{public static void main(String Args[])throws IOException
{double v,r,l=0,t=0;
BufferedReader leer= new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese la velocidad en m/s:");
v= Double.parseDouble(leer.readLine());
System.out.println("Ingrese el radio de la pista: ");
r= Double.parseDouble(leer.readLine());
l=2*3.1416*r;
t=l/v;
System.out.println("el tiempo que tarda de dar 2 vueltas es
de:"+t+"segundos.");
}
}
267
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 8: Programa que permite convertir una temperatura en grados
celcius a Fahrenheit.
import java.io.*;
public class Ejercicio12
{ public static void main(String Args[])throws IOException
{double C,F;
BufferedReader leer=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese la temperatura en Celcius");
C= Double.parseDouble(leer.readLine());
F=(9*C)/5 + 32;
System.out.println("La temperatura en Fahrenheit es: " + F);
}
}
import java.io.*;
public class ejemplo1
{
public static void main(String[] args)throws IOException
{
double num1=20;
double num2=30;
System.out.print("La suma es :"+(num1+num2));
}
}
268
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 10: Programa que permite calcular la suma de dos numeros
ingresados por teclado.
import java.io.*;
public class ejemplo2
{
public static void main(String[] args) throws IOException
{
double num1, num2, suma=0;
BufferedReader leer = new BufferedReader(new
InputStreamReader(System.in));
System.out.print("Ingrese los valores");
System.out.print("Ingrese el primer valor :");
num1=Double.parseDouble(leer.readLine());
System.out.print("Ingrese el segundo valor :");
num2=Double.parseDouble(leer.readLine());
suma=num1+num2;
System.out.print("La suma es:"+suma);
}
}
269
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
ESTRUCTURA CONDICIONAL SIMPLE (IF)
import java.io.*;
public class ejercicio13
{
public static void main(String[] args) throws IOException
{
int num1;
BufferedReader leer = new BufferedReader(new
InputStreamReader(System.in));
num1 =Integer.parseInt(leer.readLine());
if (num1>0)
{
System.out.println(num1 + " es positivo");
}
else
if (num1<0)
{
System.out.println(num1+ " es negativo");
}
else
if (num1==0)
{
System.out.println(num1 + " es cero");
}
}
}
270
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 12: Programa que permite calcular las operaciones basicas de
resta, suma, multiplicación y division de dos numeros ingresados por
teclado.
import java.io.*;
public class ejercicio15
{
public static void main (String[] args) throws IOException
{ int x,y;
int res=0,sum=0,mult=0,div=0;
BufferedReader leer=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("ingrese el primer valor");
x=Integer.parseInt(leer.readLine());
System.out.println("ingrese el segundo valor");
y=Integer.parseInt(leer.readLine());
res=x-y;
sum=x+y;
mult=x*y;
if(y!=0)
{
div=x/y;
}
else
{
System.out.println("no existe divicion entre cero");
}
System.out.println("la resta es:"+ res);
System.out.println("la suma es :"+ sum);
System.out.println("la multiplicacion es :"+mult);
System.out.println("la divicion es:"+div);
}
}
271
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 13: Programa que permite calcular el costo de una llamada
telefonica.
import java.io.*;
public class ejercicio17
{
public static void main(String[] args) throws IOException
{
double min;
double cll=0;
int c1=5;
int c2=3;
BufferedReader leer = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("ingresar los minutos consumidos");
min =Double.parseDouble(leer.readLine());
if (min>0 && min<=3)
{
cll=min*c1;
}
else
{
cll=(3*c1)+((min-3)*c2);
}
System.out.println("elcosto de la llamada es : " + cll);
}
}
272
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 14: Programa que permite calcular la condicion de estudiante
de acuerdo a sus tres examenes ingresados..
import java.io.*;
public class ejercicio25
{ public static void main(String[] args) throws IOException
{ double EX1,EX2,EX3,PF=0;
BufferedReader leer = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("ingrese la nota del primer examen:");
EX1=Double.parseDouble(leer.readLine());
System.out.println("ingrese la nota del segundo examen:");
EX2=Double.parseDouble(leer.readLine());
System.out.println("ingrese la nota del tercer examen:");
EX3=Double.parseDouble(leer.readLine());
PF=(EX1+EX2+EX3)/3;
if (PF>=0 && PF<=69)
{
System.out.println(PF+":reprobado.");
}
if (PF>=70 && PF<=79)
{
System.out.println(PF+":hay que mejorar.");
}
if (PF>=80 && PF<=89)
{
System.out.println(PF+":bien.");
}
if (PF>=90 && PF<=99)
{
System.out.println(PF+":muy bien.");
}
if (PF==100)
{
System.out.println(PF+":excelente.");
}
}
}
273
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 15: Programa que permite mostrar el tipo de triangulo que se
forma según valores ingresados de sus tres lados.
import java.io.*;
public class ejercicio26
{
public static void main(String[] args) throws IOException
{ int A,B,C;
BufferedReader leer = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("ingrese el lado mayor");
A=Integer.parseInt(leer.readLine());
System.out.println("ingrese primer lado");
B=Integer.parseInt(leer.readLine());
System.out.println("ingrese segundo lado");
C=Integer.parseInt(leer.readLine());
if (A>=(B+C))
{
System.out.println("no se forma un triangulo");
}
if ((A^2)==((B^2)+(C^2)))
{
System.out.println("se forma un triangulo rectangulo");
}
if ((A^2)>((B^2)+(C^2)))
{
System.out.println("se forma un triangulo obtusangulo");
}
if ((A^2)<((B^2)+(C^2)))
{
System.out.println("se forma un triangulo acutangulo");
}
}
}
274
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 16: Programa que permite mostrar la condicion que cumple
una persona según su edad ingresada.
import java.io.*;
public class ejercicio28
{
public static void main(String[] args) throws IOException
{ int edad;
BufferedReader leer = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("ingrese su edad");
edad=Integer.parseInt(leer.readLine());
if (edad>18)
{
System.out.println("usted es todo un joven , y su edad
es:"+edad);
}
else
{
System.out.println("usted es aun un adolescente y su edad
es:"+edad);
}
}
}
import java.io.*;
public class caso3
{
public static void main(String[] args)throws IOException
{double c,i,num,par=0,impar=0;
//Creando el metodo para el ingreso de datos
for(i=1;i<=c;i++)
{System.out.print("ingrese valor:"+i);
num=Double.parseDouble(l.readLine());
if(num%2==0)
par++;
else
impar++;
}
System.out.println("la cantidad de numeros pares="+par);
System.out.println("la cantidad de numeros impares="+impar);
}
}
import java.io.*;
public class ejercicio6
{public static void par(int num)
{
if((num%2)==0)
{System.out.println("El numero es par");
}
else
{System.out.println("El numero es impar");
}
}
public static void main(String[] args) throws IOException
{
int numero;
BufferedReader leer=new BufferedReader (new
InputStreamReader(System.in));
System.out.println("Ingrese un numero :");
numero =Integer.parseInt(leer.readLine());
par(numero);
}
}
276
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 19: Programa que permite calcular el mayor de dos numeros
si existe, caso contrario mostrara un mensaje que los numeros son
iguales.
import java.io.*;
public class Ejercicio10
{
public static void main(String[] args) throws IOException
{
int a,b;
BufferedReader leer = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("ingrese 2 numeros");
a =Integer.parseInt(leer.readLine());
b =Integer.parseInt(leer.readLine());
if (a>b)
{
System.out.println(a+"es mayor");
}
else
if (b>a)
{
System.out.println(b+"es mayor");
}
else
if (a==b)
{
System.out.println(a+"y"+b+"son iguales");
}
}
}
277
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 20: Programa que permite calcular si un numero ingresado es
par, n cantidad de veces y utilizando metodos.
import java.io.*;
public class ejercicio8
{
public static void par(int num)
{
if((num%2)==0)
{System.out.println("El numero es par");
}
else
{System.out.println("El numero es impar");
}
278
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 21: Programa que permite calcular si un numero ingresado es
par, n cantidad de veces y utilizando metodos.
import java.io.*;
public class Ejercicio11
{ public static void main(String Args[])throws IOException
{double v,r,l=0,t=0;
BufferedReader leer= new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese la velocidad en m/s:");
v= Double.parseDouble(leer.readLine());
System.out.println("Ingrese el radio de la pista: ");
r= Double.parseDouble(leer.readLine());
l=2*3.1416*r;
t=l/v;
System.out.println("el tiempo que tarda de dar 2 vueltas es
de:"+t+"segundos.");
}
}
import javax.swing.JOptionPane;
public class caso4
{ public static void main (String[] args)
{ String b;
double n1,num,i, may = 0, men= 0;
279
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
{may = num;
}
else
if (num<men)
{men = num;
}
}
}
}
import javax.swing.JOptionPane;
public class SumarNumeros
{
public static void main( String args[] )
{ String strNumero1;
String strNumero2;
int intNumero1;
int intNumero2;
int suma;
strNumero1=JOptionPane.showInputDialog("Ingrese el entero 1" );
strNumero2= JOptionPane.showInputDialog("Ingrese el entero2" );
intNumero1 = Integer.parseInt( strNumero1 );
intNumero2 = Integer.parseInt( strNumero2 );
suma = intNumero1 + intNumero2;
JOptionPane.showMessageDialog( null, "La suma es " + suma,
"Resultado", JOptionPane.PLAIN_MESSAGE );
System.exit( 0 );
}
}
280
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
import java.io.*;
public class p
{ public static void main(String[] args) throws IOException
{ InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader input = new BufferedReader(reader);
System.out.print("Escribe tu edad: ");
String text = input.readLine();
int edad = new Integer(text).intValue();
System.out.println("Tu tienes " + edad + " años, hoy,");
int año = 2008 - edad;
System.out.println("por tanto posiblemente naciste en " + año);
}
}
281
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 25: Programa que nos permite mostrar una pregunta con 3
alternativas, al elegir uno de ellos nos muestra si la respuesta es correcta
o no, si no acertamos nos pide que sigamos intentando hasta elgir el
correcto
import java.io.*;
import java.util.*;
public class gg
{
static BufferedReader entrada = new BufferedReader(new
InputStreamReader(System.in));
static String respuesta;
static char opc;
static void pregunta1() throws IOException
{
opc=0;
System.out.println("1ra Pregunta:");
System.out.println("¿Cual es el planeta mas cercano a la tierra?");
System.out.println("A)Mercurio");
System.out.println("B)Tierra");
System.out.println("C)Pluton");
respuesta=entrada.readLine();
respuesta=respuesta.toUpperCase();
opc=respuesta.charAt(0);
if(opc=='A')
System.out.println("Respuesta Correcta :D");
else
System.out.println("Respuesta incorrecta, intenta de nuevo");
}
public static void main(String args[]) throws IOException
{
Random rnd=new Random();
int i;
i=rnd.nextInt(5);
System.out.println(i);
switch(i)
{
282
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
case 0:
while(opc!='A')
pregunta1();
break;
case 1:
System.out.println("Numero 1");
break;
case 2:
System.out.println("Numero 2");
break;
case 3:
System.out.println("Numero 3");
break;
case 4:
System.out.println("Numero 4");
break;
case 5:
System.out.println("Numero 5");
break;
}
}
}
import java.io.*;
public class case3
{
public static void main(String[] args) throws IOException
{
int num1;
String dia="";
BufferedReader leer=new BufferedReader (new
InputStreamReader(System.in));
System.out.println("Ingrese un numero ");
num1=Integer.parseInt(leer.readLine());
switch(num1)
{
283
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
case 1:
dia="Lunes";
break;
case 2:
dia="Martes";
break;
case 3:
dia="Miercoles";
break;
case 4:
dia="Jueves";
break;
case 5:
dia="Viernes";
break;
case 6:
dia="Sabado";
break;
case 7:
dia="Domingo";
break;
default:
dia="Ingrese un numero correcto";
break;
}
System.out.println("El dia es >"+dia);
284
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
import java.io.*;
public class ejercicio9
{ // Creates a new instance of ejercicio9
import java.io.*;
class case5
{
public static void main(String[] args) {
try{
BufferedReader object = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("enter the number");
int a= Integer.parseInt(object.readLine());
int fact= 1;
285
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
System.out.println("Factorial of " +a+ ":");
for (int i= 1; i<=a; i++){
fact=fact*i;
}
System.out.println(fact);
}
catch (Exception e){}
}
}
286
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
import java.io.*;
class media
{
public static void main(String Arg[ ]) throws IOException
{
double media = 0.0;
int n = 0;
int elementos;
double num;
n++;
}
287
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
class pares
{
public static void main(String arg[ ])
{ int num = 20;
while (num < 101)
{if (num % 2 == 0)
{ System.out.println(num);
}
num = num + 1;
}
}
}
import java.io.*;
public class binario{
public static void main(String args[]){
288
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
int decimal = 25222;
Ejemplo 33: Programa que nos permite sumar los numeros divisibles
por dos, del numero ingresado
import java.io.*;
class while1
{
public static void main(String Arg[ ]) throws IOException
{
int i = 1;
int sum = 0;
int num;
289
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 34: Programa que nos permite sumar los n primeros n enteros,
donde n es un numero ingresado por el usuario
import java.io.*;
public class while3
{ public static void main(String [] args)
{ int number;
int sum;
int num;
System.out.print("Por favor ingrese un numero: ");
number=keyboard.readInt();
//inicializar en 0
sum = 0;
num = number;
//calcular la suma
while(num > 0)
sum += num--;
//Mostrar la respuesta
System.out.println("La suma de suma de los primeros " + number
+" enteros es " + sum + ".");
}
}
290
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
ARREGLOS UNIDIMENCIONALES:
Ejemplo 36: Programa que nos permite calcular la suma e dos arreglos
import java.io.*;
public class P2
{
public static void main(String Nubito[])throws IOException{
for(int i=0;i<5;i++)
{
System.out.println("la suma es :"+c[i]);
}
}
}
291
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
import java.io.*;
public class metodoMatriz
{
public static void opera(int m[])
{ int sum=0;
for(int x=0;x<m.length;x++)
{sum=sum+m[x];
}
System.out.println("La suma de los valores es "+sum);
}
292
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
import java.io.*;
public class P3
{
public static void main(String Nubito[])throws IOException
{
double may=0;
double pos=0;
double m[]=new double [5];
BufferedReader dat=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese los 5 elementos del vector ");
for(int i=0;i<5;i++)
{
System.out.print("Elemento "+(i+1)+": ");
m[i]=Double.parseDouble(dat.readLine());
if(m[i]>may)
{
may=m[i];
pos=i;
}
}
System.out.println("El numero mayor es "+may);
System.out.println("En la posicion:" +pos);
}
}
293
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
import java.io.*;
public class P4
{
public static void main(String Nubito[])throws IOException
{
double m[]=new double [5];
double n[]=new double [5];
BufferedReader dat=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese los 500 numeros del vector ");
for(int i=0;i<5;i++)
{
System.out.print("Numero "+(i+1)+": ");
m[i]=Double.parseDouble(dat.readLine());
n[i]=m[i]*m[i];
}
System.out.println("Los valores originales son : ");
for(int i=0;i<5;i++)
{
System.out.println(+m[i]);
}
System.out.println("Los valores al cuadrado son : ");
for(int i=0;i<5;i++)
{
System.out.println(+n[i]);
}
}
}
294
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
import java.io.*;
public class P5
{
public static void main(String Nubito[])throws IOException
{
int pos=0,neg=0,c=0;
double sump=0,sumn=0;
double n[]=new double [3];
BufferedReader dat=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese los 300 numeros del vector ");
for(int i=0;i<3;i++)
{
System.out.print("Numero "+(i+1)+": ");
n[i]=Double.parseDouble(dat.readLine());
if(n[i]==0)
{ c=c+1;
}
if(n[i]>0)
{ pos=pos+1;
sump=sump+n[i];
}
if(n[i]<0)
{ neg=neg+1;
sumn=sumn+n[i];
}
}
System.out.println("Los numeros iguales a cero son : "+c);
System.out.println("Los numeros positivos son : "+pos);
System.out.println("Los numeros negativos son : "+neg);
System.out.println("La suma de los positivos es : "+sump);
System.out.println("La suma de los negativos es : "+sumn);
}
295
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
}
Ejemplo 41: Programa que nos permite mostrar los datos ingresados en
forma invertida.
import java.io.*;
public class P6
{
public static void main(String Nubito[])throws IOException
{
double m[]=new double [5];
double inv[]=new double [5];
int x=0;
BufferedReader dat=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese los 5 numeros del vector ");
for(int i=0;i<5;i++)
{
System.out.print("Numero "+(i+1)+": ");
m[i]=Double.parseDouble(dat.readLine());
x=5-(i+1);
inv[x]=m[i];
}
System.out.println("El vector resultantes es ");
for(int i=0;i<5;i++)
{
System.out.println(+inv[i]);
}
}
}
296
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 42: Programa que nos permite calcular la suma de dos arreglos
de igual cantidad de datos.
import java.io.*;
public class ejemplo4
{
public static void main(String[] args) throws IOException
{
double a[]=new double [10];
double b[]=new double [10];
double c[]=new double [10];
double dato;
BufferedReader leer=new BufferedReader (new
InputStreamReader(System.in));
System.out.println("Ingresa los datos a los arreglo");
for(int i=0;i<a.length;i++)
{System.out.println("Ingrese A["+(i+1)+"] :");
dato=Double.parseDouble(leer.readLine());
a[i]=dato;
}
for(int i=0;i<a.length;i++)
{System.out.println("Ingrese B["+(i+1)+"] :");
dato=Double.parseDouble(leer.readLine());
b[i]=dato;
}
for(int i=0;i<a.length;i++)
{c[i]=a[i]+b[i]; }
for(int i=0;i<a.length;i++)
{System.out.println("la suma del arreglo
A["+(i+1)+"]+B["+(i+1)+"] es "+c[i]);
}
}
}
297
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 43: Programa que nos permite mostrar, si los datos de dos
vectores(arreglos), son iguales.
import java.io.*;
public class P7
{ public static void main(String Nubito[])throws IOException
{
double m[]=new double [5];
double n[]=new double [5];
int x=0;
BufferedReader dat=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese los 5 elementos del vector M ");
for(int i=0;i<5;i++)
{
System.out.print("Elemento "+(i+1)+": ");
m[i]=Double.parseDouble(dat.readLine());
}
System.out.println("Ingrese los 5 elementos del vector N ");
for(int i=0;i<5;i++)
{
System.out.print("Elemento "+(i+1)+": ");
n[i]=Double.parseDouble(dat.readLine());
}
for(int i=0;i<5;i++)
{
if(m[i]==n[i])
{x=x+1;}
}
if(x==5)
{System.out.println("Los vectores son Iguales"); }
else
{
System.out.println("Los vectores son Desiguales");
}
}
}
298
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
import java.io.*;
public class P9
{
public static void main(String Nubito[])throws IOException
{ double n[]=new double [8];
double x=0;
int p=0;
BufferedReader dat=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese los 80 elementos del vector ");
for(int i=0;i<8;i++)
{ System.out.print("Elemento "+(i+1)+": ");
n[i]=Double.parseDouble(dat.readLine());
}
System.out.println("Ingrese el numero a buscar : ");
x=Double.parseDouble(dat.readLine());
for(int i=0;i<8;i++)
{if(n[i]==x)
{ p=i+1;
}
}
if(p>0)
{System.out.println("El numero se encuentra en la posicion:" +p);
}
else
{
System.out.println("No se encontro el numero");
}
}
}
299
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
import java.io.*;
public class ejemplo5
{
public static void main(String[] args) throws IOException
{double a[]=new double [3];
double b[]=new double [3];
double dato;
double facnum;
int num=1,fac, x=0;
BufferedReader leer=new BufferedReader (new
InputStreamReader(System.in));
System.out.println("Ingresa los datos a los arreglo");
for(int i=0;i<a.length;i++)
{System.out.print("Ingrese A["+(i+1)+"] :");
dato=Double.parseDouble(leer.readLine());
a[i]=dato;
}
for(int i=0;i<a.length;i++)
{facnum=a[i];
fac=1;
for(int j=1;j<=facnum;j++)
{fac=fac*j;
}
System.out.print(fac);
b[i]=fac;
fac=0;
}
for(int i=0;i<a.length;i++)
{System.out.println("Ingrese B["+(i)+"] :"+b[i]);
}
}
}
300
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
import java.io.*;
public class P10
{ public static void main(String nubito[])throws IOException
{ double a[]=new double [20];
double b[]=new double [20];
double c[]=new double [20];
int x=0;
BufferedReader dat=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese los 20 numeros del vector A");
for(int i=0;i<20;i++)
{ System.out.print("Numero "+(i+1)+": ");
a[i]=Double.parseDouble(dat.readLine());
}
System.out.println("Ingrese los 20 numeros del vector B");
for(int i=0;i<20;i++)
{System.out.print("Numero "+(i+1)+": ");
b[i]=Double.parseDouble(dat.readLine());
}
for(int i=0;i<20;i++)
{x=20-(i+1);
c[i]=a[i]*b[x];
}
for(int i=0;i<20;i++)
{System.out.println("La multiplicacion es: "+c[i]);
}
}
}
301
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
ARREGLOS BIDIMENCIONALES:
import java.io.*;
public class P12
{ public static void main(String Nubito[])throws IOException
{ double m[][]=new double [5][6];
double suma=0;
BufferedReader dat=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese los valores de la matriz");
for(int i=0;i<5;i++)
{ for(int j=0;j<6;j++)
{System.out.print("Ingrese el un numero : ");
m[i][j]=Double.parseDouble(dat.readLine());
suma=suma+m[i][j];
}
}
System.out.println("la suma es :"+suma);
}
}
import java.io.*;
public class P13
{ public static void main(String Nubito[])throws IOException
{ double m[][]=new double [3][3];
double may=0;
int posi=0,posj=0;
BufferedReader dat=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese los valores de la matriz");
for(int i=0;i<3;i++)
{ for(int j=0;j<3;j++)
302
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
{System.out.print("Ingrese un numero: ");
m[i][j]=Double.parseDouble(dat.readLine());
if(m[i][j]>may)
{may=m[i][j];
posi=i+1;
posj=j+1;
}
}
}
System.out.println("El numero mayor es "+may);
System.out.println("En la posicion ("+posi+","+posj+")");
}
}
import java.io.*;
public class P14
{ public static void main(String args[])throws IOException
{BufferedReader VTL=new BufferedReader(new
InputStreamReader(System.in));
double m[][]=new double [5][5];
double d[]=new double [5];
double sc[]=new double[5];
double sf[]=new double[5];
System.out.println("Ingrese los valores de la matriz");
for(int f=0;f<5;f++)
{ for(int c=0;c<5;c++)
{System.out.print("Ingrese el valor de la posicion
("+(f+1)+","+(c+1)+" : ");
m[f][c]=Double.parseDouble(VTL.readLine());
}
}
for(int c=0;c<5;c++)
{ for(int f=0;f<5;f++)
{sc[c]=sc[c]+m[f][c];
}
}
303
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
for(int c=0;c<5;c++)
{ for(int f=0;f<5;f++)
{sf[f]=sf[f]+m[f][c];
}
}
for(int f=0;f<5;f++)
{System.out.println("La suma de la fila "+f+" es "+sf[f]);
}
for(int c=0;c<5;c++)
{System.out.println("La suma de la columna "+c+" es "+sc[c]);
}
}
}
Ejemplo 50: Programa que nos permite calcular la columna que tiene
mayor suma.
import java.io.*;
public class P15
{ public static void main(String Nubito[])throws IOException
{ double m[][]=new double [5][5];
double sc[]=new double [5];
double may=0;
int c=0;
BufferedReader dat=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese los valores de la matriz");
for(int i=0;i<5;i++)
{for(int j=0;j<5;j++)
{ System.out.print("Ingrese un numero : ");
m[i][j]=Double.parseDouble(dat.readLine());
}
}
for(int j=0;j<5;j++)
{ for(int i=0;i<5;i++)
{ sc[j]=sc[j]+m[i][j];
}
if(sc[j]>may)
{may=sc[j];
304
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
c=j;
}
}
System.out.println("La columna que tiene la mayor suma es "+c);
System.out.println("La suma es "+may);
}
}
import java.io.*;
public class P16
{public static void main(String Nubito[])throws IOException
{ double m[][]=new double [5][5];
double d[]=new double [5];
BufferedReader dat=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Ingrese los valores de la matriz");
for(int i=0;i<5;i++)
{ for(int j=0;j<5;j++)
{System.out.print("Ingrese el valor de la posicion
("+(i+1)+","+(j+1)+" : ");
m[i][j]=Double.parseDouble(dat.readLine());
if(i==j)
{d[i]=m[i][j];}
}
}
System.out.println("La diagonal principal es ");
for(int i=0;i<5;i++)
{System.out.println(""+d[i]);
}
}
}
305
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 52: Programa que nos permite calcular la suma en una serie
fibonacci
import java.io.*;
public class pre_11
{
public static void main (String args [])
{
int x, y;
String leer;
System.out.println("SERIE FIBONACCI");
long Fib[]=new long[50];
Fib[0]=0;
Fib[1]=1;
Fib[2]=Fib[0]+Fib[1];
y=3;
while (y < 50)
{
Fib[y]= Fib[y-1] + Fib[y-2];
y++;
}
for(x=0;x<50;x++)
{
System.out.println(Fib[x]);
}
}
}
306
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 53: Programa que nos permite calcular la suma de una fila y
columna
import java.io.*;
public class preg_19
{ public static void main(String args[])throws IOException
{
BufferedReader VTL=new BufferedReader(new
InputStreamReader(System.in));
double m[][]=new double [5][5];
double d[]=new double [5];
double suma[]=new double[5];
double sf[]=new double[10];
System.out.println("Ingrese los valores de la matriz");
for(int f=0;f<5;f++)
{ for(int c=0;c<5;c++)
{System.out.print("Ingrese el valor de la posicion
("+(f+1)+","+(c+1)+" : ");
m[f][c]=Double.parseDouble(VTL.readLine());
}
}
for(int c=0;c<5;c++)
{ for(int f=0;f<5;f++)
{suma[f]=suma[f]+m[f][c];
}
}
for(int c=0;c<5;c++)
{ for(int f=0;f<5;f++)
{ suma[c]=suma[c]+m[f][c];
}
}
for(int f=0;f<5;f++)
{ System.out.println("La suma de la fila "+f+" es "+suma[f]);
}
for(int c=0;c<5;c++)
{System.out.println("La suma de la columna "+c+" es
"+suma[c]); }
}
}
307
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
import java.io.*;
public class ejercicio10
{
public static void main(String[] args) throws IOException
{
double mat[][] = new double [2][2];
double suma=0;
BufferedReader leer=new BufferedReader (new
InputStreamReader(System.in));
System.out.println("Ingrese los valores a la matriz");
for(int f=0;f<2;f++)
{for(int c=0;c<2;c++)
{System.out.print("Ingrese ["+f+"] - ["+c+"] :");
mat[f][c]=Double.parseDouble(leer.readLine());
}
}
for(int f=0;f<2;f++)
{System.out.println("\n");
for(int c=0;c<2;c++)
{ if(f==c)
{ suma=suma+mat[f][c];
}
}
}
for(int f=0;f<2;f++)
{System.out.println("\n");
for(int c=0;c<2;c++)
{System.out.print("\t\t"+Math.round(mat[f][c]));
}
}
System.out.println("\n");
System.out.print("La suma de su transversal es:"+suma);
}
}
308
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 55: Programa que nos permite calcular la suma una matriz
bidimensional.
import java.io.*;
public class metodoMatriz_2
{ public static void opera(int m1[],int m2[])
{int mul=0;
for(int x=0;x<m1.length;x++)
{mul=m1[x]+m2[x];
System.out.println("La suma de los valores es "+mul);
}
}
309
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
Ejemplo 56: Programa que nos permite calcular las posibles posiciones
de un alfil en un juego de ajedrez.
import java.io.*;
import java.lang.Math;
public class Ajedrezbidimensional {
public static void main(String args[]) {
int fila, columna;
int fila1,columna1;
int fila2,columna2;
int fila3,columna3;
int fila4,columna4;
try{
System.out.println("INGRESE LA POSICION
INICIAL DEL ALFIL(FILA Y
COLUMNA)");
BufferedReader entrada=new
BufferedReader(new
InputStreamReader(System.in));
System.out.println("INGRESE LA FILA");
fila=Integer.parseInt(entrada.readLine());
System.out.println("INGRESE LA
COLUMNA");
columna=Integer.parseInt(entrada.readLine());
System.out.println("LISTA DE POSICIONES
POSIBLES DEL ALFIL ");
System.out.println("");
fila1=fila;
columna1=columna;
System.out.println("");
fila2=fila;
columna2=columna;
System.out.println("");
fila3=fila;
columna3=columna;
}catch(IOException e){}
}
}
311
Manual de Algoritmia www.cesarinweb.es.tl
___________________________________________________
BIBLIOGRAFIA
Direcciones Electrónicas
http://todojava.awardspace.com/manuales-java.html
http://www.webtaller.com/manual-java/indice_manual_java.php
http://www.manual-java.com/
312