Условие
Дан массив из n элементов и числа k1 и k2. Необходимо найти сумму элементов массива с k1-го по k2-й.

Формат входных данных
С клавиатуры вводится натуральное число n (n≤100). На следующей строке через пробел вводятся n элементов массива. В последней строке содержатся числа k1 и k2 — номера элементов. Все числа по модулю не превосходят 100.

Формат выходных данных
В качестве ответа выведите единственное число — сумму элементов, удовлетворяющих условию.

Ответы

Ответ дал: KnowsUser1
0

Ответ:

PascalABC.NET

begin

 ReadSeqInteger('Entery your array: ', ReadInteger('array length: '))

   .Where(x -> abs(x) < 100)

   .ToList[ReadInteger('Left Border (index): '):ReadInteger('Rigth Border (index + 1): ')]

   .Sum.Println;

end.

Объяснение:


BobbyFresnel: Ясен перец, я же ссылку дал на книгу, там надо было читать внимательно про работу с последовательностями. Чтение и рандомы - источник недетерминированных последовательностей, а их можно использовать только в лднопроходном алгоритме. Поэтому, как правило, генерят случайные и читают в массив. Либо, сохраняют в конце цепочки полученную последовательность в массив.
KnowsUser1: вот я это решение как раз из книги и вычитал)
BobbyFresnel: Не надо, в книге все задачи работают.
KnowsUser1: Нет, в смысле вот этот огород, который я по итогу нагородил. Который работает
BobbyFresnel: Потому что я был одним из тестировщиков.
BobbyFresnel: Ну вот теперь посмотри мое решение, может будет понятно, как без огорода.
KnowsUser1: ну я просто изначально начал в последовательность читать, а не в массив) Кстати, на счёт твоего, а если ввести левую границу среза 0, не будет ошибки? Типа Array[-1:2] например
BobbyFresnel: Будет. Вообще, можно придумать десятки способов нагадить в программе. Но когда программу пишут в учебных целях, как бы "школьники", предполагается что вводимые данные корректны.
BobbyFresnel: Если хочется себя обезопасить, можно сделать две вещи. Перавя тут и самая простоя - использовать "безопасный" срез, который просто не выпустит индексы за границы массива. Надо после имени массива добавить знак вопроса: a?[k1 - 1:k2].Sum.Println
BobbyFresnel: Вторая - использовать новинку последних версий. Надо записать k1 := a.Clamp(1, n): k2 := a.Clamp(1, n); При выходе за границу величина будет приведена к границе.
Ответ дал: BobbyFresnel
0

===== PascalABC.NET =====

begin

 var n := ReadInteger;

 var a := ReadArrInteger(n);

 var (k1, k2) := ReadInteger2;

 a[k1 - 1:k2].Sum.Println

end.

Приложения:
Вас заинтересует