
X, y, Eps : Double ;
function BesselI0(x, Eps : Double) : Double ;
var
S, A, B, R: Double ;
begin
. . .
BesselI0 := S ;
end;
begin
writeln(‘x=? ’) ; readln(x);
writeln(‘Eps=? ’) ; readln(Eps);
y := BesselI0(x, Eps) ; writeln(‘y=’, y) ;
end.
Билет №12
Если задача в ходе такого последовательного разбиения свелась (необязательно за один шаг) сама к себе самой, имеет место рекурсия.
Примеры:
-
ok
- not ok
Полиномы
Фибоначчи
являются коэффициентами разложения в
степенной ряд функции
,
.
Полиномы
Фибоначчи
выражаются «сами через себя» при
,
но выражаются явно (дают тривиальный
случай) при
и
:
,
,
Связь
с числами Фибоначчи:
function Fib(n: integer; x: double): double;
begin
if n < 1 then
Fib := 0
else
if n = 1 then
Fib := 1
else
if n = 2 then
Fib := x
else
Fib := x*Fib(n-1, x) + Fib(n-2, x);
end;
Билет №13
Тип «Перечисляемый»
<Перечисляемый тип> : : =
(<Список имён значений>)
Первому из элементов <Списка имён значений> придаётся внутренний (недоступный пользователю) номер 0, второму – номер 1, и т.д.
Переменные типа «Перечисляемый»:
var
V1: (LeftDyrecton, RightDyrecton, BackDyrecton);
type
MyType2=(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);
MyType4=(MyTrue, MyFalse);
var
MyVar2: MyType2;
MyVar3: boolean;
MyVar4: MyType4;
begin
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
end.
Замечание. boolean ≠ (False, True). Вообще говоря.
Замечание. Тип «Перечисляемый – порядковый тип.
Диапазон
<Диапазон> : : =
<Целое число 1> . . <Целое число 2>
Естественное требование:
<Целое число 1> не более, чем <Целое число 2>
Примеры.
1 . . 5
First . . Third
// Если выше по тексту было что-то наподобие:
// const First = 0; Third = 2;
Тип «Диапазон»
type <Имя типа> = <Диапазон> ;
Пример.
type MyType01 = –3 . . 72 ;
Переменные типа «Диапазон»
Примеры:
var
v1: 22 . . 44 ;
v2: MyType01 ;
const
v3: MyType01 = 6 ;
const
MyConst11 = 1; MyConst12 = 7;
type
MyType02 = MyConst11 .. MyConst12;
var
MyVar02: MyType02;
Замечание. Тип–Диапазон – порядковый тип.
Билет №14
Массив – упорядоченная совокупность данных одного типа.
Массив – переменная с индексом (со списком индексов).
<Объявление одномерного массива> : : =
<Имя переменной> : array[<Диапазон>] of <Тип элемента> ;
<Объявление нескольких многомерных массивов> : : =
<Список имён > : array[<Список диапазонов>] of <Тип элемента> ;
или
<Список имён > : <Тип-массив> ;
<Тип-массив> : : =
array[<Список диапазонов>] of <Тип элемента > ;
<Обращение к элементу массива> : : =
<имя массива> [ <Список значений индексов> ]
Билет №15
Открытые массивы
var
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 пользоваться по отношению к этой
переменной нельзя.
Билет №16
Тип «Запись»
<Тип «Запись»> : : =
record
<Список имён полей 1>: <Тип 1>;
<Список имён полей 2>: <Тип 2>;
. . .
end;
<Обращение к полю переменой типа «Запись»> : : =
<Имя переменной>.<Имя поля>
или
with <Имя переменной> do <Оператор, содержащий Имя поля>
Пример:
{ TP7 }
program P0701;
type
DateTime = record // Delphi: TDateTime
Year, Month, Day, Hour, Min, Sec: word ;
end ;
MyRec = record
N: longint ;
FIO: string[40] ;
BirthDate: DateTime ;
end;
var
N: longint ;