Приветствуем читателей нашего сайта! Сегодня мы с вами решим задачи for36-40.
For36-40
For36°. Даны целые положительные числа N и K. Найти сумму 1K + 2K + … + NK. Чтобы избежать целочисленного переполнения, вычислять слагаемые этой суммы с помощью вещественной переменной и выводить результат как вещественное число.
1-ый вариант решения этой задачи.
program for36; var N, k, i, j: integer; sum, a: real; begin write('Введите k: '); readln(k); write('Введите N: '); readln(N); sum := 0; //в начале сумма равна нулю for i := 1 to N do begin a := 1; for j := 1 to k do a := a * i; //доводим слагаемое до k-ой степени sum := sum + a; end; write('Сумма: ', sum) end.
2-ой вариант решения этой задачи. (Для тех, кто любит побыстрее.)
an =
1) 1 * (a2)n/2, если n чётно;
2) a * (a2)n/2, если n нечётно.
Результат буду записывать в r. На каждой итерации цикла я буду умножать а на саму себя (a2 * a2 = a4). Если значение К нечётно, то я умножу конечное значение а на r, которое будет равняться начальному значению a. Если же значение K чётное, то я умножу конечное значение а на r, которое будет равняться 1.
program for36_2; var N, K, i, K1: integer; sum, a, r: real; begin write('Введите K: '); readln(K); write('Введите N: '); readln(N); sum := 0; //в начале сумма равна нулю K1 := K; for i := 1 to N do begin a := i; if K1 mod 2 <> 0 then r := a else r := 1; //в r будет записываться результат while K1 > 1 do begin K1 := K1 div 2; a := a * a; if K1 mod 2 <> 0 then r := r * a {даже четное К в конце станет равняться 1, тогда мы и присвоим r значение основания степени} end; sum := sum + r; K1 := K; end; write('Сумма: ', sum) end.
For37. Дано целое число N (> 0). Найти сумму 11 + 22 + … + NN. Чтобы избежать целочисленного переполнения, вычислять слагаемые этой суммы с помощью вещественной переменной и выводить результат как вещественное число.
program for37; var N, i, j: integer; sum, a: real; begin write('Введите N: '); readln(N); sum := 0; //в начале сумма равна нулю for i := 1 to N do begin a := 1; for j := 1 to i do a := a * i; //доводим слагаемое до i-ой степени sum := sum + a end; write('Сумма: ', sum) end.
For38. Дано целое число N (> 0). Найти сумму 1N + 2N–1 + … + N1. Чтобы избежать целочисленного переполнения, вычислять слагаемые этой суммы с помощью вещественной переменной и выводить результат как вещественное число.
program for38; var N, i, j: integer; sum, a: real; begin write('Введите N: '); readln(N); sum := 0; //в начале сумма равна нулю for i := 1 to N do //i изменяется в диапозоне от 1 до N включительно begin a := 1; for j := N downto i do a := a * i; //доводим слагаемое до (N - i + 1)-ой степени sum := sum + a end; write('Сумма: ', sum) end.
For39. Даны целые положительные числа A и B (A < B). Вывести все целые числа от A до B включительно; при этом каждое число должно выводиться столько раз, каково его значение (например, число 3 выводится 3 раза).
program for39; var N, i, j, A, B: integer; begin write('Введите A: '); readln(A); write('Введите B: '); readln(B); for i := A to B do begin writeln; //переносим каретку на следующую строку for j := i downto 1 do // Например, i = 3, 3 напечатается (3 - 1) + 1 раза write(i, ' ') end end.
For40. Даны целые числа A и B (A < B). Вывести все целые числа от A до B включительно; при этом число A должно выводиться 1 раз, число A + 1 должно выводиться 2 раза и т. д.
program for40; var N, i, j, A, B: integer; begin write('Введите A: '); readln(A); write('Введите B: '); readln(B); for i := A to B do begin writeln; //переносим каретку на следующую строку for j := A to i do // например, i = A + 2. A + 2 напечатается (A + 2 - A) + 1 write(i, ' ') end end.
На сегодня всё! Если у вас возникли вопросы, задавайте их в комментариях. И не забывайте рассказывать о нашем сайте своим друзьям, кликая по эти замечательным круглым кнопочкам, которые расположены чуть-чуть пониже этих строк.
Здравствуйте! Я понимаю, что по задачнику задание for36 подразумевает использование вложенных циклов, но всё же. Зачем использовать вложенные циклы, когда вычисление суммы можно сделать в одно действие?
Добрый вечер, Сергей! Данные задачи помогают набить руку, закрепить основы программирования. Конечно, во многих случаях применять циклы совершенно неразумно — это только увеличит временную сложность программы. Та же история и с массивами. Поэтому если Вы владеете хорошей математической базой — прекрасно, используйте эти навыки 🙂
For36
А так нельзя?
var n, k: integer;
sum: real;
begin
readln (n, k);
for var r := 1 to n do
sum := sum + power (r, k);
write (sum)
end.