Showing posts with label Tareas. Show all posts
Showing posts with label Tareas. Show all posts

De C a HTML con Flex (como Norman manda)

Ya hace unos días les había hablado de flex y la práctica que teníamos que hacer. Bien, resulta que apenas se entrega. Y no es como inicialmente la había hecho:

Lo que había hecho fue de manera individual y esta que subo hoy es en equipo (Mi equipo: Byron, Gaby y Robert).
Las funciones que escriben el archivo html están por separado. Para mejor explicación visita el post anterior.

Descargas
PracticaC2HTML.tar.gz
PracticaC2HTML.zip


¡Saludos!
@fferegrino :)

De C a HTML con Flex

De nuevo por acá, esta vez gracias a otra de mis asignaturas en la ESCOM. Toca el turno a Teoría computacional, fue el turno de usar Flex, herramienta que en lo particular no conocía. Lo que teníamos que hacer era usar Flex para escribir un programa que de un archivo con código en lenguaje C nos lo "transfiriera" a un archivo con formato html estilizado con CSS.

La idea era encontrar palabras reservadas, tipos de datos, identificadores, directivas, operadores, y cualquier otro tipo de cadenas permitidas con el analizador léxico y asignarles cierto estilo en un documento html. 

Trato de explicar gráficamente: la imagen de la izquierda es código en C, después de introducir este archivo en el programita nos debe entregar algo como la captura derecha, que es un na representación estilizada con CSS del archivo que introdujimos.



¿Qué es Flex?
Resulta que Flex, en términos prácticos (Wikipediazo), es un programa para generar analizadores léxicos. Uno mete la especificación de un analizador léxico y Flex regresa como salida la implementación en C de lo que nosotros introdujimos. En realidad es muy sencillo utilizarlo, solo hay que tener en cuenta la estructura del archivo que vamos a usar como entrada al programa, esta es sencilla y muy fácil de recordar, un archivo "lex", se divida en tres secciones (separadas por líneas que solo contienen '%%' como texto en ellas). Las líneas son:
1.- Sección de declaraciones
Lugar para incluir cabeceras, macros, variables globales... también es posible definir patrones a usar en la sección de reglas
%%
2.- Sección de reglas
Aquí es donde se asocian los patrones(expresiones regulares) a buscar con sentencias(código) de C. Cada vez que el analizador encuentra un a cadena que coincide con el patrón, se ejecuta el código en C
%%
3.- Sección de código en C
Contiene sentencias en C y funciones que serán copiadas íntegramente en el archivo que Felx genere, comúnmente se colocan aquí las funciones que se llamarán en la sección de reglas.

Descargas
Al compilar el programa en Flex nos devuelve un código compilable pero ahora en lenguaje C, el cual ya debería de hacer lo que nosotros le indicamos. En el descargable básico viene el archivo cToHtml.l que es el archivo en lenguaje Lex, el archivo de estilos estilos.css que es la hoja de estilos que se usa para formatear el documento de salida y el archivo Makefile que nos facilita la compilación y el archivo Leeme.txt PARA QUE LO LEAN, en donde viene como se usa el programa final. En el descargable completo, viene, además de lo indicado arriba, el archivo lex.yy.c que es el código que se genera al compilar en Flex y el archivo salida.html que es un ejemplo de lo que entrega nuestro programa si hacemos pasar por el a lex.yy.c.

Recuerda que para cualquier duda, comentario o invitación a una cerveza, está la sección de comentarios, mi cuenta en Twitter o mi correo. 

¡Saludos! @fferegrino :)

Investigación sobre la inflación

Esta es la investigación que realizamos entre un compañero (Rodrigo) y yo acerca de la inflación, todo esto para la clase de Fundamentos Económicos en la ESCOM.

Tomamos como base la siguiente tabla de contenidos:
  • Conceptos básicos. 
  • Teorías sobre la inflación. 
  • Índices de precios. 
  • Medición de la inflación.
  • Efectos de la inflación. 
  • ¿Cómo combatir la inflación? 
  • La hiperinflación a fondo.
  • Casos históricos. 
  • La inflación en México. 

Dejo aquí el material que preparamos para el grupo:

Extenso(Documento escrito)
Presentación
Resumen

¡Saludos!
@fferegrino :)

Chuirer

Pues así es como he decidido nombrar (para mi y mis conocidos, sin permiso del resto de mi equipo) a la aplicación en la que estaré trabajando durante lo que resta del semestre.

Chuirer

Resulta que para la clase de Tecnologías para la Web, se nos dió a elegir entre diversos proyectos a implementar para obtener calificación del semestre. Entre las propuestas que nos presentó el maestro estaban unas muy interesantes como crear un editor de textos en la nube, crear un foro de discusión orientado a la educación, desarrollar un sistema de almacenamiento de marcadores, crear una red social tipo Facebook y otra tipo Twitter. A esta última es a la que decidí dedicarme junto con el resto de mi equipo, somos 4 integrantes ;).

Todo iría "normal" hasta el momento en el que se nos informó que no debíamos usar ningún sistema gestor de bases de datos, como MySQL, SQL Server o PostgreSQL. Todo el almacenaje persistente debería de ser en archvos xml.

:S Ahora tengo a en que se irán mis madrugadas, se ve que estará un poco pesado.

De mientras y para no perderse en el tema, econtré dos puntos de partida:

¡Saludos!
@fferegrino :)

Generador de slideshow básico con XML y Flash

De nuevo, y para no variar tarea de Tecnologías para la Web, esta vez correspondió hacer un servlet que se valiera de una película hecha en flash para presentar imágenes que el usuario elige.
El proceso es el siguiente:

  1. Mediante la interfaz se le solicita al usuario el número de imágenes que desea en su presentación
  2. Se crean los campos correspondientes al número de imágenes, para que el usuario suba sus archivos
  3. Ya dentro del servlet se leen las descripciones y se guardan en una lista
  4. Se obtiene el ID de la sesión actual para crear una carpeta única en el servidor que alojará los archivos necesarios para la presentación
  5. Posteriormente se suben las imágenes al directorio creado, al tiempo que se crea una etiqueta de XML por cada imagen, al cual se le añaden los atributos de descripción que guardamos en la lista en el paso anterior y la url en la que el servlet las guardó
  6. Una vez que las imágenes han sido cargadas, se procede a guardar el documento XML dentro del directorio creado para el cliente y a copiar el archivo SWF dentro de la misma carpeta
  7. Una vez que llegamos a este paso, ya está listo para ser devuelto al cliente para lo cual se comprime la carpeta completa
  8. Y se reenvía al cliente una vez comprimida
  9. El cliente disfruta de su presentación para la cual solo tuvo que subir imágenes :D

En resumen, lo que se hace es implementar la subida de archivos al servidor para lo cual se usan las librerías de Apache Commons(IO y FileUpload), se crea un documento XML para lo cual se usa la librería JDOM, de la cual ya tengo tiempo escribiendo cosas y utilizo una clase llamada SimpleZip para comprimir el archivo, la cual viene incluida.

Más detalles y código en el resto de la entrada

Tareas Teóricas de Tecnologías para la Web

Esta noche les traigo mis tareas teóricas de la asignatura Tecnologías para la Web, aclaro que no son nada buenas, aún me falta mucho para aprender a redactar bien pero... ¿qué le vamos a hacer?

Prometo de a poco ir mejorando en la redacción.

Incluídas en el súper paquete:

  1. Conceptos básicos de la web
  2. Historia del internet y la www
  3. Estándares de la web
  4. La Web 2.0
  5. Entornos de desarrollo
  6. Historia y diferencias entre navegadores
  7. Historia de XHTML
  8. Diferencias entre HTML y XHTML

Si las quieren en paquete aquí las dejo:

Tareas teóricas

¡Saludos! @fferegrino :)

El sexenio de López Portillo



Interesante documental sobre el sexenio de López Portillo "El Perro" (LOL), memorables las frases que lo hicieron más famoso, entre ellas:
"Soy responsable del timón, pero no de la tormenta" De la clase de Fundamentos Económicos.

Por cierto, preparé un intento de reporte que aquí dejo:
El sexenio de López Portillo

 ¡Saludos! @fferegrino :)

Practica 1 Bases de datos (:S)

Hola de nuevo, regresa el sinuoso trajín de la escuela y con el las prácticas y los proyectos.

Esta es mi implementación de una práctica "sencilla" de la asignatura Base de Datos, se trata de idear como vincular dos clases: Alumnos y Materias, esto de la forma que me mejor nos diera a entender Dios o nuestros conocimientos previos.

Hubieron varias sugerencias por parte del profesor pero yo me decanté por la que me pareció más sencilla; que es el uso de arreglos dentro de la clase principal para gestionar los objetos, vinculando cada materia con los alumnos que la cursan, también mediante el uso de un vector.

Una implementación vaga, pero que espero entiendas si lo bajas, cualquier duda por aquí o si tienes la desgracia de tenerme agregado en alguna red social o servicio de mensajería por ahí puedes preguntar.

Archivo:

Si me quieres comprar una cerveza, por favor que sea una indio xD

¡Saludos! @fferegrino :)

Planificador

El planificador (o scheduler en inglés) es un componente funcional muy importante de los sistemas operativos multitarea y multiproceso, y es esencial en los sistemas operativos de tiempo real. Su función consiste en repartir el tiempo disponible de un microprocesador entre todos los procesos que están disponibles para su ejecución.~Wikipedia

Como parte de un trabajo escolar formamos equipos para realizar el algoritmo de un planificador para posteriormente programar su funcionamiento, el lenguaje elegido para hacerlo fue JAVA , en el se usan muchas de las características de este lenguaje. La política elegida fue la de colas multinivel retroalimentadas, usando FCFS y Round Robin para ejecutar los procesos entre colas.

Aquí los archivos, dentro viene todo lo necesario para echar a andar el planificador.


Gracias a mi equipo:

Rodrigo Benavides
Luis Dávila

¡Saludos! @fferegrino |:)

Fomentando el cuidado al ambiente

Como parte de una actividad para la materia Desarrollo Sustentable, hicimos cuatro propuestas de carteles para fomentar el cuidado al ambiente, pero solo dos fueron llevadas a cabo:



Descárgalo Cartel







Gracias al equipo... equipo de la muerte ;)

¡Saludos! @fferegrino |:|

Agendas 21 Locales


Como parte de un trabajo de la escuela tuvimos que realizar investigación y con base en esta una presentación acerca de las Agendas 21 Locales, y decidimos hacerla sobre 2 casos en específico: Palencia, España; Ensenada, México.

Después del salto las presentaciones.
Agradecimientos a mi equipo ;)

Banco - Aplicación con colas (B)

También para linux

Igual requiere de: pilas.h y pilas.c que encuentras en en la entrada anterior.

/* 
 * Archivo:   Banco.c
 * Autores: Rodrigo y Antonio
 *
 * Creado el 17 de febrero de 2011, 09:30 PM
 */

#include "colas.h"

int main() {

    cola *Fila_Banco = crear_c();//Creamos una nueva pila
    int tiempo_espera = 0;//Esta variable controlará el tiempo de espera.
    int menu = 0;//Variable para el menu principal
    do{
        printf("Banco Bonito :D\n");
        printf("Menú de administrador:\n\t1)Llegada de cliente\n\t2)Salida de cliente\n\t3)Salir\n");
        printf("Elige: ");
        scanf("%d",&menu);
        switch(menu)//Opciones de administrador
        {
            case 1://Recibimos al cliente
                printf("\n\n\n\tNuevo cliente\n");
                tipodato nuevo_cliente;//Creamos una nueva estructura
                printf("Introduce el nombre del cliente: ");
                getchar();//Evitar retorno de carro, Linux ;)
                nuevo_cliente.nombre =(char *) calloc(51,sizeof(char));//Reservar memoria para el nombre del cliente
                gets(nuevo_cliente.nombre);//Obtener el nombre del cliente
                int tiempo_operaciones = 0;//Aquí se guardará el tiempo de operaciones del nuevo cliente
                int submenu = 0;//Variable para el submenu
                do{
                    printf("\nElija la(s) operacion(es) que %s realizará:\n",nuevo_cliente.nombre);
                    printf("\t1)Depósito\n\t2)Retiro\n\t3)Cobro de cheques\n\t4)Depósito a terceros\n\t5)Consulta de saldo\n\t6)Nada");
                    printf("\nElige: ");
                    scanf("%d",&submenu);
                    switch(submenu)//Se acumula el tiempo de operaciones del nuevo cliente
                    {
                        case 1: tiempo_operaciones += 5; break;
                        case 2: tiempo_operaciones += 6; break;
                        case 3: tiempo_operaciones += 8; break;
                        case 4: tiempo_operaciones += 4; break;
                        case 5: tiempo_operaciones += 2; break;
                        default: break;
                    }
                }while(submenu != 6);
                nuevo_cliente.tiempo = tiempo_operaciones;//Se guarda en la estructura el tiempo total de operaciones de el cliente nuevo
                if(introducir_c(nuevo_cliente,Fila_Banco))
                {
                    printf("\n\n\t%s está formado y va a esperar %d minutos para ser atendido\n\n",nuevo_cliente.nombre,tiempo_espera);//Desplegar información
                }
                tiempo_espera += tiempo_operaciones;//Se suma el tiempo de operaciones al tiempo de espera global
                break;
            case 2://Atendemos al cliente
                if(vacia_c(Fila_Banco))//Si la cola está vacía
                {
                    printf("\t\nLa fila está vacía, ya atendiste a todos tus clientes... o nunca has tenido clientes  :P\n");
                }
                else
                {
                    tipodato cliente_atendido = sacar_c(Fila_Banco);//Se saca el cliente de la cola
                    if(!(cliente_atendido.nombre == NULL)){
                        printf("\t\nWoha! se ha atendido a %s\n", cliente_atendido.nombre);
                        tiempo_espera -= cliente_atendido.tiempo;//Un cliente sacado de la cola es un cliente atendido, se resta su tiempo de atención al tiempo global de espera
                    }
                }
                break;
            case 3: break;
            default: break;
        }
    }while(menu != 3);
    return (EXIT_SUCCESS);
}

¡Saludos! @fferegrino :)

Banco - Aplicación con colas.

Para Windows

Requerimos el uso de las funciones básicas de colas, que están en estos links: colas.h colas.c Código fuente:
/* 
 * File:   main.cpp
 * Author: Rodrigo y ToñoGates
 */

#include 
#include "colas.h"

void imprimemenu();
void menu_transacciones();
int calcular_tiempo(int []);
int tiempo_espera(Cola *c);

int main(int argc, char** argv) {
char ch;
int num=0;
//clrscr();
printf("\n\t\t\t Toño&Rod´s Bank \n\n\n ¿Deseas hacer una Cola de clientes? S/N\n");
scanf("%c",&ch);
    if((ch == 'N')||(ch == 'n')){
        printf("Salgo del programa\n");
        return (EXIT_SUCCESS);
    }
int t_espera=0;
 int i=0;

int trans[10]={0};
Cola *c;
c=crear();
TipoDato p1;
p1.nombre=(char *)calloc(100,sizeof(char));
do{
    imprimemenu();
    scanf("%d",&num);
    switch (num)
    {
     case 1:
  i=0;
                printf("\n\tNombre:");
                getchar();
                gets(p1.nombre);
                printf("\n\n\tTransaccion(es)a realizar(10 max):");
                do{
                 menu_transacciones();
                 scanf("%d",&trans[i]);
   printf("\n¿Desea realizar otra transacción? S/N");
                 getchar();
                 scanf("%c",&ch);
                     if((ch == 'N')||(ch == 'n')){
                         printf("Listo");
                         num=7;
                     }else i++;
                }while(num!=7);
                t_espera=tiempo_espera(c);
                printf("\nFaltan %d",t_espera);
                printf(" minutos.");
                p1.tiempo=calcular_tiempo(trans);
                if(insertar(c,p1))
                 printf("\n\n\nCliente introducido con éxito");
                else 
                    printf("\n\n\nLo sentimos tu Cliente no se pudo insertar...");
                break;
            case 2:
                if(vacia(c)) printf("\nLa Cola esta vacía. \n");
                else{
                 printf("\nAtendiendo a ...");
                 TipoDato dat=eliminar(c);
                 printf("\n %s",dat.nombre);
                }
                break;
            case 3:
                if(vacia(c)) printf("\nCola vacía");
                else{
                 printf("\nEstos son tus clientes en espera...\n");
                 mostrar(c);
                }
                break;
     }
  }while (num!=4);
  return EXIT_SUCCESS;
}
Las funciones básicas son desarrolladas:
int calcular_tiempo(int trans[]){
    int t,suma=0;
    for(int i=0;i<11;i++){
        switch(trans[i]){
            case 1: t=5; break;
            case 2: t=6; break;
            case 3: t=8; break;
            case 4: t=4; break;
            case 5: t=2; break;
            default: t=0; break;
 }
        suma=suma+t;
    }
    return suma;
};

