Вы находитесь на странице: 1из 44

1

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Trabajo de
Investigacin
Maestro:

Ing. Anaximandro Fernndez Guerrero.

Facultad:

Ingeniera y Arquitectura.

Aula:

50T.

Integrantes:
Acosta Ordoez, Luigi.
Chunga Rojas, Diego.
Nez Campos, Manuel.
Prez Herrera, Daniel.
Sanabria Manay, Gerson.
Ramos Yarrin, Jordan.

Chiclayo, Noviembre 2013

Pgina 2

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Introduccin
Java es el lenguaje de programacin que ms personas en el mundo
lo utilizan, tanto en el ambiente acadmico, como para el desarrollo
de aplicaciones comerciales.
Java es un Lenguaje Orientado a Objetos, desde el primer
programa, por ms simple que sea, est usted implementado una
clase, entre sus principales caractersticas podemos mencionar:
Multiplataforma, porque Java corre sobre cualquier sistema
operativo.
Multiproceso, porque un programa Java corre sobre cualquier
sistema operativo.
Orientado a Objetos.
Seguro, porque elimina aspectos como los punteros, que
pueden utilizarse para acceder a secciones de la memoria no
permitida.
A esto tenemos que agregarle una gran cantidad de libreras y
recursos para desarrollar todo tipo de aplicaciones, desde las ms
sencillas, como las de consola, aplicaciones de entorno grfico, y las
ms avanzadas, como componentes, aplicaciones Web, aplicaciones
mviles, etc.
La madurez que ha tenido Java a lo largo del tiempo, lo hacen el
lenguaje preferido por empresas que realizan desarrollo serio, y en
nuestro medio son cada vez ms las empresas que lo utilizan.
Pgina 3

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Es este proyecto de investigacin que veremos a continuacin est


desarrollado en el aspecto solo del lenguaje en Java, en el siguiente
estar desarrollndose temas como las Libreras ms usadas,
Funciones utilizadas as como tambin los distintos tipos de Arrays.

Pgina 4

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Libreras
1. Java.io. Concepto:
El paquete java.io proporciona un marco de trabajo para
realizar operaciones de entrada y salida entre nuestro
programa java y cualquier dispositivo externo cuenta
con diversos tipos que viene a ser desde los ms simples
hasta los ms complejos combinando diferentes
funciones adems que se puede tener cierta
independencia del programa con el dispositivo.
Funcin:
Y su funcin en un ejemplo muy claro es una operacin
de lectura y escritura contra un fichero, necesitaramos
dos streams, uno de entrada y otro de salida.
2. Java.net. Concepto:
Como bien indica su nombre net que deriva de la
palabra inglesa network, cuyo significado es red, esta
aplicacin, se basa en los principales componentes del
internet contiene definiciones de clases e interfaces que
implementan varias capacidades de red. Las clases de
este paquete incluyen una clase que implementa una
conexin URL.
Se pueden utilizar estas clases para implementar
aplicaciones cliente-servidor y otras aplicaciones de
comunicaciones. Conectividad y Seguridad del Cliente
tiene varios ejemplos de utilizacin de estas clases,
Pgina 5

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

incluyendo un ejemplo cliente-servidor que utiliza


datagramas.
Funcin:
Su funcin o uso viene a ser el ingreso de datos de
diferente ndole desde la web, como datos personales o
informacin de una gran empresa.
3. Javax.swing. Concepto:
Para comenzar a hablar de la aplicacin swing tenemos
que saber un poco de su historia antes de la existencia
de Swing, las interfaces grficas con el usuario se
realizaban a travs de AWT (Abstract Window Toolkit),
de quien Swing hereda todo el manejo de eventos.
Usualmente, para toda componente AWT existe una
componente Swing que la reemplaza, por ejemplo, la
clase Button de AWT es reemplazada por la clase
JButton de Swing.
El Swing es un concepto actual del AWT que consiste
en la aplicacin e ingreso de datos por diferentes tipos,
numricos, alfabticos, pero todos usando una misma
codificacin.
Funcin:
4. Java.applets. Concepto:
Los applets de Java pueden ejecutarse en un navegador
web utilizando la Java Virtual Machine (JVM), o en el
AppletViewer de Sun, entre sus caractersticas podemos
mencionar un esquema de seguridad que permite que
los applets que se ejecutan en el equipo no tengan
Pgina 6

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

acceso a partes sensibles a menos que uno mismo le d


los permisos necesarios en el sistema; la desventaja de
este enfoque es que la entrega de permisos es engorrosa
para el usuario comn, lo cual juega en contra de uno
de los objetivos de los Java applets: proporcionar una
forma fcil de ejecutar aplicaciones desde el navegador
web.
Cuando un navegador carga una pgina web que
contiene un applet, este se descarga en el navegador web
y comienza a ejecutarse. Esto permite crear programas
que cualquier usuario puede ejecutar con tan solo cargar
la pgina web en su navegador.
Funcin:
La principal funcin de applets es el bloqueo de pginas
web que puedan filtrarse en el programa y de esta
manera robar informacin o daarla por completo
arruinando el sistema.
5. Java.sql. Concepto:
Esta clase hereda de java.util.Date y es la representacin
de la fecha cuando trabajamos con JDBC es decir, son
los campos almacenados en una base de datos cuyo tipo
es una fecha que puede o no incluir la hora, aunque la
clase java.sql.Date siempre lo hace. Al igual que su clase
padre, tiene una precisin de milisegundos, con la
excepcin que al mostrarla en la salida estndar con el
formato por defecto solo muestra el da, mes y ao. Hay
que anotar tambin que para campos que almacenen
solamente horas existen otras clases para manejarlos.
Pgina 7

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Funcin:
El sql como principal funcin es la encargada de agregar
formatos de horas, das, meses y aos, en general
ingresar la hora y la fecha en la que se est trabajando
previamente seleccionada del ordenador.
6. Java.util. Concepto:
El paquete java.util, es uno de los principales paquetes
que usaremos cuando estemos programando con el
lenguaje Java, y junto al paquete java.lang es uno de los
ms utilizados en cualquier tipo de desarrollo
informtico basado en Java. Este paquete, es un conjunto
bastante grande tanto de interfaces como de clases de
diversos tipos, que en conjunto podran llamarse
utilidades.
7. Java.lang. Concepto:
En primer lugar, hay que decir que ste es uno de los
paquetes ms importantes de la API Java. Abarca
muchsimas clases e interfaces fundamentales para la
programacin Java, tanto que este paquete se incluye
automticamente en nuestros programas.
8. Java.awt. Concepto:
AWT es el acrnimo del X Window Toolkit para Java, se
trata de una biblioteca de clases Java para el desarrollo
de Interfaces de Usuario Grficas. La versin del AWT
que Sun proporciona con el JDK se desarroll en slo

Pgina 8

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

dos meses y es la parte ms dbil de todo lo que


representa Java como lenguaje.
El entorno que ofrece es demasiado simple, no se han
tenido en cuenta las ideas de entornos grficos
novedosos, sino que se ha ahondado en estructuras
orientadas a eventos, llenas de callbacks y sin soporte
alguno del entorno para la construccin grfica; veremos
que la simple accin de colocar un dibujo sobre un
botn se vuelve una tarea harto complicada. Quiz la
presin de tener que lanzar algo al mercado haya tenido
mucho que ver en la pobreza de AWT.
9. Java.text. Concepto:
Es la opcin creada para que los usuarios puedan
emplear el teclado alfabtico claro esta para ingresar
datos como nombres, conceptos, productos y dems
palabras que son necesarias para entender los paquetes.
Funcin:
Su funcin cosiste en el ingreso de datos por teclado
alfabtico como ya est especificado anteriormente.

Pgina 9

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Funciones
1.

Funciones Numricas:
Matemticas:
Math es un objeto integrado que posee propiedades
y mtodos para constantes y funciones matemtico,
como por ejemplo, el objeto PI de Math (Math.PI).
La clase java.lang.Math es una clase utilitaria cuyos
mtodos nos permiten realizar algunos clculos
matemticos comunes y complejos.
Constantes Matemticas
Dos constantes ms utilizadas con 15 decimales:
Math.E = 2.718281828459045
Math.PI = 3.141592653589793
Se realizan todas las operaciones matemticas que no
sean las de adicin, resta, multiplicacin, divisin y
residuo. Para su correcto uso al igualarlos a una
variable o usar una variable para operarla se debe
declarar tipo doubl. Entre ellas estn:
Valor absoluto:
Math.abs(variable/numero);
Potencia de ex:
Math.exp(variable/numero);
Potencia:
Math.pow(variable/numero, variable/numero);
Nmero aleatorio del 0-1:
Math.random();
Redondear un nmero
Math.round(variable/numero);
Pgina 10

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Raz cuadrada:
Math.sqrt(variable/numero);
Potencia de ex-1:
Math.expm1(variable/numero);
Estadsticas:
Son aquellas funciones que permiten la construccin
de los miembro dato con las caractersticas de
ValorMedio, desviacinMedia y desviacinCuadrtica.
Este grupo es una clase estadstica por existir dos
miembros dato: el array de datos a, b y el nmero de
datos.
Los miembros dato de deben declarar privados
private para que no se puedan modificar desde los
objetos de clase. La funcin miembro ha de ser
declarada pblica public.
Financieras:
Es cualquier uso de las funciones matemticas
aplicada a la economa, se utilizan para hallar
intereses simples y compuestos, realizar grficas de
oferta y demanda.
Algortmicas:
Son cualquier operacin matemtica usando
logaritmos, entre ellos estn el logaritmo en base 10
y logaritmo neperiano. El tipo de variable que utilizan
es doubl:
Logaritmo natural
Math.log(variable/numero);
Logaritmo en base 10
Pgina 11

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

2.

Math.log10(variable/numero);
Logaritmo neperiano+1, lo que hace esta funcin es
adicionar 1 a la variable y luego hallar el logaritmo
natural:
Math.log1p(variable/numero);
Funciones de Cadena:
Las funciones de cadenas de caracteres retornan NULL si
la longitud del resultado es mayor que el valor de la
variable de sistema max_allowed_packet .
ASCII(str):
Retorna el valor numrico del carcter ms a la
izquierda de la cadena de caracteres str. Retorna 0 si
str es la cadena vaca. Retorna NULL si str es NULL.
ASCII() funciona para caracteres con valores
numricos de 0 a 255.

mysql> SELECT ASCII('2');


-> 50
mysql> SELECT ASCII(2);
-> 50
mysql> SELECT ASCII('dx');
-> 100
BIN(N)
Retorna una representacin de cadena de caracteres del
valor binario de N, donde N es un nmero muy largo
(BIGINT) . Esto es equivalente a CONV(N,10,2). Retorna
NULL si N es NULL.

Pgina 12

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

mysql> SELECT BIN(12);


-> '1100'

