Процедуры и функции для работы со строками string

CaseTag02: MyTagType02 of

CaseTag01: MyTagType01 of

CaseTag0: MyTagType0 of

CaseTag0: MyTagType0 of

Type

Begin

Type

End.

Else

Сase X of

Else

Begin

Var

Type

Пример.

End

Else

. . .

Begin

Begin

Begin

Whiletrue do

Begin

Var

Begin

Begin

Else

End

Begin

Begin

xOld := xNew;

xNew := (xR * yL - xL * yR) / (yL - yR);

 

yNew := f(xNew);

 

ifyNew * yR < 0 then

xL := xNew; yL := yNew;

// Пододвинулась вправо левая граница промежутка

xR := xNew; yR := yNew;

// Пододвинулась влево правая граница промежутка

end;

 

ifAbs(xNew - xOld) < Eps thenbreak;

Inc(n);

ifn > nMax then

Writeln(‘За ’, nMax, ‘ шагов требуемая точность не достигнута.’);

break;

end;

end;

 

xNew := (xR * yL - xL * yR) / (yL - yR);

Writeln('Result: x=', xNew:0:12, ‘ n=’, n);

end;

 

procedureNewtonSearchRoot(xL, xR, Eps: double;

f, df, d2f: MyFuncType);

xOld, xNew:

double;

n:

integer;

n := 0;

 

iff(xL) * d2f(xL) > 0 thenxNew := xL elsexNew := xR;

 

xOld := xNew;

xNew := xOld - f(xOld) / df(xOld);

 

ifAbs(xNew - xOld) < Eps thenbreak;

Inc(n);

ifn > nMax then

Writeln(‘За ’, nMax, ‘шагов требуемая точность не достигнута.’);

break;

end;

end;

 

Writeln('Result: x=', xNew:0:12, ‘ n=’, n);

end;

 

ChordSearchRoot(-2, 0, 0.000000000001, f);

NewtonSearchRoot(-2, 0, 0.000000000001, f, dfdx, d2fdx2);

Readln;

end.

 


Результат работы программы:

 

Result: x = - 0.852605502013 n = 55

Result: x = - 0.852605502014 n = 6

 


Оператор выбора

 

< Оператор выбора> ::=

case<Выражение-селектор> of

<Список 1> :

<Оператор 1> ;

<Список 2> :

<Оператор 2> ;

<Список N> :

<Оператор N> ;

<Операторы> ;

 


 

ColorType =

(

Red, Orange, Yellow, Green, Blue, DarkBlue, Purple, Black, White

);

 

MyColor:

ColorType;

 

X:

integer;

 


MyColor := Green;

сase MyColor of

Red:

X := 1;

Orange:

X := 2;

Yellow:

X := 3;

Green:

X := 4;

Blue:

X := 5;

DarkBlue, Purple:

X := 0;

X := -1;

end;

 

Write('Input Persons''Age: ');

readln(X);

 

0 .. 1:

writeln('Baby');

2 .. 9:

writeln('Child');

10 .. 19:

writeln('Teenager');

20 .. 35:

writeln('Young Person');

36 .. 64:

writeln('Mead Age Person');

 


65 .. 90:

writeln('Old Person');

91 .. 120:

writeln('Very Old Person');

121 .. 180:

writeln('Very Very Old Person');

writeln('Unimpossible Age');

end;

 

readln;

 


Тип «Запись» (продолжение)

Упакованные записи

 

{$PACKRECORDS 1}

MyRecordType1A = record

A: byte;

B: word;

end;

{$PACKRECORDS 2}

MyRecordType1B = packed record

A: byte;

B: word;

end;

 

 

MyRecordType1C = record

A: byte;

B: word;

end;

{$ALIGNMENT ON}

{$ALIGN 8}

MyRecordType1D = record

A: byte;

B: word;

end;

writeln(SizeOf(MyRecordType1A)); // 3

writeln(SizeOf(MyRecordType1B)); // 3

writeln(SizeOf(MyRecordType1C)); // 4

writeln(SizeOf(MyRecordType1D)); // 4

readln;

end.


Записи с вариантной частью

 

 

MyTagType0 = (Type00, Type01, Type02, Type03);

MyTagType01 = (Type010, Type011, Type012, Type013);

MyTagType02 = (Type020, Type021, Type022, Type023);

 


MyRecordType1 = record

i: integer; d: double;

Type00:

(

s: string[7];

mA: array[1..3] ofsingle;

);

Type01:

(

R1, R2: MyRecordType2D;

);

Type02 .. Type03:

(

c1: char;

T1: TDateTime;

);

end;

MyRecordType2 = record

r: single;

Type00:

(

bWas: boolean; mC: array[1..4] ofchar;

Type010: (k: integer;);

Type011 .. Type013: (b: byte;);

);

Type01:

(

R1, R2: MyRecordType2D;

Type020: (c: char;);

Type021 .. Type023: (s0: shortint;);

);

end;

 

functionLength(S: string): byte;

Возвращает длину строки S. Значение длины равноценно значению Ord(s[0]), поскольку код «нулевого» байта строки есть её текущая длина.

 

functionCopy(S: string; iStart, iLength: byte): string;

Возвращает подстроку строки S – набор из iLength символов, начинающийся с символа с номером iStart. Нумерация символов в строке начинается с единицы.

Замечание: Copy(S, n, 1) равноценно S[n].

 

procedureDelete(S: string; iStart, iLength: byte);

Удаляет из строки S её подстроку – набор из iLength символов, начинающийся с символа с номером iStart. Нумерация символов в строке начинается с единицы.

 

functionIndex(S, SWhat: string): byte;

Ищет первое вхождение подстроки sWhat в строку S. Результат – номер символа, начиная с которого найдено вхождение. Результат – ноль, если вхождение не найдено.

 

functionStr(X: <числовой тип>): string;

Возвращает строковое выражение числа X.

 

procedureVal(S: string; varX: <числовой тип>; IER: integer);

Пытается преобразовать строку S в число и занести его в параметр-переменную X. Если попытка завершается удачно, IER=0, в противном случае IER<>0.