Помощь - Поиск - Пользователи - Календарь
Полная версия: Перевести программу на Pascal
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Accer
Помогите переделать грамму на Pascal. Написать программу решения по методу Гаусса системы линейных уравнений
а11 х1+а1n xn=b1
. . . . .
аn1 x1+ ann xn=b n
Квадратная матрица [aij] ij=1,..,n и вектор b1,..,bn-исходные данные задачи (предпологается, что система совместна и имеет единственное решение) Применить программу для решения следующих систем:
Код

а) 10 x1+x2+x3=12
     2 x1+10 x2 +x3=13
     2 x1+2 x2 +10 x3=14

б) 4 x1+0.24 x2-0.08 x3=8
    0.09 x1+3 x2-0.15 x3=9
    0.04 x1-0.08 x2+4 x3=20

в) 6 x1-x2-x3=11.33
    -x1+6 x2-x3=32
    -x1-x2+6x3=42

г) 3 x1-x2=5
    -2 x1+ x2-x3=0
    2 x1-x2+4 x3=15

д) 0.427 x1+3.210 x2-1.307 x3=2.425
    4.270 x1-0.513 x2+1.102 x3=-0.176
    0.012 x1+1.273 x2-4.175 x3=1.423

e) 10 x1-x2+2 x3-3 x4=0
     x 1-10 x2-x3+2 x4=0
    2 x1+3 x2+20 x3-x4=-10
    3 x1+2 x2+x3+20 x4=15

ж) 2 x1+3 x2-4 x3+x4-3.1=0
     0.1 x1-2 x2-5 x3+x4-2=0
     0.15 x1-3 x2+x3-4 x4-1=0
     10 x1+2 x2-x3+2.1 x4+4.7=0

з) 3 x1+1.5 x2-x3+2.4 x4=6
    -0.5 x1+x2-3.1 x3-4 x4=-12
    2 x1-0.8 x2-4 x4=1
    x1-1.3 x2+3.9 x3-3.7 x4=3.1

и) 4.13 x1-2.87 x2-1.94 x3+0.61 x4=0.32
    1.27 x1+7.23 x2-0.15 x3+1.71 x4=-4.16
    0.19 x1+2.75 x2+3.14 x3-0.76 x4=2.33
    2.87 x1+4.33 x2-2.41 x3-3.42 x4=2.79

к) x1+3 x2-2 x3-2 x5=0.5
    3 x1+4 x2-5 x3+x4-3 x5=5.4
    -2 x1-5 x2+3 x3-2 x4+2 x5=5
    x2-2 x3+5 x4+3 x5=7.5
    -2 x1-3 x2+2 x3+3 x4+4 x5=3.3

л) 7.9 x1+5.6 x2+5.7 x3-7.2 x4=6.68
    8.5 x1-4.8 x2+0.5 x3+3.5 x4=9.95
    4.3 x1+4.2 x2-3.2 x3+9.3 x4=8.6
    3.2 x1-1.4 x2-8.9 x3+8.3 x4=1

м) 10.2 x1+6.07 x2-9.1 x3+50.3=0
     9.28 x1-79.6 x2-4.92 x3+25.8=0
     68.3 x1-2.71 x2-8.14 x3+32.6=0



Есть код на С++

#include <stdio.h>
int main(int argc, char* argv[]) {
const int n = 3;
double A[n][n] = {{10, 1, 1}, {2, 10, 1}, {2, 2, 10}};
double B[n] = {12, 13, 14};
double X[n] = {0};
printf("Linear system of equations:\n\n");
for(int i=0; i<n; i++) {
for(int j=0; j<n-1; j++)
printf("(%.2f) * x%d + ", A[i][j], j);
printf("(%.2f) * x%d = %.2f\n", A[i][n-1], n-1, B[i]);
}
for(int i=0; i<n-1; i++) {
for(int j=i+1; j<n; j++) {
double multiplier = A[j][i] / A[i][i];
for(int k=0; k<n; k++)
A[j][k] -= A[i][k] * multiplier;
B[j] -= B[i] * multiplier;
}
}
for(int i=n-1; i>=0; i--) {
X[i] = B[i];
for(int j=n-1; j>i; j--)
X[i] -= A[i][j] * X[j];
X[i] /= A[i][i];
}
printf("\nResult vector X:\n");
for(int i=0; i<n; i++)
printf("X[%d] = %.2f\n", i, X[i]);
return 0;
}

volvo
Accer
Никогда не слышал о конверторах программ с одного языка программирования на другой? С Си на Паскаль (по крайней мере такие простые программы) они переводят "на ура" - остается только немного подкорректировать результат:

const
n = 3;
A: array[0 .. pred(n), 0 .. pred(n)] of double = (
(10, 1, 1), (2, 10, 1), (2, 2, 10)
);
B: array[0 .. pred(n)] of double = (
12, 13, 14
);

var
X: array[0 .. pred(n)] of double;
i, j, k: integer;
multiplier: double;

begin
writeln('Linear system of equations:');
writeln;

for i := 0 to pred(n) do begin
for j := 0 to pred(n-1) do
write('(', A[i][j]:0:2, ') * x', j, ' + ');
writeln('(', A[i][n-1]:0:2, ') * x', pred(n), ' = ', B[i]:0:2);
end;

for i := 0 to pred(n-1) do begin
for j := i+1 to pred(n) do begin
multiplier := A[j][i] / A[i][i];
for k := 0 to pred(n) do
A[j][k] := A[j][k] - A[i][k] * multiplier;
B[j] := B[j] - B[i] * multiplier;
end;
end;

for i := n-1 downto 0 do begin
X[i] := B[i];
for j := n-1 downto succ(i) do
X[i] := X[i] - A[i][j] * X[j];
X[i] := X[i] / A[i][i];
end;

writeln;
writeln('Result vector X:');
for i := 0 to pred(n) do begin
writeln('X[', i, '] = ', X[i]:0:2);
end;
end.

Accer
Спасибо большое! А где можно взять эту программу??? Подскажите?
volvo
У Гугла спроси, называется C2PAS32.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.