• Domingo 23 de Junio de 2024, 20:56

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 - Ruben3d

Páginas: 1 ... 28 29 [30]
726
C/C++ / Posición y color de texto en linux
« en: Sábado 15 de Noviembre de 2003, 14:45 »
Hola.

Me gustaría saber si existe en linux alguna función que permita cambiar la posición del cursor y el color del texto, como hacen SetConsoleCursorPosition y SetConsoleTextAttribute en Windows.

Muchas gracias.

727
C/C++ / Re: Estrucutaras de datos ARBOL N-ario
« en: Sábado 15 de Noviembre de 2003, 13:57 »
Hola. Te recomendaría que para hacer un árbol n-ario no usaras una lista, ya que es tremendamente ineficiente (excepto en búsquedas en anchura) y se desperdicia mucha memoria a no ser que el árbol esté muy bien equilibrado.

Mi consejo es que uses una estructura de nodos asociados en forma de árbol, donde en cada nodo se guarden los hijos. Una posible representación sería:

typedef struct st_nodo_t
{
   void *datos;
   struct st_nodo_t **hijos;
} nodo_t;

Así, datos sería la información que se almacena en cada nodo e hijos sería un array de punteros a los hijos. Si quieres crear un árbol 32-ario (por ejemplo) el campo hijos se inicializaría así:

nodo.hijos = (nodo_t**) malloc(sizeof(nodo_t**) * 32);

Suponiendo nodo una variable de tipo nodo_t.

Ahora sólo quedaría crear cada hijo, haciendo una reserva de memoria para cada nodo en cada una de las posiciones del array hijos. Si un nodo no tiene los 32 hijos, puedes dejar sus punteros a NULL para representarlo.

De esta forma puedes recorrer fácilmente el árbol en profundidad (en anchura, para hacerlo eficiente, hay que complicar un poco los nodos, con punteros a los hermanos). También es sencillo realizar inserciones, búsquedas, etc, todo con coste log n (si el árbol está ordenado), usando funciones recursivas.

Espero haberte servido de ayuda.

Un saludo.

728
C/C++ / Re: Arrays
« en: Sábado 15 de Noviembre de 2003, 13:20 »
Tienes razón, Blag. Donde pone n = tam - n debería poner n = tam - 1. Espero no haber causado confusión a dadevil.

Por otro lado, me he fijado que el uso de new y delete que haces es diferente al que esperaría, ya que

int *array = new int;

le asignaría a array memoria para almacenar un solo int (4 bytes) y al intentar acceder a otras posiciones ocurriría un error de protección de memoria. Al menos en VC++ que es el que uso.  ¿new y delete varían con respecto al estándar en el Borland C++ ?

Un saludo.

729
C/C++ / Saber el contenido de un directorio
« en: Jueves 13 de Noviembre de 2003, 21:12 »
Bueno. Ya encontré la solución. Resulta que Microsoft tiene una guía para los programadores de Unix que se pasan a Windows. La solución a mi problema está en:
http://msdn.microsoft.com/library/defau ... mgch09.asp

730
C/C++ / Re: Arrays
« en: Jueves 13 de Noviembre de 2003, 16:54 »
Me he fijado en que usas cin y cout para leer e imprimir en pantalla, así que he pensado que es más correcto usar los operadores new y delete para reservar y liberar la memoria. Además, no estás usando los índices para acceder a las posiciones del array, así que lo que se modifica es su propia dirección de memoria. A ver qué te parece este código (he sustituido el tipo char por int, ya que cout interpreta char como un carácter):

#include <iostream>

using namespace std;

int main()
{
    int tam;   // Tamaño del array
    int n;      // Contador para bucles

    cout << "Introduce el numero de elementos del array: ";
    cin >> tam;

    int *array = new int[tam];   // Reserva de memoria

    for(n=0; n<tam; n++)   // Petición de números
    {
        cout << "Ingresa el numero en posicion " << n << ": ";
        cin >> array[n];
    }

    for(n=tam-n; n>=0; n--) //Vas en reversa
    {
        cout << endl << array[n]; //Muestras los valores del array, uno por uno
    }
   
    delete [] array;   // Se libera la memoria

    return 0;
}

731
C/C++ / Re: Arrays
« en: Jueves 13 de Noviembre de 2003, 12:44 »
Hola. Para poder usar la función malloc has de incluir las cabeceras stdlib.h y malloc.h. Para acceder a los elementos del vector se haría así: array[X], donde X es la posición a la que quieres acceder (acuerdate que las posiciones se empiezan a numerar en cero).

732
C/C++ / Multithreading en C/C++
« en: Miércoles 12 de Noviembre de 2003, 21:16 »
Desde Windows puedes usar la función CreateThread para crear un hilo para cada una de las IPs. Mira la documentación para ver cómo funciona, ya que está bastante bien documentada.

733
C/C++ / Re: Saber el contenido de un directorio
« en: Miércoles 12 de Noviembre de 2003, 20:53 »
Hola a todos.

Estoy acostumbrado a programar en Linux y al pasar a hacerlo en Windows me encontré con que no estaban las funciones que conocía para averiguar las entradas de un directorio (opendir, telldir y demás). Así, me puse a investigar en la documentación y lo logré hacer usando la clase System::IO::Directory del .NET Framework. También conseguí hacerlo usando la función system con un dir /B > fichero.txt.

Sin embargo, ninguna de las dos opciones me parece la adecuada. Ya que con la primera estoy usando una clase específica de Microsoft, y con la segunda me da la impresión de que es un poco chapuza (ya que tengo que estar leyendo un archivo con el resultado).

Así pues, me gustaría poder saber el contenido de un directorio usando sólo las funciones o clases del ANSI C ó C++. ¿Alguien me podría ayudar?

Muchas gracias por adelantado.

Páginas: 1 ... 28 29 [30]