BIT_LENGTH(str)
Retorna la longitud de la cadena de caracteres str en
bits.
mysql> SELECT BIT_LENGTH('text');
-> 32
CHAR(N,...)
CHAR() interpreta los argumentos como enteros y
retorna la cadena de caracteres que consiste en los
caracteres dados por los cdigos de tales enteros. Los
valores NULL no se tienen en cuenta.
mysql> SELECT CHAR(77,121,83,81,'76');
-> 'MySQL'
mysql> SELECT CHAR(77,77.3,'77.3');
-> 'MMM'

CHAR_LENGTH(str)
Retorna la longitud de la cadena de caracteres str, medida
en caracteres. Un carcter de mltiples bytes cuenta
como un slo carcter. Esto significa que para una cadena
de caracteres que contiene cinco caracteres de dos bytes,
LENGTH() retorna 10, mientras CHAR_LENGTH() returna
5.
Pgina 13

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Funciones de Caracteres: Las funciones de cadenas de caracteres


retornan NULL si la longitud del resultado es mayor que el valor
de la variable de sistema max_allowed_packet .
Consulte Seccin 7.5.2, Afinar parmetros del servidor.
Para funciones que operan en posiciones de cadenas de
caracteres, la primera posicin es la 1.
ASCII(str)
Retorna el valor numrico del carcter ms a la izquierda de la
cadena de caracteres str. Retorna 0 si str es la cadena vaca.
Retorna NULL si str es NULL. ASCII() funciona para caracteres
con valores numricos de 0 a 255.
mysql> SELECT ASCII('2');
-> 50
mysql> SELECT ASCII(2);
-> 50
mysql> SELECT ASCII('dx');
-> 100
Consulte la funcin ORD() .
BIN(N)
Retorna una representacin de cadena de caracteres del valor
binario de N, donde N es un nmero muy largo (BIGINT) . Esto
es equivalente a CONV(N,10,2). Retorna NULL si N es NULL.
mysql> SELECT BIN(12);
-> '1100'
BIT_LENGTH(str)
Retorna la longitud de la cadena de caracteres str en bits.
mysql> SELECT BIT_LENGTH('text');
-> 32
CHAR(N,...)
CHAR() interpreta los argumentos como enteros y retorna la
cadena de caracteres que consiste en los caracteres dados por
los cdigos de tales enteros. Los valores NULL no se tienen en
cuenta.
Pgina 14

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

mysql> SELECT CHAR(77,121,83,81,'76');


-> 'MySQL'
mysql> SELECT CHAR(77,77.3,'77.3');
-> 'MMM'
CHAR_LENGTH(str)
Retorna la longitud de la cadena de caracteres str, medida en
caracteres. Un carcter de mltiples bytes cuenta como un slo
carcter. Esto significa que para una cadena de caracteres que
contiene cinco caracteres de dos bytes, LENGTH() retorna 10,
mientras CHAR_LENGTH() returna 5.
CHARACTER_LENGTH(str)
CHARACTER_LENGTH() es sinnimo de CHAR_LENGTH().
3.
4. Funciones de Fechas:
Las clases java.util.Date y java.sql.Date. Son dos de las clases
ms usadas cuando una aplicacin implica el trabajo con
fechas:
java.util.Date: Segn la documentacin "La clase
java.util.Date representa un instante de tiempo especfico,
con precisin de milisegundos"; esto ms que ser una
especie de "autoadulacin" para la clase, quiere decir que
no solo se trata de una simple cadena al estilo
yyyy/MM/dd, sino que almacena hasta milisegundos y que
es posible trabajar con ellos.
Antes del jdk1.1 la clase java.util.Date tena dos funciones
adicionales a la que conocemos ahora, una de ellas era la
interpretacin de datos que tenan que ver con fechas,
como aos, das, segundos, entre otros. La otra era el
formateo (la forma como se muestra) y parseo (convertir
un String a java.util.Date). Pero debido a las dificultades
que presentaban estas funcionalidades a la hora de
Pgina 15

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

internacionalizar los programas, esos mtodos ya est


obsoletos y la clase java.util.Calendar se encarg de esto;
as que en este momento esta clase, slo hace lo que se
mencion al principio: "representa un instante de tiempo
especfico, con precisin de milisegundos"; ms adelante
veremos como ampliar esta funcionalidad. Por ahora
veamos las convenciones que sigue esta clase:
* El ao "y" est representado por un entero igual a ("y" 1900). Por ejemplo el ao 2004 se representa como 104
(2004 - 1900).
* Los meses son representados por nmeros entre 0 y 11,
donde enero es 0 y diciembre es 11.
* Los das y minutos se representan de forma corriente.
Entre 1 - 31 y 0 - 59 respectivamente.
* Las horas van entre 0 y 23, donde la medianoche es 0 y
el medio da 12.
* Los segundos van entre 0 y 61. 61 solo ocurre cuando se
agrega el segundo adicional para ajustar la diferencia
entre el reloj atmico y el tiempo de rotacin de la tierra.
No sobra mencionar que los mtodos para obtener el ao,
mes y da de esta clase ya estn obsoletos y lo nico que
hacen es llamar a la clase java.util.Calendar para que esta
se encargue de hacerlo (una delegacin).
java.sql.Date: Esta clase hereda de java.util.Date y es la
representacin de la fecha cuando trabajamos con JDBC
(Java DabaBase Connectivity), es decir, son los campos
almacenados en una base de datos cuyo tipo es una fecha
que puede o no incluir la hora, aunque la clase
Pgina 16

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

java.sql.Date siempre lo hace. Al igual que su clase padre,


tiene una precisin de milisegundos, con la excepcin que
al mostrarla en la salida estndar con el formato por
defecto solo muestra el da, mes y ao. Hay que anotar
tambin que para campos que almacenen solamente
horas existen otras clases para manejarlos.
En resumen ambas clases, slo se encargan de almacenar
la cantidad de milisegundos que han pasado desde las 12
de la noche del primero de enero de 1970 en el meridiano
de Greenwich. Aqu vienen dos puntos importantes:
a) Si la fecha que almacena cualquiera de las clases es
menor a las 00:00:00 enero 1 de 1970 GMT, su valor el
milisegundos ser negativo.
b) La fecha es susceptible a la zona horaria. Por ejemplo
en Colombia los milisegundos no se empiezan a contar
desde enero 1 de 1970, sino a partir de las 19:00 de
diciembre 31 de 1969. Esto es importante por que si
transportamos una fecha relativa de una zona a otra,
podemos llegar a tener problemas al confiar en los
milisegundos que se tienen; adems como la clase intenta
representar el "Tiempo Universal Coordinado" (UTC)
suma 0.9 segundos cada ao para ajustar la diferencia
entre el reloj atmico y la velocidad de rotacin de la
tierra. Esto se traduce en que muy dificilmente podemos
basarnos en valores como 0 o 60000 para realizar
validaciones, pues esos milisegundos no son controlables
cuando creamos la instancia de una fecha, peor an, los

Pgina 17

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

milisegundos no son ni siquiera iguales para la misma


fecha en la misma zona horaria.
Ambas clases se pueden instanciar directamente mediante
new(), pero la clase java.sql.Date necesita un parmetro
en el constructor: el tiempo en milisegundos, as que las
siguientes instrucciones son vlidas:
java.util.Date fechaActual = new java.util.Date(); //Fecha
actual del sistema
java.sql.Date inicioLocal = new java.sql.Date(0);
//Milisegundo cero
//tambin se puede crear una instancia de java.util.Date
con parmetros iniciales
java.util.Date otraFecha = new java.util.Date(1000); //El
primer segundo a partir del inicio
Prueba a imprimir cada uno de estos valores y fjate en la
diferencia de formatos entre java.sql.Date y java.util.Date.
Se puede pasar de java.sql.Date a java.util.Date de dos
fomas, una de ellas es con una asignacin simple:
java.util.Date utilDate = null;
java.sql.Date sqlDate = new java.sql.Date(0);
utilDate = sqlDate;
/* aunque es java.util.Date,
si la imprimes tendr el formato de java.sql.Date,
recordemos que java.sql.Date hereda de
java.util.Date */
Pgina 18

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

System.out.println(utilDate);
Tambin se pueden tomar los milisegundos de
java.sql.Date y pasarlos al constructor de java.util.Date:
java.util.Date utilDate = null;
java.sql.Date sqlDate = new java.sql.Date(0);
utilDate = new java.util.Date(sqlDate.getTime());
//esta vez se mostrar con el formato de java.util.Date
System.out.println(utilDate);
Para pasar de java.util.Date a java.sql.Date se deben
tomar los milisegundos de la primera y pasarlos al
constructor de la segunda:
java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new
java.sql.Date(utilDate.getTime());
//Con formato de java.sql.Date
System.out.println(sqlDate);
Para comparar fechas usamos el mtodo compareTo()
que internamente compara los milisegundos entre ellas
usando directamente los mtodos getTime() de ambas
clases.
java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new
java.sql.Date(utilDate.getTime());
if (utilDate.compareTo(sqlDate) == 0){
System.out.println("IGUALES");
}else{
Pgina 19

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

System.out.println("DIFERENTES");
}
O lo que es equivalente:
java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new
java.sql.Date(utilDate.getTime());
if (utilDate.getTime() == sqlDate.getTime()){
System.out.println("IGUALES");
}else{
System.out.println("DIFERENTES");
}
Las clases Time y Timestamp.
Ambas clases pertenecen al API JDBC y son la encargadas
de representar los campos de estos tipos en una base de
datos. Esto no quiere decir que no se puedan usar con
otros fines. Al igual que java.sql.Date, son hijas (heredan)
de java.util.Date, es decir, su ncleo son los milisegundos.
La clase Time es un envoltorio de la clase java.util.Date
para representar los datos que consisten de horas,
minutos, segundos y milisegundos, mientras Timestamp
representa estos msmos datos ms un atributo con
nanosegundos, de acuerdo a las especificaciones del
lenguaje SQL para campos de tipo TIMESTAMP.
Como ambas clases heredan del java.util.Date, es muy
fcil pasar de un tipo de dato a otro; similar a la clase
java.sql.Date, tanto Time como Timestamp se pueden
instanciar directamente y su constructor tiene como
parmetro el nmero de milisegundos; como es de
Pgina 20

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

imaginarse, cuando se muestra alguna de las clases


mediante su mtodo toString() se ven los datos que
intentan representar; La clase Time slamente muestra la
hora, minutos y segundo, mientras timestamp agrega
fracciones de segundo a la cadena.
Para convertir entre tipos de datos diferentes debemos
usar los milisegundos de una clase y asignarlos a las
instancias de las otras, y como la clase java.util.Date es
superclase de todas, a una instancia de esta podemos
asignar cualquiera de las otras, manteniendo los mtodos
de la clase asignada, es decir, si asignamos un Time a una
java.util.Date, al imprimir se ver el mismo formato de la
clase Time.
Con este cdigo:
java.util.Date utilDate = new java.util.Date(); //fecha
actual
long lnMilisegundos = utilDate.getTime();
java.sql.Date sqlDate = new
java.sql.Date(lnMilisegundos);
java.sql.Time sqlTime = new
java.sql.Time(lnMilisegundos);
java.sql.Timestamp sqlTimestamp = new
java.sql.Timestamp(lnMilisegundos);
System.out.println("util.Date: "+utilDate);
System.out.println("sql.Date: "+sqlDate);
System.out.println("sql.Time: "+sqlTime);
System.out.println("sql.Timestamp: "+sqlTimestamp);
Se obtiene la siguiente salida:
Pgina 21

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

