Курсовая Решение систем линейных уравнений 2
Работа добавлена на сайт bukvasha.net: 2015-10-25Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
Министерство образования и науки Российской Федерации
Филиал Владивостокского государственного университета
экономики и сервиса в г. Артеме
Кафедра информационных систем и компьютерных технологий
Курсовая работа
по дисциплине: высокоуровневые методы обработки информации и
программирования
тема: Решение систем линейных уравнений
Выполнил: студент группы ИПИ-05-01
Вербицкий М.С.
Проверил: ассистент кафедры ИСКТ
Кан Н.Э.
Артем 2007
Техническое задание
Общая часть:
1. Разработать алгоритм решения поставленной задачи, используя методы объектно-ориентированного программирования.
2. Описать объектную модель поставленной задачи.
3. Предоставить исходный программный код.
Задание:
Написать программу осуществляющую решение систем линейных уравнений.
Содержание
Введение........................................................................................................... 4
1.. Среда программирования........................................................................... 5
2.. Разработка программного продукта........................................................... 7
3.. Схема взаимодействия компонентов........................................................ 12
Заключение.........................................................................................................
Список литературы............................................................................................
Приложение №1 (дискета с программным продуктом)………………………..
Приложение №2 (текст программы на языке Borland Delphi 7)……………….
Введение
Основной целью написания этой курсовой работы была разработка программного продукта осуществляющего решение систем линейных уравнений. Для написания программного продукта была выбрана среда программирования Delphi от компании Borland версии 7.
1. Среда программирования
MS-Windows предоставляет пользователям оболочку графического интерфейса (GUI), которая обеспечивает стандартную среду пользователя и программиста. (GUI) предлагает более сложное и дружелюбное окружение пользователя, чем командно-управляемый интерфейс DOS. Работа в Windows основана на интуитивно понятных принципах. Вам легко переключиться с задачи на задачу и осуществлять обмен информацией между ними. Однако разработчики приложений традиционно сталкиваются с трудностями программирования, поскольку организация среды Windows является чрезвычайно сложной.
Delphi - язык и среда программирования, относящаяся к классу RAD- (Rapid Application Development ‑ “Средство быстрой разработки приложений”) средств CASE - технологии. Delphi сделала разработку мощных приложений Windows быстрым процессом, доставляющим вам удовольствие. Приложения Windows, для создания которых требовалось большое количество человеческих усилий например в С++, теперь могут быть написаны одним человеком, использующим Delphi.
Интерфейс Windows обеспечивает полное перенесение CASE-технологий в интегрированную систему поддержки работ по созданию прикладной системы на всех фазах жизненного цикла работы и проектирования системы.
Delphi обладает широким набором возможностей, начиная от проектировщика форм и кончая поддержкой всех форматов популярных баз данных. Среда устраняет необходимость программировать такие компоненты Windows общего назначения, как метки, пиктограммы и даже диалоговые панели. Работая вы неоднократно видели одинаковые “объекты” во многих разнообразных приложениях. Диалоговые панели (например Choose File и Save File) являются примерами многократно используемых компонентов, встроенных непосредственно в Delphi, который позволяет приспособить эти компоненты к имеющийся задаче, чтобы они работали именно так, как требуется создаваемому приложению. Также здесь имеются предварительно определенные визуальные и невизуальные объекты, включая кнопки, объекты с данными, меню и уже построенные диалоговые панели. С помощью этих объектов можно, например, обеспечить ввод данных просто несколькими нажатиями кнопок мыши, не прибегая к программированию. Это наглядная реализация применений CASE-технологий в современном программировании приложений. Та часть, которая непосредственно связана с программированием интерфейса пользователя системой получила название визуальное программирование
Выгоды от проектирования АРМ в среде Windows с помощью Delphi:
* Устраняется необходимость в повторном вводе данных;
* Обеспечивается согласованность проекта и его реализации;
* Увеличивается производительность разработки и переносимость программ.
Визуальное программирование как бы добавляет новое измерение при создании создании приложений, давая возможность изображать эти объекты на экране монитора до выполнения самой программы. Без визуального программирования процесс отображения требует написания фрагмента кода, создающего и настрающего объект “по месту”. Увидеть закодированные объекты было возможно только в ходе исполнения программы. При таком подходе достижение того, чтобы объекты выглядели и вели себя заданным образом, становится утомительным процессом, который требует неоднократных исправлений программного кода с последующей прогонкой программы и наблюдения за тем, что в итоге получилось.
Благодаря средствам визуальной разработки можно работать с объектами, держа их перед глазами и получая результаты практически сразу. Способность видеть объекты такими, какими они появляются в ходе исполнения программы, снимает необходимость проведения множества операций вручную, что характерно для работы в среде не обладающей визуальными средствами — вне зависимости от того, является она объектно-ориентированной или нет. После того, как объект помещен в форму среды визуального программирования, все его атрибуты сразу отображаются в виде кода, который соответствует объекту как единице, исполняемой в ходе работы программы.
Размещение объектов в Delphi связано с более тесными отношениями между объектами и реальным программным кодом. Объекты помещаются в вашу форму, при этом код, отвечающий объектам, автоматически записывается в исходный файл. Этот код компилируется, обеспечивая существенно более высокую производительность, чем визуальная среда, которая интерпретирует информацию лишь в ходе исполнения программы.
2. Разработка программного продукта
Объектно-ориентированное программирование имеет одно неоспоримое преимущество: способ создания программы путем “сбора ее по кусочкам” очень прост и нагляден. Чтобы использовать объект, достаточно перетащить его на форму и с ним уже можно работать. Визуальный интерфейс прост в освоении, к тому же среда сама создает “скелет” будущего программного продукта, освобождая программиста от необходимости писать все вручную, чем очень упрощает работу. Прежде чем начать писать программу необходимо разместить на форме все компоненты (объекты), которые собираемся использовать и представить приблизительный алгоритм ее работы. Алгоритм работы следующий.
Программа производит расчет наиболее простым способом, а использование таблицы, показывающей промежуточные результаты, делает его более наглядным.
При запуске программы первым делом происходит создание формы со всем что на ней находится (FormCreate), создание и заполнение таблицы (пустые ячейки заполняются символом “-”)
procedure TForm1.FormCreate(Sender: TObject);
var
i,j:integer;
begin
stringgrid1.Cells[0,0]:=' ';
stringgrid1.Cells[1,0]:='mi';
stringgrid1.Cells[2,0]:='X1';
…
for j:=1 to 6 do
begin
for i:=1 to 7 do
begin
stringgrid1.Cells[i,j]:='-';
end;
end;
end;
При нажатии кнопки “Выход” – происходит выход из программы (закрытие формы)
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Close;
end;
Далее следует заполнить соответствующие поля числами. После нажатии кнопки “Считать” происходит зануление используемых переменных, заполнение расчет и заполнение таблицы:
procedure TForm1.Button1Click(Sender: TObject);
var
…
begin
i:=0;
j:=0;
k:=0;
sto:=0;
str:=0;
sto1:=0;
str1:=0;
m:=0;
x1:=0;
x2:=0;
x3:=0;
…
Заполнение таблицы происходит в несколько этапов (хотя пользователь получает результат почти мгновенно).
1)сначала в таблицу вносятся введенные ранее числа (строки А) и находится наибольшее:
stringgrid1.Cells[2,1]:=Edit1.text;
stringgrid1.Cells[3,1]:=Edit2.text;
…
stringgrid1.Cells[5,3]:=Edit12.text;
…
for j:=1 to 3 do
begin
for i:=2 to 4 do
begin
if strtofloat(stringgrid1.Cells[i,j])>m then
begin
m:=strtofloat(stringgrid1.Cells[i,j]);
sto:=i;
str:=j;
end;
end;
end;
2)Заполняет mi и Е в строках А:
for j:=1 to 3 do
begin
stringgrid1.Cells[1,j]:=floattostr((strtofloat(stringgrid1.Cells[sto,j]))/m);
stringgrid1.Cells[6,j]:=floattostr((strtofloat(stringgrid1.Cells[2,j]))+(strtofloat
(stringgrid1.Cells[3,j]))+(strtofloat(stringgrid1.Cells[4,j]))+(strtofloat(stringgrid1.Cells[5,j
end;
3)После соответствующих вычислений заполняются строки В:
for j:=1 to 3 do
begin
for i:=2 to 6 do
begin
if (i<>sto) and (j<>str) then
begin
k:=k+1;
if k<=4 then
begin
if k=4 then
begin stringgrid1.Cells[7,4]:=floattostr(strtofloat(stringgrid1.Cells[i,str])*strtofloat(stringgrid1.Cells[1,j])+strtofloat(stringgrid1.Cells[i,j]));
end
else
…
4)Аналогичным методом из значений строк В находится строка С.
5)После этого происходит вычисление X1, X2, X3. В зависимости от того какой X вычисляется первым, программа определяет способ нахождения остальных X:
x1:=(strtofloat(stringgrid1.Cells[5,6]))/(strtofloat(stringgrid1.Cells[sto2,6]));
if sto2=2 then
begin
Label10.Caption:='X1='+(floattostr(x1));
end;
if sto2=3 then
begin
Label11.Caption:='X2='+(floattostr(x1));
end;
if sto2=4 then
begin
Label12.Caption:='X3='+(floattostr(x1));
end;
…
Результаты отображаются напротив соответствующего X на форме.
3. Схема взаимодействия компонентов
Заключение
Список использованных источников
1. Гофман В. Э., Хомоненко А. Д., Delphi. Быстрый старт. — СПб.: БХВ-Петербург, 2003. — 288 с: ил
2. Дарахвелидае П. Г., Марков Е. П., Программирование в Delphi 7. — СПб.: БХВ-Петербург, 2003. — 784 с: ил.
3. Флеиов М. Е., Профаммирование в Delphi глазами хакера. — СПб.: БХВ-Петербург, 2003. - 368 с: ил.
Приложение №1
(дискета с программным продуктом)
Приложение №2
(текст программы на языке Borland Delphi 7)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Button1: TButton;
Button2: TButton;
StringGrid1: TStringGrid;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i,j:integer;
begin
stringgrid1.Cells[0,0]:=' ';
stringgrid1.Cells[1,0]:='mi';
stringgrid1.Cells[2,0]:='X1';
stringgrid1.Cells[3,0]:='X2';
stringgrid1.Cells[4,0]:='X3';
stringgrid1.Cells[5,0]:='b';
stringgrid1.Cells[6,0]:='E';
stringgrid1.Cells[7,0]:='E''';
stringgrid1.Cells[0,1]:='A';
stringgrid1.Cells[0,2]:='A';
stringgrid1.Cells[0,3]:='A';
stringgrid1.Cells[0,4]:='B';
stringgrid1.Cells[0,5]:='B';
stringgrid1.Cells[0,6]:='C';
for j:=1 to 6 do
begin
for i:=1 to 7 do
begin
stringgrid1.Cells[i,j]:='-';
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,str,sto,str1,sto1,str2,sto2,k:integer;
m,x1,x2,x3:real;
begin
i:=0;
j:=0;
k:=0;
sto:=0;
str:=0;
sto1:=0;
str1:=0;
m:=0;
x1:=0;
x2:=0;
x3:=0;
stringgrid1.Cells[2,1]:=Edit1.text
stringgrid1.Cells[3,1]:=Edit2.text;
stringgrid1.Cells[4,1]:=Edit3.text;
stringgrid1.Cells[2,2]:=Edit4.text;
stringgrid1.Cells[3,2]:=Edit5.text;
stringgrid1.Cells[4,2]:=Edit6.text;
stringgrid1.Cells[2,3]:=Edit7.text;
stringgrid1.Cells[3,3]:=Edit8.text;
stringgrid1.Cells[4,3]:=Edit9.text;
stringgrid1.Cells[5,1]:=Edit10.text;
stringgrid1.Cells[5,2]:=Edit11.text;
stringgrid1.Cells[5,3]:=Edit12.text;
m:=strtofloat(stringgrid1.Cells[2,1]);
sto:=2;
str:=1;
for j:=1 to 3 do
begin
for i:=2 to 4 do
begin
if strtofloat(stringgrid1.Cells[i,j])>m then
begin
m:=strtofloat(stringgrid1.Cells[i,j]);
sto:=i;
str:=j;
end;
end;
end;
for j:=1 to 3 do
begin //заполняет mi и Е (в строках А)
stringgrid1.Cells[1,j]:=floattostr(-(strtofloat(stringgrid1.Cells[sto,j]))/m);
stringgrid1.Cells[6,j]:=floattostr((strtofloat(stringgrid1.Cells[2,j]))+(strtofloat(stringgrid1.Cells[3,j]))+(strtofloat(stringgrid1.Cells[4,j]))+(strtofloat(stringgrid1.Cells[5,j])));
end;
k:=0;
for j:=1 to 3 do
begin
for i:=2 to 6 do
begin
if (i<>sto) and (j<>str) {strtofloat(stringgrid1.Cells[1,j])<>-1} then
begin
k:=k+1;
if k<=4 then
begin
if k=4 then
begin
stringgrid1.Cells[7,4]:=floattostr(strtofloat(stringgrid1.Cells[i,str])*strtofloat(stringgrid1.Cells[1,j])+strtofloat(stringgrid1.Cells[i,j]));
end
else
begin
stringgrid1.Cells[i,4]:=floattostr(strtofloat(stringgrid1.Cells[i,str])*strtofloat(stringgrid1.Cells[1,j])+strtofloat(stringgrid1.Cells[i,j]));
end;
end
else
begin
if k=8 then
begin
stringgrid1.Cells[7,5]:=floattostr(strtofloat(stringgrid1.Cells[i,str])*strtofloat(stringgrid1.Cells[1,j])+strtofloat(stringgrid1.Cells[i,j]));
end
else
begin
stringgrid1.Cells[i,5]:=floattostr(strtofloat(stringgrid1.Cells[i,str])*strtofloat(stringgrid1.Cells[1,j])+strtofloat(stringgrid1.Cells[i,j]));
end;
end;
end;
end;
end;
m:=strtofloat(stringgrid1.Cells[2,4]);
sto1:=2;
str1:=4;
for j:=4 to 5 do
begin
for i:=2 to 4 do
begin
if stringgrid1.Cells[i,j]<>'-' then
begin
if strtofloat(stringgrid1.Cells[i,j])>m then
begin
m:=strtofloat(stringgrid1.Cells[i,j]);
sto1:=i;
str1:=j;
end;
end;
end;
end;
stringgrid1.Cells[6,4]:='0';
stringgrid1.Cells[6,5]:='0';
for j:=4 to 5 do
begin
stringgrid1.Cells[1,j]:=floattostr(-(strtofloat(stringgrid1.Cells[sto1,j]))/m);
for i:=2 to 5 do
begin
if stringgrid1.Cells[i,j]<>'-' then
begin
stringgrid1.Cells[6,j]:=floattostr((strtofloat(stringgrid1.Cells[6,j]))+(strtofloat(stringgrid1.Cells[i,j])));
end;
end;
end;
k:=0;
for j:=4 to 5 do
begin
for i:=2 to 6 do
begin
if (i<>sto) and (j<>str) and (i<>sto1) and (j<>str1) then
begin
k:=k+1;
if k<=3 then
begin
if k=3 then
begin
stringgrid1.Cells[7,6]:=floattostr(strtofloat(stringgrid1.Cells[i,str1])*strtofloat(stringgrid1.Cells[1,j])+strtofloat(stringgrid1.Cells[i,j]));
end
else
begin
stringgrid1.Cells[i,6]:=floattostr(strtofloat(stringgrid1.Cells[i,str1])*strtofloat(stringgrid1.Cells[1,j])+strtofloat(stringgrid1.Cells[i,j]));
end;
end;
end;
end;
end;
stringgrid1.Cells[6,6]:='0';
j:=6;//заполняет Е (в строке С)
str2:=6;
k:=0;
for i:=2 to 5 do
begin
if stringgrid1.Cells[i,j]<>'-' then
begin
k:=k+1;
if k=1 then
begin
sto2:=i;
end;
stringgrid1.Cells[6,j]:=floattostr((strtofloat(stringgrid1.Cells[6,j]))+(strtofloat(stringgrid1.Cells[i,j])));
end;
end;
x1:=(strtofloat(stringgrid1.Cells[5,6]))/(strtofloat(stringgrid1.Cells[sto2,6]));
if sto2=2 then
begin
Label10.Caption:='X1='+(floattostr(x1));
end;
if sto2=3 then
begin
Label11.Caption:='X2='+(floattostr(x1));
end;
if sto2=4 then
begin
Label12.Caption:='X3='+(floattostr(x1));
end;
x2:=((strtofloat(stringgrid1.Cells[5,str1]))-x1*(strtofloat(stringgrid1.Cells[sto2,str1])))/(strtofloat(stringgrid1.Cells[sto1,str1]));
if sto1=2 then
begin
Label10.Caption:='X1='+(floattostr(x2));
end;
if sto1=3 then
begin
Label11.Caption:='X2='+(floattostr(x2));
end;
if sto1=4 then
begin
Label12.Caption:='X3='+(floattostr(x2));
end;
x3:=((strtofloat(stringgrid1.Cells[5,str]))-x1*(strtofloat(stringgrid1.Cells[sto2,str]))-x2*(strtofloat(stringgrid1.Cells[sto1,str])))/(strtofloat(stringgrid1.Cells[sto,str]));
if sto=2 then
begin
Label10.Caption:='X1='+(floattostr(x3));
end;
if sto=3 then
begin
Label11.Caption:='X2='+(floattostr(x3));
end;
if sto=4 then
begin
Label12.Caption:='X3='+(floattostr(x3));
end;
end;
end.
begin
m:=strtofloat(stringgrid1.Cells[i,j]);
sto:=i;
str:=j;
end;
end;
end;
for j:=1 to 3 do
begin //заполняет mi и Е (в строках А)
stringgrid1.Cells[1,j]:=floattostr(-(strtofloat(stringgrid1.Cells[sto,j]))/m);
stringgrid1.Cells[6,j]:=floattostr((strtofloat(stringgrid1.Cells[2,j]))+(strtofloat(stringgrid1.Cells[3,j]))+(strtofloat(stringgrid1.Cells[4,j]))+(strtofloat(stringgrid1.Cells[5,j])));
end;
k:=0;
for j:=1 to 3 do
begin
for i:=2 to 6 do
begin
if (i<>sto) and (j<>str) {strtofloat(stringgrid1.Cells[1,j])<>-1} then
begin
k:=k+1;
if k<=4 then
begin
if k=4 then
begin
stringgrid1.Cells[7,4]:=floattostr(strtofloat(stringgrid1.Cells[i,str])*strtofloat(stringgrid1.Cells[1,j])+strtofloat(stringgrid1.Cells[i,j]));
end
else
begin
stringgrid1.Cells[i,4]:=floattostr(strtofloat(stringgrid1.Cells[i,str])*strtofloat(stringgrid1.Cells[1,j])+strtofloat(stringgrid1.Cells[i,j]));
end;
end
else
begin
if k=8 then
begin
stringgrid1.Cells[7,5]:=floattostr(strtofloat(stringgrid1.Cells[i,str])*strtofloat(stringgrid1.Cells[1,j])+strtofloat(stringgrid1.Cells[i,j]));
end
else
begin
stringgrid1.Cells[i,5]:=floattostr(strtofloat(stringgrid1.Cells[i,str])*strtofloat(stringgrid1.Cells[1,j])+strtofloat(stringgrid1.Cells[i,j]));
end;
end;
end;
end;
end;
m:=strtofloat(stringgrid1.Cells[2,4]);
sto1:=2;
str1:=4;
for j:=4 to 5 do
begin
for i:=2 to 4 do
begin
if stringgrid1.Cells[i,j]<>'-' then
begin
if strtofloat(stringgrid1.Cells[i,j])>m then
begin
m:=strtofloat(stringgrid1.Cells[i,j]);
sto1:=i;
str1:=j;
end;
end;
end;
end;
stringgrid1.Cells[6,4]:='0';
stringgrid1.Cells[6,5]:='0';
for j:=4 to 5 do
begin
stringgrid1.Cells[1,j]:=floattostr(-(strtofloat(stringgrid1.Cells[sto1,j]))/m);
for i:=2 to 5 do
begin
if stringgrid1.Cells[i,j]<>'-' then
begin
stringgrid1.Cells[6,j]:=floattostr((strtofloat(stringgrid1.Cells[6,j]))+(strtofloat(stringgrid1.Cells[i,j])));
end;
end;
end;
k:=0;
for j:=4 to 5 do
begin
for i:=2 to 6 do
begin
if (i<>sto) and (j<>str) and (i<>sto1) and (j<>str1) then
begin
k:=k+1;
if k<=3 then
begin
if k=3 then
begin
stringgrid1.Cells[7,6]:=floattostr(strtofloat(stringgrid1.Cells[i,str1])*strtofloat(stringgrid1.Cells[1,j])+strtofloat(stringgrid1.Cells[i,j]));
end
else
begin
stringgrid1.Cells[i,6]:=floattostr(strtofloat(stringgrid1.Cells[i,str1])*strtofloat(stringgrid1.Cells[1,j])+strtofloat(stringgrid1.Cells[i,j]));
end;
end;
end;
end;
end;
stringgrid1.Cells[6,6]:='0';
j:=6;//заполняет Е (в строке С)
str2:=6;
k:=0;
for i:=2 to 5 do
begin
if stringgrid1.Cells[i,j]<>'-' then
begin
k:=k+1;
if k=1 then
begin
sto2:=i;
end;
stringgrid1.Cells[6,j]:=floattostr((strtofloat(stringgrid1.Cells[6,j]))+(strtofloat(stringgrid1.Cells[i,j])));
end;
end;
x1:=(strtofloat(stringgrid1.Cells[5,6]))/(strtofloat(stringgrid1.Cells[sto2,6]));
if sto2=2 then
begin
Label10.Caption:='X1='+(floattostr(x1));
end;
if sto2=3 then
begin
Label11.Caption:='X2='+(floattostr(x1));
end;
if sto2=4 then
begin
Label12.Caption:='X3='+(floattostr(x1));
end;
x2:=((strtofloat(stringgrid1.Cells[5,str1]))-x1*(strtofloat(stringgrid1.Cells[sto2,str1])))/(strtofloat(stringgrid1.Cells[sto1,str1]));
if sto1=2 then
begin
Label10.Caption:='X1='+(floattostr(x2));
end;
if sto1=3 then
begin
Label11.Caption:='X2='+(floattostr(x2));
end;
if sto1=4 then
begin
Label12.Caption:='X3='+(floattostr(x2));
end;
x3:=((strtofloat(stringgrid1.Cells[5,str]))-x1*(strtofloat(stringgrid1.Cells[sto2,str]))-x2*(strtofloat(stringgrid1.Cells[sto1,str])))/(strtofloat(stringgrid1.Cells[sto,str]));
if sto=2 then
begin
Label10.Caption:='X1='+(floattostr(x3));
end;
if sto=3 then
begin
Label11.Caption:='X2='+(floattostr(x3));
end;
if sto=4 then
begin
Label12.Caption:='X3='+(floattostr(x3));
end;
end;
end.