Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





¿Cómo se llama esto que quiero hacer?

Iniciado por J_F_NASH, 08 de Enero de 2008, 05:47:15 PM

« anterior - próximo »

J_F_NASH

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.

tamat

ABERRACION!

qué tal un array bidimensional? un array de structs? de clases? un array de punteros a vectores, lo que sea menos eso porelamordedios!
Por un stratos menos tenso

J_F_NASH

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

vicho

con un array te deberia funcionar sin problemas

Tei

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;

Mars Attacks

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]

[EX3]

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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

swapd0

Usando las stl::map puedes crear arrays heterogeneos y podras poner cosas como esto.

 nombre["foo"]=301;

senior wapo

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;


shephiroth

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.

J_F_NASH

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.

J_F_NASH

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.

swapd0

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

senior wapo

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.

shephiroth

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.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.