domingo, 3 de noviembre de 2013

MATRIZ Y PROCEDIMIENTOS

Descarga el PDF aquí:

https://mega.co.nz/#!6cJj0Rwb!WmdxTUp0XjBQgarLZNW9SATcq9hnDHtDSY8WQHofnEA


MATRIZ Y PROCEDIMIENTOS

Un array en Java puede tener más de una dimensión. El caso más general son los arrays bidimensionales también llamados matrices o tablas.
La dimensión de un array la determina el número de índices necesarios para acceder a sus elementos.
Los vectores que hemos visto en otra entrada anterior son arrays unidimensionales porque solo utilizan un índice para acceder a cada elemento.
Una matriz necesita dos índices para acceder a sus elementos. Gráficamente podemos representar una matriz como una tabla de n filas y m columnas cuyos elementos son todos del mismo tipo.
La siguiente figura representa un array M de 3 filas y 5 columnas:


Pero en realidad una matriz en Java es un array de arrays.
Gráficamente podemos representar la disposición real en memoria del array anterior así:

La longitud del array M (M.length) es 3.
La longitud de cada fila del array (M[i].length) es 5.
Para acceder a cada elemento de la matriz se utilizan dos índices. El primero indica la fila y el segundo la columna.
CREAR MATRICES EN JAVA
Se crean de forma similar a los arrays unidimensionales, añadiendo un índice.
Por ejemplo:
matriz de datos de tipo int llamado ventas de 4 filas y 6 columnas:
int [][] ventas = new int[4][6]; 
matriz de datos double llamado temperaturas de 3 filas y 4 columnas:
double [][] temperaturas = new double[3][4];
En Java se pueden crear arrays irregulares en los que el número de elementos de cada fila es variable. Solo es obligatorio indicar el número de filas.
Por ejemplo:
int [][] m = new int[3][];
crea una matriz m de 3 filas.
A cada fila se le puede asignar un número distinto de columnas:
m[0] = new int[3];
m[1] = new int[5];
m[2] = new int[2];
Gráficamente podemos representar la disposición real en memoria del array anterior así:

 
INICIALIZAR MATRICES
Un array es un objeto, por lo tanto, cuando se crea, a sus elementos se les asigna automáticamente un valor inicial:
-               0 para arrays numéricos
-               '\u0000' (carácter nulo) para arrays de caracteres
-               false para arrays booleanos
-               null para arrays de String y de referencias a objetos.
También podemos dar otros valores iniciales al array cuando se crea.
Los valores iniciales se escriben entre llaves separados por comas.
Los valores que se le asignen a cada fila aparecerán a su vez entre llaves separados por comas.
El número de valores determina el tamaño de la matriz.
Por ejemplo:
int [][] numeros = {{6,7,5}, {3, 8, 4}, {1,0,2}, {9,5,2}};
se crea la matriz numeros de tipo int, de 4 filas y 3 columnas, y se le asignan esos valores iniciales.
Asignando valores iniciales se pueden crear también matrices irregulares.
int [][] a = {{6,7,5,0,4}, {3, 8, 4}, {1,0,2,7}, {9,5}};
Crea una matriz irregular de 4 filas. La primera de 5 columnas, la segunda de 3, la tercera de 4 y la cuarta de 2.

RECORRER MATRICES
Para recorrer una matriz se anidan dos bucles for. En general para recorrer un array multidimensional se anidad tantas instrucciones for como dimensiones tenga el array.
Ejemplo de recorrido de una matriz en Java:
Programa que lee por teclado números enteros y los guarda en una matriz de 5 filas y 4 columnas. A continuación muestra los valores leídos, el mayor y el menor y las posiciones que ocupan.

import java.util.*;

public class Bidimensional2 {

