quisiera saber como hacer para poner una matris en cero, pero esta matris se pasa como doble puntero. gracias
void matrizEnCero_int(int **mat, int filas, int columnas)
{
/* como se hace */
}
int matris[2][4];
int main()
{
matrizEnCero_int((int**)matris, 2, 4);
for(int f=0;f<2;f++)
for(int g=0;g<4;g++)
cout<<matris[f][g] <<endl;
return 0;
}
Podrías hacerlo así:
#include <stdio.h>
#include <stdlib.h>
void ceros(int **matriz, unsigned filas, unsigned columnas)
{
signed int i, j;
for(i = 0; i < filas; i++)
{
for(j = 0; j < columnas; j++)
matriz[i][j] = 0;
}
}
void leer(int **matriz, unsigned int , unsigned);
int main(void)
{
int filas = 2;
int columnas = 4;
signed int **matriz, i, j;
if((matriz = malloc(filas * sizeof *matriz)) == NULL)
return EXIT_FAILURE;
/* Reservar memoria para cada elemento de la matriz : */
for(i = 0; i < filas; i++)
if((matriz[i] = malloc(columnas * sizeof *matriz[i])) == NULL)
return EXIT_FAILURE;
/* Dar valores : */
for(i = 0; i < filas; i++)
for(j = 0; j < columnas; j++)
do
{
printf("matriz[%d][%d] : ", i, j);
fflush(stdout);
} while(scanf("%d", &matriz[i][j]) != 1);
leer(matriz, filas, columnas);
ceros(matriz, filas, columnas);
leer(matriz, filas, columnas);
for(i = 0; i < filas; i++)
free(matriz[i]);
free(matriz);
return EXIT_SUCCESS;
}
void leer(int **matriz, unsigned int filas, unsigned columnas)
{
signed int i, j;
for(i = 0; i < filas; i++)
{
for(j = 0; j < columnas; j++)
printf("{%d}", matriz[i][j]);
putchar('\n');
}
}
También podría hacerse con la función memset(matriz, 0, sizeof(matriz)) que está en <string.h>.
Creo que estaría bien hecho de esa forma, si quisieses poner valores negativos no te valdría esta función, porque lo que le pasas para que rellene (en este caso 0) son los bytes de la representación de 0.
Por cierto, ya puestos, se escribe matriZ con Z, no matris xD.
Saludos.
En C++ sería algo así:
#include <vector>
int main(){
vector<vector<int> > matriz(filas, vector<int> (columnas, 0));
return 0;
}
Lo que hace es crear un vector de dos dimensiones, que se usa igual que un array de dos dimensiones, que valdria matriz[filas][columnas] y todas son 0.
señores agradezco sus respuestas pero me parece que la de leo g. es la mas posible, porque yo habia dejado el espacio como para completar dentro de la funcion asi
void matrizEnCero_int(int **mat, int filas, int columnas)
{
/* como se hace */
}
es decir, la finalidad era acer uso del doble puntero para lograr esto..
Cita de: neo_from_cs_matrix en 9 Julio 2011, 22:48 PM
señores agradezco sus respuestas pero me parece que la de leo g. es la mas posible
Correcto. Solo debes tener cuidado de implementar la matriz como muestra
Leo, utilizando un "int **":
signed int **matriz, i, j;
if((matriz = malloc(filas * sizeof *matriz)) == NULL)
return EXIT_FAILURE;
/* Reservar memoria para cada elemento de la matriz : */
for(i = 0; i < filas; i++)
if((matriz[i] = malloc(columnas * sizeof *matriz[i])) == NULL)
return EXIT_FAILURE;
Lo que
no debes hacer es implementar la matriz utilizando un array de arrays como sugiere tu primer mensaje:
int matris[2][4];
Ya que los tipos de las variables (el array y el parámetro de la función "matrizEnCero_int") son distintos ("int [2][4]" el primero e "int **" el segundo).
Un saludo