Разработка интерактивной системы для решения задачи нахождения оптимального плана перевозок по стоимости с использованием СЛАУ и уравнений баланса потоков

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Pascal
  • 44 44 страницы
  • 12 + 12 источников
  • Добавлена 18.08.2024
1 496 руб.
  • Содержание
  • Часть работы
  • Список литературы
СОДЕРЖАНИЕ

ВВЕДЕНИЕ 3
1. ПОСТАНОВКА ЗАДАЧИ 5
1.1.Задание на проектирование 5
1.2. Математическая основа проектируемой интерактивной системы 6
1.3. Система тестов для тестирования и отладки программы 9
2.КОДИРОВАНИЕ И АЛГОРИТМИЗАЦИЯ 13
2.1. Описание программных объектов 13
2.2. Блок-схемы 17
3.РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ 20
ЗАКЛЮЧЕНИЕ 26
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 27
ПРИЛОЖЕНИЕ 1. Листинг приложения 29

Фрагмент для ознакомления

dfm}usesResultUnit, AboutUnit, UserGuideUnit;functionTMain.Gauss(const A:TMatrix; const B:TMatrix):TMatrix;varvectorX, tmpA,tmpB:Tmatrix;i,j,k,l,p:integer;aik,q,z,k1,k2:double;begintmpA:=TMatrix.Create(A);tmpB:=TMatrix.Create(B); //ПрямойходметодаГауссаfor k := 0 to tmpA.RowCount-1 dobegin // если ведущий элемент ненулевой, то запоминаем егоiftmpA[k,k]<>0 then k1:=tmpA[k,k]else // иначе ищем первую строку с ненулевым элементом в столбце k и переставляем строкиbeginl:=k;repeatl:=l+1until (tmpA[l,k]<>0) or (l=tmpA.RowCount);//если ненулевой элемент найденif l<=tmpA.RowCount-1 thenbegin // то меняем строки местамиtmpA.ChangeRows(k,l);tmpB.ChangeRows(k,l); // и запоминаем значение нового ведущего элементаk1:=tmpA[k,k];endelsebegin // выходим из функцииexit;end;end;fori := k+1 to tmpA.RowCount-1 dobegin k2:=tmpA[i,k];// вычитаем из лежащих ниже строк k-ю строку, умноженную на коэффициентfor j := k to tmpA.ColCount-1 dotmpA[i,j] := tmpA[i,j]-tmpA[k,j]*k2/k1;tmpB[i,0]:= tmpB[i,0]-tmpB[k,0]*k2/k1;end;end; // Обратный ход метода ГауссаvectorX:=TMatrix.Create(tmpB.RowCount,1);vectorX[tmpA.RowCount-1,0]:=(tmpB[tmpA.RowCount-1,0])/tmpA[tmpA.RowCount-1,tmpA.RowCount-1];for i:=tmpA.RowCount-2 downto 0 do begin q:=0;for j := i to vectorX.RowCount-1 do q:=q+tmpA[i,j]*vectorX[j,0];vectorX[i,0]:=(tmpB[i,0]-q)/tmpA[i,i];end;result:=vectorX;end;//отрисовываем текст в ячейке таблицы данных в несколько строк, если не помещаются в однуprocedure TMain.Button1Click(Sender: TObject);varmatrixAk, matrixAd, matrixBk, matrixBd, tmpMatrix:TMatrix;i,j:integer;tmp:double;beginResultMemo.Clear;if not flagDataFull then exit;StatusBar1.SimpleText:='Поиск оптимального решения'; // заполняем матрицу AmatrixA:=TMatrix.Create(vectorQ.RowCount,matrixData.RowCount);fori := 0 to matrixA.RowCount-1 dofor j := 0 to matrixA.ColCount-1 do begin if i+1=matrixData[j,1] then matrixA[i,j]:=-1; if i+1=matrixData[j,2] then matrixA[i,j]:=1;end; // заполняемматрицу RmatrixR:=TMatrix.Create(matrixData.RowCount);fori := 0 to matrixR.RowCount-1 domatrixR[i,i]:=matrixData[i,3]; // заполняемматрицу BmatrixB:=TMatrix.Create(matrixA.RowCount,matrixA.ColCount);matrixAk:=TMatrix.Create(vectorQ.RowCount);matrixAd:=TMatrix.Create(vectorQ.RowCount);fori := 0 to matrixAk.RowCount-1 dofor j := 0 to matrixAk.RowCount-1 do beginmatrixAk[i,j]:=matrixA[i,j];matrixAd[i,j]:=matrixA[i,j+matrixAk.RowCount];end;tmpMatrix:=matrixAd.Inverse;tmpMatrix:=tmpMatrix.MultNum(-1);tmpMatrix:=tmpMatrix.Mult(matrixAk);matrixBk:=TMatrix.CreateE(vectorQ.RowCount);matrixBd:=tmpMatrix.Transposing;fori := 0 to matrixB.RowCount-1 dofor j := 0 to matrixB.ColCount-1 do beginif (jDataSg.RowCount-1 then DataSg.RowCount:=matrixData.RowCount;ifvectorQ.RowCount>QSg.RowCount-1 then QSg.RowCount:=vectorQ.RowCount;SetMatrixInDataGridView(matrixData, DataSg,0);SetMatrixInDataGridView(vectorQ, QSg,1);flagDataFull:=true; StatusBar1.SimpleText:='Данныезагружены';//закрываем файл с даннымиCloseFile(F);end;finallyOpenFileDialog.Free;end;end;functionTMain.SaveToFile(FileName: string; constmatrix:TMatrix): Boolean;var F: TextFile; S: string;i, j: Word;beginResult := False;try // связываем с файловой переменнойAssignFile(F,FileName); // открываем на записьRewrite(F);except Exit;end;ifmatrix.ColCount>1 thenfori := 0 to matrix.RowCount - 1 dobeginS := '';for j := 0 to matrix.ColCount - 1 doS := S + FloatToStr(matrix[i, j]) + ';'; Delete(S, Length(S), 1);WriteLn(F, S);end;ifmatrix.ColCount=1 thenbeginS := '';fori := 0 to matrix.RowCount - 1 doS := S + FloatToStr(matrix[i, 0]) + ';'; Delete(S, Length(S), 1);WriteLn(F, S);end;CloseFile(F);Result := Trueend;procedure TMain.N5Click(Sender: TObject);varSaveFileDialog: TOpenDialog;FileName,tmp: string; F:TextFile;tmpStringList: TStringList;begin // добавляемкомпонентTSaveDialogSaveFileDialog :=TSaveDialog.Create(Self);try // задаемнастройкиокнадиалогасохраненияфайлаSaveFileDialog.Filter := 'TextFile|*.txt';SaveFileDialog.InitialDir := GetCurrentDir;SaveFileDialog.DefaultExt := '.txt'; // еслибылвыбранфайлifSaveFileDialog.Execute thenbegin // запоминаемимяфайлаFileName :=SaveFileDialog.FileName;ifSaveToFile(FileName, vectorP) then ShowMessage('Результатсохранен!');endfinallySaveFileDialog.Free;end;end;procedure TMain.N7Click(Sender: TObject);beginforvari := 1 to DataSG.RowCount doforvar j := 0 to DataSG.ColCount-1 doDataSG.Cells[j,i]:='';forvari := 1 to QSG.RowCount doQSG.Cells[1,i]:='';DataSG.RowCount:=7;QSG.RowCount:=4;ResultMemo.Clear;flagDataFull:=false; StatusBar1.SimpleText:='Данныенезагружены';end;procedureTMain.SetMatrixInDataGridView(const Matrix: TMatrix; const Grid: TStringGrid; constbgn:integer);var I, J: Integer;begin // выводим данные из массива в таблицу // bgn указывает на номер столбца, с которого начинать выводfor I := 0 to Matrix.RowCount-1 dofor J := 0 to Matrix.ColCount-1 doGrid.Cells[J+bgn, I+1] := FloatToStr(Matrix[I, J]);end;procedure TMain.N9Click(Sender: TObject);begin //matrixData.Free;Main.Close;end;//отрисовываем текст в ячейке таблицы объёмов в несколько строк, если не помещаются в однуprocedureTMain.QSGDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);beginwith Sender as TStringGrid dobeginCanvas.FillRect(Rect);DrawText(Canvas.Handle, PChar(Cells[ACol, ARow]), Length(Cells[ACol, ARow]), Rect, DT_CENTER or DT_WORDBREAK or DT_EXPANDTABS);end;end;end.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. ГОСТ Р ИСО 9241-210-2016 Эргономика взаимодействия человек-система. Часть 210. Человеко-ориентированное проектирование интерактивных систем. http://docs.cntd.ru/document/1200141127 (дата обращения: 17.07.2024)
2. Балдин, К. В. Математическое программирование: учебник / К. В. Балдин, Н. А. Брызгалов, А. В. Рукосуев ; под общей редакцией К. В. Балдина. – 2-е изд. – Москва : Дашков и К, 2016. – 218 с.
3. Мейер, Б. Объектно-ориентированное программирование и программная инженерия – М: Интернет-Университет Информационных Технологий (ИНТУИТ), Ай Пи Эр Медиа, 2024. – 285 c. – [Электронный ресурс] – URL: http://www.iprbookshop.ru/79706.html (дата обращения 18.07.2024)
4. Тюльпинова, Н. В. Алгоритмизация и программирование [Электронный ресурс]: учебное пособие – Саратов: Вузовское образование, 2024. – 200 c. – [Электронный ресурс] – URL: http://www.iprbookshop.ru/80539.html (дата обращения 18.07.2024)
5. Линейная алгебра : учеб. пособие / Н.В. Гредасова, М.А. Корешникова, Н.И. Желонкина [и др.] ; Мин-во науки и высш. образования РФ. – Екатеринбург : Изд-во Урал. ун-та, 2019. – 88 с – [Электронный ресурс] – URL: https://elar.urfu.ru/bitstream/10995/78551/1/978-5-7996-2776-8_2019.pdf (дата обращения 17.07.2024)
6. Архангельский, А.Я. Программирование в Delphi: Учебник по классическим версиям Delphi /А.Я. Архангельский. – М.: Бином-Пресс, 2013. – 816 c.
7. Белов, В.В. Программирование в Delphi: процедурное, объектно-ориентированное, визуальное: Учебное пособие для вузов / В.В. Белов, В.И. Чистякова. – М.: РиС, 2014. – 240 c.
8. Коржинский С. Изучаем Delphi. Практическое пособие для изучения программирования в среде Borland Delphi. – [Электронный ресурс] – URL: http://www.snkey.net/support/books/delphi10.pdf (дата обращения 18.07.2024)
9. Осипов Д. Л. Delphi. Программирование для Windows, OS X, iOS и Android. – СПб.: БХВ-Петербург, 2014. – 464 с.
10. Осипов, Д. Delphi. Профессиональное программирование / Д. Осипов. – СПб.: Символ-плюс, 2015. – 1056 c.
11. Петрова, И.А. Объектно-ориентированное программирование: лабораторный практикум для студентов направления 09.03.01 (230100.62) «Информатика и вычислительная техника» очной и заочной форм обучения / И.А. Петрова. – Красноярск: СибГТУ, 2015. – 123с.
12. Фленов М. Е. Библия Delphi. – 3-е изд., перераб. и доп. – СПб.: БХВ-Петербург, 2011. – 688 с.