    public static void main(String[] args) {
        final int FILAS = 5, COLUMNAS = 4;
        Scanner sc = new Scanner(System.in);
        int i, j, mayor, menor;
        int filaMayor, filaMenor, colMayor, colMenor;
        int[][] A = new int[FILAS][COLUMNAS];
        System.out.println("Lectura de elementos de la matriz: ");
        for (i = 0; i < FILAS; i++) {
            for (j = 0; j < COLUMNAS; j++) {
                System.out.print("A[" + i + "][" + j + "]= ");
                A[i][j] = sc.nextInt();
            }
        }
        System.out.println("valores introducidos:");
        for (i = 0; i < A.length; i++) { 
            for (j = 0; j < A[i].length; j++) {
                System.out.print(A[i][j] + " ");
            }
            System.out.println();
        }
        mayor = menor = A[0][0];//se toma el primero como mayor y menor
        filaMayor = filaMenor = colMayor = colMenor = 0;

        for (i = 0; i < A.length; i++) {  //
            for (j = 0; j < A[i].length; j++) {
                if (A[i][j] > mayor) {
                    mayor = A[i][j];
                    filaMayor = i;
                    colMayor = j;
                } else if (A[i][j] < menor) {
                    menor = A[i][j];
                    filaMenor = i;
                    colMenor = j;
                }
            }           
        }
        System.out.print("Elemento mayor: " + mayor);
        System.out.println(" Fila: "+ filaMayor + " Columna: " + colMayor);
        System.out.print("Elemento menor: " + menor);
        System.out.println(" Fila: "+ filaMenor + " Columna: " + colMenor);
    }
}

En este ejemplo se han utilizado dos formas distintas para recorrer la matriz:
-         utilizando en el for el número de filas y columnas
-         utilizando en el for el atributo length
Para recorrer arrays irregulares como el siguiente:
int [][] a = {{6,7,5,0,4}, {3, 8, 4}, {1,0,2,7}, {9,5}};

Usaremos siempre length para obtener el número de columnas que tiene cada fila:

for (i = 0; i < a.length; i++) {  //número de filas
     for (j = 0; j < a[i].length; j++) { //número de columnas de cada fila
          System.out.print(a[i][j] + " ");
     }
     System.out.println();
}
Suma de Dos Matrices

package proyectoquery;

public int[][] sumarDosMatrices(int[][] a, int[][] b) {


        int matrizResultante[][];

        int i, j, filasA, columnasA;

        filasA = a.length;

        columnasA = a[0].length;

        matrizResultante = new int[filasA][columnasA];

        for (i = 0; i < filasA; i++) {
            for (j = 0; j < columnasA; j++) {

                matrizResultante[i][j] += a[i][j] + b[i][j];

            }

        }
        return matrizResultante;
    }


ARREGLO Y FUNCIONES

Descarga el PDF aquí:

https://mega.co.nz/#!HNY2RbbJ!YXNlnjcy4cxZVr9ttPIZtXsHwyQjcbaDGksGW5ARy0M


ARREGLO Y FUNCIONES

Definición de funciones

Objetivos: Mostrar cómo se puede extender el lenguaje Java con nuevas funciones.



Definición de funciones

En clases anteriores vimos que Java posee funciones predefinidas para calcular el seno, la raíz cuadrada, el logaritmo y otras funciones científicas. El problema es que es imposible que un lenguaje de programación suministre todas las funciones que un programador podría necesitar.
Por esta razón, prácticamente todos los lenguajes incorporan algún mecanismo para que los programadores puedan definir sus propias funciones cuando no existe la función predefinida apropiada. Para definir una nueva función, el programador debe escribir el código (programa) que calcula esa función.
Por ejemplo, el siguiente programa calcula el número de combinaciones:

    class Combinaciones extends Program {
      void run() {
        print("Ingrese k ? ");
        int k= readInt();
        print("Ingrese n ? ");
        int n= readInt();
        int combinaciones= fact(n)/(fact(k)*fact(n-k));
        println("Combinaciones= "+combinaciones);
      }
      // Definición de la funcion fact
      int fact(int x) {
        // fact recibe un argumento entero y entrega un resultado entero.
        // El siguiente código calcula el factorial de x
        int prod= 1;
        int i= 1;
        while (i<=x) {
          prod= prod*i;
          i= i+1;
        }
        // Indica qué valor entrega esta función.
        return prod;
      }
    }

El siguiente patrón de programación se usa para definir varias funciones que pueden ser usadas en un programa:

    class ... extends Program {
      void run() {
        ...
      }
      tipo nombre-función ( parámetros ) {
        ... programa que calcula esta función ...
        return expresión;
      }
      ... Más funciones ...
    }
