Root /ArchiveAbout
()

Найти сумму степеней

Найти сумму степеней

На этой странице рассматриваются задачи 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