




























































































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Se muestra a detalle ejercicios en el lenguaje de programacion java
Tipo: Apuntes
1 / 168
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!





























































































Java: del Grano a su Mesa (Versión 1.4)
Tabla de Contenidos
Introducción
Introducción Este documento está orientado al apoyo de personas que no tengan conocimiento con el lenguaje Java, ni tampoco con conceptos de programación.
Todos los capítulos están realizados con un formato de clases, plantenado primero una motivación que generalmente es un problema que es deseable resolver y que tiene su solución con los conceptos obtenidos a través del capítulo, luego el desarrollo del tema y por último algunos problemas resueltos y propuestos para practicar con los conceptos obtenidos.
Como está recopilado por clases de cátedra de un profesor de la Universidad de Chile, existe una posibilidad que hayan inconsistencias entre los capítulos, que serán solucionados en posteriores ediciones de este apunte.
Su uso es liberado a nivel académico, tanto por alumnos del curso de Computación I como profesores que deseen usar este material como apoyo a sus clases.
También, la idea es dar más herramientas en español para aquellos programadores inexpertos que están ingresando en el mundo de Java.
Introducción
Agradecimientos A mi esposa, Verónica, quien comprendió eternamente las largas noches en los cuales preparaba las clases del año 2001, 2002 y 2003 (las que faltaban).
Además, para mis alumnos del curso de CC10A – Computación I sección 03 del año 2001, de la Escuela de Ingeniería de la Universidad de Chile, quienes motivaron el desarrollo del contenido de este apunte.
También a mis alumnos del curso de CC10A – Computación I sección 03 del año 2002, gracias a quienes logré mejorar, completar información y compilarla en este apunte.
De manera especial, agradezco a Daniel Muñoz, quien me hizo reflexionar en el nombre de este apunte y cambiarlo desde su versión original “Java: Programación y Lenguaje” a “Java: del Grano a su Mesa”.
A Giselle, Pablo, Claudia y Marko quienes hicieron control de calidad de mi apunte.
Por último a los profesores y alumnos quienes utilizan este apunte, ya que gracias a ellos podré recibir comentarios y aportes a mi correo electrónico ([email protected]) para mejorar más aún su ayuda académica y computacional.
A todos, gracias.
Andrés Muñoz O. Ingeniero de Software Profesor Universidad de Chile
Printed with FinePrint - purchase at www.fineprint.com
Capítulo I: Principios Básicos de Java
Tipos de Clases Existen 2 tipos básicos de clases: Las clases ejecutables y las que no lo son.
La diferencia entre estas 2 clases radica físicamente en que algunas de ellas son invocadas desde otras clases. Por ejemplo, Console es una clase ( Console.class ) que es invocada o utilizada por la clase HolaMundo anteriormente vista.
Esta clase puede tener muchos métodos o funcionalidades, que son utilizadas dentro de los otros programas.
public class Console { public void print(String s) { ... } public void println(String s) { ... } public int readInt() { ... } public double readDouble() { ... } public long readLong() { ... } ... }
La clase HolaMundo es del tipo que se puede ejecutar, es decir, al tener el método main significa que lo que está dentro de los paréntesis de llave corresponde a lo ejecutable:
public class HolaMundo { static public void main (String[] args) { // EJECUTABLE Console c = new Console(); c.println(“Hola Mundo”); } }
Cada línea en Java es conocida como una Instrucción , y significa que es lo que uno manda a realizar al computador en un determinado momento. Por ejemplo:
c.println(“Hola Mundo”); // Indica al computador que debe // imprimir en pantalla la frase // “HOLA MUNDO”
Todas las instrucciones llevan un separador al final: “;” (punto y coma). Este separador funciona como si se le indicara al computador DONDE termina una línea, ya que Java permite que en 1 línea física escribir más de una instrucción:
c.print(“Hola”); c.println(“ Mundo”);
Esta línea es equivalente a:
Capítulo I: Principios Básicos de Java
c.print(“Hola”); c.println(“ Mundo”);
ya que el “;” indica el fin de instrucción.
También es normal que uno pueda escribir una instrucción en más de una línea física, ya que el “;” es nuestro fin de instrucción:
c.println(“Hola“ + “ Mundo”);
Estas 2 línea son interpretadas por el computador como si fuesen una sola:
c.println(“Hola“ + “ Mundo”);
Bloques En Java se pueden agrupar las instrucciones en Bloques de instrucciones. Los bloques son delimitados por los paréntesis de llaves (“{“ y “}”).
Los métodos son bloques de programas que se ejecutan al ser invocados:
static public void main (String[] args) { Console c = new Console(); c.println(“Hola Mundo”); BLOQUE }
Las clases se componen de 2 partes: un encabezado y un cuerpo:
public class HolaMundo { ENCABEZADO static public void main (String[] args) { Console c = new Console(); c.println(“Hola Mundo”); CUERPO } }
El cuerpo de una clase es considerado un bloque de programa, ya que almacena múltiples bloques (métodos) y otras instrucciones. Los bloques también pueden almacenar otros bloques como en este caso.
Printed with FinePrint - purchase at www.fineprint.com
Definiremos plan de ejecución a las líneas que realmente son leídas y ejecutadas cuando uno invoca la clase que desea correr.
La ejecución de un programa en Java es lineal, y comienza SIEMPRE por el bloque de programa escrito dentro del método main. Al momento de ejecutar la clase, el bloque main comienza a ejecutar. Luego se realizan las llamadas necesarias a cualquier bloque o método:
import java.io.; class ejemplo{ //este programa calcula el factorial de un numero. static public int fact(int numero){ int factorial=1; for(int i=1; i<numero; i++){ factorial=factoriali; } return factorial; } static public void main(String args[]){ Console c=new Console(); c.print("Ingrese el numero a calcular: "); int numero=c.readInt(); int factorial = fact(numero); c.print("El factorial de:"+ numero+ " es:"+ factorial); } }
En este ejemplo, el plan de ejecución sería el siguiente:
1). [INICIO DEL PROGRAMA]
Podemos notar que la ejecución es muy distinta a el órden en el cual se han escrito las líneas de código (instrucciones).
Capítulo I: Principios Básicos de Java
La idea es que ahora que conocemos como se escriben los programas, podamos saber también como llegar a que se ejecuten también.
Qué necesitas para programar Es muy necesario utilizar el Java Develpment Kit (JDK) adecuado para las necesidades que tengas. Para efectos del curso, nosotros utilizaremos el JDK 1.1.8 o 1.3.0, pero nada superior a eso, ya que las funcionalidades de la Console pueden verse afectadas por otras versiones^2.
El JDK es un compilador y ejecutor de programas Java a través de algo que se llama Java Virtual Machine (JVM) y que es como un computador pero que solo entiende Java.
Para que tu computador tenga una JVM, es necesario que descargues el JDK y lo instales en tu computador. En el caso de la escuela se encuentra instalado el JDK 1.3.0 y las funcionalidades se ven bastante bien, pero recomendamos que instales el JDK 1.1.8 o 1.2.2.
El JDK lo puedes descargar de la página oficial de Java de Sun Microsystems (http://java.sun.com) o desde la página de ayuda de la página del curso.
Luego que lo tengas en tu computador, instala el software y “voila”. Con esto ya tienes lo necesario para comenzar tu aventura.
Como escribir un programa Para escribir un programa lo primero que se necesita es un editor de texto. El mas simple y que viene de manera predeterminada con windows es Notepad (Bloc de Notas), pero cada quien es libre de usar el que mas le acomode (UltraEdit, Textpad, Jolie, etc).
El icono de notepad se encuentra en el menú: MENU INICIO è ACCESORIOS è Bloc de Notas (Notepad)
Y el abrirlo se ve una ventana como la siguiente:
(^2) Si te atreves a probar en otra versión del JDK queda estrictamente bajo tu responsabilidad.
Printed with FinePrint - purchase at www.fineprint.com
Capítulo I: Principios Básicos de Java
Luego debemos abrir una ventana de MS-DOS y colocarnos en el directorio donde se encuentra nuestro archivo ejemplo.java mediante el comando “cd”. Ejemplo:
Una vez ubicados en el directorio llamamos al comando compilador del programa:
El cual, si todo esta bien, y generalmente no lo esta (karma computin), generara el archivo ejemplo.class que contendrá el programa ya compilado, es decir, en un lenguaje que el computador si puede comprender.
Si todo está bien, volverá a mostrar la línea de comando sin poner nada en pantalla:
C:\WINDOWS\Desktop\temp>
y en el directorio donde están los programas, generar el archivo ejemplo.class.
Capítulo I: Principios Básicos de Java
En caso de que no se ejecute el comando javac, es probable que sea o porque java no esta instalado en el computador, o porque nuestro PATH, no apunta al directorio donde esta el comando java. En este caso, deberás poner lo siguiente y volver a compilar:
set PATH = %PATH%;C:\jdk1.1.8\bin
Como ejecutar un programa. Una vez compilado el programa y ahora que tenemos el archivo “ejemplo.class”, podemos proceder a ejecutarlo. Aquí suelen ocurrir cosas inesperadas, pero con paciencia también se pueden arreglar.
Lo cual ejecutará el programa ejemplo. Debemos hacer hincapié en que el nuevo comando se llama java , y no javac (javac ó java compiler), y que no se ejecuta: “java ejemplo.class”, sino que solamente “java ejemplo”.
Printed with FinePrint - purchase at www.fineprint.com
Capítulo I: Principios Básicos de Java
Los Errores en Java Lo más común cuando escribimos programas en Java es que tengamos errores. Existen 2 tipo de errores: de compilación y de ejecución :
Los errores de compilación son aquellos que salen cuando estamos compilando (usando javac ) nuestro archivo .java. Por ejemplo, veamos el siguiente programa con errores:
clas EjemploDeError { static void main (String[] args) { Console c = new Console(); c.println ("Aquí le falta un punto y coma") c.println ("Esta línea está ok"); } }
Nótese que hemos deliberadamente puesto clas en vez de class en la definición de la clase, y en la línea 4 hemos dejado sin ; al final de ella. También no hemos puesto las clases de la consola para que veamos qué ocurre.
Si lo escribimos y lo intentamos compilar en java obtendremos el siguiente error:
C:\WINDOWS\Desktop\temp>javac EjemploDeError.java EjemploDeError.java:1: 'class' or 'interface' expected clas EjemploDeError { ^ 1 error C:\WINDOWS\Desktop\temp>_
En general, los errores de compilación son aquellos que son causados por un problema en la sintaxis o que no dependen de los valores de variables, métodos e ingresos de datos que ocurran al momento de ejecutar.
Al ver este caso podemos decier inmediatamente que “clas” está mal escrito. De hecho el compilador nos lo dice:
EjemploDeError.java:1 Indica el archivo y el número de la línea del error. ‘class’ or ‘interface’ expected Éste es el error.
El que nos salió en este momento nos dice que “esperaba un class o interface”, lo que significa que esperaba la palabra “class” que es claramente el error en que incurrimos. Lo que está abajo de la primera línea de error es la línea y está marcado el inicio de la palabra que está mal escrita:
clas EjemploDeError { Esta es la línea errada. ^ Indica dónde está el error en la línea.
Capítulo I: Principios Básicos de Java
Si lo corregimos y lo volvemos a compilar, el error cambiará:
C:\WINDOWS\Desktop\temp>javac EjemploDeError.java EjemploDeError.java:4: ';' expected c.println ("Aqui le falta un punto y coma") ^ EjemploDeError.java:3: cannot resolve symbol symbol : class Console location: class EjemploDeError Console c = new Console(); ^ EjemploDeError.java:3: cannot resolve symbol symbol : class Console location: class EjemploDeError Console c = new Console(); ^ 3 errors C:\WINDOWS\Desktop\temp>_
Ahora tenemos 3 errores (como dice la última línea). 2 de ellos ocurren por causa de la Console (2º y 3º) y otro ocurre por falta del ;.
EjemploDeError.java:4: ';' expected c.println ("Aqui le falta un punto y coma") ^
El primer error nos dice que en la línea 4 esperaba que hubiera un “;” al final de la línea. Este era el problema que habíamos dejado para probar.
EjemploDeError.java:3: cannot resolve symbol symbol : class Console location: class EjemploDeError Console c = new Console(); ^ EjemploDeError.java:3: cannot resolve symbol symbol : class Console location: class EjemploDeError Console c = new Console(); ^
En los otros dos casos aparece la frase “cannot resolve symbol” y destacando la palabra “Console”. Esto ocurre porque no encuentra el archivo Console.class en el CLASSPATH, es decir, o no está definido el CLASSPATH como indicamos anteriormente o faltan las clases.
Corrijamos todos los errores y veamos como queda:
C:\WINDOWS\Desktop\temp>javac EjemploDeError.java C:\WINDOWS\Desktop\temp>_
Lo que significa que fue compilado satisfactoriamente.
Printed with FinePrint - purchase at www.fineprint.com
Capítulo I: Principios Básicos de Java
Principios Avanzados
Estas sentencias (que pueden estar en las firmas de los métodos o en las definiciones de las clases) nos indican el nivel de "PRIVACIDAD" que tiene la clase.
METODOS: La privacidad (a nivel de métodos) indica desde DONDE puedo llamar un método. Es decir:
§ PUBLIC: Lo puedo llamar desde cualquier parte (clases dentro del mismo directorio o de otro directorio). § PROTECTED: Solo las clases "hijas" pueden llamarlo (concepto de herencia más avanzado que veremos luego). § PRIVATE: Solo la misma clase que lo define puede llamarlo. § Sin nada: Para las clases del mismo directorio es pública, es decir la pueden llamar. Desde otro directorio no existe.
Estas palabras no son OBLIGATORIAS, ya que por definición si no ponemos nada, es accesible.
CLASES: A nivel de clases, la privacidad se refleja casi de la misma forma que los métodos. Es decir:
§ PUBLIC: Se puede utilizar esta clase desde cualquier lugar. OBLIGA a guardar la clase en un archivo con el MISMO NOMBRE (ojo con las mayúsculas y minúsculas):
public class Ejemplo { ... }
se debe guardar en Ejemplo.java y no en ejemplo.java.
§ Sin nada: Se puede utilizar en el mismo directorio. Aquí el nombre del archivo JAVA no importa, es decir:
class Ejemplo { ... }
se puede guardar en Ejemplo.java, ejemplo.java o miprograma.java
Capítulo I: Principios Básicos de Java
El uso de STATIC en los métodos solo nos explica cuando utilizamos un "OBJETO" o cuando utilizamos una "CLASE" para invocar el método.
OBJETO: Un objeto es una variable de un tipo Clase que es creada con un new:
Console c = new Console();
en este caso "c" es un objeto de tipo "Console". Todos los métodos de la clase Console están declarados sin la palabra STATIC, por ejemplo, la firma de "println" sería:
public void println(String s) { ... }
y es por esta razón que necesitamos al objeto "c" para invocarlo como:
c .println("Esto usa un objeto");
Las llamadas a métodos que se realizan a través del nombre de la clase REQUIEREN la palabra "static" en su definición. Por ejemplo, en la clase Math tenemos el método:
public static double random() { ... }
y como posee el "static", su invocación sería del tipo:
double x = Math .random();
Printed with FinePrint - purchase at www.fineprint.com
Capítulo II: Conceptos Básicos
Motivación
Escribir un programa que instruya al computador para que establezca el siguiente diálogo con una persona (usuario):
Por favor ingresa un N°: 123 Gano yo con el 124
Conceptos
Se define como “ Algoritmo ” a la serie de pasos o “Etapas” (que debe realizar el computador) para resolver un problema
En el problema planteado arriba, un “algoritmo” para resolverlo se describe a continuación:
Computador
Usuario
Problemas Soluciones
Razonamientos:
Capítulo II: Conceptos Básicos
Traducción de un “ Algoritmo ” en un lenguaje de programación que el computador pueda interpretar para resolver el problema.
Para efectos de estudio en este curso, el lenguaje de programación utilizado para interpretar nuestros algoritmos es Java.
Traduzcamos el algoritmo que definimos para el problema inicial y veamos como queda en lenguaje Java:
C.print(“Por favor ingresa un N°:”); int n; n = C.readInt(); C.print(“Gano yo con el “); C.print(n+1);
Para comprender mejor el lenguaje, iremos línea a línea analizando qué significa y cómo se utilizó para traducir el algoritmo anterior.
C.print(“Por favor ingresa un N°:”);
Printed with FinePrint - purchase at www.fineprint.com
Capítulo II: Conceptos Básicos
Area = 3. Caso d real: Perímetro = 9. Area = 7.
Este fenómeno ocurre normalmente en Java, puesto que al operar un cuociente (caso que puede dar un resultado con decimales) con ambos valores enteros , el resultado SIEMPRE será entero.
Por ejemplo: 3 / 2 = 1 entero 3 / 2.0 = 1.5 real
Problemas Propuestos
Calcular perímetro y area de rectángulo Largo? 2 Ancho? 3 Perímetro = ... Area = ...
Capítulo III: Entrada y Salida
Motivación La I/O (Entrada/Salida) estándar es, por definición, cómo se comunica nativamente Java con el usuario.
Es así como clases hechas como Console evitan que uno conozca realmente donde está el ingreso de datos y el despliegue de ellos en la pantalla o interfaz (gráfica de texto) que Java provee. De hecho, Console es un Applet que utiliza un Canvas en donde se escriben las líneas de texto para la salida estándar y que permite el ingreso de datos a través del teclado, para luego pasárselo a los programas que la utilizan.
Sintaxis
Esta clase es simplemente un encapsulamiento de la Entrada y Salida estándar de Java. En este documento se utiliza la mayor parte de los capítulos por simplicidad, no obstante la utilización de System para entrada y salida estándar también se detalla en caso de desear utilizarla.
Le definición de Console permite realizar las siguientes funcionalidades:
Método Descripción public Console(); public Console(String); public Console(int,int, String);
Constructores de la clase Console por defecto, con título, y con tamaño y título respectivamente. public int maxcol(); public int maxrow();
Obtener el tamaño de columnas y filas que puede contener la consola abierta. public void clear(); Limpiar la consola. public void showCursor(); public void hideCursor();
Mostrar y ocultar el cursor.
public void print(String); public void println(String);
Imprimir en la consola.
public boolean readBoolean(); public byte readByte(); public short readShort(); public int readInt(); public long readLong(); public double readDouble(); public float readFloat();
Leer un valor desde el teclado utilizando la consola.
(^4) Ver http://www.holtsoft.com/java/hsa_package.html#Console para mayor información.
Printed with FinePrint - purchase at www.fineprint.com
Capítulo III: Entrada y Salida
public char readChar(); public String readString(); public String readLine(); public void setFont(Font); public void setTextBackgroundColor(Color); public void setTextColor(Color);
Dar tipografía (Font) y color al texto de la consola^5.
Y también existen formas de utilizarla como un lienzo gráfico para dibujar^6 :
Método Descripción public int maxx(); public int maxy();
Obtener tamaño del lienzo.
public void setColor(java.awt.Color); Dar color al pincel. public void clearRect(int, int, int, int); Limpiar un trozo del lienzo. public void copyArea(int, int, int, int, int, int); Copiar un trozo del lienzo. public void draw3DRect(int, int, int, int, boolean); public void drawArc(int, int, int, int, int, int); public void drawLine(int, int, int, int); public void drawMapleLeaf(int, int, int, int); public void drawOval(int, int, int, int); public void drawPolygon(int[], int[], int); public void drawRect(int, int, int, int); public void drawRoundRect(int, int, int, int, int, int); public void drawStar(int, int, int, int); public void drawString(String, int, int); public void fill3DRect(int, int, int, int, boolean); public void fillArc(int, int, int, int, int, int); public void fillMapleLeaf(int, int, int, int); public void fillOval(int, int, int, int); public void fillPolygon(int[], int[], int); public void fillRect(int, int, int, int); public void fillRoundRect(int, int, int, int, int, int); public void fillStar(int, int, int, int);
Dibujar todo tipo de figuras.
En algún lado ya se ha utilizado la clase System , la cual se basa en una serie de funcionalidades estáticas (definidas como static ) que permiten interactuar nativamente entre el sistema y el usuario (o los periféricos que tenga). Por ejemplo:
System.out es un objeto que posee una referencia a la pantalla de salida estándar de Java.
(^5) Para ver cómo funcionan los colores, referirse a Canvas en página 53. (^6) Para ver cómo funcionan algunos de los métodos gráficos, ver sección Canvas en página 53.
Capítulo III: Entrada y Salida
Ahondando en este ejemplo, System.out posee las funcionalidades de imprimir en pantalla que han trascendido a objetos como la Console o PrintWriter :
Por ejemplo, lo que con Console imitaba el siguiente diálogo:
Hola mucho gusto.
era:
Console c = new Console(); c.println(“Hola mucho gusto”);
con System.out es mucho más sencillo: al ser una variable estática de la clase System , no necesita de una referencia a dicha clase:
System.out .println(“Hola mucho gusto”);
Bastante sencillo. Veamos ahora como se leen datos con System.
El caso de entrada de datos es más complejo y es lo que lleva a los programadores a crear objetos como Console. Es decir, no es tan sencillo como poner:
System.in.readInt(); // ESTO ESTA MALO
Aunque les gustaría mucho. J
System.in es una referencia estándar a la entrada desde el teclado. Sin embargo su uso es un poco distinto, pero similar a lo que pasa con los archivos de lectura, ya que también son entradas, esto es:
BufferedReader in = new BufferedReader( new InputStreamReader( System.in ));
Esta línea reemplazaría a la declaración de la consola en el caso de utilizar Console. Es decir, lo que antes imitaba a:
Cómo te llamas? Juan Hola Juan, mucho gusto
y que con Console quedaba más o menos así:
Console c = new Console(); c.print(“Como te llamas?”);
Printed with FinePrint - purchase at www.fineprint.com
<expresión> se escribe en una línea (hacia el lado) y no en varios niveles. La comprenden variables, constantes, operadores binarios (+, -, *, /), operadores unarios (+, -), métodos y expresiones entre paréntesis. Antes de ser asignada a una variable, esta expresión es EVALUADA y el valor obtenido reside en el espacio reservado de memoria para dicha variable.
Por ejemplo, podemos realizar las siguientes asignaciones
a = v1 + v2; a = (5 – a) * 3 / v1; a = 2;
Son definiciones de espacios de memoria en los cuales se almacenan valores específicos.
Esta definición es bastante técnica, por lo que simplificaremos un poquito a la siguiente definición de tipo de dato:
Es una clase de números (o datos) con los cuales se pueden definir las variables que los almacenarán.
En Java existen los tipos de datos numéricos:
Tipo Nº Bits Mayor Valor Menor Valor Precisión (dígitos) Byte 8 127 -128 3 Short 16 32.767 -32.768 5 Int 32 2.147.483.647 -2.147.483.648 10 Long 64 263 – 1 -2^63 Float 32 3,4 x 10^38 -3,4 x 10^38 Double 64 1,7 x 10^301 -1,7 x 10^301
Para definir o declarar una variable con cierto tipo, se debe utilizar la siguiente sintaxis:
en donde
Por ejemplo:
int i; i = 5;
Capítulo IV: Asignaciones, Expresiones y Tipos de Datos
Para convertir tipos de datos se usa un CAST explícito o implícito que transforma, convierte y/o trunca desde un tipo de dato a otro.
Los cast implícitos se pueden hacer desde tipos de más pequeño tamaño (ver tabla) hacia tipos más grandes. Por ejemplo:
int a = 6; double b = a; // Cast implícito
Los cast explícitos se deben hacer desde tipos de más grande tamaño (ver tabla) hacia tipos más pqueños. Por ejemplo:
double a = 10.0; double b = (double) a; // Cast explícito
Solución Console c = new Console(); c.println(“Calcular porcentajes”); c.print(“Votos candidato 1”); int v1 = c.readInt(); c.print(“Votos candidato 2”); int v2 = c.readInt(); int total; total = v1 + v2; c.println(“Total de votos = “ + total); c.println(“Candidato 1 = “ + 100.0v1/total); c.println(“Candidato 2 = “ + 100.0v2/total)
Printed with FinePrint - purchase at www.fineprint.com
Capítulo V: Métodos y Funciones
Motivación Existen muchas funciones matemáticas y no matemáticas en Java que se encuentran pre- definidas. Estas funciones están escritas para que los programadores las utilicen en sus códigos sin volver a escribir los subprogramas que realizan esas funcionalidades.
Concepto
Trozos de código que pueden ser reutilizados a través de una llamada a su definición con ciertos parámetros. También reciben el nombre de Métodos.
En Java por ejemplo existe una gran librería matemática que incluye métodos para la raíz cuadrada, potencias, exponenciales, logaritmos, senos, cosenos, tangentes, máximos, mínimos, redondeo de valores y números aleatorios.
La llamada es la forma en que el lenguaje invoca o permite la ejecución del trozo de código escrito dentro de un método. En general, requiere de un nombre (del método) y sus parámetros (si es que tiene).
Para que veamos como se invocan los métodos, veamos aquellos que se encuentran en la librería matemática:
Función Significado Tipo Argumento
Tipo Resultado
Ejemplo Resultado
sqrt(x) √ x, x ≥ 0 double double sqrt(4.0) 2. abs(x) |x| i, l, f, d del arg abs(-3) 3 pow(x,y) xy^ d d pow(2.0,3) 8. exp(x) ex^ d d exp(1) Math.E^8 log(x) logex d d log(Math.E) 1. sin(x) seno de < x (x en radianes)
d d sin(Math.PI/2) 1.
cos(x) coseno de < x d d cos(Math.PI) -1. tan(x) tangente de < x d d tan(Math.pi/4) 1. asin(x) arco-seno de x d d asin(1.0) Math.PI^9 / acos(x) arco-coseno de x d d acos(-1.0) Math.PI
(^8) Math.E está definida en la librería matemática. (^9) Math.PI está definida en la librería matemática.
Capítulo V: Métodos y Funciones
Función Significado Tipo Argumento
Tipo Resultado
Ejemplo Resultado
atan(x) arco-tangente de x d d atan(1.0) Math.PI / round(x) redondear x d, f l, i round(4.5) 5L floor(x) n / n ≤ x < n+1 d d floor(4.9) 4. ceil(x) n / n-1 < x ≤n d d ceil(4.1) 5. max(x,y) mayor entre x e y i,l,f,d de arg max(4.1, 6.5) 6. min(x,y) menor entre x e y i,l,f,d de arg min(4.1, 6.5) 4. random( ) Nº al azar en [0,1[ d random( ) 0.x...
Veamos unos ejemplos de utilización de funciones de la librería matemática:
// Cálculo de Area y Perímetro c.print(“Ingrese el radio de la circunferencia?”); double r = c.readDouble(); c.print(“El perímetro de la circunferencia es: ”); c.println(2 * Math.PI * r); c.print(“El area de la circunferencia es: “); c.println(Math.PI * Math.pow(r, 2));
En este ejemplo podemos ver como utilizamos un método de la clase matemática dentro de una expresión.
// Cálculo de un radio a partir del área c.print(“Ingrese ahora un Area de circunferencia?”); double a = c.readDouble(); c.print(“El radio de la circunferencia es: “); c.println(Math.sqrt(a / Math.PI));
En este ejemplo podemos ver como se puede utilizar una expresión como argumento de un método de la clase matemática.
// Cálculo de la tangente a partir de otras funciones c.print(“Ingrese un ángulo en radianes? “); double ang = c.readDouble(); c.print(“La tangente original es: “); c.println(Math.tan(ang)); c.print(“La tangente calculada es: “); c.println(Math.sin(ang)/Math.cos(ang));
En este ejemplo podemos ver que se pueden componer en una misma expresión distinto métodos matemáticos sin necesidad de utilizar variables adicionales.
Printed with FinePrint - purchase at www.fineprint.com
Capítulo VI: Condicionales
Motivación Escribir subprogramas que realicen los operaciones de adición y cuociente de número reales, considerando que no se puede dividir por 0.
Veamos primero el algoritmo para la adición a modo de práctica:
Para este algoritmo no hay problema de escribir la solución:
static double suma (double a, double b) { double r = a + b; return r; }
Una versión alternativa y avanzada sería:
static double suma (double a, double b) { return a + b; }
Ok. Veamos el algoritmo para la división:
Como podemos ver, necesitamos algo que nos permita ejecutar (a) solo si el dividendo es 0.
Concepto
Un condicional es una instrucción que permite ejecutar un trozo de código si y solo si cumple con una condición o valor de verdad.
Capítulo VI: Condicionales
El concepto de condicional es bastante básico. Las condiciones son expresiones que retornan valores de verdad (verdadero o falso) y que condicionan la ejecución de instrucciones indicadas en el condicional.
Algo como:
Si la condición es cierta Ejecuta las instrucciones cuando es cierta Si no es cierta Ejecuta estas otras instrucciones.
Los condicionales utilizan un comando especial llamado if ... else. Su forma general es como sigue:
if (<condición>) {
La primera parte del condicional corresponde a la condición, la segunda parte (o else ) corresponde a decir “si la condición NO se cumple” o el famoso “si no” o “de lo contrario”. Esta segunda parte es opcional.
Antes de continuar, debemos insertar dos nuevos concepto:
Todos saben cuál es la definición e este concepto. Así que abordaremos un nuevo tipo de dato que soporta almacenar esto: bolean.
El bolean es un tipo de dato especial que solo puede almacenar VERDADERO o FALSO. Por ejemplo:
boolean var1 = true; boolean var2 = false;
Es sumamente sencillo. La gracia es que se puede usar como condición sola en un if. Por ejemplo:
if (var1) ... else ...
Printed with FinePrint - purchase at www.fineprint.com
Capítulo VI: Condicionales
Un operador lógico es un comparador que permite operar valores, variable o expresiones y retornar un valor de verdad (verdadero o falso).
Existe muchos operadores lógicos que describiremos a continuación:
Comparador de Valores Numéricos: Permite comparar valores numéricos indicando si es mayor, menor, mayor o igual, menor o igual, distinto o simplemente igual.
A > 5 OPERADOR MAYOR QUE A < 3 OPERADOR MENOR QUE A >= 1 OPERADOR MAYOR O IGUAL QUE A <= 0 OPERADOR MENOR O IGUAL QUE A == 4 OPERADOR IGUAL QUE A != 4 OPERADOR DISTINTO QUE
Operador de Negación: Este operador permite NEGAR un valor de verdad, es decir cambiar el valor de VERDADERO a FALSO o de FALSO a VERDADERO.
! (A == 5) SE TRADUCE POR A != 5
Conjunciones: Son operadores especiales que permiten unir distintos valores de verdad. Hablando un poco en español sería como el Y y el O (bueno, son eso).
A > 5 && A < 10 A mayor que 5 y menor que 10 A < 9 || A > 10 A menor que 9 o mayor que 10
Un ejemplo que utiliza todo lo anterior sería condicionar si es par o impar un número:
c.print(“Número?”); int n = readInt(); if ( n % 2 == 0 ) { c.println(n + “Es par”); } else { c.println(n + “Es impar”); }
Esto es muy fácil de visualizar. Veamos un ejemplo más complejo considerando 3 casos distintos:
c.print(“Número?”); int n = readInt(); if ( n > 0 ) { c.println(n + “ es mayor que 0”); } else if ( n < 0 ) { c.println(n + “ es menor que 0”); } else { c.println(n + “ es igual que 0”); }
Capítulo VI: Condicionales
En este ejemplo podemos ver 3 casos y como se pueden mezclar los distintos if ... else.
Por último un ejemplo sencillo de que hacer solo si se cumple la condición:
c.print(“Número?”); int n = readInt(); if ( n == 123 ) { c.println( “BINGO”); }
En este último ejemplo podemos ver que el ELSE era completamente opcional.
Solución La solución con este concepto se pone muuuuy sencilla y queda como:
static double division (double a, double b) { if (b == 0) { return 0; } double r = a / b; return r; }
También, podemos utilizar una solución alternativa como:
static double division (double a, double b) { double r; if (b == 0) { r = 0; } else { r = a / b; } return r; }
O una muy similar, pero algo mas inteligente:
static double division (double a, double b) { double r = 0; if (b != 0) { r = a / b; } return r; }
Caso Especial Hay un problema muy claro, cuando se utilizan muchos IF para distinguir distintos trozos con comparadores de igualdad. Por ejemplo:
Printed with FinePrint - purchase at www.fineprint.com