Explicación:

  • tipo: es el tipo del valor entregado por la función. Por ejemplo, el factorial entrega un número entero. Otra función podría entregar un número real o un string.
  • nombre-función: es un identificador que elige el programador para nombrar su función.
  • parámetros: son los parámetros de la función, es decir de qué depende el cálculo de la función. Pueden indicarse 0, 1, 2 o todos los parámetros que se necesiten.
  • return expresión: señala cual es la expresión que representa el valor entregado por la función.
  • Una función que no retorna ningún valor se define indicando que entrega un valor de tipo void. En este caso se prefiere hablar de procedimiento.
  • void run() { ... }: es un procedimiento que no recibe argumentos y que es invocado por java Run ...

Invocación de una función

La forma general de una invocación de una función es:

    nombre-función ( argumentos )
en donde argumentos son 0, 1, 2 o más expresiones separadas por coma. Por ejemplo:

    fact(n-k)
La semántica de una invocación de función es la siguiente:

  • Se evalúan las expresiones, obteniendo así valores que corresponden a los argumentos de la función. Por ejemplo, n-k puede dar como resultado 5.
  • Se asignan los argumentos a las variables que representan los parámetros en la difinición de la función. Por ejemplo, en la función fact:
        x= 5;
    
  • Se ejecutan las instrucciones señaladas en la definición de la función. Es decir:
            int prod= 1;
            int i= 1;
            while (i<=x) {
              prod= prod*i;
              i= i+1;
            }
    
    Después de ejecutar este código, la variable prod almacena el valor 120 (5!) e i el valor 6.
  • Se evalúa la expresión que acompaña return.
            return prod;
    
    Como esta expresión es simplemente la variable prod, el resultado de la evaluación es 120. Este valor es el resultado de la invocación de fact y substituye toda la expresión de invocación:
        fact(n-k)
    
Esto se puede apreciar en la siguiente figura que muestra las 3 invocaciones de la función fact a partir de run() cuando n es 7 y k es 2:

En cada invocación el argumento es distinto y por tanto el valor entregado por la función.


Ejercicio 1:
Definir la función repite(s,n) que entrega el string s concatenado con sí mismo n veces. Es decir, se desea que repite("hola",3) entregue (o retorne) como resultado el string "holaholahola".

    class Triangulo extends Program {
      String repite(String s, int n) {
        String r= "";
        int i= 1;
        while (i<=n) {
          r= r+s;
          i= i+1;
        }
        return r;
      }
      void run() {
        int i=1;
        while (i<=8) {
          println(repite("*",i));
          i= i+1;
        }
      }
    }
El programa anterior produce la siguiente salida:

    *
    **
    ***
    ****
    *****
    ******
    *******
    ********

Ejercicio 2:
Defina la función esPrimo(n) que entrega verdadero cuando n es un número primo y falso en caso contrario. Utilice cualquier método para determinar si n es primo. Ejemplos:

esPrimo(2)true
esPrimo(3)true
esPrimo(25)false
esPrimo(31)true
esPrimo(9)false
Ejercicio 3:
Escriba un programa que use la función esPrimo para mostrar los números primos entre 200 y 300.


Ejercicio 4:
Defina una función mayor que calcule el máximo valor en un arreglo nativo. Por ejemplo, si el arreglo tab contiene las siguientes asociaciones:

índicevalor
04.5
115.0
22.2
34.3
entonces:

    println( mayor(tab, 0, 3) ); // despliega 15.0
    println( mayor(tab, 2, 3) ); // despliega 4.3
El primer argumento es el arreglo, el segundo es el índice inicial en el arreglo y el tercero es el índice final.
Solución:

    double mayor(double[] tab, int pri, int ult) {
      int i= pri;
      double max= tab[pri];
      while (i<=ult) {
        if (tab[i]>max)
          max= tab[i];
        i= i+1;
      }
      return max;
    }
Este ejemplo muestra que una función puede recibir como argumentos referencias a objetos. En otros ejemplos veremos que una función puede entregar (retornar) referencias a objetos.



Qué es un procedimiento

