Вычислить сумму 1+2+ складывать до тех пор пока сумма не станет больше 1000. вывести сумму и последнее прибавленное число напишите модель, схему и программный код.
1+2+3+... - это арифметическая прогрессия с разностью d, равной единице и первым членом a₁=1. Сумма n первых членов арифметической прогрессии может быть найдена по формуле S=(2a₁+d(n-1))*n/2. В нашем случае формула упрощается: S = (2+1(n-1))n/2 = n(n+1)/2 По условию члены прогрессии суммируются, пока сумма не превысит 1000. Тогда 0.5n(n+1)>1000 n(n+1)>2000; n²+n-2000>0 Найдем минимальное n, удовлетворяющее этому условию. n²+n+2000=0; D=1+8000=8001; √D ≈ 89.4 n₁=0.5(-1-89.4) < 0 - не устраивает, поскольку n>1 n₂=0.5(-1+89.4) =44.2 Принимаем n=45. Сумма составит 45(45+1)/2=1035, а последний член равен n, т.е .45
Непонятно, зачем нам составлять программу. Пусть для того, чтобы проверить наше решение, поэтому выберем другой алгоритм. Будем последовательно наращивать сумму 1+2+3+4 до превышения ей значения 1000. Решение, что называется, "в лоб".
2. Блок-схема приведена во вложении.
3. Программа
// PascalABC.NET 3.3, сборка 1625 от 17.01.2018 // Внимание! Если программа не работает, обновите версию!
begin var (s,i):=(0,1); while true do begin s+=i; if s>1000 then begin Writeln('S=',s,', последний член ',i); exit end; i+=1 end end.
Сначала смотрим на то, что происходит в цикле с переменной а. К ней добавляются по 2 единицы за шаг цикла. Так как программа выводит значение а, равное 4, делаем вывод, что цикл повторится 2 раза. Далее посмотрим на условие окончания. Цикл с предусловием while будет выполниться, пока x больше 0, а в самом цикле происходит целочислительное деление x на 1000, что означает "отщепление" от числа по 3 цифры младших разрядов. Из этого следует, что число должно иметь как минимум 4 цифры, чтобы цикл повторился 2 раза. Значение b должно быть равно 13. 13 - простое число. Следовательно, равно 1*13. Поставим 13 в левый конец числа, а 1 - в правый. Третий и второй знаки будут равны 0. Таким образом получим число 13001. ответ: 13001
Var ar:array[1..n] of integer; k,i,c:integer; begin randomize; writeln('First array:'); for i:=1 to n do begin ar[i]:=random(9); write(ar[i]:4); end; writeln; write('Enter index:'); readln(k); if (k=1) or (n=1) then begin writeln('Mwahahahaha(no)'); exit; end; c:=ar[k+1]; ar[k+1]:=ar[k-1]; ar[k-1]:=c; writeln('Final array:'); for i:=1 to n do write(ar[i]:4); end.
Пример работы программы: First array: 1 8 4 2 8 5 8 7 1 8 Enter index:3 Final array: 1 2 4 8 8 5 8 7 1 8
1+2+3+... - это арифметическая прогрессия с разностью d, равной единице и первым членом a₁=1.
Сумма n первых членов арифметической прогрессии может быть найдена по формуле S=(2a₁+d(n-1))*n/2.
В нашем случае формула упрощается: S = (2+1(n-1))n/2 = n(n+1)/2
По условию члены прогрессии суммируются, пока сумма не превысит 1000.
Тогда 0.5n(n+1)>1000
n(n+1)>2000; n²+n-2000>0
Найдем минимальное n, удовлетворяющее этому условию.
n²+n+2000=0; D=1+8000=8001; √D ≈ 89.4
n₁=0.5(-1-89.4) < 0 - не устраивает, поскольку n>1
n₂=0.5(-1+89.4) =44.2
Принимаем n=45.
Сумма составит 45(45+1)/2=1035, а последний член равен n, т.е .45
Непонятно, зачем нам составлять программу. Пусть для того, чтобы проверить наше решение, поэтому выберем другой алгоритм.
Будем последовательно наращивать сумму 1+2+3+4 до превышения ей значения 1000. Решение, что называется, "в лоб".
2. Блок-схема приведена во вложении.
3. Программа
// PascalABC.NET 3.3, сборка 1625 от 17.01.2018
// Внимание! Если программа не работает, обновите версию!
begin
var (s,i):=(0,1);
while true do begin
s+=i;
if s>1000 then begin
Writeln('S=',s,', последний член ',i);
exit
end;
i+=1
end
end.
Результат
S=1035, последний член 45