int tiempo_espera(Cola *c){
    int suma=0;
    Nodo  *aux=c->frente;
        while(aux!=NULL){
            suma+=aux->dato.tiempo;
            aux=aux->atras;
        }
 return suma;
};
¡Saludos! @fferegrino :)

Infijo => Postfijo

Hacer un programa en C que mediante el uso de pilas, transforme una expresión infija a una postfija, nada complicado(en teoría).

Requiere el uso de estos 2 archivos:

pilas.h
pilas.c

Algoritmo y código:
/* 
* Archivo: main.c
* Autores: Antonio Feregrino y Rodrigo Benavides
*
* Creado el 14 de febrero de 2011, 08:22 PM
*/

#include "pilas.h"

int comprobar(char);
int precedencia(char);

/*
* 
*/
int main() {
char primera_expresion[50];//Cadena inicial
char *cadenita_auxiliar = calloc(50+1,sizeof(char));//Cadena final
pila *operadores = crear();//Se crea la pila de los operadores
printf("Introduce la expresión a convertir: \n\n");
gets(primera_expresion);//Se lee la expresion principal
int i = 0, i_cadenita = 0;//Variables usadas para recorrer los arreglos de caracteres
while(primera_expresion[i] != '\0'){//Mientras que la expresión principal no se termine

switch(comprobar(primera_expresion[i])){//Comprobación del tipo de caracter 1 a 1
case 1://En este caso el caracter es un parentesis de apertura (
push(primera_expresion[i],operadores);
break;
case 2://En este caso el caracter es un parentesis de cierre )
while(muestra_ultimo(operadores) != '('){//Mientras que el último elemento de la pila no sea (
cadenita_auxiliar[i_cadenita] = pop(operadores);//Saca los operadores de la pila y colocalos en la cadena final
i_cadenita++;//Aumenta el índice de la cadena final para no sobreescribirla
}
pop(operadores);//Saca el paréntesis de apertura (
break;
case 3://En este caso el caracter es un operando [a-zA-Z0-9]
cadenita_auxiliar[i_cadenita] = primera_expresion[i];//Se introdue directamente a la cadena final
i_cadenita++;//Aumenta el índice de la cadena final para no sobreescribirla
break;
case 4://En este cuarto y último caso, el caracter es un operador [+-/%^]
if(vacia(operadores)){//Si la pila esta vacía
push(primera_expresion[i],operadores);//Introduce el operador
}else{//Si no está vacía
int operador_nv = precedencia(primera_expresion[i]);//Se calcula la precedencia del caracter a evaluar
int operador_ol = precedencia(muestra_ultimo(operadores));//Se calcula la precedencia de la cima
if( operador_nv > operador_ol)//Si la precedencia del nuevo es mayor a la de la cima
{
push(primera_expresion[i],operadores);//Introduce el operador
}
else//Si es menor o igual
{
do{
cadenita_auxiliar[i_cadenita] = pop(operadores);//Saca la cima e introducela en la cadena final
i_cadenita++;//Aumenta el índice de la cadena final para no sobreescribirla
operador_ol = precedencia(muestra_ultimo(operadores));//Calcula la precedencia de la nueva cima
}while(!(operador_nv > operador_ol));//Repite esto hasta que la precedencia del nuevo sea mayor a la de la cima
push(primera_expresion[i],operadores);//Introduce el nuevo operador en la cima de la pila
}
}
break;

}
i++;//Recorre en uno el índice de la expresión inicial
} 
printf("Tu expresión postfija es: %s\n",cadenita_auxiliar);//Muestra la cadena final
return (EXIT_SUCCESS);
}

