Bienvenida

Como todo en la vida, la innovación es la clave del éxito por lo que nos hemos visto en la necesidad de "evolucionar" este blog para abarcar muchos otros temas que estaban quedando de lado en nuestros cursos "oficiales".

Si deseas aprender o profundizar algunos temas en particular, no dudes en contactarnos.


lunes, 16 de septiembre de 2013

Eventos en Perú

V Congreso Iberoamericano - Soporte al Conocimiento con la Tecnologia
SOCOTE 2013
http://www.usmpvirtual.edu.pe/socote2013/#wrapper-content

Congreso Internacional de Computación y Telecomunicaciones
COMTEL 2013
http://www.comtel.pe/

II Congreso Internacional de Sistemas y Computación
Lima UPC
http://www2.upc.edu.pe/html/0/documentos/2-congreso-esc-2013.pdf

I Congreso Internacional de Ingeniería de Software (CIIS) 2013
Arequipa
http://ulasalle.edu.pe/index.php/eventos/prox-eventos/ciis2013

2013-II : Práctica Calificada 1 (Programación Java)

¿ Qué tan complicado te parece esto ?

PREGUNTA #1 
Escribir un programa Java que ejecute lo siguiente:
a)    Lea una cadena desde el teclado. Debe validar que todos los caracteres sean ‘0’ ó ‘1’ (es una cadena binaria). Si existieran blancos, deben ser removidos por el programa.
b)    Luego debe convertir el valor en sistema binario al sistema decimal y mostrarlo en pantalla.
c)    El programa se debe ejecutar hasta que se ingrese un ‘0’.

PREGUNTA #2 
Se le pide desarrollar un programa que genere la secuencia de Fibonacci.
La secuencia comienza en 0 y 1 . Los números siguientes son el resultado de la suma de los dos números previos.
La secuencia debe continuar hasta llenar una matriz de 5 x 5

Se le solicita que imprima la matriz original y la matriz transpuesta.

miércoles, 22 de mayo de 2013

1416 - Curso de Programación - Examen Parcial 2013-I



CASO: La Universidad es una cosa de Locos
Como parte de un estudio sobre el desempeño de los alumnos en determinado curso de la Facultad de Ingeniería de Sistemas, se requiere hacer cierta simulación en el cálculo de promedios. Para ello se le entrega un archivo de texto conteniendo  los datos de los alumnos de un curso así como las notas obtenidas (Descargalo aquí). Usted debe desarrollar una aplicación que permita ingresar las ponderaciones de cada nota para poder calcular el promedio final del curso.

PREGUNTA # 1 : 
Desarrolle un menú de opciones que permita:
a)     Opción 1: Ingresar las ponderaciones (pesos).
b)     Opción 2: Leer archivo de datos.
c)     Opción 3: Calcular promedios.
d)     Opción 4: Listar información estadística.
e)     Opción 5: Salir

Recuerde que la suma de ponderaciones de Examen Parcial (EP), examen final (EF) y tarea académica (TA) debe sumar 100. Tome en cuenta que la tarea académica se divide en  práctica 1 (PC1), práctica 2 (PC2), Proyecto  de curso (PROY) y otros (OTR), cuya suma también debe dar como resultado 100.

Debe validar que se ingresen todos los datos, que sean correctos, etc. Puede controlar el error  utilizando la excepción NumberFormatException por ejemplo.

PREGUNTA #2: 
En esta pregunta debe desarrollar una Interface Java y  una clase DAO que implemente la interface que:
a) Permita leer los datos desde un archivo. La ruta y nombre del archivo debe ser ingresada por teclado.
b) Permita calcular los promedios finales en base a las ponderaciones ingresadas. Para calcular el promedio debe eliminarse (o no tomarse en cuenta)  la menor nota del rubro “otros”.
c)   Permita calcular los promedios por cuartil y sexo.
d)  Permita buscar el mejor o peor promedio

Determine usted la mejor estructura para almacenar  los datos obtenidos.
La estructura de cada línea del archivo es la siguiente:
ID, nombre, ep, ef, pc1, pc2, sexo, proyecto, otro1, otro2

La interface tiene los métodos siguientes:

public List<AlumnoBean> leerArchivo(String rutaArchivo);
public List<AlumnoBean> calculaPromedio(int pesoEP, int pesoEF, int pesoTA, 
int pesoPC1, int pesoPC2, int pesoPRO, 
int pesoOTR, List<AlumnoBean> ele );
public void calculaPromedioCuartil_x_Sexo(float rango1, float rango2, 
                                  String sexo, List<AlumnoBean> ele) ;
public void buscaPromedio(boolean mayor, List<AlumnoBean> ele) ;

En el caso del método “buscarPromedio”, el parámetro “mayor” es TRUE cuando se desea buscar el mejor promedio y FALSE cuando se desea el peor promedio.

PREGUNTA #3:
Ejecute su aplicación con las siguientes ponderaciones:
EP = 30; EF = 40; TA = 30
PC1 = 20 ; PC2 = 20 ; PROY=50; OTR = 10;

En base a los resultados  indique el promedio de nota para Hombres y Mujeres en cada Cuartil:

CUARTIL
PROMEDIO “H”
PROMEDIO “M”
CUARTIL 1 : de 00.0 a 25.00


CUARTIL 2 : de 25.01 a 50.00


CUARTIL 3 : de 50.01 a 75.00


CUARTIL 4 : de 75.01 a 100.00



Indique el ID, nombre y promedio del mejor alumno de la clase
ID
Nombre
PROMEDIO




Indique el ID, nombre y promedio del último  (peor) alumno de la clase
ID
Nombre
PROMEDIO






jueves, 28 de marzo de 2013

Android : Scanner de medios

Al desarrollar aplicaciones que requieren mostrar la galería de imagenes es preciso "copiar" (o hacer push ) de archivos hacia el emulador para poder efectuar las pruebas. 

Sin embargo, me ha ocurrido que sale un mensaje de error en el Android Debug Monitor :



En primera cuenta, olvidé crear el emulador con una SDCard. Para ello, en el Editor del AVD, debe indicarse explícitamente el uso de una SDCard como en la figura:

Luego nos damos con la sorpresa que el scanner de medios está desactivado por defecto ( dado que consume recursos ). Entonces, se debe activar manualmente ( por lo menos en la version Jelly Bean ).

Para activarlo se ingresa a la aplicación que dice "Dev Tools".








Luego se presiona el botón de Scan SD Card:


Cuando termina el proceso aparece en la pantalla la ruta :

Esa es la ruta donde se debe copiar los archivos para hacer las pruebas:


En este caso, copiamos 4 archivos de ejemplo ( pueden ser otros archivos ):


Y finalmente, podemos acceder a la galería:


¡ Hasta la próxima !

sábado, 9 de marzo de 2013

Solución al "casito" de Programación

Bien, he aquí "una" de las  soluciones: obviamente no hay 2 personas que piensen igual por lo tanto los algoritmos pueden variar, pero el resultado debería ser el mismo.

La pregunta #1 es sencilla:
Codificaremos  la interface:


package com.ejemplo.jdbc;

import java.util.List;

public interface AlumnoIF {

public List<AlumnoDTO> calculaPromedio();

public void calculaPromedioCuartil_x_Sexo(float rango1, float rango2, String sexo);

public void calculaPromedioCuartil(float rango1, float rango2);

}


Luego necesitamos un DTO llamado "AlumnoDTO" :


package com.ejemplo.jdbc;

import java.io.Serializable;

public class AlumnoDTO implements Serializable {
private int id;
private String nombre;
private float ep;
private float ta;
private float pc;
private float promedio;

No olvidarse de generar lo getter/setter.

La pregunta #2 implica generar un DAO con la lógica de cada  método definido en la interface:


package com.ejemplo.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class AlumnoDAO implements AlumnoIF {
private final String url = "jdbc:mysql://localhost:3306/1416examenfinal?user=root&password=mysql";
public Connection getConnection() {
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection(url);
} catch ( Exception e) {
System.out.println("* * * Ocurrio un ERROR " + e.getLocalizedMessage() );
e.printStackTrace();
}
return con;
}

Para calcular el promedio :

public List<AlumnoDTO> calculaPromedio() {
Connection con = getConnection();
String sql = "SELECT * FROM TBALUMNOS ORDER BY ID";
List<AlumnoDTO> lista = new ArrayList<AlumnoDTO>();
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// Borrar tabla
String sql0 = "DELETE FROM TBRPTA";
pstmt = con.prepareStatement(sql0);
pstmt.executeUpdate();
pstmt = con.prepareStatement(sql);
rs  = pstmt.executeQuery();
while ( rs.next() ) {
String sql2 = "INSERT INTO TBRPTA VALUES(?,?,?,?,?,?,?)";
pstmt = con.prepareStatement(sql2);
pstmt.setInt(1, rs.getInt(1) );
pstmt.setString(2, rs.getString(2) );
pstmt.setFloat(3, rs.getFloat(3) );
pstmt.setFloat(4, rs.getFloat(4) );

float pc1 = rs.getFloat(5);
float pc2 = rs.getFloat(6);
float pcMayor = 0;
if ( pc1 > pc2) {
pstmt.setFloat(5, pc1 );
pcMayor = pc1;
} else {
pstmt.setFloat(5, pc2 );
pcMayor = pc2;
}
float promedio = (float) (rs.getFloat(3) *0.3 + rs.getFloat(4) *0.4 + pcMayor *0.3);
pstmt.setFloat(6, promedio );
pstmt.setString(7, rs.getString(7).trim() );
pstmt.executeUpdate();

}

// Leer los resultados
String sql1 = "SELECT * FROM TBRPTA ORDER BY PROMEDIO ASC";
pstmt = con.prepareStatement(sql1);
rs  = pstmt.executeQuery();
while ( rs.next() ) {
AlumnoDTO a = new AlumnoDTO();
a.setId( rs.getInt(1) );
a.setNombre( rs.getString(2) );
a.setEp( rs.getFloat(3) );
a.setTa( rs.getFloat(4) ) ;
a.setPc( rs.getFloat(5) ) ;
a.setPromedio(rs.getFloat(6));
lista.add(a);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
pstmt.close();
rs.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return lista;
}

Para calcular el promedio por Cuartil :

public void calculaPromedioCuartil(float rango1, float rango2) {
Connection con = getConnection();
String sql = "SELECT promedio FROM TBRPTA WHERE promedio > ? AND promedio <= ?";
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = con.prepareStatement(sql);
pstmt.setFloat(1, rango1);
pstmt.setFloat(2, rango2);
rs  = pstmt.executeQuery();
int contador = 0;
float suma = 0;
while ( rs.next() ) {
contador = contador + 1;
suma = suma + rs.getFloat(1);
}

System.out.println("CUARTIL : de " + rango1 + " a " + rango2 +  " --> " + (suma/contador) ) ;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
pstmt.close();
rs.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Y para calcular el promedio por cuartil y sexo:

public void calculaPromedioCuartil_x_Sexo(float rango1, float rango2, String sexo) {
Connection con = getConnection();
String sql = "SELECT promedio FROM TBRPTA WHERE promedio > ? AND promedio <= ? AND sexo = ? ";
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = con.prepareStatement(sql);
pstmt.setFloat(1, rango1);
pstmt.setFloat(2, rango2);
pstmt.setString(3, sexo);
rs  = pstmt.executeQuery();
int contador = 0;
float suma = 0;
while ( rs.next() ) {
contador = contador + 1;
suma = suma + rs.getFloat(1);
}

System.out.println("CUARTIL : de " + rango1 + " a " + rango2 + " Sexo : " + sexo + " --> " + (suma/contador) ) ;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
pstmt.close();
rs.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

La pregunta #3 implica crear el programa principal :

package com.ejemplo.pregunta02;

import java.util.List;

import com.ejemplo.jdbc.AlumnoDAO;
import com.ejemplo.jdbc.AlumnoDTO;
import com.ejemplo.jdbc.AlumnoIF;

public class Respuesta02 {

public static void main(String[] args) {
Respuesta02 r02 = new Respuesta02();
r02.calcula();
}
public void calcula() {
AlumnoIF dao = new AlumnoDAO();
List<AlumnoDTO> l = dao.calculaPromedio();
for (int i=0; i < l.size(); i++) {
System.out.println( l.get(i).getId() + "\t " + l.get(i).getNombre() + "\t " + l.get(i).getPc() + "\t" + l.get(i).getPromedio() );
}
// Promedio x Cuartiles
System.out.println("===> Primer Cuadro <====");
dao.calculaPromedioCuartil(0F, 25.00F);
dao.calculaPromedioCuartil(25.01F, 50.00F);
dao.calculaPromedioCuartil(50.01F, 75.00F);
dao.calculaPromedioCuartil(75.01F, 100.00F);
System.out.println("");

// Promedio x Cuartiles x Sexo
System.out.println("===> Segundo Cuadro <====");
dao.calculaPromedioCuartil_x_Sexo(0F, 25.00F,"H");
dao.calculaPromedioCuartil_x_Sexo(0F, 25.00F,"F");
dao.calculaPromedioCuartil_x_Sexo(25.01F, 50.00F,"H");
dao.calculaPromedioCuartil_x_Sexo(25.01F, 50.00F,"F");
dao.calculaPromedioCuartil_x_Sexo(50.01F, 75.00F,"H");
dao.calculaPromedioCuartil_x_Sexo(50.01F, 75.00F,"F");
dao.calculaPromedioCuartil_x_Sexo(75.01F, 100.00F,"H");
dao.calculaPromedioCuartil_x_Sexo(75.01F, 100.00F,"F");

}

}

Al ejecutar este programa salen todos los datos necesarios para llenar los cuadros.

¿ Fácil ?


jueves, 7 de marzo de 2013

Un "casito" de Programación

Este es un caso de programación completo sobre Java básico y JDBC.

El caso consta de 3 preguntas:

PREGUNTA #1
Generar un proyecto Java usando Eclipse IDE o NetBeans y codificar la siguiente Interface:






public interface AlumnoIF {

       public List<AlumnoDTO> calculaPromedio();

public void calculaPromedioCuartil_x_Sexo(float rango1, float rango2, String sexo);

public void calculaPromedioCuartil(float rango1, float rango2);

}


Tener en cuenta que no se pueden crear más métodos en la Interface.

Restaurar la base de datos con el siguiente script de MySQL :  base.sql


PREGUNTA #2:


Generar  una Clase Java llamada “AlumnoDAO”  que implemente la interface definida en la pregunta anterior. Puede adicionar un único método para obtener la conexión a la base de datos.

Implemente el método “calculaPromedio” de la interface para que:
a)     Lea los datos de cada alumno y elimine la nota de Prácticas más baja ( entre PC1 y PC2 )
b)     Luego debe calcular el promedio de cada alumno teniendo en cuenta que los pesos son: EP ( 30% ) , EF ( 30% )  y PC (40%)
c)     DEBE insertar los resultados en la tabla auxiliar llamada TBRPTA con la estructura siguiente:


Implemente el método “calculaPromedioCuartil” de la interface con cuya información puede llenar el cuadro (a) de la pregunta 3. NO puede usar funciones agregadas de SQL.

Implemente el método “calculaPromedioCuartil_x_Sexo” de la interface con cuya información puede llenar el cuadro (b) de la pregunta 3. NO puede usar funciones agregadas de SQL.

Para asegurarnos que usted ha solucionado esta pregunta correctamente,  desarrolle un programa MAIN ( Respuesta02.java ) que  invoque a los métodos implementados y además muestre en consola el listado de alumnos con sus promedios  ordenados de menor  a mayor.

PREGUNTA #3
Completar la información de los siguientes cuadros:

a)     Indique la nota promedio de cada CUARTIL
CUARTIL
PROMEDIO
CUARTIL 1 : de 00.0 a 25.00

CUARTIL 2 : de 25.01 a 50.00

CUARTIL 3 : de 50.01 a 75.00

CUARTIL 4 : de 75.01 a 100.00


b)     Indique el promedio de nota para Hombres y Mujeres en cada Cuartil:
CUARTIL
PROMEDIO “H”
PROMEDIO “M”
CUARTIL 1 : de 00.0 a 25.00


CUARTIL 2 : de 25.01 a 50.00


CUARTIL 3 : de 50.01 a 75.00


CUARTIL 4 : de 75.01 a 100.00



c)     Indique el ID, nombre y promedio del peor alumno de la clase
ID
Nombre
PROMEDIO






¡ Publica tus respuestas !