suma de dos matrices dinamicas con punteros

Iniciado por piyor6, 4 Mayo 2018, 06:34 AM

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

piyor6

saludos a todos, hoy tengo un problema con un ejercicio y el problema esque se como se hace en c++ pero no se como hacerlo en c, para ser mas espesifico necesito reservar memoria con punteros en c lo cual creo que se hace con malloc y pues yo hice el programa en c pero con extensión c++ para que corra new y el delet con que se resrva la memoria.

lo que necesito es este mismo programa pero acomodado al c (osea con malloc)

(este codigo copila perfecto si esta con estencion c++)

agradezco su ayuda muchas gracias
Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>

void pedirdatos();
void sumarmatriz(int **,int **,int,int);
void mostrarmatriz(int **,int,int);

int **pmatriz1,**pmatriz2,filas,columnas;

int main(){

pedirdatos();
sumarmatriz(pmatriz1,pmatriz2,filas,columnas);
mostrarmatriz(pmatriz1,filas,columnas);

  for(int i=0;i<filas;i++){
      delete[] (pmatriz2+i);
  }
  delete[] pmatriz2;

  for(int i=0;i<filas;i++){
      delete[] (pmatriz1+i);
  }
  delete[] pmatriz1;





    return 0;
}

void pedirdatos(){
    printf("ingrese el numero de filas: ");
    scanf("%d",&filas);
    printf("ingrese el numero de columnas: ");
    scanf("%d",&columnas);
//reservando memeoria
printf("matriz #1\n");
pmatriz1=new int*[filas];//reservar memoria para filaz
for(int i=0;i<filas;i++){
    *(pmatriz1+i)=new int[columnas];//resevar columnas
    }
    //llenando matriz 1
    for(int i=0;i<filas;i++){
        for(int j=0;j<filas;j++){
            printf("digite un numero: ");
            scanf("%d",&*(*(pmatriz1+i)+j));

        }

    }

printf("matriz #2\n");
//reservando memoria
    pmatriz2=new int*[filas];//reservar memoria para filaz
for(int i=0;i<filas;i++){
    *(pmatriz2+i)=new int[columnas];//resevar columnas
    }
    //llenando matriz 2
    for(int i=0;i<filas;i++){
        for(int j=0;j<filas;j++){
            printf("digite un numero: ");
            scanf("%d",&*(*(pmatriz2+i)+j));

        }

    }
}

void sumarmatriz(int **pmatriz1,int**pmatriz2,int filas,int columnas){
for(int i=0;i<filas;i++){
    for(int j=0;j<filas;j++){
        *(*(pmatriz1+i)+j)= *(*(pmatriz1+i)+j)+ *(*(pmatriz2+i)+j);
        }


}




}
void mostrarmatriz(int **pmatriz1,int filas,int columnas ){
printf("la suma de las dos matrices es:\n");

for(int i=0;i<filas;i++){
    for(int j=0;j<filas;j++){
        printf("%d ",*(*(pmatriz1+i)+j));

        }
        printf("\n");
    }



}




Kenji-chan

solo tienes que utilizar la funcion void *malloc(size_t size) para reservar la memoria y void free(void *ptr) para liberarla

ejemplo


int* filas = (int*)malloc(sizeof(int)*num);// reservamos memoria
  int i;
  for(i=0; i<num; i++){
    filas[i] = i+1;
  }
  free(filas);//liberamos memoria



piyor6

pdrias implementar eso que me dijiste en mi codigo y asi entiendo mejor