КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Типизированные файлы
Begin Else Else Begin Begin Var Else End Begin Else End Begin Else End Begin Else End Begin Begin Else IfDown(i, j) then Else IfRight(i, j) then Begin Begin Var Else End Begin Else End Begin Else End Begin Else End Begin Begin Else IfDown(i, j) then Else IfRight(i, j) then Begin Else Begin Var Begin Begin Begin Begin Var Begin Begin Var Begin Begin Var Begin Begin Begin Var Var Type Const Uses SysUtils;
//{$define RECOURSIVE}
mMax = 20; nMax = 20;
MyRecord = record
{$ ifdef RECOURSIVE} CellPrice, Frequency: integer; {$ else } CellPrice, PathPrice: integer; {$ endif }
Direction: char; end;
MyArray = array [1.. mMax, 1.. nMax] of MyRecord;
m, n, p: integer; A: MyArray; tStart, tFinish: TDateTime;
procedure InputArray(var C: MyArray); F: Text; i, j: Integer; Assign(F, 'c:\a.txt'); Reset(F);
Readln(F, m); if (m < 1) or (m > mMax) then Halt;
Readln(F, n); if (n < 1) or (n > nMax) then Halt; for i:= 1 to m do for j:= 1 to n do Read(F, C[i][j].CellPrice);
{$ ifdef RECOURSIVE} C[i][j].Frequency:= 0; {$ else } C[i][j].PathPrice:= 0; {$ endif }
C[i][j].Direction:= '?'; end; Readln(F); end; Close(F); end; procedure ShowPrices(var C: MyArray); i, j: Integer; Writeln('ShowPrices');
for i:= 1 to m do for j:= 1 to n do Write(C[i][j].CellPrice: 5);
Writeln; end; end;
{$ ifdef RECOURSIVE} procedure ShowFrequencies(var C: MyArray); i, j: Integer; Writeln('ShowFrequencies');
for i:= 1 to m do for j:= 1 to n do Write(C[i][j].Frequency: 5);
Writeln; end; end; {$ endif }
procedure ShowDirections(var C: MyArray); i, j: integer; Writeln('ShowDirections');
for i:= 1 to m do for j:= 1 to n do Write(C[i][j].Direction: 3);
Writeln; end; end;
function Right(i, j: integer): boolean; if j < n then Right:= true else Right:= false; end;
function Down(i, j: integer): boolean; if i < m then Down:= true else Down:= false; end;
{$ ifdef RECOURSIVE}
function BestPathRecoursive(i, j: integer; var C: MyArray): integer; id, ir: integer; Inc(C[i][j].Frequency);
if (i = m) and (j = n) then BestPathRecoursive:= 0 ir:= C[i][j + 1].CellPrice + BestPathRecoursive(i, j + 1, C) ir:= -1;
id:= C[i + 1][j].CellPrice + BestPathRecoursive(i + 1, j, C) id:= -1;
if (ir >= 0) and (id >= 0) then if ir < id then C[i][j].Direction:= 'r'; BestPathRecoursive:= ir; C[i][j].Direction:= 'd'; BestPathRecoursive:= id; end; if ir >=0 then C[i][j].Direction:= 'r'; BestPathRecoursive:= ir; if id >= 0 then C[i][j].Direction:= 'd'; BestPathRecoursive:= id; Halt; end; end;
{$ else } // NonRecoursive
procedure BestPathNonRecoursive(var C: MyArray); i, j, k, ir, id: integer;
C[m][n].PathPrice:= 0;
for k:= m + n - 1 downto 1 do for i:= m downto 1 do j:= k - i; if j > n then break; if j < 1 then continue;
ir:= C[i][j + 1].CellPrice + C[i][j + 1].PathPrice ir:= -1;
id:= C[i + 1][j].CellPrice + C[i + 1][j].PathPrice id:= -1;
if (ir >= 0) and (id >= 0) then if ir < id then C[i][j].Direction:= 'r'; C[i][j].PathPrice:= ir; C[i][j].Direction:= 'd'; C[i][j].PathPrice:= id; end; if ir >=0 then C[i][j].Direction:= 'r'; C[i][j].PathPrice:= ir; if id >= 0 then C[i][j].Direction:= 'd'; C[i][j].PathPrice:= id; Halt; end; end;
{$ endif }
{$ ifdef RECOURSIVE} procedure ShowPath(var C: MyArray); {$ else } procedure ShowPath(var C: MyArray; var p: integer); {$ endif }
k, i, j: integer; i:= 1; j:= 1;
{$ ifndef RECOURSIVE} p:= 0; {$ endif }
for k:= 1 to m + n - 2 do Write(' ', C[i][j].Direction); if C[i][j].Direction = 'r' then Inc(j) if C[i][j].Direction = 'd' then Inc(i) Halt;
{$ ifndef RECOURSIVE} p:= p + C[i][j].CellPrice; {$ endif } end;
Writeln; end; InputArray(A); ShowPrices(A);
tStart:= Now();
{$ ifdef RECOURSIVE} p:= BestPathRecoursive(1, 1, A); tFinish:= Now(); ShowPath(A); {$ else } BestPathNonRecoursive(A); tFinish:= Now(); ShowPath(A, p); {$ endif }
Writeln('Price of best path = ', p, ' Elapsed Time = ', ((tFinish - tStart) * 86400.0):0:3); ShowDirections(A);
{$ ifdef RECOURSIVE} ShowFrequencies(A); {$ endif }
Readln; end.
< Объявление файловой переменной для типизированного файла >::=
Дата добавления: 2014-01-06; Просмотров: 254; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |