Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - danielSoccer

#1
Dudas Generales / lema de bombeo
16 Noviembre 2016, 05:30 AM
Muy buenas noches alguien sera que me podria pasar ejemplos de ejercicios del lema de bombeo por favor gracias
#2
Programación C/C++ / lista de adyacencia ayuda
16 Noviembre 2016, 05:16 AM
No entiendo alguien me explica como hago para que se me vea la lista si compila y todo pero no muestra la lista

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <conio.h>
#include <string.h>

#define MaxNodos 47

typedef struct nodo_ {
   int etiqueta;
   float peso;
   struct nodo_ *sig;
}Tnodo;

/** variables globales */
Tnodo *Lista[MaxNodos]; //lista de adyacencia
int marca[MaxNodos]; //visitados
int predecesores[MaxNodos]; //ruta
float d[MaxNodos]; // distancia - peso
int Num_Vertices; //numero de vertices
int tipo; //1 no dirigido, 0 dirigido
char uanl[250][250]; //Arreglo de nombres UANL
/** ------------------ */

/* Inicializa la lista de adyacencia a NULL */
void init() {
   int i;
   for (i = 0; i < MaxNodos; i++)
       Lista[i] = NULL;
}

int lista (int tipo)/*FUNCION QUE DESPLIEGA LA LISTA PARA SELECCIONAR LA OPCION DEL USUARIO*/
{
int val=0;
do
{
printf("\n\n\tSeleccione una opcion");
int j=0;
switch(tipo)
{
 case 1: printf("\n\n\tCIUDAD UNIVERSITARIA");

    for(j=1;j<=28;j++)
      printf("%s\n",uanl[j]);

        break;
 case 2:printf("\n\n\tPREPARATORIAS");
    for(j=29;j<=47;j++)
      printf("%s\n",uanl[j]);

        break;
};
printf("\n\n\tIntroduzca el numero de la lista que desee...");
scanf("%d",&val);

}while(val<1 || val > 47);
return val;
}

/* Inserta los vertices en la lista de adyacencia */
void inserta (int Vorigen, int Vfinal, float peso) {
   Tnodo *q;
   q = (Tnodo*) malloc (sizeof(Tnodo) * 1);
   if (!q) return; //hubo un error
   q->etiqueta = Vfinal-1;
   q->peso     = peso;
   q->sig      = NULL;
   if (Lista[Vorigen-1] != NULL)
      q->sig = Lista[Vorigen-1];
   Lista[Vorigen-1] = q;
}

/* Libera la lista de adyacencia */
void liberar_lista (void) {
  Tnodo *q;
  int i;
  for (i = 0; i <  Num_Vertices; i++) {
     if (Lista[i] != NULL) {
        while (Lista[i] != NULL) {
           q = Lista[i];
           Lista[i] = Lista[i]->sig;
           free(q);
        }
     } //--fin si (no necesarias las llaves)
  } //--fin for (no necesaria las llaves)
}

/* Carga el grafo desde un fichero */
void cargar_grafo (char *fn) {
 FILE *fp;
 int v_in, v_fn; //vertice inicial y final
 float peso;
 if ((fp = fopen (fn, "r")) == NULL) {
      printf ("El archivo %s no existe o no se puede abrir\n", fn);
      getche();
      exit(0);
  }
  fscanf (fp, "%d\n", &tipo); //tipo es una vble global
  fscanf (fp, "%d\n", &Num_Vertices); //Num_Vertices es una vble global
  while (!feof(fp)){
        fscanf(fp, "%d %d %f\n", &v_in, &v_fn, &peso);
        inserta(v_in, v_fn, peso);
        inserta (v_fn, v_in, peso);
  }
  fclose (fp);
} // fin cargar_grafo
void cargar_nombres (char *fn) {
 FILE *fp;
   if ((fp = fopen (fn, "r")) == NULL) {
      printf ("El archivo %s no existe o no se puede abrir\n", fn);
      getche();
      exit(0);
  }

       int i=1;
       char caracteres[150];

       printf("\nEl contenido del archivo de prueba es \n\n");
       while (feof(fp) == 0)
       {
           fgets(caracteres,100,fp);
               strcpy(uanl[i], caracteres);
               i++;
       }
        fclose (fp);
} // fin cargar_nombres


/* Retorna el peso de la arista que une dos nodos */
float return_peso (int origen, int destino) {
  Tnodo *p;
  int encontrado;

  encontrado = 0;
  p = Lista[origen];
  while (p != NULL && !encontrado) {
     if (p->etiqueta == destino)
       encontrado = 1;
     else
       p = p->sig;
  }
  return p->peso;
}


int menor_valor() {
  int i, verticeMenor;
  float menor;
  menor = INT_MAX;
  for (i = 0; i < Num_Vertices; i++) {
     if (marca[i] == 0 )
        if (menor > d[i]) {
           menor = d[i];
           verticeMenor = i;
        }
  } // fin for
  return verticeMenor;
}

/* Dijkstra */
void dijkstra (int origen, int destino)
{
  int i, last, x;
  Tnodo *p;
  // inicializacion
  for (i = 0; i < MaxNodos; i++) {
     d[i] = INT_MAX; //"infinito"
     marca[i] = 0;
     predecesores[i] = -1;
  }
  // --
  d[origen] = 0;
  marca[origen] = 1;
  last = origen;
  while (marca[destino] == 0) { //hasta que no lleguemos al destino
     p = Lista[last];
     while (p != NULL){   //para todos los nodos adyacendes
         if (marca[p->etiqueta] == 0) //si no ha sido visitado
          if (d[p->etiqueta] > d[last] + return_peso(last, p->etiqueta))
             {
              d[p->etiqueta] = d[last] + return_peso(last, p->etiqueta);
              predecesores[p->etiqueta] = last;
          } // fin si
          p = p->sig;
     } // fin mientras
     x = menor_valor();
     marca[x] = 1;
     last = x;
  } // fin mientras
}

/* Imprime la ruta por pantalla */
void ImprimirCamino(int v) {
  if (v != -1)
     ImprimirCamino(predecesores[v]);
  if (v != -1) //evitamos que se imprima el -1
     {

                printf("%s\n",uanl[v+1]);

     }
}

/* Menu de opciones */
int menu() {
   int opcion;
   do {
       printf ("\n\n\t[0] Salir\n\t");
       printf ("[1] Calcular ruta\n\n");
       printf ("Opcion:_");
       scanf("%d", &opcion);
   }while (opcion < 0 || opcion > 1);
   return opcion;
}

/* Funcion principal */
int main () {
   char file[25];
   int origen, destino,opi,tipo=0;
   int salir = 0;
   printf("\n\n\n\tBIENVENIDO\n\n\t...Presione cualquier tecla para comenzar..._");
   getche();
   init();
 
 
   printf("\n\n\tSeleccione una opcion...");
   do {
       switch(menu())
       {
           case 0:
                  salir = 1;
                  break;
           case 1:
                    while(tipo!=1&&tipo!=2)
           {
           
                          printf("\n\tSi desea partir de una facultad introduzca 1\n\tSi desea partir de una preparatoria introduca 2....._");
                          scanf("%d",&tipo);

           }
                        origen = lista (tipo);
            tipo=0;
      while(tipo!=1&&tipo!=2)
           {
           
        printf("\n\tSi desea llegar de una facultad introduzca 1\n\tSi desea llegar de una preparatoria introduca 2....._");
                          scanf("%d",&tipo);
                       }
                       destino= lista (tipo);
                    dijkstra(origen-1, destino-1);
                    printf("\n\n\tLA RUTA MAS RAPIDA ES....\n\n");
                  ImprimirCamino(destino-1);
                  break;
       }; //final switch
   tipo=0;
   }while(!salir);
   liberar_lista();

   }


MOD: Etiqueta GeSHi.
#3
Programación C/C++ / lista de adyacencia
11 Noviembre 2016, 02:17 AM
sd
#4
Programación C/C++ / arbol binario de busqueda
11 Noviembre 2016, 02:08 AM
Quisiera que alguien me colaborara con alguna funcion con el codigo que les voy a mostrar que muestre el valor mayor y menor de los nodos almacenados y mostrar el nivel de un nodo(el nivel del nodo es consultado por teclado) se los agradeceria muchas gracias
Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>

using namespace std;

/*---------  Estructura del arbol  -------*/
typedef struct nodo{
int nro;
struct nodo *izq, *der;
}*ABB;

int numNodos = 0; // nummero de nodos del arbol ABB



/* ---------- Estructura de la cola ---------*/
struct nodoCola{
ABB ptr;
struct nodoCola *sgte;
};
struct cola{
struct nodoCola *delante;
struct nodoCola *atras;
};

void inicializaCola(struct cola &q)
{
q.delante = NULL;
q.atras = NULL;
}

