Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
gotovaya kursovaya.docx
Скачиваний:
6
Добавлен:
19.12.2018
Размер:
340.18 Кб
Скачать

Приложение 4

PROGRAM kvadratichnaya;

{подключение модуля, необходимого для процедур очистки экрана и задержки}

USES CRT;

{Задание массива}

TYPE MAT=ARRAY [1..10,1..11] OF REAL;

VEK=ARRAY [1..25] OF REAL;

{Описание переменных}

VAR i,j,n:INTEGER; A:MAT; X,B,X1,Y1:VEK; fr,fm:text;

a1,b1,c1,d1,e1,f1,g1:real;

{Процедура Гаусса}

PROCEDURE GAU(VAR A:MAT; VAR B,X:VEK; m:INTEGER);

VAR k,i,j,t,L:INTEGER; D:REAL; fw :TEXT;

BEGIN

{Задание всех переменных}

L:=m+1; FOR i:=1 TO m DO A[i,L]:=B[i];

{имя файла данных на диске}

ASSIGN(fw,'gaus.txt'); REWRITE(fw); {запись данных в файл}

WRITELN(fw,' CUCTEMA YPABHEHIY: ');

{начальный вывод данных}

FOR i:=1 TO m DO

BEGIN

FOR j:=1 TO m DO WRITE(fw,A[i,j]:14:6,' X[',j,'] ' );

WRITELN(fw,' = ', B[i]:14:6);

END;

{прямой ход решения СЛАУ по методу Гаусса}

{формирование треугольной матрицы коэффициентов}

FOR i:=1 TO m DO

BEGIN

D:=A[i,i]; t:=i; {ищем max в столбце}

FOR j:=i TO m DO

IF abs(A[j,i]) > abs(D) THEN

BEGIN D:=A[j,i]; t:=j;END;

{обмен строк}

IF i<>t THEN

BEGIN

FOR j:=i TO L DO

BEGIN D:=A[i,j]; A[i,j]:=A[t,j]; A[t,j]:=D;END;

END;

{формирование строки}

FOR j:=L DOWNTO i DO A[i,j]:=A[i,j]/A[i,i];

{зануление столбцов и пересчет А}

FOR k:=i+1 TO m DO

FOR j:=L DOWNTO i DO A[k,j]:=A[k,j]-A[i,j]*A[k,i];

END;

{обратный ход}

X[m]:=A[m,L]; FOR i:=m-1 DOWNTO 1 DO

BEGIN

D:=0; FOR j:=m DOWNTO i+1 DO D:=D+A[i,j]*X[j];

X[i]:=A[i,L]-D;

END;

WRITELN(fw,' VEKTOR X: ');

FOR i:=1 TO m DO WRITE(fw, X[i]:10:6);

WRITELN(fw); CLOSE(fw)

END;

{вычисление сумм}

BEGIN clrscr;

{имя файла данных на диске}

assign(fm,'kursovik.txt'); reset(fm); {чтение данных c файла}

FOR i:=1 TO 25 DO read(fm,X1[i]);

FOR i:=1 TO 25 DO read(fm,Y1[i]);

FOR i:=1 TO 25 DO

{формулы вычисления для сумм}

begin

a1:=a1+X1[i]; {для x(i)}

b1:=b1+Y1[i]; {для y(i)}

c1:=c1+sqr(X1[i]); {для x(i)2}

d1:=d1+X1[i]*Y1[i]; {для x(i)y(i)}

e1:=e1+X1[i]*X1[i]*X1[i]; {для x(i)3}

f1:=f1+X1[i]*X1[i]*X1[i]*X1[i]; {для x(i)4}

g1:=g1+X1[i]*X1[i]*Y1[i]; {для x(i)2y(i)}

end;

{имя файла данных на диске}

assign(fr,'dan.txt');REWRITE(fr); {запись данных в файл}

{Формирование матрицы А}

write(fr,25,' ',a1:4:4,' '); writeln(fr,c1:4:4,' ');

write(fr,a1:4:4,' ',c1:4:4,' '); writeln(fr,e1:4:4,' ');

write(fr,c1:4:4,' ',e1:4:4,' '); writeln(fr,f1:4:4,' ');

write(fr,b1:4:4,' ',d1:4:4,' '); writeln(fr,g1:4:4,' ');

close(fr);

WRITELN(' РЕШЕНИЕ СЛАУ МЕТОДОМ ГАУССА. КОЛ-ВО УРАВН. НЕ БОЛЕЕ 10');

WRITELN; WRITE(' ВВОДИ ЧИСЛО УРАВНЕНИЙ: '); READLN(n);

{имя файла данных на диске}

assign(fr,'dan.txt'); reset(fr); {чтение данных с файла}

FOR i:=1 TO n DO

FOR j:=1 TO n DO READ(fr,A[i,j]);

FOR i:=1 TO n DO READ(fr,B[i]);

for i:=1 to n do begin

for j:=1 to n do write(a[i,j]:14:6);

writeln(B[i]:14:1); end;

GAU(A,B,X,n);

{вывод результатов}

WRITELN('VEKTOR X:');

FOR i:=1 TO n DO WRITE(X[i]:12:6,' '); WRITELN; readln;

END.

Результат работы программы

CUCTEMA YPABHEHIY:

25.000000 X[1] 40.400000 X[2] 86.316800 X[3] = 34039.000000

40.400000 X[1] 86.318600 X[2] 207.988022 X[3] = 64484.880000

86.318600 X[1] 207.988022 X[2] 535.163222 X[3] = 146684.350400

VEKTOR X:

412.112901 848.450296 -122.122397

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]