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

#91
Programación C/C++ / Re: Memoria dinámica
24 Enero 2012, 21:57 PM
Cita de: durasno en 24 Enero 2012, 21:54 PM
Como dice satu te combiene revisar que son las listas, como se emplean y todo con respecto a listas. Para empezar te recomiendo que busques "Listas enlazadas simples"

Eso he hecho compañero, mi duda no es acerca del funcionamiento general de una lista sino algo puntual; una vez que tengo creada la lista cómo acceder a cada uno de los nodos.

Miraré lo que me has indicado y comento gracias.
#92
Programación C/C++ / Re: Memoria dinámica
24 Enero 2012, 21:53 PM
Me he interesado por las listas y he entendido la estructura:

Creamos un nuevo tipo/estructura compuesto por el dato y una referencia al siguiente nodo, además creamos un tipo/estructura que solo usaríamos una vez para tener siempre a la vista el primer elemento; en el link que me has pasado está en notación algorítmica asi que en c++ sería algo asi:

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

class nodo
{
   public:
       nodo(){pSiguiente = new nodo;}; //Constructor
       ~nodo(){};                     //Destructor

       int dato;                      //Dato a almacenar en este nodo
       nodo *pSiguiente;              //Referencia al siguiente nodo
};

class primerElemento
{
   public:
       nodo primerNodo;
};

int main ()
{
   primerElemento objeto;

   cin;
   return 0;
}


El compilador no me da ningún error y después de darle 287287 vueltas y entenderlo a la perfección creo que he conseguido seguir minuciosamente la filosofía de la lista.

Ahora, para acceder al dato del primer nodo sería:

Código (cpp) [Seleccionar]
objeto.primerNodo.dato = 5;

¿Y ahora para acceder al siguiente nodo?, de todas formas seguro que hay algo que se me escapa puesto que no es posible que se necesite escribir "1ºnodo.2ºnodo.3ºnodo.4ºnodo...". ¿Podéis darme alguna indicación acerca de esto?.

Gracias, saludos.

EDITO: En esta página parece que lleva la cuenta del índice del nodo al que quiere acceder: http://c.conclase.net/edd/?cap=001f#1_9

¿Pero cómo se colocaría el índice en el código?, no lo veo por ningún lado :S
#93
Programación C/C++ / Memoria dinámica
24 Enero 2012, 20:07 PM
Buenas noches:

Os escribo para ver si me podéis resolver una dudilla: estoy trabajando con los punteros y la memoria dinámica, ya he visto cómo asignar memoria en tiempo de ejecución del Free Store con "new", liberarla antes de volver a usar el puntero con "delete", los riesgos que conlleva, etc.

Pero se me ha ocurrido una cosa un poco más compleja: ejecutar condicionales que vayan asignando memoria de forma indefinida (por ejemplo para una agenda, que se reserve memoria cada vez que se quiera añadir una persona de tal forma que podamos añadir tanta gente como queramos, u otro tipo de base de datos).

Bastaría con hacer algo asi como:

Código (cpp) [Seleccionar]
if (opcion == 4) //La cuarta opcion por poner algo es "añadir alguien a la agenda"
{
personas *puntero = new personas; //La clase "personas" contendría los distitnos datos de cada persona añadida a la agenda
}


El caso es que, al querer añadir un nuevo usuario, con "personas *puntero = new personas" perdería el usuario anterior que hemos guardado.

Mi pregunta de forma concisa: ¿cómo se podría hacer para no perder las direcciones de las zonas de memoria a las que ha ido apuntando un puntero y asi poder volver a ellas?. Guardarlas en una tabla no tiene sentido ya que la tabla es finita.

Gracias y saludos.
#94
Programación C/C++ / Re: Secuencias en C++
24 Enero 2012, 15:46 PM
CitarMe parece una confusión:

* Con los arrays de caracteres no hay opción mas que reservar un elemento para el cero porque es obligatorio (si no hay '\0' no hay cadena).

* Cuando se declara un array se indica el numero de elementos, por ejemplo:
Código

Código (cpp) [Seleccionar]
string linea[100];

Esa declaración indica que el array consta de 100 elementos a los cuales se accede mediante los indices 0 .. 99. El elemento "linea[100]" no existe ya que seria el indice del elemento 101 y no hay tal en el array.

Vale, si me había confundido en ese aspecto, gracias por aclarármelo. Por lo tanto en un string si lo declaramos con 100 elementos (índices del 0 al 99) podremos usar 99 elementos (índices del 0 al 98) ya que el último es la marca de fin.

Lo de cin.getline me ha venido de perlas, gracias por vuestro tiempo. Saludos!
#95
Programación C/C++ / Re: Secuencias en C++
23 Enero 2012, 21:46 PM
Buenas:

A ver si me podéis responder otra duda: en las tablas y strings ¿siempre hay que dejar un último elemento para la marca final (\0)?, quiero decir, si queremos crear una tabla o un string de 30 elementos, hacemos "string cadena[30]", donde podemos usar los espacios del 0 al 29 (30 elementos) pero nunca el último (posición 30), ¿es asi?. Esto lo digo porque en el caso del string me da error si intento utilizar el último elemento, sin embargo en una tabla normal no da error ("char tabla[30]"), suponía que el string era una clase que definía una tabla y unas funciones asi que en cuanto a elementos se debería comportar igual.

Akai, he mirado los links y he encontrado esta otra página donde vienen explicados los vectores de forma más sencilla y en castellano: http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B/Biblioteca_Est%C3%A1ndar_de_Plantillas/Vectores

Lo que ocurre es que aqui el vector no lo define en una clase sino dentro del main, ¿es lo mismo que lo que tú me has indicado?.

Perdonad las molestias. Saludos!
#96
Programación C/C++ / Re: Secuencias en C++
23 Enero 2012, 18:44 PM
Gracias por tu tiempo, en lo que me respondían he seguido buscando por internet y encontré lo esto: http://www.clubdesarrolladores.com/articulos/mostrar/70-cpp-string-class-clase-cpp-para-cadenas-de-caracteres

He compilado el siguiente código usando la información de ese artículo:

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

int main()
{
   string s1;

   cin >> s1;
   cout << s1 << endl;
   cout << s1[4];
   cin;
   return 0;
}


Bien, el caso es que no da ningún error y al usar la función "string" no necesito definir el tamaño. Como podéis observar con el "cin" capturo tantos caracteres como introduzca el usuario, luego puedo imprimir el mensaje completo o acceder a solo uno de los elementos.

El único contra que he encontrado es que si introduces un texto con espacios, no guarda lo que haya después de un espacio.

Mi duda es: ¿es correcto el uso de esta forma del "string"?. ¿Hay alguna forma de manipular esta función para que también guarde los espacios y lo que haya después?. ¿Hay algún otro tipo de "string" que lea números-operandos?, es decir, no el caracter "1" sino el número 1 con el que se puede operar.

PD: Le echaré un vistazo a los links Akai.
#97
Programación C/C++ / Secuencias en C++
23 Enero 2012, 17:59 PM
Buenas tardes:

Estoy buscando la forma de introducir secuencias en C++, esto es, leer (cin) un texto o una secuencia de números de los cuales no sabemos cuál va a ser el tamaño. He buscado por internet y he encontrado cosas acerca de la librería string pero por lo que he visto es obligatorio indicar el número de elementos que va a tener la secuencia.

Las tablas (o arrays) no me sirven puesto que como ya he comentado la diferencia entre una tabla y una secuencia es que en la secuencia no sabemos cuántos elementos se van a introducir.

Gracias y saludos.
#98
Programación C/C++ / Re: Acerca de switch
21 Enero 2012, 16:59 PM
Gracias, he confirmado las dos cosas. Lo cierto es que al poner en el switch una variable booleana se puede hacer lo siguiente:

Código (cpp) [Seleccionar]
bool variable;
switch (variable)
{
    case true: //Instrucciones
    case false: //Instrucciones
}



No da ningún error y se ejecuta correctamente. Una cosa a tener en cuenta es que hablo de C++ no de C.

Saludos.
#99
Programación C/C++ / Acerca de switch
21 Enero 2012, 14:56 PM
Hi:

Tengo una duda en C++, según he leído el análisis de casos (switch) solo puede llevar un entero o caracter, ¿entonces cómo se haría para un número real o un booleano?.

Y también me gustaría saber cómo se ponen los rangos o periodos en C++, por ejemplo, en pascal para poner que se ejecute una instrucción en el caso de que la variable o contante tenga el valor del 1 al 5 se hace lo siguiente:

case variable of begin
1..5: //Instrucción a ejecutar
5..10: //Instrucción a ejecutar
end;


Como veis los dos puntos (..) le dicen al compilador que en caso de que "variable" tenga el valor del 1 al 5 se ejecute la instrucción, ¿cómo se marcan los periodos en C++?.

Gracias.