lunes, 1 de junio de 2015
domingo, 24 de mayo de 2015
Código en c++ de pila
#include <iostream>
#include <string.h>
#include <iomanip>
#include <stdlib.h>
#include <fstream>
using namespace std;
int comparacion(string [],string,int );
FILE *doc;
int main(int argc, char** argv) {
ifstream
reglas("reglasproduccion.txt");
if(!reglas){
cerr<<"No
se pudo abrir archivo";
exit(0);
}
ofstream
salida("terminales.txt");
if(!salida){
cerr<<"No
se pudo abrir archivo";
exit(0);
}
char
reg1[50];
string
cadena,temporal,produccion[10],pila,m,ent,esp("\n"),S("1");
int
flecha,s,i=0,b=0;
while(!reglas.eof()){
doc=fopen("terminales.txt","a+");
reglas.getline(reg1,50);
cadena=reg1;
temporal=cadena;
flecha=cadena.find("-->");
if(flecha<=1000
&& flecha>=0){
pila+=reg1+esp;
temporal.erase(0,flecha+3);
produccion[i]=temporal;
salida<<temporal;
i++;
b++;
}
else{
}
}
int
ss,u;
u:
cout<<"\t\t\t\tREALIZADO
POR"<<endl;
cout<<"\t\t\tALBERTO
ALEXIS ALVA MARTINEZ"<<endl;
cout<<"\t\t\tCARLOS
LOPEZ IBARRA\n"<<endl;
cout<<"\n\n----------------------------------------Pila------------------------------------"<<pila;
cout<<"--------------------------------------------------------------------------------";
cout<<"\n\t\tpresione
[1] en caso de que quiera Salir del programa\n"<<endl;
cout<<"\t\t\tA)Ingresa
cadena a evaluar"<<endl;
cin>>ent;
if(ent.compare(S)==0){
goto
ss;
}
s=comparacion(produccion,ent,b);
if(s==9){
cout<<"Cadena
aceptada!!\n\n\t";
goto
u;
}
else{
cout<<"Cadena
no valida\n\n\t";
goto
u;
}
ss:
return
0;
}
int comparacion(string a[],string b,int c){
for(int
i=0;i<c;i++){
if(a[i].compare(b)==0){
return
9;
}
}
return -1;
}
PANTALLA DE SALIDA
Este programa realiza la separacion de las reglas de producción por la izquierda y derecha y su alfabeto.
Leer más
#include <iostream>
#include <cstdlib>
#include <fstream>
void producciones();
FILE *doc;
using namespace std;
int buscar (string v, string salida);
int buscar2 (string v, string salida);
int main(int argc, char** argv) {
cout<<"\t\t\t\tREALIZADO
POR"<<endl;
cout<<"\t\t\tALBERTO
ALEXIS ALVA MARTINEZ"<<endl;
cout<<"\t\t\tCARLOS
LOPEZ IBARRA\n"<<endl;
cout<<endl;
producciones();
return 0;
}
int buscar (string v, string salida){
for(int
i=0;i<salida.length();i++){
if(v.compare(salida.substr(i,1))==0){
return -1;
}
}
return 0;
}
void producciones(){
ifstream
letras("let.txt");
ifstream
produccion("reglasdeproduccion.txt");
ofstream
salidaderecha("produccionesderecha.txt");
ofstream
salidaizquierdo("produccionesizquierda.txt");
ofstream
alfabetoprodu("alfabetoproducciones.txt");
char renglon3[200],r[100];
string cad3,
alfabeto3("");
string cadena1;
letras.getline(r,100);
cadena1=r;
string esp("
"),ladoizquierdo(""),temp,de(""),temp2;
int simb,rango;
while(!produccion.eof()){
doc=fopen("produccionesizquierda.txt","a+");
produccion.getline(renglon3,200);
cad3=renglon3;
temp2.assign(cad3);
temp.assign(cad3);
simb=cad3.find("-->");
if(simb<=1000
&& simb>=0){
rango=cad3.length()-(simb);
temp2.erase(0,simb+3);
temp.erase(simb,rango);
ladoizquierdo+=temp+esp;
de+=temp2+esp;
}
}
cout<<"reglas de
produccion por la izquierda\n\n"<<ladoizquierdo;
cout<<"\n\nreglas
de produccion por la derecha\n\n"<<de;
salidaizquierdo<<ladoizquierdo;
doc=fopen("produccionesderecha.txt","a+");
salidaderecha<<de;
cout<<endl;
for(int i=0;i<
cadena1.length(); i++){
for(int j=0;j<
de.length(); j++) {
if(cadena1.substr(i,1).compare(de.substr(j,1)
)==0){
if(buscar(cadena1.substr(i,1),alfabeto3
)==0){
alfabeto3+=de.substr(j,1)
;
}
}
}
}
cout<<"\n\ngramatica
de las producciones\n\n"<<alfabeto3;
doc=fopen("alfabetoproducciones.txt","a+");
alfabetoprodu<<alfabeto3;
cout<<endl;
system("PAUSE");
}
PANTALLA DE SALIDA
Este programa hace que solo seleccione la parte izquierda de una
regla de producción utilizado archivos de texto.
Código implementado en c++
#include <iostream>
#include <string>
#include <stdlib.h>
#include <iomanip>
#include <fstream>
FILE *doc;
using namespace std;
void recuperarDeArchivo();
void insertar(char *,char *,char *,int pos);
void mosDatos();
const int num=1000;
struct pj{
char no[100];
char ori[100];
char de[100];
};
pj pas[num];
int main(int argc, char** argv) {
string nox[100];
recuperarDeArchivo();
mosDatos ();
}
void recuperarDeArchivo(){
ifstream
lecturaArchivo("producciones.txt", ios::in);// aqui es donde estan almacenadas las producciones.
if(!lecturaArchivo){
cerr<<"No
se pudo abrir el archivo"<<endl;
exit(1);
}
char nox[100];
char orix[100];
char dex[100];
int i=0;
while(lecturaArchivo>>nox>>orix>>dex){
insertar(nox,orix,dex,i);
i++;
}
}
void insertar(char *nx,char *ox,char *dx, int pos){
if(pos==-1){
cout<<"Ya
no hay lugar"<<endl;
return;
}
strcpy
(pas[pos].no, nx);
}
void mosDatos(){
ofstream
salidaArchivo("salidaa.txt", ios::out);// aqui se guarda la parte izquierda de la regla
if(!salidaArchivo){
cerr<<"No
se pudo abrir el archivo"<<endl;
exit(1);
}
cout<<endl;
cout<<"\t\t\t\tREALIZADO
POR:"<<endl;
cout<<"\t\t\tALBERTO
ALEXIS ALVA MARTINEZ"<<endl;
cout<<"\t\t\tCARLOS
LOPEZ IBARRA\n"<<endl;
cout<<setw(1)<<"REGLAS
DE PRODUCCION: "<<endl;
for(int i=0;
i<num;i++){
if(strcmp(pas[i].no,"")!=0){
cout<<"\n"<<setw(1)<<pas[i].no<<endl;
salidaArchivo<<"\n"<<pas[i].no<<endl;
}
}
}
PANTALLA DE SALIDA
este programa debe de realizar las siguientes especificaciones:
1.- la longitud del alfabero
2.- alfabeto que se ingreso que no se repita.
en el programa se utilizaron archivos de texto para que se pudiera guardar los símbolos resultantes.
Leer más
1.- la longitud del alfabero
2.- alfabeto que se ingreso que no se repita.
en el programa se utilizaron archivos de texto para que se pudiera guardar los símbolos resultantes.
codigo implementado en c++
#include <iostream>
#include <cstdlib>
#include <fstream>
FILE *doc;
using namespace std;
int buscar (string v, string salida);
int main(int argc, char** argv) {
ifstream
salidaArchivo("archivo.txt");
ofstream
salida("alfabeto.dat");
char
lin [50];
string
a, alfabeto("");
string
cadena1("abcdefghijklmnopqrstuvwxyz");
string
letra;
cout<<"\t\t\tRELAIZADO
POR:"<<endl;
cout<<"\t\t\tALBERTO
ALEXIS ALVA MARTINEZ"<< endl;
cout<<"\t\t\tCARLOS
LOPEZ IBARRA"<<endl;
cout<<"\n"<<endl;
cout<<"Las
cadenas son:"<<endl;
while(!salidaArchivo.eof()){
salidaArchivo.getline(lin,50);
a=lin;
cout<<lin<<"\t";
cout<<a.length()<<endl;
for(int
i=0;i< cadena1.length(); i++){
for(int
j=0;j< a.length(); j++) {
if(cadena1.substr(i,1).compare(a.substr(j,1)
)==0){
if(buscar(cadena1.substr(i,1),alfabeto
)==0){
alfabeto+=a.substr(j,1)
;
}
}
}
}
}
cout<<"\nALFABETO:"<<endl;
cout<<alfabeto<<endl;
doc=fopen("alfabeto.dat","a+");
salida<<alfabeto;
system("PAUSE");
return
0;
}
int buscar (string v, string salida){
for(int
i=0;i<salida.length();i++){
if(v.compare(salida.substr(i,1))==0){
return
-1;
}
}
return
0;
}
PANTALLA DE SALIDA
sábado, 23 de mayo de 2015
INVESTIGACIÓN RELACIONADA A
LA GRAMÁTICA GENERATIVA, AUTÓMATA CON TRANSICIONES DE
CERRADURA.
Investigacion: gramática generativa, autómatas con transiciones de cerradura.
Leer más
Investigacion: gramática generativa, autómatas con transiciones de cerradura.
Este programa hace la unión y concatenación de conjuntos de determinados números.
Código implementado del programa en c++
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
char concatenacion (char A[], char B[]);
double
operacion_numeros (int A[], int B[],int,int);
int main(int argc, char** argv) {
int elementos;
int lenguaje; // aquí es en que lenguaje es en
nuestro caso es numerico
cout<<"\t\t\tUNION Y CONCATENACION
DE CONJUNTOS"<<endl;
cout<<"\t\t\t\t\t\tRealizado por:"<<endl;
cout<<"\t\t\t\t\t\tCarlos Lopez
Ibarra"<<endl;
cout<<"\t\t\t\t\t\tAlberto Alexis
Alva Martinez"<<endl;
cout<<"\t\t\t\t\t\tICO-19\n"<<endl;
cout<<"QUE TIPOS DE CARACTERES DESEA INTRODUCIR ? \n1) Numeros"<<endl;
cin>>lenguaje;
if(lenguaje==1){
int noA,noB;
cout<<"\n cada cadena no
tiene que tener valor neutro (0)\n "<<endl;
cout<<"longitud de los elementos
'A' "<<endl; //valores numéricos a insertar
cin>>noA;
cout<<"longitud de los elementos
'B' "<<endl; //valores numericos a insertar
cin>>noB;
int conjuntoa[noA],conjuntob[noB];
cout<<"Digita los numeros de 'A'
"<<endl;
for(int i=0; i<noA; i++){
cin>>conjuntoa[i];
if(conjuntoa[i]<1){
cout<<"la cadena inicia con 0,
introduce un numero entero diferente de 0 \n"<<endl;
cin>>conjuntoa[i];
}
}
cout<<"Digita los numeros de 'B'
"<<endl;
for(int j=0; j<noB; j++){
cin>>conjuntob[j];
if(conjuntob[j]<1){
cout<<"La cadena inicia con 0,
introduce un numero entero diferente de 0 \n"<<endl;
cin>>conjuntob[j];
}
}
cout<<"A=["; //aqui se
guardan los numeros insertados anteriormente tanto para A como para B
for(int k=0; k<noA; k++){
cout<<conjuntoa[k]<<",";
}
cout<<"]";
cout<<endl;
cout<<"B=[";
for(int l=0; l<noB; l++){
cout<<conjuntob[l]<<",";
}
cout<<"]";
cout<<operacion_numeros(conjuntoa,conjuntob,noA,noB);
}
return 0;
system("pause");
}
PANTALLA DE SALIDA
Este programa se trata de los arboles binarios el cual es conocido por varias personas y saben de que trata en el cual hicimos por equipo de dos personas y que el programa hiciera sus tres recorrido.
void insertar(ABB &arbol, int x){
int main(){
ABB arbol = NULL;
Leer más
Código implementado para el árbol binario en c++
#include <iostream>
#include
<cstdlib>
using namespace std;
struct nodo{ //
creacion del nodo
int nodo;
struct nodo *izq, *der;
};
typedef struct nodo
*ABB;
ABB crearNodo(int x){
ABB nuevoNodo = new(struct nodo);
nuevoNodo->nodo = x;
nuevoNodo->izq = NULL;
nuevoNodo->der = NULL;
return nuevoNodo;
}
void insertar(ABB &arbol, int x){
if(arbol==NULL){
arbol = crearNodo(x);
}
else if(x < arbol->nodo){
insertar(arbol->izq, x);
}
else if(x > arbol->nodo){
insertar(arbol->der,
x);
}
}
void preOrden(ABB
arbol){
if(arbol!=NULL){
cout<<arbol->nodo<<" ";
preOrden(arbol->izq);
preOrden(arbol->der);
}
}
void enOrden(ABB
arbol){
if(arbol!=NULL){
enOrden(arbol->izq);
cout<<arbol->nodo<<" ";
enOrden(arbol->der);
}
}
void postOrden(ABB
arbol){
if(arbol!=NULL){
postOrden(arbol->izq);
postOrden(arbol->der);
cout<<arbol->nodo<< " ";
}
}
void verArbol(ABB
arbol, int n){
if(arbol==NULL){
return;
}
verArbol(arbol->der, n+1);
for(int i=0; i<n; i++){
cout<<" ";
}
cout<<arbol->nodo<<endl;
verArbol(arbol->izq, n+1);
}
int main(){
ABB arbol = NULL;
int n;
// numero de nodos
int x;
// elemento a insertar en cada nodo
cout<<"\t\t\t\tARBOL BINARIO\n"<<endl;
cout<<"\t\t\t\t\t\tRealizado por:"<<endl;
cout<<"\t\t\t\t\t\tCarlos Lopez Ibarra"<<endl;
cout<<"\t\t\t\t\t\tAlberto Alexis ALva Martinez"<<endl;
cout<<"\t\t\t\t\t\tICO-19\n"<<endl;
cout<<"Dame la cantidad de numeros a ingresar: ";
cin>>n;
cout<<endl;
for(int
i=0; i<n; i++){
cout<<"ingresa los numeros para la creacion del arbol
"<<i+1<<":";
cin>>x;
insertar(arbol,x);
}
cout<<"\n Mostrando ABB\n\n";
verArbol(arbol,0);
cout<<"\n Recorridos del arbol binario por cada uno de sus
ordenes";
cout<<"\n\n EnOrden: "; enOrden(arbol);
cout<<"\n\n PreOrden: "; preOrden(arbol);
cout<<"\n\n PostOrden: "; postOrden(arbol);
cout<<endl<<endl;
system("pause");
return
0;
}
PANTALLA DE SALIDA
viernes, 22 de mayo de 2015
Hola a todos en este programa que nos dejo el Ing. Hector encargado en impartir la materia de Autómatas y Lenguajes Formales lo que hicimos fue convertir de una base n a otra base n, lo cual lo hicimos en c++ y que la base resultante se guardare en un archivo de texto.
código implementado para hacer las conversiones en c++
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
void arreglo (int numero [],
int digitos, int bx);
int convertirdecimal (int
numero [], int digitos, int bx, int by);
void convertirbase (int
decimal, int by);
int checabase ();
int checaby ();
int cont();
int conv();
void mostrarDatos();
void escribirEnArchivo();
void recuperarDeArchivo();
void salidaArchivo();
int main(int argc, char** argv)
{
int digitos = 0;
int bx, by;
int decimal;
cout <<
"----------------------------Convertidor------------------------------
\n\n";
bx = checabase ();
cout << "\n longitud del numero a
convertir \n\n "; // Cuantos digitos contendra el numero a
ingresar
cin >> digitos;
// Se almacenara la longitud del numero
int numero [digitos];
cout <<"\n
Introduce el numero a convertir, digito a digito\n\n";
arreglo (numero, digitos, bx);
decimal = convertirdecimal (numero, digitos,
bx, by);
by = checaby();
cout << "\n";
convertirbase
(decimal, by);
system
("PAUSE");
return 0; }
int checabase ()
{
int x; // se de clara variable en donde
se almacenara el numero a convertir
// Aqui se pide al usuario que ingrese el
numero que desea convertir a cualquier otra base
// Ingresando solamente el numero que se
muestra en frente de la frase
cout <<"En que base esta el numero
a convertir: \n ";
cout
<<"Decimal = 10 \n";
cout <<"Binario = 2 \n";
cout <<"Octal = 8\n";
cout <<"Hexadecimal = 16 \n \n
";
cin >> x; //
se almacena el numero ingresado
if(x >=17)
{
cout <<
"\n\n Ingrese una base menor a 16 para la conversion \n\n";
cout << "A que base
deseas convertir, ingresalo en numero: \n";
cout << "Decimal = 10
\n";
cout << "Binario = 2
\n";
cout << "Octal = 8
\n";
cout << "Hexadecimal =
16 \n \n ";
cin >> x;
}
if(x <=-1)
{
cout << "\n \n Ingrese una base
menor a 16 para la conversion \n\n";
cout << "A que
base deseas convertir, ingresalo en numero: \n";
cout << "Decimal = 10 \n";
cout << "Binario = 2
\n";
cout << "Octal = 8 \n";
cout << "Hexadecimal = 16 \n \n
";
cin
>> x;
}
return x;
}
int checaby ()
{
int x;
cout << "\n\n A que base deseas
convertir, ingresalo en numero: \n\n";
cout << "Decimal = 10 \n";
cout << "Binario = 2
\n";
cout << "Octal = 8\n";
cout << "Hexadecimal = 16 \n \n
";
cin >> x;
if(x >=17)
{
cout << "\n \n
Ingrese una base menor a 16 para la conversion \n\n";
cout <<
"A que base deseas convertir, ingresalo en numero: \n ";
cout << "Decimal = 10 \n";
cout << "Binario = 2
\n";
cout << "Octal = 8\n";
cout << "Hexadecimal = 16 \n \n
";
cin
>>x;
}
else if (x
<=-1)
{
cout << "\n \n Ingrese una base mayor para la conversion \n\n";
cout << "\n \n A que base deseas convertir, ingresalo en numero: \n
";
cout <<
"Decimal = 10 \n";
cout <<
"Binario = 2 \n";
cout <<
"Octal = 8\n";
cout <<
"Hexadecimal = 16 \n \n ";
cin
>>x;
}
return x;
}
void arreglo (int numero [],
int digitos, int bx)
{
int i,x, a;
for (i=0;
i<digitos; i++)
{
cout << "\n Introduce su numero \n", i+1;
cin
>>numero[i];
if
(numero[i]>=bx || numero[i]<0)
{
cout << "\n Su numero no es valido \n";
cout << "\n Introduce el digito \n", i+1;
cin >>numero[i];
}
}
cout << "\n
El numero a convertir es: \n\n";
for (i=0;
i<digitos; i++)
cout <<
numero [i];
}
int convertirdecimal (int
numero [], int digitos, int bx, int by)
{
int i, pot;
int x=0;
for (i=digitos-1,
pot=0; i>=0, pot<digitos; i--, pot++)
{
x+=
(pow(bx, pot)* numero[i]);
}
return x;
}
void convertirbase (int
decimal, int by)
{
int
cociente,residuo,cont, i,j;
int conv [50];
i=0;
do{
cociente = decimal/by;
residuo = decimal%by;
conv[i] = residuo;
decimal = cociente;
i+=1;
} while
(cociente>0);
cout <<
"\n El numero convertido es: \n";
ofstream
salidaArchivo("convertidorBases.txt",ios::out);
for (cont=i-1;
cont>=0; cont--)
{
cout << conv [cont];
salidaArchivo<<conv[cont];
}
cout
<<"\n\n";
}
PANTALLA DE SALIDA
Suscribirse a:
Entradas
(
Atom
)











