Cómo agregar varios arreglos en un arreglo de dos dimensiones

Iniciado por UmbraNoche, 5 Febrero 2015, 20:35 PM

0 Miembros y 2 Visitantes están viendo este tema.

UmbraNoche

Buenas gente, soy nuevo en esto de la programación en C++. Les escribo para saber si me pueden ayudar con esta duda, he estado tratando por todos lados pero no lo consigo. Les doy las gracias de antemano

Mi duda es la siguiente cómo puedo hacer para agregar varios arreglos de tipo char a un arreglo char de 10x10. Mi idea es hacer que estos arreglos se agreguen al arreglo 10x10 para luego hacer que el contenido de los mismos aparezcan en posiciones aleatorias tanto en vertical como en horizontal.

Aquí les dejo mi código y les pido disculpas de antemano porque está malísimo lo que hice pero es lo que humildemente pude hacer hasta ahora

Código (cpp) [Seleccionar]
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <string>

using namespace std;

int main(){

    char matriz[10][10];

    char A1[][] = "AAAA";
    char C1[][] = "CC";

    for(int fila = 0; fila < 10; fila++){
        for(int columna = 0; columna < 10; columna++)
            matriz[fila][columna] = C1[];
    }

    for(int f = 0; f < 10; f++){
        for(int c = 0; c < 10; c++)
            cout << matriz[f][c];

        cout << endl;
    }

    for(int i = 0; i < 10; i++){
        for(int j = 0; j < 10; j++)
            matriz[i][j] = A1[];
    }

    for(int x = 0; x < 10; x++){
        for(int y = 0; y < 10; y++)
            cout << matriz[x][y];
    }

    return 0;
}
"Si tienes un sueño entonces aferrate a el con constancia, sacrificio y dedicación".

Orubatosu

No puedes crear un arreglo de mas de una dimensión sin especificar al menos las dimensiones que tiene, excepto la última

Código (cpp) [Seleccionar]

char A1[][] = "AAAA";
    char C1[][] = "CC";


Eso no puedes hacerlo, es mas, debe de decirtelo claramente el compilador
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998

_Enko

Hola, me parece que estas enfocando el tema distinto.

No creo que necesitas poner C1[][] en matriz[][]. Sino el contenido de c1[][] en la matriz[][].
De lo contrario matriz[][] en vez de ser de char, tendria que ser de punteros a c1[][];

Supongamos que matriz[][] contiene todo '0'; (10x10)
Citar
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000

Luego tienes c1, que contiene todo A, pero con un tamaño de 5x5
Citar
AAAAA
AAAAA
AAAAA
AAAAA
AAAAA

Entonces si por ejemplo quieres colocar c1[][] en la esquina inferior derecha, harias
Código (cpp) [Seleccionar]

int pos_x = 5;
int pos_y = 5;
for(int i=0; i<=4; ++i)
   for(int j=0; j<=4; ++j)
          matriz[pos_x+i][pos_y+j] = c1[i][j];


Y te queda algo como
Citar
0000000000
0000000000
0000000000
0000000000
0000000000
00000AAAAA
00000AAAAA
00000AAAAA
00000AAAAA
00000AAAAA


Saludos.

UmbraNoche

Gracias por el dato Orubatosu, tienes toda la razón. Aquí hice la corrección pero decidí hacer los arreglos string, para no liarme con los indices, pero igual al hacer eso no logro agregar los string a mi arreglo de 10x10. De antemano gracias

Código (cpp) [Seleccionar]
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <string>

using namespace std;

int main(){

    string matriz[10][10];

    string A1 = ("AAAA");
    string C1 = ("CCC");

    for(int fila = 0; fila < 10; fila++){
        for(int columna = 0; columna < 10; columna++)
            matriz[fila][columna] = A1;
    }

    for(int f = 0; f < 10; f++){
        for(int c = 0; c < 10; c++)
            cout << matriz[f][c];

        cout << endl;
    }

    for(int i = 0; i < 10; i++){
        for(int j = 0; j < 10; j++)
            matriz[i][j] = C1;
    }

    for(int x = 0; x < 10; x++){
        for(int y = 0; y < 10; y++)
            cout << matriz[x][y];
    }

    return 0;
}
"Si tienes un sueño entonces aferrate a el con constancia, sacrificio y dedicación".

UmbraNoche

Cita de: _Enko en  5 Febrero 2015, 22:31 PM
Hola, me parece que estas enfocando el tema distinto.

No creo que necesitas poner C1[][] en matriz[][]. Sino el contenido de c1[][] en la matriz[][].
De lo contrario matriz[][] en vez de ser de char, tendria que ser de punteros a c1[][];

Supongamos que matriz[][] contiene todo '0'; (10x10)
Luego tienes c1, que contiene todo A, pero con un tamaño de 5x5
Entonces si por ejemplo quieres colocar c1[][] en la esquina inferior derecha, harias
Código (cpp) [Seleccionar]

int pos_x = 5;
int pos_y = 5;
for(int i=0; i<=4; ++i)
  for(int j=0; j<=4; ++j)
         matriz[pos_x+i][pos_y+j] = c1[i][j];


Y te queda algo como

Saludos.


Muchas gracias _Enko, de verdad me haz iluminado, sólo una pregunta entonces para meter el contenido de los arreglo a la matriz 10x10 debo hacerlo mediante punteros? Gracias de antemano
"Si tienes un sueño entonces aferrate a el con constancia, sacrificio y dedicación".

_Enko

#5
Hola, si quieres colocar el contenido de c1 en la matriz, entonces no, no necesitas de punteros. Solo debes usar dos for y hacer

matriz[i][j] = c1[i][j].


Ahora, si quieres hacer algo como

matriz[i][j] = c1

Entonces si toca usar punteros. Pero realmente no le veo sentido  practico ya que hay dos opciones:
1)matriz sería en realidad matriz[][][][]... de 4 dimensiones, demasiado rebuscado.
2)matriz aun siendo matriz[][][][] tendria 2 dimensiones y cada celda guardaria otras dos celdas. Es decir, tendrias matriz[][] que contiene adentro otras.
Si por ejemplo ambas son de 10x10. Tendrias matriz[1][1] contendria una matriz de 10x10.
Y pienso yo, en este caso, no seria mas conveniente hacer matriz 100x100? Si vas a meter un 10x10 para cada celda de matriz, tendrias en realidad una matriz de 100x100 en vez de 10x10 guardando otros 10x10.

En el caso 1, 4 dimensiones es poco practico al menos que estes haciendo un ejercicio de fisica avanzada y necesitas un grafico de 4 dimensiones.

En el caso 2, nuevamente poco practico ya que solucionas haciendo la matriz original mas grande.

Saludos.