Студопедия

КАТЕГОРИИ:


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

Пример 3





Begin

Var

Пример 2.

Begin

Var

Uses

Пример 1.

Процедура Finalize

Процедура SetLength

Динамические массивы

Var

Открытые массивы

Const

Type

Инициализация записей

Const

Инициализация массивов

End.

Begin

Var

Type

Var

Begin

Begin

Else

Begin

Var

Else

Else

Else

Begin

ifn < 1 then

Fib := 0

ifn = 1 then

Fib := 1

ifn = 2 then

Fib := x

Fib := x*Fib(n-1, x) + Fib(n-2, x);

end;

 

Пример рекурсивной процедуры. Ханойские башни.

 

n: integer;

 

procedureHanoiTowers(n, x, y, z: integer);

ifn = 1 then

writeln(x,'->', y)

HanoiTowers(n-1, x, z, y);

writeln(x,’–>’, y);

HanoiTowers(n-1, z, y, x);

end;

end;

readln(n);

HanoiTowers(n,1,2,3);

end.

 


Тип «Перечисляемый»

 

<Перечисляемый тип> : : =

(<Список имён значений>)

Первому из элементов <Списка имён значений> придаётся внутренний (недоступный пользователю) номер 0, второму – номер 1, и т.д.


Переменные типа «Перечисляемый»

 

Примеры

v1: (LeftDyrecton, RightDyrecton, BackDyrecton);

MyType2=(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);

MyType4=(MyTrue, MyFalse);

MyVar2: MyType2;

MyVar3: boolean;

MyVar4: MyType4;

forMyVar2 :=Monday toFriday dowriteln(MyVar2); // Ошибка

forMyVar4 :=MyFalse toMyTrue dowriteln(MyVar4); // Ошибка

forMyVar3 := False toTrue dowriteln(MyVar3); // Выход:False True

Замечание. boolean ≠ (False, True). Вообще говоря.

Замечание. Тип «Перечисляемый – порядковый тип.

 

A: array[1..7] of double = (1, 3, 5, 7, 9, 11, 13);

B: array[1..2, 1..4] of integer =

(

(3, 4, 1, 0),

(5, 2, 7, 6)

);

C: array[1..2, 1..3] of char =

(

(‘a’, ‘b’, ‘c’),

(‘x’, ’y’, ‘z’)

);

 

 

 

MyRecord1 = record

i, j: integer;

x: double;

s: string[7];

end;

 

MyRecord2 = record

mA: array[1..3, 1..3] of char;

S: MyRecord1;

end;

 

R1: MyRecord1 = (i: 4; j: 9; x: 3.14159; s: 'ABCDE');

R2: MyRecord2 = ( ??? );

 

B: array[3..7] of double;

 

procedure P(var A: array of double);

begin

WriteLN('High(A)=', High(A), ' A[High(A)[=', A[High(A)]:0:2);

WriteLN('Low(A)=', Low(A), ' A[Low(A)[=', A[Low(A)]:0:2);

ReadLN;

end;

begin

B[3] := 3; B[4] := 4; B[5] := 5; B[6] := 6; B[7] := 7;

P(B);

end.

 

Динамические массивы не имеют фиксированного размера. Память под массив выделяется, когда ему придается значение (!) или по отношению к нему применяется процедура SetLength.



<Объявление динамического массива> ::=

<Имя массива>: array of<Тип>

 

Переменная <Имя массива> в действительности является указателем, однако, знаком ^, процедурами New, Disposeпользоваться по отношению к этой переменной нельзя.


 

procedureSetLength(var<Имя массива>;<Число элементов>:integer);

Под одномерный массив <Имя массива> выделяется место в памяти, объем которого задает <Число элементов>.

Диапазон индексов: 0 .. <Число элементов> - 1 .


procedureFinalize(var<Имя массива>);

Память из-под переменной <Имя массива> высвобождается.

Альтернатива:

<Имя массива> := Nil;

Процедуру FreeMem применять не следует.

 


programProject1;

{$APPTYPE CONSOLE}

SysUtils;

mA: array ofchar;

SetLength(mA, 3);

mA[2] := 's';

writeln(mA[2]);

readln;

end.

 

mA, mB: array ofinteger;

mC, mD: array[0..10] ofinteger;

 

SetLength(mA, 11);

mA[0] := 1;

mB := mA; // Указатель mB стал указывать туда же, куда и указатель mA.

mB[0] := 2;

 

mC[0] := 1;

mD := mC; // В массив mD скопировано всё содержимое массива mC.

end.

 

Переменная mB есть указатель на тот же динамический массив, что и переменная mA. Значение mA[0] есть 2.

Оператор mB[11] := 2; не приводит к увеличению числа элементов массива до 12. Ответственность за выход за границы массива (и за всю тяжесть последствий) лежит на программисте.

 





Дата добавления: 2014-01-04; Просмотров: 204; Нарушение авторских прав?


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



ПОИСК ПО САЙТУ:


Рекомендуемые страницы:

Читайте также:

  1. I. Затрудненный выброс крови из желудочков (например, стеноз аорты, клапанный стеноз a, pulmonalls и коарктация аорты)
  2. IV. Примеры расчетов потребностей в сырье по индивидуальным и среднегодовым нормам.
  3. LZ-алгоритмы распаковки данных. Пример 13.6
  4. LZ-алгоритмы распаковки данных. Примеры
  5. LZ77-алгоритм распаковки данных. Пример 12.4
  6. Билет№5:Методологические основы менеджмента. Ситуационный, системный и процессный подход к принятию управленческих решений (привести примеры).
  7. В приведенном примере укажите тезис (если тезис явно не выражен, сформулируйте его), определите способ аргументации.
  8. В ст.131 ГК установлены основные положения о примерном перечне вещных прав, подлежащих регистрации, обязательности государственной регистрации и органе, ее осуществляющем.
  9. Виды и примерная структура документов
  10. Вопрос 68. Филогенез опорно-двигательной системы. Онтофилогенетические пороки костной и мышечной систем. Примеры.
  11. Вопрос 70. Филогенез кровеносной системы хордовых животных. Онтофилогенетические пороки развития сердца и кровеносных сосудов. Примеры.
  12. Вопрос 71. Филогенез мочеполовой системы позвоночных. Эволюция нефрона и мочеполовых протоков. Примеры.

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