На этой странице рассматриваются задачи For36 - For40 из задачника Абрамяна - одни из простейших задач, относящихся к вложенным циклам For с параметрами. В примерах For36-38 сумируем предварительно вычисленные степени натуральных чисел, в задачах For39-40 выводим целые числа с интервала.
For36. Даны целые положительные числа N и K. Найти сумму
1K + 2K + … + NK.
Чтобы избежать целочисленного переполнения, вычислять слагаемые этой суммы с помощью вещественной переменной и выводить результат как вещественное число.
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.
**type** word;
: Представляет 16-битовое целое число без знака.Диапазон значений: 0 .. 65 535**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 For37. Дано целое число N (> 0). Найти сумму
11 + 22 + … + NN.
Чтобы избежать целочисленного переполнения, вычислять слагаемые этой суммы с помощью вещественной переменной и выводить результат как вещественное число.
А здесь уже показатель степени постоянно меняется, поэтому на i-м шагу нужно вычислить i-й степень числа i.
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.
**type** word;
: Представляет 16-битовое целое число без знака.Диапазон значений: 0 .. 65 535**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 For38. Дано целое число N (> 0). Найти сумму
1N + 2N−1 + … + N1.
Чтобы избежать целочисленного переполнения, вычислять слагаемые этой суммы с помощью вещественной переменной и выводить результат как вещественное число.
Чтобы решить эту задачу, заметим, что сумма основания степени и показателя всегда равна N + 1:
1 + N = N + 1, 2 + (N - 1) = N + 1, ..., N + 1 = N + 1.
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.
**type** word;
: Представляет 16-битовое целое число без знака.Диапазон значений: 0 .. 65 535**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308
For39. Даны целые положительные числа A и B (A < B). Вывести все целые числа от A до B включительно; при этом каждое число должно выводиться столько раз, каково его значение (например, число 3 выводится 3 раза).
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.
**type** word;
: Представляет 16-битовое целое число без знака.Диапазон значений: 0 .. 65 535 For40. Даны целые числа A и B (A < B). Вывести все целые числа от A до B включительно; при этом число A должно выводиться 1 раз, число A + 1 должно выводиться 2 раза и т. д.
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.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647