Você está na página 1de 164

Universidad Autnoma de Occidente

UNIVERSIDAD AUTNOMA DE OCCIDENTE


FACULTAD DE INGENIERAS DEPARTAMENTO DE CIENCIAS DE LA INFORMACIN PROGRAMA DE INGENIERA INFORMTICA

INFORMTICA 1 (Algoritmos con Java)


MATERIAL RECOPILADO POR LOS PROFESORES J. ANTONIO LEMOS B. Y EDUARDO VICTORIA Z. SANTIAGO DE CALI, AGOSTO DE 2004

Informtica I. Versin 1.0 Agosto de 2004

Universidad Autnoma de Occidente

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 1.1 Sistema binario 1.2 Sistema octal 1.3 Sistema hexadecimal 1.4 Sistema decimal 1.5 Conversin entre sistemas 1.6 Suma y resta binaria 1.7 Cdigo ASCII y UNICODE 1.8 Clase prctica UNIDAD 2 - Sistemas lgicos 2.1 Conectivos relacionales y lgicos 2.2 Proposiciones lgicas simples y compuestas 2.3 Tablas de verdad para las operaciones lgicas bsicas 2.4 Clase prctica UNIDAD 3 - Herramienta de Programacin
Informtica I. Versin 1.0 Agosto de 2004

Pg. 7

Pg. 15

Pg. 29
2

Universidad Autnoma de Occidente

3.1 Breve historia de los estilos de Programacin 3.2 Origen del paradigma Orientado a Objetos 3.3 Definiciones de clases y objetos 3.4 Caractersticas bsicas del lenguaje Java 3.5 Construccin bsica de una aplicacin 3.6 Entrada de datos estndar 3.7 Salida de datos estndar 3.8 Descarga e instalacin del lenguaje 3.9 Compilacin y ejecucin de una aplicacin 3.10 Clase prctica UNIDAD 4 - Tipos de datos, variables y Operadores (Java) 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 5.1 Historia de la programacin 5.2 Tipos de Algoritmos 5.3 Representacin de los Algoritmos 5.4 Propiedades de los Algoritmos 5.5 Clase prctica UNIDAD 6 - Sentencias de control en Java 6.1 Sentencias de decisin o seleccin 6.1.2 Seleccin simple ( if ) 6.1.3 Seleccin doble ( if else ; if else - if ) 6.1.4 Seleccin mltiple ( switch ) 6.2 Sentencias de Repeticin ( ciclos o bucles): 6.2.1 Ciclo para ( for ) 6.2.2 Ciclo mientras ( while ) 6.2.3 Ciclo haga mientras ( do while ) 6.3 Clase prctica UNIDAD 7 Arreglos 7.1 Definicin de Arreglos 7.2 Arreglos Unidimensionales Pg. 113 Pg. 69 Pg. 61

Informtica I. Versin 1.0 Agosto de 2004

Universidad Autnoma de Occidente

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%

Mnimo: 3 talleres, 3 quices y 3 trabajos independientes. Se sugieren grupos de 2 o de 3 estudiantes.

15% (Algunos talleres como trabajo independiente) 20% (Trabajo independiente)

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.

Descargar el software J2SE 1.4, del sitio web: http://java.sun.com/downloads Descargar el editor JCreator 3.0, del sitio web: http://www.jcreator.com Documentacin de JAVA (JDK 1.4) http://java.sun.com/j2se/1.4/download.html Tutorial de Java (JDK1.4) http://java.sun.com/docs/books/tutorial/ Free Electronic Books in Java and C++: http://www.ibiblio.org/pub/docs/books/eckel/ FTP: ftp://turing.cuao.edu.co/
4

Informtica I. Versin 1.0 Agosto de 2004

Universidad Autnoma de Occidente

FUENTES DE DONDE SE RECOPIL EL MATERIAL PARA LA ELABORACIN DE ESTE MDULO DE INFORMTICA I.


- Universidad de Valencia, Espaa, Depto. de Informtica

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

Informtica I. Versin 1.0 Agosto de 2004

Universidad Autnoma de Occidente

Informtica I. Versin 1.0 Agosto de 2004

Universidad Autnoma de Occidente

UNIDAD 1. SISTEMAS NUMRICOS ARITMTICA Y REPRESENTACIN DE LA INFORMACIN EN EL COMPUTADOR Dos de los aspectos bsicos que se presentan en el tratamiento de la informacin, son cmo representarla (de lo cual depender sus posibilidades de manipulacin) y cmo almacenarla fsicamente. La primera se resuelve recurriendo a un cdigo adecuado a las posibilidades internas del computador, que abordaremos en el presente captulo. La segunda tiene que ver con los llamados soportes de informacin y es una cuestin que pertenece al mbito del soporte fsico del computador. En la raz de los desarrollos informticos est el hecho de que todo dato puede ser representado por un conjunto de bits (Los dgitos de un nmero binario se conocen como bits -Binary digit digito binario- por su nombre en ingls), circunstancia que permite a la ALU (Unidad Aritmtico-Lgica) realizar un gran nmero de operaciones bsicas utilizando su representacin binaria. El paso a cdigos binarios es una misin que el computador lleva a cabo automticamente, por lo que el usuario puede despreocuparse de este proceso. Sin embargo es conveniente tener algunas ideas acerca de la forma como el computador codifica y opera internamente, cuestin indispensable para comprender determinados comportamientos de la mquina. Para ello empezaremos recordando algunos conceptos relativos al sistema de numeracin binario y a las transformaciones entre ste y el sistema decimal. 1.1 Sistemas de numeracin en informtica Llamaremos sistema de numeracin en base b, a la representacin de nmeros mediante un alfabeto compuesto por b smbolos o cifras. As todo nmero se expresa por un conjunto de cifras, contribuyendo cada una de ellas con un valor que depende: a) de la cifra en s, b) de la posicin que ocupa dentro del nmero. En el sistema de numeracin decimal, se utiliza, b = 10 y el alfabeto est constituido por diez smbolos, denominados tambin cifras decimales: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} (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: 278.5 = 2102 + 7101 + 8100 + 510-1

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

Universidad Autnoma de Occidente

Generalizando, se tiene que la representacin de un nmero en una base b: N = ... n4 n3 n2 n1 n0 . n-1 n-2 n-3 ... es una forma abreviada de expresar su valor, que es: N = ... n4b4 + n3b3 + n2b2 + n1b1 + n0b0 + n-1b-1 ... (1.3) donde el punto separa los exponentes negativos de los positivos. Ntese que el valor que tome b determina la longitud de la representacin; as, por un lado, resulta ms cmodo que los smbolos (cifras) del alfabeto sean los menos posibles, pero, por otra parte, cuanto menor es la base, mayor es el nmero de cifras que se necesitan para representar una cantidad dada. Como ejemplo veamos cual es el nmero decimal correspondiente de 175372, en base 8, (cuyo alfabeto es {0, 1, 2, 3, 4, 5, 6, 7} y recibe el nombre de sistema octal). 175372)8 = 185 + 784 + 583 + 382 + 781 + 280 = = 6104 + 4103 + 2102 + 5101 + 0100 = 64250)10 1.1.1 Definicin del Sistema Binario En el sistema de numeracin binario b es 2, y se necesita tan slo un alfabeto de dos elementos para representar cualquier nmero: {0,1}. Los elementos de este alfabeto se denominan cifras binarias o bits. En la Tabla 1.1 se muestran los nmeros enteros binarios que se pueden formar con 3 bits, que corresponden a los decimales de 0 a 7. Tabla 1.1.- Nmeros binarios del 0 al 7 binario 000 001 010 011 100 101 110 111 decimal 0 1 2 3 4 5 6 7 Estos nmeros son generados as: el primer dgito de derecha a izquierda se multiplica por 20, el segundo por 21 y el tercero por 22; por lo tanto el binario 1012 sera 1x22 + 0x21 + 1x20 = 1x4 + 0x2 + 1x1 = 5. 1.1.2 Transformaciones entre bases binaria y decimal Para transformar un nmero binario a decimal: Basta tener en cuenta las expresiones (1.2) y (1.3), en las que b = 2. Ejemplo 1: Transformar a decimal los siguientes nmeros binarios: 110100; 0.10100; 10100.001 110100)2 = (125) + (124) + (122) = 25 + 24 + 22 = 32 + 16 +4 = 52)10 0.10100)2 = 2-1 + 2-3 = (1/2) + (1/8) = 0.625)10 10100.001)2 = 24 + 22 + 2-3 = 16+4+(1/8) = 20125)10 (1.2)

Informtica I. Versin 1.0 Agosto de 2004

Universidad Autnoma de Occidente

Observando el Ejemplo 1 se deduce que se puede transformar de binario a decimal sencillamente sumando los pesos de las posiciones en las que hay un 1, como se pone de manifiesto en el siguiente ejemplo. Ejemplo 2: Transformar a decimal los nmeros: 1001.001)2 y 1001101)2 1001.001)2 1 0 0 1 0 0 1 = 8 + 1 + 1/8 = 9.125)10 pesos 8 4 2 1 1/8 1001101)2 1 0 0 1 pesos 64 32 16 8 1 4 0 1 = 64 + 8 + 4 + 1 = 77)10 2 1

Para transformar un nmero decimal a binario: a) La parte entera del nuevo nmero (binario) se obtiene dividiendo la parte entera del nmero decimal por la base, 2, (sin obtener decimales en el cociente) de partida, y de los cocientes que sucesivamente se vayan obteniendo. Los residuos de estas divisiones y el ltimo cociente (que sern siempre menores que la base, esto es, 1 o 0), en orden inverso al que han sido obtenidos, son las cifras binarias. Ejemplo 3: Pasar a binario el decimal 26 26 0 2 13 2 1 6 0 26)10 = 11010)2 2 3 1 2 1 1

b) La parte fraccionaria del nmero binario se obtiene multiplicando por 2 sucesivamente la parte fraccionaria del nmero decimal de partida y las partes fraccionarias que se van obteniendo en los productos sucesivos. El nmero binario se forma con las partes enteras (que sern ceros o unos) de los productos obtenidos, como se hace en el siguiente ejemplo. Ejemplo 4: Para pasar a binario el decimal 26.1875 separamos la parte fraccionaria: 0.1875 y la parte entera: 26 (ya transformada en el Ejemplo anterior). 0.1875 2 0.3750 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

Universidad Autnoma de Occidente

1.1.3 Cdigos Intemedios Como acabamos de comprobar, el cdigo binario produce nmeros con muchas cifras, y para evitarlo utilizamos cdigos intermedios que son bases mayores, que no se alejen de la binaria. Estos se fundamentan en la facilidad de transformar un nmero en base 2, a otra base que sea una potencia de 2 (22=4; 23=8; 24=16, etc.), y viceversa. Usualmente se utilizan como cdigos intermedios los sistemas de numeracin en base 8 (u octal) y en base 16 (o hexadecimal). 1.1.3.1 Base Octal Un nmero octal puede pasarse a binario aplicando los algoritmos ya vistos en secciones anteriores. No obstante, al ser b=8=23, el proceso es ms simple puesto que, como puede verse n525 + n424 + n323 + n222 + n121 + n020 + n-12-1 + n-22-2 + n-32-3 = (n522 + n421 + n320) 23 + (n222 + n121 + n020) 20 + (n-122 + n-221 + n-320) 2-3 = (m1) 81 + (m0) 80 + (m-1) 8-1 Cada 3 smbolos binarios (3 bits) se agrupan para formar una cifra de la representacin en octal, por tanto en general puede hacerse la conversin fcilmente, de la forma siguiente: Para transformar un nmero binario a octal se forman grupos de tres cifras binarias a partir del punto decimal hacia la izquierda y hacia la derecha (aadiendo ceros no significativos cuando sea necesario para completar grupos de 3). Posteriormente se efecta directamente la conversin a octal de cada grupo individual de 3 cifras, y basta con recordar como se generaron los nmeros en la tabla 1.1 para poder realizar rpidamente la conversin. As por ejemplo 10001101100.1101)2 = 010 2 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

Informtica I. Versin 1.0 Agosto de 2004

10

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

Ejemplo 5:

(minuendo) 0 1 1 1 (7) (sustraendo) -0 1 0 1 (5)

Complemento a uno del sustraendo 1 0 1 0 Se suma uno + 1 Complemento a dos 1 0 1 1 (-5) Minuendo Complemento a dos 0 1 1 1 (7) + 1 0 1 1 (-5)
Como se presenta acarreo se omite el bit de extrema izquierda.

Respuesta Ejemplo 6: Minuendo Sustraendo

0 0 1 0 (2) 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)

Complemento a uno del sustraendo Se suma uno + Complemento a dos Complemento a dos Suma minuendo Respuesta Ejemplo 7: +

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)

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

Informtica I. Versin 1.0 Agosto de 2004

12

Universidad Autnoma de Occidente

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
230

BINARIO
1101001

OCTAL
326 1543

HEXA
BC3 A48D

100100101 1872 255

Realice las siguientes operaciones : Operando 1 Operando 2 11000011 10000 1001110010 11100101 1101 1100111 1101001111 101101111 1111111111111 1111 1010101011 10100001 11111100000 1010101010 101000001100 11000110010 11001010000010 10001111100011 11001010 1011111 101100110101 1110000001 10101110110 10101 11111111111 1111111111 100100000010 1011111 1001111101111110000 1111111000000000000 Suma Resta

1.2.2 Valores Booleanos y Operaciones Lgicas Un dgito binario, adems de representar una cifra en base dos, tambin puede interpretarse como un valor booleano o dato lgico (en honor a George Boole), entendiendo como tal una cantidad que solamente puede tener dos estados (Verdadero/Falso, SI/NO, 1/0, etc.) y por tanto con capacidad para modelizar el comportamiento de un conmutador. As, adems de las operaciones aritmticas con valores binarios, se pueden llevar a cabo operaciones booleanas o lgicas en las que estos valores se consideran seales generadas por conmutadores. Las operaciones booleanas ms importantes son: OR lgico (tambin denominado unin, suma lgica (+) o funcin O), AND lgico (tambin interseccin, producto lgico ( . ) o funcin Y) la complementacin ( - ) (o inversin, negacin, o funcin NOT o NO). Ntese que las dos primeras son operaciones de dos operandos o binarios mientras que la complementacin es unaria. Estas operaciones se rigen segn la Tabla 4.4.
Informtica I. Versin 1.0 Agosto de 2004

13

Universidad Autnoma de Occidente

Tabla 1.4.- Operaciones lgicas OR 0+0=0 0+1=1 1+0=1 1+1=1 __ 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.

Informtica I. Versin 1.0 Agosto de 2004

14

Universidad Autnoma de Occidente

UNIDAD 2. SISTEMAS LGICOS LOGICA, TABLAS DE VERDAD 2.1 Introduccin. Un computador puede ser programado para tomar decisiones basadas en si ciertos enunciados por ejemplo, El numero que se ha computado es mayor que 100-son verdaderos o falsos. A la verdad o falsedad de un enunciado se le llama valor de verdad; un enunciado es verdadero o falso, pero no ambas cosas. Algunos enunciados son enunciados compuestos, es decir, estn integrados por subenunciados y varias conectivas. Ejemplo 1: (a) Las rosas son rojas y las violetas azules es un enunciado compuesto por los subenunciados las rosas son rojas y las violetas son azules. (b) El es inteligente o estudia todas las noches es, implcitamente, un enunciado compuesto por los subenunciados El es inteligente y estudia todas las noches. (c) Para donde va? no es un enunciado ya que no es ni verdadero ni falso. La propiedad fundamental de un enunciado compuesto es que su valor de verdad esta completamente determinado por los valores de verdad de sus subenunciados junto con la manera como estan conectados para formar el enunciado compuesto. Comenzamos con un estudio de algunas de estas conectivas. En este capitulo usaremos las letras p, q, r (en minsculas o maysculas, con o sin subndices) para denotar enunciados. 2.2 Conjuncin, p ^ q Dos enunciados cualesquiera se pueden combinar con la palabra y para formar un enunciado compuesto llamado la conjuncin de los enunciados originales. Simblicamente, p ^ q. Denota la conjuncin de los enunciados p y q, que se lee p ^ q. La tabla de verdad del enunciado compuesto p ^ q esta dada por la siguiente tabla: p V V F F q V F V F p^q V F F F

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

