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
#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;
}
No puedes crear un arreglo de mas de una dimensión sin especificar al menos las dimensiones que tiene, excepto la última
char A1[][] = "AAAA";
char C1[][] = "CC";
Eso no puedes hacerlo, es mas, debe de decirtelo claramente el compilador
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
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.
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
#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;
}
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
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
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.