//arbol binario con inserción ordenada en C#
//UNACAR DES-DACI/JAFH 2007
//
using System;
class nodo{
public string dato;
public nodo izq;
public nodo der;
}
class arbolbinario{
static nodo raiz=null;
static void inserta(ref nodo raiz,nodo p){
if(raiz==null) raiz=p;
else
if(String.Compare(p.dato,raiz.dato)<0)
inserta(ref raiz.izq,p);
else
inserta(ref raiz.der,p);
}
static void inorden(nodo raiz){
if(raiz!=null){
inorden(raiz.izq);
Console.Write(raiz.dato+",");
inorden(raiz.der);
}
}
static void insertaDato(string dato){
nodo p=new nodo();
p.dato=dato;
p.izq=null;
p.der=null;
inserta(ref raiz,p);
}
public static void Main(){
insertaDato("f");
insertaDato("c");
insertaDato("j");
insertaDato("a");
insertaDato("d");
insertaDato("g");
insertaDato("r");
inorden(raiz);
Console.WriteLine();
}
}
martes, 6 de noviembre de 2007
lunes, 29 de octubre de 2007
comparación
Mis queridos alumnos en esta liga
http://furryland.org/~mikec/bench/
encontraran un ejemplo de comparacion de lenguajes de programación
Tarea:
Repetir el análisis comparativo de los lenguajes
D, C++, C#
Fecha de entrega : el 14 de noviembre
http://furryland.org/~mikec/bench/
encontraran un ejemplo de comparacion de lenguajes de programación
Tarea:
Repetir el análisis comparativo de los lenguajes
D, C++, C#
Fecha de entrega : el 14 de noviembre
Final experiencia
Estructura de datos Tareas Participa Exp1 Final
ARCOS HIDALGO FREDDY ABEL 20 10 0 7
AREVALO CAMPOS JUAN BRAULIO 0 10 0 1
BERDON RUIZ NAYELI VIANEY 90 90 85 87
CABALLO FONZ DAVID ARÒN 0 10 0 1
CABONEL PEREZ ROSALI GUADALUPE 0 10 0 1
CICLER GOMEZ JOSE DEL CARMEN 70 10 0 22
CRUZ PADILLA MILDRED FABIOLA 0 10 0 1
DEL TORO PAZ VINICIO 30 10 0 10
DEL VALLE MASS ROGELIO GERARDO 0 10 0 1
ESCALANTE PEREZ ALEJANDRA 0 75 60 44
GONGORA LEON MARIO ARTURO 90 10 0 28
LARA CAHUICH DANIEL 0 75 60 44
MARTINEZ CATZIN DIANA BEATRIZ 100 100 85 91
MONTEJO GALLEGOS MIGUEL ANGEL 70 10 0 22
MORON DOMINGUEZ OSCAR IVAN 0 10 0 1
NAAL PALMA JORGE ARMANDO 0 10 0 1
ORTEGA ZALASAR LUIS FERNANDO 80 100 0 34
PACHECO GARCIA ANA MARIA 0 75 0 8
PERALTA AZUARA JAVIER DANIEL 95 100 85 90
RESENDIZ GONZALEZ JOSE LUIS 95 100 85 90
RODRIGUEZ AMBRIZ MANUEL JESUS 70 10 0 22
ZABALA GONZALEZ CLAUDIA JUDITH 85 80 60 70
TEC MENESES DERECK MANUEL 20 10 0 7
viernes, 19 de octubre de 2007
Lista Ligada en archivo
Puede vber un ejemplo de manejo de dos listas ligadas en un archivo en la liga:
http://mx.geocities.com/jfloreshernandez2002/
http://mx.geocities.com/jfloreshernandez2002/
viernes, 12 de octubre de 2007
Ernesto che Guevara
"He nacido en la Argentina; no es un secreto para nadie. Soy cubano y también soy argentino y, si no se ofenden las ilustrísimas señorías de Latinoamérica, me siento tan patriota de Latinoamérica, de cualquier país de Latinoamérica, como el que más y, en el momento en que fuera necesario, estaría dispuesto a entregar mi vida por la liberación de cualquiera de los países de Latinoamérica, sin pedirle nada a nadie, sin exigir nada, sin explotar a nadie." Ernesto Che Guevara.
jueves, 11 de octubre de 2007
Ejemplo calculadora en polaca inversa
//Ejemplo calculadora en polaca inversa
//agregue el código de lista ligada y complete
//lo que se indica en comentarios
//si usa esta version debera entenderla y explicarla
//JAFH Ago 07
import std.conv;
import std.stdio;
import std.string;
import std.regexp;
char[] numero(inout char[]s){
auto m = std.regexp.search(s, r"[0-9]*");
if(m){
if(m.pre.length==0){
s=m.post();
return m.match(0);
}else return "";
}else return "";
}
char[] operador(inout char[]s){
auto m = std.regexp.search(s, r"[*+]");
if(m){
if(m.pre.length==0){
s=m.post();
return m.match(0);
}else return "";
}else return "";
}
char[] separador(inout char[]s){
auto m = std.regexp.search(s, r"[,]");
if(m){
if(m.pre.length==0){
s=m.post();
return m.match(0);
}else return "";
}else return "";
}
void separaTokens(char[] s){
int i=0;
char[] aux;
while(s.length>0){
while(separador(s)!=""){}
aux=numero(s);
if(aux==""){
aux=operador(s);
//desempila dos datos
//realiza operacion
//el operador esta en aux, con switch lo checan
//empila resultado
}else{
//empila lo que trae aux
}
writefln(aux);
if(i++>20)break; //borrar esta linea, Para que sirve?
}
}
//
void main(){
char[] s="3,4,*,5,6,*,+";
separaTokens(s);
//el resultado es el ultimo elemento de la pila
getch();
}
//agregue el código de lista ligada y complete
//lo que se indica en comentarios
//si usa esta version debera entenderla y explicarla
//JAFH Ago 07
import std.conv;
import std.stdio;
import std.string;
import std.regexp;
char[] numero(inout char[]s){
auto m = std.regexp.search(s, r"[0-9]*");
if(m){
if(m.pre.length==0){
s=m.post();
return m.match(0);
}else return "";
}else return "";
}
char[] operador(inout char[]s){
auto m = std.regexp.search(s, r"[*+]");
if(m){
if(m.pre.length==0){
s=m.post();
return m.match(0);
}else return "";
}else return "";
}
char[] separador(inout char[]s){
auto m = std.regexp.search(s, r"[,]");
if(m){
if(m.pre.length==0){
s=m.post();
return m.match(0);
}else return "";
}else return "";
}
void separaTokens(char[] s){
int i=0;
char[] aux;
while(s.length>0){
while(separador(s)!=""){}
aux=numero(s);
if(aux==""){
aux=operador(s);
//desempila dos datos
//realiza operacion
//el operador esta en aux, con switch lo checan
//empila resultado
}else{
//empila lo que trae aux
}
writefln(aux);
if(i++>20)break; //borrar esta linea, Para que sirve?
}
}
//
void main(){
char[] s="3,4,*,5,6,*,+";
separaTokens(s);
//el resultado es el ultimo elemento de la pila
getch();
}
martes, 9 de octubre de 2007
Separar una expresión en tokens
//Ejemplo expresion regular para separar una expresion en tokens
//JAFH Ago 07
import std.conv;
import std.stdio;
import std.string;
import std.regexp;
char[] numero(inout char[]s){
auto m = std.regexp.search(s, r"[0-9]*");
if(m){
s=m.post();
return m.match(0);
}else return "";
}
char[] operador(inout char[]s){
auto m = std.regexp.search(s, r"[*|+]");
if(m){
s=m.post();
return m.match(0);
}else return "";
}
char[] separador(inout char[]s){
auto m = std.regexp.search(s, r"[,]");
if(m){
s=m.post();
return m.match(0);
}else return "";
}
void separaTokens(char[] s){
int i=0;
char[] aux;
while(s.length>0){
aux=numero(s);
//writefln(aux,".,queda:",s);
if(aux=="")
aux=operador(s);
writefln(aux,",queda:",s);
if(i++>10)break;
}
}
//
void main(){
char[] s="2345*56+99*96";
separaTokens(s);
getch();
}
//JAFH Ago 07
import std.conv;
import std.stdio;
import std.string;
import std.regexp;
char[] numero(inout char[]s){
auto m = std.regexp.search(s, r"[0-9]*");
if(m){
s=m.post();
return m.match(0);
}else return "";
}
char[] operador(inout char[]s){
auto m = std.regexp.search(s, r"[*|+]");
if(m){
s=m.post();
return m.match(0);
}else return "";
}
char[] separador(inout char[]s){
auto m = std.regexp.search(s, r"[,]");
if(m){
s=m.post();
return m.match(0);
}else return "";
}
void separaTokens(char[] s){
int i=0;
char[] aux;
while(s.length>0){
aux=numero(s);
//writefln(aux,".,queda:",s);
if(aux=="")
aux=operador(s);
writefln(aux,",queda:",s);
if(i++>10)break;
}
}
//
void main(){
char[] s="2345*56+99*96";
separaTokens(s);
getch();
}
GUI
Para resolver el probelama de la interfaz grafica para programas en D, encontre esta página:
Revisenla ahi dice como instalar la herramienta WxD que les permitirá crear aplicaciones graficas en D.
WxD
Widgets para D. en la página: http://wxd.sourceforge.net/Revisenla ahi dice como instalar la herramienta WxD que les permitirá crear aplicaciones graficas en D.
Nostalgia de C
Aprendi a programar con Fortran y ensamblador mi segundo lenguaje fue C y este último me gusto tanto que solo lo cambie cuando conoci C++, a pesar de que la necesidad me ha llevado a trabajar con otros lenguajes como Java, C#, Object pascal, Basic, Mat-Lab, Clipper, Ruby; siempre extrañe la expresividad de C y la potencia que se puede lograr con el, cosa que queda restringida aun en los lenguajes que heredan su sintaxis (Java, C#). He estado trabajando con Java y Ruby y navegando por ahí encontre el lenguaje D, comence a trabajar con el y encontre todo lo que extrañaba de C y C++ mas las construcciones de los lenguajes modernos como Objetos, For each, el manejo de expresiones regulares de Ruby, el manejo de Arreglos de Java y en fin que me quedo con el, lo unico que extraño es la facilidad con que se programan interfaces visuales en Java, pues en D si bien se puede hacer hay que meterse con llamadas al sistema operativo lo que lo hace un tanto mas complejo, lo del rendimiento podemos decir que es un lenguaje compilado, no trabaja sobre un máquina virtual y puede darnos programas muy eficientes, al generar ejecutables no será tan portable como Java, pero la orientación de este lenguaje es mas bien hacia el código en donde se requiere un alto rendimiento como en sistemas operativos, compiladores etcetera. Un problema con el que me tope es con la escasa documentación existente en Internet
Ejemplo polaca
/////////////////////////////////////////////////////
//ejemplo de conversión de notación infija a postfija
//f1*f2+f3*f4
//donde fi es un número entero
//deberán completarlo para que soporte cualquier expresión
//Yo tambien los quiero, Saludos
/////////////////////////////////////////////////////
import std.conv;
import std.stdio;
import std.string;
import std.regexp;
char[] multiplica(char[]s){
auto m = std.regexp.search(s, r"[0-9]*[*][0-9]*");
if(m){
m = std.regexp.search(s, r"[*]");
return m.pre~","~m.post~","~m.match(0);
}else return "error";
}
char[] suma(char[] s){
writefln("Cadena de entrada:",s);
auto m = std.regexp.search(s, r"[0-9]*[*][0-9]*[+][0-9]*[*][0-9]*");
if(m){
m = std.regexp.search(s, r"[+]");
return multiplica(m.pre)~","~multiplica(m.post)~","~m.match(0);
}else return "No caso";
}
//
void main(){
char[] s="2345*56+99*96";
writefln(suma(s));
getch();
}
//ejemplo de conversión de notación infija a postfija
//f1*f2+f3*f4
//donde fi es un número entero
//deberán completarlo para que soporte cualquier expresión
//Yo tambien los quiero, Saludos
/////////////////////////////////////////////////////
import std.conv;
import std.stdio;
import std.string;
import std.regexp;
char[] multiplica(char[]s){
auto m = std.regexp.search(s, r"[0-9]*[*][0-9]*");
if(m){
m = std.regexp.search(s, r"[*]");
return m.pre~","~m.post~","~m.match(0);
}else return "error";
}
char[] suma(char[] s){
writefln("Cadena de entrada:",s);
auto m = std.regexp.search(s, r"[0-9]*[*][0-9]*[+][0-9]*[*][0-9]*");
if(m){
m = std.regexp.search(s, r"[+]");
return multiplica(m.pre)~","~multiplica(m.post)~","~m.match(0);
}else return "No caso";
}
//
void main(){
char[] s="2345*56+99*96";
writefln(suma(s));
getch();
}
lunes, 8 de octubre de 2007
Ejemplo archivos en D
//////////////////////////////////////////////////////
//ejemplo de crear archivo en D
//usando las bibliotecas de C
//ejecute el código y en el disco creara un archivo a.txt
//revise el archivo creado debe tener la cadena:"hola mundo"
//////////////////////////////////////////////////////
import std.conv;
import std.stdio;
import std.string;
import std.c.stdio;
FILE *fp;
void crearArchivo(){
fp=fopen("a.txt","wb+");
if(!fp) writefln("No se pudo abrir archivo");
}
void escribeCadena(char[] s){
s=chomp(s);
int tam=s.length;
fwrite(cast(char *)s,s.length,1,fp);
}
void main(){
char[] s;
crearArchivo();
escribeCadena("hola mundo");
fclose(fp);
s=readln();
}
//ejemplo de crear archivo en D
//usando las bibliotecas de C
//ejecute el código y en el disco creara un archivo a.txt
//revise el archivo creado debe tener la cadena:"hola mundo"
//////////////////////////////////////////////////////
import std.conv;
import std.stdio;
import std.string;
import std.c.stdio;
FILE *fp;
void crearArchivo(){
fp=fopen("a.txt","wb+");
if(!fp) writefln("No se pudo abrir archivo");
}
void escribeCadena(char[] s){
s=chomp(s);
int tam=s.length;
fwrite(cast(char *)s,s.length,1,fp);
}
void main(){
char[] s;
crearArchivo();
escribeCadena("hola mundo");
fclose(fp);
s=readln();
}
jueves, 4 de octubre de 2007
Ejemplo de conversion de infija a postfija
la idea en la conversión de notación infija a postfija es ver las expresionescomo binarias buscando sumas, si no hay buscamos multiplicaciones, si no haybuscamos potencias, por ejemplo:
6*5^(4+3*6)+5*8^(4*7) buscamos la suma de dos terminos y encontramos
6*5^(4+3*6)
+
5*8^(4*7)
Note que la suma de 4+3 no se ve a este nivel pues esta dentro de un parentesisde aqui que tendremos: termino1, termino2, + asi:
6*5^(4+3*6), 5*8^(4*7), +
Como aun no terminamos ahora buscamos multiplicación:
en:6*5^(4+3*6)
y aparte en:5*8^(4*7)
en el primer caso tenemos:
6
*
5^(4+3*6)
que queda:6,5^(4+3*6),*
y en el segundo
5
*
8^(4*7)que queda:5,8^(4*7),*
y toda la expresion va asi:
6,5^(4+3*6),*,5,8^(4*7),*,+
y asi sucesivamente,
6*5^(4+3*6)+5*8^(4*7) buscamos la suma de dos terminos y encontramos
6*5^(4+3*6)
+
5*8^(4*7)
Note que la suma de 4+3 no se ve a este nivel pues esta dentro de un parentesisde aqui que tendremos: termino1, termino2, + asi:
6*5^(4+3*6), 5*8^(4*7), +
Como aun no terminamos ahora buscamos multiplicación:
en:6*5^(4+3*6)
y aparte en:5*8^(4*7)
en el primer caso tenemos:
6
*
5^(4+3*6)
que queda:6,5^(4+3*6),*
y en el segundo
5
*
8^(4*7)que queda:5,8^(4*7),*
y toda la expresion va asi:
6,5^(4+3*6),*,5,8^(4*7),*,+
y asi sucesivamente,
martes, 2 de octubre de 2007
Ejercicios para convertir a notación postFija
Ejemplos de conversión de expresiones a notación postfija:
infijo: 6*3+8*45
postfijo: 6,3,*,8,45,*,+
infijo: 6*5^(4+3*6)+5*8^(4*7)
postfijo: 6,5,4,3,6,*,+,^,*,5,8,4,7,*,^,*,+
infijo: 123*(12+3)+4*(6+2)
postfijo: 123,12,3,+,*,4,6,2,+,*,+
infijo: 6*3+8*45
postfijo: 6,3,*,8,45,*,+
infijo: 6*5^(4+3*6)+5*8^(4*7)
postfijo: 6,5,4,3,6,*,+,^,*,5,8,4,7,*,^,*,+
infijo: 123*(12+3)+4*(6+2)
postfijo: 123,12,3,+,*,4,6,2,+,*,+
Lenguajes de programación
Probando diferentes lenguajes he comparado las características de C, C++, C gato (Sharp le dicen), Java , Ruby, Pascal, D, Basic, todos tienen diferentes características pero entre ellos destacan D, Java y Ruby son a mi parecer los mas importantes y los que mayor futuro tienen, el C es un lenguaje que me gustra mucho, pero su funncionalidad y capacidades se pueden cubrir con D, Ruby es un lenguaje conciso y atractivo pero aun es jove, Java tiene muchas bibliotecas y es un lenguaje maduro.
martes, 4 de septiembre de 2007
Sobre las frases usadas por los mexicanos. Recien este mes escucho algunos en la radio Local de Campeche y tienen errores, este por ejempo:
"yo no vengo a vere si puedo si no por que puedo vengo"
lo dicen mal "yo no vengo por que puedo si no por que puedo vengo" deberian multarlos por destruir nuestra cultura.
En puebla el dicho: "las veredas quitaran pero la querencia cuando" lo transmitian asi:
"los caminos quitaran pero las veredas cuando"
"yo no vengo a vere si puedo si no por que puedo vengo"
lo dicen mal "yo no vengo por que puedo si no por que puedo vengo" deberian multarlos por destruir nuestra cultura.
En puebla el dicho: "las veredas quitaran pero la querencia cuando" lo transmitian asi:
"los caminos quitaran pero las veredas cuando"
Inicio
Bienvenidos a mi blog, me estoy adaptando a etse concepto, pero espero poder usarlo en mis cursos en la UNACAR
Suscribirse a:
Entradas (Atom)