Pascal/Turbo Pascal - Sistema de ecuaciones 3x3 con Cramer

 
Vista:
sin imagen de perfil
Val: 1
Ha aumentado su posición en 20 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Sistema de ecuaciones 3x3 con Cramer

Publicado por Ma (1 intervención) el 12/12/2018 00:56:47
Buenas! Necesito ayuda. Tengo que hacer un programa que me calcule un sistema de 3x3 con el método de Cramer. Si bien hacer las operaciones es sencillo, lo que es complicado es el hecho de que el programa se vea ordenado y se imprima bien.
Que si el usuario coloca el número 1 no se muestre; si el usuario coloca el número cero no se muestre nada en ese espacio; si el usuario coloca -1 solo se muestre el signo menos y si el usuario coloca un número negativo (además del 1, claro está), no se muestre +- que suele suceder.
Lo que hice fue arreglar estos problemas por separado y ver cómo podría combinarlos todos.
Aquí muestro el programa completo y donde arreglo el problema del 1. Para arreglar el problema del 0 y del -1 utilicé el mismo algoritmo pero cambiando el valor que toman las variables (que si A=-1 o, en el caso del 0, A=0 y eso)
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
program cramer;
uses crt;
var A,B,C,D,A1,B1,C1,D1,A2,B2,C2,D2,ts,tx,ty,tz:integer;
    x,y,z:real;
    respuesta:string;
begin
     A:=0;
     B:=0;
     C:=0;
     D:=0;
     A1:=0;
     B1:=0;
     C1:=0;
     D1:=0;
     A2:=0;
     B2:=0;
     C2:=0;
     D2:=0;
     respuesta:='si';
     writeln('Bienvenido. Este programa resuelve ecuaciones de la forma:');
     writeln('Ax+By+Cz=D');
     writeln('A1x+B1y+C1z=D1');
     writeln('A2x+B2y+C2z=D2');
     writeln('Ingrese el valor de A, B, C y D separados de un espacio.');
     readln(A,B,C,D);
     writeln('Ingrese el valor de A1, B1, C1 y D1 separados de un espacio.');
     readln(A1,B1,C1,D1);
     writeln('Ingrese el valor de A2, B2, C2 y D2 separados de un espacio.');
     readln(A2,B2,C2,D2);
     begin
          if (A=1) and (B=1) and (C=1) then
          writeln('x+y+z=',D)
          else
          begin
               if (a=1) and (b=1) then
               writeln('x+y+',c,'z=',d)
               else
               begin
                    if (b=1) and (c=1) then
                    writeln(a,'x+y+z=',d)
                    else
                    begin
                         if (a=1) and (c=1) then
                         writeln('x+',b,'y+z=',d)
                         else
                         begin
                              if (a=1) then
                              writeln('x+',b,'y+',c,'z=',d)
                              else
                              begin
                                   if (b=1) then
                                   writeln(a,'x+y+',c,'z=',d)
                                   else
                                   begin
                                        if (c=1) then
                                        writeln(a,'x+',b,'y+z=',d)
                                        else
                                        writeln(a,'x+',b,'y+',c,'z=',d)
                                   end;
                              end;
                         end;
                    end;
               end;
          end;
     end
     begin
          if (A1=1) and (B1=1) and (C1=1) then
          writeln('x+y+z=',D1)
          else
          begin
               if (a1=1) and (b1=1) then
               writeln('x+y+',c1,'z=',d1)
               else
               begin
                    if (b1=1) and (c1=1) then
                    writeln(a1,'x+y+z=',d1)
                    else
                    begin
                         if (a1=1) and (c1=1) then
                         writeln('x+',b1,'y+z=',d1)
                         else
                         begin
                              if (a1=1) then
                              writeln('x+',b1,'y+',c1,'z=',d1)
                              else
                              begin
                                   if (b1=1) then
                                   writeln(a1,'x+y+',c1,'z=',d1)
                                   else
                                   begin
                                        if (c1=1) then
                                        writeln(a1,'x+',b1,'y+z=',d1)
                                        else
                                        writeln(a1,'x+',b1,'y+',c1,'z=',d1)
                                   end;
                              end;
                         end;
                    end;
               end;
          end;
     end;
     begin
          if (A2=1) and (B2=1) and (C2=1) then
          writeln('x+y+z=',D2)
          else
          begin
               if (a2=1) and (b2=1) then
               writeln('x+y+',c2,'z=',d2)
               else
               begin
                    if (b2=1) and (c2=1) then
                    writeln(a2,'x+y+z=',d2)
                    else
                    begin
                         if (a2=1) and (c2=1) then
                         writeln('x+',b2,'y+z=',d2)
                         else
                         begin
                              if (a2=1) then
                              writeln('x+',b2,'y+',c2,'z=',d2)
                              else
                              begin
                                   if (b2=1) then
                                   writeln(a2,'x+y+',c2,'z=',d2)
                                   else
                                   begin
                                        if (c2=1) then
                                        writeln(a2,'x+',b2,'y+z=',d2)
                                        else
                                        writeln(a2,'x+',b2,'y+',c2,'z=',d2)
                                   end;
                              end;
                         end;
                    end;
               end;
          end;
     end;
     begin
          writeln('Desea continuar?');
          readln(respuesta);
          if respuesta='si' then
             begin
                  ts:=A*B1*C2+A1*B2*C+B*C1*A2-C*B1*A2+B*A1*C2+A*C1*B2;
                  tx:=D*B1*C2+D1*B2*C+B*C1*D2-C*B1*D2+B*D1*C2+D*C1*B2;
                  ty:=A*B1*C2+A1*D2*C+D*C1*A2-C*D1*A2+D*A1*C2+A*C1*D2;
                  tz:=A*B1*D2+A1*B2*D+B*D1*A2-D*B1*A2+B*A1*D2+A*D1*B2;
                  x:=tx div ts;
                  y:=ty div ts;
                  z:=tz div ts;
                  writeln('El valor de x es:',x:3:3);
                  writeln('El valor de y es:',y:3:3);
                  writeln('El valor de z es:',z:3:3)
             end;
     end;
readln();
end.
Aquí muestro como arreglo el problema del -1
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
begin
          if (A=-1) and (B=-1) and (C=-1) then
          writeln('-x-y-z=',D)
          else
          begin
               if (a=-1) and (b=-1) then
               writeln('-x-y+',c,'z=',d)
               else
               begin
                    if (b=-1) and (c=-1) then
                    writeln(a,'x-y-z=',d)
                    else
                    begin
                         if (a=-1) and (c=-1) then
                         writeln('-x+',b,'y-z=',d)
                         else
                         begin
                              if (a=-1) then
                              writeln('-x+',b,'y+',c,'z=',d)
                              else
                              begin
                                   if (b=-1) then
                                   writeln(a,'x-y+',c,'z=',d)
                                   else
                                   begin
                                        if (c=-1) then
                                        writeln(a,'x+',b,'y-z=',d)
                                        else
                                        writeln(a,'x+',b,'y+',c,'z=',d)
                                   end;
                              end;
                         end;
                    end;
               end;
          end;
     end;
y el del 0 es igual. Lo que quiero saber es que si hay alguna manera de poder combinarlos todos o tengo que volver a hacer el algoritmo :/ (tengo que usar puros condicionales, por cierto).
Les agradecería mucho si me ayudan :(
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder