-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathP6P4L
More file actions
190 lines (186 loc) · 4.05 KB
/
P6P4L
File metadata and controls
190 lines (186 loc) · 4.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(void){
int t1[2];
int t2[2];
int t3[2];
int t4[2];
int bufer[10];
int m1[12][12];
int m2[12][12];
int mr1[12][12];
float mf1[12][12];
float mf2[12][12];
float mfr1[12][12];
float mfr2[12][12];
int i,j;
//Se leen las dos matrices a pasar al hijo
FILE *fin = fopen("datos1.in","r");
for(i=0;i<10;i++)
for(j=0;j<10;j++)
fscanf(fin, "%d",&m1[i][j]);
for(i=0;i<10;i++)
for(j=0;j<10;j++)
fscanf(fin,"%d",&m2[i][j]);
fclose(fin);
//Se crean las tuberias
if(pipe(t1)!=0) exit(0);
if(pipe(t2)!=0) exit(0);
if(pipe(t3)!=0) exit(0);
if(pipe(t4)!=0) exit(0);
/*close(t1[0]);
close(t2[0]);
close(t2[1]);
close(t3[1]);
close(t4[1]);*/
//Este es el hijo
if(fork()==0){
//Recibimos las dos matrices que nos esrta mandando el padre
for(i=0;i<10;i++){
read(t1[0],bufer,sizeof(bufer));
for(j=0;j<10;j++) m1[i][j]=bufer[j];
}
for(i=0;i<10;i++)
read(t1[0],bufer,sizeof(bufer));
for(j=0;j<10;j++) m2[i][j]=bufer[j];
//Se hace la multiplicacion, se guarda en m1
for(i=0;i<10;i++){
for(j=0;j<10;j++){
mr1[i][j]=m1[i][0]*m2[0][j] + m1[i][1]*m2[1][j] + m1[i][2]*m2[2][j]
+ m1[i][3]*m2[3][j] + m1[i][4]*m2[4][j] + m1[i][5]*m2[5][j] + m1[i][6]*m2[6][j]
+ m1[i][7]*m2[7][j] + m1[i][8]*m2[8][j] + m1[i][9]*m2[9][j];
}
}
//Se envia la informacion al padre
for(i=0;i<10;i++){
for(j=0;j<10;j++)
bufer[j]=mr1[i][j];
write(t3[1],bufer,sizeof(bufer));
}
//Se leen las matrices del nieto
FILE *fin = fopen("datos2.in","r");
for(i=0;i<10;i++)
for(j=0;j<10;j++)
fscanf(fin, "%d",&m1[i][j]);
for(i=0;i<10;i++)
for(j=0;j<10;j++)
fscanf(fin,"%d",&m2[i][j]);
fclose(fin);
//Se crea el nieto
if(fork()==0){
//Leemos las matrices pasadas por la tuberia
for(i=0;i<10;i++){
read(t2[0],bufer,sizeof(bufer));
for(j=0;j<10;j++) m1[i][j]=bufer[j];
}
for(i=0;i<10;i++){
read(t2[0],bufer,sizeof(bufer));
for(j=0;j<10;j++) m2[i][j]=bufer[j];
}
//Se realiza la suma
for(i=0;i<10;i++)
for(j=0;j<10;j++)
m1[i][j]+=m2[i][j];
//Se la pasamos al abuelo
for(i=0;i<10;i++){
for(j=0;j<10;j++)
bufer[j]=m1[i][j];
write(t4[1],bufer,sizeof(bufer));
}
//Se termina
exit(0);
}
//Se mandan las matrices al nieto
for(i=0;i<10;i++){
for(j=0;j<10;j++){
bufer[j]=m1[i][j];
}
write(t2[1],bufer,sizeof(bufer));
}
for(i=0;i<10;i++){
for(j=0;j<10;j++)
bufer[j]=m2[i][j];
write(t2[1],bufer,sizeof(bufer));
}
//Se termina
exit(0);
}
//Escribimos las matrices al hijo
for(i=0;i<10;i++){
for(j=0;j<10;j++){
bufer[j]=m1[i][j];
}
write(t1[1],bufer,sizeof(bufer));
}
for(i=0;i<10;i++){
for(j=0;j<10;j++){
bufer[j]=m2[i][j];
}
write(t1[1],bufer,sizeof(bufer));
}
//Leemos la matriz del hijo
for(i=0;i<10;i++){
read(t3[0],bufer,sizeof(bufer));
for(j=0;j<10;j++) mf1[i][j]=bufer[j];
}
//Leemos la matriz del nieto
for(i=0;i<10;i++){
read(t4[0],bufer,sizeof(bufer));
for(j=0;j<10;j++) mf2[i][j]=bufer[j];
}
//Obtenemos la inversa
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if(i==j) mfr1[i][j]=mfr2[i][j]=1;
else mfr1[i][j]=mfr2[i][j]=0;
}
}
for(i=0;i<10;i++){
float divi=mf1[i][i];
float divi2=mf2[i][i];
j=i;
for(j=i;j<10;j++){
mf1[i][j]/=divi;
mfr1[i][j]/=divi;
mf2[i][j]/=divi2;
mfr2[i][j]/=divi2;
}
int k=0;
for(k=i+1;k<10;k++){
float num=mf1[k][i];
float num2=mf2[k][i];
for(j=i;j<10;j++){
mf1[k][j]-=(mf1[i][j]*num);
mfr1[k][j]-=(mf1[i][j]*num);
mf2[k][j]-=(mf2[i][j]*num2);
mfr2[k][j]-=(mf2[i][j]*num2);
}
}
}
for(i=0;i<10;i++){
for(j=i+1;j<10;j++){
mfr1[i][j]-=mf1[i][j];
mfr2[i][j]-=mf2[i][j];
}
}
//Se guardan la matriz del hijo
FILE *fout = fopen("MatrizInversa1", "w");
for(i=0;i<10;i++){
for(j=0;j<10;j++){
fprintf(fout,"%.2f ",mfr1[i][j]);
}
fprintf(fout,"\n");
}
fclose(fout);
fout = fopen("MatrizInversa2", "w");
for(i=0;i<10;i++){
for(j=0;j<10;j++){
fprintf(fout,"%.2f ",mfr2[i][j]);
}
fprintf(fout,"\n");
}
fclose(fout);
exit(0);
return 0;
}