Universidad Autnoma de Occidente

Ejemplo 2: Considere los cuatro enunciados siguientes: (i) Paris esta en Francia y (ii) Paris esta en Francia y 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 V F

V V F F

V F V F

Observe que p ^ q es falso solamente cuando ambos enunciados son falsos. Ejemplo 3: Considere los cuatro enunciados: (i) Paris esta en Francia o (ii) Paris esta en Francia o (iii) Paris esta en Inglaterra o (iv) Paris esta en Inglaterra o 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).

Informtica I. Versin 1.0 Agosto de 2004

16

Universidad Autnoma de Occidente

La tabla de verdad de ~ p esta dada por la siguiente tabla:

p
V F

~p F V

En otras palabras, si p es verdadero entonces ~ p es falso entonces ~ p es verdadero. As, el valor de verdad de la negacin de cualquier enunciado es siempre el opuesto del valor de verdad del enunciado original. Ejemplo 4: Considere los siguientes enunciados (a) Paris esta en Francia. (b) Es falso que Paris esta en Francia. (c) Paris no esta en Francia. (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 p . p o p 2.5 Proposiciones y Tablas de Verdad Con su uso repetido de las conectivas lgicas (^, , ~ y otras que se discutirn adelante), podemos construir enunciados compuestos que son mas elaborados. En el caso en que los subenunciados p, q, ... de un enunciado compuesto P (p,q,...) sean variables, llamamos al enunciado compuesto una proposicin. Ahora el valor de verdad de una proposicin depende exclusivamente de los valores de verdad de sus variables, mejor dicho, el valor de verdad de una proposicin se conoce una vez que se conozcan los valores de verdad de sus variables. La tabla de verdad de la proposicin ~ (p ^ ~ q), por ejemplo, se construye como sigue: para p q para ~ p

p
V V F F

q
V F V F

Observe que las primeras columnas de la tabla son para las variables p,q,...y que hay suficientes lneas en la tabla para permitir todas las posibles combinaciones de V y F para estas variables. (Para 2 variables, como en el caso anterior, se necesitan 4 lneas; para 3 variables se necesitan 8 lneas; y, en general, para n variables se necesitan 2n lneas.) Hay pues una columna para cada etapa elemental de la construccin del enunciado el valor de verdad de cada paso es determinado por las etapas anteriores con las definiciones de las conectivas ^, , ~. Finalmente, obtenemos la tabla de verdad de la proposicin, que aparece en la ultima columna.
Informtica I. Versin 1.0 Agosto de 2004

~q F V F V

p^~q ~(p^~q)
F V F F V F V V

17

Universidad Autnoma de Occidente

Observacin: La tabla de verdad de la proposicin, anterior consiste precisamente en las columnas bajo las variables y la columna bajo la proposicin:

p
V V F F

q
V F V F

~(p^~q) V F V V

Las otras columnas se usaron solamente en la construccin de la tabla de verdad. Otra manera de construir la tabla de verdad anterior para ~ (p ^ ~ q) es la siguiente. Primero se construye la siguiente tabla: p V V F F 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: q V F V F

(p

q)

(p
V V F F 1 (a)

q)
V F V F 1

p
V V F F Paso

q
V F V F

(p
V V F F 1

~
F V F V 2

q)
V F V F 1

V V V F F V F F Paso

(b)

(p
V V F F 1

^
F V F F 3

~
F V F V 2

q)
V F V F 1

p
V F F F

q
V V F F Paso (d)

~
V F V V 4

(p
V V F F 1

^
F V F F 3

~
F V F V 2

q)
V F V F 1

V V V F F V F F Paso (c )

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

Universidad Autnoma de Occidente

llama tautologas. Anlogamente, una proposicin P(p,q,)se llama contradiccin si contiene solamente F en la ltima columna de su tabla de verdad, o sea, es falso para cualquier valor de verdad de sus variables. Por ejemplo, la proposicin p o no p, es decir, p ~ p, es una tautologa y la proposicin p y no p, es decir, p ^ ~ p, es una contradiccin. Esto se verifica construyendo sus tablas de verdad.

p
V F

~p p~p
F V V V

p
V F

~ 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
. V V F F

r
V F V F

q^r
V F F F

~ (q^r)
F V V V

(q^r) ~(q^r)
V V V V

2.7 Equivalencia Lgica: lgebra de Proposiciones Se dice que dos proposiciones P ( p, q, ...) y Q (p, q, ...) son lgicamente equivalentes, o sencillamente equivalentes o iguales, denotado por P (p, q, ...) Q (p, q, ) Si tienen identicas tablas de verdad. Por ejemplo, considere las tablas de verdad de ~ ( p^q) y ~ p q:

p
V V F F

q
V F V F

p^q ~ (p^q)
V F F F F V V V

p
V V F F

Q
V F V F

~p
F F V V

~q
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

Universidad Autnoma de Occidente

Ejemplo 6: Considere el enunciado Es falso que las rosas son rojas y las violetas son azules. Este enunciado se puede escribir en la forma ~ ( p ^ q) en donde p es las rosas son rojas y q es las violetas son azules. Sin embargo, por las tablas de verdad anteriores, ~ ( p q) es lgicamente equivalente con ~ p ~ q. Asi, el enunciado dado tiene el mismo significado que el ennunciado. Las rosas no son rojas, o las violetas no son azules. Las proposiciones satisfacen muchas equivalencias logicas, o leyes, fuera de las descritas anteriormente. Algunas de las leyes mas importantes, con sus nombres se dan en la tabla 2.1. en la tabla, t denota una tautologa y f denota una contradiccin. 2.8 Enunciados Condicional y Bicondicional Muchos enunciados, particularmente en la matemtica, son de la forma Si p entonces q. Tales enunciados se llaman enunciados condicionales y se denotan por p q El condicional p q frecuentemente se lee p implica q o p slo si q. Otro enunciado comn es la forma p si y solo si q. Tales enunciados denotados por p q se llaman enunciados bicondicionales. Los valores de verdad de p q y p q se dan en las siguientes tablas: p V V F F 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

Tabla 2.1. Leyes del lgebra de Proposiciones


Informtica I. Versin 1.0 Agosto de 2004

20

Universidad Autnoma de Occidente

Observe que el condicional p q es falso solamente cuando la primera parte p es verdadera y la segunda parte q es falsa. En caso de que p sea falso, el condicional p q es verdadero sin importar el valor de verdad de q. Observe tambien que p q es verdadero cuando p y q tienen los mismos valores de verdad y falso en los demas casos. Ahora considere la tabla de verdad de la proposicion ~ p q: p V V F F q V F V F ~p F F V V ~pq V F V V

Observe que la anterior tabla de verdad es idntica a la tabla de verdad de p q. As que p q es lgicamente equivalente a la proposicin ~ p q: pq~pq En otras palabras, el enunciado condicional Si p entonces q es lgicamente equivalente al enunciado No p o q, que solamente usa las conectivas y ~ y, por lo tanto, ya era parte de nuestro lenguaje. Considere la proposicion condicional p q y las otras proposiciones condicionales simples que contienen p y q: q p, ~ p ~ q y ~ q ~ p Estas proposiciones se llaman respectivamente la reciproca, inversa, y contrarreciproca de la proposicion p q. En seguida presentamos las tablas de verdad de las cuatro proposiciones.
Condicional Recproca Inversa Contrarecproca

p V V F F

q V F V F

pq V F V V

q p V V F V

~p~q V V F V

~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

Universidad Autnoma de Occidente

tambien es par. Como la contrarreciproca ~ q ~ p es verdadera, el enunciado condicional original p q es tambien verdadero. 2.9 Argumentos Un argumento es una relacion entre un conjunto de proposiciones P1,P2,..., Pn, llamadas premisas, y otra proposicion Q, llamada la conclusin; denotamos un argumento por P1,P2,..., Pn + Q Se dice que un argumento es valido si las premisas dan (como consecuencia) la conclusin; mas formalmente, damos la siguiente Definicin: Un argumento P1,P2,,...., Pn + Q es vlido si Q es verdadero cada vez que las premisas P1,P2,..., Pn sean verdaderas. Un argumento que no es vlido se llama falacia. Ejemplo 8: (a) El siguiente argumento es vlido: p.p q + q (Ley de independencia, modus poniendo ponens.) la demostracin de esta regla se sigue de la siguiente tabla de verdad.

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

Universidad Autnoma de Occidente

p q. q r + p r (ley del silogismo) Este hecho se verifica con la siguiente tabla de verdad que muestra que la proposicion [(p q) ^ (q r)] (p r) Es una tautologia:

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.

Informtica I. Versin 1.0 Agosto de 2004

23

Universidad Autnoma de Occidente

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) P (p,q,...) implica lgicamente a Q (p, q, ...). El argumento P (p,q,...) + Q (p, q, ...) es vlido. La proposicin P (p,q,...) Q (p, q, ...) es una tautologa.

Si P Q y Q P entonces P y Q deben tener la misma tabla de verdad, y por lo tanto P Q. El reciproco tambin es cierto. As, la nocin de implicacin lgica est intimamente ligada a la de la equivalencia lgica. PROBLEMAS RESUELTOS Enunciados y Enunciados Compuestos. 2.1 Sea p Hace fri y sea q Est lloviendo. D una frase verbal sencilla que describa cada uno de los siguientes enunciados: (1) ~ p, (2) p ^ q, (3) p q, (4) q ~p, (5) ~p ^ ~q, (6) ~ ~ q

En cada caso, traduzca ^, y ~ para que se lea y, o y Es falso que o No, respectivamente, y luego simplifique la frase en espaol. (1) No hace fri. (4) Est lloviendo o no est haciendo fro. (2) Est haciendo fro y est lloviendo. (5) Ni est haciendo fro ni est lloviendo. (3) Est haciendo fro o est lloviendo (6) No es verdad que est lloviendo. 2.2 Sea p El es alto y sea q El es buen mozo. Escriba cada uno de los siguientes enunciados en forma simblica usando p y q. (Suponga que El es bajo significa El no es alto, o sea ~ p.). (1) El es alto y buen mozo. (2) El es alto pero no buen mozo. (3) Es falso que el sea bajo o buen mozo. (1) p ^ q (2) p ^ ~q
Informtica I. Versin 1.0 Agosto de 2004

(4) El no es ni alto ni buen mozo. (5) El es alto, o es bajo y buen mozo. (6) No es cierto que l sea bajo o no buen mozo. (5) p (~p ^ q) (6) ~ (~ p ~q)
24

(3) ~ (~p q) (4) ~p ^ ~q

Universidad Autnoma de Occidente

Proposiciones y sus Tablas de Verdad. 2.3 Encuentre la tabla de verdad de ~ p ^ q. p V V F F p V V F F Paso 2 Mtodo 2 q V F V F ~ 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

Mtodo 1

2.4 Encuentre la tabla de verdad de ~ (p q). p V V F F q V F V F p q ~ (p q) V F V F V F F V p V V F F q V F V F ~ F F F V (p V V F F

V V V F

q) V F V F 1

Mtodo 1 2.5 Encuentre la tabla de verdad de ~ (p ~ q). p q V V V F F V F F ~ q p ~ q ~ (p ~ q) F V F V V F F F V V V F Mtodo1

Paso

3 1 2 Mtodo 2

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

(observe que esta tabla de verdad es idntica a la del problema 2.3) Tautologas y Contradicciones. 2.6 Verifique que la proposicin p ~ (p ^ q) es una tautologa. Construya la tabla de verdad de p ~ (p ^ q): p V V F F
Informtica I. Versin 1.0 Agosto de 2004

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

Universidad Autnoma de Occidente

Como la tabla de verdad de p ~ (p ^ q) es verdadera para todos los valores de verdad de p y de q, entonces es una tautologa. 2.7 Verifique que la proposicin (p ^ q) ^ ~ (p q) es una contradiccin. Construya la tabla de verdad de (p ^ q) ^ ~ (p q): P q V V V F F V F F 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

Como la tabla de verdad de (p ^ q) ^ ~ (p q) es F para todos los valores de verdad de p y de q, entonces es una contradiccin. Equivalencia Lgica. 2.8 Demuestre que la disyuncin distribuye sobre la conjuncin, o sea, demuestre la ley distributiva p (q ^ r) ( p q) ^ (p r). Construya las tablas de verdad requeridas. p V V V V 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.

Informtica I. Versin 1.0 Agosto de 2004

26

Universidad Autnoma de Occidente

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) Equivalencia (1) ~ (p q) (~ p ^ q) (~ p ^ ~ q) (~ p ^ q) (2) ~ p ^ (~ p q) (3) ~p^t (4) ~p (1) (2) (3) (4) Razn Ley de Identidad Ley distributiva Ley de Identidad Ley de Identidad

(b)

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

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

2.12

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) No es cierto que su madre sea inglesa o que su padre sea francs. No es cierto que l estudie fsica pero no matemtica. No es cierto que las ventas estn bajando y los precios subiendo. No es cierto que no est haciendo fri o que est lloviendo.

Informtica I. Versin 1.0 Agosto de 2004

27

Universidad Autnoma de Occidente

