Вопрос задан 18.07.2026 в 17:44. Предмет Информатика. Спрашивает Носур Даня.

Помогите пожалуйста!!!нужно написать программы на паскале!

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.

pascal
program 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.

pascal
program 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

и прибавить его к общей сумме.

pascal
program 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 / полученное_значение.

pascal
program 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

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос