double arrow

Правило 24


Правило 23.

Правило 22.

Правило 21.

Правило 20.

В подпрограммы пользователя лучше предусмотреть передачу данных в виде переменных или констант вместо передачи значений. Это позволяет передавать не копию данных, создаваемую в стеке и требующую при этом дополнительные память и время, а сами данные, что повышает быстродействие.

Function function

Sum(a,b:real):real; sum(VAR a,b:real):real;

Begin begin

Sum:=a+b; sum:=a+b;

end; end;

Еще пример

const

a:integer=5;

b:integer=7;

procedure Inc2(var c:integer;b:integer);

begin

c:=c+c;

b:=b+b;

Writeln('удвоенные :',c:5,b:5) (2)

end;

begin

Writeln('исходные :',a:5,b:5); (1)

Inc2(a,b);

Writeln('результат :',a:5,b:5) (3)

end.

исходные : 5 7

удвоенные: 10 14

результат: 10 7

В этой программе задаются два целых числа 5 и 7. Эти числа передаются процедуре Inc2, в которой удваиваются. Один параметр передается как переменная, другой - как параметр значение.

Удвоение второго формального параметра в процедуре не вызвало изменения фактической переменной b, так как этот параметр описан в заголовке процедуры как параметр-значение.

При обработке сложных типов данных часто приходится пользоваться записями (RECORD). При этом для обращения к полям записи можно использовать два способа доступа: операцию "." или оператор присоединения WITH.




Для доступа к полям записи целесообразнее использовать оператор WITH <переменнаая> DO <оператор>, вместо "." что уменьшает объем загрузочного модуля и увеличивает быстродействие.

Например,

type

Bi=record

day,month:byte;

year :word

end;

var

a,b:Bi

......

with c.bd do month:=9;

вместо c.bd.month:=9;

Type

Birthday = record

Day, month: byte;

Year: word;

End;

var a: birthday;

if (a.day=16) and with a do

(a.month=6) and if (day=16) and

(a.year=1979) then (month=6) and

write('Hi!'); (year=1979) then

write('Hi!');

При использовании параметров порядкового типа вместо операций многократного сравнения с граничными значениями следует применять оператор проверки принадлежности IN, если диапазон изменения параметра позволяет использовать множество:

If ((ch>='0')and(ch<='9')) or

((ch>='A')and(ch<='Z')) or

(ch='@') then

write('Yes')

if ch in ['0'..'9',

'A'..'Z',

'@'] then

write('Yes');

При использовании оператора CASE следует учитывать специфику его работы: проверка условий осуществляется в порядке их задания в операторе. Если проверяемая переменная попадает в какой-либо диапазон, то остальные условия не проверяются, поэтому, если это возможно, следует первыми условиями использовать наиболее вероятные.

При умножении и делении целых чисел на число, являющееся целой степенью числа 2, вместо операций умножения и деления следует использовать операции Shl - сдвиг числа влево (умножение) и Shr – сдвиг числа вправо (деление):

A:=n div 512 a:=n shr 9

A:=n*1024 a:=n shl 10







Сейчас читают про: