Ответы:
const n := 10;
var
i, maxElement, Summ : Integer;
fSumm : Boolean;
data[0..n] of Integer; {Наш массив. Он должен быть заполнен значениями}
А вообще умеешь пользоваться Object Pascal? Могу дать только алгоритм.
azcoder, я бы поспорил в некоторых местах...
if Abs(data[i]) > maxElement then maxElement := Abs(data[i]);
"Номер максимального по модулю элемента массива", блин, а ведь и я ошибся, нужен ведь номер :-) А вообще я бы сравнивал их по модулю, но сохранял бы значение без модуля.
2 ZoAs
> "Номер максимального по модулю элемента массива"...
Точно!
> А вообще я бы сравнивал их по модулю, но сохранял бы значение без модуля.
Да, но это длиннее и больше процессорного времени требует на вызов функции Abs, плюс помещение/изъятие параметров из стека.
Доработаем этот момент:
var
maxElementNumber : Integer;
...
maxElement := -1; {Так как сравнение по модулю, то это гарантирует нам корректное сравнение. Т.е. даже если элемент 0, то он будет больше -1}
maxElementNumber := -1;
if Abs(data[n] > maxElement) then
begin
maxElement := Abs(data[n]);
maxElementNumber := n;
end;
...
хочу добавить к ответу azcoder:
мне кажется проще так -
maxElement := data[0];
maxElementNumber := 0;
for i:=1 to n do
begin
if abs(data[i])>maxElement then begin maxElement=abs(data[i]);maxElementNumber:=i;
end;
тут мы экономим 1н такт цикла(а циклы сам должен знать - зло),к тому же лишаемся того минуса, что у тебя была ошибка - при сравнении по модулю -1 будет больше 0 :)
да и лишнее изменение переменных нам ведь тоже неинтересно :)
2ZoAs:
у тебя кстати тоже маленькая ошибка:
при выполнении следующего кода появляется зависимость того что произойдет от компилятор:
begin
if M[i]>0 then do begin for j:=i+1 to n do begin summa:=summa+M[i]; i:=n; end;
end;
в частности freepascal скажет что нелья нам переменную i в цикле менять...
> for i:=1 to n do
> begin
> if abs(data[i])>maxElement then begin maxElement=abs(data[i]);maxElementNumber:=i;
> end;
> тут мы экономим 1н такт цикла(а циклы сам должен знать - зло),к тому же лишаемся того минуса, что у тебя была ошибка - при сравнении по модулю -1
> будет больше 0 :)
Ну, собственно, при сравнении maxElement не приводится к модулю, соответственно ошибки не будет :)
16 лет назад