Está en la página 1de 15

Introduccin

A lo largo de la historia la humanidad ha sido espectadora de los cambios


tecnolgicos que se dan desde que el primer homnido fue capaz de encontrar
una manera de utilizarlo para su bienestar y as pasando por la rueda, las
herramientas, la electricidad, los transistores y tantos eslabones restantes en
esta interminable cadena que nos trae a nuestra era en donde la necesidad de
automatizacin, de comunicacin, de conocimiento e inclusive de ocio nos
obliga a ampliar nuestros conocimientos, sobre cmo funcionan las cosas
especficamente la tecnologa electrnica moderna, la cual podramos decir en
su totalidad requiere ser instruida para cumplir la labor que requerimos. Es ah
en donde entra la programacin porque de otra manera de que nos servira
una calculadora que no puede sumar 1 + 1 dado a que literalmente no lo
conoce? No obstante, si est programada para saberlo es una herramienta en
algunos casos imprescindible. El conocimiento de cmo programar en un
lenguaje universal nos permitir expandir nuestras posibilidades en todas las
reas de nuestra vida estudiantil, profesional y econmica, facilitndonos
muchas labores cotidianas y simplificando en muchos aspectos nuestra vida.

Justificacin
Mediante la realizacin de este trabajo buscamos expandir nuestros
conocimientos sobre como programar en un lenguaje denominado JAVA. Pero la
pregunta si algunos de nosotros estudiantes de carreras profesionales,
queremos ser psiclogos, abogados, maestros msicos o ingenieros
industriales es para que habramos de necesitar saber cmo programar en
JAVA, para ello no estn los ingenieros de sistemas? Pues esa pregunta tiene
solucin.
En el trascurso de la vida laboral de cualquier profesional, este se va a
encontrar con tareas sean grandes o pequeas muchas veces repetitivas que
van a demandar grandes cantidades de tiempo convirtindolo en un momento
dado en un profesional improductivo y poco proactivo que solo puede realizar
las tareas que le han sido asignadas. pero no es este el trabajo de una
computadora? Ejecutar tareas repetitivas permitindole a los profesionales
enfocarse en temas importantes y ser proactivos en su entorno profesional e
incluso para el emprendedor tener ms tiempo para publicitar su negocio o an
ms importante destinar tiempo a su familia.
Esta es la respuesta que buscbamos, si bien ninguno de los profesionales que
nombramos anteriormente llegaran a programar el prximo Windows dado a
que no es su profesin seguramente el conocer un lenguaje de programacin
les permitir simplificar labores simples repetitivas y tal vez sencillas pero que
consumen tiempo valioso, y como dira el dicho, el tiempo es dinero.

Objetivos

Establecer un problema cotidiano en nuestro mbito estudiantil.


Hallar una solucin a ese problema de la manera ms rpida y simple.
Organizar paso a paso la solucin al problema.
Disear utilizando lenguaje JAVA una herramienta sencilla que permita
acceder a la solucin del problema rpidamente
Desarrollar habilidades que nos permitan plantear y crear soluciones
sencillas utilizando lenguaje Java de modo que se nos permita a nosotros
mismos la posibilidad de automatizar tareas sencillas o complejas
optimizando el uso de nuestro tiempo de estudio.

Marco terico
Dentro de los lenguajes que nos permitiran programar una computadora
para ejecutar instrucciones se encuentra uno que resalta por su
versatilidad y por su facilidad de ejecutarse en cualquier dispositivo sin
importar su arquitectura.
Este lenguaje se llama JAVA y fue desarrollado por James Gosling
empleado de Sun Microsystems (ahora propiedad de Oracle) y puesto en
marcha en 1995. Este lenguaje est compuesto de tres partes el
lenguaje, una mquina virtual y una interfaz de programacin de
aplicaciones o API. El lenguaje nos permitir dar instrucciones a la
computadora en trminos humanos que esta pueda comprender, la
mquina virtual le permitir al lenguaje funcionar bajo cualquier
estructura y la API es una biblioteca de instrucciones que nos permitirn
dar diferentes rdenes a la computadora. Siendo as vamos a hablar de
cmo funciona JAVA. AL igual que en la vida cotidiana nos vemos
condicionados y requerimos tomar diferentes decisiones una
computadora tambin tiene que hacerlo y para ello debemos instruirle
como para ello vamos a conocer a continuacin cuales son los
condicionales y las variables y cmo podemos darlas a conocer al
sistema.
Variables
Una variable en Java es un identificador que representa una palabra de
memoria que contiene informacin. El tipo de informacin almacenado
en una variable slo puede ser del tipo con que se declar esa variable.
Para comprender esto podemos tomar en cuenta el lgebra de octavo
grado en donde sabamos que x podra ser 1, 0, 1000, Pi, e y tantos otros
valores en este caso todos numricos. En JAVA estos valores pueden no
solo ser numricos, pueden tambin ser letras, palabras o sentencias. A
continuacin, relacionamos los tipos de variable en JAVA

