Jump to content

Pregunta Sobre C++


amalahama

Recommended Posts

A esos esssssspertos anónimos que pululan por el foro:

 

¿Como puedo ir asignando valores a un array cuya dimension no conozco de antemano?

 

Es decir, hasta ahora, lo que está claro es que uno puede definir un array de unas dimensiones determinadas y luego ir rellenandolo de datos. ¿Pero que ocurre si no se conoce las dimensiones array de antemano? Hay alguna formula de irle asignando valores y que el array se adapte de forma dinámica?

 

Gracias de antemano!!

 

Saludos!!!!!

Link to comment
Share on other sites

A esos esssssspertos anónimos que pululan por el foro:

 

¿Como puedo ir asignando valores a un array cuya dimension no conozco de antemano?

 

Es decir, hasta ahora, lo que está claro es que uno puede definir un array de unas dimensiones determinadas y luego ir rellenandolo de datos. ¿Pero que ocurre si no se conoce las dimensiones array de antemano? Hay alguna formula de irle asignando valores y que el array se adapte de forma dinámica?

 

Gracias de antemano!!

 

Saludos!!!!!

 

Supongo que habra alguna funcion/procedimiento que te al trabajar sobre la posicion del indice pueda devolverte algun codigo de error.

Luego miras si el codigo de error es cero para verificar si se pudo hacer la operacion con exito y por lo tanto el indice era valido, si da otra cosa distinta de cero, te passate del limite del array

 

¿Que funcion? Pues ahora mismo no se me ocurre ninguna. Bueno, si sabes al menos el tipo de datos que contienen el array puede intentar hacer una operacion compleja, como una raiz cuadrada o de tratamioento de textos y comprobar el resultado y el codigo de error.

 

Asi a bote pronto es lo primero q se me escurre de la sesera, con el problema por delante habria que madurar la idea.

Link to comment
Share on other sites

Bueno y si sabes el tipo de memoria tambien podrias preguntar la cantidad de memoria que ocupa y dividir.

 

Lo que no me acuerdo es si el array tenia todo el espacio de memoria reservado desde el principio o lo va pillando conforme se llena.

Si ocurre de esta segunda forma puedes ir recorriendolo y llenando la posicion. Si la memoria que ocupa es mayor la posicion era valida, si no esa posicion esta fuera de rango.

 

Pero ahora que empiezo a ver codigo entre mis ojos y la pantalla, creo que directamente se puede preguntar por el exito de una asignacion A="loquetedelagana" y si dio cero esta dentro, si no, te saliste de rango. Se que se puede hacer poro ahora no me acuerdo, hace mil años q no toco C o C++

Link to comment
Share on other sites

Caya coño que creo que hay una funcion Error o Err o algo asi que dice si la ultima operacion realizada tuvo exito.

 

No me acuerdo muy bien, ya te digo, no se si eso era solo para apertura de archivos o valia para mas cosas, que ahora que lo pienso tambien puedes volcar el aaray a un archivo y... no por que si te pasa de indice te llenara el archivo de basura pero no sabras cuando acaba el array.

 

Busca la funcio error esa que te digo que yo creo que es la buena.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

buf que ganas de programar de una puta veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeezzzzzz

Link to comment
Share on other sites

Bueno, pues la verdad es que hace algun tiempo que no toco C y eso hace que lo que diga este un poco en el aire, pero con las listas, tu defines el tipo de estructura que te convenga para la lista, y dinamicamete vas añadiendo nodos, de esta forma, el espacio se va ocupando dinamicamente y no tienes que establecer un tamaño a priori.

 

Eso si, las listas como estructura tienen el problema de ser altamente inceficientes si son muy grandes para tareas de busqueda y demas, por eso hay otras estrucutras mas avanzandas que las listas como los heaps, y demas historias, pero eso ahora mismo escapara a tu pregunta.

Link to comment
Share on other sites

Bueno, pues la verdad es que hace algun tiempo que no toco C y eso hace que lo que diga este un poco en el aire, pero con las listas, tu defines el tipo de estructura que te convenga para la lista, y dinamicamete vas añadiendo nodos, de esta forma, el espacio se va ocupando dinamicamente y no tienes que establecer un tamaño a priori.

 

Eso si, las listas como estructura tienen el problema de ser altamente inceficientes si son muy grandes para tareas de busqueda y demas, por eso hay otras estrucutras mas avanzandas que las listas como los heaps, y demas historias, pero eso ahora mismo escapara a tu pregunta.

 

Y no hay forma de hacerlo sin tener que usar estructuras? Podría redefinir el tamaño de un array con contenido dentro sin que me borre lo que ya tiene?? Por ejemplo, tengo un array de 4x4, con todas las celdas con datos numéricos, y quiero una fila más, para dejar el array en 5x4, e ir metiendo datos adicionales. Podria redefinir las dimensiones del array con los datos en su interior?

 

Saludos!!

Link to comment
Share on other sites

Coño, pues la verdad que me tendria que mirar un poco el libro porque sin tocarlo en un año no tengo confianza para asegurar nada :D , pero supongo que dinamicamente con punteros sobre matrices con lo tipoico de int ** algo ase podria hacer. Si tienes algun libro seguramente aparecera.

 

 

 

De todas formas, no entiendo muy bien lo que quieres, una cosa es hacer el programa y otra usarlo, normalmente cuando lo estas usando ya deberias conocer el tamañao de la matriz que vas a meter, entonces es muy facil, creas la matriz dinamicamente en el programa, y dos variables para las dimensiones, y una vez ejecutas el programa le metes las dimesiones que quieras, y el ya te crea la matriz reservando espacio en memoria.

Link to comment
Share on other sites

Ayyyyy los punteros... esos grandes hijoputas :xd: Bueno lo mirare a ver, hay que ver que todo en la vida se puede arreglar usando punteros. ¿Que te echan del trabajo? Usa punteros. ¿Que te deja tu novia? Usa punteros. ¿Que el escuadron 69 se cae por 2 meses? Usa punteros :D

 

Saludos!!

 

EDITO-> Puede hacerte falta si no sabes bien que es lo que te van a meter. No se, si quieres guardar en memoria vértices de un polígono que no sabes a priori como es, o si quieres ir rellenando resultados de un numero de iteraciones de calculos que no sabes cuando van a acabar.

Link to comment
Share on other sites

EDITO-> Puede hacerte falta si no sabes bien que es lo que te van a meter. No se, si quieres guardar en memoria vértices de un polígono que no sabes a priori como es, o si quieres ir rellenando resultados de un numero de iteraciones de calculos que no sabes cuando van a acabar.

 

Aqui ya te empiezas a explicar, y como siempre terminas hablando de lo que te van a meter, nada nuevo bajo el solo... :xd: :xd:

 

Bueno, cuando se trabaja dinamicamente, no es tan importante el tamaño de memoria que quieras reservar, como definir la estructura, tu lo que tienes que hacer es denfinir las dimensiones de la matriz ya se 1, 2, 3, etc... y una vez tengas eso decidido, si no tienes claro cuantos datos vas a meter, lo que tienes que hacer es reservar mucha memoria, miles de posiciones, y asi te curas en salud de que no te vas a quedar corto o te vas a aburrir de picar datos... :D

 

Si tienes recursos es lo mejor, lo mas rapido, y lo mas sencillo, con las listas, arboles, que llevan nodos, se puede y reservando memoria nodo a nodo, pero eso lo que hace es aprovechar muy bien los recursos y optimazar muy bien el programa sacrificando rapidez y eficiencia, que es precisamente lo que tu quieres, asi que sin dado haria lo primero.

Link to comment
Share on other sites

EDITO-> Puede hacerte falta si no sabes bien que es lo que te van a meter. No se, si quieres guardar en memoria vértices de un polígono que no sabes a priori como es, o si quieres ir rellenando resultados de un numero de iteraciones de calculos que no sabes cuando van a acabar.

 

Aqui ya te empiezas a explicar, y como siempre terminas hablando de lo que te van a meter, nada nuevo bajo el solo... :xd: :xd:

 

Bueno, cuando se trabaja dinamicamente, no es tan importante el tamaño de memoria que quieras reservar, como definir la estructura, tu lo que tienes que hacer es denfinir las dimensiones de la matriz ya se 1, 2, 3, etc... y una vez tengas eso decidido, si no tienes claro cuantos datos vas a meter, lo que tienes que hacer es reservar mucha memoria, miles de posiciones, y asi te curas en salud de que no te vas a quedar corto o te vas a aburrir de picar datos... :D

 

Si tienes recursos es lo mejor, lo mas rapido, y lo mas sencillo, con las listas, arboles, que llevan nodos, se puede y reservando memoria nodo a nodo, pero eso lo que hace es aprovechar muy bien los recursos y optimazar muy bien el programa sacrificando rapidez y eficiencia, que es precisamente lo que tu quieres, asi que sin dado haria lo primero.

 

 

A laaa animalada acabas de soltar, se que es un poco de coña, espero que mucho :xd::xd:

No se si en C / C++ se puede, pero hay lenguajes en los que puedes definir variables sin tipo a la espera de que le entre un dato y coger el tipo necesario.

Aparte te puedes hacer un objeto Nodo o ArrayElement y otro objeto Array que los gestione, de forma que puedes ir creando nodos conforme te van haciendo falta.

Es una idea asi a lo fruto que seguro necesita mucho MUCHO pulimento. Creoq ue seria mas rapido de implementar y gestionar que una lista de punteros pura y dura.

 

Teniendo un Array para cada dimension tambien puedes crearte tantas dimensiones como quieras en un flus

 

A los ArrayElement le puedes crear varias variables de varios tipos y ya se encargara el de usar la variable que le corresponda al tipo entrado.

 

que ya digo que esto esta dicho a las 0:20 de la noche y tengo mas sueño que yo que se, pero se esta copiando un DVD de doble capa a x2.4 y tarda lo mas grande :xd::xd::xd: q si no ya me habria acostado y que le zurzan a amalacamaporlanoche y sus putos arrays :xd::xd::xd:

 

 

Es cuestion de madurar la idea a ver a donde nos lleva.

Link to comment
Share on other sites

Yo de tí me miraría la STL (Standard Template Library). Tiene una eficiencia similar a trabajar con punteros pero es muchisimo mas sencilla y segura de utilizar. Un Array clásico equivale a la clase vector, y si es multidimensional siempre puedes definir un vector de vectores. Si no no te va a quedar mas remedio que trabajar con punteros y asignación dinámica de memoria, como los hombres :xd:

 

Si no conoces la librería puedes echar un vistazo a http://www.sgi.com/tech/stl/. Muchos compiladores la soportan de forma nativa, y si no existen versiones en código fuente que se pueden incluir en cualquier proyecto.

 

Hace un par de años que no toco C++ pero si pones algun ejemplo mas concreto creo que puedo ofrecerte algun fragmento de código. Yo la utilicé extensivamente en un indexador de texto que se hizo en mi empresa y te puedo asegurar que quedamos mas que satisfechos con ella.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

Some pretty cookies are used in this website