Un procedimiento es similar a una función, pero difiere en que no entrega ningún resultado. Su interés radica en las acciones que se realizan durante su invocación. Un ejemplo de procedimiento es println(...). Éste siempre se invoca en forma aislada (no como parte derecha en una asignación):
    println( ... );
Las acciones que realiza la invocación de println consisten en desplegar en pantalla el argumento que recibe. Es ilegal escribir asignaciones como:

    x= println( ... );
porque println no retorna ningún valor.


Definición de procedimiento

Un procedimiento se define y se comporta de la misma forma que una función. La única diferencia es que el tipo retornado por un procedimiento es void. Por ejemplo, el siguiente procedimiento despliega los elementos de un arreglo con valores reales:

    void mostrar(double[] tab, int pri, int ult) {
      int i= pri;
      while (i<=ult) {
        println(i+" -> "+tab[i]);
        i= i+1;
      }
      // no hay return
    }
Ejemplos de uso de mostrar son los siguientes:

    mostrar(tab, 0, 3);
que produce el siguiente resultado en pantalla:

    0 -> 4.5
    1 -> 15.0
    2 -> 2.2
    3 -> 4.3
Ejercicio 5: procedimiento que graba el contenido de un arreglo en un archivo.
Defina el procedimiento grabar que reciba como argumentos un arreglo con valores de tipo double, dos enteros que señalan el rango de llaves válidas (pri y ult) y el nombre de un archivo. Su procedimiento debe producir un archivo con el contenido del arreglo. Por ejemplo, la siguiente invocación:

    grabar(tab, 0, 3, "cont.txt");
debe producir un archivo de nombre "cont.txt" con 4 líneas cuyo contenido es:

    4.5
    15.0
    2.2
    4.3
(Propuesto.)


Procedimientos con efectos laterales

Definir un procedimiento leer que recibe como argumentos un arreglo y el nombre de un archivo con 4 líneas, e inicializa el arreglo con los valores reales contenidos en un archivo. Por ejemplo:

    double[ ] tabB= new double[4];
    leer(tabB, "cont.txt");
    mostrar(tabB, 0, 3);
debe producir el siguiente resultado en pantalla:

    0 -> 4.5
    1 -> 15.0
    2 -> 2.2
    3 -> 4.3
Solución:

    void leer(double[ ] tab, String nom) {
      TextReader lect= new TextReader(nom);
      int i= 0;
      while (true) {
        double x= lect.readDouble();
        if (lect.eofReached())
          break;
        tab[i]= x;
        i= i+1;
      }
      lect.close();
    }
Una función o procedimiento puede modificar los arreglos que recibe como argumentos. En general, pueden producir efectos laterales sobre sus parámetros, cuando son algún tipo de objetos.
En una función o procedimiento, los parámetros que corresponden a algún tipo de objetos son en realidad referencias de objetos (recuerde que una referencia es como el teléfono celular del objeto). Por lo tanto, dentro del procedimiento leer, la variable tab referencia el mismo objeto que es referenciado por la variable tabB en la invocación de leer:



Funciones con efectos laterales

El procedimiento anterior no permite saber cuantos valores se leyeron en el archivo. Por esta razón, es conveniente transformarlo en una función que retorna cuantos elementos habían en el archivo. Por ejemplo:

    double[ ] tabc= new double[1000]; // tabc está vacío
    int n= leer(tabC, "cont.txt");
    mostrar(tabC, 0, n-1);
Para esto hay que cambiar la definición de leer por:

    int leer2(double[ ] tab, String nom) {
      ... // idéntico a leer
      return i; // la última llave inicializada
    }
En este caso leer2 es una función con efectos laterales porque su labor no es sólo retornar un valor, si no que además debe alterar los valores que se encuentran en el arreglo.
Observación:
En la primera versión de leer la asignación:

    int ult= leer(tabB, "cont.txt");
es ilegal porque se definió leer como void. Con la segunda versión sí es válida esta asignación.


Experimento:
¿Qué despliega el siguiente programa?
    int i=1;
    double[ ] tabD= new double[1000];
    int ult= leer2(tabD, "cont.txt");
    println("leidos= "+i);