util.Date: Thu May 20 19:01:46 GMT-05:00 2004


sql.Date: 2004-05-20
sql.Time: 19:01:46
sql.Timestamp: 2004-05-20 19:01:46.593
Note que an cuando todos los objetos tienen los mismos
milisegundos el formato con el que se muestran
dependen de la clase que realmente los contiene. Es decir,
no importa que a un objeto del tipo java.util.Date se le
asigne uno del tipo Time, al mostrar a travs de la
consola se invocar el mtodo toString() de la clase time:
utilDate = sqlTime;
System.out.println("util.Date apuntando a sql.Time:
["+sqlTime+"]");
utilDate = sqlTimestamp;
System.out.println("util.Date apuntando a sql.Timestamp:
["+sqlTimestamp+"]");
Arroja:
util.Date apuntando a sql.Time: [19:29:47]
util.Date apuntando a sql.Timestamp: [2004-05-20
19:29:47.468]
Pero si en vez de solo apuntar, creamos nuevas instancias
con los milisegundos los formatos con que se muestran
son los mismos. Note que lo verdaderamente importante
ocurre cuando creamos la instancia de java.util.Date
Pgina 22

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

usando los milisegundos del objeto sqlTime, pues aunque


este ltimo nicamente muestra horas, minutos y
segundos, siempre ha conservado todos los datos de la
fecha con que se cre.
utilDate = new java.util.Date(sqlTime.getTime());
System.out.println("util.Date con milisegundos de
sql.Time: ["+utilDate+"]");
utilDate = new java.util.Date(sqlTimestamp.getTime());
System.out.println("util.Date con milisegundos de
sql.Timestamp: ["+utilDate+"]");
Fjese en el formato de salida:
util.Date con milisegundos de sql.Time: [Thu May 20
19:54:42 GMT-05:00 2004]
util.Date con milisegundos de sql.Timestamp: [Thu May
20 19:54:42 GMT-05:00 2004]
Para finalizar esta primera entrega veamos el cdigo para
mostrar la diferencia entre dos fechas en horas, minutos
y segundos. Esta no es la mejor forma para hacerlo, pero
cabe bien para mostrar de forma prctica todos los
conceptos anteriormente estudiados.
import java.util.HashMap;
import java.util.Map;
public class Prueba {
public static Map getDiferencia(java.util.Date fecha1,
java.util.Date fecha2){
Pgina 23

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

java.util.Date fechaMayor = null;


java.util.Date fechaMenor = null;
Map resultadoMap = new HashMap();
/* Verificamos cual es la mayor de las dos fechas, para
no tener sorpresas al momento
* de realizar la resta.
*/
if (fecha1.compareTo(fecha2) > 0){
fechaMayor = fecha1;
fechaMenor = fecha2;
}else{
fechaMayor = fecha2;
fechaMenor = fecha1;
}
//los milisegundos
long diferenciaMils = fechaMayor.getTime() fechaMenor.getTime();
//obtenemos los segundos
long segundos = diferenciaMils / 1000;
//obtenemos las horas
long horas = segundos / 3600;
//restamos las horas para continuar con minutos
segundos -= horas*3600;

Pgina 24

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

//igual que el paso anterior


long minutos = segundos /60;
segundos -= minutos*60;
//ponemos los resultados en un mapa :-)
resultadoMap.put("horas",Long.toString(horas));
resultadoMap.put("minutos",Long.toString(minutos));
resultadoMap.put("segundos",Long.toString(segundos));
return resultadoMap;
}
5.

Funciones Varias:

Las funciones son similares a los mtodos la diferencia es que


estas retornan un resultado lo cual puede ser almacenado
dentro de una variable o impreso directamente en pantalla,
mientras que los mtodos no retornan ningn tipo de dato
pero a si mismo podran meterse variables al mismo mtodo lo
cual podra usarse como un tipo de retorno aunque no sera lo
mismo.

FUNCIONES DEFINIDAS POR


EL USUARIO
Pgina 25

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

FUNCIONES DEFINIDAS POR EL USUARIO


Las funciones que se han utilizado hasta ahora son funciones
que el lenguaje de programacin ha predefinido en sus
bibliotecas o libreras. Sin embargo, tambin es posible que el
programador defina y utilice sus propias funciones.

Definicin de Funciones
Las funciones definidas por el programador se escriben fuera
de la funcin main. Si se recuerda, uno de los objetivos del uso
de las funciones es la descomposicin de problemas complejos y
el trabajo en grupo. El siguiente es un ejemplo de una definicin
de una funcin. Se utiliza antes de presentar la sintaxis formal
de modo que nos podamos familiarizar con la terminologa:

double strut(double numero)


{
double cubo;

cubo = numero * numero*cubo;


return cubo;
}

Pgina 26

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Esta definicin de la funcin strut consiste de:


1) El encabezado de la funcin

double strut(double numero)

Observe que el encabezado no termina con punto y coma. Las


partes del
encabezado de una funcin son los siguientes.
a) Una lista de los argumentos de la funcin entre parntesis:
(double numero)
Si se considera a la funcin como un programa pequeo, la lista
de argumentos seran equivalentes a los datos que en un
programa se introducira a travs de la instruccin cin. Es
importante que observe que en la lista de argumentos se indican
tanto la lista de los argumentos necesarios como el tipo de cada
uno de ellos.

b) El nombre de la funcin
strut que puede se cualquier identificador vlido en java.

c) El tipo de valor que regresa la funcin como resultado.


double
Pgina 27

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

2) El cuerpo de la funcin
{
double cubo;
cuadrado = numero * numero*numero;
return cubo;
}

El cuerpo de la funcin se encierra entre llaves y en l se escriben


las
sentencias que se necesitan ejecutar para lograr el objetivo de la
funcin.
Contiene al menos una sentencia return. La sentencia return va
seguida del nombre de una variable o de un valor constante.
return cubo;
El valor de dicha variable (o el valor de dicha constante)
constituye el valor de regreso de la funcin. El tipo del valor que
regresa la funcin debe ser consistente con el tipo del valor de
regreso especificado en el encabezado de la funcin. Observe
que, en este ejemplo, el valor de regreso de la funcin (tipo de
la variable llamada cubo) es double, al igual que el tipo de valor
de regreso especificado en el encabezado.

Pgina 28

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Llamado de Funciones
El llamado de las funciones definidas por el usuario se realiza de
la misma forma que el llamado a funciones predefinidas. Por
ejemplo, si un programador ha definido la funcin strut de este
ejemplo, los siguientes seran llamados vlidos a la funcin:
double m,n,p;
m=3.0;
n = strut(12.0);
p = strut(m+n);

Observe que los argumentos que se pasan a la funcin (12.0 en


el primer caso y m+n en el segundo caso) son del tipo double y
coinciden con el tipo definido para el argumento de la funcin.
Asimismo, a la variable y se le asigna el valor de regreso de la
funcin strut(12.0). Esto es correcto porque el valor de regreso
de la funcin es de tipo double y la variable y tambin es de tipo
double. Note que no es necesario que los argumentos con que
la funcin es llamada se nombren igual que los identificadores
usados en el encabezado de la funcin.
Ejemplos:
1.- Programa que escribiendo cualquier palabra en minsculas,
las transforme en maysculas, y las maysculas en minsculas.
package app;
public class FuncionesUsuario {
Pgina 29

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

public String convertirMinusculaMayuscula(String cadena){


String res = "";
for (int i = 0; i < cadena.length(); i++) {
if(Character.isUpperCase(cadena.charAt(i)))//si es mayuscula
res += Character.toLowerCase(cadena.charAt(i));//lo convierte a
minuscula
else if(Character.isLowerCase(cadena.charAt(i)))
res += Character.toUpperCase(cadena.charAt(i));//lo convierte a
mayuscula
}
return res;
}

2 .- Programa que nos permita ingresar un nmero y ese sea el


nmero que permita la suma de esa cantidad en la serie de
fibonaci.
package app;
public class FuncionesUsuario {
public String convertirMinusculaMayuscula(String cadena){
public long fibonacci(long n){
if(n <= 1)
return n;
else
return fibonacci(n - 1) + fibonacci(n - 2);
}
}

Arrays
Pgina 30

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Un arreglo (array en ingls) es una estructura de datos conformada


por un conjunto de variables del mismo tipo, agrupadas bajo un
mismo nombre, a las cuales accedemos mediante un ndice.
Amigos
0
Manuel
1
Mateo
2
Alonso
3
Kelly
4
Karen
5
Kristel
Figura Ejemplo de arreglo
En la figura tenemos un ejemplo de lo que sera un arreglo tipo
String, todos sus elementos son cadenas, en este caso los nombres
de mis amigos.
El primer elemento tiene ndice cero (0), y el ltimo es el tamao
del arreglo disminuido en uno. Si tenemos un arreglo de tamao
6, el primer elemento tendr ndice 0 y el ltimo tendr ndice 5.
Los arreglos puedes ser de una dimensin, se les denomina
vectores; de dos dimensiones, se les denomina matrices; podemos
construs de ms dimensiones pero no es usual.
a)

Unidimensional.Es una coleccin de datos que son del mismo tipo, adems de ser
consecutivas y tienen un nico nombre de variable para todos los
elementos.
El primer elemento se ocupara en la posicin 0, es decir que en
un array de X elementos, el ltimo elemento en la lista ocupar la
posicin X-1.
El formato de un array unidimensional es:
Pgina 31

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Declaracin: Un array puede declararse de dos formas


Tipo [ ] NombredeArray;
Tipo NombredeArray [ ];
Tipo: Se indica el tipo de datos que contendr, ejemplo int, float,
doubl,etc.
Nombre de array: Indica el nombre en comn que tendrn todos
los datos.
Ejemplo:
double [ ] Notas;
String Alumno [ ];
Creacin: Para la cracin del array se hace de la siguiente forma.
Nombredearray= new Tipo[X]
Tipo: Es el tipo de dato.
X : Es el nmero de elementos que contendr el arreglo
Ejemplo.
Notas=new int [5]
Alumno= new String [30]
Dato: Las instrucciones de Creacin y declaracin pueden ser una
misma instruccin.
Tipo [] Nombredearray = new Tipo [X]
Ejemplo.
int []Notas= new int[10]
String[]Alumno= new String[30]
Ejemplo N1:
package Trabajo;
import javax.swing.JOptionPane;
public class intro {
public static void main(String arg[ ]) {
int i,g;
double [] nota= new double [10];

Pgina 32

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

nota[0]= 12;
nota[1]= 14.5;
nota[2]= 17;
nota[3]= 04;
nota[4]= 19;
nota[5]= 20;
nota[6]= 14;
nota[7]= 05;
nota[8]= 10;
nota[9]= 07;
for ( i = 0; i < 10; i++) {
g=i+1;
JOptionPane.showMessageDialog(null,"nota"+g+"\n" +nota [i]);
}
}}
Ejemplo N2
package Trabajo;
import javax.swing.JOptionPane;
public class Tr3 {
public static void main(String arg[ ]) {
int i,g;
double n;
double [] pro= new double [12];
n=Double.parseDouble(JOptionPane.showInputDialog("Ingrese el
nmero"));
pro[0]= n;
pro[1]= n*2;
pro[2]= n*3;
pro[3]= n*4;
pro[4]= n*5;
pro[5]= n*6;
pro[6]= n*7;
pro[7]= n*8;
pro[8]= n*9;
pro[9]= n*10;
pro[10]= n*11;
Pgina 33

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

pro[11]=n*12;
for ( i = 0; i < 12; i++) {
g=i+1;
JOptionPane.showMessageDialog(null,"El
nmero"+n+"multiplicado por"+g+"\nDa como producto" +pro[i] );
}
}}

b)

0
1
2

Bidimensional.Un arreglo Bidimensional se representa por un conjunto


de filas y columnas, tal como se muestra en la figura, para
acceder a un elemento en particular se necesita conocer la
fila y columna en donde se encuentra.
0
1
2
3
45
67
80
45
67
89
23
67
12
87
72
54
Fig Representacin de un Arreglo Bidimensional.
Declaracin de Arreglos Bidimensionales:
Tipo variable_arreglo[];
Tipo [][] variable_arreglo;
Tipo: Se indica el tipo de datos que contendr, ejemplo
int, float, doubl, etc.
Nombre de array: Indica el nombre en comn que
tendrn todos los datos.
Ejemplo:
Pgina 34

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Int mat1 [ ];
String mat2 [ ];
Creacin de Arreglos: Para la creacin del arreglo
debemos utilizar el operador new.
Variable_arreglo=new tipo [filas] [columnas];
Es necesario haber declarado la variable variable_arreglo
previamente.
Veamos algunos ejemplos:
Mat1=new int [10] [5];
Mat2=new String [5] [10];
Int mat3 [] [] =new int [4] [];
Mat3 [0] =new int [5];
Mat3 [1] =new int [5];
Mat 3 [2] =new int [5];
Mat 4 [3] =new int [5];
Ejemplo N1:
Este ejemplo trata de la suma de matrices, para lo cual es necesario que
ambas matrices tengan las mismas dimensiones.
La matriz se genera de manera aleatoria.
Para imprimir las matrices se ha creado el mtodo sayMatriz, que se
encarga de imprimir una matriz que se pasa como parmetro
int mat1[][]=new int[4][5];
int mat2[][]=new int[4][5];
int suma[][]=new int[4][5];
for (int i=0;i<mat1.length;i++)
for(int j=0;j<mat1[i].length;j++)
mat1[i][j]=(int)(Math.random()*20+10);
for (int i=0;i<mat2.length;i++)
for(int j=0;j<mat2[i].length;j++)
mat2[i][j]=(int)(Math.random()*20+10);
for (int i=0;i<mat2.length;i++)

Pgina 35

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

for(int j=0;j<mat2[i].length;j++)
suma[i][j]=mat1[i][j]+mat2[i][j];

sayMatriz("\nMatriz 1", mat1);


sayMatriz("\nMatriz 2", mat2);
sayMatriz("\nMatriz Suma", suma);
}
private static void sayMatriz(String titulo, int mat[][]){
System.out.println(titulo + "\n");
for(int i=0;i<mat.length;i++)
{
for(int j=0;j<mat[i].length;j++)
System.out.print(mat[i][j] + "\t");
System.out.println("");
}

Ejemplo N2:
Este ejemplo trata del producto de dos matrices, para poder multiplicar
dos matrices se debe cumplir:
Prodj=mat1ik*mat2kj
Por lo tanto, para encontrar prod [3] [4], se opera con la fila 3 de la
mat1 y con la columna 4 de mat2 suponiendo que son 2 columnas de mat1, por
lo tanto deben ser 2 filas de mat2, la operacin sera asi:
Prod[3][4]=mat1[3][1]*mat2[1][4]+mat1[3][2]*mat2[2][4];

Aplicando este mismo razonamiento se calcula todos los elementos del


matriz producto, lo ms recomendable es hacerlo en un bucle, por ejemplo un
for, tal como se muestra en el siguiente programa.
int[][] mat1= new int[4][2];
int[][] mat2= new int[2][3];
int[][] prod= new int[4][3];
for(int i=0;i<mat1.length;i++)
for(int j=0;j<mat1[i].length;j++)
mat1[i][j]=(int)(Math.random()*10);
for(int i=0;i<mat2.length;i++)
for(int j=0;j<mat2[i].length;j++)
mat2[i][j]=(int)(Math.random()*10);
for(int i=0;i<prod.length;i++)

Pgina 36

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

for(int j=0;j<prod[i].length;j++)
{
int suma=0;
for(int k=0;k<2;k++)
suma+=mat1[i][k]*mat2[k][j];
prod[i][j]=suma;
}

sayMatriz("\nMatriz 1", mat1);


sayMatriz("\nMatriz 2", mat2);
sayMatriz("\nMatriz Producto", prod);
System.out.println("\n\t-----------Fin------");
}
private static void sayMatriz(String titulo, int mat[][]){
System.out.println(titulo + "\n");
for(int i=0;i<mat.length;i++)
{
for(int j=0;j<mat[i].length;j++)
System.out.print(mat[i][j] + "\t");
System.out.println("");
}
}
}

c)

Tridimensional.Un arreglo Tridimensional se representa por un conjunto


de filas, columnas y profundidad, tal como se muestra en
la figura, para acceder a un elemento en particular se
necesita conocer la fila, columna y la profundidad en donde
se encuentra.

Pgina 37

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Declaracin de Arreglos Bidimensionales:


Tipo variable_arreglo [];
Tipo [] [] [] variable_arreglo;
Tipo: Se indica el tipo de datos que contendr, ejemplo
int, float, doubl, etc.
Nombre de array: Indica el nombre en comn que
tendrn todos los datos.
Creacin de Arreglos: Para la creacin del arreglo
debemos utilizar el operador new.
Variable_arreglo=new
tipo
[filas]
[columnas]
[profundidad];
Es necesario haber declarado la variable variable_arreglo
previamente.

Pgina 38

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Ejemplo N1:
d)

Multidimensional.Un array multidimensional est basado de la siguiente


forma:
Tipo [] [] Nombre=new Tipo [x] [y]
Tipo: Es el tipo de variable
Nombre: Nombre en comn que tendrn todos los datos
del array
X: Nmero de filas
Y: Nmero de columnas

Ejemplo N1:
Imprimir las cuatro fechas en de revisin tcnica del auto.
El orden es de la siguiente forma: Da/ Mes/ Ao
int i,c;
int [][] fecha= new int [5][3];
fecha[0][0]= 12;
fecha[0][1]= 02;
fecha[0][2]= 1999;
fecha[1][0]= 23;
fecha[1][1]= 10;
fecha[1][2]= 2001;
fecha[2][0]= 15;
fecha[2][1]= 04;
fecha[2][2]= 2004;
fecha[3][0]= 17;
fecha[3][1]= 12;
fecha[3][2]= 2006;
fecha[4][0]= 03;
fecha[4][1]= 05;

