Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: J_F_NASH en 08 de Enero de 2008, 05:47:15 PM

Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: J_F_NASH en 08 de Enero de 2008, 05:47:15 PM
Tengo varios vectores...
int vector00[] = {0,1,2,3}
int vector01[] = {0,1,2,3}
int vector02[] = {0,1,2,3}

...y quiero, por ejemplo, añadir un valor a vector02 sin poner su nombre. Algo como esto:

int variable = 02;

vector***[2] = 300;


Donde he puesto los arteriscos (***) quiero que esté el valor de la variable. ¿Cual es la forma de hacerlo?

Recuerdo haber hecho esto en una ocasión pero no recuerdo como. El asunto es que no se que nombre tiene esto.



S2.
Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: tamat en 08 de Enero de 2008, 06:50:57 PM
ABERRACION!

qué tal un array bidimensional? un array de structs? de clases? un array de punteros a vectores, lo que sea menos eso porelamordedios!
Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: J_F_NASH en 08 de Enero de 2008, 07:35:00 PM
Cita de: "tamat"ABERRACION!
:mrgreen:  :mrgreen:  :mrgreen: Joer, pues no me reido ni na.

A ver, que sabia yo que no me explicaba.
No quiero un array bidimensional. Olvidemonos de los vectores que he puesto.
Supongamos:

Citarchar nombre1;
char nombre2;
char nombre3;

Lo que pregunto es:
int variable = 3;

//En lugar de poner esto asi:
nombre3 = "Miguelito";
//NO QUIERO PONER el numero sino el valor de variable.
nombre(variable) = 300;




S2
Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: vicho en 08 de Enero de 2008, 08:04:32 PM
con un array te deberia funcionar sin problemas
Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: Tei en 08 de Enero de 2008, 08:07:09 PM
Cita de: "J_F_NASH"
Supongamos:

Citarchar nombre1;
char nombre2;
char nombre3;

Lo que pregunto es:
int variable = 3;

//En lugar de poner esto asi:
nombre3 = "Miguelito";
//NO QUIERO PONER el numero sino el valor de variable.
nombre(variable) = 300;

S2

Que manera de torturar a un compilador.

Quizas se pueda hacer con aritmetica de punteros con algo asi:


//que maldito tio mete un 300 en un char?
((char *) (& nombre + variable))[0] = 300;//overflow!




Y quizas se pueda hacer algo asi:

//BAD IDEA!!!
#define INDIRECCIONADA(variable, indice) (char *) (& variable+ indice)[0]

INDIRECCIONADA(nombre,variable) = 300;

Esto en un mundo sano, de ensamblador, seria facil y hasta logico, con incluso soporte por parte de los nmotecnicos de ensamblador.
Pero poniendo por medio un compilador, este puede dejar huecos, de modo que tu aritmetica de punteros no sirve entre diferentes variables (si dentro de una variable)

Con lo facil que es hacer:


int numeros[3];//no recuerdo ahora mismo si es asi

int variable;

variable = 3;

numero[variable] = 300;
Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: Mars Attacks en 08 de Enero de 2008, 08:18:20 PM
Cita de: "J_F_NASH"
No quiero un array bidimensional.

[Moviendo la mano al estilo Jedi]Quieres un array bidimensional[/Moviendo la mano al estilo Jedi]
Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: [EX3] en 08 de Enero de 2008, 09:24:06 PM
Inclusive se puede tratar como un array unidimensional leyendo posiciones en x e y, como un mapa de bits por ejemplo, pero el array bidimensional te basta para lo que buscas, una lista de arrays. La otra no solo es "ortopedica" si no que no tiene sentido alguno el implementarlo mediante variables independientes disponiendo de un mecanismo diseñado para tal tarea.

Por que necesitas estrictamente que sea mediante variables independientes?

Salu2...
Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: swapd0 en 08 de Enero de 2008, 09:46:44 PM
Usando las stl::map puedes crear arrays heterogeneos y podras poner cosas como esto.

 nombre["foo"]=301;
Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: senior wapo en 08 de Enero de 2008, 11:28:36 PM
Ya que dices que lo has hecho una vez, no debe ser algo tan rebuscado (no te ofendas :P)

¿ No te referirás a un array de punteros a variables ?


int vector00[] = {0,1,2,3}
int vector01[] = {0,1,2,3}
int vector02[] = {0,1,2,3}

int * vectores[]={ vector00, vector01, vector02 };

int variable = 02;

vectores[variable][2] = 300;

Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: shephiroth en 08 de Enero de 2008, 11:42:32 PM
Desde luego, como me jode que la gente pregunte, se lo digas, Y TE DIGA QUE SE LO DICES MAL!?!?!?!?!?!

A ver, desde el primer post, tu lo q quieres es un array BIDIMENSIONAL:


int misDatos[][] = { {0,1,2,3,4} , {0,1,2,3,4} , {0,1,2,3,4} };
int pos = 2;
misDatos[pos][2] = 301;


Por ultimo, J_F_NASH, se que no eres nuevo asi que te daré un consejo de buen royo.......si haces una pregunta, y te responden, puedes sacar todas las pegas y repreguntar, pero JAMAS niegues la solucion que te han dado.
Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: J_F_NASH en 09 de Enero de 2008, 08:17:07 AM
No puedo hacerlo con arreglos bidimensionales, utilizo z88dk una librería que utiliza un lenguaje que llaman C (mismas librerias, sintaxis,... ) solo que no puedes utilizar tablas solo vectores :?.

En cualquier, caso gracias por las respuestas, siempre saco algo interesante  8) .

Ultima edición:
¿Por aquí no había un foro para desarrolladores principiantes o algo así?.

S2.
Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: J_F_NASH en 09 de Enero de 2008, 10:08:20 AM
Cita de: "senior wapo"
¿ No te referirás a un array de punteros a variables ?

int vector00[] = {0,1,2,3}
int vector01[] = {0,1,2,3}
int vector02[] = {0,1,2,3}

int * vectores[]={ vector00, vector01, vector02 };
int variable = 02;
vectores[variable][2] = 300;

Esto me funciona correctamente, creo que es lo que buscaba. Pero... vectores[variable][2] ¿no es un arreglo bidimensional?.

Ultima edición:
Vale, creo que ya entiendo z88dk no me permite hacer matrices pero si arreglos bidimensionales:

int arreglo[10][10] = {0,0,0,0,0,0,...} //esto no me deja hacerlo.


S2.
Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: swapd0 en 09 de Enero de 2008, 01:21:54 PM
Para inicializar array bidimensionales tienes que ponerlo asi:

int array[4][4] = {
 { 0, 1, 2, 3},
 { 0, 1, 2, 3},
 { 0, 1, 2, 3},
 { 0, 1, 2, 3}
}
Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: senior wapo en 09 de Enero de 2008, 02:10:49 PM
No, lo que yo te he puesto no es un array bidimensional.

Es un array normal simple, pero que contiene punteros, es decir, referencias a otras variables, que a su vez pueden ser arrays.

En el ejemplo puesto, los vectores pueden tener distinto tamaño sin problemas, ya que no tienen necesidad de estar consecutivos en memoria ni tener el mismo tamaño.
Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: shephiroth en 09 de Enero de 2008, 10:17:28 PM
Cita de: "J_F_NASH"Pero... vectores[variable][2] ¿no es un arreglo bidimensional?.
Si, tienes razon, puede verse como un array bidimensional....si quieres que se distinga mejor y se vea como un vector de punteros a un array siempre puedes trabajar con punteros.....me explico:


int ** variables;
int cantidad = 4;
variables = (int**)malloc(sizeof(int*)*cantidad);
...
int[] dato0 = new int[]{10,0,2,3,4};
int[] dato1 = new int[]{10,0,2,3,4};
int[] dato2 = new int[]{10,0,2,3,4};
int[] dato3 = miFuncion(...);
...
variables[0] = dato1;
variables[1] = dato1;
variables[2] = dato2;
variables[3] = dato3;
...
(*(variables+posicion))[2]=300;

He separado las 4 secciones....creacion de nuestro vector, obtencion de vectore de enteros, asignacion de los vectores a nuestro vector, y acceso a los numeros.
Título: ¿Cómo se llama esto que quiero hacer?
Publicado por: Prompt en 14 de Enero de 2008, 09:00:35 PM
CODING HORROR!

Como diria el libro Code Complete :)

Tambien podemos recurrir a: Horror! como diria Gaybrush treepgood ( o como sea :) en sus inicios! :P