En este caso, el valor desplegado para i es 1. La variable i que usa la función leer es interna a esa función y no tiene relación alguna con la variable i recién escrita. Diremos que la variable i declarada internamente en la función leer es invisible fuera de la función o procedimiento.


Funciones que retornan arreglos

Una función puede retornar arreglos (u objetos en general). Por ejemplo, se puede construir una función que construye un arreglo y lo entrega a su llamador (el que invoca la función):

    double[ ] tabE= leer3("cont.txt");
    mostrar(tab3);
en donde leer3 es una función que recibe el nombre de un archivo y construye un arreglo con los valores almacenados en el archivo. Se define como:

    double[ ] leer3(String nom) {
      // Se lee una vez el archivo para determinar cuantos reales contiene
      TextReader lect= new TextReader(nom);
      int i= 0;
      while (true) {
        double x= lect.readDouble();
        if (lect.eofReached())
          break;
        i= i+1;
      }
      lect.close();
      int nelem= i;
      // volvemos a leer el archivo para llenarlo
      double[] tab= new double[nelem];
      lect= new TextReader(nom);
      i= 0;
      while (i<nelem) {
        tab[i]= lect.readDouble();
        i= i+1;
      }
      lect.close();
      return tab; // la última llave inicializada
    }
Esta función cuenta los reales contenidos en el archivo, crea un arreglo del tamaño apropiado, coloca los números contenidos en el archivo en el arreglo, y al final retorna la referencia del arreglo. Esta es una función sin efectos laterales, porque no produce ningún cambio en niguno de sus argumentos.


Término anticipado de una función

La línea return que aparece al final de las funciones es una instrucción como cualquier otra y por lo tanto puede aparecer en cualquier parte del código de la función:

    return exp;
Cuando se ejecuta la instrucción return, se termina con la ejecución de la función en donde aparece y la función entrega el resultado de evaluar la expresión que acompaña return. Por ejemplo, la siguiente función calcula si un número es primo:

    boolean esPrimo(int n) {
      int i= 2;
      while (i<n) {
        if (n%i==0) {
          return false;
        }
        i= i+1;
      }
      return true;
    }
La instrucción return en este caso es más ``fuerte'' que un break, puesto que no sólo termina el ciclo, también termina la función completa.


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner leer = new Scanner(System.in);
        int arreglo[] = new int[]{2,3,6,9,11};
        int opcion = -1;
        System.out.println("Ingrese opcion\n(1)Sumar\n(2)Promedio\n(3)Contar\n(4)Max\n(5)Min");
        opcion = leer.nextInt();
        if(opcion==1){
            //Sumar
            int resultado = sumar(arreglo);
            System.out.println("La suma es : " + resultado);
        }
        if(opcion==2){
            //Promedio
            double resultProm = promedio(arreglo);
            System.out.println("El promedio es : "+ resultProm);
        }
        if(opcion==3){
            //Contar
            System.out.println("La cantidad es : " + arreglo.length);
        }
        if(opcion==4){
            // Max
            int max = maximo(arreglo);
            System.out.println("El maximo valor es : " + max);
           
        }
        if(opcion==5){
            // Min
            int min = minimo(arreglo);
            System.out.println("El minimo valor es :" + min);
        }
    }
    public static int sumar(int arr[]){
        int acumulador=0;
        int contador=0;
        int largoArreglo = arr.length; // 5 Elementos
        for(contador = 0; contador < largoArreglo; contador++){
            acumulador+=arr[contador];
        }
        return acumulador;
    }
    public static double promedio(int a[]){
        double prom = 0;
        int suma = sumar(a);
        int cant = a.length;
        return suma/cant;
    }
    public static int maximo(int b[]){
        int max = -1;
        int cont = 0;
        for(cont = 0; cont < b.length; cont++){
            if(b[cont]>max){
                max = b[cont];
            }
        }
        return max;
    }
    public static int minimo(int c[]){
        int min = 999999999;
        for(int cont = 0; cont < c.length; cont++){
            if(c[cont]<min){
                min = c[cont];
            }
        }
        return min;
    }
}

Estructura Switch

Descarga el PDF aquí:

https://mega.co.nz/#!7MImkLLR!WmEVOxTcexRMqTp7d0P1wiz8OwZoNLlMILdFQjFqeSs