(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

(c) Ahora p q ~ p q y q p ~ q p; por lo tanto por (a) p q ( p q) ^ ( q p) (~ q q) ^ (~ q p)

Informtica I. Versin 1.0 Agosto de 2004

28

Universidad Autnoma de Occidente

UNIDAD 3. HERRAMIENTA DE PROGRAMACIN. 3.1 Introduccin Aunque el concepto de orientado a objetos, se ha asociado al desarrollo de software, realmente, este es una forma de concebir el mundo, de manejar conceptos y de entender el funcionamiento de sistemas, sin embargo, para el objetivo del presente mdulo, se tratar solamente la acepcin de orientado a objetos como paradigma de programacin. El paradigma orientado a objetos se asoci durante mucho tiempo con los lenguajes y la programacin orientada a objetos, sin embargo, en la actualidad, el uso de objetos debera incluir tanto el anlisis como el diseo orientados a objetos, el uso de bases de datos y en general, la ingeniera de software orientada a objetos. Aunque no intencionalmente, la programacin orientada a objetos implica un mayor grado de anlisis, ya que de alguna forma deben estar definidas las clases, atributos y mtodos que se van a implementar. Por ende, al aumentar el tiempo dedicado al anlisis y concepcin del software, el tiempo de las otras etapas se reduce. 3.2 Origen del paradigma Orientado a Objetos Orientado a Objetos es un trmino que empez a acuarse a finales de los 80's, cuando la programacin requera nuevos paradigmas, nuevas formas de interpretarse. Durante los 90's tom gran fuerza, pero indiscutiblemente son las dos ltimas dcadas las que han empezado a recoger los frutos; en otros pases ya la programacin orientada a objetos es un hecho y algunos programadores no podran pensar en otra forma de desarrollar software. Autores de gran reconocimiento empezaron a trabajar de manera aislada explorando este nuevo paradigma, logrando avances tanto en lenguajes de programacin como en tcnicas apropiadas de anlisis y diseo. Ejemplo de ello son los mtodos propuestos por Grady Booch, Ivar Jacobson o James Rumbaugh entre otros. 3.2.1 Definicin de Orientado a Objetos El concepto de orientado a objetos est relacionado con otros mltiples conceptos: la programacin, las interfaces de usuario y la representacin jerrquica de hechos, tienen todos orientacin a objetos. Entonces, cmo podra definirse este trmino?. Una definicin bastante general de objeto es: todo aquello que tiene limites definidos. En ese orden, los libros, las sillas, las personas, los animales, las empresas, son todos objetos. Algunas personas afirman que la orientacin a objetos es la forma natural de nuestro aprendizaje. Cuando estamos pequeos se nos ensea a distinguir y agrupar objetos acorde a sus caractersticas y/o comportamientos y es por ello que logramos distinguir una silla de un caballo aunque ambos tengan patas. La programacin orientada a objetos es un "estilo" de programacin bajo el cual se divide el problema a solucionar en los objetos que lo componen. Luego se ver que cada objeto de estos contiene atributos y mtodos que permiten su interaccin y la ejecucin de diversas tareas para cumplir el propsito del programa. Existen muchos lenguajes que permiten realizar la programacin orientada a objetos, entre ellos se destacan Smalltalk, Java, C++, Object Pascal, Eiffel.

Informtica I. Versin 1.0 Agosto de 2004

29

Universidad Autnoma de Occidente

3.3 Breve historia de los estilos de Programacin Desde el principio de la programacin se han intentado muchos mtodos y procedimientos para lograr una programacin fcil y eficiente. El primer enfoque, si se puede llamar as, es la programacin no estructurada o "programacin espagueti", bajo la cual el programador se sienta frente al computador y empieza a escribir lneas de cdigo (instrucciones) sin estructura alguna, resultando en un programa largo, difcil de entender y aun ms difcil de modificar. El primer enfoque formal que se formaliz fue el enfoque procedural (o procedimental), que se podra resumir como "Usted decide qu procedimiento quiere, y usa el mejor algoritmo que pueda encontrar". Aunque este enfoque resultaba muy prctico para resolver problemas particulares, no as cuando se quera reutilizar parte del cdigo o emplear ciertas funciones en otros programas. En resumen, el enfoque procedural no permita mejorar la productividad de la construccin del software por sus caractersticas particulares. Surge entonces un segundo enfoque o paradigma, la programacin modular (o funcional). Para esta poca ya se ha incrementado visiblemente el tamao de los programas desarrollados, lo cual genera problemas adicionales de productividad. El enfoque de programacin modular es algo como "Decide los mdulos que quieres, de forma que las partes del programa y los datos queden ocultos tras los mdulos". La intencin primordial de este enfoque es dividir el problema (programa necesario) en partes independientes pero relacionadas, que se puedan solucionar de manera separada. La programacin modular propicia la reutilizacin de cdigo, ya que existen partes (mdulos) que podran ser empleadas en otros programas, siempre que se requiera la misma utilidad. Esta idea, aunque en apariencia buena, no surti mucho efecto ya que los programadores normalmente se preocupaban por el cdigo pero no por los datos y, normalmente, los mdulos requeran de datos que estaban fuera de ellos. En un intento por mejorar la concepcin modular surgen los llamados tipos abstractos de datos o TADs, los cuales intentan agrupar, en la misma estructura, los datos necesarios y las operaciones requeridas para su manejo. Sigiuendo el concepto de TADs pronto se encontr otro mecanismo para lograr que se crearan unidades independientes, que permitieran la reutilizacin de cdigo, y la programacin por componentes; ahora se podra "armar" un programa, tal como se arma un computador o una nevera, bastara conseguir las piezas adecuadas y establecer los enlaces necesarios. A este novedoso enfoque se le conoce como programacin orientada a objetos. La programacin orientada a objetos presenta mltiples ventajas. Empecemos por decir que los programas ahora estarn compuestos por objetos. Cada objeto, a su vez, est compuesto por los datos o caractersticas que lo distinguen y los mtodos o procedimientos necesarios para su manipulacin. 3.4 Definiciones de clases y objetos Todos los estilos o enfoques de programacin se encuentran basados en un marco referente, de la misma forma todas las tcnicas orientadas a objetos se basan en un marco, que Grady Booch ha llamado el Modelo de Objetos. 3.4.1 El Modelo de Objetos El modelo de Objetos, segn Booch, se compone de cuatro elementos esenciales, sin los cuales perdera la propiedad de orientacin a objetos. Estos son: Abstraccin
30

Informtica I. Versin 1.0 Agosto de 2004

Universidad Autnoma de Occidente

Encapsulamiento Modularidad Jerarqua

Igualmente incluye otros elementos que, sin ser esenciales, resultan bastante tiles dentro de este estilo de programacin: Tipos Concurrencia

La adecuada comprensin de estos conceptos no es ni exclusiva ni elemental para programar orientado a objetos. Sin embargo, si no se toman en cuenta estos elementos, la programacin orientada a objetos dejara de emplear todo el poder que otorgan los objetos. 3.4.1.1 Abstraccin El primer concepto fundamental del paradigma orientado a objetos es la abstraccin. Una definicin bastante apropiada del trmino abstraccin es la dictada por Booch: "Una abstraccin denota las caractersticas esenciales de un objeto, que lo distingue de todas las otras clases de objetos y lo provee de conceptos definidos, relativos a la perspectiva del usuario". Dos cosas importantes deben resaltarse aqu. La primera es que lo que aprendemos, realmente son abstracciones de la realidad: la idea que tenemos de una mesa, por ejemplo, releva las caractersticas bsicas de sta, permitindonos diferenciarla de una silla o de un sof aunque puedan ser parecidos. La segunda idea importante, es que las abstracciones dependen de la perspectiva del usuario: diferentes personas tienen diferentes abstracciones de los objetos, dependiendo de su experiencia e inters particular. Actividad #1: Describa las abstracciones que usted posee de computador, mesa, cama, gato. 3.4.1.2 Encapsulamiento Una caracterstica esencial de los objetos es el encapsulamiento, por la cual, cada objeto mantiene oculto su interior. Al tratar un objeto como una caja negra, los otros objetos que interactan con l no requieren conocimiento alguno sobre la forma como opera internamente, requiriendo slo el conocimiento de los parmetros necesarios para dicha interaccin. Si los objetos no mantienen el encapsulamiento, se estara violando uno de los principios bsicos de la orientacin a objetos. La definicin original de Booch plantea: "Encapsulamiento es el proceso de compartimentalizar los elementos de una abstraccin, que constituyen su estructura y comportamiento. Una ventaja adicional del encapsulamiento se refiere a que el interior de los objetos puede cambiarse (mejorarse) sin que se requieran cambios en la interfaz que stos mantienen con otros objetos. Actividad #2: Enumere 10 elementos que usted emplea normalmente sin conocer realmente cmo realizan su funcionamiento, pues ellos estn encapsulados. 3.4.1.3 Modularidad La modularidad es un concepto muy antiguo. Aunque es vlido para la orientacin a objetos no es exclusivo de sta. Meyers mencion la ventaja de la modularidad como: "La accin de partir un programa en componentes individuales puede reducir su complejidad en algn grado.... aunque la
Informtica I. Versin 1.0 Agosto de 2004

31

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

3.4.2 Definiciones de Orientacin a Objetos Cuando nos referimos especficamente a la programacin orientada a objetos, se emplean los conceptos vistos a travs de trminos que hacen referencia al programa y las partes con las que se establece. 3.4.2.1 Clases y Objetos El concepto de objetos es para muchos la forma "normal" de asociar las cosas de la vida con nombres. Cuando iniciamos nuestra educacin, empleamos procesos difciles de asociacin de caractersticas y modelos a nombres determinados. Una clase es un concepto que incluye caractersticas o atributos (datos), y procedimientos de una entidad del mundo real. Ejemplos de clases son: Mueble, Auto, Medio de Transporte, Edificacin, etc. De otra parte, se entiende que las clases son generalizaciones de los objetos, o lo que es lo mismo, los objetos son instancias de clase. Ejemplos de objetos son: La silla del rector, el carro de Pedro, El asiento rojo, etc. Los objetos poseen ciertas caractersticas que los hacen particulares. Tales caractersticas son: Tiene un estado (atributos o caractersticas) Tiene un comportamiento (mtodos asociados) Tiene una identidad (ocupa un lugar en memoria) Tiene un ciclo de vida Tiene una visibilidad Se relaciona y colabora con otros objetos

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.

Informtica I. Versin 1.0 Agosto de 2004

33

Universidad Autnoma de Occidente

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. 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.

Herencia

Informtica I. Versin 1.0 Agosto de 2004

34

Universidad Autnoma de Occidente

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

La sobreescritura corresponde a la otra clase de polimorfismo, llamado tambin polimorfismo de generalizacin. En ste, los mtodos heredados de una superclase pueden ser sobrescritos para elaborar funciones diferentes. Sin embargo, NO se puede variar la signatura ( firma) del mtodo; es decir; NO se puede cambiar el nombre, el tipo de los parmetros, el nmero de parmetros que recibe y el tipo de dato que devuelve.

Informtica I. Versin 1.0 Agosto de 2004

35

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

3.5 Caractersticas bsicas del lenguaje Java 3.5.1 Historia de JAVA Una de las reas reconocidas de avance para la computacin e informtica, es la de los dispositivos electrnicos inteligentes. En razn de esto, Sun Microsystems financi un proyecto de investigacin interno con el nombre Proyecto Green en 1991. Uno de los resultados de este poyecto fue un lenguaje basado en C y C++, llamado Oak, creado por James Gosling, Patrick Naughton, Chris Warth, Ed Frank y Mike Sheridan. Poco despus se descubri que ya exista un lenguaje con este nombre, as que surgi el nombre de JAVA (una clase de caf). El prototipo original, desarrollado en 18 meses, fue mejorado con la ayuda de muchas personas, lo cual tom ms de 3 aos. El propsito inicial con el proyecto fue crear un lenguaje independiente de la plataforma, que facilitara el uso en diferentes dispositivos electrnicos. Hasta el momento, C y C++ eran los lenguajes ms empleados, sin embargo no permitan la facilidad requerida ya que debe proveerse del compilador especifico para la CPU necesaria, lo cual puede llevar algn tiempo de construccin. Sin embargo, mientras se desarrollaba JAVA apareci el otro elemento que formara parte esencial de su construccin, el World Wide Web; de no ser por este aspecto, JAVA probablemente no habra pasado de ser un lenguaje ms empleado por los diseadores de hardware en sus laboratorios. Es conveniente aclarar que aunque JAVA bas su desarrollo en C y C++, de ninguna manera es una versin avanzada de estos, no es compatible con alguna versin de C++, ni intenta reemplazarlo; ms bien maneja otras caractersticas importantes que se requeran en su momento, dando a los programadores un ambiente familiar. Respecto a la programacin, JAVA presenta muchas ventajas, como mencionan Naugthon y Schildt: "Java fue diseado, probado y refinado por programadores autnticos. Es un lenguaje que se basa en las necesidades y experiencia de la gente que lo ha inventado.... Java es un lenguaje coherente y lgicamente consistente.... Java le permite al programador tener el control total, excepto en aquellas limitaciones impuestas por Internet. Si uno programa bien, el programa lo reflejar; si uno programa mal, el programa tambin lo reflejar. Dicho de otro modo, Java no es un lenguaje con ruedas de entrenamiento, sino que es un leguaje para programadores profesionales". La intencin de Sun Microsystems con el desarrollo de JAVA no fue el lucro, sino facilitar sus propias labores en la construccin de dispositivos de hardware. Por tanto, el JAVA y sus herramientas asociadas siempre han sido de dominio pblico, de forma que basta entrar al sitio de sun (www.java.sun.com), para obtener la versin actualizada del JDK (Java Development Kit). Exactamente, en el sitio web http://java.sun.com/downloads , usted puede descargar el kit de desarrollo de Java. 3.5.2 Caractersticas Bsicas de JAVA JAVA posee muchas caractersticas importantes. A continuacin se mencionarn aquellas ms sobresalientes. 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

Orientado a Objetos puro

37

Universidad Autnoma de Occidente

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

La robustez de un software es una de las caractersticas de calidad ms importantes y se refiere a la posibilidad del software de prevenir posibles errores que, de ocurrir, podran interrumpir la ejecucin adecuada del mismo. Java se preocupa por ello y hace un especial nfasis en la deteccin de problemas, chequeo dinmico (en tiempo de ejecucin) y eliminar posibles situaciones de error.

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). 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. 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.

Arquitectura Neutral

Portable

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

Universidad Autnoma de Occidente

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

Aunque el desempeo del interpretador comnmente es suficiente, si se requiere un mayor nivel de desempeo puede traducirse el bytecode a un cdigo particular para la mquina en la cual se ejecuta.

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). 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.

Multihilos

Dinmico

Procesamiento de un programa en JAVA ( Fuente: Java Tutorial)

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

Universidad Autnoma de Occidente

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).

Contenido del Java 2 SDK (Fuente: Java Tutorial)

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

Universidad Autnoma de Occidente

El archivo j2sdk-1_4_2_05-windows-i586-p debe quedar en su disco, este es el instalador del SDK. Al ejecutar este programa, se instalar el Java en su disco, normalmente se instala en el directorio C:\j2sdk1.4.2_05\ (NOTA: los nombres de los archivos podran variar dependiendo de la versin de Java disponible). Aunque no es obligatorio, es mejor actualizar el Path (camino) del computador, para permitir que siempre encuentre los programas necesarios sin importar el directorio en el cual se encuentre ubicado el programador. Para ello, Puede escoger en el men de inicio, la opcin ejecutar y dar sysedit - Enter, el sistema presenta varias pantallas, debe escogerse el AUTOEXEC.BAT (este archivo establece algunas configuraciones iniciales cada vez que se enciende el computador). Busque la instruccin PATH. Si existe, agrege al final de sta: ;C:\j2sdk1.4.2_05\BIN Si no existe, al final del archivo escriba PATH C:\j2sdk1.4.2_05\BIN Para que este cambio tenga efecto, debe reiniciarse el computador, , ejecutar el autoexec.bat.

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. 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
Se crea un programa .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
Se crea un programa .class

Disco

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.

Carga

Como se ver posteriormente, puede ocurrir que un archivo .java d origen a varios archivos .class

Informtica I. Versin 1.0 Agosto de 2004

41

Universidad Autnoma de Occidente

Carga Disco
Se carga el programa a memoria

Memoria

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

Verificacin
Ejecucin

Memoria

Se verifican que el bytecode sea vlido y aspectos de seguridad

Finalmente, cubiertos todos los pasos, se interpretan las instrucciones del cdigo de bytes, traducindolos a instrucciones que la mquina pueda realizar (lenguaje de mquina).
Lee cada instruccin del bytecode y las ejecuta

Interprte

Memoria

Ejemplo de una Aplicacin En Java se pueden desarrollar aplicaciones o applets. Las aplicaciones pueden ejecutarse en cualquier ambiente, su cdigo es sencillo y no requiere archivos adicionales. Ejemplo:
/* Es es un programa de prueba. La aplicacin genera una lnea de impresin en la pantalla. El archivo debe llamarse Bienvenida1.java */ class Bienvenida1 { // Toda aplicacin debe tener un mtodo main( ) public static void main( String args[ ] ) { System.out.println( "Bienvenido a la Tecnologia Java!!" ) ; } }

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

Universidad Autnoma de Occidente

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.

Ejemplo de una Applet Los applets (aplicacioncitas) son aplicaciones que requieren un entorno WEB para ejecutarse, de forma que se requiere que estn insertadas en una pgina WEB para ser vistas.
Ejemplo: // Un ejemplo de Applet // El archivo debe llamarse Ejemplo1.java import javax.swing.JApplet ; import java.awt.Graphics ; public class Ejemplo1 extends JApplet { public void paint( Graphics g ) { g.drawString( "Ejemplo de applet en java", 25, 25 ) ; } }

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

Universidad Autnoma de Occidente

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:

A continuacin, otro ejemplo de Aplicacin Java:

Informtica I. Versin 1.0 Agosto de 2004

44

Universidad Autnoma de Occidente

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:

// Ejemplo 2 Esta aplicacin Java explica la diferencia entre print y println class SalidaBasica2 { public static void main( String args[ ] ) { System.out.print( "Bienvenido al curso de " ) ; System.out.print( "Algoritmos con Java 2\n" ) ; // \n es el comando para nueva lnea System.out.println( "Imprime una linea en blanco, ejecuta el retorno de carro y" ) ; System.out.println( "avanza a la linea siguiente" ) ; } } // Fin de la clase SalidaBasica2 Salida:
Informtica I. Versin 1.0 Agosto de 2004

45

Universidad Autnoma de Occidente

3.8 Entrada de datos estndar


// Ejemplo 1 Esta aplicacin Java muestra cmo ingresar una cadena de caracteres (String) // desde el teclado. import java.io.* ; // importa el paquete de entrada - salida bsica.

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:

Informtica I. Versin 1.0 Agosto de 2004

46

Universidad Autnoma de Occidente

// Ejemplo 2 Esta aplicacin Java muestra cmo ingresar una cadena de caracteres (String) // desde el teclado. import java.io.* ; // importa el paquete de entrada - salida bsica.

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 ; // Declara la variable tipo String (cadena de caracteres)

System.out.print( "Escriba su nombre y pulse RETURN: " ) ; 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" ) ; System.exit( 0 ) ; } } // Fin del mtodo main( ) // Salga de la Aplicacin

// Fin de la clase EntradaBasica2

La salida es similar a la de la aplicacin EntradaBasica1.java


// Ejemplo 3 Esta aplicacin Java muestra cmo ingresar un nmero entero // desde el teclado.
Informtica I. Versin 1.0 Agosto de 2004

47

Universidad Autnoma de Occidente

import java.io.* ;

// importa el paquete de entrada - salida bsica.

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 ) ; } } // Fin del mtodo main( ) // Salga de la Aplicacin

// Fin de la clase EntradaBasica3

Salida:

// Ejemplo 4 Esta aplicacin Java tambin muestra cmo ingresar un nmero entero // desde el teclado, pero utiliza menos instrucciones. import java.io.* ; // importa el paquete de entrada - salida bsica.

class EntradaBasica4 { public static void main( String args[ ] ) throws IOException {
Informtica I. Versin 1.0 Agosto de 2004

48

Universidad Autnoma de Occidente

/* 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: " ) ; int entero = Integer.parseInt( br.readLine( ) ) ; // Notar que podemos usar // directamente el mtodo readLine( ) [ llamado desde el objeto br ] // como argumento del mtodo parseInt de la clase Integer, reduciendo todo a una // sola instruccin. Adems, no es necesario la variable auxiliar deltipo String ni // declarar por separado la variable 'entero' del tipo int (entero). // Muestre en consola el nmero ingresado, concatenado con un mensaje: System.out.println( "Usted ha digitado el numero entero " + entero ) ; System.exit( 0 ) ; } } // Fin del mtodo main( ) // Salga de la Aplicacin

// Fin de la clase EntradaBasica4

Salida:

/*

Ejemplo 5 Esta aplicacin Java ilustra cmo ingresar ms nmeros enteros


desde el teclado, los cuales han sido declarados en los otros formatos proporcionados por Java para nmeros enteros. */

import java.io.* ;

// importa el paquete de entrada - salida bsica.

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

Universidad Autnoma de Occidente

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 ) ; } } // Fin del mtodo main( ) // Salga de la Aplicacin

// Fin de la clase EntradaBasica5

Salida:

// Ejemplo 6 Esta aplicacin Java muestra cmo ingresar un nmero entero // desde el teclado utilizando la clase Integer y su mtodo intValue( ) import java.io.* ; // importa el paquete de entrada - salida bsica.

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

Universidad Autnoma de Occidente

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). // Crea un objeto, i, de la clase Integer: Integer i = new Integer( cadena ) ; // la cadena String se enva al constructor // Invoca al mtodo intValue( ) de la clase Integer: entero = i.intValue( ) ; // Muestre en consola el nmero ingresado, concatenado con un mensaje: System.out.println( "Usted ha digitado el numero entero " + entero ) ; System.exit( 0 ) ; } } // Fin del mtodo main( ) // Salga de la Aplicacin

// Fin de la clase EntradaBasica6

Salida:

// Ejemplo 7 Esta aplicacin Java muestra cmo ingresar un nmero entero // desde el teclado utilizando la clase Integer y su mtodo intValue( ) // Se usarn menos instrucciones import java.io.* ; // importa el paquete de entrada - salida bsica.

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

Universidad Autnoma de Occidente

// Muestre en consola el nmero ingresado, concatenado con un mensaje: System.out.println( "Usted ha digitado el numero entero " + entero ) ; System.exit( 0 ) ; } } // Fin del mtodo main( ) // Salga de la Aplicacin

// Fin de la clase EntradaBasica7

Salida:

// Ejemplo 8 Esta aplicacin Java muestra cmo ingresar nmeros enteros // desde el teclado utilizando las clases Integer, Long, Short y Byte import java.io.* ; // importa el paquete de entrada - salida bsica.

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

Universidad Autnoma de Occidente

System.out.print( "Digite el cuarto numero entero y pulse RETURN: " ) ; // Crea un objeto, m, de la clase Byte: Byte m = new Byte( br.readLine( ) ) ; // la cadena String, retornada // por el mtodo readLine( ) de la clase BufferedReader, se enva al constructor // de la clase Byte byte entero4 = m.byteValue( ) ; // Muestre en consola los nmeros ingresados: System.out.println( "Primer numero entero: " + entero1 ) ; System.out.println( "Segundo numero entero: " + entero2 ) ; System.out.println( "Tercer numero entero: " + entero3 ) ; System.out.println( "Cuarto numero entero: " + entero4 ) ; System.exit( 0 ) ; } } // Fin del mtodo main( ) // Salga de la Aplicacin

// Fin de la clase EntradaBasica8

Salida:

// Ejemplo 9 Esta aplicacin Java muestra cmo ingresar un nmero real (de punto flotante) // desde el teclado. import java.io.* ; // importa el paquete de entrada - salida bsica.

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

Universidad Autnoma de Occidente

// Muestre en consola el nmero ingresado, concatenado con un mensaje: System.out.println( "Usted ha digitado el numero real " + real ) ; System.exit( 0 ) ; } } // Fin del mtodo main( ) // Salga de la Aplicacin

// Fin de la clase EntradaBasica9

Salida:

// Ejemplo 10 Esta aplicacin Java tambin muestra cmo ingresar un nmero // real (de punto flotante) desde el teclado. import java.io.* ; // importa el paquete de entrada - salida bsica.

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 ) ; } } // Fin del mtodo main( ) // Salga de la Aplicacin

// Fin de la clase EntradaBasica10

Salida:

Informtica I. Versin 1.0 Agosto de 2004

54

Universidad Autnoma de Occidente

// Ejemplo 11 Esta aplicacin Java muestra cmo ingresar nmeros reales // desde el teclado utilizando las clases Double y Float import java.io.* ; // importa el paquete de entrada - salida bsica.

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 ) ; } } // Fin del mtodo main( ) // Salga de la Aplicacin

// Fin de la clase EntradaBasica11

Salida:

Informtica I. Versin 1.0 Agosto de 2004

55

Universidad Autnoma de Occidente

3.8 Ms informacin sobre Java

Java surgi en 1991 cuando un grupo de ingenieros de Sun Microsystems trataron de disear un

nuevo lenguaje de programacin destinado a electrodomsticos. La reducida potencia de clculo y memoria de los electrodomsticos llev a desarrollar un lenguaje sencillo capaz de generar cdigo de tamao muy reducido. Debido a la existencia de distintos tipos de CPUs y a los continuos cambios, era importante conseguir una herramienta independiente del tipo de CPU utilizada. Desarrollaron un cdigo neutro que no dependa del tipo de electrodomstico, el cual se ejecutaba sobre una mquina hipottica o virtual denominada Java Virtual Machine (JVM). Era la JVM quien interpretaba el cdigo neutro convirtindolo a cdigo particular de la CPU utilizada. Esto permita lo que luego se ha convertido en el principal lema del lenguaje: Write Once, Run Everywhere. A pesar de los esfuerzos realizados por sus creadores, ninguna empresa de electrodomsticos se interes por el nuevo lenguaje. Como lenguaje de programacin para computadores, Java se introdujo a finales de 1995. La clave fue la incorporacin de un intrprete Java en la versin 2.0 del programa Netscape Navigator, produciendo una verdadera revolucin en Internet. Java 1.1 apareci a principios de 1997, mejorando sustancialmente la primera versin del lenguaje. Java 1.2, ms tarde rebautizado como Java 2, naci a finales de 1998. Aunque hoy en da (2004) existe la versin 1.5 de Java, an se le sigue llamando Java 2. Al programar en Java no se parte de cero. Cualquier aplicacin que se desarrolle cuelga (o se apoya, segn como se quiera ver) en un gran nmero de clases preexistentes. Algunas de ellas las ha podido hacer el propio usuario, otras pueden ser comerciales, pero siempre hay un nmero muy importante de clases que forman parte del propio lenguaje (el API o Application Programming Interface de Java). Java incorpora en el propio lenguaje muchos aspectos que en cualquier otro lenguaje son ex tensiones propiedad de empresas de software o fabricantes de computadores (threads, ejecucin remota, componentes, seguridad, acceso a bases de datos, etc.). Por eso muchos expertos opinan que Java es el lenguaje ideal para aprender la informtica moderna, porque incorpora todos estos conceptos de un modo estndar, mucho ms sencillo y claro que con las citadas extensiones de otros lenguajes. Esto es consecuencia de haber sido diseado ms recientemente y por un nico equipo. El principal objetivo del lenguaje Java es llegar a ser el nexo universal que conecte a los usuarios con la informacin, est sta situada en el computador local, en un servidor de Web, en una base de datos o en cualquier otro lugar.

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

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

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.

*.class) creados por el compilador de Java (javac.exe). Tiene numerosas opciones entre las que

La JVM es el intrprete de Java. Ejecuta los bytecodes (archivos compilados con extensin

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. 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

Java utiliza adems una nueva variable de entorno denominada CLASSPATH, la cual

58

Universidad Autnoma de Occidente

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.

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:
javac -classpath .\;G:\MyProject\OtherClasses.jar ContieneMain.java java -classpath .\;G:\MyProject\OtherClasses.jar ContieneMain

Tambin es posible utilizar la opcin classpath en el momento de llamar al compilador

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

Universidad Autnoma de Occidente

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

El anterior ejemplo presenta la estructura habitual de un programa realizado en cualquier lenguaje orientado a objetos u OOP (Object Oriented Programming), y en particular en el lenguaje Java. Aparece una clase que contiene el programa principal (aquel que contiene la funcin main()) y algunas clases de usuario (las especficas de la aplicacin que se est desarrollando) que son utilizadas por el programa principal. Los archivos fuente tienen la extensin *.java, mientras que los archivos compilados tienen la extensin *.class. Un archivo fuente (*.java) puede contener ms de una clase, pero slo una puede ser public. El nombre del archivo fuente debe coincidir con el de la clase public (con la ex tensin *.java). Si por ejemplo en un archivo aparece la declaracin (public class MiClase {...}) entonces el nombre del archivo deber ser MiClase.java. Es importante que coincidan maysculas y minsculas ya que MiClase.java y miclase.java seran clases diferentes para Java. Si la clase no es public, no es necesario que su nombre coincida con el del archivo. Una clase puede ser public o package (default), pero no private o protected. Estos conceptos se explican posteriormente. De ordinario una aplicacin est constituida por varios archivos *.class. Cada clase realiza unas funciones particulares, permitiendo construir las aplicaciones con gran modularidad e independencia entre clases. La aplicacin se ejecuta por medio del nombre de la clase que contiene la funcin main() (sin la extensin *.class). Las clases de Java se agrupan en packages, que son libreras de clases. Si las clases no se definen como pertenecientes a un package, se utiliza un package por defecto (default) que es el directorio activo. Los packages se estudian con ms detenimiento en prximos capitulos.

Informtica I. Versin 1.0 Agosto de 2004

60

Universidad Autnoma de Occidente

UNIDAD 4. TIPOS DE DATOS, VARIABLES Y OPERADORES. 4. PROGRAMACIN EN JAVA

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: ser tipos primitivos o referencias. 2. Variables locales: Se definen dentro de un mtodo o ms en general dentro de cualquier bloque entre llaves {}. Se crean en el interior del bloque y se destruyen al finalizar dicho bloque. Pueden ser tambin tipos primitivos o referencias.
4.1.1 Nombres de Variables Los nombres de variables en Java se pueden crear con mucha libertad. Pueden ser cualquier conjunto de caracteres numricos y alfanumricos, sin algunos caracteres especiales utilizados por Java como operadores o separadores ( ,.+-*/ etc.). Existe una serie de palabras reservadas las cuales tienen un significado especial para Java y por lo tanto no se pueden utilizar como nombres de variables. Dichas palabras son:

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.

Informtica I. Versin 1.0 Agosto de 2004

61

Universidad Autnoma de Occidente

4.1.2

Tipos Primitivos de Variables

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
Boolean Char Byte Short Int Long Float Double

Descripcin
1 byte. Valores true y false 2 bytes. Unicode. Comprende el cdigo ASCII 1 byte. Valor entero entre -128 y 127 2 bytes. Valor entero entre -32768 y 32767 4 bytes. Valor entero entre -2.147.483.648 y 2.147.483.647 8 bytes. Valor entre -9.223.372.036.854.775.808 y 9.223.372.036.854.775.807 4 bytes (entre 6 y 7 cifras decimales equivalentes). De -3.402823E38 a -1.401298E-45 y de 1.401298E-45 a 3.402823E38 8 bytes (unas 15 cifras decimales equivalentes). De -1.79769313486232E308 a -4.94065645841247E-324 y de 4.94065645841247E-324 a 1.79769313486232E308

Tabla 4.1. Tipos primitivos de variables en Java. Los tipos primitivos de Java tienen algunas caractersticas importantes que se resumen a continuacin: 1. El tipo boolean no es un valor numrico: slo admite los valores true o false. El tipo boolean no se identifica con el igual o distinto de cero, como en C/C++. El resultado de la ex presin lgica que aparece como condicin en un bucle o en una Decisin debe ser boolean. 2. El tipo char contiene caracteres en cdigo UNICODE (que incluye el cdigo ASCII), y ocupan 16 bits por carcter. Comprende los caracteres de prcticamente todos los idiomas. 3. Los tipos byte, short, int y long son nmeros enteros que pueden ser positivos o negativos, con distintos valores mximos y mnimos. A diferencia de C/C++, en Java no hay enteros unsigned. 4. Los tipos float y double son valores de punto flotante (nmeros reales) con 6-7 y 15 cifras decimales equivalentes, respectivamente. 5. Se utiliza la palabra void para indicar la ausencia de un tipo de variable determinado. 6. A diferencia de C/C++, los tipos de variables en Java estn perfectamente definidos en todas y cada una de las posibles plataformas. Por ejemplo, un int ocupa siempre la misma memoria y tiene el mismo rango de valores, en cualquier tipo de computador. 7. Existen extensiones de Java 1.2 para aprovechar la arquitectura de los procesadores Intel, que permiten realizar operaciones de punto flotente con una precisin extendida de 80 bits.
4.1.3 Cmo se definen e inicializan las variables Una variable se define especificando el tipo y el nombre de dicha variable. Estas variables pueden ser tanto de tipos primitivos como referencias a objetos de alguna clase perteneciente al API de Java o generada por el usuario. Si no se especifica un valor en su declaracin, las variables

Informtica I. Versin 1.0 Agosto de 2004.

62

Universidad Autnoma de Occidente

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; // Declaracin de una referencia a un objeto MyClass. // Se inicializa a null unaRef = new MyClass(); // La referencia apunta al nuevo objeto creado // Se ha utilizado el constructor por defecto MyClass segundaRef = unaRef; // Declaracin de una referencia a un objeto MyClass. // Se inicializa al mismo valor que unaRef int [ ] vector; // Declaracin de un array. Se inicializa a null vector = new int[10]; // Vector de 10 enteros, inicializados a 0 double [ ] v = {1.0, 2.65, 3.1}; // Declaracin e inicializacin de un vector de 3 // elementos con los valores entre llaves MyClass [ ] lista=new MyClass[5]; // Se crea un vector de 5 referencias a objetos // Las 5 referencias son inicializadas a null lista[0] = unaRef; // Se asigna a lista[0] el mismo valor que unaRef lista[1] = new MyClass(); // Se asigna a lista[1] la referencia al nuevo objeto // El resto (lista[2]lista[4] siguen con valor null

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

Universidad Autnoma de Occidente

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 (%).

Informtica I. Versin 1.0 Agosto de 2004.

64

Universidad Autnoma de Occidente

4.2.2 Operadores de asignacin Los operadores de asignacin permiten asignar un valor a una variable. El operador de asignacin por excelencia es el operador igual (=). La forma general de las sentencias de asignacin con este operador es:
variable = expression;

Operador Utilizacin Expresin equivalente


+= -= *= /= %= op1 + = op2 op1 -= op2 op1 *= op2 op1 /= op2 op1 %= op2 op1 = op1 + op2 op1 = op1 - op2 op1 = op1 * op2 op1 = op1 / op2 op1 = op1 % op2

Tabla 4.2. Otros operadores de asignacin.

Java dispone de otros operadores de asignacin. Se trata de versiones abreviadas del operador (=) que realizan operaciones acumulativas sobre una variable. La Tabla 4.2 muestra estos operadores y su equivalencia con el uso del operador igual (=).
4.2.3 Operadores unarios

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

El operador instanceof permite saber si un objeto pertenece o no a una determinada clase. Es un operador binario cuya forma general es, objectName instanceof ClassName y que devuelve true o false segn el objeto pertenezca o no a la clase.
4.2.5 Operador condicional ?: Este operador, tomado de C/C++, permite realizar decisiones condicionales sencillas. Su forma general es la siguiente:
booleanExpression ? res1 : res2

donde se evala booleanExpression y se devuelve res1 si el resultado es true y res2 si el resultado es false. Es el nico operador ternario (tres argumentos) de Java. Como todo operador que devuelve un valor puede ser utilizado en una expresin. Por ejemplo las sentencias:
x=1 ; y=10; z = (x<y)?x+3:y+8;

asignaran a z el valor 4, es decir x+3.


4.2.6 Operadores incrementales Java dispone del operador incremento (++) y decremento (--). El operador (++) incrementa en una unidad la variable a la que se aplica, mientras que (--) la reduce en una unidad. Estos operadores se pueden utilizar de dos formas:

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

Universidad Autnoma de Occidente

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. Operador Utilizacin El resultado es true > op1 > op2 si op1 es mayor que op2 >= op1 >= op2 si op1 es mayor o igual que op2 < op1 < op2 si op1 es menor que op2 <= op1 <= op2 si op1 es menor o igual que op2 == op1 == op2 si op1 y op2 son iguales != op1 != op2 si op1 y op2 son diferentes
Tabla 4.3. Operadores relacionales.

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
&& || AND OR

Utilizacin Resultado
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

true si op1 u op2 son true. Si op1 es true ya no se evala op2 true si op es false y false si op es true true si op1 y op2 son true. Siempre se evala op2 true si op1 u op2 son true. Siempre se evala op2

Tabla 4.4. Operadores lgicos.

4.2.9 Operador de concatenacin de cadenas de caracteres (+)

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.

Informtica I. Versin 1.0 Agosto de 2004.

66

Universidad Autnoma de Occidente

4.2.10 Operadores que actan a nivel de bits

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){...}

