


begin
var quantity := 0;
var amount := 0;
var A := readinteger();
var B := readinteger();
for var i := A to B do
begin
if (i mod 3 = 0) and (i mod 10 <> 0) then
begin
inc(amount, i);
inc(quantity);
end;
end;
writeln(amount / quantity:0:2);
end.
Объяснение:
begin // Начало программы
var quantity := 0; // Объявление переменной, хранящей количество элементов, подходящих под условие
var amount := 0; // Объявление переменной, хранящей сумму элементов, подходящих под условие
var A := readinteger(); // Считывание числа А с клавиатуры
var B := readinteger(); // Считывание числа В с клавиатуры
for var i := A to B do // Идём от А до В
begin // Начало цикла
if (i mod 3 = 0) and (i mod 10 <> 0) then // Если значение переменной i делится на 3 без остатка И значение переменной i не заканчивается на 0
begin // Начало условного оператора
inc(amount, i); // Прибавляем к переменной amount значение переменной i
inc(quantity); // Прибавляем к переменной quantity единицу
end; // Конец условного оператора
end; // Конец цикла
writeln(amount / quantity:0:2); // Вывод среднего арифметического с точностью до 2 знаков после запятой
end. // Конец программы
Исключение IndexOutOfRangeException ("Индекс находился вне границ массива") указывает на то, что в каком либо месте программы вы пытаетесь обратится к массиву с индексом, выходящим за его границы.
Вероятнее всего, конкретно в вашем коде ошибка может быть на строке 4, т.к вы объявляете имя a как массив на 100 элементов с допустимыми индексами от 1 до 100, но позже даёте пользователю право самому ввести требуемую размерность, и никак не проверяете вводимое пользователем значение. В таком случае любое число > 100 будет приводить к исключению IndexOutOfRangeException.
Что бы избежать исключительных ситуаций, вы можете пойти двумя путями:
1. Проверять вводимые данные на соответствие диапазону допустимых индексов для массива а
2. Использовать коллекции с динамической размерностью (Array of T или List<T>)