Autor
|
Tema: matris en cero por medio de int **p (Leído 2,938 veces)
|
neo_from_cs_matrix
Desconectado
Mensajes: 35
|
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 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; }
|
|
|
En línea
|
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
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 ); } 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++) 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++) } }
|
|
|
En línea
|
|
|
|
Valkyr
Desconectado
Mensajes: 646
Divide y vencerás
|
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 línea
|
|
|
|
El_Java
|
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.
|
|
|
En línea
|
|
|
|
neo_from_cs_matrix
Desconectado
Mensajes: 35
|
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..
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
|
|