• Miércoles 6 de Noviembre de 2024, 05:30

Mostrar Mensajes

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


Mensajes - ucablex

Páginas: [1]
1
C/C++ / Re: no me quiere leer por teclado un string, ya envie el txt
« en: Domingo 25 de Mayo de 2003, 07:19 »
Bueno para el que me ayude el programa es sencillito es una lista doblemente enlaza que me almacena nombres de estaciones de trenes... ya esa parte esta bien pero tengo que ahora buscar un elemento de la lista y necesito introducir el nombre por teclado y por ejemplo quiero leer esta estacion "Colegio de ingenieros" es logico que con el scanf solo voy a leer uno de esos tres string pero como gets lo leo completo el problema esta en que no me lee nada y pasa de largo... no se si es que tengo que limpiar la pantalla o que la variable se me esta embasurando con otra cosa... lo cierto es que aqui le dejo el codigo para que lo examinen y me ayuden a leer la bendita variable thanks....

2
C/C++ / Re: Listas Doblemente enlazadas con manejo de cadenas
« en: Lunes 19 de Mayo de 2003, 05:28 »
Señores disculpen la ignorancia pero como inserto un elemento en una lista Doblemente enlazada... mi parametro es un string y lo recibo por un archivo de texto... hago la lectura y luego mando a la funcion insertar pero se ejecuta tres veces y despues hay una error y no lo logro ver... aqui esta mas o menos el codigo para ver si me ayudan... esta es la definicion ....struct _nodo {  StringNombre;                                           struct _nodo *Siguiente;                struct_nodo*Anterior;};          

   typedef struct _nodo LineaUno,LineaDos,LineaTres;
typedef LineaUno *pNodo;
typedefLineaUno*Lista;         y esta es mi funcion insertar                                    void insertar(Lista*l,StringEstacion);    

aqui esta la definicion ...                                                     void insertar(Lista *lista, String Estacion)
      {
        pNodo  nuevoPtr,actualPtr;

          /* Crear un nuevo nodo */
        nuevoPtr = (pNodo)malloc(sizeof(LineaUno));
          strcpy((nuevoPtr->Nombre),Estacion) ;
        
        printf("n%s",(nuevoPtr->Nombre)); //solo para debugger

          /* Colocamos actual en la primera posicion de la lista */

         actualPtr = *lista;

         if (actualPtr) while (actualPtr->Siguiente) actualPtr = actualPtr->Anterior;

         if (!actualPtr) {
        /* Añadimos la lista a continuacion del nuevo nodo*/
         nuevoPtr->Siguiente = actualPtr;
         nuevoPtr->Anterior = NULL;
         if (actualPtr) actualPtr->Anterior = nuevoPtr;
         if (!*lista) *lista = nuevoPtr;}
        
         else {
            /* Avanzamos hasta el ultimo elemento*/
            /*Insertamos el nuevo nodo despues del nodo anterior*/
          nuevoPtr->Siguiente = actualPtr->Siguiente;
          actualPtr->Siguiente = nuevoPtr;
          nuevoPtr->Anterior = actualPtr;
            if (nuevoPtr->Siguiente) nuevoPtr->Siguiente->Anterior = nuevoPtr;
          }
        } les agradeceria que me resolvieran el embrollo ...gracias...

3
C/C++ / Re: Matriz Inversa
« en: Domingo 1 de Diciembre de 2002, 02:25 »
espero que te sirva leelo !/*
Calculo de la Iversa de una Matriz - Algoritmo de Gauss


*/

#include <iostream.h>

class matriz {
      /*
         Definicion del objeto matriz. Usare tabla para guardar los datos orginales
         y sobre tabla2 se realizaran las operaciones.
      */
      double **tabla,**tabla2;
      int dim;
   public:
      enum tipo_tabla{coef,ampliada,inversa};
      matriz(int);
      ~matriz();
      void llenar();
      void imprimir(int);
      bool invertir(int,bool);
};

matriz::matriz(int n) {
   int i;
   dim=n;
   tabla=new double *[dim];
   for (i=0;i<dim;i++) *(tabla+i)=new double[dim*2];
}

matriz::~matriz() {
   int i;
   for (i=0;i<dim;i++) delete [] *(tabla+i);
   delete [] tabla;
   for (i=0;i<dim;i++) delete [] *(tabla2+i);
   delete [] tabla2;
}

void matriz::llenar() {
   int i,j;
   double num;
   for (i=0;i<dim;i++) {
      for (j=0;j<dim;j++) {
         cout<<"Ingresa coeficiente a["<<i+1<<","<<j+1<<"]: ";
         cin>>num;
         *(*(tabla+i)+j)=num;
      }
      for (j=dim;j<dim*2;j++) *(*(tabla+i)+j)=(i==(j-dim))?(double)1:(double)0;
   }
   tabla2=new double *[dim];
   for (i=0;i<dim;i++) *(tabla2+i)=new double[dim*2];
   for (i=0;i<dim;i++)
      for (j=0;j<dim*2;j++) *(*(tabla2+i)+j)=*(*(tabla+i)+j);
}

void matriz::imprimir(int t_tabla) {
   int i,j;
   if (t_tabla==coef) {
      for (i=0;i<dim;i++,cout<<endl)
         for (j=0;j<dim;j++) cout<<*(*(tabla+i)+j)<<"t";
   }
   else if (t_tabla==ampliada) {
      for (i=0;i<dim;i++,cout<<endl)
         for (j=0;j<dim*2;j++) cout<<*(*(tabla+i)+j)<<"t";
   }
   else {
      for (i=0;i<dim;i++,cout<<endl)
         for (j=dim;j<dim*2;j++) cout<<*(*(tabla2+i)+j)<<"t";
   }
}

bool matriz::invertir(int pivote=0,bool ida=true) {
   /*
      Invierte la matriz en tabla2. Retorna true si el proceso se realizo con exito, o sea
      si la matriz en tabla es invertible o de lo contrario false.
      Pivote es el elemento de la diagonal bajo, o sobre, el cual se anularan los coeficientes.
      ida indica que paso se ejecuta, la formacion de:
         i) triangular superior
         ii) triangular inferior y simplificacion
      Vea las hojas de respuesta para ver una explicacion detallada de los pasos y el algoritmo
   */
   int i,j;
   double k;
   if (!*(*(tabla2+pivote)+pivote)) return false; // Matriz no invertible
   else if (ida) {
      // Fomacion trinagular superior
      if (pivote==dim-1) return invertir(pivote,false); //Se llega al elemento a[n,n] y se llama a si misma pero con false, o sea pasa al paso ii
      else {
         for (i=pivote;i<dim-1;i++) {
            k=*(*(tabla2+i+1)+pivote)/ *(*(tabla2+pivote)+pivote); // Calculo de k
            for (j=0;j<dim*2;j++)
               *(*(tabla2+i+1)+j)=*(*(tabla2+i+1)+j)-*(*(tabla2+pivote)+j)*k; // Operacion fila
         }
         return invertir(++pivote);
      }
   }
   else {
      // Fomacion trinagular inferior
      if (pivote==0) { //Se llega al elemento a[1,1]
         k=1/ *(*(tabla2+pivote)+pivote);
         for (j=0;j<dim*2;j++)
            *(*(tabla2+pivote)+j)*=k; //Se simplifica el elemento la fila por el elemento de la diagonal (paso iii)
         return true;
      }
      else {
         for (i=pivote;i>0;i--) {
            k=*(*(tabla2+i-1)+pivote)/ *(*(tabla2+pivote)+pivote); // Calculo de k
            for (j=0;j<dim*2;j++)
               *(*(tabla2+i-1)+j)=*(*(tabla2+i-1)+j)-*(*(tabla2+pivote)+j)*k; // Operacion fila
            k=1/ *(*(tabla2+pivote)+pivote);
            for (j=0;j<dim*2;j++)
               *(*(tabla2+pivote)+j)*=k; //Se simplifica el elemento la fila por el elemento de la diagonal (paso iii)

         }
         return invertir(--pivote,false);
      }
   }
}

int main() {
   int dim;
   matriz *tabla;
   cout<<"Calculo de la Iversa de una Matriz - Algoritmo de Gauss"<<endl<<endl;
   cout<<"Fase de Tarea Certamen 2 - Fundamentos de Informatica I"<<endl<<endl;
   cout<<"Jorge Riquelme S. 2173090-4"<<endl;
   cout<<"http://www.totex.cl - totex@totex.cl"<<endl<<endl<<endl;
   cout<<"Dimension de la matriz? ";
   cin>>dim;
   tabla=new matriz(dim);
   tabla->llenar();
   cout<<endl<<"Matriz de coeficientes ingresados:"<<endl;
   tabla->imprimir(matriz::coef);
   cout<<endl<<"Matriz ampliada"<<endl;
   tabla->imprimir(matriz::ampliada);
   if (tabla->invertir()) {
      // Si la matriz se pudo invertir la muestra
      cout<<endl<<"Matriz Inversa"<<endl;
      tabla->imprimir(matriz::inversa);
   }
   else cout<<endl<<"La matriz no tiene inversa!"<<endl;
   return 0;
}

4
C/C++ / Como declarar un arreglo de listas
« en: Viernes 22 de Noviembre de 2002, 21:55 »
typedef struct nodos
{
cadena elemento;
struct nodos *sig
} Nodo_Lista,*Lista;  
Nodo_Lista **LPtr[27];void Lee_Asigna_D(FILE *DIC)
{
   Lista D_nario = NULL;
   char *tokensPtr;
   {
   
   
    for (int i=1;!feof(DIC);i++)
    {    
        D_nario = NULL;
        fgets(Palabra,250,DIC);
          tokensPtr = strtok(Palabra," ");


        while ( tokensPtr != NULL)
         {
           strcpy(word,tokensPtr);
           printf("%sn",word);
           D_nario = Lista_Enlazada(D_nario,word);
           getch();
           tokensPtr = strtok (NULL," ");
         }
   
     LPtr = &D_nario;
     printf("%dn",i);
     ordenar(D_nario);
     imprimir(D_nario);
   }
  }
}

5
C/C++ / Re: Como declarar un arreglo de listas
« en: Jueves 21 de Noviembre de 2002, 21:16 »
necesito crear un diccionario, con un arreglo de 26 casillas (numero de letras), que contenga listas enlazadas (palabras por letra), como declaro el arreglo de listas, y como hago la asignacion al arreglo.

Páginas: [1]