int comprobar(char t){
/* Función que comprueba que caracter es, regresa valores enteros segun sea el caso */
if( t == '(' ) return 1;
if( t == ')' ) return 2;
if(( t <= 90 && t >=65 ) || ( t <= 122 && t >= 97 ) || ( t <= 57 && t >=48 )) return 3;
if( t == '*' || t == '+' || t == '^' || t == '/' || t == '-') return 4;
else return 0;
}

int precedencia(char t){
/* Aquí es calculada la precedencia personalizada de los operadores */
if( t == '^' ) return 3;
if( t == '*' || t == '/' || t == '%' ) return 2;
if( t == '+' || t == '-' ) return 1;
if( t == '(' || t == ')' ) return 0;
else return 0;
}



No es el mejor algoritmo pero es lo más que pudimos hacer mi compañero y amigo @frescasandia y yo.


Igual no se si esté permitido por la profesora @bellims hacer esto ;$

¡No al plagio!

¡Saludos! @fferegrino :)

Mis tareas.

Ahora comparto también con Scribd, de ahora en adelante procuraré subir tantas tareas, ensayos, mapas y cuanta cosa se les ocurra pedir a los profesores, este es mi perfil en

Link: http://www.scribd.com/antonio_bola%C3%B1os_2

¡Saludos! @fferegrino :)

La primera pantalla LED solar nos llega de Bulgaria.

Quién nos iba a decir que la primera pantalla LED totalmente autónoma y que no necesita conectarse a la corriente eléctrica, nos iba a llegar de Bulgaria. Pues sí niños, en esta vida no se puede dar nada por sentado y como podéis ver, la última revolución ecológica no llega de Japón, sino de la vieja Europa.

Ha sido la compañía búlgara Megatex, la que ha presentado la primera pantalla LED que cuenta con su propio panel solar para autoabastecerse de la energía necesaria para su funcionamiento. Estamos hablando de un panel de 5Kw, cantidad más que suficiente para hacer funcionar la pantalla sin el más mínimo problema.

Pensada para su utilización en exteriores, estamos ante el equipo idea para montar videowalls al mínimo coste, así como señalización en carreteras o áreas donde el acceso a una fuente de corriente es más que dificultosa. Ya era hora de que apareciese un producto como este. Con las continuas subidas de la luz, más de uno ya se estará pensando en comprar un equipo de estos…


Opinión:

Todos sabíamos que era cuestión de tiempo para que sucediera esto, la tendencia y hasta cierto punto moda, es hacer cosas libres de consumo de energías no renovables y ni hablar de las posibilidades que eso supone para la el desarrollo de otras aplicaciones. Lo sorprendente en este caso es de donde llega la innovación estamos comúnmente acostumbrados a que este tipo de tecnologías lleguen de países conocidos por su gran avance en cuanto a estos temas se refiere.

Gracias a que detrás de esta innovación hay una gran empresa espero que se comercialice pronto y a un costo más o menos bajo, después de todo toda innovación conlleva un gasto, pero una gran satisfacción también.



Link al documento (no al plagio)

¡Saludos! @fferegrino :D

De regreso a UPIITA

Con mi regreso a la Unidad, regresan las tareas, que algunas, para desestresarme y descargar mi frustración iré subiendo aquí.

Por lo pronto se me ocurre una nueva sección que nada más acabar todos mis deberes subiré al blog.

¡Saludos! @fferegrino :)