La Tabla 4.6 muestra los operadores de asignacin a nivel de bits.


Operador
&= |= ^= <<= >>= >>>=

Utilizacin
op1 &= op2 op1 |= op2 op1 ^= op2 op1 <<= op2 op1 >>= op2 op1 >>>= op2

Equivalente a
op1 = op1 & op2 op1 = op1 | op2 op1 = op1 ^ op2 op1 = op1 << op2 op1 = op1 >> op2 op1 = op1 >>> op2

Tabla 4.6. Operadores de asignacin a nivel de bits.

4.2.11 Precedencia de operadores

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.

[ ] . (params) expr++ expr-++expr --expr +expr -expr ~ ! new (type)expr */% +<< >> >>>
67

Universidad Autnoma de Occidente

relational equality bitwise AND bitwise exclusive OR bitwise inclusive OR logical AND logical OR conditional assignment En

< > <= >= instanceof == != & ^ | && || ?: = += -= *= /= %= &= ^= |= <<= >>= >>>=

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
significa que el valor de la derecha se copia sobre la variable de la izquierda.

Informtica I. Versin 1.0 Agosto de 2004.

68

Universidad Autnoma de Occidente

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.

Esa es una definicin vlida de algoritmo, otra posible definicin es la siguiente: Un algoritmo es un conjunto de instrucciones combinadas de forma adecuada para resolver un determinado problema en una cantidad finita de tiempo. Cada instruccin es una indicacin sencilla y no ambigua. Despues de los siguientes ejemplos, el alumno debera tener bastante claro qu es un algoritmo, en qu consiste y dar ejemplos de algoritmos; ahora es probable que se est preguntando de dnde procede el mismo trmino, ALGORITMO, por qu denominamos algoritmos a los algoritmos y no recetas o combinaciones de indicaciones sencillas y no ambiguas...? El trmino proviene de Mahommed ibn Musa al-Khowrizm (Mahommed, hijo de Musa, natural de Kharizm), matemtico persa del siglo IX; las matemticas le deben la introduccin del sistema de numeracin actual y del lgebra. En su libro De numero indiorum (Sobre los nmeros hindes) proporciona las reglas para realizar las operaciones aritmticas (con los nuevos nmeros, por supuesto), dichas reglas se denominaron reglas de al-Khowrizm y, por deformacin algoritmos, hacindose extensivo el trmino a cualquier conjunto de reglas para resolver un problema determinado.

Resolucin de Problemas y el Uso del Computador


Informtica I. Versin 1.0 Agosto de 2004.

69

Universidad Autnoma de Occidente

Antes de entrar en la codificacin para la resolucin de un problema por tcnicas informticas, hemos de contar con una idea bastante precisa de cmo podemos llegar a esta solucin.
Resolucin de un problema Anlisis del problema Diseo del algoritmo Programacin del algoritmo

Fig. 5.1. La resolucin de un problema en Informtica El matemtico G. Poyla propuso, a finales de 1940, una metodologa general para la resolucin de problemas matemticos, que ha sido adaptada para el caso en que se cuente con un computador como recurso. Esta metodologa, de forma muy esquematizada, se puede dividir en tres fases (Ver Figura 3.1): 1. Anlisis del problema 2. Diseo del algoritmo 3. Programacin del algoritmo
Anlisis del problema

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): Definir el problema con total precisin. Especificar los datos de partida necesarios para la resolucin del mismo (especificaciones de entrada). Especificar la informacin que debe proporcionarse al resolverse (especificaciones de salida).
Anlisis del problema Definicin del problema Especificiones de entrada Especificacion es de salida

Fig. 5.2. Anlisis del problema Ejemplo : Elaborar el anlisis general que responda a la pregunta: Qu debo hacer para ver la pelcula XYZ?. 1. 2. 3. 4. Ir al cine donde proyectan MatriX Comprar una entrada. Ver la pelcula. Regresar a casa.

Ejemplo : Elaborar el anlisis para obtener el rea y la longitud de una circunferencia.

1. Utilizar las frmulas del rea y la circunferencia en funcin del radio. 2. Las entradas de datos se reducen al dato correspondiente al radio del crculo. 3. Las salidas sern los datos solicitados: rea y circunferencia.
Informtica I. Versin 1.0 Agosto de 2004.

70

Universidad Autnoma de Occidente

Diseo del Algoritmo

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

Universidad Autnoma de Occidente

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.

Los pasos del algoritmo son: 1. Inicio 2. Aflojar los tornillos de la rueda pinchada con la llave inglesa. 3. Ubicar el gato mecnico en su sitio. 4. Levantar el gato hasta que la rueda pinchada pueda girar libremente. 5. Quitar los tornillos y la rueda pinchada. 6. Poner rueda de repuesto y los tornillos. 7. Bajar el gato hasta que se pueda liberar. 8. Sacar el gato de su sitio. 9. Apretar los tornillos con la llave inglesa. 10. Fin. Podramos modificar este algoritmo, bien sea escribiendo ms lneas de detalle uniendo algunos pasos, y an as funcionara para resolver nuestro problema. Esto quiere decir que podemos tener algoritmos diferentes, con diferente diseo, que resuelven el mismo problema. Cul de ellos es ms eficiente, hablando desde el punto de vista computacional? Ese es tema de otro curso, por el momento nos debemos concentrar en cual algoritmo es ms claro, cual es ms fcil de entender. Ejemplo: Un cliente hace un pedido a una fbrica. La fbrica examina en su banco de datos la ficha del cliente, si el cliente es solvente entonces la empresa acepta el pedido; en caso contrario lo rechaza. Elabore el algoritmo correspondiente. Los pasos del algoritmo son: 1. Inicio. 2. Leer el pedido. 3. Examinar la ficha del cliente. 4. Si el cliente es solvente, aceptar pedido; en caso contrario, rechazarlo. 5. Fin.
Informtica I. Versin 1.0 Agosto de 2004.

72

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

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

Los problemas complejos se pueden resolver ms eficazmente cuando se descomponen en subproblemas que sean ms fciles de resolver que el original. Este mtodo se denomina divide y vencers (Divide and conquere) y consiste en convertir un problema complejo en otros ms simples que, una vez resueltos, en su conjunto nos solucionen el original. Al procedimiento de descomposicin de un problema en subproblemas ms simples, llamados mdulos, para, a continuacin, seguir dividiendo estos subproblemas en otros ms simples (otros mdulos), se le denomina diseo descendente (top down, en ingls). Las ventajas ms importantes de este tipo de diseo son: 1. El problema se comprende ms fcilmente al dividirse en mdulos o partes ms simples. Adelantemos que cuando demos el salto a la programacin, utilizaremos esta idea constantemente, de forma que hablaremos tambin de procedimientos, o subprogramas. 2. Las modificaciones en los mdulos son ms fciles, pues estamos ante algoritmos ms sencillos. 3. La comprobacin del problema se puede realizar ms fcilmente, al poder localizar los posibles fallos con mayor precisin. Refinamiento por pasos Durante el diseo, entenderemos por refinamiento por pasos, la metodologa por la que en un primer esbozo del algoritmo nos limitamos a sealar o describir un reducido numero de pasos, que debern ser expresados con mayor detalle posteriormente. Tras esta primera descripcin, stos se especifican con mayor minuciosidad, de forma ms extensa y con ms pasos especficos. En cada nivel de refinamiento hay que considerar dos fases: Qu hace el mdulo? para, a continuacin, responder a Cmo lo hace? Como es natural, dependiendo de la complejidad del problema se necesitarn diferentes y sucesivos niveles de refinamiento antes de que pueda obtenerse un algoritmo con suficiente nivel de detalle. As, en el Ejemplo 1, del clculo de la longitud de una circunferencia y la superficie de su crculo, a pesar de presentar en su diseo un bajo nivel de complejidad, se puede descomponer en subproblemas ms simples: 1. leer datos de entrada, 2. calcular superficie y longitud, 3. escribir resultados.
Informtica I. Versin 1.0 Agosto de 2004.

74

Universidad Autnoma de Occidente

El ejemplo siguiente, nos muestra el diseo de un algoritmo para un problema de carcter no numrico
Ejemplo 3:

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. Ir al cine donde proyectan MatriX Comprar una entrada Ver la pelcula Regresar a casa

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

Universidad Autnoma de Occidente

mientras nmero de asiento no coincida con nmero de billete hacer avanzar a travs de la fila a la siguiente butaca sentarse en la butaca fin De esta forma, podramos seguir hasta la descomposicin de las distintas acciones en instrucciones susceptibles de ser interpretadas directamente por el computador. Programacin del Algoritmo

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

Fig. 5.3 Programacin del algoritmo La fase de conversin de un algoritmo en instrucciones de un lenguaje de programacin, como sabemos, se denomina codificacin. El cdigo deber estar escrito de acuerdo con la sintaxis del lenguaje de programacin ya que solamente las instrucciones sintcticamente correctas pueden ser interpretadas por el computador. Ntese que durante el proceso de programacin, se debe separar el diseo del algoritmo de su posterior implementacin en un lenguaje de programacin especfico. Por ello distinguimos entre el concepto ms general de programacin y el ms particular de codificacin, que depende del lenguaje de programacin utilizado. Al llegar a este punto, es posible que el lector conozca al menos uno de estos lenguajes y ste es el momento en el que podra mostrar sus habilidades para efectuar una codificacin lo ms correcta y eficiente posible. Tras la codificacin del programa, ste deber ejecutarse en un computador. El resultado de esta primera ejecucin es incierto, ya que existe una alta probabilidad de que aparezcan errores, bien en la codificacin, bien en el propio algoritmo. Por tanto, el paso siguiente consiste en comprobar el correcto funcionamiento del programa y en asegurarse, en la medida de lo posible, de la validez de los resultados proporcionados por la mquina.
Formas de describir un algoritmo Dado que los algoritmos permiten resolver problemas de forma mecnica, est claro que resulta muy interesante compartir dicho algoritmo de tal manera que otras personas puedan conocerlo y aplicarlo; as surge el problema de describir los algoritmos de forma tal que todas las caractersticas que los definen se mantengan invariables.

Lenguaje natural. La primera y ms sencilla forma de describir un algoritmo es empleando el lenguaje natural; por ejemplo, el algoritmo para encontrar las races de una ecuacin de segundo grado (, ecuacin cuadrtica) podra describirse as: 1. Definir (o, leer) los coeficientes de la ecuacin de segundo grado: a, b y c. 2. Determinar el valor del discriminante: d = b 2 - 4ac. 3. Si el discriminante es cero, slo hay una solucin: -b / (2a). 4. Si el discriminante es positivo, hay dos soluciones: (-b d) / (2a).
Informtica I. Versin 1.0 Agosto de 2004.

76

Universidad Autnoma de Occidente

5. Si el discriminante es negativo, no hay soluciones reales. La ventaja fundamental es la facilidad de comprensin, cualquier persona (hispanoparlante, por supuesto) que lea dicho algoritmo podra entenderlo y aplicarlo; sin embargo, son varios los problemas que plantea describir un algoritmo de esta forma: - El lenguaje natural no es universal, este algoritmo sera completamente intil para los no hispanoparlantes. - El lenguaje natural es ambiguo y, por tanto, susceptible de errores. - El lenguaje natural es demasiado amplio, lo que para una persona puede ser una instruccin sencilla, puede no serlo para otra y, desde luego, no lo ser para un computador. Por todo ello, se han buscado nuevas formas de describir los algoritmos que, cuando menos, sean ms universales, estn mejor delimitadas y no sean ambiguas; dos tcnicas que logran esto son los organigramas y las notaciones en pseudocdigo.
Diagramas de Flujo (Organigramas)

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:

En la pgina siguiente se muestra un organigrama que describe el algoritmo anterior. Los organigramas presentan varias ventajas frente al lenguaje natural: - Los smbolos son universales. - Son menos propensos a la ambigedad. - Por estar basados en un nmero pequeo de bloques y reglas para su empleo permiten delimitar mejor los algoritmos. - Se aproximan ms a la forma en que trabaja el ordenador. Sin embargo: - El hecho de emplear smbolos supone que una persona que desconozca los smbolos puede tener dificultades para comprender el algoritmo o no entenderlo en absoluto. - Aunque los smbolos son universales el texto que se coloca en su interior sigue siendo lenguaje natural. - La representacin grfica puede resultar bastante tediosa y en el caso de algoritmos complejos - extremadamente confusa. - Un ordenador no es capaz de utilizar una representacin visual como descripcin de un algoritmo. Actualmente, los organigramas no son muy utilizados, aunque para mostrar el funcionamiento de algoritmos sencillos siguen siendo resultando prcticos.

Informtica I. Versin 1.0 Agosto de 2004.

77

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

escribir Deme los coeficientes y resolver una ecuacin de 2 grado escribir Cunto vale A? leer a escribir Cunto vale B? leer b escribir Cunto vale C? leer c b2-4ac discr si discr = 0 entonces s -b/(2a) escribir Slo hay una solucin:, s si no si discr > 0 entonces s1 (-b + discr)/(2a) s2 (-b - discr)/(2a) escribir Las soluciones son:, s1, s2 si no escribir No hay soluciones reales. fin_si fin_si La ventajas del uso del pseudocdigo residen en: Su uso en la planificacin de un programa; permitiendo que el programador se pueda concentrar en la lgica y en las estructuras de control y no tenga que preocuparse, por ahora, de detalles acerca de las reglas sintcticas y semnticas de un lenguaje especfico. Consecuentemente, es ms fcil de modificar en el caso de que se descubran errores o anomalas en la lgica del algoritmo. 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