Estructura Switch - Ejemplos

Ingresar un numero entre 1 y 12 y reportar el mes que le corresponde

import java.util.Scanner;

public class Ejemplo {
    
    public static void main(String []args)
    {
        Scanner in=new Scanner(System.in);
        System.out.print("Ingrese un numero 1-12:");
        int numero=in.nextInt();
        switch(numero)
        {
            case 1:System.out.println("ENERO");break;
            case 2:System.out.println("FEBRERO");break;
            case 3:System.out.println("MARZO");break;
            case 4:System.out.println("ABRIL");break;
            case 5:System.out.println("MAYO");break;
            case 6:System.out.println("JUNIO");break;
            case 7:System.out.println("JULIO");break;
            case 8:System.out.println("AGOSTO");break;
            case 9:System.out.println("SEPTIEMBRE");break;
            case 10:System.out.println("OCTUBRE");break;
            case 11:System.out.println("NOVIEMBRE");break;
            case 12:System.out.println("DICIEMBRE");break;
            default:System.out.println("Ingresa un numero del 1 al 12");
        }
    }
}

Proyecto JAVA

Descarga el PDF del proyecto Java Parte I aquí:



PROYECTO: JAVA
“El uso de Java”

UNIVERSIDAD PRIVADA DEL NORTE

CAPÍTULO 1.  INTRODUCCIÓN.

1.      Realidad problemática.

Java es la tecnología subyacente que permite el uso de programas punteros, como herramientas, juegos y aplicaciones de negocios. Java se ejecuta en más de 850 millones de ordenadores personales de todo el mundo y en miles de millones de dispositivos, como dispositivos móviles y aparatos de televisión, la cual fue desarrollada por la compañía Sun Microsystems con el que podemos realizar cualquier tipo de programa. En la actualidad es un lenguaje muy extendido y cada vez cobra más importancia tanto en el ámbito de Internet como en la informática en general.

El lenguaje Java se creó con cinco objetivos principales:
Debería usar el paradigma de la programación orientada a objetos.
Debería permitir la ejecución de un mismo programa en múltiples sistemas operativos.
Debería incluir por defecto soporte para trabajo en red.
Debería diseñarse para ejecutar código en sistemas remotos de forma segura.
Debería ser fácil de usar y tomar lo mejor de otros lenguajes orientados a objetos, como C++.

Actualmente, Java ha sufrido muchas vulnerabilidades en todos sus años, pero esta no es como otra cualquiera, es una vulnerabilidad muy peligrosa. Se ha descubierto un fallo de seguridad 0-day en la última versión 1.7 de Java, calificada por los propios desarrolladores con el grado crítico. El exploit instala un dropper (Dropper.MsPMs) que permite ejecutar sofware malicioso sin ser detectado por los programas antivirus.



2.      Formulación del problema.
Una investigación indicó que los incidentes de Java continúan y que el 93% de las empresas eran vulnerables a explotaciones Java conocidas. Casi el 50% del tráfico empresarial utilizó una versión de Java que estaba desactualizada por más de dos años. Mediante un análisis de Websense Threat Seeker Intelligence Cloud, ahora se descubrió que:
  • Sólo el 19% de equipos empresariales basados en Windows ejecutaron la más reciente versión de Java (7u25) entre el 1 y el 29 de agosto de 2013.
  • Más del 40% de las solicitudes empresariales Java provinieron de navegadores que aún utilizan el obsoleto Java 6. Como resultado, más del 80% de las solicitudes de Java son susceptibles a dos populares y nuevas vulnerabilidades Java: CVE-2013-2473 y CVE-2013-2463.
  • El 83,86% de los navegadores empresariales tiene habilitado Java.
“Los recientes ataques de alto perfil han establecido, nuevamente, la tendencia cada vez más sólida de que Java debe ser visto como un riesgo de seguridad.
Es así que La última actualización de Java (7 u10) anunciada este año parece contener una grave vulnerabilidad que afectaría a todos los sistemas operativos.

Es así que se nos viene la gran interrogante ¿Será seguro usar Java?.

3.      Justificación.

Java, por ser en la actualidad una tecnología de suma importancia decidimos investigar del tema para saber las posibles vulnerabilidades que conlleva al usar dicha tecnología y así entrar más a fondo que conflicto provoca que java pueda ser vulnerable, ya que como mencionamos anteriormente: Java se ejecuta en más de 850 millones de ordenadores personales de todo el mundo y en miles de millones de dispositivos. Es por ello que buscando fuentes, se encuentra noticias de las fallas que ha traído Java para que no se desee utilizar viendo que el problema radica en versiones del programa actual.
Finalmente deseamos justificar nuestro proyecto con la finalidad de contribuir posibles soluciones a la controversial al uso de la tecnología Java, dando a lugar que muchos consideran a este el mejor lenguaje de programación y de aplicaciones, pero por el otro lado se ha detectado la lamentable vulnerabilidad.



4.      Limitaciones.


Considerar que actualmente carecemos de estudios previos en lo que es Java y sus características hasta ahora.
Agregar que la mayor parte de información expuesta al público se encuentra en otro idioma.
La dificultad principal que presenta este proyecto es que desconocemos por el momento tales vulnerabilidades a nivel de código, ya que esto se encuentra clasificado al público; sin embargo, trabajaremos a fondo para encontrar toda la información necesario que requerimos para presentar y definir que vulnerabilidad se cree tener en Java.
Es por ello, la importancia de una investigación de este problema que al ser desarrollado por estudiantes de nivel superior, se espera que denote una gran exploración e indagación para dar una posible solución a la comunidad que usa este tipo de tecnología.


5.      Objetivos
5.1.     Objetivo General.
Esperamos explicar una solución a la vulnerabilidad que presenta la tecnología Java, así mismo presentar como este funciona dando posibles ejemplos de su uso programático (Lenguaje de programación).
5.2.     Objetivos Específicos.

Definir que es el lenguaje y tecnología Java.
Detallar el actual problema que presenta Java.
Explicar el funcionamiento de Java.
Evaluar el problema que radica en esta tecnología.
Proponer una solución al conflicto.




sábado, 2 de noviembre de 2013

Estructura if/else/else if

Descarga el PDF aquí:

https://mega.co.nz/#!fMAxkJpT!Sn1inxo8IwZO5EImbJo9qQJ2sE9k9X_HZC29QzzAo3w

Estructura if/else/else if - Ejemplos


Ingresar N números enteros y reportar la cantidad de pares y la cantidad de impares.

import java.util.Scanner;

public class Ejemplo
{
   
    public static void main(String[] args)
    {
       Scanner scan = new Scanner(System.in);
       int n, x, cp = 0, ci = 0;
       System.out.print("Ingrese la cantidad de numeros a revisar: ");
       n = scan.nextInt();
       for (int i = 1; i <= n; i++)
       {
            System.out.print(i + ") Ingrese un numero: ");
            x = scan.nextInt();
            if (x % 2 == 0)          
                cp++;          
            else        
                ci++;          
        }
        System.out.println("La cantidad de pares son: " + cp);
        System.out.println("La cantidad de impares son: " + ci);
    }
}

Estructura Switch - Ejemplos

Ingresar un numero entre 1 y 12 y reportar el mes que le corresponde

import java.util.Scanner;

public class Ejemplo {
   
    public static void main(String []args)
    {
        Scanner in=new Scanner(System.in);
        System.out.print("Ingrese un numero 1-12:");
        int numero=in.nextInt();
        switch(numero)
        {
            case 1:System.out.println("ENERO");break;
            case 2:System.out.println("FEBRERO");break;
            case 3:System.out.println("MARZO");break;
            case 4:System.out.println("ABRIL");break;
            case 5:System.out.println("MAYO");break;
            case 6:System.out.println("JUNIO");break;
            case 7:System.out.println("JULIO");break;
            case 8:System.out.println("AGOSTO");break;
            case 9:System.out.println("SEPTIEMBRE");break;
            case 10:System.out.println("OCTUBRE");break;
            case 11:System.out.println("NOVIEMBRE");break;
            case 12:System.out.println("DICIEMBRE");break;
            default:System.out.println("Ingresa un numero del 1 al 12");
        }
    }
}