#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;
}
jueves, 5 de julio de 2012
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==""?" ":nombre)+"</td>"+
"<td>"+(apellido==""?" ":apellido)+"</td>"+
"<td>"+(telefono==""?" ":telefono)+"</td>"+
"<td>"+(direccion==""?" ":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==""?" ":nombre)+"</td>"+
"<td>"+(apellido==""?" ":apellido)+"</td>"+
"<td>"+(telefono==""?" ":telefono)+"</td>"+
"<td>"+(direccion==""?" ":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>
<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==""?" ":nombre)+"</td>"+
"<td>"+(apellido==""?" ":apellido)+"</td>"+
"<td>"+(telefono==""?" ":telefono)+"</td>"+
"<td>"+(direccion==""?" ":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==""?" ":nombre)+"</td>"+
"<td>"+(apellido==""?" ":apellido)+"</td>"+
"<td>"+(telefono==""?" ":telefono)+"</td>"+
"<td>"+(direccion==""?" ":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
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.
Link del proyecto
http://www.mediafire.com/?npp5m5wzu2s7d
http://www.mediafire.com/?npp5m5wzu2s7d
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
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...
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..
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
Suscribirse a:
Entradas (Atom)