Приветствуем читателей нашего сайта! Сегодня мы с вами решим задачи for16-24.
For16°. Дано вещественное число A и целое число N (> 0). Используя один цикл, вывести все целые степени числа A от 1 до N.
Заводим специальную переменную, в которую будем записывать новое значение степени.
program for16; var A, Pow: real; N, i: integer; begin write('Введите A и N: '); read(A, N); Pow := 1; for i := 1 to N do begin Pow := Pow * A; // Умножаем предыдущее число на А writeln(A, ' в ', i, ' степени равно ', Pow); end; end.
For17. Дано вещественное число A и целое число N (> 0). Используя один цикл, найти сумму 1 + A + A2 + A3 + … + AN.
Модифицированная версия for16. В этой задаче мы не выводим значения степеней сразу, а складываем их в отдельную переменную.
program for17; var A, Pow, Sum: real; N, i: integer; begin write('Введите A и N: '); read(A, N); Pow := 1; Sum := 1; for i := 1 to N do begin Pow := Pow * A; // Узнаем следующую степень числа А Sum := Sum + Pow; // Увеличиваем сумму на эту степень end; write('Сумма 1 +... + A в степени N равно ', Sum); end.
For18. Дано вещественное число A и целое число N (> 0). Используя один цикл, найти значение выражения 1 – A + A2 – A3 + … + (–1)N·AN. Условный оператор не использовать.
Используем дополнительную переменную, например, Z. Присваиваем значение -1 и каждый цикл умножаем значение степени на Z.
program for18; var A, Pow, Sum: real; N, i, Z: integer; begin write('Введите A и N: '); read(A, N); Pow := 1; Sum := 1; Z := -1; // Присваиваем -1 for i := 1 to N do begin Pow := Pow * A; Pow := Z * Pow; // Умножаем значение степени. Sum := Sum + Pow; end; write('Сумма равна ', Sum); end.
For19°. Дано целое число N (> 0). Найти произведение N! = 1·2·…·N (N–факториал). Чтобы избежать целочисленного переполнения, вычислять это произведение с помощью вещественной переменной и вывести его как вещественное число.
Каждую итерацию цикла умножаем factorial на i.
program for_19; var factorial: real; i, N: integer; begin read(N); factorial := 1; // По определению 0! = 1 for i := 1 to N do factorial := factorial * i; write(factorial); end.
For20°. Дано целое число N (> 0). Используя один цикл, найти сумму 1! + 2! + 3! + … + N! (выражение N! — N–факториал — обозначает произведение всех целых чисел от 1 до N: N! = 1·2·…·N). Чтобы избежать целочисленного переполнения, проводить вычисления с помощью вещественных переменных и вывести результат как вещественное число.
Получая новое значение факториала, суммируем его со всеми предыдущими значениями.
program for_20; var factorial, sum_factorial: real; i, N: integer; begin read(N); factorial := 1; sum_factorial := 1; // По определению 0! = 1 for i := 1 to N do begin factorial := factorial * i; // Узнаем фокториал sum_factorial := sum_factorial + factorial; // Суммируем end; write('Сумма факториалов - ', sum_factorial); end.
For21. Дано целое число N (> 0). Используя один цикл, найти сумму 1 + 1/(1!) + 1/(2!) + 1/(3!) + … + 1/(N!) (выражение N! — N–факториал — обозначает произведение всех целых чисел от 1 до N: N! = 1·2·…·N). Полученное число является приближенным значением константы e = exp(1).
Задача аналогична предыдущей, только на этот раз мы делим единицу на значение факториала, и после этого складываем их.
program for_21; var factorial, sum_factorial: real; i, N: integer; begin read(N); factorial := 1; sum_factorial := 1; for i := 1 to N do begin factorial := factorial * i; sum_factorial := sum_factorial + 1 / factorial; // Делим 1 на факториал end; writeln('Сумма факториалов, деленных на 1 = ', sum_factorial, ' = ', Exp(1)); // Проверка программы. end.
For22. Дано вещественное число X и целое число N (> 0). Найти значение выражения 1 + X + X2/(2!) + … + XN/(N!) (N! = 1·2·…·N). Полученное число является приближенным значением функции exp в точке X.
program for_22; var factorial, sum_factorial, x: real; i, N, b: integer; begin write('Введите N: '); readln(N); write('Введите x: '); readln(x); b := x; factorial := 1; sum_factorial := 1; for i := 1 to N do begin factorial := factorial * i; // Узнаем факториал sum_factorial := sum_factorial + x / factorial; // Складываем, деля х на факториал x := x * b; // возводим значение х в следующую степень end; writeln('Сумма факториалов, деленных на X в степенях = ', sum_factorial, ' = ', Exp(x)); // проверка end.
For23. Дано вещественное число X и целое число N (> 0). Найти значение выражения X – X3/(3!) + X5/(5!) – … + (–1)N·X2·N+1/((2·N+1)!) (N! = 1·2·…·N). Полученное число является приближенным значением функции sin в точке X.
Я решил, что лучше высчитывать каждую степень х и каждый факториал, а затем проверять i на четность.
program for_23; var factorial, sum_factorial, x, xs: real; i, N, z: integer; begin write('Введите N: '); readln(N); write('Введите x: '); readln(x); factorial := 1; sum_factorial := 0; // начальное значение на этот раз не 1. z := -1; xs := 1; // значение степени х for i := 1 to 2 * N + 1 do begin factorial := factorial * i; // значение факториала xs := xs * x; // степень х if i mod 2 <> 0 then // проверяем нечетность i begin z := -z; // меняем знак z sum_factorial := sum_factorial + z * (xs / factorial); end; end; writeln('Сумма факториалов = ', sum_factorial, ' = ', sin(x)); //проверка end.
For24. Дано вещественное число X и целое число N (> 0). Найти значение выражения 1 – X2/(2!) + X4/(4!) – … + (–1)N·X2·N/((2·N)!) (N! = 1·2·…·N). Полученное число является приближенным значением функции cos в точке X.
Аналогична предыдущей задачи.
program for_24; var factorial, sum_factorial, x: real; i, N, z: integer; begin write('Введите N: '); readln(N); write('Введите x: '); readln(x); factorial := 1; sum_factorial := 1; // стартовое значение снова 1 z := 1; for i := 1 to 2 * N do begin factorial := factorial * i; if i mod 2 = 0 then begin z := -z; x := x * x; sum_factorial := sum_factorial + z * (x / factorial); end; end; writeln('Сумма факториалов = ', sum_factorial, ' = ', cos(x)); // проверка end.
Все! Сегодня были непростые задачи, но я надеюсь, что вы справились. Если у вас возникли вопросы пишите нам сюда или в комментарии, которые расположены чуть ниже.
В 22 ошибка в решении, а конкретно x := sqr(x); // возводим значение х в квадрат.
Здесь необходимо перед циклом сделать b:=x, а вместо x := sqr(x) написать x:=x*b;
Спасибо за нахождение ошибки.
Исправил. Если найдёте ещё, обязательно напишите 🙂
Теперь когда b:=x нужно поменять тип переменной b, потому как нельзя преобразовать тип real к типу integer.
Задание 20. Ошибка
В строке
for i := 1 to N do
переменной i присвоить значение 2
В 20 задании ошибка в вычислениях.
Окончательный результат больше всегда больше на 1 единицу.
Вы задали sum_factorial = 1 изначально из- за того, что 0!=1, когда нужно было sum_factorial=0, ибо в самом задании ни чего не сказано о 0!, там сразу начинается с 1!.
в 24 исправьте
21. строка ( x := x * x;) убрать
22. строка
sum_factorial := sum_factorial + z * (power(x, i) / factorial);
Более простое решение 16 номера:
var a: real;
n: integer;
begin
readln (a, n);
for var t := 1 to n do
print (power (a, t))
end.
Зачем учили нас функциям и процедурам, если сами их особо не используете?)
Аналогично 17 задача:
var a, res: real;
n: integer;
begin
res := 0;
readln (a, n);
for var t := 0 to n do
res := res + (power (a, t));
write (res)
end.
решите: выведите все целые числа от 0 до 18