Evaluador de expresiones aritmeticas (Java)

12 12 2008

Ya he elaborado la version 2 de este evaluador de expresiones.

Ups!! Hola!!, despues de una larga ausencia aqui estoy de nuevo reportandome, ya saben la vida como estudiante limita muchas cosas, pero ya esta por finalizar este semetre por no decir que ya “finalizo”.

evaluadorExpresiones

Esta vez quiero compartir con ustedes uno de mis pequeños proyectos de Programacion, un evaluador de expreciones aritmeticas que es capaz realizar suma, resta, multiplicacion, divicion, potencia y modulo, con sus respectivo orden de prioridad asignado por los operabdos o por parentesis.

Leer el resto de esta entrada »





Codigo para buscar palabras reservadas de C en archivos

14 06 2008

Un algoritmo mas para este blog, espero que a alguien le sea de utilidad.

Todo empezo cuando nuestro maestro de “Teoria de la computacion” dejo como “tarea” hacer un algoritmo que fuese capas de identificar palabras reservedas del lenguaje c en archivos de texto plano, codificarlo y generar el ejecutable que hiciera el mencionado trabajo.

Usando la funcion read(), la cual lee un flujo de bytes, hace que este programa encuentre las palabras reservadas en cualquier secuencia de bytes que cumplan con el patron de alguna palabra reservada de el lenguaje C.

Como se podran dar cuenta haciendo unas pequeñas modificaciones, podremos encontrar cualquier secuencia de bytes que se especifique.

Bueno hay se los dejo, si hay algun comentario al respecto, solo comentalo, espero que sea constructivo.:)

/************************************************************
*
* ALUMNO: Fredy Ramirez Guzman
* MATERIA: Teoria de la computacion
* PROGRAMA: busc.c -> Encuentra palabras reservadas del
* -> lenguaje c en un archivo.
*
************************************************************/
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
main(int argc, char *argv[]){
<ul>char pal[37][10]={"auto", "break", "case", "char",
"const", "continue", "default", "do",
"double", "else", "enum", "extern",
"float", "for", "goto", "if",
"int", "long", "register", "return",
"short", "signed", "sizeof", "static",
"struct", "switch", "typedef", "union",
"unsigned", "void", "volatile", "while",
"include"};
char arr[15]={0};
char buffer[2]={0};
int df, x, i,contador=0;
df = open(argv[1], O_RDONLY);
if(df==-1){</ul>
printf("\nNo se encontro el archivo: %s\n", argv[1]);
}
else{
printf("\n\n -- Archivo: %s --\n", argv[1]);
printf(" -- Palabras reservadas que contiene --\n\n");
while((x = read(df, buffer, 1))!=0){
if(buffer[0]=='a' || buffer[0]=='b' || buffer[0]=='c' ||
buffer[0]=='d' || buffer[0]=='e' || buffer[0]=='f' ||
buffer[0]=='g' || buffer[0]=='h' || buffer[0]=='i' ||
buffer[0]=='k' || buffer[0]=='l' || buffer[0]=='m' ||
buffer[0]=='n' || buffer[0]=='o' || buffer[0]=='p' ||
buffer[0]=='r' || buffer[0]=='s' || buffer[0]=='t' ||
buffer[0]=='u' || buffer[0]=='v' || buffer[0]=='w' ||
buffer[0]=='x' || buffer[0]=='y' || buffer[0]=='z' ){
strcat(arr, buffer);
}
else{
if(strlen(arr)>=2 && strlen(arr)<=8){
for(i=0; i<37; i++){
if(strcmp(arr, pal[i])==0){
printf(" %s\n", arr);
contador++;
}
}
}
arr[0]='';//entre las comillas simples coloca el caracter de
}/*"fin de cadena" (diagonal invertida seguida de un cero) por alguna razon wordpress lo elimina.*/
}//De lo contrario el programa no funcionara...
printf("\n %d palabras reservadas escritas en el archivo.\n\n",
contador);
}
}//fin de programa busc.c

Por cierto, este programa lo llame “busc.c“; para compilarlo y ejecutarlo:
$ gcc busc.c -o busc
$ ./busc [nombre_de_archivo].[extencion]

Saludos…

Entradas de interes:





Decimal a Romano

3 05 2008

Lista la version para celular click aqui.

Tal vez este post paresca algo egocentrico, pero esta aqui por que cuando se logra algo se siente una gran satisfaccion que se desea compartir…

Navegando por la red me encontre con este programa: Decimal-a-Romanos-1.2.1 . Y algunas otras paginas de algoritmos que se encargan de pasar un numero decimal a su equivalente numero romano, pero pues me parecian algo complejos y decidi escribir el programa en C++ empezando desde cero y aqui lo tienen.

// Fecha: 02 de Mayo del 2008 Ultima compilcion a las 8:38 pm
// Fredy Ramirez Guzman Programa: decimal_romano.cpp
#include <iostream>
using namespace std;
void calcularCifraRomana(int num, char a, char b, char c){
int j;
if(num==9)
cout<< a << c;
else{
if(num>4){
cout<< b;
for(j=1; j<=num-5; j++)
cout<< a;
}
else{
if(num==4)
cout<< a << b;
else{
for(j=1; j<=num; j++)
cout<< a;
}
}
}
}
int main(){
int n, r, digito;
do{
system(
"cls");
cout<<
"\n Transformo numeros decimales del 0 al 3000 en su equivalente numero Romano";
cout<<
"\n Autor: Fredy Ramirez Guzman\tPrograma: decimal_romano.cpp\n\n\n";
cout<<
"\tNumero Decimal: ";
cin>>n;
}
while(n<0 || n>3000);
cout<<
"\n\tNumero romano: ";
r=n;
digito=r/
1000;
r=r%
1000;
calcularCifraRomana(digito, 'M', ' ', ' ');
digito=r/
100;
r=r%
100;
calcularCifraRomana(digito, 'C', 'D', 'M');
digito=r/
10;
r=r%
10;
calcularCifraRomana(digito, 'X', 'L', 'C');
digito=r;
calcularCifraRomana(digito, 'I', 'V', 'X');
cout<<endl <<endl;
system(
"pause");
return 0;
}


Se que no soy un gran programador pero agrada programar y trato de resolver algunos pequeños problemas que me encuentro en la red, como este, tratare de escribirlo con J2ME para tenerlo en mi celular, :)

Saludos!!!.

PD: Si alguien encuentra un codigo con el mismo algoritmo, tiene alguna mejor sugerencia o duda, la espero en algun comentario.