1. из трёхлитрового налить в пятилитровый полный сосуд. в пятиоитровом останется место еще под два литра. наполняем трехлитровый заново и доливаем до полнотоы пятилитровый. в трёх литровом останется один литр
2. если вылить из полного пятилитрового сосуда в трёхлитровый три литра, то в пятилитровом останется два
3. просто набрать в трёх литровый сосуд три литра
4. проделываем первый трюк, и выливаем один литр в пятилитровый сосуд. доливаем туда же еще три литра
5. просто набрать в пятилитровый сосуд пять литров
6. проделываем первый трюк, и набираем еще в пятилитровый. вместе в них будет 6 литров
7. вторым переливаем два литра в трехлитровый. далее просто набираем пять литров, и в сумме с трёхлитровым они дают семь литров
8. просто набрать в трёхлитровый и пятилитровый сосуды воду, их сумма составит восемь литров
type Arr = array [1..5] of integer; //Тип массива
const
a: Arr = (-3, 100, 10, 12, 18);{Задаем типизированную константу - массив и сразу же присваиваем элементам значения}
procedure ReadArr(a: Arr);{Процедура для чтения массива}
function Summa : integer; {Вложенная в процедуру функция для вычисления суммы элементов (входной в процедуру параметр виден и в функции)}
var
S, i: integer;
begin //Начало функции
S:= 0;
for i:= 1 to 5 do s:= s + a[i]; //Вычисление суммы
Summa:= s; //Присваиваем значение s функции
end; //Конец функции
begin //Начало процедуры
write(Summa); //Выводим значение функции
end; //Конец процедуры
begin //Начало программы
ReadArr(a);
end. //Конец программы
Если только так. Я использовал процедуру, в которой входным параметром является заданный массив и в процедуре - вложенную функцию, вычисляющую сумму элементов. А вообще непонятно, зачем тут еще и procedure, ведь вполне можно обойтись одной функцией.