Universidad Autnoma de Occidente

public static void main( String args[ ] ) throws IOException { /* Para recibir los datos va teclado, debe crear un objeto (que aqu se ha llamado br) de la clase BufferedReader Observe que al constructor de la clase BufferedReader se le enva como argumento una nueva instancia (= 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 */ // Si lo anterior le parece un trabalenguas, por favor no se alarme, // no tire la toalla. por el momento, procure memorizar la siguiente lnea: BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ; // Declaracin de los coeficientes, del discriminante y de las races: double a, b, c ; // Coeficientes de la ecuacin ( a != 0 ). double d; // Discriminante de la cuadrtica: d = b * b - 4 * a * c double x, x1, x2 ; // Races de la ecuacin. // Lectura, va teclado, de los coeficientes: System.out.print( "Digite el valor del coeficiente a (a diferente de cero): " ) ; a = Double.parseDouble( br.readLine( ) ) ; System.out.print( "Digite el valor del coeficiente b: " ) ; b = Double.parseDouble(br.readLine( ) ) ; System.out.print( "Digite el valor del coeficiente c: " ) ; c = Double.parseDouble(br.readLine( ) ) ; // Calcula el discriminante: d=b*b-4*a*c; if( d == 0 ) { x = - b / (2 * a) ; System.out.println( "Dos raices iguales: X = " + x ) ; } else if( d > 0 ) { x1 = ( - b + Math.sqrt( d ) ) / (2 * a) ; x2 = ( - b - Math.sqrt( d ) ) / (2 * a) ; System.out.println( "Raices reales diferentes: " ) ; System.out.println( " X1 = " + x1 ) ; System.out.println( " X2 = " + x2 ) ; } else System.out.println( "La ecuacion NO tiene raices reales" ) ; System.exit( 0 ) ; // Termine el programa (salir del sistema) } // Fin del mtodo main( ) // Fin de la clase Cuadratica 80

Informtica I. Versin 1.0 Agosto de 2004.

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

normalmente la indentacin (sangra en el margen izquierdo) de diferentes lneas para ayudar a delimitar visualmente cada una de las estructuras utilizadas. El siguiente es el programa escrito en Java:
import java.io.* ; class EsPar1 { 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 n ; // Entrada de datos: System.out.print( "Digite un numero entero positivo: " ) ; n = Integer.parseInt( br.readLine( ) ) ; // Ciclo while que verifica si n es par: while(n > 2) { n=n-2; } if(n == 2) System.out.println( "El numero ingresado es par" ) ; else System.out.println( "El numero ingresado es impar" ) ; System.exit( 0 ) ; } //Fin del mtodo main( ) } // Fin de la clase EsPar1

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

Universidad Autnoma de Occidente

Declaracin de una variable: tipo nombre Declaracin de varias variables con el mismo tipo de dato: tipo nombre1, nombre2, nombre3, ..., nombreN

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 Ejemplo Declaracin de variables.

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

Universidad Autnoma de Occidente

Literales de carcter 'a', 'B', ';', '<', '+', etc. Literales de cadena "Hola", "Algoritmos Computacionales", etc. Literales lgicos verdadero, falso Instrucciones Algortmicas Bsicas Existen tres instrucciones algortmicas bsicas que son las siguientes: 1.- Entrada Consiste en obtener un dato de un dispositivo de entrada, como el teclado, y almacenarlo en una variable. En general, la accin de ingresar un dato a una variable se expresa en el pseudocdigo mediante la palabra LEER, de la siguiente forma: LEER variable

Por ejemplo, la instruccin: LEER estatura Solicita el ingreso de un valor, desde algn dispositivo de entrada (como el teclado), para la variable estatura. 2.- Salida Consiste en mostrar el valor de una variable en un dispositivo de salida, como la pantalla. En general, la accin de mostrar el valor de una variable se expresa en el pseudocdigo mediante la palabra IMPRIMIR de la siguiente forma: IMPRIMIR variable Por ejemplo, la instruccin: IMPRIMIR importeCompra Muestra, en algn dispositivo de salida (como la pantalla), el valor de la variable importeCompra. 3.- Asignacin Consiste en asignar a (, almacenar en) una variable el valor de una expresin. La expresin puede ser una simple variable, un simple literal o una combinacin de variables, literales y operadores. La asignacin se expresa en el pseudocdigo de la siguiente forma: variable = expresin Donde variable y el valor de expresin deben tener el mismo tipo de dato!! Cuando se asigna un valor ENTERO a una variable REAL, entonces el valor ENTERO se convertir en REAL antes de almacenarse. As, al asignar el valor ENTERO 25 a una variable REAL, se almacenar 25.0.
Ejemplo:- Algoritmo para expresar en centmetros y pulgadas una cantidad dada en metros.

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

Universidad Autnoma de Occidente

// Solicita el ingreso de la cantidad en metros LEER M // Calcula la cantidad en centmetros y lo asigna a la variable C C = M * 100 // Calcula la cantidad en pulgadas y lo asigna a la variable P P = C / 2.54 // Muestra los valores de las variables C y P IMPRIMIR C, P FIN
Expresiones Aritmticas Una expresin aritmtica es una combinacin de variables, literales y operadores aritmticos. Operadores Aritmticos En la tabla que sigue se muestran los operadores aritmticos que vamos a utilizar. Tabla 5.1 Operadores aritmticos Operador + * / % 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

Si existen parntesis anidados, se evala primero la expresin en el parntesis ms interno. Si varios operadores o parntesis tienen la misma jerarqua, la evaluacin ser de izquierda a derecha.
Ejemplo:- Cul es el equivalente en pseudocdigo de la siguiente expresin algebraica?

Informtica I. Versin 1.0 Agosto de 2004.

85

Universidad Autnoma de Occidente

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

Aplicando las reglas de jerarqua de los operadores aritmticos: Primero, se sumar a ms b. Segundo, se dividir c entre d. Tercero, el resultado ya obtenido de a+b se dividir entre el resultado ya obtenido de c/d. Cuarto, se dividir 4 entre el resultado ya obtenido de ( (a+b)/(c/d) ) Quinto, se dividir w entre p. Sexto, se dividir v entre el resultado ya obtenido de (w/p). Sptimo, se multiplicar 5 por m. Octavo, se multiplicar el resultado ya obtenido de 5*m por n. Noveno, se multiplicar el resultado ya obtenido de 5*m*n por q. Dcimo, se sumar el resultado ya obtenido de 4/( (a+b)/(c/d) ) ms el resultado ya obtenido de v/(w/p). Undcimo, se sumar el resultado ya obtenido de 4/( (a+b)/(c/d) ) + v/(w/p) ms el resultado ya obtenido de 5*m*n*q.
Informtica I. Versin 1.0 Agosto de 2004.

86

Universidad Autnoma de Occidente

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 Tabla 5.4 Operadores lgicos Significado Ejemplo No (Not) !a Y (And) a && b (Or) a || b EJERCICIOS RESUELTOS 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

Operador ! && ||

// 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

Universidad Autnoma de Occidente

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( ) } // Fin de la clase Rectangulo1

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

Universidad Autnoma de Occidente

// 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

Universidad Autnoma de Occidente

// Fin de la clase Conversiones1

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

Universidad Autnoma de Occidente

cdolares = Double.parseDouble( br.readLine( ) ) ; System.out.print( "Digite la cantidad de dinero en marcos: $ " ) ; cmarcos = Double.parseDouble( br.readLine( ) ) ; // 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 System.out.println( "Rubro 1 para salud: $ " + rubro1 + " euros" ) ; System.out.println( "Rubro 2 para comedor: $ " + rubro2 + " euros" ) ; System.out.println( "Rubro 3 para gastos de admon: $ " + rubro3 + " euros" ) ; System.exit( 0 ) ; } } //Fin del mtodo main( )

// Fin de la clase Euros1

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

Universidad Autnoma de Occidente

// Clculo de la velocidad en km/hr velkmhr = espkm / thor // Salida de resultados IMPRIMIR velkmhr FIN Veamos el algoritmo anterior escrito en Java:
import java.io.* ; class VelocidadAtleta1 { 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 tmin, tseg, tcen ; double espmt, thor, espkm, velkmhr ; // Entrada de datos: System.out.print( "Digite el tiempo empleado en minutos: " ) ; tmin = Integer.parseInt( br.readLine( ) ) ; System.out.print( "Digite el tiempo empleado en segundos: " ) ; tseg = Integer.parseInt( br.readLine( ) ) ; System.out.print( "Digite el tiempo empleado en centesimas de segundos: " ) ; tcen = Integer.parseInt( br.readLine( ) ) ; System.out.print( "Digite el espacio recorrido en metros: " ) ; espmt = Double.parseDouble( br.readLine( ) ) ; // Proceso de clculo // Clculo del tiempo total empleado en horas: thor = tmin / 60.0 + tseg / 3600.0 + (tcen / 100.0) / 3600.0 ; // Aqu sobran los // parntesis. Se dejan por claridad. // Clculo del espacio recorrido en kilmetros: espkm = espmt / 1000 ; // Clculo de la velocidad en km/hr: velkmhr = espkm / thor ; // Salida de resultados System.out.println( "Velocidad del atleta: " + velkmhr + " Km / Hr." ) ; System.exit( 0 ) ; } } //Fin del mtodo main( )

// Fin de la clase VelocidadAtleta1

Informtica I. Versin 1.0 Agosto de 2004.

92

Universidad Autnoma de Occidente

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

Podemos concluir entonces que: unidades = numero % 10 Siendo % el operador residuo. Este operador permite obtener el residuo de una divisin, as como / permite obtener el cociente.
Algoritmo INICIO // Declaracin de variables ENTERO numero, unidades

// 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

Universidad Autnoma de Occidente

unidades = num % 10 ; System.out.println( num + " tiene " + unidades + " como cifra de las unidades." ) ; System.exit( 0 ) ; } //Fin del mtodo main( ) } // Fin de la clase UnidadesNumero1

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

Universidad Autnoma de Occidente

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( ) ) ; unidades = num - (num / 10) * 10 ; System.out.println( num + " tiene " + unidades + " como cifra de las unidades." ) ; System.exit( 0 ) ; } //Fin del mtodo main( ) } // Fin de la clase UnidadesNumero2

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 decenas = cociente % 10 cociente = cociente / 10 centenas = cociente % 10 millares = cociente / 10

3245 | 10 5 324 324 | 10 4 32 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

Universidad Autnoma de Occidente

LEER N

// Proceso de clculo unidades = N % 10 cociente = N / 10 decenas = cociente % 10 cociente = cociente / 10 centenas = cociente % 10 millares = cociente/10 suma = unidades + decenas + centenas + millares

// 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

Universidad Autnoma de Occidente

} }

System.exit( 0 ) ; //Fin del mtodo main( )

// Fin de la clase SumaCifrasNum1

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

Universidad Autnoma de Occidente

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, resto, suma ; // Entrada de datos: System.out.print( "Digite un numero entero positivo de 4 cifras: " ) ; num = Integer.parseInt( br.readLine( ) ) ; // Proceso de clculo: millares = num / 1000 ; resto = num % 1000 ; centenas = resto / 100 ; resto = resto % 100 ; decenas = resto / 10 ; unidades = resto % 10 ; suma = unidades + decenas + centenas + millares ; System.out.println( "Suma de las cifras del numero: " + suma ) ; System.exit( 0 ) ; } } //Fin del mtodo main( )

// Fin de la clase SumaCifrasNum2

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

Universidad Autnoma de Occidente

// 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

Universidad Autnoma de Occidente

// Salida de resultados System.out.println( "Para terminar el dia, hacen falta: " + hor2 + " horas, " + min2 + " minutos y " + seg2 + " segundos." ) ; System.exit( 0 ) ; } } //Fin del mtodo main( )

// Fin de la clase HmsQueFaltan1

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

Universidad Autnoma de Occidente

// 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, hor3, min3, seg3, totseg, resto ; // Entrada de datos: System.out.print( "Digite la primera hora (numero entero): " ) ; hor1 = Integer.parseInt( br.readLine( ) ) ; System.out.print( "Digite los minutos de la primera hora (numero entero): " ) ; min1 = Integer.parseInt( br.readLine( ) ) ; System.out.print( "Digite los segundos de la primera hora (numero entero): " ) ; seg1 = Integer.parseInt( br.readLine( ) ) ; System.out.println( "**********************************************" ) ; System.out.print( "Digite la segunda hora (numero entero): " ) ; hor2 = Integer.parseInt( br.readLine( ) ) ; System.out.print( "Digite los minutos de la segunda hora (numero entero): " ) ; min2 = Integer.parseInt( br.readLine( ) ) ; System.out.print( "Digite los segundos de la segunda hora (numero entero): " ) ; seg2 = Integer.parseInt( br.readLine( ) ) ; // Proceso de clculo. // ******************* // 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 ; System.out.println( "**********************************************" ) ; // Salida de resultados System.out.println( "La suma de los dos tiempos da: " + hor3 + " horas, " + min3 + " minutos y " + seg3 + " segundos." ) ; System.exit( 0 ) ; } } //Fin del mtodo main( )

// Fin de la clase HmsQueFaltan2 101

Informtica I. Versin 1.0 Agosto de 2004.

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

System.out.print( "Digite el valor de la primera venta: $ " ) ; venta1 = Float.parseFloat( br.readLine( ) ) ; System.out.print( "Digite el valor de la segunda venta: $ " ) ; venta2 = Float.parseFloat( br.readLine( ) ) ; System.out.print( "Digite el valor de la tercera venta: $ " ) ; venta3 = Float.parseFloat( br.readLine( ) ) ; // Proceso de clculo: ventatot = venta1 + venta2 + venta3 ; comision = ventatot * 12 / 100 ; sueldoneto = $BASICO + comision ; System.out.println( "**********************************************" ) ; // Salida de resultados System.out.println( "Venta total: $ " + ventatot ) ; System.out.println( "Comision: $ " + comision ) ; System.out.println( "Sueldo neto: $ " + sueldoneto ) ; System.exit( 0 ) ; } } //Fin del mtodo main( )

// Fin de la clase SueldoNeto1

Salida:

Nota: $ 1.2E7 = $ 1.2 x 10 7 = $ 12000000 Ejercicio 10:- Disee un algoritmo que determine el porcentaje de varones y de mujeres que hay en un saln de clases. Algoritmo INICIO // Declaracin de variables REAL porcvar, porcmuj ENTERO varones, mujeres, total

// Entrada de datos LEER varones, mujeres // Proceso de clculo


Informtica I. Versin 1.0 Agosto de 2004.

103

Universidad Autnoma de Occidente

total = varones + mujeres porcvar = varones * 100.0 / total porcmuj = mujeres * 100.0 / total // Salida de resultados IMPRIMIR porcvar, porcmuj FIN
En Java:
import java.io.* ; class MujHom1 { 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 porcvar, porcmuj ; int varones, mujeres, total ; // Entrada de datos: System.out.print( "Digite el numero de Damas: " ) ; mujeres = Integer.parseInt( br.readLine( ) ) ; System.out.print( "Digite el numero de Caballeros: " ) ; varones = Integer.parseInt( br.readLine( ) ) ; // Proceso de clculo: total = varones + mujeres ; porcvar = varones * 100.0 / total ; porcmuj = mujeres * 100.0 / total ; System.out.println( "**********************************************" ) ; // Salida de resultados: System.out.println( "Porcentaje de mujeres: " + porcmuj + " %" ) ; System.out.println( "Porcentaje de hombres: " + porcvar + " %" ) ; System.exit( 0 ) ; } } //Fin del mtodo main( )

// Fin de la clase MujHom1

Salida:
Informtica I. Versin 1.0 Agosto de 2004.

104

Universidad Autnoma de Occidente

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( ) ) ;

Informtica I. Versin 1.0 Agosto de 2004.

105

Universidad Autnoma de Occidente

// 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 ) ; } } //Fin del mtodo main( )

// Fin de la clase EstaturaMts1

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

Universidad Autnoma de Occidente

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 ) ; } } //Fin del mtodo main( )

// Fin de la clase CapacidadDiscoDuro1

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

Universidad Autnoma de Occidente

// 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

Universidad Autnoma de Occidente

"\nSegundo numero: " + numero2 ) ; System.exit( 0 ) ; } } //Fin del mtodo main( )

// Fin de la clase IntercambiarUnidades1

Salida:

Ejercicios sobre algoritmos

1.- Defina qu es un algoritmo y cuales son sus caractersticas? 2.-Qu son y para qu sirven los diagramas de flujo? 3.-Qu es pseudocdigo? 4.-Cuales son los tipos de datos que existen? 5.- Diga cul es mximo nmero que se puede representar con un entero sin signo de 2, 4 y 8 bytes. 6.- Defina cada uno de los operadores aritmticos, relacionales y lgicos. 7.- Defina los siguientes trminos: Constante Variable Expresin 8.- Codifique en cdigo Java las siguientes expresiones algebraicas:

Informtica I. Versin 1.0 Agosto de 2004.

109

Universidad Autnoma de Occidente

a.

100 200 A5

b.15

A2 3

c. a 2 + b 2 35c

d. 5 X 2 3X + 5

e. a + b 3

f . a 10 5

g. Coseno 2 (3X ) + Seno(Y )

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

11.- Evale el resultado para a = 7, b = 2, x = 2, y = 1.

Ejercicios sobre algoritmos Secuenciales

1.- Disee un algoritmo que calcule el rea de un tringulo en funcin de las longitudes de sus lados.
rea=

p(p - a)(p - b)(p - c)

donde p = (a+b+c)/2 = (semipermetro) 2.- Elaborar un algoritmo que permita calcular el volumen de un cilindro (radio y altura se ingresan desde el teclado). (volumne cilindro => radio 2 x altura)
3.- Haga un algoritmo que calcule

a. rea de un circulo

=> rea = r 2

b. rea de un tringulo => rea =

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

Universidad Autnoma de Occidente

7.- Dado un carcter alfabtico en maysculas, elabore un algoritmo que imprima en pantalla su

equivalente en minscula (consulte el cdigo ASCII).


8.- Hacer un algoritmo para calcular el IVA (16%) de un valor digitado por el teclado, mostrar este

resultado y el de sumar el IVA al valor digitado. Ejemplo: valor digitado => 1000 mostrar en pantalla IVA = 160 y valor mas IVA = 1160 9.- Elabore un algoritmo para mostrar la cantidad de miles, centenas, decenas y unidades de un nmero entero digitado por teclado. Ejemplo: Sea 1483 el nmero digitado el algoritmo debe mostrar en pantalla Miles = 1 Centenas = 4 Decenas = 8 Unidades = 3 10.- Las funciones trigonomtricas calculan sus valores para ngulos dados en unidades de radianes, haga un algoritmo que pase ngulos de grados a radianes, y calcule la tangente del ngulo convertido a radianes usando las funciones seno y coseno. 180 ; = 3.141516 1 Radian =

11.- Aplicando el teorema de Taylor a la funcin Seno se obtiene el siguiente polinomio que equivale

a esa funcin: x x3 x5 x7 x9 + + 1! 3! 5! 7! 9 !

Sen(x) = P(x) =

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,

milmetros, pulgadas, yardas, millas y pies.


14.- Elabore un algoritmo que convierta una medida de masa en toneladas a kilogramos, quintales,

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

Universidad Autnoma de Occidente

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. 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

tera giga mega kilo hecto deca unidad deci centi mili micro nano pico

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

Informtica I. Versin 1.0 Agosto de 2004.

112

Universidad Autnoma de Occidente

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

La estructura secuencial es la ms sencilla de todas, simplemente indica al procesador que debe ejecutar de forma consecutiva una lista de acciones (que pueden ser, a su vez, otras estructuras de control); para construir una secuencia de acciones basta con escribir cada accin en una linea diferente. A continuacin se muestra una composicin secuencial de acciones en notacin algortmica y su equivalente JAVA. 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 ) ;

A continuacin, la implementacin en Java con su correspondiente salida:


import java.io.* ; // Importa el paquete de entrada / salida (input / output) 113

Informtica I. Versin 1.0 Agosto de 2004.

Universidad Autnoma de Occidente

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.* ; // Importa el paquete de entrada / salida (input / output)

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

Universidad Autnoma de Occidente

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

Por ltimo, es necesario sealar un aspecto importante de la composicin secuencial y es que no es conmutativa.
Estructura alternativa La estructura alternativa permite bifurcar el flujo del programa en funcin de una expresin lgica; disponemos de tres estructuras alternativas diferentes: alternativa simple, alternativa doble y alternativa mltiple. Estructura alternativa simple Esta estructura permite evaluar una expresin lgica y en funcin de dicha evaluacin ejecutar una accin (o composicin de acciones) o no ejecutarla; tambin se la suele denominar SI-ENTONCES. A continuacin se muestra la notacin algortmica y JAVA para la estructura alternativa simple.

si <expresin lgica> entonces acciones fin_si

En java es: if ( <expresin lgica> ) { acciones }

Informtica I. Versin 1.0 Agosto de 2004.

115

Universidad Autnoma de Occidente

En el siguiente ejemplo se calcula la longitud de una circunferencia si el radio es positivo no nulo: si radio > 0 entonces longitud = 2 * PI * radio fin_si En Java:
if ( radio > 0 ) { longitud = 2 * Math.PI * radio ; }

Estructura alternativa doble

La estructura alternativa doble es similar a la anterior con la salvedad de que en este tipo de estructura se indican acciones no slo para la rama verdadera sino tambin para la falsa; es decir, en caso de que la expresin lgica evaluada sea cierta se ejecutan una accin o grupo de acciones y en el caso de que sea falsa se ejecuta un grupo diferente de acciones. La sintxis en la notacin algortmica y en JAVA son las que se muestran a continuacin: si <expresin lgica> entonces acciones si no acciones fin_si

En java es: if ( <expresin lgica> ) { acciones } else { acciones }

En el siguiente ejemplo se calcula la longitud de una circunferencia si el radio es positivo no nulo y, en caso contrario, se proporciona un mensaje de error: si radio>0 entonces longitud = 2piradio si no escribir Radio incorrecto fin_si
Informtica I. Versin 1.0 Agosto de 2004.

116

Universidad Autnoma de Occidente

En Java:
if ( radio > 0 ) { longitud = 2 * Math.PI * radio ; } else { System.out.println( Error ) ; }

Ejemplo:- Informar si un estudiante ha superado o no un determinado examen consistente en 20 preguntas de igual valor y calcular su nota en caso de aprobar. leer num_correctas si num_correctas < 12 entonces escribir No ha superado Vd. el examen faltan = 12 - num_correctas escribir Le faltaron , faltan si_no nota = num_correctas * 0.25 escribir aprob Vd. con un , nota fin_si En Java:
import java.io.* ; class AprobarExamen1 { 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: String nombre ; int numOk, faltan ; float nota ; // Entrada de datos: System.out.print( "Digite su nombre : " ) ; nombre = br.readLine( ) ; System.out.print( "Digite el numero de respuestas correctas (1 a 20): " ) ; numOk = Integer.parseInt( br.readLine( ) ) ; // Sentencia de decisin if: // ************************* if( numOk < 12 ) { System.out.println( nombre + ", Ud. NO ha ganado el examen!!" ) ; faltan = 12 - numOk ; System.out.println( "Le faltaron " + faltan + " respuestas correctas para obtener 3.0 !!" ) ; } else { nota = numOk * 0.25F ;
Informtica I. Versin 1.0 Agosto de 2004.

117

Universidad Autnoma de Occidente

System.out.println( nombre + ", Ud. ha ganado el examen con " + "una nota de " + nota ) ; } System.exit( 0 ) ; } } //Fin del mtodo main( )

// Fin de la clase AprobarExamen1

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

Informtica I. Versin 1.0 Agosto de 2004.

118

Universidad Autnoma de Occidente

La implementacin de la estructura multialternativa se escribe as, en Java: switch( expresin ) { // Llave de apertura del bloque switch case valor1: // Accin 1: secuencia de instrucciones break ; case valor2: // Accin 2: secuencia de instrucciones break ; 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 } // Llave de cierre del bloque switch

En el siguiente ejemplo se proporciona como salida el nmero de das de un mes dado: segun mes caso 1,3,5,7,8,10,12: escribir 31 caso 4,6,9,11: escribir 30 caso 2: escribir 28 otro caso: escribir Mes incorrecto fin segn A continuacin, la implementacin en Java:
import java.io.* ; // Importa el paquete de entrada / salida (input / output) class EstructuraMultialternativa1_switch { // Mtodo principal: public static void main( String args[ ] ) throws IOException { BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ; int mes ; // Declaracin de la variable entera mes // Lectura, va teclado, de la variable entera mes System.out.print( "Digite un numero entero [1 a 12] para el mes: " ) ; mes = Integer.parseInt( br.readLine( ) ) ; // Se utilizar una instruccin switch para determinar el nmero de // das del mes digitado (nmero entero de 1 a 12):
Informtica I. Versin 1.0 Agosto de 2004.

119

Universidad Autnoma de Occidente

switch( mes ) { // LLave de apertura del switch case 1: case 3: case 5: case 7: case 8: case 10: case 12: System.out.println( "El mes " + mes + " tiene 31 dias." ) ; break ; case 4: case 6: case 9: case 11: System.out.println( "El mes " + mes + " tiene 30 dias." ) ; break ; case 2: System.out.println( "Si el anio NO es bisiesto, el mes " + mes + " tiene 28 dias." ) ; System.out.println( "Si el anio es bisiesto, el mes " + mes + " tiene 29 dias." ) ; break ; default: System.out.println( "ERROR al digitar el numero para el mes" ) ; break ; // Aqu, este break; es opcional. } //LLave de cierre del switch System.exit( 0 ) ; } } // Termine el programa (salir del sistema)

// Fin del mtodo main( )

// Fin de la clase EstructuraSecuencial1

Nota: Obsrvese que es posible que un caso conste de mltiples valores.


Informtica I. Versin 1.0 Agosto de 2004.

120

Universidad Autnoma de Occidente

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.

A continuacin se muestran algunos ejemplos: Seudocdigo:


desde n 1 hasta 10 hacer escribir n fin desde

Cdigo Java:
for( int n = 1; n <= 10; n = n + 1 ) { System.out.println( n = + n ) ; }

El ciclo anterior imprime por pantalla los nmeros del 1 al 10. Ahora, preste atencin al siguiente seudocdigo:
desde n 10 hasta 0 hacer escribir n
Informtica I. Versin 1.0 Agosto de 2004.

121

Universidad Autnoma de Occidente

fin desde

que, escrito en cdigo Java, es:


for( int n = 10; n <= 0; n = n + 1 ) { System.out.println( n = + n ) ; }

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

que, escrito en Java, es:


for( int n = 10; n >= 0; n = n - 2 ) { System.out.println( n = + n ) ; }

Este bucle escribe los nmeros pares de 10 a 0 en orden inverso. La siguiente aplicacin Java resume estos casos:
class CicloFor1 { public static void main( String args[ ] ) { int n ; // Declara la variable entera n. sta, // ser la variable de control del ciclo. // Ciclo for con paso unitario positivo: for( n = 1; n <= 10; n = n + 1 ) { System.out.print( n + ", " ) ; } System.out.println( "\n Ahora, el ciclo for con el paso negativo (-2):" ) ; // Ciclo for con paso negativo (-2): for( n = 10; n >= 0; n = n - 2 ) { System.out.print( n + ", " ) ; } System.out.println( ) ; System.exit( 0 ) ; } }

Informtica I. Versin 1.0 Agosto de 2004.

122

Universidad Autnoma de Occidente

Salida:

Estructura mientras (while) Esta estructura repite una accin o grupo de acciones mientras una expresin lgica sea cierta; la sintxis en la notacin algortmica y en JAVA es la siguiente: mientras <expresin lgica> hacer accin fin mientras

As queda en Java:
while( <Condicin> ) { // Accin: conjunto de // instrucciones que conforman el // cuerpo del ciclo. }

Un aspecto muy importante de la presente estructura de control es que si la expresin lgica es inicialmente falsa el bucle no se ejecuta ni una sola vez; es decir, la estructura mientras supone que el bucle iterar 0 ms veces. A continuacin se muestra un ejemplo que solicita al usuario el radio de una circunferencia mientras el radio introducido sea incorrecto: mientras radio<0 hacer escribir Radio? leer radio fin desde En Java:
import java.io.* ; // Importa el paquete de entrada / salida (input / output) class EstructuraMientras1 { // Mtodo principal: public static void main( String args[ ] ) throws IOException { BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ; double radio ; // Declaracin de la variable real radio // Lectura, va teclado, de la variable radio: System.out.print( "Digite el valor del radio (cm): " ) ; radio = Double.parseDouble( br.readLine( ) ) ; System.out.println( "Radio antes del ciclo: " + radio ) ;
Informtica I. Versin 1.0 Agosto de 2004.

123

Universidad Autnoma de Occidente

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

Notar que mientras radio < 0 el ciclo se ejecuta. Ahora, note en la siguiente salida, que si desde la primera vez se digita un radio positivo, entonces el ciclo while no se ejecuta:

Estructura haga-mientras (do-while) Esta estructura repite una accin o grupo de acciones mientras una expresin lgica sea verdadera. La sintxis en la notacin algortmica es la siguiente: haga accin mientras <expresin lgica>

As queda en Java:
do { // Accin: conjunto de // instrucciones que conforman el // cuerpo del ciclo. } while( <Condicin> ) ;

Informtica I. Versin 1.0 Agosto de 2004.

124

Universidad Autnoma de Occidente

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

Se aplicar la estructura de control do-while del lenguaje de programacin Java, en la implementacin de un sencillo men:
import java.io.*; class Menu3 { public static void main( String args[] ) throws IOException { BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ) ; int opcion; do { System.out.println( " Opciones del menu:" ) ; System.out.println( " ******************" ) ; System.out.println( ) ; System.out.println( " 1.- Opcion 1" ) ; System.out.println( " 2.- Opcion 2" ) ; System.out.println( " 3.- Opcion 3" ) ; System.out.println( " 4.- Opcion 4" ) ; System.out.println( " 5.- Terminar" ) ; System.out.println( ) ; System.out.print( "\n Ingrese su opcion: " ) ;
Informtica I. Versin 1.0 Agosto de 2004.

125

Universidad Autnoma de Occidente

opcion = Integer.parseInt( br.readLine( ) ) ; } while( opcion < 1 || opcion > 5 ) ; switch( opcion ) { case 1: case 2: case 3: case 4: System.out.println( "\nUsted ha seleccionado la opcion No. " + opcion ) ; break; case 5: System.out.println( "\nUsted ha seleccionado Terminar\n" ) ; System.exit( 0 ); } //Fin del switch } //Fin del main( )

}//Fin de la clase Menu3

A continuacin, la salida:

Informtica I. Versin 1.0 Agosto de 2004.

126

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

horas += 1 ; }

// Equivalente a: horas = 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 ) ; } } //Fin del mtodo main( )

// Fin de la clase CobroEstacionamiento1

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

Universidad Autnoma de Occidente

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) ;

// Promocione a (casting) tipo float

// Salida de resultados: System.out.println( "Valor a pagar: $" + pago ) ; System.exit( 0 ) ; } } //Fin del mtodo main( )

// Fin de la clase CobroEstacionamiento2

Salida:

Informtica I. Versin 1.0 Agosto de 2004.

129

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

else { tipoNumero = "El numero NO es par positivo" ; } // Salida de resultados: System.out.println( tipoNumero ) ; System.exit( 0 ) ; } //Fin del mtodo main( ) } // Fin de la clase EsParPositivo1

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

Universidad Autnoma de Occidente

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 ) ; } } //Fin del mtodo main( )

// Fin de la clase NumMay1

Salida:

Informtica I. Versin 1.0 Agosto de 2004.

132

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

// 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 ) ; } } //Fin del mtodo main( )

// Fin de la clase OfertaDocenasProducto1

Salida:

Informtica I. Versin 1.0 Agosto de 2004.

134

Universidad Autnoma de Occidente

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

a la cifra de las centenas. Por ejemplo: 353, 878, etc.


Algoritmo INICIO // Salida de resultados ENTERO numero, unidades, centenas CADENA tipoNumero

// 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

Universidad Autnoma de Occidente

// 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 ) ) ; // Como el nmero tiene tres cifras, para ser capica basta con que // la cifra de las unidades sea igual a la cifra de las centenas. // Por ejemplo: 353, 878, etc. // Declaracin de variables: int numero, unidades, centenas ; String tipoNumero ; // Entrada de datos: System.out.print( "Digite un numero entero de tres cifras: " ) ; numero = Integer.parseInt( br.readLine( ) ) ; // Si el nmero tiene tres cifras: if(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: if( unidades == centenas ) tipoNumero = "El numero es capicua" ; else tipoNumero = "El numero no es capicua" ; // Muestra el tipo de nmero System.out.println( tipoNumero ) ; } else System.out.println( "El numero ingresado debe tener tres cifras!!" ) ; System.exit( 0 ) ; } } //Fin del mtodo main( )

// Fin de la clase Capicua1

Salida:

Informtica I. Versin 1.0 Agosto de 2004.

136

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

int dado1, dado2, dado3 ; String calificacion ; // Entrada de datos: System.out.print( "Digite el numero de puntos del primer dado: " ) ; dado1 = Integer.parseInt( br.readLine( ) ) ; System.out.print( "Digite el numero de puntos del segundo dado: " ) ; dado2 = Integer.parseInt( br.readLine( ) ) ; System.out.print( "Digite el numero de puntos del tercer dado: " ) ; dado3 = Integer.parseInt( br.readLine( ) ) ; // Determina la calificacin: if( dado1 + dado2 + dado3 == 18 ) calificacion = "Excelente" ; else if( dado1 + dado2 == 12 || dado2 + dado3 == 12 || dado3 + dado1 == 12 ) calificacion = "Bien" ; else if( dado1 == 6 || dado2 == 6 || dado3 == 6 ) calificacion = "Regular" ; else calificacion = "Mal" ; // Salida de resultados System.out.println( calificacion ) ; System.exit( 0 ) ; } } //Fin del mtodo main( )

// Fin de la clase LanzarTresDados1

Salida:

Informtica I. Versin 1.0 Agosto de 2004.

138

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

final double MONTOFIJO = 30, IGV = 0.18 ; // Declaracin de variables: double kilomrec, montopag, montoigv ; // Entrada de datos: System.out.print( "Digite el numero de kilometros recorridos: " ) ; kilomrec = Double.parseDouble( br.readLine( ) ) ; // Determina el monto a pagar: if( kilomrec <= 300 ) montopag = MONTOFIJO ; else if( kilomrec <= 1000 ) montopag = MONTOFIJO + 0.15 * (kilomrec - 300) ; else 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 System.out.println( "Valor a pagar: $ " + montopag ) ; System.out.println( "Por impuesto, Ud. ha pagado $ " + montoigv ) ; System.exit( 0 ) ; } } //Fin del mtodo main( )

// Fin de la clase AlquilerAutos1

Salida:

Informtica I. Versin 1.0 Agosto de 2004.

140

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

SI( pc3 < pcmenor ) pcmenor = pc3 SI( pc4 < pcmenor ) pcmenor = pc4

// 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 // Determina el lado mayor mayor = L1 SI( L2 > mayor ) mayor = L2 SI( L3 > mayor ) mayor = L3

L3 L2

// Determina la suma de los lados a excepcin del lado mayor: suma = L1 + L2 + L3 - mayor // Determina de que tipo de tringulo se trata SI( mayor < suma ){ SI( ( L1 == L2 ) && ( L2 == L3 ) ) tipoRectangulo = "Tringulo equiltero" SINO SI( ( L1 == L2 ) || ( L2 == L3 ) || ( L3 == L1 ) ) tipoRectangulo = "Tringulo issceles" SINO tipoRectangulo = "Tringulo escaleno" } SINO tipoRectangulo = "No es un tringulo" // Salida de resultados IMPRIMIR tipoRectangulo FIN Ejercicio 11:- Disee un algoritmo que lea tres nmeros enteros y determine el menor valor positivo. Si los nmeros positivos son iguales, dar como menor a cualquiera de ellos. Algoritmo
Informtica I. Versin 1.0 Agosto de 2004.

142

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

// 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

Universidad Autnoma de Occidente

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:

- Menos de 200 tornillos defectuosos. - Ms de 10000 tornillos producidos. El grado de eficiencia se determina de la siguiente manera: - Si no cumple niguna de las condiciones, grado 5. - Si slo cumple la primera condicin, grado 6.
Informtica I. Versin 1.0 Agosto de 2004.

145

Universidad Autnoma de Occidente

- Si slo cumple la segunda condicin, grado 7. - Si cumple las dos condiciones, grado 8. Entonces, en seudocdigo, Las condiciones impuestas por la fbrica son: tordef < 200 torpro > 10000 siendo tordef el nmero de tornillos defectuosos siendo torpro el nmero de tornillos producidos

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

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

// Guarda el nmero en una variable auxiliar para preservar el signo: numaux = num1 // Cambia el signo de num1 en caso de ser negativo: SI( num1 < 0 ) num1 = -num1 // Determina las cifras del nmero: cen = num1 / 100 dec = (num1 % 100) / 10 uni = (num1 % 100) % 10

// Determina la cifra menor: menor = cen SI( dec < menor ) menor = dec SI( uni < menor ) menor = uni // Determina la cifra mayor: mayor = cen SI( dec > mayor ) mayor = dec SI( uni > mayor ) mayor = uni // Determina la cifra del medio: medio = cen + dec + uni mayor - menor // Forma el nuevo nmero: SI( numaux > 0 ) num2 = mayor * 100 + medio * 10 + menor SINO num2 = -1 * (menor * 100 + medio * 10 + mayor) // Imprime el nuevo nmero: IMPRIMIR num2

} 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

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

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

