matris en cero por medio de int **p

Iniciado por neo_from_cs_matrix, 9 Julio 2011, 02:22 AM

0 Miembros y 1 Visitante están viendo este tema.

neo_from_cs_matrix


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;
}





leogtz

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');
    }
}
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Valkyr

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.

El_Java

En C++ sería algo así:

Código (cpp) [Seleccionar]

#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.

neo_from_cs_matrix

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..


rir3760

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
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