====== Оптимизация кода программ (Code Tuning) ====== * При умножении и делении на 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; * Пользуйтесь простыми арифметическими операциями начиная по уровню быстроты: - присваивание - сложение,вычитание - умножение - деление - возведение в степень и др. * Деление заменяй на умножение: 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 байтам для оптимальных результатов) ---- Но помните, //"Premature optimization is the root of all evil" (Donald Knuth)//