Vous êtes sur la page 1sur 10

ARBOL BINARIO CON PRE-ORDEN.

INORDEN, POST-ORDEN

/* Description: Recorrdos por Orden, Pre-Orden y Post-Orden

#include <iostream>

#include <cstdlib>

using namespace std;

struct nodo{

int nro;

struct nodo *izq, *der;

};

typedef struct nodo *ABB;

/* es un puntero de tipo nodo que hemos llamado ABB, que ulitizaremos

para mayor facilidad de creacion de variables */

ABB crearNodo(int x)

ABB nuevoNodo = new(struct nodo);

nuevoNodo->nro = 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->nro)


insertar(arbol->izq, x);

else if(x > arbol->nro)

insertar(arbol->der, x);

void preOrden(ABB arbol)

if(arbol!=NULL)

cout << arbol->nro <<" ";

preOrden(arbol->izq);

preOrden(arbol->der);

void enOrden(ABB arbol)

if(arbol!=NULL)

enOrden(arbol->izq);

cout << arbol->nro << " ";

enOrden(arbol->der);

void postOrden(ABB arbol)

if(arbol!=NULL)

postOrden(arbol->izq);

postOrden(arbol->der);
cout << arbol->nro << " ";

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->nro <<endl;

verArbol(arbol->izq, n+1);

int main()

ABB arbol = NULL; // creado Arbol

int n; // numero de nodos del arbol

int x; // elemento a insertar en cada nodo

cout << "\n\t\t ..[ ARBOL BINARIO DE BUSQUEDA ].. \n\n";

cout << " Numero de nodos del arbol: ";

cin >> n;

cout << endl;


for(int i=0; i<n; i++)

cout << " Numero del nodo " << i+1 << ": ";

cin >> x;

insertar( arbol, x);

cout << "\n Mostrando ABB \n\n";

verArbol( arbol, 0);

cout << "\n Recorridos del ABB";

cout << "\n\n En orden : "; enOrden(arbol);

cout << "\n\n Pre Orden : "; preOrden(arbol);

cout << "\n\n Post Orden : "; postOrden(arbol);

cout << endl << endl;

system("pause");

return 0;

}
AUTOMATA FINITO :

#include
<iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <stdlib.h>
#define MAX 100
using namespace std;

void MostrarEstados(vector<int> v){


cout << "\n\n ESTADOS DEL AUTOMATA \n\n";
for(int i=0; i<v.size(); i++){
cout << " " << i <<" --> q" << v[i] << endl;
}
}

void IngresaAutomata(vector<int> &E, vector<char> &S, int T[MAX][MAX]){

int numE; // Numero de estados


int numS; // Numero de simbolos
char c;

// Generando estados
cout << "\n Cantidad de Estados: ";
cin >> numE;
for(int i=0; i<numE; i++){
E.push_back(i);
}

// Ingresando simbolos
cout << "\n Cantidad de Simbolos: "; cin >> numS;
cout << endl;
for(int i=0; i<numS; i++){
cout << "\t Simbolo " << i+1 << " : ";
cin >> c;
S.push_back(c);
}
sort(S.begin(),S.end()); // Ordenando simbolos

// Ingresando tabla de transiciones


cout << "\n INGRESE TABLA DE TRANSICIONES \n\n";
for(int i=0; i<numE; i++){
for(int j=0; j<numS; j++){
cout << "\t T["<<i<<"]["<<j<<"] : ";
cin >> T[i][j];
}
}

// Mostrando tabla de transiciones


cout << "\n\n TABLA DE TRANSICIONES \n\n";
for(int i=0; i<numE; i++){
for(int j=0; j<numS; j++){
cout << "\t" << T[i][j] << " ";
}
cout << endl;
}
}

void menu(){
cout << "\n\t\t AUTOMATA FINITO DETERMINISTA\n\n";
cout << "\t 1. Ingresar Automata \n";
cout << "\t 2. Verificar palabra \n";
cout << "\t 3. Salir \n";
cout << "\t Ingrese opcion: ";
}

bool VerificarPalabra(vector<int> w, int T[MAX][MAX], int q0,


vector<int>qf){
int q, s;
q = q0;
bool EstadoVerificacion = false;

for(int i=0; i<w.size(); i++){


s = w[i];
q = T[q][s];
}

for(int i=0; i<qf.size(); i++){


if(q==qf[i]){
EstadoVerificacion = true;
break;
}
}
return EstadoVerificacion;
}

void ConvertirPalabra(string palabra, vector<char>S, vector<int>&w){

int i, k=0;

while(w.size()!=palabra.length()){
for(i=0; i<S.size(); i++){
if(palabra[k]==S[i]){
w.push_back(i);
}
}
k++;
}
}
/* Funcion Principal
--------------------------------------------------------------*/
int main()
{
vector<int> Estados;
vector<char> Simbolos;
int Transiciones[MAX][MAX];
int q0; // Estado inicial
vector<int>qf; // Estados finales
vector<int>w;
bool AutomataIngresado = false; // Aun no se ha ingresado automata

int op, temp, tam;

do{
menu(); cin>>op;

switch(op){

case 1:
Estados.clear();
Simbolos.clear();
qf.clear();

IngresaAutomata(Estados, Simbolos, Transiciones);


MostrarEstados(Estados);

cout << "\n Ingrese estado inicial: ";


cin >> q0;

cout << "\n Cuantos de estados finales hay?: ";


cin >> tam;

cout << endl;


for(int i=0; i<tam; i++){
cout << "\t Numero de estado final: ";
cin >> temp;
qf.push_back(temp);
}

AutomataIngresado = true;
break;

case 2:
if(AutomataIngresado){
string palabra;
w.clear();
bool EstadoVerificacion = false;
cout << "\n Ingrese palabra: ";
cin>> palabra;

ConvertirPalabra(palabra, Simbolos, w);

EstadoVerificacion = VerificarPalabra(w, Transiciones,


q0, qf);

if(EstadoVerificacion){
cout << "\n\t Palabra aceptada \n\n";
}
else{
cout << "\n\t Palabra no aceptada \n\n";
}
}
else{
cout << "\n Automata no ingresado..! \n";
}

break;

case 3:
exit(0);

default:
cout << "\n\tOpcion incorrecta..!\n";
}

//cout << "\n\n"; system("pause"); system("cls");

}while(op!=3);
}

Vous aimerez peut-être aussi