• Lenguaje

    Pascal

  • Descripción

    Resuelve sistemas de ecuaciones con el método de Gauss-Jordan.

    Por ejemplo para resolver el siguiente sistema de ecuaciones:

    2x+y-z=8
    -3x-y+2z=-11
    -2x+y+2z=-3

    Ingrese los siguientes datos:
    Ingrese el número de ecuaciones (n): 3
    Ingrese la literal de la variable 1: x
    Ingrese la literal de la variable 2: y
    Ingrese la literal de la variable 3: z
    Ingrese el coeficiente de la variable 'x' de la ecuación 1: 2
    Ingrese el coeficiente de la variable 'y' de la ecuación 1: 1
    Ingrese el coeficiente de la variable 'z' de la ecuación 1: -1
    Ingrese la constante de la ecuación 1: 8
    Ingrese el coeficiente de la variable 'x' de la ecuación 2: -3
    Ingrese el coeficiente de la variable 'y' de la ecuación 2: -1
    Ingrese el coeficiente de la variable 'z' de la ecuación 2: 2
    Ingrese la constante de la ecuación 2: -11
    Ingrese el coeficiente de la variable 'x' de la ecuación 3: -2
    Ingrese el coeficiente de la variable 'y' de la ecuación 3: 1
    Ingrese el coeficiente de la variable 'z' de la ecuación 3: 2
    Ingrese la constante de la ecuación 3: -3

    Solución:

    x = 2
    y = 3
    z = -1

    Presione una tecla para continuar . . .

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
{ Co'digo compilado con FreePascal               }
{ Este co'digo no es compatible con Turbo Pascal }

program gaussjordan;
uses crt;

var i, j, k, n : integer;
var matriz : array of array of real;
var termino : real;
var literales : string;
var literal : char;

begin
    write ('Ingrese el n'#163'mero de ecuaciones (n): ');
    readln (n);
    setlength (matriz, n, n+1);
    literales := '';
    for i := 0 to n - 1 do
        begin
            write ('Ingrese la literal de la variable ', i+1, ': ');
            repeat
                literal := lowercase (readkey);
            until (literal in ['a'..'z', 'A'..'Z']) and (pos (literal, literales) = 0);
            literales += literal;
            writeln (literal);
        end;
    for i := 0 to n - 1 do
        begin
            for j := 0 to n - 1 do
                begin
                    write ('Ingrese el coeficiente de la variable '#39, literales[j+1], #39' de la ecuaci'#162'n ', i+1, ': ');
                    readln (matriz[i, j]);
                end;
            write ('Ingrese la constante de la ecuaci'#162'n ', i+1, ': ');
            readln (matriz[i, n]);
        end;
    writeln;
    for i := 0 to n - 1 do
        begin
            if matriz[i, i] = 0.0 then
                begin
                    writeln (stderr, 'Error: divisi'#162'n entre cero.'#10#13);
                    write ('Presione una tecla para terminar . . . ');
                    readkey;
                    exit;
                end;
            for k := 0 to n - 1 do
                if k <> i then
                    begin
                        termino := matriz[k, i] / matriz[i, i];
                        for j := 0 to n do
                            matriz[k, j] -= termino * matriz[i, j];
                    end;
        end;
    writeln ('Soluci'#162'n:'#10#13);
    for i := 0 to n - 1 do
        begin
            termino := matriz[i, n] / matriz[i, i];
            writeln (literales[i+1], ' = ', termino:0:6);
        end;
    write (#10#13'Presione una tecla para terminar . . . ');
    readkey;
end.