Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: neo_from_cs_matrix en 9 Julio 2011, 02:22 am



Título: matris en cero por medio de int **p
Publicado por: neo_from_cs_matrix en 9 Julio 2011, 02:22 am

quisiera saber como hacer para poner una matris en cero, pero esta matris se pasa como doble puntero. gracias


Código:
void matrizEnCero_int(int **mat, int filas, int columnas)
{
    /*    como se hace    */
}

Código:
int matris[2][4];

Código:
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;
}





Título: Re: matris en cero por medio de int **p
Publicado por: leogtz en 9 Julio 2011, 08:22 am
Podrías hacerlo así:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void ceros(int **matriz, unsigned filas, unsigned columnas)
  5. {
  6.    signed int i, j;
  7.    for(i = 0; i < filas; i++)
  8.    {
  9.        for(j = 0; j < columnas; j++)
  10.        matriz[i][j] = 0;
  11.    }
  12. }
  13.  
  14. void leer(int **matriz, unsigned int , unsigned);
  15. int main(void)
  16. {
  17.    int filas = 2;
  18.    int columnas = 4;
  19.  
  20.    signed int **matriz, i, j;
  21.  
  22.    if((matriz = malloc(filas * sizeof *matriz)) == NULL)
  23.    return EXIT_FAILURE;
  24.  
  25.    /* Reservar memoria para cada elemento de la matriz : */
  26.    for(i = 0; i < filas; i++)
  27.    if((matriz[i] = malloc(columnas * sizeof *matriz[i])) == NULL)
  28.    return EXIT_FAILURE;
  29.  
  30.    /* Dar valores : */
  31.    for(i = 0; i < filas; i++)
  32.    for(j = 0; j < columnas; j++)
  33.    do
  34.    {
  35.        printf("matriz[%d][%d] : ", i, j);
  36.        fflush(stdout);
  37.    } while(scanf("%d", &matriz[i][j]) != 1);
  38.  
  39.    leer(matriz, filas, columnas);
  40.    ceros(matriz, filas, columnas);
  41.    leer(matriz, filas, columnas);
  42.  
  43.    for(i = 0; i < filas; i++)
  44.    free(matriz[i]);
  45.    free(matriz);
  46.  
  47.    return EXIT_SUCCESS;
  48. }
  49. void leer(int **matriz, unsigned int filas, unsigned columnas)
  50. {
  51.    signed int i, j;
  52.    for(i = 0; i < filas; i++)
  53.    {
  54.        for(j = 0; j < columnas; j++)
  55.        printf("{%d}", matriz[i][j]);
  56.        putchar('\n');
  57.    }
  58. }
  59.  


Título: Re: matris en cero por medio de int **p
Publicado por: Valkyr en 9 Julio 2011, 12:29 pm
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.


Título: Re: matris en cero por medio de int **p
Publicado por: El_Java en 9 Julio 2011, 13:31 pm
En C++ sería algo así:

Código
  1. #include <vector>
  2.  
  3. int main(){
  4.   vector<vector<int> > matriz(filas, vector<int> (columnas, 0));
  5.   return 0;
  6. }
  7.  

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.


Título: Re: matris en cero por medio de int **p
Publicado por: 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, porque yo habia dejado el espacio como para completar dentro de la funcion asi


Código:
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..



Título: Re: matris en cero por medio de int **p
Publicado por: rir3760 en 10 Julio 2011, 00:42 am
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 **":
Código
  1. signed int **matriz, i, j;
  2.  
  3. if((matriz = malloc(filas * sizeof *matriz)) == NULL)
  4.   return EXIT_FAILURE;
  5.  
  6. /* Reservar memoria para cada elemento de la matriz : */
  7. for(i = 0; i < filas; i++)
  8.   if((matriz[i] = malloc(columnas * sizeof *matriz[i])) == NULL)
  9.      return EXIT_FAILURE;


Lo que no debes hacer es implementar la matriz utilizando un array de arrays como sugiere tu primer mensaje:
Código
  1. 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