помогите написать прогу на язіке Object Pascal

компьютеры обучение Delphi pascal оп

В одномерном массиве, что состоит из N действительных элементов, вычислить:
1) Номер максимального по модулю элемента массива;
2) суму элементов массива, расположеных после первого положительного элемента.

Примечание:
нам в универе эту тему не обьяснили...

Примечание:
мы только начали изучать программирование, сначала у нас Object Pascal, а потом будут и другие...
Ответы:
А самому слабо?
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 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.