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

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

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






 

{$ 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; просмотров: 322. Нарушение авторских прав; Мы поможем в написании вашей работы!



Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...

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

Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Почему важны муниципальные выборы? Туристическая фирма оставляет за собой право, в случае причин непреодолимого характера, вносить некоторые изменения в программу тура без уменьшения общего объема и качества услуг, в том числе предоставлять замену отеля на равнозначный...

Тема 2: Анатомо-топографическое строение полостей зубов верхней и нижней челюстей. Полость зуба — это сложная система разветвлений, имеющая разнообразную конфигурацию...

Виды и жанры театрализованных представлений   Проживание бронируется и оплачивается слушателями самостоятельно...

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

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

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

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