jueves, 5 de julio de 2012

Generador de arbol gramatical "(nivel) cadena"

#include<iostream>
#include<vector>
#include<sstream>
using namespace std;

struct Estado{
    Estado(string s, string c):simbolo(s), cadena(c){}
    string simbolo;
    string cadena;
};

int buscarTerminal(string c, string S[], int n){
    while( (--n) >= 0 ){
        if( c == S[n] )
            break;
    }
    return n;
}

int buscarNoTerminal(string c, string V[], int n){
    while( (--n) >= 0 ){
        if( c == V[n] )
            break;
    }
    return n;
}

vector<string> getTokens(string cad, string V[], int v){
    int i = 0, j , tam = cad.length();
    vector<string> tokens ;
    string actual;
    bool encontrado;
    actual = cad.substr(i,1);
    while(i<tam){
        encontrado = false;
        j = 0;
        while( j < v ){
            if(actual == V[j]){
                tokens.push_back(actual);
                encontrado = true;
                break;
            }
            ++j;
        }
        if(!encontrado){
            actual.append(cad.substr(++i,1));
            continue;
        }
        ++i;
        actual = cad.substr(i,1);
    }
    return tokens;
}

vector<string> getNivel(string estado, Estado E[], int n){
    vector<string> lineas ;
    int i = 0;
    bool encontrado = false;
    while( (i < n ) & ~encontrado ){
        if( estado == E[i].simbolo ){
            lineas.push_back(E[i].cadena);
            encontrado = true;
        }
        ++i;
    }
    while( i < n ){
        if( estado != E[i].simbolo ){
            break;
        }
        lineas.push_back(E[i].cadena);
        ++i;
    }
    return lineas;
}

vector<string> mostrarNiveles(string nivel , int nivel_raiz , Estado E[], string S[] , string V[] ,
                    int e, int s, int v, ostringstream &os){

    //cout << "MOSTRAR NIVELES 1.. " << nivel_raiz << " - NIVEL : "<< nivel << endl;

    vector<string> tokens = getTokens(nivel,V,v);
    vector<string> salida ;
    string tmp ;
    int i = 0, j, k;
    int terminal;
        //cout << "tokens : " ;
    while( i < tokens.size() ){
        //cout << tokens.at(i) << " - ";
        terminal = buscarTerminal(tokens.at(i),S,s);
        if( terminal != -1 ){
            if( salida.size() == 0 )
                tmp.append(tokens.at(i));
            else{
                k = 0;
                while( k < salida.size() ){
                    salida.at(k).append(tokens.at(i));
                    ++k;
                }
            }
        }else{
            vector<string> _tokens = getNivel(tokens.at(i),E,e);
            j = 0;
            if( salida.size() == 0 ){
                while( j < _tokens.size() ){
                    salida.push_back( tmp + _tokens.at(j) );
                    ++j;
                }
                tmp = "";
            }else{
                vector<string> _tmp ;
                while( j < _tokens.size() ){
                    k = 0;
                    while( k < salida.size() ){
                        _tmp.push_back(salida.at(k) + _tokens.at(j) );
                        ++k;
                    }
                    salida.insert(salida.begin(),_tmp.begin(),_tmp.end());
                    ++j;
                }
            }
        }
        ++i;
    }
    //cout << endl;
    i = 0;
    if(salida.size() == 0)
        salida.push_back(tmp);
    while ( i < salida.size() ){
        os << ( nivel_raiz < 100 ? "0" : ( nivel_raiz < 10 ? "00" : "" ) ) << nivel_raiz << " " << salida.at(i) << endl;
        ++i;
    }
    return salida;
}

void mostrarNiveles(vector<string> nivel , int nivel_raiz , Estado E[], string S[] , string V[] ,
                    int e, int s, int v, ostringstream &os){
    if(nivel_raiz==0)
        return;
    int i = 0;
    vector< vector < string > > tmp;
    while( i < nivel.size() ){
        tmp.push_back( mostrarNiveles( nivel.at(i), nivel_raiz, E, S, V, e, s, v , os) );
        ++i;
    }
    i = 0;
    while( i < tmp.size() ){
        //cout << "Recursividad("<<nivel_raiz<<","<<i<<")." << endl;
        mostrarNiveles( tmp.at(i), nivel_raiz-1, E, S, V, e, s, v, os );
        ++i;
    }
}

int main(){
    string V[] = {"v0","v1","v2","a","b","c"};
    string S[] = {"a","b","c"};
    Estado E[] = {
        Estado("v0","aav0"),
        Estado("v0","bv1"),
        Estado("v1","cv2b"),
        Estado("v1","cb"),
        Estado("v2","bbv2"),
        Estado("v2","bb")
    };
    vector<string> ini;
    ini.push_back("v0");
    ostringstream os;
    os << "04 v0" << endl;
    mostrarNiveles(ini,8,E,S,V,6,3,6,os);
    cout << os.str();
    return 0;
}

miércoles, 20 de junio de 2012

<html>
  <head>
    <script>
      function agregarFila(){
        var nombre = document.getElementById("txtNombre").value;
        var apellido = document
        .getElementById("txtApellido").value;
        var telefono = document
        .getElementById("txtTelefono").value;
        var direccion = document
        .getElementById("txtDireccion").value;
    var tabla = document
        .getElementById("tblDinamica");
    tabla.innerHTML = tabla.innerHTML +
        "<tr bgcolor=\"#f0ffff\" name=\"fila\">"+
                  "<td>"+(nombre==""?"&nbsp":nombre)+"</td>"+
          "<td>"+(apellido==""?"&nbsp":apellido)+"</td>"+
          "<td>"+(telefono==""?"&nbsp":telefono)+"</td>"+
          "<td>"+(direccion==""?"&nbsp":direccion)+"</td>"+
          "<td align=\"center\"><input type=\"checkbox\" "+
            "name=\"marca\"/"+"></td>"+
                "</tr>";
      }

      function modificarFila(){
    /* alert("Modificar"); */

        var nombre = document.getElementById("txtNombre").value;
        var apellido = document
        .getElementById("txtApellido").value;
        var telefono = document
        .getElementById("txtTelefono").value;
        var direccion = document
        .getElementById("txtDireccion").value;
    var tabla = document
        .getElementById("tblDinamica");

    var tabla =  document.getElementById("tblDinamica");
    var marcas = document.getElementsByName("marca");

    for( i = marcas.length - 1 ; i >= 0 ; --i ){
      if(marcas[i].checked){       
        marcas[i]
        .parentNode.parentNode.parentNode.innerHTML =
          "<tr bgcolor=\"#f0ffff\" name=\"fila\">"+
                  "<td>"+(nombre==""?"&nbsp":nombre)+"</td>"+
          "<td>"+(apellido==""?"&nbsp":apellido)+"</td>"+
          "<td>"+(telefono==""?"&nbsp":telefono)+"</td>"+
          "<td>"+(direccion==""?"&nbsp":direccion)+"</td>"+
          "<td align=\"center\"><input type=\"checkbox\" "+
            "name=\"marca\"/"+"></td>"+
                  "</tr>";
      }
    }
      }

      function eliminarFila(){
    var tabla =  document.getElementById("tblDinamica");
    var marcas = document.getElementsByName("marca");
    for( i = marcas.length - 1 ; i >= 0 ; --i ){
      if(marcas[i].checked){
        tabla.removeChild(marcas[i]
            .parentNode.parentNode.parentNode);       
      }
    }     
      }

    </script>
  </head>
  <body>
    <form name="form1">
      <H1 align="center"> TABLA DINAMICA </H1>   
      <table id="tblDinamica" border="2" rules="none" bgcolor="#0000ff">
        <tr align="center" bgcolor="#0f0f0f">
      <td colspan="5" >
            <input type="button" id="btnAgregar" value="Agregar" onclick="agregarFila()"/>
            <input type="button" value="Modificar"
        onclick="modificarFila()"/>
            <input type="button" value="Eliminar"
        onclick="eliminarFila()"/>  
          </td>
        </tr>
    <tr align="center" bgcolor="#0f0f0f">
          <td width="200">
            <input type="text" id="txtNombre" size="10"/>
          </td>
          <td width="200">
            <input type="text" id="txtApellido" size="10"/>
          </td>
          <td width="200">
            <input type="text" id="txtTelefono" size="10"/>
          </td>
          <td width="200">
            <input type="text" id="txtDireccion" size="10"/>
          </td>
          <td width="200" rowspan="2">
            <font color="white">
              MARCAR FILA A ELIMINAR O MODIFICAR
            </font>
          </td>
        </tr>
        <tr align="center" bgcolor="#ffffff" >
          <td width="200">
            NOMBRES
          </td>
          <td width="200">
            APELLIDOS   
          </td>
          <td width="200">
            TELEFONO
          </td>
          <td width="200">
            DIRECCION
          </td>
        </tr>
      </table>
    </form>
  </body>
</html>


Codigo html - javascript para una tabla dinámica con opciones de agregar, modificar, eliminar fila.

lunes, 18 de junio de 2012

Preparando Casos de prueba. ( Estructuras, enumeraciones )



Resolución del 1 al 10 en : http://www.mediafire.com/?r5vev28kjpvhn

TibiMySQL vs 2.0 - 2.01

Cuando publique la primera versión de esta aplicación encontre algunos incovenientes en el proceso de actualización de las tablas, además de que era tedioso estar ingresando los nombres de las bases de datos y las tablas a las que queriamos acceder, así que con un poco de investigación y unos cuantos días de arduo trabajo les traigo la segunda versión de esta aplicación.

Cosas nuevas :
  • Carga de las todas las bases de datos conjuntamente con sus tablas.
  • Relleno automático de la tabla de lectura cada vez que cambias una tabla.
  • Generación más rápida de los campos de entrada.
  • Modo de actualización de un registro, tomando en cuenta a todos los campos de la tabla, para una mejor precisión a la hora de cambiar los datos.
  • Detección de desbordamientos ( datos introducidos fuera de rango, definido por el tipo de dato ), y algunos otros como el que el servicio de MySQL no este activado.
  • Ayuda al usuario, basandose en la pestaña en la que se encuentra, para no permitir ejecutar acciones erroneas.  





Link de descarga del programa .jar

 Luego de descomprimir
java -jar "TibiMySQL vs 2.0/01201200.jar" o simplemente doble click.


lunes, 4 de junio de 2012

Problemas sencillos


1.      Crear un programa que permita calcular el precio de un boleto de Tren, teniendo en cuenta la distancia recorrida (en kilómetros) y el número de días que demora el viaje. Sabiendo que el costo por Kilómetro recorrido es de S/.5.5 y además, que si la distancia recorrida es superior a 1000 Km.  Hay un descuento de 7% del precio del boleto; y si el numero de días que dura el viaje es mayor a 5, hay un descuento de 5% del precio del boleto

2. Se pide que ingrese N números naturales, después deberá calcular y reportar:
- cuantos números son iguales a 0.                  
- cuantos números son positivos.
          - cuantos números son negativos.

3.-     La empresa de peajes INVERMET desea saber el monto total que genera un sensor electrónico durante un día, el cual se encuentra instalado en la ciudad de Chimbote. A la empresa le interesa contabilizar y tener un promedio para sacar una muestra para 50 carros, quiere decir que se trabajará con 50 vehículos de todo tipo. Si se tiene las siguientes características:
Para aquellos vehículos que  tenga menos de 4 ejes el pago será de 2 soles por cada eje. Para aquellos vehículo que tenga menos o igual de 6 ejes pero más o igual a 4 ejes el pago será de 3 soles por cada eje. Para vehículo que tenga mas de 6 ejes el pago será de 4 soles por cada eje.

4.       En un salón de clases existen 30 alumnos y se tiene información de cada uno de ellos respecto a su código, nombres, apellidos, sexo, edad y promedio. El profesor desea saber lo siguiente:
          - Cuantos alumnos aprobaron su curso.
          - Cuantas mujercitas existen en el aula y que desaprobaron.
          - El promedio de sus edades.

5.       En el campeonato profesional de Fútbol  peruano participan 12 equipos, los cuales al final del torneo apertura quedan con un puntaje acumulado, ingresa los partidos jugados, ganados (3 puntos por partido ganado), perdidos, partidos empatados (1 punto por cada partido empatado), goles a favor, goles en contra. El programa deberá  reportar al equipo ganador con la cantidad de puntos acumulados.

6.       Encuentra la serie de Fibonacci, para los primeros n términos.
          Ejemplo:  Para 7 términos sería:   1 – 1 – 2 – 3 – 5 – 8 – 13
El primer número de Fibonacci es 1, el segundo es  1, el tercero 2, el cuarto 3.
Explicación los 2 primeros números son 1 y 1 los siguientes números salen de sumar los 2 últimos (1+ 1) .  El séptimo número que es 13 sale de sumar los 2 números anteriores (5 + 8)

7.-     En un grifo de la ciudad el dueño desea conocer sus ingresos para cierta cantidad de vehículos que acuden en forma diaria, para esto desea contar con un programa que lo ayude a resolver este pequeño problema. Si se sabe que vende 4 diferentes tipos de combustible

                   Gasolina                          Precio por galón
                        82                                           6.95
84                                           7.10
                        95                                           9.80 
                        97                                           10.50


jueves, 12 de abril de 2012

setBounds(x,y,ancho,alto) - Coloca los componentes en una posicion precisa

Cuando recién empiezas a utilizar Java y aún no entiendes mucho como utilizar los diferentes LAYOUTS para ordenar los componentes de tus aplicaciones. Sería mejor basarnos en el espacio 2D del espacio de la ventana, y ubicar los componentes basándonos en su posición X e Y, además de cuanto espacio de nuestra aplicación ocupara. 

Para eso se utiliza el metodo setBounds(x, y, ancho, alto), este método pondrá como punto inicial a la esquina izquierda superior del espacio de trabajo de la aplicación, y a partir de esto ubicara el primer punto del componente ( esquina izquierda superior del componente que se desea insertar ). Entonces "X" vendría a ser la distancia desde la esquina izquierda superior de la aplicacion a la esquina izquierda superior de nuestro componente en línea horizontal, y "Y" en línea vertical, como si trabajaramos en un sistema de coordenadas. El ancho y alto será para determinar el espacio k ubicara nuestro componente en el espacio de trabajo.


domingo, 8 de abril de 2012

Agregando Filas a un JTable

Hace un rato, estaba sin nada que hacer, así que decidí volver a publicar algo interesante en el blog. Aqui les presento una aplicacion que les permite, a partir de un formulario de tres campos de ingreso, agregar datos en una tabla.



LINK DE LA IMAGEN :
http://3.bp.blogspot.com/-DU9EAXaZDVw/T4G0sE3X5-I/AAAAAAAAAHQ/bN027pubJfY/s1600/toma11.jpeg

LINK PARA DESCARGAR CODIGO FUENTE:
http://www.mediafire.com/?ce8ml1d8jcm1wpe

martes, 31 de enero de 2012

PROYECTO MyTibiSQL - vs Alfa 1.0

Hola seguidores de mi blog, en primer lugar pedir disculpas, por la tardanza de la subida del código de este proyecto, es que eh estado algo ocupado por alli...

Sin más que decir, lo prometido es deuda así que alli esta el código para que lo destrocen y lo hagan evolucionar :D...

PROYECTO


CARPETA DE LA APLICACION .jar


VIDEO




Disculpando la calidad del video, en mi máquina se ve perfect, pero al subirlo al face, se ah jodido todo :S ... lo voy a subir a Youtube más tarde y actualizo el post :D..

domingo, 1 de enero de 2012

Año 2012

Hola seguidores, hoy comenzamos un nuevo año, espero nos esperen nuevos exitos. Comenzaremos un año con muchos temas interesantes, así que espero sigan visitando este blog.

FELIZ AÑO 2012