ProgIng - Programación en Ingeniería
Loading...
Searching...
No Matches
Ejemplo040.c File Reference
#include <stdio.h>
#include <stdlib.h>
Include dependency graph for Ejemplo040.c:

Go to the source code of this file.

Functions

double * crearMat (int r, int c)
double ** crearMatC (int r, int c)
double ** crearMatD (int r, int c)
int capturar (double *M, int r, int c, char *str)
int imprimir (double *M, int r, int c)
int imprimirM (double **M, int r, int c)
double * multiplicar (double *M1, int r1, int c1, double *M2, int r2, int c2)
double ** multiplicarM (double **M1, int r1, int c1, double **M2, int r2, int c2)
int capturarM (double **M, int r, int c, char *str)
int liberar (double **M, int r)
int main (int argc, char *argv[])

Function Documentation

◆ capturar()

int capturar ( double * M,
int r,
int c,
char * str )

Definition at line 52 of file Ejemplo040.c.

53{
54 int i, j;
55 for(i=0; i<r; i++)
56 for(j=0; j<c; j++)
57 {
58 printf("%s[%d][%d] = ", str, i+1, j+1);
59 scanf("%lf", M+c*i+j);
60 }
61 return 0;
62}
#define M

◆ capturarM()

int capturarM ( double ** M,
int r,
int c,
char * str )

Definition at line 129 of file Ejemplo040.c.

130{
131 int i, j;
132 for(i=0; i<r; i++)
133 for(j=0; j<c; j++)
134 {
135 printf("%s[%d][%d] = ", str, i+1, j+1);
136 scanf("%lf", M[i]+j);
137 }
138 return 0;
139}
Here is the caller graph for this function:

◆ crearMat()

double * crearMat ( int r,
int c )

Definition at line 4 of file Ejemplo040.c.

5{
6 double *M;
7 M = (double*)malloc(r*c*sizeof(double));
8 if(M==NULL)
9 return NULL;
10 return M;
11}
Here is the caller graph for this function:

◆ crearMatC()

double ** crearMatC ( int r,
int c )

Definition at line 13 of file Ejemplo040.c.

14{
15 double **M;
16 int i;
17 M = (double**)malloc(r*sizeof(double*));
18 if(M==NULL)
19 return NULL;
20 M[0] = (double*)malloc(r*c*sizeof(double));
21 if(M[0]==NULL)
22 {
23 free(M);
24 return NULL;
25 }
26 for(i=1; i<r; i++)
27 M[i] = M[i-1]+c;
28 return M;
29}
Here is the caller graph for this function:

◆ crearMatD()

double ** crearMatD ( int r,
int c )

Definition at line 31 of file Ejemplo040.c.

32{
33 double **M;
34 int i;
35 M = (double**)malloc(r*sizeof(double*));
36 if(M==NULL)
37 return NULL;
38 for(i=0; i<r; i++)
39 {
40 M[i] = (double*)malloc(c*sizeof(double));
41 if(M[i]==NULL)
42 {
43 for(--i; i>-1; i--)
44 free(M[i]);
45 free(M);
46 return NULL;
47 }
48 }
49 return M;
50}
Here is the caller graph for this function:

◆ imprimir()

int imprimir ( double * M,
int r,
int c )

Definition at line 64 of file Ejemplo040.c.

65{
66 int i, j;
67 for(i=0; i<r; i++)
68 {
69 for(j=0; j<c; j++)
70 printf("%.4lf\t", M[c*i+j]);
71 printf("\n");
72 }
73 return 0;
74}

◆ imprimirM()

int imprimirM ( double ** M,
int r,
int c )

Definition at line 76 of file Ejemplo040.c.

77{
78 int i, j;
79 for(i=0; i<r; i++)
80 {
81 for(j=0; j<c; j++)
82 printf("%.4lf\t", M[i][j]);
83 printf("\n");
84 }
85 return 0;
86}
Here is the caller graph for this function:

◆ liberar()

int liberar ( double ** M,
int r )

Definition at line 141 of file Ejemplo040.c.

142{
143 int i;
144 for(i=0; i<r; i++)
145 free(M[i]);
146 free(M);
147 return 0;
148}
Here is the caller graph for this function:

◆ main()

int main ( int argc,
char * argv[] )

Definition at line 150 of file Ejemplo040.c.

151{
152 int rA, rB, cA, cB;
153 double **A, **B, **C;
154 do{
155 printf("Ingrese el numero de renglones de A: ");
156 scanf("%d", &rA);
157 }while(rA<1);
158 do{
159 printf("Ingrese el numero de columnas de A: ");
160 scanf("%d", &cA);
161 }while(cA<1);
162 A = crearMatC(rA, cA);
163 if(A==NULL)
164 return 1;
165 capturarM(A, rA, cA, "A");
166 do{
167 printf("Ingrese el numero de renglones de B: ");
168 scanf("%d", &rB);
169 }while(rB<1);
170 do{
171 printf("Ingrese el numero de columnas de B: ");
172 scanf("%d", &cB);
173 }while(cB<1);
174 B = crearMatD(rB, cB);
175 if(B==NULL)
176 {
177 free(A[0]);
178 free(A);
179 return 2;
180 }
181 capturarM(B, rB, cB, "B");
182 C = multiplicarM(A, rA, cA, B, rB, cB);
183 if(C==NULL)
184 {
185 free(A[0]);
186 free(A);
187 liberar(B, rB);
188 return 4;
189 }
190 printf("A\n");
191 imprimirM(A, rA, cA);
192 printf("B\n");
193 imprimirM(B, rB, cB);
194 printf("C\n");
195 imprimirM(C, rA, cB);
196 free(A[0]);
197 free(A);
198 liberar(B, rB);
199 free(C);
200 return 0;
201}
int capturarM(double **M, int r, int c, char *str)
Definition Ejemplo040.c:129
double ** multiplicarM(double **M1, int r1, int c1, double **M2, int r2, int c2)
Definition Ejemplo040.c:110
int liberar(double **M, int r)
Definition Ejemplo040.c:141
double ** crearMatD(int r, int c)
Definition Ejemplo040.c:31
double ** crearMatC(int r, int c)
Definition Ejemplo040.c:13
int imprimirM(double **M, int r, int c)
Definition Ejemplo040.c:76
Here is the call graph for this function:

◆ multiplicar()

double * multiplicar ( double * M1,
int r1,
int c1,
double * M2,
int r2,
int c2 )

Definition at line 88 of file Ejemplo040.c.

89{
90 int i, j, k;
91 double *M3;
92 if(c1!=r2)
93 {
94 printf("Error: En el tamaño de las matrices.\n");
95 return NULL;
96 }
97 M3 = crearMat(r1, c2);
98 if(M3==NULL)
99 return NULL;
100 for(i=0; i<r1; i++)
101 for(j=0; j<c2; j++)
102 for(k=0, M3[i*c1+j]=0; k<c1; k++)
103 M3[i*c2+j] += M1[i*c1+k]*M2[k*c2+j];
104// M3[i][j] = M3[i][j]+M1[i][k]*M2[k][j]
105// M3[i][j] += M1[i][k]*M2[k][j]
106// M3[i*c2+j] += M1[i*c1+k]*M2[k*r2+j]
107 return M3;
108}
double * crearMat(int r, int c)
Definition Ejemplo040.c:4
Here is the call graph for this function:

◆ multiplicarM()

double ** multiplicarM ( double ** M1,
int r1,
int c1,
double ** M2,
int r2,
int c2 )

Definition at line 110 of file Ejemplo040.c.

111{
112 int i, j, k;
113 double **M3;
114 if(c1!=r2)
115 {
116 printf("Error: En el tamaño de las matrices.\n");
117 return NULL;
118 }
119 M3 = crearMatC(r1, c2);
120 if(M3==NULL)
121 return NULL;
122 for(i=0; i<r1; i++)
123 for(j=0; j<c2; j++)
124 for(k=0, M3[i][j]=0; k<c1; k++)
125 M3[i][j] += M1[i][k]*M2[k][j];
126 return M3;
127}
Here is the call graph for this function:
Here is the caller graph for this function: