Студопедия

КАТЕГОРИИ:


Архитектура-(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)

IfRight(i, j) then

Begin

Else

Begin

Var

Begin

Begin

Begin

Begin

Var

Begin

Begin

Var

Begin

Begin

Var

Begin

Begin

Var

Var

Type

Const

Uses

Begin

Withv.BirthDate do

Begin

Withv do

Begin

Begin

Withv do

Begin

Var

Type

Пример

...

Record

Begin

Два кода, второй из которых также должен быть извлечен

Код «0» означает, что клавиша отправила в буфер клавиатуры

Begin

Begin

Else

End

Begin

Begin

IfmG[j] andmDP[i + j] andmDM[i - j] then

Begin

Begin

Var

Var

c: char;

n: integer;

mG: array [1 .. 8] of boolean; // Вертикали

mDP: array [2 .. 16] of boolean; // Диагонали, параллельные побочной

mDM: array [-7 .. 7] of boolean; // Диагонали, параллельные главной

x: array [1 .. 8] of integer;

 

procedure PutNextQueen (i: integer);

j, k: integer;

for j:= 1 to 8 do

x[i]:= j;

 

if i < 8 then

mG[j]:= false; mDP[i + j]:= false; mDM[i - j]:= false;

PutNextQueen (i + 1);

mG[j]:= true; mDP[i + j]:= true; mDM[i - j]:= true;

for k:=1 to 8 do write(x[k]:5);

writeln;

inc(n);

if n mod 20 = 0 then

// Останавливать вывод после показа очередной порции из 20 вариантов

c:= ReadKey;

if c = #27 then halt;

if c = #0 then c:= ReadKey;

end;

end;

end;

end;

end;

 

for n:= 1 to 8 do x[n]:=0;

for n:= 1 to 8 do mG[n]:= true;

for n:= 2 to 16 do mDP[n]:= true;

for n:= -7 to 7 do mDM[n]:= true;

n:= 0;

PutNextQueen (1);

writeln(‘n=’, n);

end.

 

 

Тип «Запись»

 

<Тип «Запись»> :: =

<Список имён полей 1>: <Тип 1>;

<Список имён полей 2>: <Тип 2>;

end;

<Обращение к полю переменой типа «Запись»> :: =

<Имя переменной>. <Имя поля>

или

with <Имя переменной> do <Оператор, содержащий Имя поля>


 

{ TP7 }

program P0701;

 

DateTime = record // Delphi: TDateTime

Year, Month, Day, Hour, Min, Sec: word;

end;

MyRec = record

N: longint;

FIO: string [40];

BirthDate: DateTime;

end;


N: longint;

 

v1: MyRec;

v2: record

N: longint;

FIO: string [40];

BirthDate: DateTime;

end;

 


procedure Proc1(v: MyRec);

Writeln(v. FIO);

Writeln(N);

Writeln(BirthDate.Day:2,’.’, BirthDate.Month:2,’.’, BirthDate.Year:4);

end;

end;

 


procedure Proc2(v: MyRec);

Writeln(v. FIO);

Writeln(N);

Writeln(Day,’.’, Month,’.’, Year);

end;

end;


N:= 2;

v1. N:= 1;

v1.FIO:= ‘Ivanov I.I.’;

v1.BirthDate. Year:= 1950;

v1.BirthDate. Month:= 10;

v1.BirthDate. Day:= 2;

Proc1(v1); // Нормально

// Proc1(v2); // Ошибка

Proc2(v1); // Нормально

readln;

end.

 

 

 

 

 

SysUtils;

 

mMax = 20;

nMax = 20;

 

MyRecord = record

CellPrice, Frequency: integer;

Direction: char;

end;

 

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


m, n, p, q: integer;

A: MyArray;

 


procedure InitArray(var C: MyArray);

i, j: integer;

Randomize;

 

m:= 3 + Random(mMax – 2);

n:= 3 + Random(nMax – 2);

Writeln('m=', m, ' n=', n);

 

for i:= 1 to m do

for j:= 1 to n do

C[i][j].CellPrice:= Random(mMax + nMax);

C[i][j].Frequency:= 0;

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

end;

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;


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;

 


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;

 

 


 

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)

<== предыдущая лекция | следующая лекция ==>
Рекурсивные алгоритмы | Метод динамического программирования
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 216; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.02 сек.