Помогите пожалуйста!!!нужно написать программы на паскале!
1) дано целое число m>1. получить наибольшее целое k, при котором 4^k(четыре в степени k)<m.
2)дано натуральное число n, получить наименьшее число вида 2^r(два в степени r), превосходящее n.
3)дано натуральное число n. вычислить 1*2+2*3*4+...+n*(n+1)*...*2n (*-знак умножения)
4)Вычислить:
1
_____________
1
1 + _________
1
3 + _________
1
5 + ________
......
1
101 + ___
103
(______________ - дробь)
помогите чем сможете, пожалуйста!
Ответы на вопрос
Разберу каждое задание через циклы — так программы будут понятными и без степеней в готовом виде. Для четвёртого пункта предполагаю, что записана цепная дробь с нечётными знаменателями от 1 до 103.
Ниже отдельные программы для каждого задания. Во всех случаях используются циклы, чтобы не вычислять степени или длинные произведения «вручную».
1. Найти наибольшее k, при котором 4^k < m
Переменная p хранит текущую степень четвёрки: сначала p = 1, то есть 4^0. Пока следующая степень ещё меньше m, умножаем p на 4 и увеличиваем k.
pascalprogram Task1;
var
m, k: Integer;
p: Int64;
begin
readln(m);
k := 0;
p := 1; { p = 4^k }
while p <= (m - 1) div 4 do
begin
p := p * 4;
k := k + 1;
end;
writeln('k = ', k);
end.
Например, при m = 70:
-
4^0 = 1 < 70 -
4^1 = 4 < 70 -
4^2 = 16 < 70 -
4^3 = 64 < 70 -
4^4 = 256 > 70
Ответ: k = 3.
2. Найти наименьшее число вида 2^r, превосходящее n
Здесь нужно получить первую степень двойки, которая строго больше n.
pascalprogram Task2;
var
n, r: Integer;
p: Int64;
begin
readln(n);
p := 1;
r := 0;
while p <= n do
begin
p := p * 2;
r := r + 1;
end;
writeln('2^', r, ' = ', p);
end.
Например, при n = 20 программа получит:
-
1, 2, 4, 8, 16, 32
Так как 32 — первая степень двойки, большая 20, ответ будет 32.
3. Вычислить сумму
1*2 + 2*3*4 + ... + n*(n+1)*...*2n
Для каждого числа i нужно отдельно вычислить произведение:
i * (i + 1) * ... * 2i
и прибавить его к общей сумме.
pascalprogram Task3;
var
n, i, j: Integer;
s, proiz: Int64;
begin
readln(n);
s := 0;
for i := 1 to n do
begin
proiz := 1;
for j := i to 2 * i do
proiz := proiz * j;
s := s + proiz;
end;
writeln('Сумма = ', s);
end.
Например, при n = 3 вычисляется:
1*2 + 2*3*4 + 3*4*5*6
= 2 + 24 + 360
= 386
4. Вычислить цепную дробь
Выражение понимается так:
1
--------------------------------
1 + 1
------------------
3 + 1
----------
5 + ...
Последняя часть имеет вид:
101 + 1/103
Такие дроби удобнее вычислять с конца. Сначала берём 103, затем получаем:
101 + 1/103
99 + 1/(101 + 1/103)
...
1 + 1/(3 + ...)
И в самом конце вычисляем 1 / полученное_значение.
pascalprogram Task4;
var
k: Integer;
x, result: Extended;
begin
x := 103.0;
k := 101;
while k >= 1 do
begin
x := k + 1 / x;
k := k - 2;
end;
result := 1 / x;
writeln('Результат = ', result:0:15);
end.
Результат будет примерно таким:
0.761594155955765
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili

