• При умножении и делении на 2,4,8,… пользуйте shl и shr.
inc(x); {x:=x+1;}
 
inc(x,N); {x:=x+N;}
 
x:=x shr 1; {x:=x div 2;}
 
x:=x shl 1; {x:=x * 2;}

Примечание: Только для целых чисел!

  • При сравнении вместо
(x >= 'A') and (x <= 'Z')

используйте

x in ['A'..'Z']

(Также можно делать и с числами (точнее байтами), но только от 0 до 255)

IF ch IN ['0'..'9','A'..'Z','a'..'z','_'] THEN ...

лучше заменить на

CASE ch OF
 '0'..'9','A'..'Z','a'..'z','_':...;
 END;
  • При работе с множествами операторы
Include(S, X) и Exclude(S, X)

работают быстрее, чем

S := S + [X] и S := S - [X]

соответственно (где S - множество какого-то типа, а X - элемент множества)

  • Превычисления:
c := (a + b) * d;
e := g - (a + b);

В этих выражениях 2 раза вычисляется a+b, поэтому стоит завести временную переменную,

temp := a + b;
c := temp * d;
e := g - temp;
  • Пользуйтесь простыми арифметическими операциями начиная по уровню быстроты:
  1. присваивание
  2. сложение,вычитание
  3. умножение
  4. деление
  5. возведение в степень и др.
  • Деление заменяй на умножение:
x:=(a+b)/2;

а надо

x:=(a+b)*0.5;
  • Если X и Y целые, то такой код:
    round­(x/y)

    чаще всего заменяется на более быстрый:

    x div y
  • Пишите действительные константы с точкой (10.0 вместо 10). Это предотвращает лишние преобразования.
  • Заменяйте тип real на тип single или double.
  • I/O может быть улучшен, если используются большие буферы (кратные 512 байтам для оптимальных результатов)


2010-11-12 • Просмотров [ 797 ]