Tipo

Bits

Rango

Ejemplos

int

32

-2**31 .. 2**31-1

0, 1, 5, -120, ...

short

16

-2**15 .. 2**15-1

0, 1, 5, -120, ...

byte

-2**7 .. 2**7-1

0, 1, 5, -120, ...

long

64

-2**63 .. 2**63-1

0, 1, 5, -120, ...

boolean

n/a

false, true

char

16

n/a

'a', 'A', '0', '*', ...

float

32

IEEE

1.2

double

64

IEEE

1.2

Control de flujo

El control del flujo es la manera que tiene un lenguaje de programacin de


provocar que el flujo de la ejecucin avance y se ramifique en funcin de los
cambios de estado de los datos. Java, en este aspecto, no utiliza los principios
de diseo orientado a objetos, sino que las sentencias de control del flujo del
programa se han tomado del C/C++. A continuacin, se tratan todos los
mecanismos que proporciona Java para conseguir este control y decidir qu
partes del cdigo ejecutar.

Sentencias de Salto
if/else
if( expresin-booleana ) {
sentencias;
}
[else {
sentencias;
}]

Esta construccin provoca que la ejecucin atraviese un conjunto de estados


booleanos que determinan que se ejecuten distintos fragmentos de cdigo. La
clusula else es opcional. Cada una de las sentencias puede ser una sentencia
compuesta y la expresin-booleana podra ser una variable simple declarada
como boolean, o una expresin que utilice operadores relacionales para
generar el resultado de una comparacin.
switch
switch( expresin ) {
case valor1:
sentencias;
break;
case valor2:
sentencias;
break;
[default:
sentencias;]
}

La sentencia switch proporciona una forma limpia de enviar la ejecucin a


partes diferentes del cdigo en base al valor de una nica variable o expresin.
La expresin puede devolver cualquier tipo bsico, y cada uno de
los valores especificados en las sentencias case debe ser de un tipo
compatible.

Sentencias de Bucle
Bucles for
for( inicializacin; terminacin; iteracin ) {
sentencias;
}

Un bucle for, normalmente involucra a tres acciones en su ejecucin:

Inicializacin de la variable de control


Comprobacin del valor de la variable de control en una expresin
condicional
Actualizacin de la variable de control

La clusula de inicio y la clusula de incremento pueden estar compuestas por


varias expresiones separadas mediante el operador coma (,), que en estos
bucles Java tambin soporta.
for( a=0,b=0; a < 7; a++,b+=2 )

El operador coma garantiza que el operando de su izquierda se ejecutar antes


que el operando de su derecha. Las expresiones de la clusula de inicio se
ejecutan una sola vez, cuando arranca el bucle. Cualquier expresin legal se
puede emplear en esta clusula, aunque generalmente se utiliza para
inicializacin. Las variables se pueden declarar e inicializar al mismo tiempo en
esta clusula:
for( int cnt=0; cnt < 2; cnt++ )

La segunda clusula, de test, consiste en una nica expresin que debe


evaluarse a false para que el bucle concluya. El valor de la segunda clusula es
comprobado cuando la sentencia comienza la ejecucin y en cada una de las
iteraciones posteriores.
La tercera clusula, de incremento, aunque aparece fsicamente en la
declaracin de bucle, no se ejecuta hasta que se han ejecutado todas las
sentencias que componen el cuerpo del bucle for; por ello, se utiliza para
actualizar la variable de control. Es importante tener en cuenta que si
utilizamos variables incluidas en esta tercera clusula en las sentencias del
cuerpo del bucle, su valor no se actualizar hasta que la ejecucin de todas y
cada una de las sentencias del cuerpo del bucle se haya completado. En esta
clusula pueden aparecer mltiples expresiones separadas por el
operadorcoma, que sern ejecutadas de izquierda a derecha.

