Pascal/Turbo Pascal - Problema con gauss

 
Vista:

Problema con gauss

Publicado por Alaiga (1 intervención) el 25/06/2012 04:21:02
Estoy tratando de hacer un programa que resuelva matricescon el metodo de gauss-jordan, solo puedo usar matrizes no vectores, el programa corre perfectamente pero las soluciones son incorrectas, asi que me imagino que es por la manera que esta hecho el programa, alguien me ayuda? sup1 es una matriz variable global por si se preguntan.

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
Procedure Ecgauss(B,D:integer);
var filas, columnas,f,c,f2,c2:integer;
di,mult:real;
begin
 writeln('filas :', B);
 writeln('columnas :', D);
 filas:=B;
 columnas :=D;
 writeln('filas :', filas);
 writeln('columnas :', columnas);
f2:=1;
C2:=1;
For f:=1 to filas do
 for c:=1 to columnas do
 Sup1[f,c]:=Ecuacion[f,c];
 
 While c2<>columnas do begin
   di:=(Sup1[f2,c2]);
for c:=1 to D do
  Sup1[f2,c]:= sup1[f2,c]/ di;
 
for f:=1 to B do
 for c:=1 to D do begin
 if f=f2 then
 else
 begin
 mult:=Sup1[f,c2];
 sup1[f,c]:=sup1[f,c]-(mult*(sup1[f2,c]));
 write(sup1[f,c],' ');
 writeln;
 end;
 end;
  c2:=c2+1;
  f2:=f2+1;
  end;
for f:=1 to filas do begin
 writeln;
 for c:=1 to columnas do
 write(Sup1[f,c]:2,' ');
 writeln;
 end;
 readln;
end;
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

Problema con gauss

Publicado por ramon (2158 intervenciones) el 26/06/2012 19:30:10
{Este método es el de gauss-jordan a ver si ayuda}


program gausjordan;
uses
crt; {unidad de pantall}
var
nn, num, i, n, t : integer; {variables globales}
matriz : array[1..20,1..19] of integer; {la matriz}

procedure metodo(num : integer); {el metodo gausjordan}
var
h, d, s, t, r : integer; {variables internas solo para metodo}
begin
for h := 1 to num do {recorremos horizontal mente la matriz}
begin
for d := h to num do {recorremos vertical mente la matriz}
if matriz[h,d] <> 0 then {comprovamos matriz[h,d] es <> 0 entonces}
begin
t := d; {asignamos a t el valor de d}
break; {finalizamos for (break = Termina una instrucci¢n for,
while, o repeat}
end;
for d := 1 to num + 1 do {for para intercambiar valores de matriz}
begin
s := matriz[d,t]; {s toma el valor de matriz[d,t]}
matriz[d,t] := matriz[d,h]; {matriz[d,t] toma valor de matriz[d,h]}
matriz[d,h] := s; {matriz[d,h] toma el valor s o sea intercambio}
end;
for d := 1 to num + 1 do {for para comprobacion de matriz}
if (d <> h) and (matriz[h,d] = 1) then {si d <> h y matriz[h,d] = 1
entonces acemos un xor entre
matriz[r,d] y matriz[r,h] lo
cual nos daria en matriz[r,d]
un resultado 0 y 1 dependiendo
del valor que tengan}
for r := 1 to num + 1 do
matriz[r,d] := matriz[r,d] xor matriz[r,h]; {operacion xor}
end;
end;


begin
clrscr; {borrado pantalla}
num := 19; {numero de entradas}
randomize; {iniciamos generacion de simiente de numero}
for i := 1 to num do {for para llenar matriz}
begin
matriz[num + 1,i] := 1; {asignamos 1 ala posicion de la matriz}
nn := random(19); {recojemos el numero jenerado aleatoria mente}
for t := 1 to 19 do {for para llenar matriz}
begin
matriz[i,nn] := 1; {asignamos 1 ala posicion de la matriz}
nn := random(19);{recojemos el numero jenerado aleatoria mente}
end;
end;
metodo(num); {Procesamos matriz num}
writeln('Listado de pares e Impares [0]= Pares y [1] = Impares');
writeln;
for n := 1 to num do {for para comprobar numero par o impar}
if odd(matriz[num + 1,n]) then {si es impar lo imprimims}
writeln(' Impares N§ = ',n,' = ',matriz[num + 1,n],' ')
else
writeln(' Pares N§ = ',n,' = ',matriz[num + 1,n],' ');
readln;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar