
Ayuda con este problema
Publicado por Pedro (7 intervenciones) el 14/01/2016 23:09:20
Buenas amigos, espero se encuentren bien, disculpen quería solicitar un poco de ayuda por aquí ya que estoy un poco atascado en la resolución de un programa, primero lo que quiero hacer:
La idea es insertar una matriz NxN y un vector de la misma longitud que el lado de la matriz, todo perfecto hasta aquí. Pero resulta que luego quiero cambiar a la primera posición (Fila 1), una fila entera si el primer componente de alguna fila es "1" ejemplo: A[i,j] = 1, quiero cambiar toda esa primera a la primera, y la que estaba en la primera cambiarla a la posición donde se encontró esta, ya esa parte también la tengo resuelta, mi problema está en como hacer para cambiar el elemento del vector que también corresponde al elemento de la matriz, pongamos un ejemplo y digamos que la matriz y el vector son los siguientes: (El vector sería la última columna, osea los que están después de las barras)
2 5 -1 0 | -8
3 1 0 4 | 15
2 -1 2 3 | 22
1 3 -2 -2 | 15
Ahora bien, como en una de las filas el primer elemento es "1". entonces se debería mover toda esa fila a la primera posición, y donde se encuentra actualmente la fila que contiene al 1 mover la otra fila quedando de la siguiente forma:
1 3 -2 -2 | 15
3 1 0 4 | 15
2 -1 2 3 | 22
2 5 -1 0 | -8
Mi problema es que el programa que he creado hasta ahora, cambia perfectamente la fila (Que vendría siendo la matriz), pero el elemento después de la barra no lo cambia (El vector), o mejor dicho, lo cambia en algunos casos, por ejemplo cuando pruebo ingresando matrices de 3 elementos lo hace perfectamente, pero cuando ingreso una matriz como la de arriba (4x4), me cambia las filas, y los elementos después de la barra no los cambia.
A continuacion adjunto todo el código que lo que he desarrollado hasta ahora.
El código en sí de lo que creo que creo que está fallando es el procedimiento pasarUno, no se si es que he pasado por referencia alguna variable mal (Los vectores), pero sinceramente no logro dar con la solución después de más de 5 horas intentando. Alguien sabría como podría solucionarlo?
La idea es insertar una matriz NxN y un vector de la misma longitud que el lado de la matriz, todo perfecto hasta aquí. Pero resulta que luego quiero cambiar a la primera posición (Fila 1), una fila entera si el primer componente de alguna fila es "1" ejemplo: A[i,j] = 1, quiero cambiar toda esa primera a la primera, y la que estaba en la primera cambiarla a la posición donde se encontró esta, ya esa parte también la tengo resuelta, mi problema está en como hacer para cambiar el elemento del vector que también corresponde al elemento de la matriz, pongamos un ejemplo y digamos que la matriz y el vector son los siguientes: (El vector sería la última columna, osea los que están después de las barras)
2 5 -1 0 | -8
3 1 0 4 | 15
2 -1 2 3 | 22
1 3 -2 -2 | 15
Ahora bien, como en una de las filas el primer elemento es "1". entonces se debería mover toda esa fila a la primera posición, y donde se encuentra actualmente la fila que contiene al 1 mover la otra fila quedando de la siguiente forma:
1 3 -2 -2 | 15
3 1 0 4 | 15
2 -1 2 3 | 22
2 5 -1 0 | -8
Mi problema es que el programa que he creado hasta ahora, cambia perfectamente la fila (Que vendría siendo la matriz), pero el elemento después de la barra no lo cambia (El vector), o mejor dicho, lo cambia en algunos casos, por ejemplo cuando pruebo ingresando matrices de 3 elementos lo hace perfectamente, pero cuando ingreso una matriz como la de arriba (4x4), me cambia las filas, y los elementos después de la barra no los cambia.
A continuacion adjunto todo el código que lo que he desarrollado hasta ahora.
El código en sí de lo que creo que creo que está fallando es el procedimiento pasarUno, no se si es que he pasado por referencia alguna variable mal (Los vectores), pero sinceramente no logro dar con la solución después de más de 5 horas intentando. Alguien sabría como podría solucionarlo?
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
Program Menu_base;
uses crt;
Type
Matriz = array[1..10,1..10] of real;
Vector = array[1..10] of real;
Var
X : matriz;
Y,Z : Vector;
N ,op : integer;
procedure Llenar(Var A: Matriz; Var B: Vector; Var N:integer);
var i, j,k: integer;
begin
writeln;writeln;
write('Indique el tamano del lado de la matriz (NxN) : ');
readln(N);
writeln;
k:=1;
for i:= 1 to N do
begin
for j:= 1 to N do
begin
write(' Coeficiente [',i,',',j,']= ');
readln( A[i,j]);
if j = N then
begin
write(' Termino independiente: ');
readln(B[k]);
k:=k+1;
end;
end;
writeln;
end;
end;
procedure Mostrar(Z: Matriz; L: Vector; N: integer);
var i,j: integer;
begin
writeln; writeln;
writeln( ' Sistema de ecuaciones ',N:2,' X ',N:2);
writeln; writeln;
for i:= 1 to N do
begin
for j:= 1 to N do
write(' ',Z[i,j]:0:0);
write(' = ',L[i]:0:0);
writeln;
end;
end;
procedure pasarUno(var a: Matriz; var vecInds,vecAux: Vector); {vecInds = Vector que contiene los terminos independientes}
var i,j:integer; {vecAux = Vector auxiliar}
aux:real;
begin
{Si alguna Fila tiene como primer elemento "1"
entonces se pasa esa fila a la primera posición}
aux:=0;
for i:=1 to n do
begin
if a[i,1]=1 then
begin
for j:=1 to n do
begin
vecAux[j]:= a[i,j];
a[i,j]:= a[1,j];
a[1,j]:=vecAux[j]; {Falta también subir el término independiente}
{:::::::: AQUÍ abajo comienza el código para subir el término independiente (En el vector) ::::::::}
aux:=vecInds[1]; {Cuando el lado de la matriz es par el cambio en el vector funciona}
vecInds[1]:=vecInds[i]; {Pero cuando es impar no lo cambia}
vecInds[i]:=aux;
end;
end;
end;
end;
Begin
op:= -1;
While op <> 0 do begin
ClrScr;
writeln; writeln;
writeln( 'Menu Base');
writeln; writeln;
writeln( '1. Llenar Matriz ');
writeln( '2. Mostrar Matriz por filas');
writeln( '3. Cambiar fila con primer elemento = 1 arriba');
writeln;
writeln( '0. Salir');
writeln;
write( 'Seleccione (0-3) : ');
readln( op );
case op of
1 : Llenar(X,Y,N) ;
2 : Mostrar(X,Y,N);
3 : pasarUno(X,Y,Z);
else
if op <> 0 then writeln ('Opcion invalida ..');
end;
if op <> 0 then readln;
end;
end.
Valora esta pregunta


0