КАТЕГОРИИ: Архитектура-(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 if n < 1 then Fib:= 0 if n = 1 then Fib:= 1 if n = 2 then Fib:= x Fib:= x*Fib(n-1, x) + Fib(n-2, x); end;
Пример рекурсивной процедуры. Ханойские башни.
n: integer;
procedure HanoiTowers(n, x, y, z: integer); if n = 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; for MyVar2:=Monday to Friday do writeln(MyVar2); // Ошибка for MyVar4:=MyFalse to MyTrue do writeln(MyVar4); // Ошибка for MyVar3:= False to True do writeln(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 пользоваться по отношению к этой переменной нельзя.
procedure SetLength(var <Имя массива>;<Число элементов>: integer); Под одномерный массив <Имя массива> выделяется место в памяти, объем которого задает <Число элементов>. Диапазон индексов: 0.. <Число элементов> - 1. procedure Finalize(var <Имя массива>); Память из-под переменной <Имя массива> высвобождается. Альтернатива: <Имя массива> := Nil; Процедуру FreeMem применять не следует.
program Project1; {$APPTYPE CONSOLE} SysUtils; mA: array of char; SetLength(mA, 3); mA[2]:= 's'; writeln(mA[2]); readln; end.
mA, mB: array of integer; mC, mD: array [0..10] of integer;
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; Просмотров: 339; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |