Когда вы научитесь писать программы и вам станет скучновато, советуем начать заниматься оптимизацией вашего кода. Небольшая подборка полезных советов будет полезна продвинутым программистам.
- При умножении и делении на 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 байтам для оптимальных результатов)