Pgina 39

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

fecha[4][2]= 2008;
for ( i = 0; i < fecha.length; i++) {
for (c=0; c<fecha[i].length;c++){
System.out.print(fecha[i][c]+"\t");
}
System.out.println();
}
}}

Ejemplo N2:
Imprimir el nmero de partidos ganados, perdidos y
empatados de cinco equipos de futbol
int i,c;
int [][]par = {{14,9,10},{12,10,11},{10,14,10},{15,06,13},{13,13,05}};
for ( i = 0; i < par.length; i++) {
for (c=0; c<par[i].length;c++){
System.out.print(par[i][c]+"\t");
}
System.out.println();
}
}}

Pgina 40

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Conclusiones
Hemos hecho un resumen de algunas partes del famoso
lenguaje Java, muy utilizado para escribir los programas
que trabajan en internet y no slo para eso; empezando
por las bases hasta llegar a las interfaces grficas y,
finalmente, al sonido. stos son todos aspectos ms
avanzados de la programacin.
El curso de programacin nos facilita y hace ms simple el
trabajo del hombre al momento de organizar diferentes
aspectos de la vida cotidiana.
Cada programa que creamos es diferente y nos permite
minimizar tiempo y costos, ya que uno mismo puede crear
sus programas para las diferentes necesidades que
tengamos.

Pgina 41

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Recomendaciones
Les recomendamos a todas las personas que tienen acceso
a esta monografa, que lean la informacin que brindamos
nosotros, ya que a nuestro parecer es muy comprensible y
hemos tratado de poner ejemplos que las personas puedan
comprender.
As mismo a nuestros compaeros y profesor a que revisen
el material que tenemos y obtener sus crticas
constructivas de nuestra monografa.

Pgina 42

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Bibliografa

[Arnold y Gosling, 1997] Ken Arnold y James Gosling.


Addison-Wesley/Domo. "El lenguaje de Programacin Java".
Wesley Iberoamericana. 1997. 334 pginas. (Muy bsico,
escrito por el desarrollador del lenguaje).
[Eckel, 1997] Bruce Eckel. "Hands -on Java Seminar".
Presindent MindView Inc. 1997. 577 pginas. (Tutorial
completo en Ingls en formato PDF).
[Johnson, 1996] Jeff Johnson. "Coding Standards for C, C++,
and Java". Vision 2000 CCS Package and Application Team.
1996. 14 pginas. (Consejos para el formato de los fuentes
Java, C y C++).
[Morgan, 1999] Mike Morgan. "Descubre Java 1.2". Prentice
Hall. 1999. 675 pginas. (Sin duda muy interesante, sobre

todo por su actualidad al tratar con Java 2, y por su


extensin al tratar todas las bibliotecas de Java).

Documentacin oficial de la Sun Microsystems de Java


Development Kit Versioni 1.3, 1.3 Relase Candidate 1, 1.3
Relase Candidate 2, 1.3 Relase Candidate 3, 1.3 Beta, 1.2.2 ,
1.2.1. Disponible en la red en el sito oficial de
Java: http://java.sun.com

Java Didctica y Programacin, K.Arnold e J. Gosling,


Addison-Wesley Primera edicin, (en italiano) Marzo de
1997

Manual QUE - Special Edition Using Java, 2nd Edition,


versin encontrada en internet (en ingls).

Java2 Todo&Ms, J. Jaworski, SAMS Publishing - APOGEO


(en ingls)

Javatm 2D Graphics, J. Knudsen, O'REILLY (en ingls)


Pgina 43

ESCUELAS PROFESIONALES DE INGENIERIAS:


INDUSTRIAL, CIVIL, COMPUTACIN Y
SISTEMAS

Ambiente para explorar los micromundos en competicin,


Pietro Castellucci, Tesina en Informtica. (en italiano)

Pgina 44