Помогите в Delpfi
Составить процедуру, возвращающую значение TRUE, если в первом из двух заданных одномерных массивов длиной N количество отрицательных элементов окажется больше, чем во втором, и значение FALSE в противном случае.Использовать такую процедуру для двух заданных массивов и вывести результат ее работы.
Код:
procedure Compare(const inFirst, inSecond: Array of Integer; out Res: Boolean);
var
szFirst, szSecond, I, countFirst, countSecond: Integer;
begin
szFirst:= length(inFirst);
szSecond:= length(inSecond);
countFirst:= 0;
countSecond:= 0;
for I := 0 to szFirst - 1 do if inFirst[I] < 0 then countFirst:= countFirst + 1;
for I := 0 to szSecond - 1 do if inSecond[I] < 0 then countSecond:= countSecond + 1;
If countFirst > CountSecond then Res:= True else Res:= False;
end;
var
szFirst, szSecond, I, countFirst, countSecond: Integer;
begin
szFirst:= length(inFirst);
szSecond:= length(inSecond);
countFirst:= 0;
countSecond:= 0;
for I := 0 to szFirst - 1 do if inFirst[I] < 0 then countFirst:= countFirst + 1;
for I := 0 to szSecond - 1 do if inSecond[I] < 0 then countSecond:= countSecond + 1;
If countFirst > CountSecond then Res:= True else Res:= False;
end;
Для проверки повесь на какой-нибудь обработчик след. код (здесь для Button1):
Код:
procedure TForm1.Button1Click(Sender: TObject);
const N = 3;
var
CompRes: Boolean;
F: Array[0..N-1] of Integer;
S: Array[0..N-1] of Integer;
I: Integer;
begin
F[0]:=-1; F[1]:= 2; F[2]:=-3;
S[0]:= -1; S[1]:= -2; S[2]:=-3;
Compare(F,S,CompRes);
if CompRes then ShowMessage('В первом больше')
else ShowMessage('Больше во втором или поровну');
end;
const N = 3;
var
CompRes: Boolean;
F: Array[0..N-1] of Integer;
S: Array[0..N-1] of Integer;
I: Integer;
begin
F[0]:=-1; F[1]:= 2; F[2]:=-3;
S[0]:= -1; S[1]:= -2; S[2]:=-3;
Compare(F,S,CompRes);
if CompRes then ShowMessage('В первом больше')
else ShowMessage('Больше во втором или поровну');
end;
записи аналогичны, только лишь второй вариант Теоретически работает быстрее :) да и читается легче.
Код:
procedure Compare(const inFirst, inSecond: Array of Integer; out Res: Boolean);
var
szFirst, szSecond, I, delt_count: Integer;
begin
szFirst:= length(inFirst);
szSecond:= length(inSecond);
delt_count:= 0;
for I := 0 to szFirst - 1 do if inFirst[I] < 0 then inc(delt_count);
for I := 0 to szSecond - 1 do if inSecond[I] < 0 then dec(delt_count);
If delt_count > 0 then Res:= True else Res:= False;
end;
var
szFirst, szSecond, I, delt_count: Integer;
begin
szFirst:= length(inFirst);
szSecond:= length(inSecond);
delt_count:= 0;
for I := 0 to szFirst - 1 do if inFirst[I] < 0 then inc(delt_count);
for I := 0 to szSecond - 1 do if inSecond[I] < 0 then dec(delt_count);
If delt_count > 0 then Res:= True else Res:= False;
end;
Цитата: misha_turist
countFirst:= countFirst + 1; и countSecond:= countSecond + 1; можно заменить на inc(countFirst); и inc(countSecond); соответственно.
записи аналогичны, только лишь второй вариант Теоретически работает быстрее :) да и читается легче.
записи аналогичны, только лишь второй вариант Теоретически работает быстрее :) да и читается легче.
Здесь может и не быть разницы, по тому как означают они одно и то же, и компилятор из них сделает один и тот же машинный код.
Насчёт читаемости спорное утверждение, мне например первый вариант более привычен и понятен, это лиш дело вкуса.
Цитата: QWERYTY
Насчёт читаемости спорное утверждение, мне например первый вариант более привычен и понятен, это лиш дело вкуса.
Согласен. А в Lazarus можно в стиле C++ писать i++, += и т.п. Дело вкуса -- точно.