Автор: -DB- 25.11.2004 20:52
Код
program l;
c,i:byte;
begin
c:=0;
for i:=1 to 255 do
inc(c);
readln;
end.
и
Код
program l;
c,i:byte;
begin
c:=0;
for i:=1 to 255 do
c:=c+1;
readln;
end.
Разницы же никакой так зачем же создали процедуру inc :fire:
Автор: volvo 25.11.2004 20:59
Практически никакой. Только выполняется Inc быстрее...
Код
var s1, s2: string;
begin
readln(s1);
s2 := s1;
end;
Код
var s1, s2: string; i: byte;
begin
s2 := '';
readln(s1);
for i := 1 to length(s1) do s2 := s2 + s1[i];
end;
Разницы тоже никакой. Какой способ выберешь?
Автор: -DB- 25.11.2004 21:03
Конечно же первый;
=============
Значит лучше использовать inc и dec чем +1 и -1
Автор: xds 25.11.2004 22:16
Inc не является процедурой в полном смысле этого слова. Это языковая конструкция (как и Dec, Write/Writeln, Read/Readln, Succ, Pred и т. п. - большинство "процедур" фиктивного модуля "System").
Причины большей эффективности Inc и Dec перед обычным присвоением заключаются в следующем: для конструкции "c := c + 1;" будет сгенерирован код
Код
mov al,c
xor ah,ah
inc ax
mov c,al
в то время как для "Inc(с);" - всего лишь одна инструкция:
Код
inc byte ptr c
Разница очевидна: c Inc мы не замачиваем - мы просто стираем
Автор: Флогримм 25.11.2004 22:41
Значит лучше использовать inc и dec чем +1 и -1
Цитата
Значит лучше использовать inc и dec чем +1 и -1
причем не только для +1, -1!!
Цитата
Inc (процедура)
-----------------
Увеличивает значение переменной.
Объявление:
Procedure Inc(Var X [ ; N : Longint ] );
Режим:
Windows, Real, Protected
Замечания:
Параметр X - переменная перечислимого типа или
переменная типа PChar, если допускается
расширенный синтаксис, а N - выражение
целочисленного типа. Значение X увеличивается
на 1, если параметр N не определен, или на N,
если праметр N определен, то есть Inc(X)
соответствует X:=X+1, а Inc(X, N)
соответствует X:=X+N.
С помощью Inc генерируется более
оптимизированный код, особенно полезный в
плотном цикле.
Обрати внимание на ->
Цитата
Значение X увеличивается
на 1, если параметр N не определен, или на N,
если праметр N определен, то есть Inc(X)
соответствует X:=X+1, а Inc(X, N)
соответствует X:=X+N.
... анлагочно с dec'ом
Но не забывай, что
N может не может быть вефественным, только целым!
Автор: GoodWind 26.11.2004 0:08
Цитата
Но не забывай, что N может не может быть вефественным, только целым!
и не обязательно положительным ;)
Автор: xds 26.11.2004 7:21
Для "Dec(c, n);" и "Inc(c, n);" причины прироста производительности имеют аналогичный характер.
Достаточно забавно наблюдать за поведением оптимизатора BP (как, впрочем, и за работой любого другого "чёрного ящика"): он "догадывается" заменить "ax + 1" на "inc ax", "ax + 2" на "inc ax; inc ax", "ax + 7" на "add ax,7" и т. п, но, встретившись с операндом длиной 8 бит, вместо "inc al" честно делает "xor ah,ah" и сводит задачу к уже решённой.