ProgIng - Programación en Ingeniería
Loading...
Searching...
No Matches
Ejemplo_037.c
Go to the documentation of this file.
1
#include<stdio.h>
2
#include<stdlib.h>
3
4
/* Multiplicacion de matrices */
5
/* A: mA x nA */
6
/* B: mB x nB */
7
/* C: mA x nB */
8
/* A matriz ordenada */
9
/* B matriz dispersa */
10
/* C matriz ordenada */
11
/* fp archivo de salida de C */
12
13
int
main
(
void
)
14
{
15
float
**A, **B, **C, *pA, *pC;
16
int
nA, mA, nB, mB, i, j, k;
17
FILE *fp;
18
do
{
19
printf(
"Ingrese el numero de columnas de A: "
);
20
scanf(
"%d"
, &nA);
21
printf(
"Ingrese el numro de renglones de A: "
);
22
scanf(
"%d"
, &mA);
23
}
while
(nA<1||mA<1);
24
do
{
25
printf(
"Ingrese el numero de columnas de B: "
);
26
scanf(
"%d"
, &nB);
27
printf(
"Ingrese el numro de renglones de B: "
);
28
scanf(
"%d"
, &mB);
29
}
while
(nB<1||mB<1||nB!=mA);
30
pA = (
float
*)malloc(nA*mA*
sizeof
(
float
));
31
if
(pA==NULL)
32
return
1;
33
A = (
float
**)malloc(nA*
sizeof
(
float
*));
34
if
(A==NULL)
35
{
36
free(pA);
37
return
2;
38
}
39
for
(i=0; i<nA; i++)
40
A[i] = pA+i*mA;
41
B = (
float
**)malloc(nB*
sizeof
(
float
*));
42
if
(B==NULL)
43
{
44
free(pA);
45
free(A);
46
return
3;
47
}
48
for
(i=0; i<nB; i++)
49
{
50
B[i] = (
float
*)malloc(mB*
sizeof
(
float
));
51
if
(B[i]== NULL)
52
{
53
free(pA);
54
free(A);
55
for
(--i; i>-1; i--)
56
free(B[i]);
57
free(B);
58
return
4;
59
}
60
}
61
pC = (
float
*)malloc(nA*mB*
sizeof
(
float
));
62
if
(pC==NULL)
63
{
64
free(pA);
65
free(A);
66
for
(i=0; i<nB; i++)
67
free(B[i]);
68
free(B);
69
return
5;
70
}
71
C = (
float
**)malloc(nA*
sizeof
(
float
*));
72
if
(C==NULL)
73
{
74
free(pA);
75
free(A);
76
for
(i=0; i<nB; i++)
77
free(B[i]);
78
free(B);
79
free(pC);
80
return
6;
81
}
82
for
(i=0; i<nA; i++)
83
C[i] = pC+i*mB;
84
for
(i=0; i<nA; i++)
85
for
(j=0; j<mA; j++)
86
{
87
printf(
"A[%d][%d] = "
, i+1, j+1);
88
scanf(
"%f"
, A[i]+j);
89
}
90
for
(i=0; i<nB; i++)
91
for
(j=0; j<mB; j++)
92
{
93
printf(
"B[%d][%d] = "
, i+1, j+1);
94
scanf(
"%f"
, B[i]+j);
95
}
96
for
(i=0; i<nA; i++)
97
for
(j=0; j<mB; j++)
98
for
(k=0, C[i][j]=0; k<nB; k++)
99
C[i][j] += A[i][k]*B[k][j];
100
for
(i=0; i<nA; i++)
101
for
(j=0; j<mB; j++)
102
printf(
"C[%d][%d] = %f\n"
, i+1, j+1, C[i][j]);
103
fp = fopen(
"Matriz.txt"
,
"w"
);
104
if
(fp==NULL)
105
{
106
free(pC);
107
free(C);
108
for
(i=0; i<nB; i++)
109
free(B[i]);
110
free(B);
111
free(pA);
112
free(A);
113
return
7;
114
}
115
for
(i=0; i<nA; i++)
116
for
(j=0; j<mB; j++)
117
fprintf(fp,
"%f "
, C[i][j]);
118
fclose(fp);
119
free(pC);
120
free(C);
121
for
(i=0; i<nB; i++)
122
free(B[i]);
123
free(B);
124
free(pA);
125
free(A);
126
return
0;
127
}
main
int main(void)
Definition
Ejemplo_037.c:13
src
20251
Ejemplo_037.c
Generated by
1.16.1