lunes, 1 de junio de 2015

Leer más

domingo, 24 de mayo de 2015

investigación:


  1. operaciones entre conjuntos
  2. notacion de expresiones
  3. cerradura
  4. fractales
  5. automata

automata
Leer más
Capítulo 16 manejo de excepciones pag 682-701

Capítulo 18 La clase string y el procesamiento de flujos de cadena pag 745-761

Resumen
Leer más

Pila


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



Leer más
Este programa realiza la separacion de las reglas de producción por la izquierda y derecha y su alfabeto.

#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


Leer más
 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


Leer más
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.





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


Leer más

sábado, 23 de mayo de 2015

Investigación

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

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



Leer más

Arbol Binario

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. 


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




Leer más

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








Leer más