- •«Решение системы n-линейных уравнений с n-переменными» пояснительная записка
- •Содержание
- •Введение
- •1. Общая часть
- •1.1. Описание предметной области
- •1.2. Анализ методов решения
- •1.4. Описание языка Delphi
- •2.4.1. Общие сведения
- •2. Специальная часть
- •2.4. Описание программы
- •2.4.6. Входные и выходные данные
- •Заключение
2.4.6. Входные и выходные данные
Входными данными программы являются вещественные числа- значения коэффициентов уравнений системы, вводимые с клавиатуры.
Выходными данными являются значения действительных корней системы — вещественные числа. Выходные данные выводятся и на экран и в файл.
2.6. Результат работы программы
При запуске исполнительного файла открывается главная форма (рис. 1).
Рис.1
При нажатии кнопки «Ввод» программа выдает матрицу с тем количеством ячеек ,сколько неизвестных вы ввели на 1ом шаге.
Дальше, после ввода всех данных, при нажатии кнопки «Рассчитать» выдаётся ответ.
При нажатии кнопки «Сохранить результат как» результат будет записан в файл, место расположения файла, вы задаете сами.
Заключение
Разработанная в ходе выполнения курсового проекта программа удовлетворяет всем требованиям задания, что подтверждается протоколом испытаний.
Разработанная программа может быть использована для решения СЛАУ. Результат выполнения программы может быть записан в файл по желанию пользователя. Программа может быть использована в учебных целях для демонстрации работы процедур и функций, работающих с вещественным типом.
СПИСОК ЛИТЕРАТУРЫ
Стандарты Единой Системы Программной Документации:
ГОСТ 19.105-78 Общие требования к программным документам;
ГОСТ 19.106-78 Требования к программным документам, выполненным печатным способом;
ГОСТ 19.201-78 Техническое задание. Требования к содержанию и оформлению;
ГОСТ 19.301-78 Программа и методика испытаний. Требования к содержанию и оформлению;
ГОСТ 19.401-78 Текст программы. Требования к содержанию и оформлению;
ГОСТ 19.402-78 Описание программы. Требования к содержанию и оформлению;
ГОСТ 19.505-79 Руководство оператора. Требования к содержанию и оформлению;
ГОСТ 19.701-90 Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения.
ПРИЛОЖЕНИЕ 1
Рис.1
ПРИЛОЖЕНИЕ 2
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Printers;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Memo1: TMemo;
Edit3: TEdit;
Label1: TLabel;
Button2: TButton;
Label2: TLabel;
Label3: TLabel;
Label5: TLabel;
Label6: TLabel;
Button4: TButton;
SaveDialog1: TSaveDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure Button4Click(Sender: TObject);
procedure StringGrid2KeyPress(Sender: TObject; var Key: Char);
private
end;
var
Form1: TForm1;
implementation
type
matrix_a = array [1..100,1..100] of real;
matrix_b = array [1..100] of real;
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
{контроль вводимых данных}
begin
Case Key of
'0'..'9',#8: ;
#13:
begin
if Key='.'
then Key:=',';
if Pos(',',Edit1.Text)<>0
then Key:=Chr(0);
end;
else Key:=Chr(0);
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
{контроль вводимых данных}
begin
Case Key of
'0'..'9',#8: ;
#13:
begin
if Key='.'
then Key:=',';
if Pos(',',Edit1.Text)<>0
then Key:=Chr(0);
end;
else Key:=Chr(0);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
{задание размера StringGrid}
var
n:integer;
begin
n:=strtoint(edit3.text);
if n>10 then ShowMessage('error:n<=10')
else
StringGrid1.ColCount:= StrToInt(Edit3.Text);
StringGrid1.RowCount:= StrToInt(Edit3.Text);
StringGrid2.rowCount:= StrToInt(Edit3.Text);
end;
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
Case Key of
#8,'0'..'9':;
#13:
if StringGrid1.Col<StringGrid1.ColCount-1 then
StringGrid1.Col:=StringGrid1.Col+1;
'.',',':
begin
if key<>DecimalSeparator then
key:=DecimalSeparator;
if pos(DecimalSeparator, stringGrid1.Cells[StringGrid1.Col,0])>0 then
Key:=Chr(0);
end;
'-':
if length(StringGrid1.Cells[stringgrid1.Col,0])>0 then
Key:=Chr(0);
else
key:=chr(0);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
{расчет}
var a: matrix_a; b,x,x0: matrix_b;
n,i,j,k,max_it:integer; s,eps: real; q: Boolean;
begin
n:=strtoint(edit3.text);
max_it:=StrToInt(Edit1.Text);
eps:=0.00001;
Memo1.Clear;
for i:=1 to n do begin
for j:=i to n do begin
a[i,j]:=StrToFloat(StringGrid1.Cells[i-1,j-1]);
if a[i,i]=0 then ShowMessage('error:opr=0,vvedite drugie dannie');
end;
end;
for i:=1 to n do begin
for j:=i to n do begin
if a[i,i]=0 then exit;
end;
end;
for i:=1 to n do
for j:=1 to n do
a[i,j]:=StrToFloat(StringGrid1.Cells[i-1,j-1]);
for i:=1 to n do
b[i]:=StrToFloat(StringGrid2.Cells[0,i-1]);
for i:=1 to n do
begin
x0[i]:=0;
x[i]:=0;
end;
j:=0;
q:=False;
repeat
for i:=1 to n do
begin
s:=0;
for k:=1 to n do
if i<>k then
s:=s+a[k,i]*x[k];
x[i]:=(b[i]-s)/a[i,i];
end;
for i:=1 to n do
begin
if abs(x[i]-x0[i])>eps then
q:=False
else
q:=True;
x0[i]:=x[i];
end;
inc(j);
until (j=max_it) or q;
Memo1.Lines.Add(Количество итераций: '+IntToStr(j));
if q=False then
Memo1.Lines.Add('заданная точность не достигнута');
for i:=1 to n do
Memo1.Lines.Add('x['+IntToStr(i)+']='+FloatToStrF(x0[i],ffgeneral,3,5));
end;
procedure TForm1.Button4Click(Sender: TObject);
{сохранение результата в файл}
begin
SaveDialog1.Filter := 'Any file (*.*)|*.*'+
'|Text files (*.txt)|*.TXT'+
'|Pascal files (*.pas)|*.PAS';
if SaveDialog1.Execute then
begin
Label1.Caption:= SaveDialog1.FileName;
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end
else
begin
Label1.Caption:= Ошибка при сохранении';
end
end;
procedure TForm1.StringGrid2KeyPress(Sender: TObject; var Key: Char);
{контроль ввода}
begin
Case Key of
#8,'0'..'9':;
#13:
if StringGrid1.Col<StringGrid1.ColCount-1 then
StringGrid1.Col:=StringGrid1.Col+1;
'.',',':
begin
if key<>DecimalSeparator then
key:=DecimalSeparator;
if pos(DecimalSeparator, stringGrid1.Cells[StringGrid1.Col,0])>0 then
Key:=Chr(0);
end;
'-':
if length(StringGrid1.Cells[stringgrid1.Col,0])>0 then
Key:=Chr(0);
else
key:=chr(0);
end;
end;
end.
