Отчет (12 вариант - Программа кратчайшего пути)
Описание файла
Файл "Отчет" внутри архива находится в папке "12 вариант - Программа кратчайшего пути". Документ из архива "12 вариант - Программа кратчайшего пути", который расположен в категории "". Всё это находится в предмете "численные методы оптимизации" из 4 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "численные методы оптимизации" в общих файлах.
Онлайн просмотр документа "Отчет"
Текст из документа "Отчет"
Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
«Московский государственный университет приборостроения и информатики»
Отчет по практическому заданию
Вариант «12»
Реферат подготовил: Васильев О.М.
студент 2 курса ИТ-6 группы
Проверил: Русаков А. М.
Москва 2012г.
Постановка задачи
Написать программу по поиску кратчайшего пути в матрице чисел
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ExtCtrls;
type
TForm1 = class(TForm)
Matrix: TStringGrid;
Primer: TMemo;
Load: TButton;
Button1: TButton;
ClearMatrix: TTimer;
L_Otvet: TLabel;
procedure LoadClick(Sender: TObject);
procedure ClearMatrixTimer(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Types;
{$R *.dfm}
procedure TForm1.LoadClick(Sender: TObject);
var
i, k, j :integer;
s, p :string;
mas :array[0..100, 0..100] of integer;
begin
Primer.Lines.LoadFromFile('Primer.txt');
for i := 0 to Primer.Lines.Count - 1 do begin
s := Primer.Lines[i];
k := 1;
p := '';
j := 1;
while j <= length(s) do begin
if s[j] = '-' then begin
mas[k, i + 1] := strtoint(p);
p := '';
inc(k);
end else
p := p + s[j];
inc(j);
end;
end;
Matrix.ColCount := k ;
Matrix.RowCount := i + 1;
for i := 1 to Matrix.RowCount do
for j := 1 to Matrix.ColCount do
if mas[i,j] = 0 then
Matrix.Cells[i,j] := 'o'
else
Matrix.Cells[i,j] := IntToStr(mas[i,j]);
ClearMatrix.Enabled := true;
end;
procedure TForm1.ClearMatrixTimer(Sender: TObject);
Var i:integer;
begin
With Matrix.Canvas do begin
PenPos := Point(0,0);
Pen.Color := clWhite;
for i := 1 to Matrix.RowCount do begin
PenPos := Point(0, 30 * i + i - 1);
LineTo(550, 30 * i + i - 1);
end;
for i := 1 to Matrix.ColCount do begin
PenPos := Point(40 * i + i - 1, 0);
LineTo(40 * i + i - 1, 400);
end;
end;
ClearMatrix.Enabled := false;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
mas :array[0..100, 0..100] of integer;
m :array[0..2] of integer;
min, i, j, minpos, KolChagov, MK :integer;
otvet :string;
begin
for i := 1 to Matrix.RowCount - 1 do
for j := 1 to Matrix.ColCount -1 do
if Matrix.Cells[i, j] = 'o' then
mas[j - 1, i - 1] := 0
else
mas[j - 1, i - 1] := StrToInt(Matrix.Cells[i, j]);
otvet := '';
KolChagov := (Matrix.ColCount - 2) div 2;
MK := Matrix.ColCount;
for i := 1 to KolChagov do begin
m[0] := mas[1 + (i - 1) * 2, MK - 2 * (i-1) - 4] + mas[0 + (i - 1) * 2 , MK - 2 * (i-1) - 3];
m[1] := mas[1 + (i - 1) * 2, MK - 2 * (i-1) - 3];
m[2] := mas[1 + (i - 1) * 2, MK - 2 * (i-1) - 2] + mas[2 + (i - 1) * 2, MK - 2 * (i-1) - 3];
min := m[0];
minpos := 0;
for j := 1 to 2 do
if m[j] < min then begin
min := m[j];
minpos := j;
end;
if minpos = 0 then otvet := ' север восток ' + otvet;
if minpos = 1 then otvet := ' северо-восток ' + otvet;
if minpos = 2 then otvet := ' восток север ' + otvet;
end;
L_Otvet.Caption := otvet;
end;
end.
Скриншот программы