Documente Academic
Documente Profesional
Documente Cultură
INFORMTICA 1
(Algoritmos con Java)
MATERIAL RECOPILADO POR LOS PROFESORES
J. ANTONIO LEMOS B. Y EDUARDO VICTORIA Z.
SANTIAGO DE CALI, AGOSTO DE 2004
ASIGNATURA:
CODIGO:
CREDITOS:
PRERREQUISITOS:
CARACTERSTICAS:
FACULTAD:
PROGRAMA:
DEPARTAMENTO QUE FRECE:
AREA:
PERIODO ACADMICO:
INFORMTICA 1
532219
3
22 crditos aprobados
HOMOLOGABLE, VALIDABLE
INGENIERA
INGENIERAS
CIENCIAS DE LA INFORMACIN
INFORMTICA
Agosto Diciembre de 2004
OBJETIVO GENERAL
Capacitar al estudiante en el diseo e implementacin de algoritmos computacionales, utilizando los
conceptos bsicos de la algoritmia, e introducindolo en el estudio de la programacin orientada a
objetos.
OBJETIVOS ESPECFICOS
identificar los sistemas bsicos de numeracin y sus operaciones
fundamentales.
Comprender las operaciones bsicas de la lgica booleana.
Modelar procesos mediante tcnicas algortmicas.
Reconocer y aplicar correctamente las diferentes estructuras de decisin y de
repeticin en programacin de computadores.
Conocer y apropiar el paradigma Orientado a Objetos y su aplicacin en la
programacin.
CONTENIDO PROGRAMTICO
UNIDAD 1 - Sistemas numricos
Pg. 7
Pg. 15
Pg. 29
2
Pg. 61
4.1 Variables
4.2 Palabras reservadas
4.3 Tipos de datos
4.4 Promocin de datos (Casting)
4.5 Operadores aritmticos
4.6 Operador mdulo ( % )
4.7 Operadores de asignacin
4.8 Operadores de incremento y decremento
4.9 Operadores relacionales
4.10 Operadores lgicos bolanos
4.11 Precedencia y asociatividad de los operadores
4.12 Clase prctica
UNIDAD 5 Algoritmos
Pg. 69
Pg. 113
METODOLOGA
El profesor dedicar 180 minutos semanales (dos bloques de 90 minutos) a las actividades
presenciales, las cuales estarn compuestas por:
1) Clases terico-prcticas en las cuales el profesor expondr cada uno de los nuevos temas con
ejemplos descriptivos y asignar las lecturas y prcticas necesarias.
2) Talleres (Prcticas Dirigidas) en los cuales, por grupo de estudio, se resolvern ejercicios.
El profesor asesorar a los grupos. Al final todos los estudiantes debern tener resueltos los
ejercicios y cada grupo avanzar en el proceso de conocimiento segn su particular inters
y necesidad de saber. Estos ejercicios realizados en clase debern ser implementados en
computador en las prcticas de laboratorio.
3) Prcticas Independientes: para ser realizadas en las macro-salas de PCs de la UAO en el
tiempo libre del estudiante.
4) Se efectuarn 3 evaluaciones parciales de la asignatura con la ponderacin que se muestra en
el numeral V. De esta forma, para obtener resultados satisfactorios, el estudiante deber ir
construyendo el conocimiento a travs de aproximaciones sucesivas y durante: las clases,
talleres, trabajo personal y trabajo en grupo de estudio.
EVALUACIN
Primer Parcial
Segundo Parcial
Tercer Parcial
Talleres y Quices
Trabajos Adicionales
15%
25%
25%
REFERENCIAS BIBLIOGRFICAS
1. rea de Informtica UAO, Mdulo de Informtica 1, Publicaciones UAO.
2. CEBALLOS, Francisco J., JAVA 2 Curso de Programacin. Ed. Alfaomega. RaMa.
2000.
3. Joyanes Aguilar Luis & Zahonero Martnez Ignacio, Programacin en Java 2
Algoritmos, Estructuras de Datos y Programacin orientada a Objetos, Ed. McGrawHill,
2002.
4. DEITEL, H.M., DEITEL, P. J. How to program Java. 3 Edicin. Ed. Prentice Hall. 2000.
5. FROUFE, Augustn. JAVA2 Manual de Usuario y Tutorial. 2 Edicin Ed. Alfa Omega
2000.
6. WU, Thomas C. Introduccin a la programacin orientada a objetos con Java. Ed. Mc
Graw Hill. Espaa. 2000.
7. ARNOW, David. WEISS, Gerald, Introduccin a la programacin con Java. Un enfoque
orientado a objetos. Ed. Addison Wesley. Espaa.2001
ELECTRNICAS
1.
2.
3.
4.
5.
6.
http://informatica.uv.es/docencia/fguia/TI/Libro/PDFs/CAPI4.pdf
- Universidad de Oviedo,Espaa, Depto. de Informtica
Profesor Daniel Gayo.
http://di002.edv.uniovi.es/~dani/asignaturas/
- Aprenda Java como si estuviera en primero, Escuela Superior de Ingenieros Industriales de San
Sebastin.
http://mat21.etsii.upm.es/ayudainf/aprendainf/Java/Java2.pdf
- Matemticas para Computacin, Seymour Lipschutz, McGraw Hill, 1992
- Informtica III, Programacin Orientada a Objetos (Java), Recopilacin: Lyda Pea Paz
(1.1)
y, por ejemplo, el nmero decimal 278.5 puede obtenerse como suma de:
200
70
8
0.5
278 .5
es decir, se verifica que:
Cada posicin, por tanto, tiene un peso especfico (en el sistema decimal, cada posicin adems tiene
un nombre):
Valor en el ejemplo
Nombre
posicin 0 peso b0
8
unidades
1
posicin 1 peso b
7
decenas
posicin 2 peso b2
2
centenas
posicin -1 peso b-1
5
dcimas
Informtica I. Versin 1.0 Agosto de 2004
(1.2)
1
4
0 1 = 64 + 8 + 4 + 1 = 77)10
2 1
2
13 2
1 6
0
26)10 = 11010)2
2
3
1
2
1
1
0.3750
2
0.7500
0.7500
2
1.5000
0.5000
x2
1.0000
Por tanto, habindonos detenido cuando la parte decimal es nula, el nmero decimal 26.1875 en
binario es:
26.1875)10 = 11010.0011)2
NOTA: un nmero real no entero presentar siempre cifras despus del punto decimal, pudiendo ser
necesario un nmero finito o infinito de stas, dependiendo de la base en que se represente; por
ejemplo el nmero 1.6)10 representado en binario sera 1.100110011001...)2, requiriendo infinitas
cifras para ser exacto, como tambin ocurre con muchos nmeros representados en decimal.
Informtica I. Versin 1.0 Agosto de 2004
001
1
101
5
100
4
.
.
110
6
100
4 = 2154.64)8
De octal a binario se pasa sin ms que convertir individualmente a binario (tres bits) cada cifra
octal, manteniendo el orden del nmero original. Por ejemplo:
537.24)8 = 5
3
7
.
2
4
101 011 111 . 010 100 = 101011111.0101)2
Para transformar un nmero de octal a decimal se aplica la expresin (1.3) con b=8.
Para transformar un nmero de decimal a octal se procede de forma anloga a como se hizo para
pasar de decimal a binario dividiendo o multiplicando por 8 en lugar de por 2.
As se puede comprobar que 1367.25)8 = 759.328125)10 que 760.33)10 =1370.2507...)8
1.1.3.2 Base Hexadecimal
Para representar un nmero en base hexadecimal (esto es, b=16) es necesario disponer de un
alfabeto de 16 smbolos:
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}
Tabla 1.2.- Nmeros binarios del 0 al 7
Hexadec
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Dcimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
10
Al ser b=16=24, de modo similar al caso octal, cada smbolo hexadecimal se corresponde con 4
smbolos binarios (4 bits) y las conversiones a binario se realizan agrupando o expandiendo en
grupos de 4 bits. Se pueden comprobar las transformaciones siguientes:
10111011111.1011011)2 = 0101 1101 1111 . 1011 0110
5
D
F . B
6 = 5DF.B6)H
1A7.C4 )H =
1
A
0001 1010
7
.
0111 .
C
1100
4
0100 = 110100111.110001)2
De la misma forma que manualmente es muy fcil convertir nmeros de binario a octal, y viceversa,
y de binario a hexadecimal, y viceversa, tambin resulta sencillo efectuar esta operacin
electrnicamente o por programa, por lo que a veces el computador utiliza este tipo de notaciones
intermedias como cdigo interno o de entrada/salida, y tambin para visualizar el contenido de la
memoria o de los registros.
Para transformar un nmero de hexadecimal a decimal se aplica la expresin (1.3) con b=16.
Para pasar un nmero de decimal a hexadecimal se hace de forma anloga a los casos binario y
octal: la parte entera se divide por 16, as como los cocientes enteros sucesivos, y la parte
fraccionaria se multiplica por 16, as como las partes fraccionarias de los productos sucesivos.
As se puede comprobar que 12A5.7C)H = 4773.484375)10 que 16237.25)10 = 3F6D.4)H
1.2 Operaciones Aritmticas y Lgicas
El procesamiento de la informacin incluye realizar una serie de operaciones con los datos;
estas operaciones y las particularidades de las mismas en su realizacin por el computador son el
objeto de los prximos apartados.
Operaciones Aritmticas con Nmeros Binarios
Las operaciones aritmticas bsicas (suma, resta, multiplicacin y divisin) en sistema binario se
realizan en forma anloga a la decimal aunque, por la sencillez de su sistema de representacin, las
tablas son realmente simples:
Tabla 1.3.- Operaciones bsicas en binario
Suma aritmtica
Resta aritmtica
Producto aritmtico
0+0=0
0-0=0
0.0=0
0+1=1
0 - 1 = 1 y debo 1 (*)
0.1=0
1+0=1
1-0=1
1.0=0
1 + 1 = 0 y llevo 1(*)
1-1=0
1.1=1
(*) Llamado normalmente acarreo. En binario 1+1=10 (es 0 y me llevo 1), igual que en decimal
6+6=12 (es 2 y me llevo 1)
Resta en un SC2
Se toma el sustraendo y se le hace complemento a uno (negacin de cada bit). Posteriormente a
este nmero se le suma uno, dando como resultado el complemento a dos. Este ltimo resultado (que
equivale al sustraendo negativo) se le suma al minuendo y obtendremos la respuesta. Si el nmero de
trminos excede al minuendo, se debe realizar desbordamiento de extremos. (No se toma el bit de
extrema izquierda en el resultado ).
Informtica I. Versin 1.0 Agosto de 2004
11
Ejemplo 5:
(minuendo) 0 1 1 1 (7)
(sustraendo) -0 1 0 1 (5)
0 1 1 1 (7)
+ 1 0 1 1 (-5)
Como se presenta acarreo se omite el bit
de extrema izquierda.
Respuesta
Ejemplo 6:
0 0 1 0 (2)
Minuendo
Sustraendo
0 1 0 0 1 0 1 1 ( 75)
0 1 1 0 1 0 0 1 (105)
1 0 0 1 0 1 1 0
_______
1
1 0 0 1 0 1 1 1 (-105)
0 1 0 0 1 0 1 1 ( 75)
1 0 0 1 0 1 1 1 (-105)
1 1 1 0 0 0 1 0 (- 30)
Ejemplo 7:
Efectuar las siguientes operaciones aritmticas binarias:
1110101
+1110110
11101011
1101010
-1010111
0010011
1101010
11
1101010
1101010_
100111110
1010011
10
0000000
1010011_
10100110
110.01 10
10
11.001
010
10
00010
10
00
A partir del ejemplo anterior, se observa que multiplicar por 10)2 (es decir, por 2 en decimal)
equivale a aadir un cero a la derecha, o desplazar el punto decimal a la derecha, siendo esto similar
a multiplicar por 10)10 un nmero decimal. De la misma forma dividir por 10)2 = 2)10 equivale a
eliminar un cero a la derecha, o desplazar el punto decimal a la izquierda.
Por ejemplo:
1010011)2 2 = 10100110)2
10101.01)2 2 = 101010.1)2
1.101101)2 25 = 110110.1)2
1010100)2 / 2 = 101010)2
110.01)2 / 2 = 11.001)2
10101.101)2 / 26 = 0.010101101)2
12
Ejercicios
Llene todas las casillas en blanco, sabiendo que las columnas agrupan el sistema numrico y el
nmero a convertir lo da la fila que tenga el dato.
DECIMAL
BINARIO
OCTAL
HEXA
230
1101001
326
BC3
A48D
1543
100100101
1872
255
Suma
Resta
13
__
AND ______
0.0=0
0.1=0
1.0=0
1.1=1
NOT
0=1
1=0
Como puede observarse, el AND y OR lgicos se corresponden parcialmente con el producto y suma
binarios, y lo ms significativo, es la posibilidad de implementar estas operaciones lgicas, y por
tanto las aritmticas binarias, en forma de circuitos. En la siguiente unidad se revisa ms
ampliamente las operaciones lgicas.
14
p^q
En este caso, la primera lnea es una manera abreviada de decir que si p es verdadero y q es
verdadero, entonces p ^ q es verdadero. Las otras lneas tienen significados anlogos. Consideramos
que esta tabla define precisamente el valor de verdad del enunciado compuesto p ^ q como una
funcin de los valores de verdad de p y de q. Observe que p ^ q es verdadero solamente en el caso en
que ambos subenunciados sean verdaderos.
Informtica I. Versin 1.0 Agosto de 2004
15
2+2=4.
(iii) Paris esta en Inglaterra y 2+2=4.
2+2=5 (iv) Paris esta en Inglaterra y 2+2=5.
Solamente el primer enunciado es verdadero. Cada uno de los otros enunciados es falso ya que por lo
menos uno de sus subenunciados es falso.
2.3 Disyuncin, p q
Dos enunciados pueden combinarse con la palabra o (en el sentido de y/o) para formar un nuevo
enunciado que se llama la disyuncin de los dos enunciados originales. Simblicamente, p q.
Denota la disyuncin de los enunciados p y q y se lee p o q.
El valor de verdad de p q esta dado por la siguiente tabla de verdad, que consideramos define a
p q:
pq
V
V
F
F
V
F
V
F
V
V
V
F
2 + 2 = 4.
2 + 2 = 5.
2 + 2 = 4.
2 + 2 = 5.
Solamente (iv) es falso. Cada uno de los otros enunciados es verdadero ya que por lo menos uno de
sus subenunciados es verdadero.
Observacin: La palabra espaola o se usa comnmente de dos maneras. Algunas veces se usa
en el sentido de p o q o ambos, mejor dicho, por lo menos una de las dos alternativas ocurre, como
antes se seal y algunas veces se usa en el sentido de p o q pero no ambos, mejor dicho,
exactamente una de las dos alternativas ocurre. Por ejemplo, la frase El estudiara en la Universidad
Nacional o en la Universidad Catlica usa el o en el segundo sentido llamado disyuncin exclusiva.
A no ser que se diga otra cosa, la o se usara en el primer sentido. Esta observacin hace sobresalir
la precisin que ganamos con nuestro lenguaje simblico: p q esta definido por su tabla de verdad y
siempre significa p y / o q.
2.4 Negacin, ~ p
Dado cualquier enunciado p, se puede formar otro enunciado, llamado la negacin de p, escribiendo
Es falso que... antes de p o, si es posible insertando en p la palabra no. Simblicamente, ~ p,
denota la negacin de p (se lee no p).
16
~p
F
V
V
F
(d) 2 + 2= 5
(e) Es falso que 2 + 2=5.
(f ) 2 + 2 5.
Entonces (b) y (c) son cada una de la negacin de (a); y (e) y (f) son cada uno la negacin de (d. Ya
que (a) es verdadero, los enunciados (b) y (c) son falsos; y como (d) es falso, los enunciados (e) y (f)
son verdaderos.
Observacin: La notacin lgica para las conectivas y, o y no no es estndar. Por ejemplo,
algunos textos usan:
p & q. p . q o pq para p ^ q
p+q
para p q
p . p o p
para ~ p
V
V
F
F
V
F
V
F
~q
F
V
F
V
p^~q ~(p^~q)
F
V
F
F
V
F
V
V
17
V
V
F
F
V
F
V
F
~(p^~q)
V
F
V
V
q
V
F
V
F
(p
q)
Paso
Observe que la proposicin se escribe en la lnea superior a la derecha de sus variables, y que hay una
columna bajo cada variable o conectiva de la proposicin. Los valores de verdad se colocan entonces
en la tabla de verdad en varios pasos como sigue:
V
V
V
F
F
V
F
F
Paso
(p
V
V
F
F
1
q)
V
F
V
F
1
V
V
F
F
V
F
V
F
V
V
V
F
F
V
F
F
Paso
(c )
(p
Paso
(a)
q)
V
V
F
F
F
V
F
V
V
F
V
F
(b)
(p
q)
V
V
F
F
1
F
V
F
F
3
F
V
F
V
2
V
F
V
F
1
p
V
F
F
F
q
V
V
F
F
Paso
(d)
(p
q)
V
F
V
V
4
V
V
F
F
1
F
V
F
F
3
F
V
F
V
2
V
F
V
F
1
La tabla de verdad de la proposicin est formada, pues, por las columnas originales bajo las variables
y la ltima columna colocada en la tabla, mejor dicho, el ltimo paso.
2.6 Tautologas y Contradicciones
Algunas proposiciones P(p, q,) contienen solamente V en la ltima columna de sus tablas de verdad,
es decir, son verdaderas para cualquier valor de verdad de sus variables. A tales proposiciones se les
Informtica I. Versin 1.0 Agosto de 2004
18
p
V
F
~p p~p
F
V
V
F
V
V
~ p p ^~ p
F
V
F
F
Observemos que la negacin de una tautologa es una contradiccin ya que siempre es falsa, y la
negacin de una contradiccin es una tautologa ya que siempre es verdadera.
Ahora, sea P(p, q, ...) una tautologa, y sean P (p, q, ...), P (p,q,...),...proposiciones
cualesquiera. Como el valor de verdad de P(p,q,...) no depende de los valores de verdad particulares
de sus variables p, q, ... podemos reemplazar P , q por P , ...en la tautologa P(p, q, ) y tenemos
an una tautologa. En otras palabras:
Principio de substitucin: Si P (p, q, ...) es una tautologa, entonces P(P1, P2,...) es una
tautologa para proposiciones cualesquiera P1, P2,...
Ejemplo 5: Por la anterior tabla de verdad, p ~ p es una tautologa. Reemplazando p por q ^ r
obtenemos la proposicin ( q ^ r ) ~ ( q ^ r ) que, por el principio de substitucin tambin debiera
ser una tautologa.
Esto se verifica con la siguiente tabla de verdad.
q^r
V
V
F
F
V
F
V
F
V
F
F
F
~ (q^r)
(q^r) ~(q^r)
F
V
V
V
V
V
V
V
p^q ~ (p^q)
V
V
F
F
V
F
V
F
V
F
F
F
F
V
V
V
~p
~q
V
V
F
F
V
F
V
F
F
F
V
V
F
V
F
V
~p~q
F
V
V
V
Como las tables de verdad son las mismas, mejor dicho, ambas proposiciones son falsas en el primer
caso y verdaderas en los otros tres casos, las proposiciones ~ ( p ^ q) y ~ p ~ q son lgicamente
equivalentes y podemos escribir:
~ ( p^q) ~ p ~ q
Informtica I. Versin 1.0 Agosto de 2004
19
q
V
F
V
F
p q
V
F
V
V
p
V
V
F
F
q
V
F
V
F
pq
V
F
F
V
Leyes de idempotencia
p p p
1b. p ^ p p
1a.
Leyes Asociativas
2a
(p q) r p (q r)
2b. (p ^ q) ^ r p ^ ( q ^ r)
Leyes conmutativas
p q q p
3b. p ^ q q ^ p
3a
Leyes distributivas
p ( q ^ r) (p q) ^ (p r)
4b. p ^ (q r)
4a
(p ^ q) (p ^ r)
Leyes de identidad
5a
p f p
5b. p ^ t p
6a
p t t
6b. p ^ f f
Leyes de complementos
p ~ p t
7b. p ^ ~ p f
7a
8a ~ t f
8b. ~ f t
9
~ ~ pp
Ley de involucin
Leyes de DeMorgan
10a. ~ (p q) ~ p ^ ~ q 10b. ~ (p ^ q) ~ p ~ q
20
q
V
F
V
F
~p
F
F
V
V
~pq
V
F
V
V
p
V
V
F
F
q
V
F
V
F
pq
V
F
V
V
Recproca
q p
V
V
F
V
Inversa
~p~q
V
V
F
V
Contrarecproca
~q ~p
V
F
V
V
Observe que un enunciado condicional y su reciproco o inverso no son lgicamente equivalentes. Por
otra parte, se puede ver que un enunciado condicional y su contrarreciproco son lgicamente
equivalentes. Enunciamos este resultado formalmente:
Teorema 2.1: Un enunciado condicional p q y su contrarreciproca ~ q ~ p son lgicamente
equivalentes.
Ejemplo 7:
(a) Considere los siguientes enunciados sobre un triangulo A:
p q: Si A es equilatero, entonces A es isoseles.
q p: Si A es Isoseles, entonces A es equilatero.
En este caso p q es verdadero, pero su reciproco q p es falso.
(b) Sea x un entero. Demuestre: (p q). Si x es impar entonces x es impar.
Demostramos que la contrarreciproca ~ q ~ p, Si x es par, entonces x es par es
verdadera. Sea x par; entonces, x = 2n en donde n es un entero. Por lo tanto,
x = (2n)(2n) = 2(2n )
Informtica I. Versin 1.0 Agosto de 2004
21
pq
V V
V
V F
F
F V
V
F F
V
Ya que p es verdadero en los casos (lineas) 1 y 2, y p q es verdadero en los casos 1, 3 y 4; se sigue
que p y q q son verdaderos simultneamente en el caso 1. como en este caso q es verdadero, el
argumento es valido.
(b) El siguiente argumento es una falacia: p q, q + p. Ya que p q y q son ambos verdaderos en
el caso (linea) 3 en la anterior tabla de verdad, pero en este caso p es falso.
Ahora las proposiciones P1,P2,..., Pn son verdaderas simultneamente si y solo si la proposicion
(P1 ^ P2 ^...^ Pn) es verdadera. Asi el argumento P1,P2,..., Pn + Q es valido si y solo si Q es verdadero
cada vez que P1 ^ P2 ^...^ Pn sea verdadero o, equivalentemente, si y solo si la proposicion
(P1 ^ P2 ^...^ Pn) Q
Es una tautologia. Establecemos este resultado formalmente.
Teorema 2.2: El argumento P1,P2,..., Pn + Q es valido si y solo si (P1 ^ P2 ^...^ Pn) Q es una
tautologia.
En el siguiente ejemplo aplicamos este teorema.
Ejemplo 9: Un principio fundamental del racionamiento logico dice:
Si p implica q y q implica r, entonces p implica r
O sea, el siguiente argumento es valido:
Informtica I. Versin 1.0 Agosto de 2004
22
q
r [(p
q)
^
(q
r)]
(p
r)
V
V
V
V
V
V
V
V
V
V
V
V
V
V
F
V
V
V
F
V
F
F
V
V
F
F
F
V
V
F
F
F
F
V
V
V
V
V
V
F
F
V
F
F
F
F
V
F
V
V
F
F
V
V
F
V
V
V
V
V
V
V
F
V
V
V
F
F
V
V
F
V
F
F
V
F
V
F
F
V
F
V
F
V
F
V
V
V
F
V
V
F
F
F
V
F
V
F
V
F
V
F
V
F
Paso
1 2
1
3
1
2
1
4
1
2
1
Equivalentemente, el argumento es valido ya que las premisas p q y q r son verdaderas
simultneamente solo en los casos (lineas) 1, 5, 7 y 8, y en estos casos la conclusin p r tambien es
verdadera. (observe que la tabla de verdad requiere 2 = 8 lineas, ya que hay tres variables p, q y r.)
p
V
V
V
V
F
F
F
F
Es necesario destacar que la validez del argumento no depende de los valores de verdad o del
contenido de los enunciados que aparecen en el argumento, sino solamente de la estructura formal del
argumento. Esto se ilustra con el siguiente ejemplo.
Ejemplo 10: Considere el siguiente argumento:
S1: Si un hombre es soltero, es infeliz.
S2: Si un hombre es infeliz, muere joven.
.................................................................
S: Los solteros mueren jvenes.
En este caso el enunciado S debajo de la lnea denota la conclusin del argumento, y los enunciados
S1 y S2 por encima de la lnea denotan las premisas. Afirmamos que el argumento es de la forma
p q , q r + p r
Es donde p es El es soltero, q es El es infeliz y r es El muere joven; y por el ejemplo 4.9 este
argumento (Ley de silogismo) es vlido.
2.10 Implicacin Lgica.
Se dice que una proposicin P (p,q,...) implica lgicamente una proposicin Q (p,q,...), escrito
P (p,q,...) Q (p, q, ...)
Si Q (p, q, ...) es verdadera cada vez que P (p,q,...) sea verdadera.
Ejemplo 11: Afirmamos que P implica lgicamente p q. Considere las tablas de verdad de p y de
p q en la tabla de abajo. Observe que p es verdadera en los casos (lneas) 1 y 2, y en estos casos
p q tambin es verdadera. En otras palabras , p implica lgicamente p q.
23
p q p q
V V
V F
F V
F F
V
V
V
F
Ahora si Q (p, q, ...) es verdadera cada vez que P (p,q,...) sea verdadera, entonces el argumento
P (p,q,...) + Q (p, q, ...)
es vlido, y recprocamente. An ms, el argumento P + Q es vlido si y solo si el enunciado
condicional P Q es siempre verdadero, o sea, si es una tautologa. Establecemos este resultado
formalmente.
Teorema 3: Para proposiciones cualesquiera P (p,q,...) y Q (p, q, ...) los tres enunciados siguientes
son equivalentes:
(i)
(ii)
(iii)
(2) p ^ q,
(3) p q,
(4) q ~p,
(5) ~p ^ ~q,
(6) ~ ~ q
(3) ~ (~p q)
(4) ~p ^ ~q
(5) p (~p ^ q)
(6) ~ (~ p ~q)
24
q
V
F
V
F
p
V
V
F
F
Paso
2
Mtodo 2
Mtodo 1
~
F
F
V
V
q
~p
V
F
F
F
V
V
F
V
1
3
p
^
V
F
V
F
F
V
F
F
~p^q
F
F
V
F
1
q
V
F
V
F
q
V
F
V
F
p
V
V
F
F
p q ~ (p q)
V
F
V
F
V
F
F
V
q
V
F
V
F
Paso
Mtodo 1
~
F
F
F
V
(p
V
V
F
F
q)
V
F
V
F
V
V
V
F
3 1
2
Mtodo 2
~ q p ~ q ~ (p ~ q)
F
V
F
V
V
F
F
F
V
V
V
F
Mtodo1
p
q
V V
V F
F V
F F
Paso
Mtodo 2
~ (p ~ q)
F V V
F V V
V F F
F F V
4 1 3
F
V
F
V
2
V
F
V
F
1
q
V
F
V
F
p^ q
V
F
F
F
~ (p ^ q)
F
V
V
V
p ~ (p ^ q)
V
V
V
V
25
p ^ q p q ~ (p q)
V
V
F
F
V
F
F
V
F
F
F
V
(p ^ q) ^ ~ (p q)
F
F
F
F
q
V
V
F
F
V
V
F
F
r q^r
V
V
F
F
V
F
F
F
V
V
F
F
V
F
F
F
p (q ^ r)
V
V
V
V
V
F
F
F
pq p r
V
V
V
V
V
V
V
V
V
V
V
F
F
V
F
F
( p q) ^ (p r)
V
V
V
V
V
F
F
F
Como las tablas de verdad son idnticas, las proposiciones son equivalentes.
2.9 Demuestre que la operacin de disyuncin se puede escribir en trminos de las operaciones
conjuncin y negacin. Especficamente, p q ~ (~ p ^ ~ q).
Construya las tablas de verdad requeridas
p
V
V
F
F
q pq ~p ~q ~p^~q
V
V
F
F
F
F
V
F
V
F
V
V
V
F
F
F
F
V
V
V
~ (~ p ^ ~ q)
V
V
V
F
Como las tablas de verdad son idnticas, las proposiciones son equivalentes.
26
2.10 Simplifique cada proporcin usando la tabla 2-1: (a) p (p ^ q), (b) ~( p q) (~ p ^ q).
(a)
Equivalencia
(1) p (p ^ q) (p ^ t) (p ^ q)
(2)
p ^ ( t q)
(3)
p^t
p
(4)
(1)
(2)
(3)
(4)
Razn
Ley de Identidad
Ley distributiva
Ley de Identidad
Ley de Identidad
(b)
Equivalencia
(1) ~ (p q) (~ p ^ q) (~ p ^ ~ q) (~ p ^ q)
(2)
~ p ^ (~ p q)
(3)
~p^t
(4)
~p
Razn
(1) Ley de DeMorgan
(2) Ley distributiva
(3) Ley de complemento
(4) Ley de Identidad
Negacin.
2.11 Demuestre las leyes de DeMorgan: (a) ~( p ^ q) ~ p ~ q; (b) ~( p q) ~ p ^ ~ q.
En cada caso construya las tablas de verdad requeridas.
(a)
p q p ^ q ~ (p ^ q) ~ p ~ q ~ p ~ q
V V
V
F
F
F
F
V F
F
V
F
V
V
F V
F
V
V
F
V
F F
F
V
V
V
V
(b)
p
V
V
F
F
2.12
q p q
V
V
F
V
V
V
F
F
~( p q)
F
F
F
V
~p ~q ~p^~q
F
F
F
F
V
F
V
F
F
V
V
V
Verifique ~ ~ p p
p
V
F
~q ~~p
F
V
V
F
2.13 Use los resultados de los problemas 2.11 y 2.12 para simplificar los siguientes enunciados.
(a)
(b)
(c)
(d)
27
(a) Sea p Su madre es inglesa y sea q Su padre es Francs. Entonces el enunciado dado es
~ ( p q ). Pero ~ ( p q ) ~ p ^ ~ q. Por lo tanto, el enunciado dado es lgicamente
equivalente con el enunciado Su madre no es inglesa y su padre no es francs.
(b) Sea p El estudia fisica y q El estudia matemticas. Entonces el enunciado dado es
~ ( p ^ ~ q).pero ~ (p ^ ~ q) ~ p ~ ~ q ~ p q. As que el enunciado dado es lgicamente
equivalente al enunciado El no estudia fisica o estudia matemticas.
(c) Como ~ (p ^ q) ~ p ~ q, el enunciado dado es lgicamente equivalente al enunciado Las
ventas estan subiendo o los precios estan bajando.
(d) Como ~ (~ p q) p ^ ~ q, el enunciado dado es lgicamente equivalente al enunciado Esta
haciendo fri y no esta lloviendo.
Condicionales y Bicondicionales.
2.14 Escriba de nuevo los siguientes enunciados sin usar la condicional.
(a) Si hace fri, l se pone sombrero.
(b) Si la productividad sube, los sueldos suben.
Recuerde que Si p entonces q es equivalente con No p o q; o sea, p q ~ p q.
(a) No est haciendo fro o l se pone el sombrero.
(b) La productividad no sube o los sueldos suben.
2.15 (a) Demuestre que p implica q y q implica p es lgicamente equivalente con la bicondicional
p si y slo si q; o sea, (p q) ^ ( q p) p q
(c) Demuestre que la bicondicional p q se puede escribir en trminos de las tres conectivas
originales , ^ y ~.
(a)
p
V
V
F
F
q
V
F
V
F
pq
V
F
F
V
pq
V
F
V
V
q p
V
V
F
V
(p q) ^ ( q p)
V
F
F
V
28
29
Abstraccin
30
Encapsulamiento
Modularidad
Jerarqua
Igualmente incluye otros elementos que, sin ser esenciales, resultan bastante tiles dentro de este
estilo de programacin:
Tipos
Concurrencia
31
particin de un programa es til por esto, una justificacin ms poderosa para partir un programa es
que l sea un nmero de lmites bien definidos y documentados. Estos lmites o interfaces son
invaluables en la comprensin del programa".
La modularidad es bsicamente la divisin en partes de un programa de software (para nuestro caso),
considerando que estos mdulos deben mantener la cohesin y el acoplamiento adecuado.
Actividad #3: Normalmente las cosas que nosotros empleamos se encuentran compuestas de partes
(al menos eso dice la Teora General de Sistemas). Intenta determinar las partes que componen: una
bicicleta, un computador, una casa.
3.4.1.4 Jerarqua
La jerarqua se puede entender como la clasificacin u ordenamiento de las abstracciones, esto
permite asociar unos objetos con otros.
Existen dos clases bsicas de jerarquas (o clasificaciones), la que corresponde a es parte de, llamada
tambin jerarqua de partes. Por ejemplo, el manubrio es parte de la bicicleta, o la RAM es parte del
computador. La otra jerarqua es la que corresponde a es un, llamada tambin jerarqua de tipos. Por
ejemplo, La vaca es un mamfero, la silla es un mueble.
Actividad #4: Intente establecer la jerarqua entre estos elementos:
Impresora, Bandeja, Epson Stylus, Cartucho, Impresora de Burbuja, Impresora Laser, Toner, Panel de
Mando, Conector, HP LaserJet.
Motor, Puerta, Mazda 323, Daewo Lanus, Automvil, Llantas, Bujas, Tanque de Gasolina.
3.4.1.5 Tipos
Los tipos son la representacin de las jerarquas de tipos. Cuando varios elementos se agrupan de
acuerdo a ciertas caractersticas especficas que ellos guardan en comn, se dice que corresponden a
un mismo tipo.
Los tipos, definidos por Booch, son "la parte fundamental de la clase de un objeto, de forma que los
objetos de tipos diferentes no pueden ser intercambiados, o a lo ms pueden ser intercambiados slo
en forma muy restringida".
Actividad #5: Es normal que cada cosa que conocemos la caractericemos como perteneciente a un
tipo particular. En qu tipo caracterizara usted los siguientes objetos: casa, computador, vaca, perro,
silla, cuaderno, libro, universidad.
3.4.1.6 Concurrencia
Normalmente los objetos deben realizar tareas simultneas, sin que unas afecten a otras. A estos
requerimientos de ejecucin de varias tareas se les conoce como concurrencia.
Booch la define como "La propiedad que distingue un objeto activo de uno que no est activo",
entendiendo un objeto activo como una abstraccin del mundo real que puede representar un hilo de
control separado (una ruta diferente de ejecucin).
Actividad #6: Muchos de los sistemas (computacionales o no) que encontramos en la vida diaria
pueden realizar procesos concurrentes (varias cosas al tiempo), intente clasificar los siguientes
sistemas como concurrentes o no: un computador con windows, un computador con linux, una
persona, un cajero electrnico, una mquina de hacer caf, un microondas.
Informtica I. Versin 1.0 Agosto de 2004
32
3.4.2.2 Atributos
Los atributos de una clase (y por ende, de un objetos) son las caractersticas relevantes de esta. Como
se puede suponer, los atributos de la clase se determinan de acuerdo al problema o situacin que se
desea tratar; es decir, dependen de la abstraccin que se haga del objeto.
Por ser los objetos instancias de las clases, contienen todos los atributos de stas.
Por ejemplo:
La clase silla: tiene como atributos la clase, el nmero de patas, el tipo de tapizado, el estilo, el
material, la fecha en que fue fabricada.
La clase carro: tiene como atributos el nmero de puertas, la marca, el modelo, el precio.
3.4.2.3 Operaciones, mtodos y servicios
Las clases, adems de atributos, contienen los procedimientos que pueden manipular o procesar estos
datos. A estos procedimientos se les conoce como operaciones, mtodos o servicios.
Estos mtodos exhiben el comportamiento posible del objeto. Este comportamiento ocasionar que el
objeto mismo cambie de un estado a otro.
Por ejemplo:
La clase auto: tiene como mtodos o servicios, arrancar, parar, frenar, aumentar velocidad,
disminuir velocidad.
La clase computador: tiene como mtodos o servicios, encender, iniciar, arrancar programa.
33
3.4.2.4 Identidad
Los objetos deben ser creados y durante su creacin deben recibir un nombre y una asignacin de
espacio en memoria. En este sentido, los objetos, a diferencia de las clases, existen dentro del
computador por un tiempo que determinar el programador.
3.4.2.5 Ciclo de Vida
Como se dijo anteriormente, los objetos cambian de estado dependiendo del comportamiento que
desarrollen. A todos estos cambios de estado por los que pasa (o puede pasar) un objeto desde que es
creado hasta que muere, se le denomina ciclo de vida.
Actividad #7: Establezca atributos y mtodos para cada uno de los conceptos mencionados a
continuacin, y especifique si son clases u objetos. Si es un objeto, indique a qu clase pertenecera:
rbol, manzana, casa, Corporacin Universitaria Autnoma de Occidente, Secretara de Gobierno,
Amigo, Estudiante, Perro, Ferrari.
3.4.2.6 Relaciones con otros objetos
Los objetos han sido determinados como partes de la solucin de un problema y ello implica que
tengan que relacionarse para cumplir su cometido. Las relaciones entre los objetos pueden ser de
muchas clases:
Mensajes
Los mensajes activan las operaciones y mtodos de cada objeto. Un objeto enva a otro un mensaje, en
el cual se indica el destino, la operacin requerida y los parmetros que debe incluir.
Los mensajes son el corazn del comportamiento del sistema, ya que le indica a los objetos
comunicarse entre ellos para ejecutar sus operaciones.
Normalmente la clase de relaciones que se establecen a travs de los mensajes se les denomina
relaciones de uso, ya que un objeto usa a otro.
Herencia
Las clases pueden heredar de otras clases sus atributos y mtodos. La herencia responde a la necesidad
de hacer clases nuevas que contienen caractersticas similares (o iguales) a las de otra clase ya
existente.
Parte (mucho) del arte de programar orientado a objetos es determinar la mejor forma de estructurar el
programa economizando clases. Conviene aclarar que al emplear herencia, se reduce el nmero de
lneas a implementar.
Algunos lenguajes como Java resultan ser muy estrictos en trminos de herencia, ya que todas las
clases deben heredar de alguna. por lo anterior, JAVA tiene una "superclase" llamada Object, de la
cual se derivan todas las restantes.
Cuando una clase hereda de otra, puede variar los atributos y mtodos que ha heredado, logrando su
propia identidad respecto a la clase de la cual se origin.
Algunos Lenguajes Orientados a Objetos, permiten que una clase hereda de dos o ms, lo cual se
conoce como herencia mltiple.
Del concepto de herencia, se deriva el concepto de jerarqua de clases, que presenta esquemticamente
la herencia entre las clases.
34
Agregacin
Cuando un objeto o clase se encuentra compuesta por otros, se dice que existe una relacin de
agregacin entre ellos.
Actividad #8: Indique que clase de relacin existe entre cada conjunto de elementos (considerando
que todos son objetos y que guardan alguna relacin).
Procesador, memoria, unidad de disco, diskette, computador, usuario.
Casa, sala, Edificacin, Biblioteca pblica, sillas, mesas, mesa de comedor.
Polimorfismo
El Polimorfismo es una caracterstica propia de los objetos, que permite que operaciones diferentes
posean el mismo nombre
Sobrecarga
La sobrecarga es una clase de polimorfismo, en la cual los mtodos se diferencian bsicamente por la
clase de parmetros que reciben. Al recibir el mensaje el objeto, mediante los parmetros identifica
automticamente la operacin que se desea ejecutar; esto se conoce como sobrecarga de mtodos. Por
ejemplo: imprimir(factura), imprimir(reporte), imprimir(paz y salvo); aunque la funcin (mtodo) es
la misma, dependiendo el tipo de argumento que recibe se realizarn diferentes labores.
Algunos lenguajes, como C++, permiten adems lo que se llama sobrecarga de operadores (operator
overloading) gracias a la cual se pueden redefinir los operadores aritmticos bsicos ( +, - , * , / ). Por
ejemplo: 3 + 5 sumar enteros, mientras "Hola" + " amigos", concatenar cadenas.
Sobreescritura
35
Ejercicios
1. Indique si cada uno de los enunciado presentados a continuacin es verdadero o falso y justifique
su respuesta:
a. Al programar orientado a objetos, lo que se definen son clases.
b. Debido al encapsulamiento, los mtodos de un objeto no pueden ser usados por otro.
c. La programacin orientada a objetos facilita la reutilizacin de cdigo.
d. La relacin de herencia indica que un objeto es parte de otro.
e. Un objeto slo puede pertenecer a una clase.
f. El polimorfismo permite que varios mtodos tengan igual nombre.
g. La programacin espagueti se puede considerar modular.
h. La programacin procedural admite la herencia.
i. Los mtodos de una clase se implementan siguiendo las directrices de la programacin
estructurada
j. La herencia especifica que una clase posee los mismos mtodos y atributos de la clase de la
cual hereda.
k. Auto es una instanciacin de Medio de Transporte.
l. Pedro es un objeto de la clase Persona.
m. Pedro es una clase.
n. Atributos de auto son rojo, grande y mazda.
o. Mtodos de Telfono son establecer comunicacin y timbrar.
p. Manzano hereda de rbol.
q. Manzana hereda de Manzano.
r. Tablero es parte de Profesor.
s. Otoo es una clase de Estacin.
t. Windows hereda de Sistemas Operativos.
2. Complete las siguientes frases con la palabra adecuada
a.
La sobrecarga es la implementacin de _____________________________________.
b.
Un objeto es una _________________de una clase.
c.
La programacin __________________________________se basa en partes, cada una con
caractersticas y funciones especficas.
d.
Cuando una clase redefine un mtodo con la misma signatura que tena en la clase de la
cual hered se denomina __________________.
e.
La herencia puede ser _________________________o mltiple.
f.
Las caractersticas esenciales que distinguen a un objeto se conocen como
____________________del objeto.
g.
La primera tcnica formal de programacin conocida fue la programacin
_______________________________________.
h.
Si un sistema puede realizar varias tareas al tiempo, se dice que tiene procesamiento
________________.
i.
Los __________ son estructuras de datos que dieron origen a los objetos.
j.
Memoria ___________________ de Computador.
k.
IBM NetVista es ____________________ de Computador.
l.
Fuente de Poder es ______________ de Computador.
m.
Maria Isabel ____________ de clase Estudiante
n.
La clase persona usa la clase _________________
o.
La clase perro _______________ la clase animal.
p.
Matemticas es un objeto de la clase _________________.
q.
_____________ es un objeto de clase pescado.
r.
Arroz con pollo ______________ comida.
Informtica I. Versin 1.0 Agosto de 2004
36
Muchos lenguajes tienen como caracterstica ser orientado a objetos, lo cual implica que permitan
crear clases, manejar herencia y mantener el encapsulamiento. No obstante, existen dos clases de
lenguajes orientados a objetos:
aquellos que permiten las caractersticas del manejo de objetos, pero tambin mantienen
caractersticas de otros estilos de programacin (v.g. programacin procedimental); a estos lenguajes
se les conoce normalmente como hbridos. Un ejemplo clsico de este tipo de lengujes es el C++ que,
adems de soportar el manejo de objetos, tambin permite la escritura de cdigo propio de C.
Informtica I. Versin 1.0 Agosto de 2004
37
La otra clase de lenguajes son los denominados puros, tal como Java o Smalltalk, en donde slo se
pueden manejar clases y objetos. Por lo tanto, cualquier fragmento de cdigo que se quisiera escribir
debe formar parte de una clase.
Simple
Una preocupacin de SUN es mantener el lenguaje simple. Desde su comienzo, las instrucciones
propuestas, similares al C, tienen por objeto facilitar al programador su comprensin, incluso con
estndares muy sencillos como que las clases se escriben iniciando en mayscula y los objetos con
minsculas.
Con miras a esto, se quitaron algunos aspectos que C++ maneja; tales como sobrecarga de operadores,
herencia mltiple y apuntadores; por considerar que no aportaban de manera significativa en relacin
con la complejidad que revestan y se adicionaron otros aspectos para facilitar la vida del
programador, tal como el colector de basura.
Distribuido
Java ha sido diseado para interactuar de manera sencilla con el conjunto de protocolos TCP / IP
(manejados en Internet), de manera que las aplicaciones de Java puedan abrir y acceder a objetos a
travs de URLs de manera tan sencilla como si estuvieran en la misma mquina.
Robusto
Seguro
Una de las intenciones de Java es que ste sea empleado en entornos de red y distribuidos, pero se
debe tener conciencia de la importancia de la seguridad en ambientes de este estilo. Por ello, el
lenguaje mismo provee mecanismos apropiados para evitar la construccin de virus o trampas.
Tambin tiene mecanismos de autenticacin basados en encriptamiento de llaves (SSL).
Arquitectura Neutral
Para que las aplicaciones que se hacen en java puedan efectivamente viajar a travs de la red, el
lenguaje debe proveer mecanismos que permitan ejecutar el software en cualquier sistema,
independiente de su plataforma; por ello, Java provee una archivo en un formato de arquitectura
neutra que puede ser ejecutado en diferentes procesadores con la ayuda del adecuado sistema de
ejecucin de java.
Portable
La arquitectura neutra es la base para la portabilidad, pero para lograr que el software sea portable se
requiere mucho ms. Por ejemplo, el manejo de los diferentes tipos de datos y las interfaces grficas
deben ser independientes de la plataforma en que se ejecutan.
El sistema Java mismo es altamente portable, el compilador est escrito en JAVA y el runtime
(ejecutador) est escrito en ANSI C.
Interpretado
El interpretador de Java puede ejecutar directamente los bytecodes (cdigo de bytes, generado
despus de la compilacin) directamente en la mquina en la cual se encuentra instalado. Muchas
Informtica I. Versin 1.0 Agosto de 2004
38
personas han visto esta caracterstica como una desventaja de Java, debido a que el proceso de enlace
(link, p. ej. en C / C ++) es mucho ms rpido y liviano. Sin embargo, debe reconocerse que la
interpretacin ayuda en los procesos de depuracin.
Alto desempeo
Multihilos
Multihilo es es la forma de construir aplicaciones de manera que puedan realizar varias actividades
(hilos) al mismo tiempo. Java tiene primitivas bsicas que permiten monitorear y usar los hilos; esto
logra una mejor interaccin y un comportamiento de tiempo real (limitado slo por la mquina en la
cual est corriendo).
Dinmico
Java fue diseado para adaptarse a un entorno cambiante. El hecho de manejar objetos permite que los
cambios que se requieran en un software determinado no afecten de manera significativa los procesos
existentes.
Ver mas en www.java.sun.com/docs/white/langenv/
Actividad #9: Tome dos de las caractersticas bsicas de JAVA, investigue ms al respecto indicando
en qu consisten exactamente y qu otros lenguajes de programacin tienen estas caractersticas (una
u otra).
3.5.3 La estructura de JAVA
Compilado o Interpretado?
Una de las primeras inquietudes que surgen cuando se empieza a interactuar con Java es si realmente
es un lenguaje compilado o interpretado; la respuesta es sencilla: los dos.
La forma de operar de Java es un tanto diferente a la forma en que operan otros lenguajes ms
tradicionales y esto es, justamente, lo que permite que los programas desarrollados en Java puedan
emplearse en diferentes plataformas.
El siguiente grfico, presenta la forma como se debera procesar un programa en Java.
Como se puede observar, el programa fuente (myProgram.java) debe ser compilado para crear el
programa en bytecode (myProgram.class), el cual puede ser ejecutado en cualquier plataforma, ya que
Informtica I. Versin 1.0 Agosto de 2004
39
la mquina que lo ejecutar en particular tiene su intepretador (diferente para cada mquina) que lee,
interpreta y ejecuta cada una de las instrucciones que encuentra en el bytecode.
Plataforma de Java
Como plataforma se conoce al entorno Hardware Software en el cual se ejecuta un programa.
Normalmente se asocia con el sistema operativo y la mquina sobre la que este corre; as, se tienen
como plataformas: Windows (en cada una de sus formas), MacOS, Linux, Unx, Solaris, etc.
La plataforma de Java se compone de dos elementos bsicos: Java Application Programming Interface
(Java API) y la Java Virtual Machine (JVM). Su ubicacin se presenta en el siguiente grfico.
Plataforma de Java (Fuente: Java Tutorial)
El Java Virtual Machine es el intrprete de Java. Como se dijo anteriormente, existen un JVM
para cada plataforma y es el que permite que un programa sea escrito una vez y ejecutado en
varias plataformas sin requerir cambios.
La API de Java o Interface de Programas de Aplicacin es una coleccin de componentes de
software que provee diferentes utilidades para el programador, tal como la interfaz grfica de
usuario (GUI). La API se encuentra organizada en libreras que contienen clases o interfaces,
conocidas como paquetes (packages). El siguiente grfico muestra lo que incluye el Java 2
SDK (Standard Developer Kit).
El JRE o Java 2 Runtime Environment es: la mquina virtual, la plataforma de clases y los archivos
de soporte. El SDK (Standard Developer Kit) incluye el JRE y las herramientas de desarrollo como
compiladores y depuradores.
3.5.4 Instalacin de JAVA
Java pertenece al software de dominio libre, es decir que cualquier persona puede entrar al sitio de
Internet y bajarlo sin pagar ningn costo.
Para iniciar la instalacin de Java, entre al sitio http://java.sun.com/downloads y escoja la
versin apropiada de JDK acorde a su plataforma.
Informtica I. Versin 1.0 Agosto de 2004
40
Ahora puede empezar a utilizar su JDK y hacer sus primeros programas en Java.
Una ltima recomendacin, las instrucciones que se manejarn para la compilacin y ejecucin se
digitan desde el DOS, por lo que puede ser til revisar algunas instrucciones bsicas de este
antiguo Sistema Operativo. No obstante, se sugiere un editor gratuito de la empresa Xinox
software: JCreator 3.0, el cual puede descargar del sitio web http://www.jcreator.com
3.6 Construccin Bsica de una Aplicacin
Un programa desarrollado en JAVA pasa por cinco fases para poder ejecutarse: Edicin, Compilacin,
Carga, Verificacin, Ejecucin.
Edicin
La edicin de un archivo corresponde a la escritura del cdigo fuente. Dentro del Kit original de
JAVA no se incluye un editor, por lo que el programador deber proveerse de uno. Para el propsito
sirve cualquiera. Tomando en consideracin que el texto debe ser plano, se recomienda Edit en Dos,
NotePad en Windows o vi en Unix. De nuevo, se sugiere el editor gratuito de la empresa Xinox
software: JCreator 3.0, el cual puede descargar del sitio web http://www.jcreator.com
Debe tenerse en cuenta que los programas de cdigo fuente en JAVA deben tener la extensin .java.
Edicin
Disco
Compilacin
La compilacin es el proceso por el cual el cdigo fuente es traducido a un cdigo de bytes (bytecode)
que ser interpretado durante la etapa de ejecucin. Esta operacin se realiza mediante el comando
javac, el cual revisa la sintaxis y semntica del programa fuente escrito y, si todo es correcto, crear
un programa con el mismo nombre del programa fuente y la extensin .class1.
Compilacin
Disco
Carga
Para que una aplicacin pueda ejecutarse, debe ser cargada, , subida a memoria. Lo mismo ocurre
con las aplicaciones de JAVA. El comando java se encargar, en primera instancia, de esta labor
aunque tambin realiza la verificacin y la ejecucin.
Como se ver posteriormente, puede ocurrir que un archivo .java d origen a varios archivos .class
41
Carga
Disco
Se carga el programa a
memoria
Memoria
Verificacin
En esta etapa se determina si la aplicacin que se desea ejecutar tiene o no errores, principalmente de
seguridad. Esto es muy importante, considerando que las aplicaciones comnmente son enviadas a
travs de Internet.
Verificacin
Memoria
Se verifican que el
bytecode sea vlido y
aspectos de seguridad
Ejecucin
Finalmente, cubiertos todos los pasos, se interpretan las instrucciones del cdigo de bytes,
traducindolos a instrucciones que la mquina pueda realizar (lenguaje de mquina).
Interprte
Memoria
Observe que:
Todo programa en JAVA debe contener al menos una clase.
El archivo del cdigo fuente debe tener el mismo nombre de la clase principal de la aplicacin. En
este caso: Bienvenida1.java
El JAVA es sensible al uso de Maysuculas, as que Bienvenida1 y bienvenida1 son dos cosas
diferentes.
Toda aplicacin debe contener, en su clase principal, un mtodo de nombre main( ), con la
signatura ( firma) presentada.
Informtica I. Versin 1.0 Agosto de 2004
42
El siguiente paso es la compilacin. Para ello, desde la ventana del DOS, ubique el directorio donde
guard su archivo con cdigo fuente y digite javac Bienvenida1.java
Si el programa ha generado algn error, revise, corrija y repita la compilacin hasta que no genere
errores y quede creado un archivo Bienvenida1.class en su carpeta.
Los pasos de cargar, verificar y ejecutar se realizar con una sola instruccin: java.
Para ejecutar el programa anterior, digite java Bienvenida1 (no debe incluirse la extensin).
Ahora podr ver la ejecucin del programa en la ventana de DOS.
Observe que:
Todo applet de JAVA debe contener al menos una clase.
El archivo del cdigo fuente debe tener el mismo nombre de la clase principal del applet, en este
caso Ejemplo1.java.
El JAVA es sensible al uso de Maysculas, as que Ejemplo1 y ejemplo1 son dos cosas diferentes.
Los applets requieren de las libreras correspondientes. Para este caso se incluye la librera
javax.swing y la librera java.awt. Dentro de la primera librera se ha escogido una clase
especfica: JApplet. Dentro de la ltima librera se ha escogido una clase especfica: Graphics.
Los JApplets requieren un mtodo llamado paint( )
Como se dijo anteriormente, para ejecutar un applet debe disponerse de una pgina WEB.
El cdigo de las pginas web est escrito en HTML (Hypertext Markup Language).
Un cdigo apropiado para el programa anterior sera:
<html>
<applet code = "Ejemplo1.class" width = 275 height = 35>
</applet>
</html>
El nombre del archivo puede ser cualquiera con extensin .html. Lo recomendable sera que tuviera el
mismo nombre del applet de JAVA.
Informtica I. Versin 1.0 Agosto de 2004
43
Observe que:
El cdigo HTML siempre inicia y termina con html.
Las terminaciones de las secciones siempre son la misma palabra de inicio con una diagonal (/)
antepuesta.
El ancho y alto especificado para el applet corresponden al tamao de la ventana donde se
ejecutar el applet.
La compilacin para un applet es igual que para una aplicacin; es decir, desde la ventana de DOS
ubique el directorio donde guardo su archivo con cdigo fuente y digite javac Ejemplo1.java
Una vez se disponga del programa .html y el .class (en el mismo directorio), hay dos formas de
correrlo:
1) En un Browser (Netscape, Explorer, etc.) abra el archivo .html que cre, esto activar la carga,
verficacin y ejecucin del applet. Debido a que el applet est trabajando con swing (un
manejador de GUI relativamente nuevo en Java) algunos manejadores no lo soportan, por lo que
es comn que no pueda verse nada en el browser.
2) Empleando el appletviewer que posee el JDK. Para ello basta digitar desde la ventana de DOS
appletviewer Ejemplo1.html (suponiendo que su archivo de html se llama Ejemplo1). El Java se
encarga de crear un ambiente simulador de browser donde usted puede observar la ejecucin de su
applet sin problema.
Salida:
44
Salida:
Ejercicios
Indique si las siguientes proposiciones son verdaderas o falsas, justifique su respuesta.
a.- Java es un lenguaje orientado a objetos hbrido.
b.- La API y la JVM se incluyen en el SDK.
c.- Existen una nica JVM para todas las plataformas.
d.- La compilacin, carga y verificacin de un programa escrito en Java, se realizan en un solo
paso.
e.- El compilador de Java fue desarrollado en C.
f.- Java es una versin actualizada de C++.
g.- Se dice que Java es robusto porque permite al usuario depurar el cdigo fcilmente.
h.- Java se considera porttil porque una vez escrito y compilado el programa puede ejecutarse en
cualquier plataforma.
i.- Los applets son aplicaciones pequeas que corren a travs de un browser.
j.- Java es sensible a maysculas.
3.7 Salida de datos estndar
// Ejemplo 1 Esta aplicacin Java muestra un mensaje de Bienvenida
// en la salida estandar (pantalla), consola Java:
class SalidaBasica1 {
public static void main( String args[ ] ) {
System.out.println( "Bienvenido al curso de Algoritmos con Java 2" ) ;
}
}
// Fin de la clase SalidaBasica1
Salida:
45
class EntradaBasica1 {
public static void main( String args[ ] ) throws IOException {
/* Note que antes de la llave de apertura del mtodo main( ), se
debe escribir 'throws IOException' para evitar mensajes
relacionados con el manejo de errores y que impiden la
correcta compilacin del programa. */
InputStreamReader isr = new InputStreamReader( System.in ) ;
BufferedReader br = new BufferedReader( isr ) ;
/* Las 2 lneas anteriores habilitan la entrada de datos desde el
teclado. El proceso le puede parecer confuso, pero es necesario que
se vaya familiarizando con l. La primer lnea subrayada crea un objeto, que hemos
denominado arbitrariamente isr, de la clase InputStreamReader.
Para crear el objeto isr, se le ha enviado al constructor de la
clase InputStreamReader el argumento System.in (teclado).
La segunda lnea subrayada crea un objeto, que hemos denominado arbitrariamente br,
de la clase BufferedReader. Para crear el objeto br, se le ha enviado al
constructor de la clase BufferedReader el argumento isr, el cual es el
objeto que se cre en la primer lnea subrayada.
El ltimo objeto creado, br, es el que nos sirve para invocar el mtodo
readLine( ) de la clase BufferedReader. El mtodo readLine( ) lee la
informacin digitada desde el teclado hasta pulsar la tecla Return
(o Enter, o Intro, etc) y la guarda como una cadena de caracteres (String).
*/
System.out.print( "Escriba su nombre y pulse RETURN: " ) ;
String cadena = br.readLine( ) ; // Guarde el nombre en la variable cadena
// Muestre en consola el nombre ingresado, concatenado con un mensaje:
System.out.println( "Hola " + cadena + ", bienvenido a Java 2" ) ;
}
}
// Fin de la clase EntradaBasica1
Salida:
46
// Ejemplo 2 Esta aplicacin Java muestra cmo ingresar una cadena de caracteres (String)
// desde el teclado.
import java.io.* ;
class EntradaBasica2 {
public static void main( String args[ ] ) throws IOException {
/* Note que antes de la llave de apertura del mtodo main( ), se
debe escribir 'throws IOException' para evitar mensajes
relacionados con el manejo de errores y que impiden la
correcta compilacin del programa. */
/* La lnea subrayada habilita la entrada de datos desde el teclado.
Ahora, se han escrito las instrucciones del proceso en una sola lnea.
Repasando lo mencionado en el ejemplo anterior (clase EntradaBasica1),
note de nuevo que para recibir los datos va teclado, debe crear un
objeto (que arbitrariamente hemos llamado br) de la clase BufferedReader.
Observe que al constructor de la clase BufferedReader se le enva como
argumento una nueva instancia (o sea, un objeto) de la clase InputStreamReader.
Para obtener esta nueva instancia de la clase InputStreamReader, se ha
enviado a su constructor la variable de clase 'in' de la clase System.
De nuevo, el objetivo principal es crear un objeto, br, que nos permita invocar
el mtodo readLine( ) de la clase BufferedReader.
El mtodo readLine( ) lee la informacin digitada desde el teclado hasta pulsar
la tecla Return (o Enter, o Intro, etc) y la guarda como una
cadena de caracteres (String).
*/
// Usted debe memorizar la siguiente lnea:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
String cadena ;
// Salga de la Aplicacin
47
import java.io.* ;
class EntradaBasica3 {
public static void main( String args[ ] ) throws IOException {
/* Note que antes de la llave de apertura del mtodo main( ), se
debe escribir 'throws IOException' para evitar mensajes
relacionados con el manejo de errores y que impiden la
correcta compilacin del programa. */
/* La lnea subrayada habilita la entrada de datos desde el teclado.
Una vez ms, el objetivo principal es crear un objeto, br, que nos permita invocar
el mtodo readLine( ) de la clase BufferedReader. */
// Usted debe memorizar la siguiente lnea:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
String cadena ; // Declara la variable cadena del tipo String (cadena de caracteres)
int entero ; // Declara la variable entero del tipo int (nmero entero)
System.out.print( "Digite un numero entero y pulse RETURN: " ) ;
cadena = br.readLine( ) ; // Lee el nmero como una cadena de caracteres, pues
//el mtodo readLine( ) lee la informacin digitada desde el teclado hasta pulsar
//la tecla Return (o Enter, o Intro, etc) y la guarda como una cadena de
//caracteres (String).
entero = Integer.parseInt( cadena ) ;//Convierte de String a entero (int),
//pues el mtodo parseInt( String ) de la clase Integer recibe un parmetro
//String y lo convierte a su equivalente numrico en formato entero (int).
// Muestre en consola el nmero ingresado, concatenado con un mensaje:
System.out.println( "Usted ha digitado el numero entero " + entero ) ;
System.exit( 0 ) ;
}
}
// Salga de la Aplicacin
Salida:
// Ejemplo 4 Esta aplicacin Java tambin muestra cmo ingresar un nmero entero
// desde el teclado, pero utiliza menos instrucciones.
import java.io.* ;
class EntradaBasica4 {
public static void main( String args[ ] ) throws IOException {
Informtica I. Versin 1.0 Agosto de 2004
48
// Salga de la Aplicacin
Salida:
/*
import java.io.* ;
class EntradaBasica5 {
public static void main( String args[ ] ) throws IOException {
/* La lnea subrayada habilita la entrada de datos desde el teclado.
Una vez ms, el objetivo principal es crear un objeto, br, que nos permita invocar
el mtodo readLine( ) de la clase BufferedReader. */
// Usted debe memorizar la siguiente lnea:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
int i ;
long j ;
short k ;
byte m ;
System.out.print( "Digite el primer numero entero y pulse RETURN: " ) ;
Informtica I. Versin 1.0 Agosto de 2004
49
i = Integer.parseInt( br.readLine( ) ) ;
System.out.print( "Digite el segundo numero entero y pulse RETURN: " ) ;
j = Long.parseLong( br.readLine( ) ) ;
System.out.print( "Digite el tercer numero entero y pulse RETURN: " ) ;
k = Short.parseShort( br.readLine( ) ) ;
System.out.print( "Digite el cuarto numero entero y pulse RETURN: " ) ;
m = Byte.parseByte( br.readLine( ) ) ;
// Muestre en consola los nmeros digitados:
System.out.println( "Primer numero entero: " + i ) ;
System.out.println( "Segundo numero entero: " + j ) ;
System.out.println( "Tercer numero entero: " + k ) ;
System.out.println( "Cuarto numero entero: " + m ) ;
System.exit( 0 ) ;
}
}
// Salga de la Aplicacin
Salida:
class EntradaBasica6 {
public static void main( String args[ ] ) throws IOException {
/* La lnea subrayada habilita la entrada de datos desde el teclado.
Una vez ms, el objetivo principal es crear un objeto, br, que nos permita invocar
el mtodo readLine( ) de la clase BufferedReader. */
// Usted debe memorizar la siguiente lnea:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
String cadena ; // Declara la variable cadena del tipo String (cadena de caracteres)
int entero ; // Declara la variable entero del tipo int (nmero entero)
Informtica I. Versin 1.0 Agosto de 2004
50
// Salga de la Aplicacin
Salida:
class EntradaBasica7 {
public static void main( String args[ ] ) throws IOException {
/* La lnea subrayada habilita la entrada de datos desde el teclado.
Una vez ms, el objetivo principal es crear un objeto, br, que nos permita invocar
el mtodo readLine( ) de la clase BufferedReader. */
// Usted debe memorizar la siguiente lnea:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
System.out.print( "Digite un numero entero y pulse RETURN: " ) ;
// Crea un objeto, i, de la clase Integer:
Integer i = new Integer( br.readLine( ) ) ; // la cadena String, retornada
// por el mtodo readLine( ) de la clase BufferedReader, se enva directamente al constructor
// de la clase Integer
int entero = i.intValue( ) ;
Informtica I. Versin 1.0 Agosto de 2004
51
// Salga de la Aplicacin
Salida:
class EntradaBasica8 {
public static void main( String args[ ] ) throws IOException {
/* La lnea subrayada habilita la entrada de datos desde el teclado.
Una vez ms, el objetivo principal es crear un objeto, br, que nos permita invocar
el mtodo readLine( ) de la clase BufferedReader. */
// Usted debe memorizar la siguiente lnea:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
System.out.print( "Digite el primer numero entero y pulse RETURN: " ) ;
// Crea un objeto, i, de la clase Integer:
Integer i = new Integer( br.readLine( ) ) ; // la cadena String, retornada
// por el mtodo readLine( ) de la clase BufferedReader, se enva al constructor
// de la clase Integer
int entero1 = i.intValue( ) ;
System.out.print( "Digite el segundo numero entero y pulse RETURN: " ) ;
// Crea un objeto, j, de la clase Long:
Long j = new Long( br.readLine( ) ) ; // la cadena String, retornada
// por el mtodo readLine( ) de la clase BufferedReader, se enva al constructor
// de la clase Long
long entero2 = j.longValue( ) ;
System.out.print( "Digite el tercer numero entero y pulse RETURN: " ) ;
// Crea un objeto, k, de la clase Short:
Short k = new Short( br.readLine( ) ) ;// la cadena String, retornada
// por el mtodo readLine( ) de la clase BufferedReader, se enva al constructor
// de la clase Short
short entero3 = k.shortValue( ) ;
Informtica I. Versin 1.0 Agosto de 2004
52
// Salga de la Aplicacin
Salida:
// Ejemplo 9 Esta aplicacin Java muestra cmo ingresar un nmero real (de punto flotante)
// desde el teclado.
import java.io.* ;
class EntradaBasica9 {
public static void main( String args[ ] ) throws IOException {
/* La lnea subrayada habilita la entrada de datos desde el teclado.
Una vez ms, el objetivo principal es crear un objeto, br, que nos permita invocar
el mtodo readLine( ) de la clase BufferedReader. */
// Usted debe memorizar la siguiente lnea:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
System.out.print( "Digite un numero real y pulse RETURN: " ) ;
double real = Double.parseDouble( br.readLine( ) ) ; /* Notar que podemos usar
directamente el mtodo readLine( ) [ llamado desde el objeto br ]
como argumento del mtodo parseDouble de la clase Double, reduciendo todo a una
sola instruccin.*/
Informtica I. Versin 1.0 Agosto de 2004
53
// Salga de la Aplicacin
Salida:
class EntradaBasica10 {
public static void main( String args[ ] ) throws IOException {
/* La lnea subrayada habilita la entrada de datos desde el teclado.
Una vez ms, el objetivo principal es crear un objeto, br, que nos permita invocar
el mtodo readLine( ) de la clase BufferedReader. */
// Usted debe memorizar la siguiente lnea:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
System.out.print( "Digite un numero real y pulse RETURN: " ) ;
float real = Float.parseFloat( br.readLine( ) ) ; /* Notar que podemos usar
directamente el mtodo readLine( ) [ llamado desde el objeto br ]
como argumento del mtodo parseFloat de la clase Float, reduciendo todo a una
sola instruccin.*/
// Muestre en consola el nmero ingresado, concatenado con un mensaje:
System.out.println( "Usted ha digitado el numero real " + real ) ;
System.exit( 0 ) ;
}
}
// Salga de la Aplicacin
Salida:
54
class EntradaBasica11 {
public static void main( String args[ ] ) throws IOException {
/* La lnea subrayada habilita la entrada de datos desde el teclado.
Una vez ms, el objetivo principal es crear un objeto, br, que nos permita invocar
el mtodo readLine( ) de la clase BufferedReader. */
// Usted debe memorizar la siguiente lnea:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
System.out.print( "Digite el primer numero real y pulse RETURN: " ) ;
// Crea un objeto, x, de la clase Double:
Double x = new Double( br.readLine( ) ) ; // la cadena String, retornada
// por el mtodo readLine( ) de la clase BufferedReader, se enva al constructor
// de la clase Double
double real1 = x.doubleValue( ) ;
System.out.print( "Digite el segundo numero real y pulse RETURN: " ) ;
// Crea un objeto, y, de la clase Float:
Float y = new Float( br.readLine( ) ) ; // la cadena String, retornada
// por el mtodo readLine( ) de la clase BufferedReader, se enva al constructor
// de la clase Float
float real2 = y.floatValue( ) ;
// Muestre en consola los nmeros ingresados:
System.out.println( "Primer numero real: " + real1 ) ;
System.out.println( "Segundo numero real: " + real2 ) ;
System.exit( 0 ) ;
}
}
// Salga de la Aplicacin
Salida:
55
Java surgi en 1991 cuando un grupo de ingenieros de Sun Microsystems trataron de disear un
Java es un lenguaje muy completo. En cierta forma casi todo depende de casi todo. Por ello,
conviene aprenderlo de modo iterativo: primero una visin muy general, que se va refinando en
Informtica I. Versin 1.0 Agosto de 2004
56
sucesivas iteraciones. Una forma de hacerlo es empezar con un ejemplo completo en el que ya
aparecen algunas de las caractersticas ms importantes.
La compaa Sun describe el lenguaje Java como simple, orientado a objetos, distribuido,
interpretado, robusto, seguro, de arquitectura neutra, portable, de altas prestaciones, multitarea y
dinmico. Adems de una serie de halagos por parte de Sun hacia su propia criatura, el hecho es
que todo ello describe bastante bien el lenguaje Java, aunque en algunas de esas caractersticas el
lenguaje sea todava bastante mejorable. Algunas de las anteriores ideas se irn explicando a lo largo
de este manual.
3.8.1 QU ES JAVA 2
Java 2 (antes llamado Java 1.2 o JDK 1.2) se le llama tambien a las ltimas versiones (Java 1.3,
Java 1.4 y Java 1.5) del lenguaje de programacin Java.
Los programas desarrollados en Java presentan diversas ventajas frente a los desarrollados en
otros lenguajes como C/C++. La ejecucin de programas en Java tiene muchas posibilidades:
ejecucin como aplicacin independiente (Stand-alone Application), ejecucin como applet, ejecucin
como servlet, etc. Un applet es una aplicacin especial que se ejecuta dentro de un navegador o
browser (por ejemplo Netscape Navigator o Internet Explorer) al cargar una pgina HTML desde un
servidor Web. El applet se descarga desde el servidor y no requiere instalacin en el computador
donde se encuentra el browser. Un servlet es una aplicacin sin interface grfica que se ejecuta en un
servidor de Internet. La ejecucin como aplicacin independiente es anloga a los programas
desarrollados con otros lenguajes.
Adems de incorporar la ejecucin como Applet, Java permite fcilmente el desarrollo tanto de
arquitecturas cliente-servidor como de aplicaciones distribuidas, consistentes en crear aplicaciones
capaces de conectarse a otros computadores y ejecutar tareas en varios computadores
simultneamente, repartiendo por lo tanto el trabajo. Aunque tambin otros lenguajes de
programacin permiten crear aplicaciones de este tipo, Java incorpora en su propio API estas
funcionalidades.
3.8.2 EL ENTORNO DE DESARROLLO DE JAVA
Existen distintos programas comerciales que permiten desarrollar cdigo Java. La compaa Sun,
creadora de Java, distribuye gratuitamente el Java(tm) Development Kit (JDK). Se trata de un
conjunto de programas y libreras que permiten desarrollar, compilar y ejecutar programas en Java.
Incorpora adems la posibilidad de ejecutar parcialmente el programa, deteniendo la ejecucin en el
punto deseado y estudiando en cada momento el valor de cada una de las variables (con el
denominado Debugger). Cualquier programador con un mnimo de experiencia sabe que una parte
muy importante (muchas veces la mayor parte) del tiempo destinado a la elaboracin de un programa
se destina a la deteccin y correccin de errores. Existe tambin una versin reducida del JDK,
denominada JRE (Java Runtime Environment) destinada nicamente a ejecutar cdigo Java (no
permite compilar).
Los IDEs (Integrated Development Environment), tal y como su nombre indica, son entornos de
desarrollo integrados. En un mismo programa es posible escribir el cdigo Java, compilarlo y
ejecutarlo sin tener que cambiar de aplicacin. Algunos incluyen una herramienta para realizar Debug
grficamente, frente a la versin que incorpora el JDK basada en la utilizacin de una consola
(denominada habitualmente ventana de comandos de MS-DOS, en Windows NT/95/98) bastante
difcil y pesada de utilizar. Estos entornos integrados permiten desarrollar las aplicaciones de forma
mucho ms rpida, incorporando en muchos casos libreras con componentes ya desarrollados, los
Informtica I. Versin 1.0 Agosto de 2004
57
cuales se incorporan al proyecto o programa. Como inconvenientes se pueden sealar algunos fallos
de compatibilidad entre plataformas, y archivos resultantes de mayor tamao que los basados en
clases estndar.
3.8.3 El compilador de Java
Se trata de una de las herramientas de desarrollo incluidas en el JDK. Realiza un anlisis de sintaxis
del cdigo escrito en los archivos fuente de Java (con extensin *.java). Si no encuentra errores en el
cdigo genera los archivos compilados (con ex tensin *.class). En otro caso muestra la lnea o lneas
errneas. En el JDK de Sun dicho compilador se llama javac.exe. Tiene numerosas opciones, algunas
de las cuales varan de una versin a otra. Se aconseja consultar la documentacin de la versin del
JDK utilizada para obtener una informacin detallada de las distintas posibilidades.
3.8.4 La Java Virtual Machine (JVM)
Tal y como se ha comentado al comienzo del captulo, la existencia de distintos tipos de procesadores
y computadores llev a los ingenieros de Sun a la conclusin de que era muy importante conseguir un
software que no dependiera del tipo de procesador utilizado. Se plante la necesidad de conseguir un
cdigo capaz de ejecutarse en cualquier tipo de mquina. Una vez compilado no debera ser necesaria
ninguna modificacin por el hecho de cambiar de procesador o de ejecutarlo en otra mquina. La
clave consisti en desarrollar un cdigo neutro el cual estuviera preparado para ser ejecutado sobre
una mquina hipottica o virtual, denominada Java Virtual Machine (JVM). Es esta JVM quien
interpreta este cdigo neutro convirtindolo a cdigo particular de la CPU utilizada. Se evita tener que
realizar un programa diferente para cada CPU o plataforma.
La JVM es el intrprete de Java. Ejecuta los bytecodes (archivos compilados con extensin
*.class) creados por el compilador de Java (javac.exe). Tiene numerosas opciones entre las que
destaca la posibilidad de utilizar el denominado JIT (Just-In-Time Compiler), que puede mejorar entre
10 y 20 veces la velocidad de ejecucin de un programa.
3.8.5 Las variables PATH y CLASSPATH
El desarrollo y ejecucin de aplicaciones en Java exige que las herramientas para compilar
(javac.exe) y ejecutar (java.exe) se encuentren accesibles. El computador, desde una ventana de
comandos de MS-DOS, slo es capaz de ejecutar los programas que se encuentran en los directorios
indicados en la variable PATH del computador (o en el directorio activo). Si se desea compilar o
ejecutar cdigo en Java, el directorio donde se encuentran estos programas (java.exe y javac.exe)
deber encontrarse en el PATH. Tecleando PATH en una ventana de comandos de MS-DOS se
muestran los nombres de directorios incluidos en dicha variable de entorno.
Java utiliza adems una nueva variable de entorno denominada CLASSPATH, la cual
determina dnde buscar tanto las clases o libreras de Java (el API de Java) como otras clases de
usuario. A partir de la versin 1.1.4 del JDK no es necesario indicar esta variable, salvo que se desee
aadir conjuntos de clases de usuario que no vengan con dicho JDK. La variable CLASSPATH
puede incluir la ruta de directorios o archivos *.zip o *.jar en los que se encuentren los archivos
*.class. En el caso de los archivos *.zip hay que observar que los archivos en l incluidos no deben
estar comprimidos. En el caso de archivos *.jar existe una herramienta (jar.exe), incorporada en el
JDK, que permite generar estos archivos a partir de los archivos compilados *.class. Los archivos
*.jar son archivos comprimidos y por lo tanto ocupan menos espacio que los archivos *.class por
separado o que el archivo *.zip equivalente.
Una forma general de indicar estas dos variables es crear un archivo batch de MS-DOS (*.bat)
donde se indiquen los valores de dichas variables. Cada vez que se abra una ventana de MS-DOS ser
Informtica I. Versin 1.0 Agosto de 2004
58
necesario ejecutar este archivo *.bat para asignar adecuadamente estos valores. Un posible archivo
llamado jdk117.bat, podra ser como sigue:
set JAVAPATH=C:\j2sdk1.4.1_01
set PATH=.;%JAVAPATH%\bin;%PATH%
set CLASSPATH=.\;%JAVAPATH%\lib\classes.zip;%CLASSPATH%
lo cual sera vlido en el caso de que el JDK estuviera situado en el directorio C:\jdk1.1.7.
Si no se desea tener que ejecutar este archivo cada vez que se abre una consola de MS-DOS es
necesario indicar estos cambios de forma permanente. La forma de hacerlo difiere entre Windows
95/98 y Windows NT. En Windows 95/98 es necesario modificar el archivo Autoexec.bat situado
en C:\, aadiendo las lneas antes mencionadas. Una vez rearrancado el computador estarn presentes
en cualquier consola de MS-DOS que se cree. La modificacin al archivo Autoexec.bat enWindows
95/98 ser la siguiente:
set JAVAPATH=C:\ j2sdk1.4.1_01
set PATH=.;%JAVAPATH%\bin;%PATH%
set CLASSPATH=
donde en la tercera lnea debe incluir la ruta de los archivos donde estn las clases de Java. En el caso
de utilizar Windows NT se aadir la variable PATH en el cuadro de dilogo que se abre con Start > Settings -> Control Panel -> System -> Environment -> User Variables for NombreUsuario.
Tambin es posible utilizar la opcin classpath en el momento de llamar al compilador
javac.exe o al intrprete java.exe. En este caso los archivos *.jar deben ponerse con el nombre
completo en el CLASSPATH: no basta poner el PATH o directorio en el que se encuentra. Por
ejemplo, si se desea compilar y ejecutar el archivo ContieneMain.java, y ste necesitara la librera de
clases G:\MyProject\OtherClasses.jar, adems de las incluidas en el CLASSPATH, la forma de
compilar y ejecutar sera:
Se aconseja consultar la ayuda correspondiente a la versin que se est utilizando, debido a que
ex isten pequeas variaciones entre las distintas versiones del JDK.
Cuando un archivo filename.java se compila y en ese directorio existe ya un archivo
filename.class, se comparan las fechas de los dos archivos. Si el archivo filename.java es ms
antiguo que el filename.class no se produce un nuevo archivo filename.class. Esto slo es vlido para
archivos *.class que se corresponden con una clase public.
3.8.6 NOMENCLATURA HABITUAL EN LA PROGRAMACIN EN JAVA
Los nombres de Java son sensibles a las letras maysculas y minsculas. As, las variables masa,
Masa y MASA son consideradas variables completamente diferentes. Las reglas del lenguaje respecto
a los nombres de variables son muy amplias y permiten mucha libertad al programador, pero es
habitual seguir ciertas normas que facilitan la lectura y el mantenimiento de los programas de
computador. Se recomienda seguir las siguientes instrucciones:
1. En Java es habitual utilizar nombres con minsculas, con las excepciones que se indican en los
puntos siguientes.
Informtica I. Versin 1.0 Agosto de 2004
59
2. Cuando un nombre consta de varias palabras es habitual poner una a continuacin de otra,
poniendo con mayscula la primera letra de la palabra que sigue a otra (Ejemplos: elMayor(),
VentanaCerrable, RectanguloGrafico, addWindowListener()).
3. Los nombres de clases e interfaces comienzan siempre por mayscula (Ejemplos: Geometria,
Rectangulo, Dibujable, Graphics, ArrayList, Iterator).
4. Los nombres de objetos, los nombres de mtodos y variables miembro, y los nombres de las
variables locales de los mtodos, comienzan siempre por minscula (Ejemplos: main(),
dibujar(), numRectangulos, x, y, r).
5. Los nombres de las variables finales, es decir de las constantes, se definen siempre con maysculas
(Ejemplo: PI)
3.8.7 ESTRUCTURA GENERAL DE UN PROGRAMA JAVA
60
En este captulo se presentan las caractersticas generales de Java como lenguaje de programacin
algortmico. En este apartado Java es muy similar a C/C++, lenguajes en los que est inspirado.
4.1 VARIABLES
Una variable es un nombre que contiene un valor que puede cambiar a lo largo del programa. De
acuerdo con el tipo de informacin que contienen, en Java hay dos tipos principales de variables:
1. Variables de tipos primitivos. Estn definidas mediante un valor nico que puede ser entero,
de punto flotante, carcter o booleano. Java permite distinta precicin y distintos rangos de
valores para estos tipos de variables (char, byte, short, int, long, float, double, boolean).
Ejemplos de variables de tipos primitivos podran ser: 123, 3456754, 3.1415, 12e-09, 'A',
true, etc.
2. Variables referencia. Las variables referencia son referencias o nombres de una informacin
ms compleja: arrays u objetos de una determinada clase.
Desde el punto de vista del papel o misin en el programa, las variables pueden ser:
1. Variables miembro de una clase: Se definen en una clase, fuera de cualquier mtodo; pueden
abstract
char
double
for
int
package
static
throws
boolean
class
else
goto*
interface
private
super
transient
break
const*
extends
if
long
protected
switch
try
byte
continue
final
implements
native
public
synchronized
void
case
default
finally
import
new
return
this
volatile
catch
do
float
instanceof
null
short
throw
while
(*) son palabras reservadas, pero no se utilizan en la actual implementacin del lenguaje Java.
61
4.1.2
Se llaman tipos primitivos de variables de Java a aquellas variables sencillas que contienen los tipos
de informacin ms habituales: valores boolean, caracteres y valores numricos enteros o de punto
flotante.
Java dispone de ocho tipos primitivos de variables: un tipo para almacenar valores true y false
(boolean); un tipo para almacenar caracteres (char), y 6 tipos para guardar valores numricos, cuatro
tipos para enteros (byte, short, int y long) y dos para valores reales de punto flotante (float y double).
Los rangos y la memoria que ocupa cada uno de estos tipos se muestran en la Tabla 4.1.
Tipo de variable
Descripcin
Boolean
Char
Byte
Short
Int
Long
Float
Double
62
primitivas se inicializan a cero (salvo boolean y char, que se inicializan a false y '\0').
Anlogamente las variables de tipo referencia son inicializadas por defecto a un valor especial: null.
Es importante distinguir entre la referencia a un objeto y el objeto mismo. Una referencia es una
variable que indica dnde est guardado un objeto en la memoria del computador (a diferencia de
C/C++, Java no permite acceder al valor de la direccin, pues en este lenguaje se han eliminado los
punteros). Al declarar una referencia todava no se encuentra apuntando a ningn objeto en
particular (salvo que se cree explcitamente un nuevo objeto en la declaracin), y por eso se le asigna
el valor null. Si se desea que esta referencia apunte a un nuevo objeto es necesario crear el objeto
utilizando el operador new. Este operador reserva en la memoria del computador espacio para ese
objeto (variables y funciones). Tambin es posible igualar la referencia declarada a otra referencia a
un objeto existente previamente.
Un tipo particular de referencias son los arrays o vectores, sean stos de variables primitivas
(por ejemplo, un vector de enteros) o de objetos. En la declaracin de una referencia de tipo array hay
que incluir los corchetes [ ]. En los siguientes ejemplos aparece cmo crear un vector de 10 nmeros
enteros y cmo crear un vector de elementos MyClass. Java garantiza que los elementos del vector
son inicializados a null o a cero (segn el tipo de dato) en caso de no indicar otro valor.
Ejemplos de declaracin e inicializacin de variables:
int x;
// Declaracin de la variable primitiva x. Se inicializa a 0
inty=5;
//Declaracin de la variable primitiva y. Se inicializa a 5
MyClass unaRef;
En el ejemplo mostrado las referencias unaRef, segundaRef y lista[0] actuarn sobre el mismo objeto.
Es equivalente utilizar cualquiera de las referencias ya que el objeto al que se refieren es el mismo.
4.1.4 Visibilidad y vida de las variables
Se entiende por visibilidad, mbito o scope de una variable, la parte de la aplicacin donde dicha
variable es accesible y por lo tanto puede ser utilizada en una expresin. En Java todas las variables
deben estar incluidas en una clase. En general las variables declaradas dentro de unas llaves {}, es
decir dentro de un bloque, son visibles y existen dentro de estas llaves. Por ejemplo las variables
declaradas al principio de una funcin existen mientras se ejecute la funcin; las variables declaradas
dentro de un bloque if no sern vlidas al finalizar las sentencias correspondientes a dicho if y las
variables miembro de una clase (es decir declaradas entre las llaves {} de la clase pero fuera de
cualquier mtodo) son vlidas mientras existe el objeto de la clase.
Informtica I. Versin 1.0 Agosto de 2004.
63
Las variables miembro de una clase declaradas como public son accesibles a travs de una referencia
a un objeto de dicha clase utilizando el operador punto (.). Las variables miembro declaradas como
private no son accesibles directamente desde otras clases. Las funciones miembro de una clase tienen
acceso directo a todas las variables miembro de la clase sin necesidad de anteponer el nombre de un
objeto de la clase. Sin embargo las funciones miembro de una clase B derivada de otra A, tienen
acceso a todas las variables miembro de A declaradas como public o protected, pero no a las
declaradas como private. Una clase derivada slo puede acceder directamente a las variables y
funciones miembro de su clase base declaradas como public o protected. Otra caracterstica del
lenguaje es que es posible declarar una variable dentro de un bloque con el mismo nombre que una
variable miembro, pero no con el nombre de otra variable local que ya existiera. La variable declarada
dentro del bloque oculta a la variable miembro en ese bloque. Para acceder a la variable miembro
oculta ser preciso utilizar el operador this, en la forma this.varname.
Uno de los aspectos ms importantes en la programacin orientada a objetos (OOP) es la forma en la
cual son creados y eliminados los objetos. En Java la forma de crear nuevos objetos es utilizando el
operador new. Cuando se utiliza el operador new, la variable de tipo referencia guarda la posicin de
memoria donde est almacenado este nuevo objeto. Para cada objeto se lleva cuenta de por untas
variables de tipo referencia es apuntado. La eliminacin de los objetos la realiza el programa
denominado garbage collector, quien automticamente libera o borra la memoria ocupada por un
objeto cuando no existe ninguna referencia apuntando a ese objeto. Lo anterior significa que aunque
una variable de tipo referencia deje de existir, el objeto al cual apunta no es eliminado si hay otras
referencias apuntando a ese mismo objeto.
4.1.5 Casos especiales: Clases BigInteger y BigDecimal
Java 1.1 incorpor dos nuevas clases destinadas a operaciones aritmticas que requieran gran
precisin: BigInteger y BigDecimal. La forma de operar con objetos de estas clases difiere de las
operaciones con variables primitivas. En este caso hay que realizar las operaciones utilizando mtodos
propios de estas clases (add() para la suma, subtract() para la resta, divide() para la divisin, etc.). Se
puede consultar la ayuda sobre el package java.math, donde aparecen ambas clases con todos sus
mtodos.
Los objetos de tipo BigInteger son capaces de almacenar cualquier nmero entero sin perder
informacin durante las operaciones. Anlogamente los objetos de tipo BigDecimal permiten trabajar
con el nmero de decimales deseado.
4.2 OPERADORES DE JAVA
Java es un lenguaje rico en operadores, que son casi idnticos a los de C/C++. Estos operadores se
describen brevemente en los apartados siguientes.
4.2.1 Operadores aritmticos
Son operadores binarios (requieren siempre dos operandos) que realizan las operaciones aritmticas
habituales: suma (+), resta (-), multiplicacin (*), divisin (/) y resto de la divisin (%).
64
op1 + = op2
op1 -= op2
op1 *= op2
op1 /= op2
op1 %= op2
Los operadores ms (+) y menos (-) unarios sirven para mantener o cambiar el signo de una variable,
constante o expresin numrica. Su uso en Java es el estndar de estos operadores.
4.2.4 Operador instanceof
1. Precediendo a la variable (por ejemplo: ++i). En este caso primero se incrementa la variable y
luego se utiliza (ya incrementada) en la expresin en la que aparece.
2. Siguiendo a la variable (por ejemplo: i++). En este caso primero se utiliza la variable en la
expresin (con el valor anterior) y luego se incrementa.
En muchas ocasiones estos operadores se utilizan para incrementar una variable fuera de una
expresin. En este caso ambos operadores son equivalente. Si se utilizan en una expresin ms
Informtica I. Versin 1.0 Agosto de 2004.
65
complicada, el resultado de utilizar estos operadores en una u otra de sus formas ser diferente. La
actualizacin de contadores en bucles for es una de las aplicaciones ms frecuentes de estos
operadores.
4.2.7 Operadores relacionales
Los operadores relacionales sirven para
realizar comparaciones de igualdad,
desigualdad y relacin de menor o mayor.
El resultado de estos operadores es
siempre un valor boolean (true o false)
segn se cumpla o no la relacin
considerada. La Tabla 4.3 muestra los
operadores relacionales de Java.
Estos operadores se utilizan con mucha frecuencia en las decisiones y en los bucles, que se vern
en prximos apartados de este captulo.
4.2.8 Operadores lgicos
Los operadores lgicos se utilizan para construir expresiones lgicas, combinando valores lgicos
(true y/o false) o los resultados de los operadores relacionales. La Tabla 4.4 muestra los operadores
lgicos de Java. Debe notarse que en ciertos casos el segundo operando no se evala porque ya no
es necesario (si ambos tienen que ser true y el primero es false, ya se sabe que la condicin de que
ambos sean true no se va a cumplir). Esto puede traer resultados no deseados y por eso se han aadido
los operadores (&) y (|) que garantizan que los dos operandos se evalan siempre.
Operador Nombre
Utilizacin Resultado
&&
||
AND
OR
op1 && op2 true si op1 y op2 son true. Si op1 es false ya no se evala op2
!
&
|
negacin
AND
OR
op1 || op2
! op
op1 & op2
op1 | op2
El operador ms (+) se utiliza tambin para concatenar cadenas de caracteres. Por ejemplo, para
escribir una cantidad con un rtulo y unas unidades puede utilizarse la sentencia:
System.out.println("El total asciendea"+result + " unidades");
donde el operador de concatenacin se utiliza dos veces para construir la cadena de caracteres que se
desea imprimir por medio del mtodo println(). La variable numrica result es convertida
automticamente por Java en cadena de caracteres para poderla concatenar. En otras ocasiones se
deber llamar explcitamente a un mtodo para que realice esta conversin.
66
Java dispone tambin de un conjunto de operadores que actan a nivel de bits. Las Operaciones de
bits se utilizan con frecuencia para definir seales o flags, esto es, variables de tipo entero en las
quecada uno de sus bits indican si una opcin est activada o no. La Tabla 4.5 muestra los operadores
de Java que actan a nivel de bits.
Operador Utilizacin
>>
op1 >> op2
<<
op1 << op2
>>>
op1 >>> op2
&
op1 & op2
|
op1 | op2
^
op1 ^ op2
~
~op2
Resultado
Desplaza los bits de op1 a la derecha una distancia op2
Desplaza los bits de op1 a la izquierda una distancia op2
Desplaza los bits de op1 a la derecha una distancia op2 (positiva)
Operador AND a nivel de bits
Operador OR a nivel de bits
Operador XOR a nivel de bits (1 si slo uno de los operandos es 1)
Operador complemento (invierte el valor de cada bit)
Tabla 4.5. Operadores a nivel de bits.
En binario, las potencias de dos se representan con un nico bit activado. Por ejemplo, los nmeros (1,
2, 4, 8, 16, 32, 64, 128) se representan respectivamente de modo binario en la forma (00000001,
00000010, 00000100, 00001000, 00010000, 00100000, 01000000, 10000000), utilizando slo 8 bits.
La suma de estos nmeros permite construir una variable flags con los bits activados que se deseen.
Por ejemplo, para construir una variable flags que sea 00010010 bastara hacer flags=2+16. Para
saber si el segundo bit por la derecha est o no activado bastara utilizar la sentencia,
if (flags&2==2){...}
Utilizacin
Equivalente a
&=
|=
^=
<<=
>>=
>>>=
El orden en que se realizan las operaciones es fundamental para determinar el resultado de una
expresin. Por ejemplo, el resultado de x/y*z depende de qu operacin (la divisin o el producto) se
realice primero. La siguiente lista muestra el orden en que se ejecutan los distintos operadores en un
sentencia, de mayor a menor precedencia:
postfix operators
unary operators
creation or cast
multiplicative
additive
shift
Informtica I. Versin 1.0 Agosto de 2004.
relational
equality
bitwise AND
bitwise exclusive OR
bitwise inclusive OR
logical AND
logical OR
conditional
assignment
Java, todos los operadores binarios, excepto los operadores de asignacin, se evalan de
izquierda a derecha. Los operadores de asignacin se evalan de derecha a izquierda, lo que
En
68
UNIDAD 5. ALGORITMOS
Este captulo trata de ser una introduccin a la metodologa y tecnologa de la programacin, con el
objetivo de proporcionar al lector los procedimientos y tcnicas para el desarrollo de programas.
Por obvio que parezca, no hay que olvidar que los programas se escriben con el nimo de resolver
problemas con ayuda de las computadoras y que la primera medida a considerar es el anlisis del
problema en cuestin y la obtencin, en su caso, de un algoritmo adecuado. Por tanto, empezaremos
nuestra exposicin hasta llegar a los mtodos y etapas a seguir para obtener una aplicacin
informtica.
Si bien los conceptos que aqu se introducen son fundamentales para la realizacin de programas,
este captulo no debe leerse como si se tratara de un manual de programacin, sino como una
fundamentacin de lo que llamamos programacin estructurada, ms all de la sintaxis y de la
semntica de un lenguaje de programacin concreto.
No obstante lo anterior, es sano en este momento informarle que se le ir familiarizando con un
lenguaje especfico: el lenguaje de programacin Java. O sea, ir conociendo su sintaxis. Esto debe
ser as, pues una de las cosas que ms estimula a un estudiante que se inicia en la informtica es ver
cmo sus programas funcionan al ser ejecutados en una computadora y, para lograrlo, se necesita de
un lenguaje de programacin.
Concepto de Algoritmo
Definicin de algoritmo. Etimologa del trmino algoritmo
En general, Un algoritmo es una secuencia de instrucciones o pasos que es llevada a cabo de forma
mecnica y sistemtica por un actor que se desenvuelve en un ambiente o entorno dado, para resolver
un problema determinado en un tiempo finito.
69
Anlisis del
problema
Programacin
del algoritmo
El objetivo del anlisis del problema, es ayudar al programador a llegar a una cierta comprensin de
la naturaleza del mismo. Este anlisis supone, en particular, la superacin de una serie de pasos (Ver
Figura 3.2):
-
Especificiones
de entrada
Especificacion
es de salida
Ejemplo :
Elaborar el anlisis para obtener el rea y la longitud de una circunferencia.
70
Seamos optimistas y pensemos que vamos a tener la capacidad de tener ideas, propias o adquiridas,
para desarrollar algoritmos que nos permitan actuar ante los problemas que se nos planteen.
Para disear algoritmos hay que tener presente los requisitos caracterticas siguientes:
Preciso: El algoritmo debe indicar con mucha claridad el orden de realizacin de cada
paso.
Definido: Si se sigue un algoritmo dos veces , se debe obtener el mismo resultado cada
vez, es decir, estar definido sin ambigedad.
Finito: Si se sigue un algoritmo, se debe terminar en algn momento; o sea, debe tener un
nmero finito de pasos.
Ejemplo:
Instrucciones para subir una escalera
[...] Las escaleras se suben de frente, pues hacia atrs o de costado resultan particularmente
incmodas. La actitud natural consiste en mantenerse de pie, los brazos colgando sin esfuerzo, la
cabeza erguida aunque no tanto tal que los ojos puedan ver los peldaos inmediatamente superiores al
que se pisa, y respirando lenta y regularmente. Para subir una escalera se comienza por levantar esa
parte del cuerpo situada a la derecha abajo, envuelta casi siempre en cuero o gamuza, y que salvo
excepciones cabe exactamente en el escaln. Puesta en el primer peldao dicha parte, que para
abreviar llamaremos pie, se recoge la parte equivalente de la izquierda (tambin llamada pie, pero que
no ha de confundirse con el pie antes citado), y llevndola a la altura del pie, se le hace seguir hasta
colocarla en el segundo peldao, con lo cual en ste descansar el pie, y en el primero descansar el
pie. (Los primeros peldaos son siempre los ms difciles, hasta adquirir la coordinacin necesaria. La
coincidencia de nombre entre el pie y el pie hace difcil la explicacin. Cudese especialmente de no
levantar al mismo tiempo el pie y el pie).
Llegando en esta forma al segundo peldao, basta repetir alternadamente los movimientos hasta
encontrarse con el final de la escalera. Se sale de ella fcilmente, con un ligero golpe de taln que la
fija en su sitio, del que no se mover hasta el momento del descenso.
Ejemplo:
Elaborar Tortilla de patatas a la espaola (6 personas)
Ingredientes:
- 2 vasos (de los de agua) de aceite (1/2 litro)
- Sal
- 8 huevos
- 1 kg de patatas
Se pelan las patatas, se lavan y se secan con un pao; se parten en dos a lo largo y despus se cortan
en lminas finitas. Se pone el aceite a calentar en la sartn y se fren las patatas, movindolas de vez
en cuando y echndoles un poco de sal.
Una vez fritas (ms o menos doradas, segn gusten), se separan y se ponen a escurrir en un colador
grande. Se quita el aceite sobrante de la sartn.
Aparte se baten los huevos con tenedor y muy fuerte; se pone un poco de sal; en el mismo plato de los
huevos se echan las patatas y se mueven con un tenedor.
En una sartn grande (o en dos pequeas) se ponen 3 cucharadas soperas de aceite para que slo cubra
el fondo. Cuando est caliente se vierte la mezcla de huevos y patatas. Se mueve la sartn por el
mango para que no se pegue la tortilla. Cuando se vea que est bien despegada y dorada (esto depende
Informtica I. Versin 1.0 Agosto de 2004.
71
del gusto de cada cual), se pone una tapadera encima, se vuelca la sartn y se escurre suavemente la
tortilla otra vez en la sartn. Se vuelve a mover por el mango y cuando est cuajada (a gusto) se pasa a
una fuente redonda y se sirve.
Ejemplo:
Algoritmo infantil: Multiplicacin de nmeros enteros
Para obtener el producto de dos nmeros enteros utilizando lpiz y papel se debe escribir el primer
factor (multiplicando) y, justo debajo y alineado a la derecha, el segundo factor (multiplicador).
Se recorren todas las cifras del multiplicador de derecha a izquierda y se operan con cada una de las
cifras el multiplicando, tambin de derecha a izquierda, escribiendo los resultados intermedios en
lneas separadas; cada lnea estar desplazada una posicin a la izquierda respecto a la lnea
inmediatamente superior.
Una vez se han obtenido todos los resultados intermedios se suman columna a columna
obtenindose el resultado final.
Numerando cada uno de los pasos a seguir en cada uno de los algoritmos, formalizamos un poco
nuestro lenguaje cotidiano para escribir algoritmos, veamos:
Ejemplo:
Cambiar la rueda pinchada de un automvil teniendo un gato mecnico en buen estado, una rueda de
reemplazo y una llave inglesa.
72
Ejemplo:
Averiguar si un nmero entero positivo es primo o no, dado que conocemos la definicin de nmero
primo: un nmero entero positivo, N, es primo si slo puede dividirse por s mismo y por la unidad.
Un mtodo que nos puede dar la solucin sera dividir sucesivamente el nmero por 2, 3, 4...N, y,
segn el resultado, podramos resolver el problema. Un diseo del mismo sera:
1. Inicio.
2. Poner X igual a 2 (X = 2, donde X es una variable que representa a los posibles divisores
de N).
3. Dividir N por X (N/X).
4. Si el resultado de N/X es entero, entonces N no es primo (pues esto indicara que N es
divisible entre X) y saltar al punto 9; en caso contrario continuar el proceso en el siguiente
punto, 5.
5. Incrementar X en una unidad (X = X + 1)
6. Si X es menor que N saltar al punto 3, en caso contrario continuar el proceso en el siguiente
punto, 7.
7. Declarar que N es primo;
8. Saltar al Fin (punto 10)
9. Declarar que N no es primo
10. Fin
Como parte del diseo de un algoritmo est la seleccin de aqul que sea razonablemente aceptable,
entre todos los muchos posibles que resuelven el mismo problema (el ejemplo que acabamos de dar
es claramente mejorable, pues si N no era divisible por 2 no tiene mucho sentido volverse a
preguntar si lo es por 4).
Durante el diseo es posible y aconsejable, realizar comparaciones entre algoritmos que resuelven el
mismo problema. La bondad de un algoritmo puede medirse por dos factores:
-
El tiempo que se necesita para ejecutarlo. Para tener una idea aproximada de ello, basta con saber
el nmero de instrucciones de cada tipo necesarias para resolver el problema.
Los recursos que se necesitan para implementarlo.
As, una vez diseado un primer algoritmo, conviene realizar una evaluacin del mismo, cuestin a
veces nada banal y sobre la que volveremos en captulos posteriores. Si se decide que ste no es
eficiente ser necesario o bien disear uno nuevo o bien optimizar el original. Optimizar un
algoritmo consiste en introducir modificaciones en l, tendientes a disminuir el tiempo que necesita
para resolver el problema o a reducir los recursos que utiliza. (En el ejemplo 2, el algoritmo se
optimiza si N se declara como primo cuando X supera a N/2 y no esperar hasta que X llegue a N).
Ejemplo:
Realizar la suma de todos los nmeros pares entre 2 y 1000.
El problema consiste en sumar 2 + 4 + 6 + 8 + 10 + . . . + 998 + 1000.
Utilizaremos las palabras SUMA y NUMERO (que llamaremos ms tarde variables) para
representar las sumas sucesivas (2 + 4), (2 + 4 + 6), (2 + 4 + 6 + 8), etc.
La solucin se puede escribir con el siguiente algoritmo:
1. Inicio.
2. Establecer SUMA a 0.
3. Establecer NUMERO a 2.
4. Sumar NUMERO a SUMA. El resultado ser el nuevo valor de la suma (SUMA).
5. Incrementar NUMERO en 2 unidades.
6. Si NUMERO <= 1000 bifurcar (, ir) al paso 4; en caso contrario, escribir el ltimo valor
de SUMA y terminar el proceso.
7. Fin.
Informtica I. Versin 1.0 Agosto de 2004.
73
Si se estudia con atencin cada uno de los algoritmos anteriores descubriremos una serie de
caractersticas interesantes que definen la naturaleza de lo que es un algoritmo:
- Un algoritmo resuelve un problema especfico: subir una escalera, obtener una tortilla de
patatas, hacer una multiplicacin o determinar el mximo comn divisor de dos nmeros.
- Un algoritmo es llevado a cabo por una entidad que trabaja en un entorno dado: una persona
cuyo universo inmediato se reduce a su propio cuerpo y una escalera; un cocinero con una sartn,
huevos, patatas, aceite, sal y cebolla; o un nio con lpiz y papel.
- Un algoritmo consta de una serie de pasos que deben llevarse a cabo siguiendo una secuencia
marcada: algunos de los pasos, en uno de los algoritmos anteriores, seran: dar la vuelta a la
tortilla, batir los huevos, pelar las patatas o cascar los huevos; dichos pasos deben aplicarse en un
orden prefijado y no de cualquier manera.
- Un algoritmo se aplica de forma mecnica: un algoritmo no precisa decisiones subjetivas ni
creatividad en su ejecucin, cualquiera con una receta adecuada para obtener tortilla de patatas
lograr una tortilla de patatas. Sin embargo, s es necesario un acto creativo para desarrollar un
nuevo algoritmo.
- Un algoritmo termina en un tiempo finito: todos los algoritmos deben finalizar, pueden tardar
ms o menos tiempo en lograr un resultado pero dicho tiempo debe ser finito.
Diseo Descendente (Top Down), , Modular
74
Disear un algoritmo que responda a la pregunta: Qu debo hacer para ver la pelcula XYZ?.
Un primer anlisis nos conduce a un esbozo de solucin, descomponindolo en cuatro mdulos
sucesivos:
1.
2.
3.
4.
Estos cuatro pasos se pueden refinar un poco ms y as este problema lo podramos descomponer de
la siguiente forma:
Algoritmo para ver la pelcula XYZ
inicio
consultar la cartelera de cines
si proyectan XYZ entonces
ir al cine correspondiente
si_no proyectan XYZ
declarar el fracaso del objetivo y terminar
acudir al cine correspondiente
si hay cola entonces ponerse en ella
mientras haya personas delante en la cola hacer
avanzar en la cola
preguntar si quedan entradas
si hay entradas entonces
comprar una entrada
si_no quedan entradas
declarar el fracaso del objetivo, regresar a casa y terminar
encontrar el asiento correspondiente
mientras proyectan la pelcula hacer
ver la pelcula
abandonar el cine
regresar a casa
fin
Algunas de estas acciones son primitivas para nosotros, es decir, no es necesario descomponerlas
ms, como el abandonar el cine. Sin embargo hay otras acciones que son susceptibles de mayor
descomposicin. Este es el caso de la accin:
encontrar el asiento correspondiente
si los nmeros de los asientos estn impresos en la entrada, esta accin compuesta se resuelve con el
siguiente algoritmo:
Algoritmo para encontrar el asiento del espectador
inicio
caminar hasta llegar a la primera fila de asientos
repetir
comparar nmero de fila con nmero impreso en billete
si no son iguales, entonces pasar a la siguiente fila
hasta_que se localice la fila correcta
Informtica I. Versin 1.0 Agosto de 2004.
75
Una vez que el algoritmo est diseado y representado, se debe pasar a la fase de resolucin prctica
del problema con el computador. Esta fase se descompone a su vez en las siguientes subfases: (Ver
Figura 5.3)
1. Codificacin del algoritmo en un programa.
2. Ejecucin del programa.
Programacin
3. Comprobacin del programa.
del algoritmo
Codificacin en un
programa
Ejecucin del
programa
Comprobacin
del programa
76
Los diagramas de flujo u organigramas permiten describir los algoritmos de forma grfica; para ello
utilizan una serie de bloques que indican distintas circunstancias y flechas que muestran bajo qu
condiciones se pasa de un bloque a otro.
Algunos de los smbolos son los siguientes:
77
Pseudocdigo
El pseudocdigo pretende aunar en un solo tipo de representacin las ventajas del lenguaje natural y
de los organigramas sin ninguno de sus problemas; por tanto, el pseudocdigo:
- Es fcilmente comprensible para una persona que lo vea por vez primera.
- Est bien delimitado.
- Elimina las ambigedades del lenguaje natural.
- Se representa de una forma compacta.
De esta forma, el pseudocdigo se suele ver como un subconjunto de un lenguaje natural que
proporciona un nmero limitado de operaciones para la construccin de algoritmos; la nica finalidad
del pseudocdigo (como de los organigramas) es la comunicacin entre seres humanos. A
continuacin se muestra un ejemplo del algoritmo descrito, mediante un pseudocdigo:
Ejemplo:
Algoritmo para la ecuacin cuadrtica, escrito en seudocdigo
Informtica I. Versin 1.0 Agosto de 2004.
78
Aunque el pseudocdigo es independiente del lenguaje de alto nivel que vaya a utilizarse, un
algoritmo expresado en pseudocdigo puede ser traducido ms fcilmente a muchos de dichos
lenguajes.
Lenguajes de programacin
Aunque en la unidad 4. se revisaron las definiciones de variables numricas, literales, operadores, etc.;
creemos conveniente recordar esas definicines reforzndolas con ejemplos concretos de otros textos.
Un lenguaje de programacin comparte las mismas caractersticas que el pseudocdigo pero, adems
de ser comprensible para un ser humano, resulta comprensible para un computador; esto es, un
algoritmo descrito mediante un lenguaje de programacin puede ser ejecutado por una mquina.
A continuacin, se muestra el algoritmo anterior escrito en el lenguaje de programacin JAVA:
/*
Ecuacin Cuadrtica.
Elaborado por:
*****************************************************
*/
import java.io.* ;
// Importa el paquete de entrada / salida (input / output)
class Cuadratica {
// Mtodo principal:
Informtica I. Versin 1.0 Agosto de 2004.
79
System.exit( 0 ) ;
// Termine el programa (salir del sistema)
}
// Fin del mtodo main( )
// Fin de la clase Cuadratica
80
Al compilar y ejecutar esta aplicacin Java se obtienen las siguientes salidas en la salida estandar:
Ejemplo:
Supongamos que tenemos un algoritmo para averiguar si un nmero es par, que puede ser descrito
narrativamente de la siguiente forma: Si restando consecutivamente doses (2s) del nmero se
obtiene el numero 2, es par, si se obtiene otro valor (el 1), entonces es impar. Este algoritmo escrito
en pseudocdigo sera:
leer N
mientras N > 2 hacer
N= N-2
si N = 2 entonces
escribe es par
sino
escribe es impar
fin_si
Ntese que en este ejemplo y en otros anteriores hemos utilizado dos estructuras que son muy usadas
en programacin: mientras-hacer y si-entonces - si_no; y que la escritura del pseudocdigo usa
Informtica I. Versin 1.0 Agosto de 2004.
81
Variables
Una variable es una localizacin o casilla en la memoria principal que almacena un valor que puede
cambiar en el transcurso de la ejecucin del programa. Cuando un programa necesita almacenar un
dato, necesita una variable. Toda variable tiene un nombre, un tipo de dato y un valor. Antes de
poder utilizar una variable es necesario declararla especificando su nombre y su tipo de dato. Para
declarar variables usaremos los siguientes formatos:
Informtica I. Versin 1.0 Agosto de 2004.
82
Donde:
Es el tipo de dato de la variable que puede ser: ENTERO (si la
variable almacenar un nmero entero) , REAL (si la variable
almacenar un nmero con parte decimal) , CARACTER (si la
variable almacenar un caracter), CADENA (si la variable
almacenar un conjunto de caracteres) o LOGICO (si la variable
almacenar el valor verdadero o el valor falso).
nombre1, nombre2, ..., Nombres de las variables. El nombre de una variable debe comenzar
nombreN
con una letra, un smbolo de subrayado o un smbolo de dlar. Los
dems caracteres del nombre pueden ser letras, nmeros, smbolos
de subrayado o smbolos de dlar. Debe considerarse tambin que
una letra mayscula se considera diferente de una letra minscula.
Tipo
La siguiente instruccin declara la variable edad de tipo ENTERO y la variable descuento de tipo
REAL.
ENTERO edad
REAL descuento
Esto crea las casillas de memoria edad y descuento. Luego de la creacin, las variables estn
indefinidas ( ? ).
Edad
descuento ?
La siguiente instruccin declara las variables nota1, nota2 y nota3, todas de tipo ENTERO.
ENTERO nota1, nota2, nota3
Esto crea los casilleros de memoria nota1, nota2 y nota3. Luego de la creacin, las variables estn
indefinidas ( ? ).
nota1 ?
nota2 ?
nota3 ?
Literales
Se denominan literales a todos aquellos valores que figuran en el pseudocdigo y pueden ser:
Literales enteros 12, 20300, 15, etc.
Literales reales 3.1416, 2345.456, etc.
Informtica I. Versin 1.0 Agosto de 2004.
83
Esta es una solucin en pseudocdigo utilizando conceptos computacionales de: variable, entrada de
datos y salida de resultados. La solucin considera que 1 metro = 100 centmetros y que 1 pulgada =
2.54 centmetros.
INICIO
// Declara las variables M, C y P
REAL M, C, P
Informtica I. Versin 1.0 Agosto de 2004.
84
Significado
Suma
Resta
Multiplicacin
Divisin
Residuo
Ejemplo
a +b
a-b
a *b
a/b
a%b
Los operadores aritmticos pueden utilizarse con tipos enteros y reales. Si en una operacin con dos
operandos, ambos operandos son enteros, el resultado es un entero; si alguno de ellos es real, el
resultado es real. As, 15 / 4 es 3 y no 3.75; en cambio, 15.0/4 es 3.75.
Reglas de jerarqua de los operadores aritmticos
Cuando una expresin aritmtica tiene ms de un operador aritmtico, el orden de aplicacin de los
operadores sigue un orden preciso determinado por las reglas de jerarqua de los operadores
aritmticos, que se muestran en la siguiente tabla:
Tabla 5.2 Reglas de jerarqua de los operadores aritmticos
Operador
()
*, /, %
+, -
Orden de evaluacin
Se evalan en primer lugar
Se evalan en segundo lugar
Se evalan en tercer lugar
85
Solucin
e=a/b/c
Como todos los operadores tienen la misma jerarqua, la evaluacin ser de izquierda a derecha:
Primero, se dividir a entre b.
Segundo, el resultado ya obtenido de a / b se dividir entre c.
Note que el orden de ejecucin esta de acuerdo con la expresin algebraica, por lo que no se requiere
ninguna pareja de parntesis.
Ejemplo:- Cul es el equivalente en pseudocdigo de la siguiente expresin algebraica?
Solucin
c=a*b*c/d/e
Como todos los operadores tienen la misma jerarqua, la evaluacin ser de izquierda a derecha:
Primero, se multiplicar a por b.
Segundo, el resultado ya obtenido de a * b se multiplicar por c.
Tercero, el resultado ya obtenido de a * b * c se dividir entre d.
Cuarto, el resultado ya obtenido de a * b * c / d se divivir entre e.
Note que el orden de ejecucin esta de acuerdo con la expresin algebraica, por lo que no se requiere
ninguna pareja de parntesis.
Ejercicio:- Cul es el equivalente en pseudocdigo de la siguiente expresin algebraica?
Solucin
e = 4 / ( (a + b) / (c / d) ) + v / (w / p) + 5 * m * n * q
86
Se ha utilizado la mnima cantidad posible de parntesis. Pueden usarse parntesis adicionales, lo que
no es un error. Por ejemplo, otra solucin posible que arroja el mismo resultado final es:
e = ( 4/( (a+b)/(c/d) ) ) + (v/(w/p)) + (5*m*n*q)
Note que usando correctamente las reglas de jerarqua, es posible usar menos parejas de parntesis.
Expresiones Lgicas
Una expresin lgica combina variables, literales, operadores aritmticos, operadores relacionales y
operadores lgicos. Los operadores relacionales y los operadores lgicos se muestran en las tablas 1.3
y 1.4
Tabla 5.3 Operadores relacionales
Operador Significado
Ejemplo
>
mayor que
a>b
>=
mayor o igual que
a >= b
<
menor que
a<b
<=
menor o igual que
a <= b
==
igual a
a == b
!=
diferente de
a != b
Operador
!
&&
||
Ejercicio 1:- Disee un pseudocdigo que halle el rea y el permetro de un rectngulo. Considere
que: area = base x altura, y, perimetro = 2 x (base+altura).
Algoritmo
INICIO
// Declaracin de variables
REAL base, altura, area, perimetro
// Entrada de datos
LEER base, altura
// Proceso de clculo
area = base*altura
perimetro = 2*(base+altura)
// Salida de resultados
IMPRIMIR area, perimetro
FIN
Veamos el algoritmo anterior escrito en Java:
Informtica I. Versin 1.0 Agosto de 2004.
87
import java.io.* ;
class Rectangulo1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de variables:
double base, altura, area, perimetro ;
// Entrado de datos:
System.out.print( "Digite el valor de la base [cm]: " ) ;
base = Double.parseDouble( br.readLine( ) ) ;
System.out.print( "Digite el valor de la altura [cm]: " ) ;
altura = Double.parseDouble( br.readLine( ) ) ;
// Proceso de clculo
area = base * altura ;
perimetro = 2 *(base + altura) ;
// Salida de resultados
System.out.println( "Area del rectangulo: " + area + " cm2" ) ;
System.out.println( "Perimetro del rectangulo: " + perimetro + " cm" ) ;
System.exit( 0 ) ;
} //Fin del mtodo main( )
}
Salida:
Ejercicio 2:- Disee un pseudocdigo para convertir una longitud dada en metros a sus equivalentes
en centmetros, pies, pulgadas y yardas. Considere que: 1 metro = 100 centmetros, 1 pulgada = 2.54
centimetros, 1 pie = 12 pulgadas, 1 yarda = 3 pies.
Algoritmo
INICIO
// Declaracin de variables
REAL cmetr,ccent, cpies, cpulg, cyard
Informtica I. Versin 1.0 Agosto de 2004.
88
// Entrada de datos
LEER cmetr
// Proceso de clculo
ccent = cmetr * 100
cpulg = ccent / 2.54
cpies = cpulg / 12
cyard = cpies / 3
// Salida de resultados
IMPRIMIR ccent, cpulg, cpies, cyard
FIN
Veamos el algoritmo anterior escrito en Java:
import java.io.* ;
class Conversiones1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de variables:
double cmetr,ccent, cpies, cpulg, cyard ;
// Entrado de datos:
System.out.print( "Digite la cantidad en metros: " ) ;
cmetr = Double.parseDouble( br.readLine( ) ) ;
// Proceso de clculo
ccent = cmetr * 100 ;
cpulg = ccent / 2.54 ;
cpies = cpulg / 12 ;
cyard = cpies / 3 ;
// Salida de resultados
System.out.println( "Cantidad equivalente en centimetros: " + ccent + " cm" ) ;
System.out.println( "Cantidad equivalente en pulgadas: " + cpulg + " pulgadas" ) ;
System.out.println( "Cantidad equivalente en pies: " + cpies + " pies" ) ;
System.out.println( "Cantidad equivalente en yardas: " + cyard + " yardas" ) ;
System.exit( 0 ) ;
} //Fin del mtodo main( )
Informtica I. Versin 1.0 Agosto de 2004.
89
Ejercicio 3:- Una institucin benfica europea ha recibido tres donaciones en soles, dolares y marcos.
La donacin ser repartida en tres rubros: 70% para la implementacin de un centro de salud, 20%
para un comedor de nios y el resto para gastos administrativos. Disee un algoritmo que determine el
monto en euros que le corresponde a cada rubro. Considere que: 1 dlar = 3.52 soles, 1 dlar = 2.08
marcos, 1 dlar = 1.07 euros.
Algoritmo
INICIO
// Declaracin de variables
REAL csoles, cdolares, cmarcos, ceuros, rubro1, rubro2, rubro3
// Entrada de datos
LEER csoles, cdolares, cmarcos
// Proceso de clculo
ceuros = (csoles / 3.52 + cdolares + cmarcos / 2.08 ) * 1.07
rubro1 = ceuros * 0.70
rubro2 = ceuros * 0.20
rubro3 = ceuros * 0.10
// Salida de resultados
IMPRIMIR rubro1, rubro2, rubro3
FIN
Veamos el algoritmo anterior escrito en Java:
import java.io.* ;
class Euros1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de variables:
double csoles, cdolares, cmarcos, ceuros, rubro1, rubro2, rubro3 ;
// Entrada de datos:
System.out.print( "Digite la cantidad de dinero en soles: $ " ) ;
csoles = Double.parseDouble( br.readLine( ) ) ;
System.out.print( "Digite la cantidad de dinero en dolares: U$ " ) ;
Informtica I. Versin 1.0 Agosto de 2004.
90
Ejercicio 4:- En una competencia atltica de velocidad el tiempo se mide en minutos, segundos y
centsimas de segundo y, el espacio recorrido se mide en metros. Disee un algoritmo para determinar
la velocidad promedio de un atleta en km/hr. Considere que: 1 hora = 60 minutos, 1 minuto = 60
segundos, 1 segundo = 100 centsimas de segundo, 1 kilmetro = 1000 metros.
Algoritmo
INICIO
// Declaracin de variables
ENTERO tmin, tseg, tcen
REAL thor, velkmhr, espmt, espkm
// Entrada de datos
LEER tmin, tseg, tcen, espmt
// Clculo del tiempo total empleado en horas
thor = tmin / 60 + tseg / 3600 + (tcen / 100) / 3600 // Aqu sobran los parntesis. Se dejan por
// claridad.
// Clculo del espacio recorrido en kilmetros
espkm = espmt / 1000
Informtica I. Versin 1.0 Agosto de 2004.
91
92
Ejercicio 5:- Disee un algoritmo que determine la cifra de las unidades de un nmero natural.
Solucin 1
Anlisis
Puede comprobarse que la cifra de las unidades de un nmero es igual al resto de la divisin del
nmero entre 10. Observe para ello las siguientes divisiones:
3245 | 10
5 324
768 | 10
8 76
9 | 10
9
0
// Entrada de datos
LEER numero
// Proceso de clculo
unidades = numero % 10
// Salida de resultados
IMPRIMIR unidades
FIN
El algoritmo anterior, escrito en Java, queda as:
import java.io.* ;
class UnidadesNumero1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de variables:
int num, unidades ;
// Entrada de datos:
System.out.print( "Digite un numero entero positivo: " ) ;
num = Integer.parseInt( br.readLine( ) ) ;
Informtica I. Versin 1.0 Agosto de 2004.
93
unidades = num % 10 ;
System.out.println( num + " tiene " + unidades +
" como cifra de las unidades." ) ;
System.exit( 0 ) ;
} //Fin del mtodo main( )
}
Salida:
Solucin 2
Anlisis
El residuo de una divisin entera puede obtenerse tambin sin recurrir al operador %, de la siguiente
forma:
unidades = numero - (numero / 10) * 10
observe para esto que en la divisin (numero/10) los operandos son enteros por lo que el cociente
ser un entero. As por ejemplo, si numero es igual a 3245, la divisin (numero/10) produce 324,
aunque matemticamente sea 324.5; es decir, se descarta la parte decimal.
Algoritmo
INICIO
// Declaracin de variables
ENTERO numero, unidades
// Entrada de datos
LEER numero
// Proceso de clculo
unidades = numero - (numero / 10) * 10
// Salida de resultados
IMPRIMIR unidades
FIN
El algoritmo anterior, escrito en Java, queda as:
import java.io.* ;
class UnidadesNumero2 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
Informtica I. Versin 1.0 Agosto de 2004.
94
Salida:
Ejercicio 6:- Disee un algoritmo que determine la suma de las cifras de un nmero entero positivo
de 4 cifras.
Solucin 1
Anlisis
Las cifras pueden ser obtenidas mediante divisiones sucesivas entre 10. Para el efecto, considere el
caso de un nmero N igual a 3245:
unidades = N % 10
cociente = N / 10
3245 | 10
5 324
decenas = cociente % 10
cociente = cociente / 10
324 | 10
4 32
centenas = cociente % 10
millares = cociente / 10
32
2
| 10
3
Algoritmo
INICIO
// Declaracin de variables
ENTERO N, suma, millares, centenas, decenas, unidades
// Entrada de datos
Informtica I. Versin 1.0 Agosto de 2004.
95
LEER N
// Proceso de clculo
unidades = N % 10
cociente = N / 10
decenas = cociente % 10
cociente = cociente / 10
centenas = cociente % 10
millares = cociente/10
suma
// Salida de resultados
IMPRIMIR suma
FIN
El algoritmo anterior, escrito en Java, queda as:
import java.io.* ;
class SumaCifrasNum1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de variables:
int num, unidades, decenas, centenas, millares, cociente, suma ;
// Entrada de datos:
System.out.print( "Digite un numero entero positivo de 4 cifras: " ) ;
num = Integer.parseInt( br.readLine( ) ) ;
// Proceso de clculo:
unidades = num % 10 ;
cociente = num / 10 ;
decenas = cociente % 10 ;
cociente = cociente / 10 ;
centenas = cociente % 10 ;
millares = cociente / 10 ;
suma = unidades + decenas + centenas + millares ;
System.out.println( "Suma de las cifras del numero: " + suma ) ;
Informtica I. Versin 1.0 Agosto de 2004.
96
}
}
System.exit( 0 ) ;
//Fin del mtodo main( )
Salida:
Solucin 2
Anlisis 2
Considerando que el nmero tiene 4 cifras, las cifras tambin pueden ser obtenidas mediante
divisiones sucesivas entre 1000, 100 y 10. Para el efecto, considere el caso de un nmero N igual a
3245:
millares = N / 1000
resto = N % 1000
centenas = resto / 100
resto = resto % 100
decenas = resto / 10
unidades = resto % 10
3245 | 1000
245 3
245 | 100
45 2
45 | 10
5 4
Algoritmo
INICIO
// Declaracin de variables
ENTERO N, suma, millares, centenas, decenas, unidades, resto
// Entrada de datos
LEER N
// Proceso de clculo
millares = N / 1000
resto = N % 1000
centenas = resto / 100
resto = resto % 100
decenas = resto / 10
unidades = resto % 10
suma = unidades + decenas + centenas + millares
// Salida de resultados
IMPRIMIR suma
FIN
El algoritmo anterior, escrito en Java, queda as:
import java.io.* ;
class SumaCifrasNum2 {
Informtica I. Versin 1.0 Agosto de 2004.
97
Salida:
Ejercicio 7:- Disee un algoritmo que lea la hora actual del da HH:MM:SS y determine cuntas
horas, minutos y segundos restan para culminar el da.
Algoritmo
INICIO
// Declaracin de variables
ENTERO hor1, min1, seg1, hor2, min2, seg2, segres, resto
Informtica I. Versin 1.0 Agosto de 2004.
98
// Entrada de datos
LEER hor1, min1, seg1
// Clculo de la cantidad de segundos que restan para culminar el da
segres = 86400 - (hor1 * 3600 + min1 * 60 + seg1)
// Descomposicin de segres en horas, minutos y segundos
hor2 = segres / 3600
resto = segres % 3600
min2 = resto / 60
seg2 = resto % 60
// Salida de resultados
IMPRIMIR hor2, min2, seg2
FIN
As queda en Java:
import java.io.* ;
class HmsQueFaltan1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de variables:
int hor1, min1, seg1, hor2, min2, seg2, segres, resto ;
// Entrada de datos:
System.out.print( "Digite la hora MILITAR actual (numero entero): " ) ;
hor1 = Integer.parseInt( br.readLine( ) ) ;
System.out.print( "Digite los minutos actuales (numero entero): " ) ;
min1 = Integer.parseInt( br.readLine( ) ) ;
System.out.print( "Digite los segundos actuales (numero entero): " ) ;
seg1 = Integer.parseInt( br.readLine( ) ) ;
// Proceso de clculo.
// *******************
// Clculo de la cantidad de segundos que restan para culminar el da:
segres = 86400 - (hor1 * 3600 + min1 * 60 + seg1) ;
// Descomposicin de segres en horas, minutos y segundos:
hor2 = segres / 3600 ;
resto = segres % 3600 ;
min2 = resto / 60 ;
seg2 = resto % 60 ;
Informtica I. Versin 1.0 Agosto de 2004.
99
// Salida de resultados
System.out.println( "Para terminar el dia, hacen falta: " +
hor2 + " horas, " + min2 + " minutos y " + seg2 + " segundos." ) ;
System.exit( 0 ) ;
}
}
Salida:
Ejercicio 8:- Disee un algoritmo para sumar dos tiempos dados en horas, minutos y segundos.
Algoritmo
INICIO
// Declaracin de variables
ENTERO hor1, min1, seg1, hor2, min2, seg2, hor3, min3, seg3, totseg, resto
// Entrada de datos
LEER hor1, min1, seg1, hor2, min2, seg2
// Determina la cantidad total de segundos entre los dos tiempos
totseg = (hor1 + hor2) * 3600 + (min1 + min2) * 60 + (seg1 + seg2)
// Descompone totseg en horas, minutos y segundos
hor3 = totseg / 3600
resto = totseg % 3600
min3 = resto / 60
seg3 = resto % 60
// Salida de resultados
IMPRIMIR hor3, min3, seg3
FIN
As queda en Java:
import java.io.* ;
class HmsQueFaltan2 {
public static void main( String args[ ] ) throws IOException {
Informtica I. Versin 1.0 Agosto de 2004.
100
101
Salida:
Ejercicio 9:- El sueldo neto de un vendedor se calcula como la suma de un sueldo bsico de
$2500.000.oo ms el 12% del monto total vendido. Disee un algoritmo que determine el sueldo
neto de un vendedor sabiendo que hizo tres ventas en el mes.
Algoritmo
INICIO
// Declaracin de variables
REAL venta1, venta2, venta3, ventatot, comision, sueldoneto
// Entrada de datos
LEER venta1, venta2, venta3
// Proceso de clculo
ventatot = venta1 + venta2 + venta3
comision = ventatot * 12 / 100
sueldoneto = 2500000 + comision
// Salida de resultados
IMPRIMIR sueldoneto
FIN
As queda en Java:
import java.io.* ;
class SueldoNeto1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de una constante:
final float $BASICO = 2500000 ;
// Declaracin de variables:
float venta1, venta2, venta3, ventatot, comision, sueldoneto ;
// Entrada de datos:
Informtica I. Versin 1.0 Agosto de 2004.
102
Salida:
// Entrada de datos
LEER varones, mujeres
// Proceso de clculo
Informtica I. Versin 1.0 Agosto de 2004.
103
Salida:
Informtica I. Versin 1.0 Agosto de 2004.
104
Ejercicio 11:- En pases de habla inglesa es comn dar la estatura de una persona como la suma de
una cantidad entera de pies ms una cantidad entera de pulgadas. As, la estatura de una persona
podra ser 3' 2" ( 3 pies 2 pulgadas ). Disee un algoritmo que determine la estatura de una persona
en metros, conociendo su estatura en el formato ingls. Considere que: 1 pie = 12 plg, 1 plg = 2.54
cm, 1 m = 100 cm.
Algoritmo
INICIO
// Declaracin de variables
REAL estmt
ENTERO cpies, cplgs
// Entrada de datos
LEER cpies, cplgs
// Proceso de clculo
estmt = (cpies * 12 + cplgs) * 2.54 / 100
// Salida de resultados
IMPRIMIR estmt
FIN
En Java:
import java.io.* ;
class EstaturaMts1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de variables:
int cpies, cplgs ;
double estmt ;
// Entrada de datos:
System.out.print( "De la estatura, digite el numero (entero) de pies: " ) ;
cpies = Integer.parseInt( br.readLine( ) ) ;
System.out.print( "De la estatura, digite el numero (entero) de pulgadas: " ) ;
cplgs = Integer.parseInt( br.readLine( ) ) ;
105
// Proceso de clculo:
estmt = (cpies * 12 + cplgs) * 2.54 / 100 ;
System.out.println( "**********************************************" ) ;
// Salida de resultados:
System.out.println( "En metros, su estatura es: " + estmt + " mts." ) ;
System.exit( 0 ) ;
}
}
Salida:
Ejercicio 12:- Disee un algoritmo que exprese la capacidad de un disco duro en megabytes,
kilobytes y bytes, conociendo la capacidad del disco en gigabytes. Considere que: 1 kilobyte = 1024
bytes, 1 megabyte = 1024 kilobyte, 1 gigabyte = 1024 megabytes.
Algoritmo
INICIO
// Declaracin de variables
REAL cgigabyte, cmegabyte, ckilobyte, cbyte
// Entrada de datos
LEER cgigabyte
// Proceso de clculo
cmegabyte = cgigabyte * 1024
ckilobyte = cmegabyte * 1024
cbyte = ckilobyte * 1024
// Salida de resultados
IMPRIMIR cmegabyte, ckilobyte, cbyte
FIN
En Java:
Informtica I. Versin 1.0 Agosto de 2004.
106
import java.io.* ;
class CapacidadDiscoDuro1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de variables:
double cgigabyte, cmegabyte, ckilobyte, cbyte ;
// Entrada de datos:
System.out.print( "Digite la capacidad del Disco Duro en Gigabytes: " ) ;
cgigabyte = Double.parseDouble( br.readLine( ) ) ;
// Proceso de clculo:
cmegabyte = cgigabyte * 1024 ;
ckilobyte = cmegabyte * 1024 ;
cbyte = ckilobyte * 1024 ;
System.out.println( "**********************************************" ) ;
// Salida de resultados:
System.out.println( "La capacidad del Disco Duro es: " + cmegabyte +
" Megabytes,\n" + ckilobyte + " Kilobytes y\n" + cbyte + " Bytes." ) ;
System.exit( 0 ) ;
}
}
Salida:
Ejercicio 13:- Disee un algoritmo que intercambie las cifras de las unidades de dos nmeros
naturales.
Algoritmo
INICIO
// Declaracin de variables
ENTERO numero1, numero2, unidades1, unidades2
Informtica I. Versin 1.0 Agosto de 2004.
107
// Entrada de datos
LEER numero1, numero2
// Determina las cifras de las unidades
unidades1 = numero1 % 10
unidades2 = numero2 % 10
// Intercambia las cifras de las unidades
numero1 = numero1 - unidades1 + unidades2
numero2 = numero2 - unidades2 + unidades1
// Salida de resultados
IMPRIMIR numero1, numero2
FIN
En Java:
import java.io.* ;
class IntercambiarUnidades1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de variables:
int numero1, numero2, unidades1, unidades2 ;
// Entrada de datos:
System.out.print( "Digite un numero entero positivo: " ) ;
numero1 = Integer.parseInt( br.readLine( ) ) ;
System.out.print( "Digite otro numero entero positivo: " ) ;
numero2 = Integer.parseInt( br.readLine( ) ) ;
// Proceso de clculo:
// *******************
// Determina las cifras de las unidades en cada nmero:
unidades1 = numero1 % 10 ;
unidades2 = numero2 % 10 ;
// Intercambia solo las cifras de las unidades:
numero1 = numero1 - unidades1 + unidades2 ;
numero2 = numero2 - unidades2 + unidades1 ;
System.out.println( "**********************************************" ) ;
// Salida de resultados:
System.out.println( "Despues de intercambiar la cifra de las unidades,\n" +
"los numeros quedan asi:\nPrimer numero: " + numero1 +
Informtica I. Versin 1.0 Agosto de 2004.
108
Salida:
109
a.
100 200
A5
b.15
e. a + b 3
A2
3
c. a 2 + b 2 35c
d. 5 X 2 3X + 5
f . a 10 5
9.- Haga la secuencia de evaluacin de la expresin algebraica que hara el computador para:
(3 * 9 - 3 + 5/2 ) + 9 MOD 3 + (8 * 3 - 5) * (2/4) + (5 * 3 * 2 + 1) =
10.- Haga la codificacin Java de la expresin algebraica:
a 2 + b 2 58 3x 54
=
3,4 x 2,1y
1.- Disee un algoritmo que calcule el rea de un tringulo en funcin de las longitudes de sus lados.
rea=
a. rea de un circulo
=> rea = r 2
bh
2
4.- Disear un algoritmo a travs del cual se pueda calcular la siguiente expresin algebraica :
z=
y1 y 2
x1 x 2
5.- Disee un algoritmo para la conversin una medida de metros a pies y pulgadas.
6.- Elabore un algoritmo que convierta una temperatura dada en centgrados a fahrenheit.
Informtica I. Versin 1.0 Agosto de 2004.
110
7.- Dado un carcter alfabtico en maysculas, elabore un algoritmo que imprima en pantalla su
11.- Aplicando el teorema de Taylor a la funcin Seno se obtiene el siguiente polinomio que equivale
a esa funcin:
Sen(x) = P(x) =
x x3 x5 x7 x9
+
"
1! 3! 5! 7! 9 !
12.- Elabore un algoritmo para calcular el seno de un ngulo x usando este polinomio para siete (7)
trminos.
13.- Haga un algoritmo que convierta una medida de longitud en kilmetros a metros, centmetros,
gramos, libras.
15.- Realice un algoritmo que convierta unidades de fuerza en newtons a dinas.
16.- Elabore un algoritmo que convierta una unidad de presin en pascales a bares.
17.- Haga un algoritmo que calcule el rea de una cara de un cubo y su volumen.
Informtica I. Versin 1.0 Agosto de 2004.
111
18.- Elabore un algoritmo que convierta una unidad de volumen en metros cbicos m a litros y
centmetros cbicos.
19.- Lea dos puntos (x, y) y calcule la distancia entre ellos.
20.- Los siguientes son los mltiplos y submltiplos decimales (ver tabla), elabore un algoritmo que
lea un nmero dado en unidades y lo muestre en cada uno de sus mltiplos y submltiplos por
pantalla.
tera
giga
mega
kilo
hecto
deca
unidad
deci
centi
mili
micro
nano
pico
Smbolo
T
G
M
K
H
Da
D
C
M
N
P
Unidades
1.000.000.000.0
1.000.000.000
1.000.000
1.000
100
10
1
0.1
0.01
0.001
0.000.001
0.000.000.001
0.000.000.000.01
21.- Elabore un algoritmo que convierta una medicin de tiempo en segundos a horas, minutos y
segundos.
1 hora = 60 minutos
1 minuto = 60 segundos
Ejemplo: sea 34505 la cantidad digitada en segundos se debe mostrar en pantalla
Horas = 9
Minutos = 35
Segundos
= 5
112
UNIDAD 6.
SENTENCIAS DE CONTROL EN JAVA
Introduccin
Los algoritmos vistos hasta el momento han consistido en simples secuencias de instrucciones; sin
embargo, existen tareas ms complejas que no pueden ser resueltas empleando un esquema tan
sencillo, en ocasiones es necesario repetir una misma accin un nmero determinado de veces o
evaluar una expresin y realizar acciones diferentes en base al resultado de dicha evaluacin.
Para resolver estas situaciones existen las denominadas estructuras de control que poseen las
siguientes caractersticas:
Una estructura de control tiene un nico punto de entrada y un nico punto de salida.
Una estructura de control se compone de sentencias o de otras estructuras de control.
Tales caractersticas permiten desarrollar de forma muy flexible todo tipo de algoritmos an cuando
slo existen tres tipos fundamentales de estructuras de control:
Secuencial.
Alternativa.
Repetitiva.
A lo largo de esta leccin se presentarn las distintas estructuras de
control, la forma de representarlas en la notacin algortmica y las
correspondientes sentencias FORTRAN para poder utilizarlas en
nuestros programas.
Estructura secuencial
113
class EstructuraSecuencial1 {
// Mtodo principal:
public static void main( String args[ ] ) throws IOException {
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
double a, b, c; // Declaracin de las variables reales a, b y c.
// Lectura, va teclado, de las variables a y b:
System.out.print( "Digite el valor de la variable a: " ) ;
a = Double.parseDouble( br.readLine( ) ) ;
System.out.print( "Digite el valor de la variable b: " ) ;
b = Double.parseDouble( br.readLine( ) ) ;
// suma los valores de las variables a y b y lo asigna o
// guarda en la variable c:
c=a+b;
// Muestra el valor de c:
System.out.println( " a + b = " + c ) ;
System.exit( 0 ) ;
// Termine el programa (salir del sistema)
}
// Fin del mtodo main( )
}
// Fin de la clase EstructuraSecuencial1
Existe una forma alternativa de expresar una estructura secuencial escribiendo varias acciones en la
misma lnea pero utilizando el punto y coma ( ; ) como separador. Sin embargo, esta ltima notacin
es desaconsejable puesto que puede llegar a hacer el cdigo bastante difcil de leer.
leer a; leer b
c a + b; escribir c
Dado que las variables numricas a y b ya estuvieran
declaradas y hayan sido ledas, entonces las dos ltimas
instrucciones se escriben as en Java:
c = a + b ; System.out.println( Valor de c= + c ) ;
En Java:
import java.io.* ;
class EstructuraSecuencial2 {
public static void main( String args[ ] ) throws IOException {
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Lectura, va teclado, de las variables a y b:
System.out.print( "Digite el valor de la variable a: " ) ; double a =
Double.parseDouble( br.readLine( ) ) ;
System.out.print( "Digite el valor de la variable b: " ) ; double b =
Informtica I. Versin 1.0 Agosto de 2004.
114
Double.parseDouble( br.readLine( ) ) ;
// Calcule c y mustrelo:
double c = a + b ; System.out.println( " a + b = " + c ) ;
System.exit( 0 ) ;
// Termine el programa (salir del sistema)
}
// Fin del mtodo main( )
// Fin de la clase EstructuraSecuencial2
En java es:
if ( <expresin lgica> ) {
acciones
}
115
En java es:
if ( <expresin lgica> ) {
acciones
}
else {
acciones
}
116
En Java:
if ( radio > 0 ) {
longitud = 2 * Math.PI * radio ;
}
else {
System.out.println( Error ) ;
}
117
Salida:
Estructura multialternativa
Esta estructura evala una expresin que pueda tomar n valores (enteros, caracteres y lgicos pero
nunca reales) y ejecuta una accin o grupo de acciones diferente en funcin del valor tomado por la
expresin selectora.
La sintaxis de esta estructura es
la siguiente:
segun expresin
caso valor1:
accin 1
caso valor2:
accin 2
...
caso valorN:
accin n
otro caso:
accin
fin segn
118
case valorN:
// Accin N: secuencia de instrucciones
break ;
default:
// El caso default: es opcional
// Accin: secuencia de instrucciones
break ;
// Aqu, el break ; es opcional, pues es la ltima del bloque switch
}
119
120
Estructura repetitiva
La estructura repetitiva o iterativa permite, como su propio nombre lo indica, repetir una accin (o
grupo de acciones); dicha repeticin puede llevarse a cabo un nmero prefijado de veces o depender
de la evaluacin de una expresin lgica. Existen tres tipos de estructuras repetitivas: desde-hasta (
Para), mientras y repetir-hasta.
Estructura desde-hasta ( Para)
Esta estructura permite repetir la ejecucin de una accin o de un grupo de acciones un nmero
determinado de veces; la sintxis es la siguiente:
desde indice = inicio hasta fin [con valor de paso] hacer
accin
fin desde
La estructura repetitiva desde-hasta ( Para) se implementa as, en Java:
for( inicializacin; condicin; iteracin ) {
// Accin: secuencia de instrucciones
}
1. El ciclo ( bucle) for es controlado por una variable que, por su oficio, tambin se denomina variable de
control.
2. En su forma ms comn, la parte de inicializacin del ciclo asigna un valor inicial a la variable de control
del ciclo.
3. La condicin es una expresin booleana que analiza la variable de control del ciclo. Si el resultado de ese
anlisis es true (verdadero), el ciclo for contina. Si es false (falso), el ciclo termina.
4. La expresin iteracin determina cmo cambia el valor de la variable de control del ciclo en cada iteracin
del mismo.
Cdigo Java:
for( int n = 1; n <= 10; n = n + 1 ) {
System.out.println( n = + n ) ;
}
121
fin desde
El bucle anterior no se ejecuta nunca puesto que, de entrada, la condicin n <= 0 (con n = 10) arroja
false. Qu ocurrira si, en el ciclo anterior, se cambia < por > ? Analice y responda !!
Si queremos hacer lo anterior, por ejemplo con paso 2, el seudocdigo se puede escribir as:
desde n 10 hasta 0 con paso 2 hacer
escribir n
fin desde
122
Salida:
As queda en Java:
while( <Condicin> ) {
// Accin: conjunto de
// instrucciones que conforman el
// cuerpo del ciclo.
}
123
System.out.println( "*******************************" ) ;
while( radio < 0 ) {
// LLave de apertura del bloque while
// Lee de nuevo, va teclado, el radio:
System.out.print( "Digite el valor [ >= 0 ] del radio (cm): " ) ;
radio = Double.parseDouble( br.readLine( ) ) ;
System.out.println( "Radio dentro del ciclo: " + radio ) ;
}
// LLave de cierre del bloque while
System.out.println( "*******************************" ) ;
// Muestra el ltimo valor del radio:
System.out.println( "Ultimo valor del radio: " + radio ) ;
System.exit( 0 ) ;
// Termine el programa (salir del sistema)
}
// Fin del mtodo main( )
// Fin de la clase EstructuraMientras1
As queda en Java:
do {
// Accin: conjunto de
// instrucciones que conforman el
// cuerpo del ciclo.
} while( <Condicin> ) ;
124
Un aspecto muy importante de la presente estructura de control es que la expresin lgica se evala al
final; por tanto, el bucle se ejecuta al menos una vez, como una alternativa a la estructura anterior
(while), la cual podra nunca ejecutarse. El siguiente diagrama de flujo ilustra el ciclo haga-mientras:
Punto de entrada
Accin
Verdadero
Expresin
lgica
Falso
Punto de salida
125
A continuacin, la salida:
126
Ejercicios Resueltos
Ejercicio 1:- En una playa de estacionamiento cobran $ 2.5 por hora o fraccin. Disee un
algoritmo que determine cunto debe pagar un cliente por el estacionamiento de su vehculo,
conociendo el tiempo de estacionamiento en horas y minutos.
Algoritmo 1
INICIO
// Declaracin de variables
ENTERO horas, minutos
REAL pago
// Entrada de datos
LEER horas, minutos
// Si hay alguna fraccin de hora, incrementa las horas a pagar en una unidad
SI( minutos > 0 )
horas = horas + 1
// Determina el importe a pagar
pago = horas * 2.5
// Salida de resultados
IMPRIMIR pago
FIN
As queda en Java:
import java.io.* ;
class CobroEstacionamiento1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de variables:
int horas, minutos ;
float pago ;
// Entrada de datos:
System.out.print( "Digite el numero [entero] de horas: " ) ;
horas = Integer.parseInt( br.readLine( ) ) ;
System.out.print( "Digite el numero de minutos [0 a 59]: " ) ;
minutos = Integer.parseInt( br.readLine( ) ) ;
// Si hay alguna fraccin de hora, incrementa las horas a
// pagar en una unidad:
if( minutos > 0 ) {
Informtica I. Versin 1.0 Agosto de 2004.
127
horas += 1 ;
}
// Determina el importe a pagar:
pago = (float) (horas * 2.5) ;
// Promocione a (casting) tipo float
// Salida de resultados:
System.out.println( "Valor a pagar: $" + pago ) ;
System.exit( 0 ) ;
}
}
Salida:
Algoritmo 2
INICIO
// Declaracin de variables
ENTERO horas, minutos, horasPagar
REAL pago
// Entrada de datos
LEER horas, minutos
// Determina el nmero de horas a pagar
SI( minutos > 0 )
horasPagar = horas + 1
SINO
horasPagar = horas
// Determina el importe a pagar
pago = horasPagar * 2.5
// Salida de resultados
IMPRIMIR pago
FIN
En Java queda as:
import java.io.* ;
Informtica I. Versin 1.0 Agosto de 2004.
128
class CobroEstacionamiento2 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de variables:
int horas, minutos, horasPagar ;
float pago ;
// Entrada de datos:
System.out.print( "Digite el numero [entero] de horas: " ) ;
horas = Integer.parseInt( br.readLine( ) ) ;
System.out.print( "Digite el numero de minutos [0 a 59]: " ) ;
minutos = Integer.parseInt( br.readLine( ) ) ;
// Determina el nmero de horas a pagar:
if( minutos > 0 ) {
horasPagar = horas + 1 ;
}
else {
horasPagar = horas ;
}
// Determina el importe a pagar:
pago = (float) (horasPagar * 2.5) ;
// Salida de resultados:
System.out.println( "Valor a pagar: $" + pago ) ;
System.exit( 0 ) ;
}
}
Salida:
129
Ejercicio 2:- Disee un algoritmo que determine si n nmero es o no es, par positivo.
Algoritmo
INICIO
// Declaracin de variables
REAL numero
CADENA tipoNumero
// Entrada de datos
LEER numero
// Determina si el nmero es o no es, par positivo
SI( (numero %2 ==0) && (numero > 0) )
tipoNumero = "El nmero es par positivo"
SINO
tipoNumero = "El nmero no es par positivo"
// Salida de resultados
IMPRIMIR tipoNumero
FIN
As queda en Java:
import java.io.* ;
class EsParPositivo1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de variables:
float numero ;
String tipoNumero ;
// Entrada de datos:
System.out.print( "Digite un numero: " ) ;
numero = Float.parseFloat( br.readLine( ) ) ;
// Determina si el nmero es o no es, par positivo:
if( (numero %2 ==0) && (numero > 0) ) {
tipoNumero = "El numero es par positivo" ;
}
Informtica I. Versin 1.0 Agosto de 2004.
130
else {
tipoNumero = "El numero NO es par positivo" ;
}
// Salida de resultados:
System.out.println( tipoNumero ) ;
System.exit( 0 ) ;
} //Fin del mtodo main( )
}
Salida:
Ejercicio 3:- Disee un algoritmo que lea tres nmeros y determine el nmero mayor.
Algoritmo
INICIO
// Declaracin de variables
REAL numero1, numero2, numero3, numeroMayor
// Entrada de datos
LEER numero1, numero2, numero3
// Determina el mayor
numeroMayor = numero1
SI( numero2 > numeroMayor )
numeroMayor = numero2
SI( numero3 > numeroMayor )
numeroMayor = numero3
// Salida de resultados
Informtica I. Versin 1.0 Agosto de 2004.
131
IMPRIMIR numeroMayor
FIN
As queda en Java:
import java.io.* ;
class NumMay1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de variables:
float numero1, numero2, numero3, numeroMayor ;
// Entrada de datos:
System.out.print( "Digite el primer numero: " ) ;
numero1 = Float.parseFloat( br.readLine( ) ) ;
System.out.print( "Digite el segundo numero: " ) ;
numero2 = Float.parseFloat( br.readLine( ) ) ;
System.out.print( "Digite el tercer numero: " ) ;
numero3 = Float.parseFloat( br.readLine( ) ) ;
// Determina el nmero mayor:
numeroMayor = numero1 ;
if( numero2 > numeroMayor )
numeroMayor = numero2 ;
if( numero3 > numeroMayor )
numeroMayor = numero3 ;
// Salida de resultados:
System.out.println( "Numero mayor = " + numeroMayor ) ;
System.exit( 0 ) ;
}
}
Salida:
132
Ejercicio 4:- Una tienda ha puesto en oferta la venta al por mayor de cierto producto, ofreciendo
un descuento del 15% por la compra de ms de 3 docenas y 10% en caso contrario. Adems por
la compra de ms de 3 docenas se obsequia una unidad del producto por cada docena en exceso
sobre 3. Disee un algoritmo que determine el monto de la compra, el monto del descuento, el
monto a pagar y el nmero de unidades de obsequio por la compra de cierta cantidad de docenas
del producto.
Algoritmo
INICIO
// Declaracin de variables
REAL montopag, montocom, montodes, precio
ENTERO docenas, obsequio
// Entrada de datos
LEER docenas, precio
// Determina el monto de la compra
montocom = docenas * precio
// Determina el monto del descuento y el obsequio
SI( docenas > 3 ) {
montodes = 0.15 * montocom
obsequio = docenas - 3
}
SINO {
montodes = 0.10*montocom
obsequio = 0
}
// Determina el monto a pagar
montopag = montocom - montodes
// Salida de resultados
IMPRIMIR montocom, montodes, montopag, obsequio
FIN
As queda en Java:
import java.io.* ;
class OfertaDocenasProducto1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de variables:
float montopag, montocom, montodes, precio ;
int docenas, obsequio ;
Informtica I. Versin 1.0 Agosto de 2004.
133
// Entrada de datos:
System.out.print( "Digite el precio de la docena del producto: $ " ) ;
precio = Float.parseFloat( br.readLine( ) ) ;
System.out.print( "Cuantas docenas del producto has comprado? " ) ;
docenas = Integer.parseInt( br.readLine( ) ) ;
// Determina el monto ( valor) de la compra:
montocom = docenas * precio ;
// Determina el monto del descuento y el obsequio:
if( docenas > 3 ) {
montodes = 0.15f * montocom ;
obsequio = docenas - 3 ;
}
else {
montodes = 0.10f * montocom ;
obsequio = 0 ;
}
// Determina el monto a pagar
montopag = montocom - montodes ;
// Salida de resultados:
System.out.println( "Valor de la compra: $ " + montocom ) ;
System.out.println( "Valor del descuento: $ " + montodes ) ;
System.out.println( "Neto a pagar: $ " + montopag ) ;
System.out.println( "Por su compra, se le ha obsequiado: " +
obsequio + " docenas." ) ;
System.exit( 0 ) ;
}
}
Salida:
134
Ejercicio 5:- Disee un algoritmo que lea un nmero de tres cifras y determine si es o no capica.
Un nmero es capica si es igual al revs del nmero.
Observacin
Como el nmero tiene tres cifras, para ser capica basta con que la cifra de las unidades sea igual
// Entrada de datos
LEER numero
// Si el nmero tiene tres cifras...
SI(numero >= 100 && numero <= 999 ){
// Determina la cifra de las unidades y la cifra de las centenas
unidades = numero % 10
centenas = numero / 100
// Determina el tipo de nmero entre capica o no capica
SI( unidades == centenas )
tipoNumero = "El nmero es capica"
SINO
tipoNumero = "El nmero no es capica"
// Muestra el tipo de nmero
IMPRIMIR tipoNumero
}
SINO
IMPRIMIR "Ingrese un nmero de tres cifras"
FIN
As queda en Java:
import java.io.* ;
class Capicua1 {
public static void main( String args[ ] ) throws IOException {
Informtica I. Versin 1.0 Agosto de 2004.
135
Salida:
136
Ejercicio 6:- Disee un algoritmo que califique el puntaje obtenido en el lanzamiento de tres
dados con base a la cantidad de 6s obtenidos, de acuerdo a lo siguiente: tres seis, excelente; dos
seis, bien; un seis, regular; ningn seis, mal.
Algoritmo
INICIO
// Declaracin de variables
ENTERO dado1, dado2, dado3
CADENA calificacion
// Entrada de datos
LEER dado1, dado2, dado3
// Determina la calificacin
SI( dado1 + dado2 + dado3 == 18 )
calificacion = "Excelente"
SINO SI( dado1 + dado2 == 12 || dado2 + dado3 == 12 || dado3 + dado1 == 12 )
calificacion = "Bin"
SINO SI( dado1 == 6 || dado2 == 6 || dado3 == 6 )
calificacion = "Regular"
SINO
calificacion = "Mal"
// Salida de resultados
IMPRIMIR calificacion
FIN
As queda en Java:
import java.io.* ;
class LanzarTresDados1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de variables:
Informtica I. Versin 1.0 Agosto de 2004.
137
Salida:
138
Ejercicio 7:- Una compaa dedicada al alquiler de automviles cobra un monto fijo de $ 30 para
los primeros 300 km de recorrido. Para ms de 300 km y hasta 1000 km, cobra un monto
adicional de $ 0.15 por cada kilmetro en exceso sobre 300. Para ms de 1000 km cobra un
monto adicional de $ 0.10 por cada kilmetro en exceso sobre 1000. Los precios ya incluyen el
18% del impuesto general a las ventas, IGV. Disee un algoritmo que determine el monto a pagar
por el alquiler de un vehculo y el monto includo del impuesto.
Algoritmo
INICIO
// Declaracin de variables
REAL kilomrec, montopag, montoigv, montofijo = 30, igv = 0.18
// Entrada de datos
LEER kilomrec
// Determina el monto a pagar
SI( kilomrec <= 300 )
montopag = montofijo
SINO SI( kilomrec <= 1000 )
montopag = montofijo + 0.15 * (kilomrec - 300)
SINO
montopag = montofijo + 0.15 * 700 + 0.10 * (kilomrec - 1000)
// Segn el enunciado, para determinar el monto del impuesto (montoigv) tenga en
// cuenta que: x + igv * x = montopag, de donde x = montopag / (1 + igv).
// Entonces montoigv = igv * x = igv * montopag / (1 + igv); o sea:
montoigv = igv * montopag / (1 + igv)
// Salida de resultados
IMPRIMIR montopag, montoigv
FIN
As queda en Java:
import java.io.* ;
class AlquilerAutos1 {
public static void main( String args[ ] ) throws IOException {
// Creacin del objeto br de la clase BufferedReader para invocar el
// mtodo readLine( ) que lee datos ingresados va teclado:
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
// Declaracin de dos constantes:
Informtica I. Versin 1.0 Agosto de 2004.
139
Salida:
140
Ejercicio 8:- Disee un algoritmo que determine quines son contemporneos entre Juan, Mario
y Pedro.
Algoritmo
INICIO
// Declaracin de variables
ENTERO juan, mario, pedro
CADENA contemporaneos
// Entrada de datos
LEER juan, mario, pedro
// Determina quienes son contemporneos
SI( juan == mario && mario == pedro )
contemporaneos = "Los tres son contemporneos"
SINO SI( juan == mario )
contemporaneos = "Juan y Mario son contemporneos"
SINO SI( juan == pedro )
contemporaneos = "Juan y Pedro son contemporneos"
SINO SI( mario == pedro )
contemporaneos = "Mario y Pedro son contemporneos"
SINO
contemporaneos = "No hay contemporneos"
// Salida de resultados
IMPRIMIR contemporaneos
FIN
Ejercicio 9:- El promedio de prcticas de un curso se calcula con base a cuatro prcticas
calificadas de las cuales se elimina la nota menor y se promedian las tres notas ms altas. Disee
un algoritmo que determine la nota eliminada y el promedio de prcticas de un estudiante.
Algoritmo
INICIO
// Declaracin de variables
REAL pc1, pc2, pc3, pc4, pcmenor, promedio
// Entrada de datos
LEER pc1, pc2, pc3, pc4
// Determina la nota menor
pcmenor = pc1
SI( pc2 < pcmenor )
pcmenor = pc2
Informtica I. Versin 1.0 Agosto de 2004.
141
// Determina el promedio
promedio = (pc1 + pc2 + pc3 + pc4 - pcmenor ) / 3
// Salida de resultados
IMPRIMIR promedio, pcmenor
FIN
Ejercicio 10:- Disee un algoritmo que lea tres longitudes y determine si forman o no un
tringulo. Si es un tringulo, determine de qu tipo de tringulo se trata entre: equiltero (si tiene
los tres lados iguales), issceles (si tiene dos lados iguales) o escaleno (si tiene tres lados
desiguales). Considere que para formar un tringulo se requiere que: "el lado mayor sea menor
que la suma de los otros dos lados".
Algoritmo
INICIO
// Declaracin de variables
REAL L1, L2, L3, suma
CADENA tipoRectangulo
L1
// Entrada de datos
LEER L1, L2, L3
L3
L2
142
INICIO
// Declaracin de variables
ENTERO a, b, c, menor
// Entrada de datos
LEER a, b, c
// Determina el menor
// ****************
// Aqu a, b y c podran ser positivos:
SI( a > 0 ){
menor = a
SI( b > 0 && b < menor )
menor = b
SI( c > 0 && c < menor )
menor = c
}
// Aqu slo b y c podran ser positivos
SINO SI( b > 0 ){
menor = b
SI( c > 0 && c < menor )
menor = c
}
// Aqu slo c podran ser positivos
SINO SI( c > 0 ){
menor = c
}
// Guardamos el indicador -1 para saber que no hay positivos:
SINO
menor = -1
// Salida de resultados
SI( menor != -1 )
IMPRIMIR menor
SINO
IMPRIMIR "No se ingres ningn nmero positivo"
FIN
Ejercicio 12:- Disee un algoritmo que lea tres nmeros y los imprima de mayor a menor y de
menor a mayor.
Algoritmo
INICIO
// Declaracin de variables
REAL n1, n2, n3, mayor, menor, medio
// Entrada de datos
LEER n1, n2, n3
// Determina el menor:
menor = n1
SI( n2 < menor )
menor = n2
SI( n3 < menor )
menor = n3
Informtica I. Versin 1.0 Agosto de 2004.
143
// Determina el mayor:
mayor = n1
SI( n2 > mayor )
mayor = n2
SI( n3 > mayor )
mayor = n3
// Determina el medio:
medio = n1+n2+n3-mayor-menor
// Imprime en orden ascendente:
IMPRIMIR menor, medio, mayor
// Imprime en orden descendente
IMPRIMIR mayor, medio, menor:
FIN
Ejercicio 13:- A continuacin, se muestra una aplicacin Java que solicita nmeros va teclado y
determina el menor y el mayor de ellos:
import java.io.* ;
class MinMay3A {
public static void main( String args[ ] ) throws IOException {
InputStreamReader isr = new InputStreamReader( System.in ) ;
BufferedReader br = new BufferedReader( isr ) ;
//BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ;
System.out.print( "Digite la cantidad de numeros que va a ingresar: " ) ;
int n = Integer.parseInt( br.readLine( ) ) ;
System.out.println( ) ;
//Deje una lnea en blanco.
double num = 0, min = 0, may = 0 ;
for( int k = 1; k <= n; k ++ ) {
System.out.print( "Digite un numero: " ) ;
num = Double.parseDouble( br.readLine( ) ) ;
System.out.println( ) ;
//Deje una lnea en blanco.
if( k == 1 ) {
min = num ;
//Que el PRIMER nmero ledo haga de
may = num ; //nmero menor y de nmero mayor.
}
if( num < min ) {
min = num ;
}
if( num > may ) {
Informtica I. Versin 1.0 Agosto de 2004.
144
may = num ;
}
}
System.out.println( "*****************************************" ) ;
System.out.println( "\nValor minimo: " + min ) ;
System.out.println( ) ;
//Deje una lnea en blanco.
System.out.println( "Valor maximo: " + may ) ;
System.out.println( ) ;
//Deje una lnea en blanco.
System.exit( 0 ) ;
}
}
Salida:
Ejercicio 14:- Disee un algoritmo para obtener el grado de eficiencia de un operario de una
fbrica de tornillos, de acuerdo a las siguientes condiciones que se le imponen para un perodo de
prueba:
145
Algoritmo 1
INICIO
// Declaracin de variables
ENTERO torpro, tordef, grado
// Entrada de datos
LEER torpro, tordef
// Determina el grado de eficiencia
SI( tordef < 200 ){
SI( torpro > 10000 )
grado = 8
SINO
grado = 6
}
SINO{
SI( torpro > 10000 )
grado = 7
SINO
grado = 5
}
// Salida de resultados
IMPRIMIR grado
FIN
Algoritmo 2
INICIO
// Declaracin de variables
ENTERO torpro, tordef, grado
// Entrada de datos
LEER torpro, tordef
// Determina el grado de eficiencia:
SI( tordef < 200 && torpro > 10000 )
grado = 8
SINO SI( tordef < 200 )
grado = 6
SINO SI( torpro > 10000 )
grado = 7
SINO
grado = 5
// Salida de resultados
IMPRIMIR grado
FIN
Informtica I. Versin 1.0 Agosto de 2004.
146
Ejercicio 15:- Se cuenta con los votos obtenidos por Juan, Pedro y Mara en una eleccin
democrtica a la presidencia de un club. Para ganar la eleccin se debe obtener como mnimo el
50% del total de votos ms 1. En caso que no haya un ganador, se repite la eleccin en una
segunda vuelta, yendo a sta los dos candidatos que obtengan la ms alta votacin. Se anula la
eleccin en caso de producirse un empate doble por el segundo lugar o un empate triple. Disee
un algoritmo que determine el resultado de la eleccin.
Algoritmo
INICIO
// Declaracin de variables:
ENTERO vjuan, vpedro, vmaria, vmingan
CADENA resultado
// Entrada de datos:
LEER vjuan, vpedro, vmaria
// Determina la votacin mnima para ganar:
vmingan = (vjuan + vpedro + vmaria) / 2 + 1
// Determina el resultado de la eleccin:
SI( vjuan >= vmingan )
resultado = "Gana Juan"
SINO SI( vpedro >= vmingan )
resultado = "Gana Pedro"
SINO SI( vmaria >= vmingan )
resultado = "Gana Mara"
SINO SI( vpedro > vjuan && vmaria > vjuan )
resultado = "Pasan a la segunda vuelta Pedro y Mara"
SINO SI( vpedro > vmaria && vjuan > vmaria )
resultado = "Pasan a la segunda vuelta Pedro y Juan"
SINO SI( vmaria > vpedro && vjuan > vpedro )
resultado = "Pasan a la segunda vuelta Mara y Juan "
SINO
resultado = "Eleccin anulada"
// Salida de resultados:
IMPRIMIR resultado
FIN
Ejercicio 16:- Disee un algoritmo que lea un nmero entero de 3 cifras, y forme el mayor
nmero posible con las cifras del nmero ingresado. El nmero formado debe tener el mismo
signo que el nmero ingresado.
Algoritmo
INICIO
// Declaracin de variables:
ENTERO num1, num2, numaux, uni, dec, cen, menor, mayor,medio
// Entrada de datos:
LEER num1
// Si el nmero tiene tres cifras...
SI( ( num1 >= 100 && num1 <= 999 ) || ( num1 >= -999 && num1 <= -100 ) ){
Informtica I. Versin 1.0 Agosto de 2004.
147
}
SINO
IMPRIMIR "El nmero no tiene tres cifras"
FIN
Ejercicio 17:- Hallar la suma de N nmeros, a travs de una estructura repetitiva
algoritmo suma_nmeros
Entero cantNum, num, auxi
Leer cantNum
auxi = cantNum
SUMA = 0 // la suma parcial es 0 al inicio
MIENTRAS QUE cantNum > 0 HACER
LEER num
SUMA = SUMA+num
Informtica I. Versin 1.0 Agosto de 2004.
148
cantNum = cantNum - 1
FIN MIENTRAS
ESCRIBIR la suma de los , auxi , nmeros es , SUMA
Ejercicio 18:- Calcular el factorial de un nmero N, usando la estructura desde-hasta.
Inicio
Entero n, i, fact
leer n
fact = 1
desde i = 1 hasta n hacer
fact = fact * i
fin_desde
escribir el factorial del nmero, n, es, fact
Fin
Ejercicio 19:- Calcular los factoriales de n nmeros ledos por el teclado.
El problema consiste en realizar una primera estructura repetitiva de n iteraciones del algoritmo de
clculo del factorial, que a su vez se efecta con una segunda estructura repetitiva.
Inicio
Entero n, i, j, num, fact
leer n
// lectura de la cantidad de nmeros
desde i = 1 hasta n hacer
leer num
fact = 1
desde j = 1 hasta num hacer
fact = fact * j
fin_desde
escribir el factorial del nmero, num, es, fact
fin_desde
Fin
Ejercicio 20:- Escribir un algoritmo que permita calcular el inters producido por un capital a las
tasas de inters comprendidos en el rango desde 10 a 20 % de 2 en 2 puntos, a partir de un capital
dado. Utilice el ciclo mientras.
Inicio
Entero capital, tasa
Real interes
leer capital
tasa = 10
mientras tasa <= 20 hacer
interes = tasa * 0.01 * capital
// tasa * capital / 100 = tasa * 0.01 * capital
escribir inters producido, interes
tasa = tasa + 2
fin_mientras
escribir ltimo valor de tasa (fuera del ciclo) = , tasa
Fin
Los sucesivos valores de la tasa sern 10, 12, 14, 16,18,20 y 22; de modo que al tomar tasa el valor
22, se detendr el bucle y se escribir el ltimo valor de tasa. Notar que NO se calcular el inters
para 22, pues este valor hace que la condicin sea falsa produciendo la salida y terminacin del ciclo.
Informtica I. Versin 1.0 Agosto de 2004.
149
Supongamos que ahora nos interesa conocer este dato de 3 en 3 puntos; para ello se cambia la ltima
lnea del bucle por tasa = tasa + 3. Ahora los valores que tomar tasa sern 10, 13, 16, 19 saltando a
22, el cual ser el ltimo valor que ocasionar la salida del ciclo y se imprimir fuera de l.
Ejercicio 21:- Escribir un programa y una funcin que por medio del paso por valor obtenga el
mximo comn divisor de dos nmeros.
// Algoritmo Maximo_comun_divisor
// Programa principal:
Inicio
Entero x, y, m
leer x, y
m = mcd (x, y)
escribir x, y, m
Fin
// Funcin (en Java se denomina mtodo):
Entero mcd(entero a, entero b)
Inicio
Entero resp
mientras a <> b hacer
si a > b
entonces a = a - b
sino
b=b-a
fin_si
fin_mientras
resp = a
fin
y
25
a
10
5
b
25
15
5
mcd
150
siguiente funcin: y = 3x - 4.
Ejemplo: la pareja (2,2) s pertenece a esta funcin.
3. Disee un algoritmo que determine e imprima la hora correspondiente al segundo despus de una
ecuacin cuadrtica
aX2 + bX + c = 0 con a,b y c constantes y a 0
La formula general para hallar su solucin es:
x=
b b 2 4ac
2a
imaginarias, si existen.
6. Escribir un algoritmo que permita determinar cul es el ganador de la matricula de honor de entre
151
8. Disear un algoritmo que permita descomponer un nmero ( 10 <= x <= 999 ) en sus dgitos e
imprimirlos.
9. Elabore un algoritmo que descomponga un nmero entero (mximo de tres cifras) en sus dgitos y
luego imprima el mes en letras (ejemplo: si se digita el nmero 02011999 entonces imprime "2 de
enero de 1999.")
13. Lea dos nmeros por teclado y determine si uno es divisor del otro.
14. Se lee un nmero de mximo tres dgitos (verifique que efectivamente sea de mximo tres dgitos)
y se debe determinar si es un nmero capica, es decir, que ledo de izquierda a derecha es igual
que ledo de derecha a izquierda. Por ejemplo: 727, 343, etc.
15. Usted debe realizar un algoritmo para un cajero automtico, que dispone de billetes de algunas
denominaciones existentes (10000, 20000 y 50000), de forma que se le indique una cantidad a
pagar y determine cul es la combinacin apropiada de billetes para formarla. La cantidad que se
va a retirar debe ser un mltiplo de 10000 y el algoritmo debe chequar que as sea.
16. En una universidad se ha variado el sistema de calificaciones, por tanto se requiere un algoritmo
que indique la valoracin en letras cuando se tiene la nota en nmeros, siguiendo la tabla mostrada
a continuacin
Nota Numrica Valoracin en letras
0.0 1.0
P (Psimo)
1.1 2.0
M (Mal)
2.1 2.9
R (Regular)
3.0 4.0
B (Bien)
4.1 5.0
E (Excelente)
17. En una multinacional se cuenta con tres departamentos de ventas, en los cuales los empleados
152
de los tres departamentos, indique cunto devengarn los empleados de cada uno de los tres
departamentos en un mes dado.
18. Realice un algoritmo que indique el valor de la funcin f(x) para un valor de x determinado por el
f ( x) =
x 5x + 8
x 3x 2 + 2x
3
x 10
10 < x < 20
x > 20
19. En una organizacin se tiene a los empleados agrupados por categora, los de categora 1 ganan
$20.000, los de categora 2, $15.000, los de categora 3, $10.000 y los de categora 4, $7.500. Se
quiere un algoritmo que permita determinar cuanto debe pagarse a un empleado si se conoce el
nmero de horas que trabaj durante el mes y la categora a la que pertenece. Se sabe que a todos
se les descuenta un 7.2% por concepto de salud, y si el salario total devengado (mensual) es menos
de 1000.000, se le da un subsidio del 15% sobre su salario mensual (sin descuentos).
20. Se debe leer un nmero y determinar en qu categora se encuentra; se sabe que la categora A,
son los nmeros entre 0 y 2 inclusive, la categora B son los nmeros entre 3 y 6 inclusive, la
categora C, los nmeros 7 y 8, y la categora D el nmero 9. (Adivin, los nmeros validos son
entre 0 y 9).
21. Se quiere determinar el valor de depreciacin de un artculo en una empresa, se sabe que el valor
de depreciacin anual se determina dividiendo el valor de compra del mismo, entre el nmero de
aos de vida til; la vida til se determina de acuerdo a la clase de artculo, los edificios tienen 20
aos, la maquinaria, muebles y enseres, 10 aos, los vehculos 5 aos y los computadores 3.
22. En un concesionario de vehculos, se pagan las comisiones a los vendedores segn el valor de la
venta (ver tabla). Al final del mes se desea saber Cunto gan un vendedor en total por todas las
comisiones, si se sabe que hizo 4 ventas?
Valor de Venta
Hasta 10.000.000
Ms de 10 y Menos de 15
millones
Mas de 15 millones
10%
23. En una empresa comercializadora, cada vendedor debe realizar 5 ventas al mes, por cada venta
ganar una comisin de acuerdo a la tabla de comisiones. Cada vendedor tiene un salario bsico
(que usted debe leer) y de acuerdo a la suma del bsico y las comisiones, se le genera un
descuento para salud, pensiones y otros como seala la tabla de descuentos. Usted debe imprimir
el cdigo del vendedor, el total de sus ventas, el total ganado por comisiones, el total devengado
(bsico + comisiones), el total de descuentos, y el salario a pagar por cada empleado.
Informtica I. Versin 1.0 Agosto de 2004.
153
Valor Venta
0-1.000.000
1.000.001-1.500.000
1.500.001 ms
Comisin
5%
7%
10%
Devengado (salario+comisiones)
0-500.000
500.001-1.000.000
1.000.001 ms
Descuentos
5%
6%
8%
24. El teniente encargado del planetario desea que se disee un algoritmo para que al digitar el
nombre del da indique el astro que dio origen a ese nombre. Recuerde los astros:
Nombre del da
Domingo
Sbado
Viernes
Jueves
Mircoles
Martes
Lunes
Astro
Sol
Saturno
Venus
Jpiter
Mercurio
Marte
Luna
25. Realice el algoritmo para un algoritmo que calcule si un tringulo es issceles, equiltero o
26. Haga un algoritmo que muestre en pantalla si un ngulo es: recto, obtuso o agudo
Recto = 90
Agudo < 90
Obtuso > 90
27. Con relacin a sus ngulos un tringulo puede ser:
Hallar una cuota mensual conociendo el inters efectivo mensual (i), nmero de meses (n),
y el precio del articulo
Informtica I. Versin 1.0 Agosto de 2004.
154
Cuota = Precio x
i(1 + i )
(1 + i ) n 1
(1 + i ) n 1
n
i(1 + i )
Hallar el valor futuro de una precio actual conociendo el inters efectivo mensual (i), y el
nmero de meses (n)
Valor Futuro = Precio x (1 + i)n
Elabore un algoritmo que permita de un men de opciones calcular el valor deseado. (cuota, precio
o valor futuro)
30%
= 0.3
Nota: si i = 30% se debe usar i como: i =
100%
30. Elabore un algoritmo que muestre el dgito que ms se repite en un nmero de 5 cifras, en caso de
no repetirse ninguno imprimir un mensaje que diga "no hay dgitos repetidos".
31. El recargo por trabajar horas nocturnas en una empresa es del 70%, el recargo por trabajar festivos
es del 100%, haga un algoritmo que lea los das laboradas por un empleado, las horas nocturnas el
valor de la hora normal laborada y calcule e imprima el sueldo a pagar junto con el nombre del
empleado.
32. Elabore un algoritmo que tenga cuatro niveles de seguridad para un programa, si el usuario logra
ingresar imprimir el mensaje "Bienvenido", en caso contrario imprimir "Error clave" y el nivel del
error.
33. Realice un algoritmo que lea cuatro nmeros y los muestre ordenados de mayor a menor. Ejemplo:
algoritmo que calcule el valor de la matricula si los precios por categora son:
Infantil 5-8 aos $38.000=
Juvenil 9-17 aos $40.100=
Adultos mayores a 18 aos $45.800=
Se debe hacer un recargo a la matricula del 10% para la liga. Los nios menores a 5 aos no
pueden ser matriculados
155
35. A los profesores de cierta universidad se les paga por horas ctedra dictadas de 45 minutos.
Elabore un algoritmo que lea el nmero de horas dictadas en un mes, siendo estas horas de 60
minutos, y calcule el pago mensual para el profesor. Tenga en cuenta que a los profesores se les
cancela segn la siguiente categora, donde se indica el precio de la hora ctedra :
4
3
2
1
$ 35.400=
$ 29.200=
$ 25.000=
$ 22.500=
recuerde el m.c.m. como su nombre lo indica es el menor mltiplo comn de dos o mas nmeros.
Ejemplo: sean los nmeros 8 y 6.
m.c.m. (8, 6) = 24
39. Al divisor comn que es mayor que todos los divisores comunes de dos nmeros (A, B) se le
llama mximo comn divisor (m.c.d.). Elabore un algoritmo para calcular el m.c.d. de dos
nmeros. Ejemplo: sea 8 y 12 (investigue el algoritmo de Euclides).
m.c.d. (8,12) = 4
156
40. Dos nmeros son amigos, si cada uno de ellos es igual a la suma de los divisores del otro.
Divisores
Suma
220
220
1
2
4
5
10
11
20
22
44
55
110
284
a.
1 3 5 7 9
+ + "
2 4 6 8 10
c.
1 34 56 7 8 9 10
+
+
"
2 4
6
8 10
b.
1 3 5 7
9
+ +
"
2 ! 4 ! 6! 8! 10!
1 3
5
7
9
d. + +
"
5 10 15 20 25
157
48. Desarrolle un algoritmo que impriman la suma de los trminos de las siguientes series:
Suma = x
x3 x5 x7
+
x2 x4 x6
Suma = 1 +
+
+
+ " hasta N terminos
2! 4! 6!
Suma = 1 + x +
x3 x5 x7
xn
+ + +"
3! 5! 7!
n!
Suma = 1 + x +
x2 x3 x4
xn
+ +
+"
(no son exactamente n trminos)
2! 3! 4!
n!
49. Escriba un algoritmo que calcule el factorial de un nmero N. (Ejemplo: el factorial de 4 es igual
a: 1x2x3x4=24)
50. Determine el valor del combinatorio C(m,n), definido como
m!
n !(m n )!
51. Escriba un algoritmo para calcular si un nmero es primo o no, recuerde que los nmeros primos
son aquellos que solo son divisibles por la unidad y por ellos mismos: ejemplo 5, 11, 17, etc..
52. Calcular mediante un algoritmo cuantos nmeros primos existen entre 1 y un nmero M dado por
el usuario.
53. Escriba un algoritmo que muestre el cuadrado de los nmeros del 1 al 50.
Informtica I. Versin 1.0 Agosto de 2004.
158
54. Disear un algoritmo para determinar la cantidad de mujeres y de hombres que hay en un grupo de
N estudiantes (mximo 45). Adems se debe hallar el promedio de edad y de estatura del grupo.
(el usuario digitar para cada integrante del grupo, su sexo, edad y estatura).
de un total de N
aspirantes. Los aspirantes deben cumplir las siguientes condiciones para ser aceptados:
Mayores de edad
Ser ingeniero titulado
Tener experiencia laboral
Al final el algoritmo debe mostrar el total de aspirantes aceptados.
56. Desarrolle un algoritmo que permita calcular el valor de la tangente de un ngulo dado en grados
entre 1 y 100.
58. Leer N nmeros y calcular el mayor sin importar que se repita.
59. Leer N nmeros y calcular el menor sin importar que se repita.
60. Leer una serie de M nmeros y mostrar al final cuantos son positivos.
61. Calcular la suma de los cuadrados de los nmeros comprendidos entre 1 y N.
62. Leer 10 nmeros y al final imprimir el promedio de estos.
63. Desarrolle un algoritmo que calcule el valor de usando la siguiente serie:
2 4 4 6 6 8 8 10
"
3 3 5 5 7 7 9 9
= 4
El nmero de trminos debe ser dado por el usuario (entre mayor sea el nmero de trminos mayor
ser la precisin del clculo).
64. Se desea calcular la resistencia equivalente en paralelo de un circuito de N resistencias, para lo
1
1
1
1
+
+ "+
R1 R2 R3
RN
65. Se desea calcular la resistencia equivalente en serie de un circuito de N resistencias, para lo cual se
159
(ao bisiesto s es mltiplo de 4, pero s es mltiplo de 100 deber ser tambin mltiplo de 400).
72. Realizar la tabla de multiplicar de x (nmero digitado por el usuario, puede ser positivo o
negativo), desde 1 hasta n (nmero digitado por el usuario, puede ser positivo o negativo).
73. Dada la siguiente serie determine el valor de la suma de sus trminos. La serie termina cuando
promedio de cada estudiante, y el nmero de estudiantes que perdieron la materia (menos de 3.0).
NOTA: La nota definitiva de un estudiante corresponde al promedio simple de sus notas.
76. Se deben leer nmeros hasta que se digite 99 (el 99 no se debe contar), y determinar cuantos
primos hay, y cuantos pares. (recuerde que estas dos condiciones no son exclusivas).
77. Leer un nmero en base 10, y determinar su equivalente en cualquier base entre 2 y 16. (Puede
78. Elabore un algoritmo para que dos personas puedan jugar tres en lnea. El ganador es quien
primero logre colocar tres figuras en lnea (ver figura). Como ayuda muestre los cuadros
numerados del 1 al 9 a los jugadores para que escojan su jugada.
1 2 3
4 5 6
7 8 9
Informtica I. Versin 1.0 Agosto de 2004.
o x o
o x x
x x o
160
ALGORITMO
INICIO
Entero n, i, total
Imprimir "Digite un nmero entero: "
Leer( n)
Para i = 0 Hasta n
total = total + (2*i)
Fin
Imprimir "El resultado es:" & total
FIN
ALGORITMO
INICIO
Real n, h=0, total = 0
Imprimir "Digite un nmero: "
Leer(n)
mientras h <> n
Imprimir "Digite un nmero "
Leer (h)
total=total+h
fin
Imprimir"El total es " & total
FIN
80. Elabore un algoritmo que lea cinco notas de (n) nmeros de estudiantes, y que calcule e imprima
el promedio de cada alumno y el promedio del grupo adems de la nota del estudiante de mayor y
menor promedio.
81. Un nmero es perfecto si la suma de sus divisores excepto l mismo es igual al propio nmero.
Ejemplos:
Nmero:
Divisores--->
6
1
2
3
28
1
2
4
7
14
36
1
2
3
4
6
9
12
18
161
Suma 6
28
55
de adivinar dicho nmero, el algoritmo debe pedir el nmero de partidas, intercalar los turnos para
adivinar, mostrar el ganador por partida y el ganador final. El nmero debe estar entre 0-9. (Use la
funcin aleatorio.)
83. Elabore un algoritmo que lea las ventas de (n) nmero de vendedores, para los productos (A, B, C,
D y C), si los precios de los productos son ($1000, $2345, $3876, $1235 y $550) respectivamente,
calcule el nmero individual y total de productos vendidos, las ventas totales por producto, el
promedio total de ventas, el producto mas vendido, el menos vendido, el vendedor que ms ventas
realiz.
84. Realice un algoritmo que calcule la suma de (n) nmeros, el producto de estos y cuantos de estos
son negativos y cuantos positivos. Estos datos deben ser mostrados por pantalla.
85. Haga un algoritmo que lea las notas de (n) estudiantes, que indique el nmero de estudiantes que
ganaron la materia (mayor o igual a 3.0), el numero de los que la perdieron (menor o igual a 3),
adems de indicar cuantos deben habilitar la materia (notas entre 2.5 y menores a 3.0). Todos los
datos deben ser mostrados por pantalla.
86. Realice un algoritmo que lea (n) nmeros y halle el mayor nmero par, el mayor impar, y el
producto de estos dos nmeros. Estos datos deben ser mostrados por pantalla.
87. Elabore un algoritmo para calcular de (n) nmeros ledos cuantos son primos y cuantos no, y los
(base 2) y un octal (base 8). Utilice instrucciones repetitivas (use el operador residuo).
89.
Un profesor necesita calcular las notas finales de su curso, para ello dispone de 7 notas, las
3 primeras componen la nota definitiva de quiz y talleres con un valor de 25%, la 4 nota
corresponde al primer examen parcial con un 25%, la 5 al segundo examen parcial con un 25%,
las dos ultimas (6 examen escrito y 7 trabajo opcional) al examen final con un valor de 25%.
162
Desea conocer tambin cuantos aprobaron el curso (notas superiores a 3.0) y cuantos no
cumplieron con los objetivos de este (notas menores a 3.0) y tambin obtener la mejor nota para
promover este estudiante como monitor de la materia para el prximo semestre. (estos ltimos
datos se deben mostrar por pantalla al final del calculo de las notas finales de todo el curso).
90. Elabore un algoritmo que imprima cual es el vendedor del mes de una empresa.
Tabla de Precios
Producto
A
B
C
Precio
$57000
$62000
$83000
Para lograr el clculo se leen las cantidades de productos vendidos por cada uno de los M
vendedores de la empresa y siguiendo la tabla de precios se determina el mejor como aquel que
mayores ventas haya tenido.
91. Use la siguiente frmula para calcular la raz cuadrada de un nmero entero positivo:
Raz = 0.5* ( X 1 +
N
)
X1
Donde N es el nmero del que se desea conocer la raz y X1 es una variable que se le asigna un
valor inicial de 1.
Con estos dos valores iniciales se obtiene el primer valor de la variable Raz. Si el valor absoluto
de |Raz - X1| es mayor a 0.0000001 se le reasignar a X1 el contenido de la variable Raz y se
har un nuevo calculo hasta que el valor absoluto sea menor, que es cuando se obtiene el valor
real de la raz.
92. Escriba un programa que calcule el resultado de la siguiente serie para N trminos.
X2 X4 X6
R = 1
+
+"
3!
5!
7!
93. Algunos pueblos de Rusia emplean el siguiente mtodo para multiplicar: escriben los dos factores
uno al lado del otro y se forman con ellos dos columnas: debajo del factor que est a la izquierda
se toma la mitad en nmeros enteros, es decir despreciando fracciones, y de esta mitad se toma la
mitad, y as sucesivamente hasta llegar a 1; debajo del factor que est a la derecha, y
paralelamente, se escribe su duplo, y as sucesivamente hasta emparejar con el ultimo nmero de
la columna de la izquierda, como puede verse en el ejemplo, se tachan de la columna de la derecha
todos los nmeros colocados enfrente de los nmero pares de la otra columna y se suman todos los
nmeros no tachados de esta columna; esta suma ser el resultado de la multiplicacin.
Elabore un algoritmo que emplee este mtodo para multiplicar dos nmeros.
Ejemplo: Multiplicar 22 x 6 = 132
Informtica I. Versin 1.0 Agosto de 2004.
163
22
11
5
2
1
6
12
24
48
96
132
164