Al ejecutarse este algoritmo se producirn los siguientes resultados: x 10 y 25 m a 10 5 b 25 15 5 mcd

Informtica I. Versin 1.0 Agosto de 2004.

150

Universidad Autnoma de Occidente

Ejercicios de Algoritmos de decisin (selectivos):


1. Elabore un algoritmo que lea tres valores diferentes y determine el mayor, el menor y el promedio. 2. Elabore un programa que valide mediante un mensaje si una pareja (x, y) pertenece o no a la

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

hora digitada por el usuario ( hh, mm, ss ).


4. La siguiente ecuacin corresponde a la ecuacin general de segundo grado en la incgnita X o

ecuacin cuadrtica aX2 + bX + c = 0 con a,b y c constantes y a 0 La formula general para hallar su solucin es:
b b 2 4ac 2a

x=

A. Elabore un algoritmo para hallar las soluciones reales. B. Haga la prueba de escritorio para las siguientes ecuaciones. X2 - 4X - 5 = 0 X2 - 4X + 4 = 0 4X2 - 8X + 3 = 0 Nota: para efectuar la prueba de escritorio use la siguiente propiedad de las races de la ecuacin b c y x1 x 2 = de segundo grado: x1 + x 2 = ; a a
5. Modifique el algoritmo de las ecuacin general de segundo grado para que calcule las races

imaginarias, si existen.
6. Escribir un algoritmo que permita determinar cul es el ganador de la matricula de honor de entre

4 estudiantes . El algoritmo deber hallar la nota definitiva de c/u de ellos (4 materias.) Si es mayor que 4.5 el alumno podr aspirar a la matricula de honor, de lo contrario no.
7. Disee un algoritmo que determine si un ao ledo por el teclado es o no bisiesto.
Informtica I. Versin 1.0 Agosto de 2004.

151

Universidad Autnoma de Occidente

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 cada uno de ellos en letras.


10. Disee un algoritmo que tome un valor entero positivo (mximo cuatro cifras), lo descomponga y

lo imprima invertido pero como un nico nmero entero. Ejemplo: sea 3845 el nmero digitado se debe mostrar en pantalla el nmero 5483 Nota: para la prueba de escritorio escriba cualquier nmero de cifras decrecientes en uno como 8765, 6543, 3421, etc. y restele su inverso y vera que siempre dar 3087
11. Escriba un algoritmo para la resolucin de una ecuacin de primer grado (ax + b = 0). 12. Disee un algoritmo que lea una fecha como un nmero entero de ocho dgitos (ddmmaaaa), 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

devengan el mismo salario. Sin embargo se tiene un incentivo de acuerdo al cual, si un departamento vende ms del 50% del total de ventas, se da una bonificacin del 20% del salario a los empleados de ese departamento. Considerando el total de ventas como la suma de las ventas
Informtica I. Versin 1.0 Agosto de 2004.

152

Universidad Autnoma de Occidente

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

usuario. La funcin ha sido definida de la siguiente forma:


x 2 + 3 x 10
x 10

f ( x) =

x 5x + 8

10 < x < 20
x > 20

f(x) = 0 para cualquier otro valor de x.

x 3x 2 + 2x
3

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 Comisin para el Vendedor 2% 4%

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

Universidad Autnoma de Occidente

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

escaleno dados sus tres lados A, B y C Issceles => dos lados iguales Escaleno => A B C Equiltero => A = B = C

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:

Rectngulo => Un ngulo recto Acutngulo => 3 ngulos agudos Obtusngulo => 1 ngulo obtuso

Elabore un algoritmo que calcule si un tringulo es rectngulo, acutngulo u obtusngulo.


28. Elabore un algoritmo que seleccione personal para un empleo con las siguientes caractersticas:

mujeres adultas, solteras y que practiquen algn deporte.


29. Para el clculo con inters compuesto se utilizan las siguientes frmulas:

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

Universidad Autnoma de Occidente

Cuota = Precio x

i(1 + i )

(1 + i ) n 1

Hallar el precio de un articulo conociendo el valor de la cuota mensual, el inters efectivo mensual (i), y el nmero de meses (n) Precio = Cuota x

(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:

sean los nmeros 5, 3, 7 y 9, debe mostrar 9, 7, 5 y 3.


34. En un club deportivo se cancela la matricula segn sea la categora del deportista, elabore un

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

Informtica I. Versin 1.0 Agosto de 2004.

155

Universidad Autnoma de Occidente

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=

Al final al profesor se le resta el 10% de retencin en la fuente.


Ejercicios sobre Algoritmos repetitivos (ciclos)
36. Realice un algoritmo que imprima en pantalla el conjunto de los (n) mltiplos de un nmero

entero (x) digitado por el usuario.


37. Haga un algoritmo que imprima en pantalla el conjunto de los divisores de un nmero entero (x)

digitado por el usuario.


38. Elabore un algoritmo que calcule el mnimo comn mltiplo (m.c.m) de dos nmeros A y B,

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

Informtica I. Versin 1.0 Agosto de 2004.

156

Universidad Autnoma de Occidente

40. Dos nmeros son amigos, si cada uno de ellos es igual a la suma de los divisores del otro.

Ejemplo: 220 y 284 son amigos por que,


284 1 2 4 71 142 220 1 2 4 5 10 11 20 22 44 55 110 284

Divisores

Suma

220

Elabore un algoritmo que calcule si dos nmero son amigos o no.


41. Elabore un algoritmo que calcule el nmero de das que existen entre dos fechas. Tenga en cuenta

que existen meses de 30 y 31 das y los aos bisiestos.


42. Calcular usando cada uno de los tres ciclos el valor de X . 43. Calcule e imprima las tablas de multiplicar del 1 al 9 usando el ciclo mientras(). 44. Calcule e imprima las tablas de multiplicar del 1 al 9 usando el ciclo haga.. mientras(). 45. Calcule e imprima las tablas de multiplicar del 1 al 9 usando el ciclo para(.....). 46. Desarrolle un algoritmo que impriman las siguientes series:
n

1, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44. 1, 4, 9, 16, 25, 36, 49, 64, 81. 2, 4, 6, 8, 10, .....100. -2, +4, -6, +10, ....100.
47. Elabore un algoritmo que imprima las siguientes series para (n) trminos :

a.

1 3 5 7 9 + + 2 4 6 8 10 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

c.

Informtica I. Versin 1.0 Agosto de 2004.

Universidad Autnoma de Occidente

48. Desarrolle un algoritmo que impriman la suma de los trminos de las siguientes series:

Suma = -1 +2 -3 +4 -5, ... hasta N trminos. Suma =+1 +4 -8 +12 +16 -20 +24 +28, -... hasta N trminos. 1 1 1 1 Suma = + + + + 1 9 25 49 1 1 1 1 Suma = + + + 1 9 25 49 hasta N terminos

hasta N terminos

x 2 x3 x 4 Suma = 1 + x + + + + 2! 3! 4!

hasta N terminos

Suma = x

x3 x5 x7 + + 3! 5! 7!

hasta N terminos

x2 x4 x6 Suma = 1 + + + + 2! 4! 6! Suma = 1 + x +

hasta N terminos xn n!

x3 x5 x7 + + + 3! 5! 7! x2 x3 x4 + + + 2! 3! 4!

(no son exactamente n trminos)

Suma = 1 + x +

xn (no son exactamente n trminos) 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

Universidad Autnoma de Occidente

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).
55. Desarrolle un algoritmo que permita seleccionar personal para un empleo

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

usando la serie de Taylor del seno y del coseno.


57. Disee un algoritmo que calcule e imprima la suma de los nmeros pares e impares comprendidos

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:

= 4

2 4 4 6 6 8 8 10 3 3 5 5 7 7 9 9

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

cual se le pide que disee un algoritmo.


Resistencia equivalente paralelo = 1 1 1 + + R1 R2 R3 + 1 RN

65. Se desea calcular la resistencia equivalente en serie de un circuito de N resistencias, para lo cual se

le pide que disee un algoritmo. Resistencia equivalente serie = R1 + R2 + R3 +


Informtica I. Versin 1.0 Agosto de 2004.

+ RN
159

Universidad Autnoma de Occidente

66. Implemente un algoritmo que lea un nmero entero y lo muestre invertido. 67. Calcular y mostrar los N primeros trminos de la serie de Leonardo Fibonacci.

Fibonacci = 0,1, 1, 2, 3, 5,...


68. Calcular suma de los primeros 100 trminos de la serie de Fibonacci. 69. Elaborar un algoritmo que convierta un nmero entero positivo, menor a 257 a sistema binario 70. Elabore un algoritmo que permita convertir un nmero entero positivo (mximo cuatro cifras) en

su equivalente en sistema octal.


71. Escribir un algoritmo que halle el nmero de aos bisiestos en un intervalo dado por el usuario

(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

(M-N)2 sea igual a 0, El valor de M debe ser dado por el usuario.


Serie: 1,2,3, (M-0)2,4,5,6,(M-1)2,7,8,9,(M-2)2,.......(M-N)2
74. Dada una fecha (mes, da, ao) indicar cuantos das (exactos) han transcurrido desde ese ao. 75. En un curso hay 20 alumnos, cada alumno tiene diferente nmero de notas, se quiere determinar el

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

escribir el nmero al revs en la base indicada)

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

Universidad Autnoma de Occidente

79. Que hacen los siguientes algoritmos:

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

Informtica I. Versin 1.0 Agosto de 2004.

Universidad Autnoma de Occidente

Suma 6

28

55

De lo anterior el 6 y el 28 son nmeros perfectos, el 36 no lo es. Desarrolle un algoritmo que Calcule si un nmero es perfecto o no.
82. Elabore un algoritmo que genere un nmero aleatorio y que les d la posibilidad a dos jugadores

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

mayores de cada grupo.


88. Haga un algoritmo que lea un nmero entero de 4 cifras (base 10) y que lo convierta a un binario

(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%.

El profesor desea obtener los siguientes resultados para cada estudiante: La nota definitiva de quiz y talleres (promedio de las 3 primeras notas) La nota definitiva del examen final (en el caso de haber presentado opcional) La nota final del estudiante Estos datos deben ser mostrados en pantalla junto con las dems notas.

Informtica I. Versin 1.0 Agosto de 2004.

162

Universidad Autnoma de Occidente

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

Universidad Autnoma de Occidente

22 11 5 2 1

6 12 24 48 96 132

Informtica I. Versin 1.0 Agosto de 2004.

164

Você também pode gostar