Найти сумму степеней
На этой странице рассматриваются задачи For36 - For40 из задачника Абрамяна - одни из простейших задач, относящихся к вложенным циклам For с параметрами. В примерах For36-38 сумируем предварительно вычисленные степени натуральных чисел, в задачах For39-40 выводим целые числа с интервала.
For36. Даны целые положительные числа N и K. Найти сумму
1K + 2K + … + NK.
Чтобы избежать целочисленного переполнения, вычислять слагаемые этой суммы с помощью вещественной переменной и выводить результат как вещественное число.
Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | var
k, N, i, j: word;
Sum, a: real;
begin
writeln('Введите целые положительные числа N и K:');
write(' N = ');
readln(N);
write(' K = ');
readln(K);
Sum := 1; { <== Начальная сумма }
for i := 2 to N do
begin
{ Для временного хранения i^K используем
переменную a: }
a := i; { <== 1-я степень числа a }
{ Далее вычисляем a^K: для этого умножаем
предыдущее значение a на i, в результате чего
на j-м шагу получаем j-ю степень числа a: }
for j := 2 to K do
a := a * i; { <== j-я степень числа a }
Sum := Sum + a { <== Увеличиваем сумму }
end;
writeln;
writeln('Результат: ', Sum);
readln
end. |
|
For37. Дано целое число N (> 0). Найти сумму
11 + 22 + … + NN.
Чтобы избежать целочисленного переполнения, вычислять слагаемые этой суммы с помощью вещественной переменной и выводить результат как вещественное число.
А здесь уже показатель степени постоянно меняется, поэтому на i-м шагу нужно вычислить i-й степень числа i.
Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | var
N, i, j: word;
Sum, a: real;
begin
write('N = ');
readln(N);
Sum := 1; { <== Начальная сумма }
for i := 2 to N do
begin
a := i; { <== 1-я степень числа i (j = 1) }
{ Далее вычисляем i-ю степень числа i: }
for j := 2 to i do
a := a * i; { <== j-я степень числа i }
Sum := Sum + a; { <== Сумму увеличиваем на i-ю степень i }
end;
writeln;
writeln('Результат: ', Sum);
readln
end. |
|
For38. Дано целое число N (> 0). Найти сумму
1N + 2N−1 + … + N1.
Чтобы избежать целочисленного переполнения, вычислять слагаемые этой суммы с помощью вещественной переменной и выводить результат как вещественное число.
Чтобы решить эту задачу, заметим, что сумма основания степени и показателя всегда равна N + 1:
1 + N = N + 1, 2 + (N - 1) = N + 1, ..., N + 1 = N + 1.
Таким образом, если основание равно i, то показатель будет равен N + 1 - i.
Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | var
N, i, j: word;
Sum, a: real;
begin
writeln('Введите целое положительное число N:');
write(' N = ');
readln(N);
Sum := 1; { <== Начальная сумма }
for i := 2 to N do
begin
a := i; { <== 1-я степень числа i }
{ Далее для всех остальных показателей j (от 2 до N + 1 - i)
умножаем предыдущее значение a на i, в результате чего на j-м
шагу получаем j-ю степень числа i: }
for j := 2 to N + 1 - i do
a := a * i; { <== j-я степень числа i }
Sum := Sum + a { <== Увеличиваем сумму }
end;
writeln;
writeln('Результат: ', Sum);
readln
end. |
|
Выводим все числа с интервала
For39. Даны целые положительные числа A и B (A < B). Вывести все целые числа от A до B включительно; при этом каждое число должно выводиться столько раз, каково его значение (например, число 3 выводится 3 раза).
Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | var
i, j, A, B: word;
begin
write('A = ');
readln(A);
write('B = ');
readln(B);
writeln;
for i := A to B do { <-- для целого i от A до B }
for j := 1 to i do { <-- i раз }
write(' ', i) { <-- выводим число i }
readln
end. |
|
For40. Даны целые числа A и B (A < B). Вывести все целые числа от A до B включительно; при этом число A должно выводиться 1 раз, число A + 1 должно выводиться 2 раза и т. д.
Код Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | var
i, j, A, B: integer;
begin
writeln('Введите целые числа A и B (A < B):');
write(' A = ');
readln(A);
write(' B = ');
readln(B);
writeln;
for i := A to B do { <-- Для целого i от A до B }
for j := 1 to i - A + 1 do { <-- (i - A + 1) раз }
write(' ', i); { <-- выводим число i }
readln
end. |
|