Составим программу вычисления суммы ряда чисел 5, 10, 15, …, 50 на языке программирования Pascal ABC. Введем обозначения следующих величин: пусть s – сумма чисел ряда, которую надо найти, а i – порядковый номер чисел ряда. Начальное значение суммы s будет равным нулю. Так как чисел несколько, то будем использовать в программе оператор цикла с параметром for. По условию задачи числа суммируются, начиная с числа 5, с интервалом 4 числа, поэтому значение i в каждом цикле будем увеличивать на 4.
Программа может выглядеть так:
program zadacha;
uses crt;
var s,i: integer;
begin
s:=0; {Задание начального значение суммы s}
for i:=5 to 50 do begin
s:=s+i; {Вычисление суммы чисел}
i:=i+4; {Увеличение значения параметра i на 4}
end;
writeln ('s=',s) {Вывод результата суммы s}
end.
Можно решить данную задачу и вторым используя операцию mod:
program zadacha;
uses crt;
var s,i: integer;
begin
s:=0; {Задание начального значение суммы s}
for i:=5 to 50 do
if i mod 5=0 {Поиск чисел, кратных 5}
then s:=s+i; {Вычисление суммы чисел}
writeln ('s=',s); {Вывод результата суммы s}
end.
ответом будет s=275.
Составить программу нахождения значения функции у= 5х+х2, при х=50, 49, 48, 47, …, 40.
program zadacha;
uses crt;
var x,y,i:integer;
begin
for i:=50 downto 40 do begin y:=5*i+i*2; writeln ('y=',y); end;
writeln ('y=',y)
end.
Объяснение:
Посчитаем объем земли, который был снят.
Всю землю можно разделить на фигуры толщиной 1 метр, в основании которых трапеции с высотой 1 м и основаниями - двумя соседними измерениями высоты. Тогда объем каждой фигуры V(i) = (h(i) + h(i + 1)) / 2, полный объем V = V(1) + V(2) + ... + V(N - 1) = h(1)/2 + (h(2) + h(3) + ... + h(N - 2)) + h(N - 1)/2
Объем земли, который использовался для засыпания, равен V = h (N - 1).
Эти объемы, конечно, равны, тогда h = (h(1)/2 + h(N - 1)/2 + (h(2) + h(3) + ... + h(N - 2))/(N - 1)
PascalABC.NET 3.2.1518:
begin
var N := ReadInteger;
print(ReadSeqInteger(N)
.Select((x, i) -> (i = 0) or (i = N - 1) ? x/2 : x)
.Sum / (N - 1))
end.
С вводом-выводом в файл:
begin
var f := OpenRead('INPUT.TXT');
var N := f.ReadInteger;
var S := f.ReadInteger / 2;
for var i := 2 to N - 1 do
S += f.ReadInteger;
S += f.ReadInteger / 2;
print(S / (N - 1))
end.