 
Помогите пожалуйста Заранее спасибо)Определите, сколько символов * выведет эта процедура при
вызове F(280):procedure F( n: integer );beginwrite('*');if n >= 1 then beginwrite('*');F(n-1);F(n div 3);write('*');end;end; 0
        0
         0
        0
    Ответы на вопрос
 
        Ответ:
5674
Объяснение:
.................
 0
                    0
                     0
                    0
                 
            Давайте разберемся, сколько символов "*" будет выведено при вызове процедуры F(280).
Процедура F(n) работает следующим образом:
- Она всегда выводит символ "*" в начале.
- Затем проверяет условие n >= 1. Если оно истинно, она выполняет следующие действия: a. Выводит символ "" ещё раз. b. Вызывает процедуру F(n-1). c. Вызывает процедуру F(n div 3). d. Выводит символ "" ещё раз.
Поскольку при каждом вызове процедуры F(n-1) и F(n div 3) также выводятся символы "", и процедура вызывается рекурсивно, общее количество символов "" будет зависеть от структуры вызовов.
Давайте представим, как будут вызываться процедуры для F(280):
- F(280)- Выводит "*"
- Вызывает F(279)- Выводит "*"
- Вызывает F(93)- Выводит "*"
- Вызывает F(31)- Выводит "*"
- Вызывает F(10)- Выводит "*"
- Вызывает F(3)- Выводит "*"
- Вызывает F(1)- Выводит "*"
 
- Вызывает F(0)
- Выводит "*"
 
- Вызывает F(3)- Выводит "*"
- Вызывает F(1)- Выводит "*"
 
- Вызывает F(0)
- Выводит "*"
 
- Выводит "*"
 
- Вызывает F(10)- Выводит "*"
- Вызывает F(3)- Выводит "*"
- Вызывает F(1)- Выводит "*"
 
- Вызывает F(0)
- Выводит "*"
 
- Вызывает F(3)- Выводит "*"
- Вызывает F(1)- Выводит "*"
 
- Вызывает F(0)
- Выводит "*"
 
- Выводит "*"
 
- Выводит "*"
 
- Вызывает F(31)- Выводит "*"
- ...
 
 
- Выводит "*"
 
- Вызывает F(93)- Выводит "*"
- ...
 
 
Процесс будет продолжаться до тех пор, пока n не станет равным 0 или меньше 0. Каждый раз, когда процедура вызывает себя с аргументом n-1 или n div 3, она также выводит символ "*".
Теперь давайте посчитаем, сколько всего символов "" будет выведено. Каждый вызов процедуры добавляет 3 символа "" (два перед вызовами F и один после них), кроме вызовов, где n <= 0, где будет выведен только один символ "*".
В данном случае, при вызове F(280) будет выведено:
3 * (количество вызовов F(280) и всех его рекурсивных вызовов, где n >= 1) + 1 * (количество вызовов F(280) и всех его рекурсивных вызовов, где n <= 0)
Теперь давайте посчитаем количество вызовов F(280) и его рекурсивных вызовов:
280 + 279 + 93 + 92 + 31 + 30 + ... + 1 + 0
Это арифметическая прогрессия с разностью 1. Мы можем вычислить сумму этой прогрессии:
Сумма = (количество элементов / 2) * (первый элемент + последний элемент)
Сумма = (280 / 2) * (1 + 0) = 140 * 1 = 140
Теперь мы можем вычислить количество символов "*":
3 * 140 + 1 * 140 = 420 + 140 = 560
Таким образом, при вызове процедуры F(280) будет выведено 560 символов "*".
 0
                    0
                     0
                    0
                Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
- 
			Математика 
- 
			Литература 
- 
			Алгебра 
- 
			Русский язык 
- 
			Геометрия 
- 
			Английский язык 
- 
			Химия 
- 
			Физика 
- 
			Биология 
- 
			Другие предметы 
- 
			История 
- 
			Обществознание 
- 
			Окружающий мир 
- 
			География 
- 
			Українська мова 
- 
			Информатика 
- 
			Українська література 
- 
			Қазақ тiлi 
- 
			Экономика 
- 
			Музыка 
- 
			Право 
- 
			Беларуская мова 
- 
			Французский язык 
- 
			Немецкий язык 
- 
			МХК 
- 
			ОБЖ 
- 
			Психология 
- 
			Физкультура и спорт 
- 
			Астрономия 
- 
			Кыргыз тили 
- 
			Оʻzbek tili 
 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			