Студопедия — Условная компиляция
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Условная компиляция






 

{$ define <Имя режима>}

Включает режим компиляции с именем <Имя режима>.

 

{$ ifdef <Имя режима>}

< Операторы, которые «видны» компилятору только в режиме “<Имя режима>”>

{$ else}

< Операторы, которые «видны» компилятору только в противоположном режиме >

{$ endif }

Классическая развилка на этапе компиляции.

 

{$ ifdef <Имя режима>}

< Операторы, которые «видны» компилятору только в режиме “<Имя режима>”>

{$ endif }

Упрощенная развилка.

 

 

{$ ifndef <Имя режима>}

Заголовок «перевернутой» развилки


Ниже приводится текст программы, которая строит «самый дешевый путь» из левого верхнего угла матрицы размерами в правый нижний угол любым из двух ранее описанных методов.

Первый метод (рекурсивный) включается, если «НЕ закомментирована» строка

{$define RECOURSIVE}.

 

Второй метод (динамического программирования) включается, если эта строка «закомментирована», т.е. имеет вид

// {$define RECOURSIVE}.

 


program Project3;

 

{$APPTYPE CONSOLE}

 

Uses

SysUtils;

 

//{$define RECOURSIVE}

 

Const

mMax = 20;

nMax = 20;

 


Type

MyRecord = record

 

{$ ifdef RECOURSIVE}

CellPrice, Frequency: integer;

{$ else }

CellPrice, PathPrice: integer;

{$ endif }

 

Direction: char;

end;

 

MyArray = array [1.. mMax, 1.. nMax] of MyRecord;

 


Var

m, n, p: integer;

A: MyArray;

tStart, tFinish: TDateTime;

 

procedure InputArray(var C: MyArray);

Var

F: Text;

i, j: Integer;

Begin

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

Begin

for j:= 1 to n do

Begin

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);

Var

i, j: Integer;

Begin

Writeln('ShowPrices');

 

for i:= 1 to m do

Begin

for j:= 1 to n do

Write(C[i][j].CellPrice: 5);

 

Writeln;

end;

end;

 


{$ ifdef RECOURSIVE}

procedure ShowFrequencies(var C: MyArray);

Var

i, j: Integer;

Begin

Writeln('ShowFrequencies');

 

for i:= 1 to m do

Begin

for j:= 1 to n do

Write(C[i][j].Frequency: 5);

 

Writeln;

end;

end;

{$ endif }

 


procedure ShowDirections(var C: MyArray);

Var

i, j: integer;

Begin

Writeln('ShowDirections');

 

for i:= 1 to m do

Begin

for j:= 1 to n do

Write(C[i][j].Direction: 3);

 

Writeln;

end;

end;

 


function Right(i, j: integer): boolean;

Begin

if j < n then Right:= true else Right:= false;

end;

 

function Down(i, j: integer): boolean;

Begin

if i < m then Down:= true else Down:= false;

end;

 

 


{$ ifdef RECOURSIVE}

 

function BestPathRecoursive(i, j: integer; var C: MyArray): integer;

Var

id, ir: integer;

Begin

Inc(C[i][j].Frequency);

 

if (i = m) and (j = n) then

BestPathRecoursive:= 0

Else


Begin

IfRight(i, j) then

ir:= C[i][j + 1].CellPrice + BestPathRecoursive(i, j + 1, C)

Else

ir:= -1;

 

IfDown(i, j) then

id:= C[i + 1][j].CellPrice + BestPathRecoursive(i + 1, j, C)

Else

id:= -1;

 


if (ir >= 0) and (id >= 0) then

Begin

Ifir < id then

Begin

C[i][j].Direction:= 'r';

BestPathRecoursive:= ir;

End

Else

Begin

C[i][j].Direction:= 'd';

BestPathRecoursive:= id;

end;

End


Else

if ir >=0 then

Begin

C[i][j].Direction:= 'r';

BestPathRecoursive:= ir;

End

Else

if id >= 0 then

Begin

C[i][j].Direction:= 'd';

BestPathRecoursive:= id;

End

Else

Halt;

end;

end;

 


{$ else } // NonRecoursive

 

procedure BestPathNonRecoursive(var C: MyArray);

Var

i, j, k, ir, id: integer;

 

Begin

C[m][n].PathPrice:= 0;

 

for k:= m + n - 1 downto 1 do

for i:= m downto 1 do

Begin

j:= k - i;

if j > n then break;

if j < 1 then continue;

 








Дата добавления: 2015-10-12; просмотров: 323. Нарушение авторских прав; Мы поможем в написании вашей работы!



Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

МЕТОДИКА ИЗУЧЕНИЯ МОРФЕМНОГО СОСТАВА СЛОВА В НАЧАЛЬНЫХ КЛАССАХ В практике речевого общения широко известен следующий факт: как взрослые...

СИНТАКСИЧЕСКАЯ РАБОТА В СИСТЕМЕ РАЗВИТИЯ РЕЧИ УЧАЩИХСЯ В языке различаются уровни — уровень слова (лексический), уровень словосочетания и предложения (синтаксический) и уровень Словосочетание в этом смысле может рассматриваться как переходное звено от лексического уровня к синтаксическому...

Плейотропное действие генов. Примеры. Плейотропное действие генов - это зависимость нескольких признаков от одного гена, то есть множественное действие одного гена...

Метод архитекторов Этот метод является наиболее часто используемым и может применяться в трех модификациях: способ с двумя точками схода, способ с одной точкой схода, способ вертикальной плоскости и опущенного плана...

Примеры задач для самостоятельного решения. 1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P   1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P...

Дизартрии у детей Выделение клинических форм дизартрии у детей является в большой степени условным, так как у них крайне редко бывают локальные поражения мозга, с которыми связаны четко определенные синдромы двигательных нарушений...

Studopedia.info - Студопедия - 2014-2024 год . (0.013 сек.) русская версия | украинская версия