Hola muy buenas acaba de surgirme una duda en C
Tengo esta funcion hecha con punteros hecha en C y el problema es que al invocarla
printf("%d",SumarMatrices(mat1,mat2,dim1,dim2))
solo muestra el primer resultado de la operacion y no el resto(PD: con char me funciona porque imprimo toda la cadena con %s)
int SumarMatrices(int *mat1, int *mat2,int dim1[],int dim2[]){
int *matriz_suma;
int i,j;
matriz_suma=(int*)malloc(dim1[0]*dim2[0]*sizeof(int));
for(i=0;i<dim1[0];i++){
for(j=0;j<dim2[0];j++){
*(matriz_suma+i*dim2[i]+j)=+*(mat2+i*dim2[i]+j)+*(mat2+i*dim2[i]+j); //calculo de cada elemento
}
}
return matriz_suma;
}
Podes poner todo el código entero así lo copio y pruebo?
#include <stdio.h>
#include <stdlib.h>
/*
*
*/
int SumarMatrices(int *mat1, int *mat2,int dim1[],int dim2[]){
int *matriz_suma;
int i,j;
matriz_suma=(int*)malloc(dim1[0]*dim2[0]*sizeof(int));
for(i=0;i<dim1[0];i++){
for(j=0;j<dim2[0];j++){
*(matriz_suma+i*dim2[i]+j)=*(mat2+i*dim2[0]+j)+*(mat2+i*dim2[0]+j);
//printf("mat[%d][%d]=%d\n",i,j,*(matriz_suma+i*dim2[i]+j));
}
}
return *matriz_suma;
}
int main(int argc, char** argv) {
int i,j,numero;
int *mat1,*mat2;
int dim1[2],dim2[2];
FILE*datos;
datos=fopen("datos.dat","r+");
fscanf(datos,"%d",&dim1[0]);
fscanf(datos,"%d",&dim2[0]);
mat1=(int*)malloc(dim1[0]*dim2[0]*sizeof(int));
for(i=0;i<dim1[0];i++){
for(j=0;j<dim2[0];j++){
fscanf(datos,"%d",&numero);
*(mat1+i*dim2[0]+j)=numero;
}
}
fscanf(datos,"%d",&dim1[1]);
fscanf(datos,"%d",&dim2[1]);
mat2=(int*)malloc(dim1[1]*dim2[1]*sizeof(int));
for(i=0;i<dim1[1];i++){
for(j=0;j<dim2[1];j++){
fscanf(datos,"%d",&numero);
*(mat2+i*dim2[1]+j)=numero;
}
}
fclose(datos);
MultiplicarMatrices(mat1,mat2,dim1,dim2);
return (EXIT_SUCCESS);
}
PD: Los datos de archivos.dat tienes que poner las dimensiones en una fila y los datos en otra y separados por espacios
Ej para dos matrices 1x3 y 3x2 seria
1 3
6 4 8
3 2
2 5 3 4 0 2
seria como multiplicar
( 6 4 8 )*( 2 5 )
( 3 4 )
( 0 2 )
Muchas gracias si funciona avisame
Mañana voy a revisar el código, lo que si en ese .dat que pusiste no vas a poder sumar las matrices
CitarLos datos de archivos.dat tienes que poner las dimensiones en una fila y los datos en otra y separados por espacios
Ej para dos matrices 1x3 y 3x2 seria
1 3
6 4 8
3 2
2 5 3 4 0 2
Esa matriz solo se puede multiplicar, para que se puedan sumar ambas matrices tienen que ser iguales, mañana pruebo el código que pusiste y te aviso, lo que si antes de sumar la matriz vas a tener que verificar que sean iguales, o sea
int SumarMatrices (int *matR, int *mat1, int *mat2, mat1x, mat1y, mat2x, mat2y)
{
if (mat1x== mat2x) && (mat1y==mat2y)
{
for (int x=0; x<=mat1x; x++)
{
for (int y=0; y<=mat1y; y++)
matR[x][y] = mat1[x][y] + mat2[x][y]; //Aca modifica para la suma con punteros, no me acuerdo si poniendo el * solo era suficiente
}
return 0;
}
return 1;
}
Te dejo esto tambien que encontra por ahi, tal vez te sirva
#include <iostream>
using namespace std;
int suma(int,int);
int **CrearMatriz(int,int);
int **LlenarMatriz(int,int);
int **Suma(int**,int**,int,int);
int main()
{
cout<<"Suma de Matrices con punteros"<<endl<<endl;
int filas,colum;
cout<<"Introduzca el numero de filas: ";
cin>>filas;
cout<<"Introduzca el numero de columnas: ";
cin>>colum;
int **matriz1 = CrearMatriz(filas,colum);
int **matriz2 = CrearMatriz(filas,colum);
int **final = CrearMatriz(filas,colum);
cout<<"\nMatriz1\n";
matriz1 = LlenarMatriz(filas,colum);
cout<<"\nMatriz2\n";
matriz2 = LlenarMatriz(filas,colum);
final = Suma(matriz1, matriz2, filas, colum);
cout<<"\nLa suma es:\n";
for(int i=0;i<filas;i++)
{
for(int j=0;j<colum;j++)
{
cout<<final[i][j];
if(j < colum-1)
cout<<", ";
}
cout<<endl;
}
return 0;
}
int **CrearMatriz(int f, int c)
{
int **matriz = new int*[f];
for (int i = 0; i < f; ++i)
matriz[i] = new int[c];
return matriz;
}
int **LlenarMatriz(int f, int c)
{
int **matriz = CrearMatriz(f,c);
for(int i=0;i<f;i++)
{
for(int j=0;j<c;j++)
{
cout<<"Elemento "<<i+1<<","<<j+1<<": ";
cin>>matriz[i][j];
}
}
return matriz;
}
int **Suma(int **m1,int **m2,int f, int c)
{
int **matriz = CrearMatriz(f,c);
for(int i=0;i<f;i++)
for(int j=0;j<c;j++)
matriz[i][j] = m1[i][j]+m2[i][j];
return matriz;
}