void encola(struct cola &q, ABB n)
{
struct nodoCola *p;
p = new(struct nodoCola);
p->ptr = n;
p->sgte = NULL;
if(q.delante==NULL)
  q.delante = p;
else
(q.atras)->sgte = p;
q.atras = p;
}

ABB desencola(struct cola &q)
{
struct nodoCola *p;
p = q.delante;
ABB n = p->ptr;
q.delante = (q.delante)->sgte;
delete(p);
return n;
}

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);
cout<<"\n\t  Insertado..!"<<endl<<endl;
}
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)
{
enOrden(arbol->izq);
enOrden(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<<"   ";

numNodos++;
cout<< arbol->nro <<endl;

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

bool busquedaRec(ABB arbol, int dato)
{
int r=0;   // 0 indica que lo encontre

if(arbol==NULL)
  return r;

if(dato<arbol->nro)
  r = busquedaRec(arbol->izq, dato);
 
else if(dato> arbol->nro)
r = busquedaRec(arbol->der, dato);

else
r = 1;   // son iguales, lo encontre

return r;
}

ABB unirABB(ABB izq, ABB der)
{
if(izq==NULL) return der;
if(der==NULL) return izq;

ABB centro = unirABB(izq->der, der->izq);
izq->der = centro;
der->izq = izq;
return der;
}

void elimina(ABB &arbol, int x)
{
if(arbol==NULL) return;

if(x<arbol->nro)
  elimina(arbol->izq, x);
else if(x>arbol->nro)
elimina(arbol->der, x);

else
{
ABB p = arbol;
arbol = unirABB(arbol->izq, arbol->der);
delete p;
}
}



void recorrerxNivel(ABB arbol)
{
struct cola q;
inicializaCola(q);
cout << "\t";

if(arbol!=NULL)
{
encola(q, arbol);

while(q.delante!=NULL)
{
arbol = desencola(q);
cout << arbol->nro << ' ';

if(arbol->izq!=NULL)
  encola(q, arbol->izq);
  if(arbol->der!=NULL)
 encola(q, arbol->der);
}
}
}







void menu()
{
//system("cls");
cout << "\n\t\t  ..[ ARBOL BINARIO DE BUSQUEDA ]..  \n\n";
cout << "\t [1]  Insertar elemento                  \n";
cout << "\t [2]  Mostrar arbol                      \n";
cout << "\t [3]  Recorridos de profundiad           \n";
cout << "\t [4]  Buscar elemento                    \n";
cout << "\t [5]  Eliminar elemento                  \n";
cout << "\t [6]  Recorrido por nieveles (Amplitud)  \n";
   cout << "\t [7]  Nodos menores de 'k'               \n";
cout << "\t [11] SALIR                              \n";

cout << "\n\t Ingrese opcion : ";
}

void menu2()
{
system("cls");
cout << endl;
cout << "\t [1] En Orden     \n";
cout << "\t [2] Pre Orden    \n";
cout << "\t [3] Post Orden   \n";
cout << "\n\t     Opcion :  ";
}

int main()
{
ABB arbol = NULL;
int x;
int op, op2;


//system("color f9");   // poner color a la consola
do
{
menu();  cin>> op;
cout << endl;

switch(op)
{
case 1:
cout << " Ingrese valor : ";  cin>> x;
insertar( arbol, x);
break;

case 2:
verArbol(arbol, 0);
break;

case 3:
menu2();  cin>> op2;

if(arbol!=NULL)
{
switch(op2)
{
case 1:
enOrden(arbol); break;
case 2:
preOrden(arbol); break;
case 3:
postOrden(arbol); break;
}
}
else
  cout << "\n\t Arbol vacio..!";
break;

case 4:
bool band;

cout<<" Valor a buscar: "; cin>> x;

band = busquedaRec(arbol,x);

if(band==1)
  cout << "\n\tEncontrado...";
else
cout << "\n\tNo encontrado...";
break;

case 5:
cout<<" Valor a eliminar: "; cin>> x;
elimina(arbol, x);
cout << "\n\tEliminado..!";
break;

case 6:
cout<<"\n\n Mostrando recorrido por amplitud\n\n";
recorrerxNivel(arbol);
break;






case 8:
exit(0);
}

cout<<"\n\n\n";
system("pause");
}while(op!=8);

}






El que tenga la funcion le recompensare con paypal xbox live o dinero real (y)

Mod: Los códigos deben ir en etiquetas GeSHi, no escribir en mayúsculas, no hagas doble post