El siguiente trozo de cdigo Java que dibuja varias lneas en pantalla


alternando sus colores entre rojo, azul y verde, utiliza un bucle for para dibujar
un nmero determinado de lneas y una sentencia switch para decidir el color
de la lnea. Este fragmento sera parte de una funcin Java (mtodo):
int contador;
for( contador=1; contador <= 12; contador++ ) {
switch( contador % 3 ) {
case 0:
setColor( Color.red );
break;
case 1:
setColor( Color.blue );
break;
case 2:
setColor( Color.green );
break;
}
g.drawLine( 10,contador*10,80,contador*10 );
}

Tambin se soporta, como ya se ha indicado, el operador coma (,) en los


bucles for, aunque su uso es una decisin de estilo, no es la nica forma de
codificar una sentencia lgica en particular. En ocasiones se utiliza como atajo,
pero en otras se prefiere la utilizacin de sentencias mltiples dentro del
cuerpo del bucle for.
for( a=0,b=0; a < 7; a++,b+=2 )

Si se elimina la lnea en donde se declara e inicializa la variable local al mtodo


y la siguiente, en la que se imprime su valor, el programa sigue sin compilar.
En este caso, el compilador indica que la variable cnt, que se encuentra en la
sentencia final no est definida. Por tanto, el mbito de la variable declarada
dentro del bucle for parece est restringido al bucle en s mismo.
Si se eliminan las lneas en que interviene la variable global del mtodo, el
programa compila y se ejecuta correctamente, ilustrando el hecho de que Java
soporta la declaracin de variables en la clusula de inicio del bucle,y adems,
que el mbito de la variable est restringido al interior del bucle.

La primera y tercera clusulas del bucle for pueden encontrarse vacas, pero
deben estar separadas por punto y coma (;). Hay autores que sugieren incluso
que la clusula de testeo puede estar vaca, aunque para el programador que
est escribiendo esto, salvando el caso de que se trate de implementar un
bucle infinito, si esta clusula de comprobacin se encuentra vaca, el mtodo
de terminacin del bucle no es nada obvio, al no haber una expresin
condicional que evaluar, por lo que debera recurrirse a otro tipo de sentencia,
en vez de utilizar un bucle for.

Bucles while
[inicializacin;]
while( terminacin-expresin-booleana ) {
sentencias;
[iteracin;]
}

El bucle while es la sentencia de bucle ms bsica en Java. Ejecuta


repetidamente una vez tras otra una sentencia, mientras una expresin
booleana sea verdadera. Las partes de inicializacin e iteracin, que se
presentan entre corchetes, son opcionales.
Esta sentencia while se utiliza para crear una condicin de entrada. El
significado de esta condicin de entrada es que la expresin condicional que
controla el bucle se comprueba antes de ejecutar cualquiera de las sentencias
que se encuentran situadas en el interior del bucle, de tal modo que si esta
comprobacin es false la primera vez, el conjunto de las sentencias no se
ejecutar nunca.

Marco metodolgico
Para el desarrollo de este trabajo buscamos una accin que tuviramos que
realizar en nuestra cotidianidad. Como estudiantes de primeros semestres de
carreras profesionales consideramos que el trabajo con matrices es algo muy
til, pero poco prctico y ms bien tedioso y que requiere de bastante tiempo,
por ello nos hemos propuesto desarrollas un cdigo que nos permita hallar el
determinante de matrices cuadradas de grado superior.
Despus desarrollamos un algoritmo que nos permitiera traducir ms adelante
los pasos que debemos seguir para desarrollar el problema que nos hemos
planteado, este algoritmo es bastante sencillo, bsicamente evala si la matriz
es cuadrada o no y se procede a la captura de datos.

De este modo procedemos a definir nuestras variables de entrada y salida y


tambin pre y postcondiciones para proceder a establecer el pseudocodigo.

Como precondiciones establecemos lo siguiente:

La matriz a evaluar debe ser cuadrada


Los valores de dicha matriz deben ser enteros.
Si la matriz es de grado 2 procedemos a calcular el determinante, de lo
contrario procedemos a extraer los cofactores.

Variables de entrada y salida

Filas = El numero de filas de la matriz


Columnas = El numero de columnas de la matriz
El valor correspondiente a cada una de las filas
El valor correspondiente a cada una de las columnas.

Pseudocodigo
Codigo
package Progracion.Computadores;

import java.util.Scanner;
import java.math.*;

public class Principal {


//
private static int[][] matriz;
private static Scanner scanner = new Scanner(System.in);
private static boolean creada = false;

//Mtodo que crea la matriz para calcular el determinante. Define las


entradas del sistema
public static void CrearMatriz(){
int filas = 0;

int columnas = 0;
System.out.print("Introduzca el nmero de filas de la matriz");
if(ValidarValorDigitado()){
filas = scanner.nextInt();
}
System.out.print("Introduzca el nmero de columnas de la
matriz");
if(ValidarValorDigitado()){
columnas = scanner.nextInt();
};
if(filas==columnas){//Precondicin: Los nmero ingresados
deben ser iguales
matriz = new int[filas][columnas];

/* Se solicita al usuario ingresar los nmeros de la matriz al


tiempo que se va
* imprimiendo la matriz resultante */
for(int cfilas = 0;cfilas<filas;cfilas++){
for(int
ccolumnas=0;ccolumnas<columnas;ccolumnas++){
System.out.println("Introduzca el valor para la
fila: "+ Integer.toString(cfilas)+" y para la columna:
"+Integer.toString(ccolumnas)+" de la matriz");
if(ValidarValorDigitado()){
matriz[cfilas]
[ccolumnas]=scanner.nextInt();
}
}
}
ImprimirMatriz(matriz);
creada= true;
}

else{
System.out.println("La Matriz no es una matriz cuadrada");
creada= false;
}
}

public static boolean ValidarValorDigitado(){


while(!scanner.hasNextInt()){
System.out.println("Por favor dgite un nmero entero");
scanner.next();
}
return scanner.hasNextInt();
}

public static void ImprimirMatriz(int[][] mat){


for (int x=0; x < mat.length; x++) {
System.out.print("|");
for (int y=0; y < mat[x].length; y++) {
System.out.print (mat[x][y]);
if (y!=mat[x].length-1) System.out.print("\t");
}
System.out.println("|");
}
}

//Mtodo que extrae la matriz resultante de eliminar la fila y la columna


que entran como parmetros
public static int[][] ExtraerMatriz(int[][] original,int fila,int columna){
int rfila = 0;
int rcolumna = 0;

int[][] resultado = new int[original.length - 1][original[0].length 1];


for(int ofila=0;ofila < original.length;ofila++){
if(ofila!=fila){
for(int ocolumna=0;ocolumna <
original[0].length;ocolumna++){
if(ocolumna !=columna){
resultado[rfila][rcolumna] =
original[ofila][ocolumna];
rcolumna += 1;
}
}
rfila +=1;
rcolumna = 0;
}
}
return resultado;
}

public static double CalcularDeterminante(int[][] mat){


double resultado = 0;
//Si la matriz en una matriz de 2 x 2 se calcula el determinante de
esa matriz
if(mat.length==2){
if(mat.length == mat[0].length){
resultado = (mat[0][0]*mat[1][1] - mat[0][1]*mat[1]
[0]);
}
}
else{
//Se extraen los cofactores para la primera fila de la matriz
de entrada

for(int j=0;j<mat[0].length;j++){
resultado = resultado + Math.pow(-1, (1+j+1)) *
ExtraerFactores(0,j,mat);
}
}
return resultado;
}

//Mtodo que extrae los cofactores


public static double ExtraerFactores(int fila, int columna,int[][] mat){
int[][] resultado = ExtraerMatriz(mat,fila,columna);
return mat[fila][columna]*CalcularDeterminante(resultado);
}

public static void main(String[] args) {


System.out.print("***SISTEMA PARA EL CALCULO DEL
DETERMINANTE DE UNA MATRIZ CUADRADA***");
while(!creada){
CrearMatriz();
}
//Salida
double resultado = CalcularDeterminante(matriz);
System.out.println("El determinante de la matriz es: "+resultado);
}

Bibliografa
http://users.dcc.uchile.cl/~lmateu/Java/Apuntes/tiposprim.htm
https://msdn.microsoft.com/es-es/library/ms228393(v=vs.90).aspx
http://dis.um.es/~bmoros/Tutorial/parte4/cap4-4.html

También podría gustarte