Es increible como despues de tanto tiempo sigues ayudando a gente con tus videos, voy a 3ºESO y siempre me ha interesado el como iba la programación pero me parecía difícil. Empecé viendo tus videos hace pocas semanas y mira ya estoy aquí. Muchas gracias!!
Muchas gracias bro, gracias a este video entendi al fin como se maneja la memeoria dinamica para matrices y el porque de la funcion malloc, que lastima que tiene tan poco likes tu video. Es el único que me ha ayudado!! Saludos
Hola, llevo haciendo el curso desde hace unas semanas y hasta ahora todo ha ido sobre ruedas, es muy didáctico y dinámico, sin embargo en este bloque he tenido unos problemas que no he sido capaz de resolver: a la hora de compilar el programa no suelta errores ni nada, pero en la ejecución no reserva el espacio de memoria solicitado para las matrices y hace cosas extrañas, he reescrito el codigo en varias ocasiones y aun así no consigo resolver el error. Te comparto lo que he escrito a ver si puedes darme una mano. Desde ya muchas gracias. el canal y los cursos son de lo mejor. Te dejo el código: #include #include int main () {
int **m1; int **m2; int filas,colum,i,j;
printf("Introduce el numero de filas: "); scanf("%i",&filas);
printf("Introduce el numero de columnas: "); scanf("%i",&colum);
m1 = (int**)malloc(filas*sizeof(int*)); if (m1==NULL){ printf("No se ha podido reservar memoria. "); exit(1); } for (i = 0; i < filas; i++){ m1[i] = (int*)malloc(colum*sizeof(int)); if (m1[i]==NULL){ printf("No se ha podido reservar memoria. "); exit(1); } }
ya entendi xD pero tuve que ir a otras fuentes de información aunque aprecio mucho tu intensión de explicar y gracias por eso hubiese usado valores predeterminados por ejemplo filas = 3; colum = 3; ya que estabas explicando en base a 3 columnas y filas en el ejemplo de la grafica
Bloque 7.2: Malloc y Realloc con Vector Dinamico en este vídeo (minuto 7:00) dices que junto al vector hay que poner tantos * como tenga el vector/matriz, restándole uno. En éste, sin embargo, has escrito m1 y m2 sin nigún *. ¿Son prescindibles o te equivocaste en el 7.2?
m1 = (int**)malloc(filas*sizeof(int*)); La primera vez se declara asi para indicar que es una matriz de ahi para darle memoria a los vectores dentro de la matriz se hace m1[i] = (int*)malloc(colum*sizeof(int)); por que son eso vectores dentro de una matriz y ya no es necesario poner los dos asteriscos **
Yo lo he realizado con funciones, no se si es correcto pero funciona: ------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------- #include #define Max_filas 20 #define Max_columnas 20 // Declaracion Funciones void LecturaMatriz(int Matriz2x2[Max_filas][Max_columnas], int *filas, int *columnas); void ImprimirMatriz(int Matriz2x2[Max_filas][Max_columnas], int *filas, int *columnas); //Main void main(){ int Matriz2x2[Max_filas][Max_columnas]; int filas, columas; LecturaMatriz(Matriz2x2, &filas, &columas); printf(" -Pa rellenar- "); ImprimirMatriz(Matriz2x2, &filas, &columas); printf("Terminado "); } //Funciones void LecturaMatriz(int Matriz2x2[Max_filas][Max_columnas], int *filas, int *columnas){ printf("Dame el numero de filas: "); scanf("%d",filas); printf("Dame el numero de columnas: "); scanf("%d",columnas); int datos, DameFila = 1; //Tiene que ser < 2 porque es una matriz 2x2 for ( int fila = 1; fila
Excelente Vídeo, vaya que me ha gustado demasiado, he aquí mi DUDA: ¿Es posible crear un numero de matrices "n", y cada matriz con "x" columnas y "y" filas?
lo tengo escrito igual, pero al poner los valores me marca que el programa dejo de funcionar. tiene algo que ver que lo haga en dev c++? o tengo un error?
tengo varias dudas pero la que me causa mayor inquietud es por que cuando vas a poner las columnas pones por ejemplo m1[i] y xq usas un bucle cuando en las filas no lo usastes
Asumiendo que es una matriz de 3*3 entonces corresponde a v+8 si no me equivoco..o sea v[0][0]=v+0, v[0][1]=v+1 , v[0][2]=v+2, v[1][0]=v+3, v[1][1]=v+4, v[1][2]=v+5, v[2][0]=v+6, v[2][1]=v+7, v[2][2]=v+8.. Se que esto se responde 3 años despues pero si a alguno le sirve..
Yo lo que no entiendo muy bien, es, por qué cada vez que se le asigna los valores a las filas/columnas solo es «m1[i]», por que una matriz es así «matriz[filas][columnas]», y «m1[i]» hace referencia solo a las filas, en los dos de los casos y aun así se crean las columnas........a no ser...que para eso sirvan los punteros....es la única cosa lógica que se me ocurre, o sea, **m1 el primer puntero hace referencia a las filas y en el segundo (asignación de memoria ) se utiliza solo un puntero.... matriz [*] [*] ======== matriz[filas]: con los dos punteros accedemos a las filas. matriz [ ] [*]=========matriz[columnas]: con uno, a las columnas. estoy en lo correcto???????????
duda: porque tenemos que inicializar solo m1 en filas y despues m1[i] en todas las columnas., no solo en una como en las filas. m1 = (int*) malloc (filas*sizeof(int)); for(i=0; i
No entiendo muy bien tu pregunta, pero me aventuro a contestarte, como una matriz es un vector de vectores, y al ya haber reservado memoria para las filas, hay que reservar memoria para las columnas, y eso se hace por bucle. Esto es porque a cada fila le corresponden un numero concreto de columnas. Ademas, al tener mas de una fila, hemos de usar bucles para poder reservar toda la memoria de la matriz
Saludos amigo, muy buen vídeo felicidades, tengo un problema, e tratado de usar el realloc para el aumento en una matriz dinámica, realice todo igual como lo hiciste tu, y al momento de aplicar el realloc solo me aumentan las columnas, sabes como aumentar filas?, te dejo una parte del algoritmo que estoy usando coutfx; coutcx; p=(int**) realloc(p,sizeof(int)*(inf+fx)); for(int i=0;ip[i][j]; } } cout
+jeem19961229 usas c++ y no c, el uso de calloc, malloc y realloc no te aseguro que sea igual. En el futuro si no haces las cosas igual que yo las enseño (usando C++ por ejemplo), mejor abstenerse de preguntar. Un saludo.
Hola ke tal, me podrias alludar. quiero saber si esta bien o que y que realice mal con este ejemplo. me podrias decir si es un Objeto dinámico con la forma que ise. o si está totalmente mal y no es dinámico o si. por favor. #include #include #include using namespace std; class AUTO { private: std::string _color; std::string _marca; int _precio; public: void ingresar(string nombre, string marca, int precio); }; void AUTO::ingresar(string nombre, string marca, int precio) {
A mi igual con realloc me compila bien, miren: typedef struct { char *nombre; char *autor; }libro; void cambio(char aux[50]); int main(){ char aux[50]; libro JDT; printf("Introduce un nombre para el libro: "); fgets(aux,50,stdin); cambio(aux); JDT.nombre = (char*)realloc(JDT.nombre,(strlen(aux)+1)*sizeof(char)); if(JDT.nombre == NULL) { printf("No se a podido reservar memoria. "); exit(1); } strcpy(JDT.nombre,aux); printf("Introduce un autor para el libro: "); fflush(stdin); fgets(aux,50,stdin); cambio(aux); JDT.autor = (char*)malloc((strlen(aux)+1)*sizeof(char)); if(JDT.autor == NULL) { printf("No se a podido reservar memoria. "); exit(1); } strcpy(JDT.autor,aux); printf ("%s. ",JDT.nombre); printf ("%s. ",JDT.autor); free(JDT.nombre); free(JDT.autor); system("pause"); return 0; } void cambio(char aux[50]){ int i, temp = 0; for(i=0; i
Es increible como despues de tanto tiempo sigues ayudando a gente con tus videos, voy a 3ºESO y siempre me ha interesado el como iba la programación pero me parecía difícil. Empecé viendo tus videos hace pocas semanas y mira ya estoy aquí. Muchas gracias!!
Dios es bueno el video y me ha ayudado para una tarea a pesar de que este video ya ti 10 años pero hasta ahorita sigue funcionando
Muchas gracias bro, gracias a este video entendi al fin como se maneja la memeoria dinamica para matrices y el porque de la funcion malloc, que lastima que tiene tan poco likes tu video. Es el único que me ha ayudado!! Saludos
Muchas gracias por el aporte, me sirvio de mucho, saludos
realmente eres el papu de los papus
Muy bien explicado
Hola, llevo haciendo el curso desde hace unas semanas y hasta ahora todo ha ido sobre ruedas, es muy didáctico y dinámico, sin embargo en este bloque he tenido unos problemas que no he sido capaz de resolver: a la hora de compilar el programa no suelta errores ni nada, pero en la ejecución no reserva el espacio de memoria solicitado para las matrices y hace cosas extrañas, he reescrito el codigo en varias ocasiones y aun así no consigo resolver el error. Te comparto lo que he escrito a ver si puedes darme una mano. Desde ya muchas gracias. el canal y los cursos son de lo mejor.
Te dejo el código:
#include
#include
int main () {
int **m1;
int **m2;
int filas,colum,i,j;
printf("Introduce el numero de filas: ");
scanf("%i",&filas);
printf("Introduce el numero de columnas: ");
scanf("%i",&colum);
m1 = (int**)malloc(filas*sizeof(int*));
if (m1==NULL){
printf("No se ha podido reservar memoria.
");
exit(1);
}
for (i = 0; i < filas; i++){
m1[i] = (int*)malloc(colum*sizeof(int));
if (m1[i]==NULL){
printf("No se ha podido reservar memoria.
");
exit(1);
}
}
for(i= 0; i
Buenas, utiliza el depurador, ahi veras como se esta comportando el codigo. Un saludo.
Estas incrementando la i dos veces. Segundo for de la sección scanf("%i",&m1[i][j]); debes incrementar j
Eres un crak tio. me ha ayudado mucho este video 🤙🏻
Gracias Master!! Me quedó clarísimo!!!
Cuando haces scanf y les con %i es por ser tipo entero, si lo declarara con float sería %f
ya entendi xD pero tuve que ir a otras fuentes de información aunque aprecio mucho tu intensión de explicar y gracias por eso hubiese usado valores predeterminados por ejemplo filas = 3; colum = 3; ya que estabas explicando en base a 3 columnas y filas en el ejemplo de la grafica
creo que se olvido liberar la memoria en este y en los siguientes videos.
Gracias
Excelente explicación :D
Bloque 7.2: Malloc y Realloc con Vector Dinamico en este vídeo (minuto 7:00) dices que junto al vector hay que poner tantos * como tenga el vector/matriz, restándole uno. En éste, sin embargo, has escrito m1 y m2 sin nigún *. ¿Son prescindibles o te equivocaste en el 7.2?
m1 = (int**)malloc(filas*sizeof(int*)); La primera vez se declara asi para indicar que es una matriz de ahi para darle memoria a los vectores dentro de la matriz se hace m1[i] = (int*)malloc(colum*sizeof(int)); por que son eso vectores dentro de una matriz y ya no es necesario poner los dos asteriscos **
perdona, si se creara una matriz de mas de 2 dimensiones de forma dinamica habria que poner por ejemplo ***m1?(para matriz de 3 dimensiones)
+NeoGamer ESP Exacto.
Yo lo he realizado con funciones, no se si es correcto pero funciona:
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
#include
#define Max_filas 20
#define Max_columnas 20
// Declaracion Funciones
void LecturaMatriz(int Matriz2x2[Max_filas][Max_columnas], int *filas, int *columnas);
void ImprimirMatriz(int Matriz2x2[Max_filas][Max_columnas], int *filas, int *columnas);
//Main
void main(){
int Matriz2x2[Max_filas][Max_columnas];
int filas, columas;
LecturaMatriz(Matriz2x2, &filas, &columas);
printf("
-Pa rellenar-
");
ImprimirMatriz(Matriz2x2, &filas, &columas);
printf("Terminado
");
}
//Funciones
void LecturaMatriz(int Matriz2x2[Max_filas][Max_columnas], int *filas, int *columnas){
printf("Dame el numero de filas: ");
scanf("%d",filas);
printf("Dame el numero de columnas: ");
scanf("%d",columnas);
int datos, DameFila = 1;
//Tiene que ser < 2 porque es una matriz 2x2
for ( int fila = 1; fila
ta de pana hnitooo
Excelente Vídeo, vaya que me ha gustado demasiado, he aquí mi DUDA: ¿Es posible crear un numero de matrices "n", y cada matriz con "x" columnas y "y" filas?
lo tengo escrito igual, pero al poner los valores me marca que el programa dejo de funcionar.
tiene algo que ver que lo haga en dev c++?
o tengo un error?
¿Cómo se programaría una matriz dinámica donde solo quiero que las filas sean estáticas (p.e. 10) y que las columnas sean dinámicas? ¿Y viceversa?
Buenas noches, si no es una matriz cuadrada, ¿Qué se tiene que modificar en el código?
Saludos
Gracias
Pregunta: como hago para destruir la matriz (liberar la memoria)?
Y porque no libera la memoria con free?
se olvido claramente, es imprescindible
tengo varias dudas pero la que me causa mayor inquietud es por que cuando vas a poner las columnas pones por ejemplo m1[i] y xq usas un bucle cuando en las filas no lo usastes
+Carlos Santaella ya vi!! jjaja hay que ver que para programar hay que entender los detalles del proceso de casa paso
tengo una duda si v[2] es igual a v+2 entonces v[2][2] a que corresponde sin esos corchetes o no se puede de esa forma?
Asumiendo que es una matriz de 3*3 entonces corresponde a v+8 si no me equivoco..o sea
v[0][0]=v+0,
v[0][1]=v+1 ,
v[0][2]=v+2,
v[1][0]=v+3,
v[1][1]=v+4,
v[1][2]=v+5,
v[2][0]=v+6,
v[2][1]=v+7,
v[2][2]=v+8..
Se que esto se responde 3 años despues pero si a alguno le sirve..
Yo lo que no entiendo muy bien, es, por qué cada vez que se le asigna los valores a las filas/columnas solo es «m1[i]», por que una matriz es así «matriz[filas][columnas]», y «m1[i]» hace referencia solo a las filas, en los dos de los casos y aun así se crean las columnas........a no ser...que para eso sirvan los punteros....es la única cosa lógica que se me ocurre, o sea, **m1
el primer puntero hace referencia a las filas y en el segundo (asignación de memoria ) se utiliza solo un puntero....
matriz [*] [*] ======== matriz[filas]: con los dos punteros accedemos a las filas.
matriz [ ] [*]=========matriz[columnas]: con uno, a las columnas. estoy en lo correcto???????????
duda: porque tenemos que inicializar solo m1 en filas y despues m1[i] en todas las columnas., no solo en una como en las filas.
m1 = (int*) malloc (filas*sizeof(int));
for(i=0; i
No entiendo muy bien tu pregunta, pero me aventuro a contestarte, como una matriz es un vector de vectores, y al ya haber reservado memoria para las filas, hay que reservar memoria para las columnas, y eso se hace por bucle. Esto es porque a cada fila le corresponden un numero concreto de columnas. Ademas, al tener mas de una fila, hemos de usar bucles para poder reservar toda la memoria de la matriz
PORQUE Y DONDE SALE LA VARIABLE MAT SI NUNCA LA DECLARO
Ami me salta un error aquí no se que he hecho mal.
for(i=0;i
este es todo el código que he escrito :
#include
#include
#include
int main (){
int filas,colum;
int **m1;
int **m2;
int i , j;
printf("Introduce el numero de filas: ");
fflush(stdin);
scanf("%i",&filas);
printf("Introduce el numero de columnas: ");
fflush(stdin);
scanf("%i",&colum);
//reservar espacio de memoria.
m1=(int**)malloc(filas*sizeof(int*));
if(m1==NULL)
{
printf("No se ha podido reservar espacio en memoria.");
exit(1);
}
for(i=0;i
Saludos amigo, muy buen vídeo felicidades, tengo un problema, e tratado de usar el realloc para el aumento en una matriz dinámica, realice todo igual como lo hiciste tu, y al momento de aplicar el realloc solo me aumentan las columnas, sabes como aumentar filas?, te dejo una parte del algoritmo que estoy usando
coutfx;
coutcx;
p=(int**) realloc(p,sizeof(int)*(inf+fx));
for(int i=0;ip[i][j];
}
}
cout
+jeem19961229 usas c++ y no c, el uso de calloc, malloc y realloc no te aseguro que sea igual.
En el futuro si no haces las cosas igual que yo las enseño (usando C++ por ejemplo), mejor abstenerse de preguntar.
Un saludo.
Hola ke tal, me podrias alludar. quiero saber si esta bien o que y que realice mal con este ejemplo. me podrias decir si es un Objeto dinámico con la forma que ise. o si está totalmente mal y no es dinámico o si. por favor.
#include
#include
#include
using namespace std;
class AUTO
{
private:
std::string _color;
std::string _marca;
int _precio;
public:
void ingresar(string nombre, string marca, int precio);
};
void AUTO::ingresar(string nombre, string marca, int precio)
{
cout
A mi igual con realloc me compila bien, miren:
typedef struct {
char *nombre;
char *autor;
}libro;
void cambio(char aux[50]);
int main(){
char aux[50];
libro JDT;
printf("Introduce un nombre para el libro: ");
fgets(aux,50,stdin);
cambio(aux);
JDT.nombre = (char*)realloc(JDT.nombre,(strlen(aux)+1)*sizeof(char));
if(JDT.nombre == NULL) {
printf("No se a podido reservar memoria.
");
exit(1);
}
strcpy(JDT.nombre,aux);
printf("Introduce un autor para el libro: ");
fflush(stdin);
fgets(aux,50,stdin);
cambio(aux);
JDT.autor = (char*)malloc((strlen(aux)+1)*sizeof(char));
if(JDT.autor == NULL) {
printf("No se a podido reservar memoria.
");
exit(1);
}
strcpy(JDT.autor,aux);
printf ("%s.
",JDT.nombre);
printf ("%s.
",JDT.autor);
free(JDT.nombre);
free(JDT.autor);
system("pause");
return 0;
}
void cambio(char aux[50]){
int i, temp = 0;
for(i=0; i
No se puede ver mas borroso y chiquito el codigo?
Has aumentado la calidad del video?