Нейросеть

ГДЗ: Параграф § 9 / Информатика 11 класс

Страницы: 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131
Глава: Глава 2. Алгоритмы и элементы программирования
Параграф: § 9 - Структурное программирование
Учебник: Информатика 11 класс -
Автор: Босова Людмила Леонидовна
Год: 2025
Издание: 7-е издание, стереотипное

Вопросы для самопроверки:

1. Какова основная идея структурного программирования? Какие преимущества дает применение этой технологии?

Ответ:

Суть структурного программирования заключается в представлении всей программы как иерархической структуры, состоящей из логически завершенных блоков. Преимущества этой технологии включают: повышение производительности труда программистов, сокращение числа ошибок, а также упрощение отладки, модификации и сопровождения программного обеспечения.

2. Что мы называем вспомогательным алгоритмом?

Ответ:

Вспомогательный алгоритм — это автономный алгоритм, который предназначен для использования в качестве цельного фрагмента внутри другого, основного алгоритма.

3. Опишите принципы метода последовательного уточнения алгоритма (метода «сверху вниз»). Как называется этот метод по-другому?

Ответ:

Метод последовательного уточнения, также известный как метод «сверху вниз», предполагает разработку программы пошагово. Сначала создается краткий набросок основной программы, где логически целые фрагменты заменяются временными подпрограммами — «заглушками». Затем эти заглушки последовательно заменяются реальными, работающими подпрограммами. Проверка правильности работы программы осуществляется на каждом уровне иерархии.

4. Перечислите ключевые этапы разработки программы при использовании метода «сверху вниз».

Ответ:

Ключевые этапы включают:

  • Написание краткого основного текста программы.
  • Вместо логических фрагментов вставляются заглушки (называемые подпрограммами, которые будут выполнять эти фрагменты).
  • Последовательное замещение заглушек работающими подпрограммами (процедурами и функциями).
  • Проверка, что общая структура программы верна, а подпрограммы работают правильно относительно подпрограмм более низкого уровня.
  • Разработка завершается, когда не остается ни одной заглушки.

5. Какой алгоритм называют рекурсивным? Каково назначение граничного условия в рекурсивном алгоритме?

Ответ:

Рекурсивным называют алгоритм, который в процессе своего выполнения вызывает сам себя, либо прямо, либо косвенно. Граничное условие (ограничение) имеет решающее значение, поскольку оно определяет момент, когда рекурсивные вызовы должны прекратиться, предотвращая бесконечную рекурсию и обеспечивая выход из алгоритма.

Практические задания:

Для прямого параллелепипеда, у которого длины ребер равны $a, b$ и $c$, необходимо найти периметр треугольника, образованного диагоналями трех его граней. Какой вид вспомогательного алгоритма наиболее целесообразно использовать для решения этой задачи?

Определение периметра и выбор подпрограммы

Для решения задачи необходимо найти длины трех диагоналей граней, которые образуют стороны треугольника. Грани параллелепипеда имеют размеры \((a \times b)\), \((b \times c)\) и \((a \times c)\).

  • Длина диагонали первой грани (через ребра \(a\) и \(b\)): \( d_1 = \sqrt{a^2 + b^2} \)
  • Длина диагонали второй грани (через ребра \(b\) и \(c\)): \( d_2 = \sqrt{b^2 + c^2} \)
  • Длина диагонали третьей грани (через ребра \(a\) и \(c\)): \( d_3 = \sqrt{a^2 + c^2} \)

Периметр треугольника \(P\) равен сумме этих длин: \( P = d_1 + d_2 + d_3 \).

Для вычисления длины диагонали, которая является единственным результатом, целесообразно использовать функцию. Функция будет принимать на вход две длины ребер и возвращать одно значение — длину диагонали, по формуле \( d(x, y) = \sqrt{x^2 + y^2} \).

Вычислите значение функции $F(10)$ для натурального числа $n$, заданной следующими рекурсивными соотношениями: \( F(n) = 2 \cdot n \) при \( n \le 0 \); \( F(n) = F(n-2) + F(\lfloor n \div 2 \rfloor) + 1 \) при \( n > 0 \).

Вычисление F(10)

Используем рекурсивное соотношение \( F(n) = F(n-2) + F(\lfloor n \div 2 \rfloor) + 1 \) при \( n > 0 \):

  • \( F(1) = F(-1) + F(\lfloor 1 \div 2 \rfloor) + 1 = F(-1) + F(0) + 1 \). По базовому условию \( F(n) = 2 \cdot n \) при \( n \le 0 \): \( F(-1) = 2 \cdot (-1) = -2 \); \( F(0) = 2 \cdot 0 = 0 \). Тогда \( F(1) = -2 + 0 + 1 = -1 \).
  • \( F(2) = F(0) + F(1) + 1 = 0 + (-1) + 1 = 0 \).
  • \( F(3) = F(1) + F(\lfloor 3 \div 2 \rfloor) + 1 = F(1) + F(1) + 1 = (-1) + (-1) + 1 = -1 \).
  • \( F(4) = F(2) + F(2) + 1 = 0 + 0 + 1 = 1 \).
  • \( F(5) = F(3) + F(\lfloor 5 \div 2 \rfloor) + 1 = F(3) + F(2) + 1 = (-1) + 0 + 1 = 0 \).
  • \( F(6) = F(4) + F(3) + 1 = 1 + (-1) + 1 = 1 \).
  • \( F(7) = F(5) + F(\lfloor 7 \div 2 \rfloor) + 1 = F(5) + F(3) + 1 = 0 + (-1) + 1 = 0 \).
  • \( F(8) = F(6) + F(4) + 1 = 1 + 1 + 1 = 3 \).
  • \( F(9) = F(7) + F(\lfloor 9 \div 2 \rfloor) + 1 = F(7) + F(4) + 1 = 0 + 1 + 1 = 2 \).
  • \( F(10) = F(8) + F(5) + 1 = 3 + 0 + 1 = 4 \).

Итоговое значение \( F(10) = 4 \).

Исполнитель «Калькулятор» имеет две команды: 1) прибавить 1, 2) умножить на 2. Определите:

Решение задачи о программах для исполнителя «Калькулятор»

  • 1. Сколько разных программ преобразуют число 1 в число 20?

    Обозначим \(K(n)\) как количество программ, преобразующих 1 в \(n\). Задачу удобнее решать «обратным ходом», преобразуя \(n\) в 1.

    • Базовое условие: \(K(1) = 1\).
    • Рекуррентное соотношение (для \(n > 1\)): \(K(n) = K(n-1)\) (отмена команды +1) \(\begin{cases} + K(\lfloor n/2 \rfloor), & \text{если } n \text{ четно (отмена команды } \times 2) \ + 0, & \text{если } n \text{ нечетно} \end{cases}\)

    Правильный рекурсивный подход: \(K(n) = K(n-1) + K(n/2)\) (если \(n\) четно) или \(K(n) = K(n-1)\) (если \(n\) нечетно).

    Проведем расчет (обратным ходом):

    \(n\)\(K(n)\) (путь от 1 до \(n\))Расчет
    11База
    21 + K(1)\(K(1) + K(2/2) = 1+1 = 2\)
    3K(2)\(K(3-1) = 2\)
    4K(3) + K(2)\(2+2 = 4\)
    5K(4)\(4\)
    6K(5) + K(3)\(4+2 = 6\)
    7K(6)\(6\)
    8K(7) + K(4)\(6+4 = 10\)
    9K(8)\(10\)
    10K(9) + K(5)\(10+4 = 14\)
    11K(10)\(14\)
    12K(11) + K(6)\(14+6 = 20\)
    13K(12)\(20\)
    14K(13) + K(7)\(20+6 = 26\)
    15K(14)\(26\)
    16K(15) + K(8)\(26+10 = 36\)
    17K(16)\(36\)
    18K(17) + K(9)\(36+10 = 46\)
    19K(18)\(46\)
    20K(19) + K(10)\(46+14 = 60\)

    Всего программ, преобразующих 1 в 20: 60.

  • 2. Сколько среди этих программ, в которых в качестве промежуточного результата обязательно получается число 15?

    Требуется найти количество программ, идущих из \(1 \to 15\) и умножить его на количество программ, идущих из \(15 \to 20\).

    • Количество программ \(1 \to 15\): \(K(15) = 26\).
    • Количество программ \(15 \to 20\): Используем \(K(n)\) для пути \(15 \to n\), где \(K(15)=1\).
      \(K(16) = K(15)+0 = 1\) (только +1)
      \(K(17) = K(16) = 1\)
      \(K(18) = K(17)+0 = 1\)
      \(K(19) = K(18) = 1\)
      \(K(20) = K(19) + K(\lfloor 20/2 \rfloor) = K(19) + K(10)\). Но \(K(10)\) не может быть использовано, так как \(10 \ne 15 \cdot 2\). Команда \(\times 2\) применима только, если \(15 \times 2 = 30 > 20\). То есть, из 15 в 20 можно попасть только командой +1.
      \(K(20) = K(19) = 1\).
      Программ \(15 \to 20\): \(K(15)=1, K(16)=1, K(17)=1, K(18)=1, K(19)=1, K(20)=1\). Итого 1 программа (15 \(\to\) 16 \(\to\) 17 \(\to\) 18 \(\to\) 19 \(\to\) 20).

    Общее количество программ: \(26 \cdot 1 = 26\).

  • 3. Сколько среди этих программ, в которых в качестве промежуточного результата никогда не получается число 12?

    Общее количество программ \(1 \to 20\) — \(K(20) = 60\). Найдем количество программ, которые проходят через 12 (\(1 \to 12 \to 20\)), и вычтем их из общего числа.

    • Количество программ \(1 \to 12\): \(K(12) = 20\).
    • Количество программ \(12 \to 20\): \(K_{12 \to 20}\).
      \(K(12)=1\).
      \(K(13) = K(12) = 1\)
      \(K(14) = K(13) = 1\)
      \(K(15) = K(14) = 1\)
      \(K(16) = K(15) + K(\lfloor 16/2 \rfloor) = K(15) + K(8)\). Но \(8 \ne 12 \cdot 2\). Из 12 в 16: \(12 \xrightarrow{+1} 13 \xrightarrow{+1} 14 \xrightarrow{+1} 15 \xrightarrow{+1} 16\). 1 программа.
      \(K(17) = 1, \dots, K(20) = 1\).
      Всего программ \(12 \to 20\): \(1 \cdot 1 \cdot 1 \cdot 1 \cdot 1 \cdot 1 \cdot 1 \cdot 1 = 1\). (Только команда \(+1\) 8 раз)

    Количество программ, проходящих через 12: \(20 \cdot 1 = 20\).

    Количество программ, не проходящих через 12: \(60 - 20 = 40\).

Попробуйте найти рекурсивные синтаксические структуры: 1) в поэме А. Блока «Двенадцать»; 2) в стихотворении М. Лермонтова «Сон»; 3) в романе М. Булгакова «Мастер и Маргарита»; 4) в фольклоре.

Примеры рекурсивных синтаксических структур

Рекурсия в синтаксисе (вложение однотипных структур) и композиции (повторение или самоподобие элементов) может быть обнаружена в следующих примерах:

  • 1. А. Блок «Двенадцать»: Рекурсивный элемент может проявляться в повторяющихся образах или фразах, которые возвращаются и видоизменяются, создавая структуру, где часть повторяет целое.
  • 2. М. Лермонтов «Сон»: Рекурсия композиции может быть найдена в идее сна внутри сна или во вложенных повествовательных рамках, где один рассказчик упоминает другого.
  • 3. М. Булгаков «Мастер и Маргарита»: Классический пример рекурсивной структуры — это роман в романе, то есть вложенный сюжет (история Пилата), который является частью основного сюжета и повторяет его темы.
  • 4. Фольклор: Типичные примеры — это цепочечные (кумулятивные) сказки (например, «Теремок», «Репка», «Дом, который построил Джек»), где каждый новый элемент добавляется к предыдущей, постоянно повторяющейся структуре. Пример: «Это дом, который построил Джек. А это пшеница, которая в темном чулане хранится в доме, который построил Джек».

Найдите информацию о следующих геометрических фракталах: снежинка Коха, T-квадрат, H-фрактал, кривая Леви, драконова ломаная.

Геометрические Фракталы

Фракталы — это структуры, которые обладают свойством самоподобия (рекурсивной природой), то есть их части похожи на целое. Фракталы являются примерами бесконечных рекурсивных структур.

  • Снежинка Коха: Получается из равностороннего треугольника путем бесконечного итеративного добавления новых меньших треугольников на среднюю треть каждой стороны. Имеет бесконечную длину периметра при конечной площади.
  • T-квадрат и H-фрактал: Фракталы, построенные на основе квадратов или отрезков, где на каждой итерации к концам или углам добавляются уменьшенные копии исходной фигуры (буквы T или H), перпендикулярные им.
  • Кривая Леви (C-кривая): Кривая, построенная из отрезка, который на каждой итерации заменяется двумя меньшими отрезками, соединенными под прямым углом, образуя подобие буквы 'С'.
  • Драконова ломаная (Дракон Хартера-Хейтвея): Получается путем последовательного сгибания ленты. Ее можно построить, взяв отрезок и заменяя его двумя меньшими отрезками, расположенными под углом 90° к предыдущему.

Напишите программу для вычисления значения функции $F(n)$, описанной в Примере 4. Вычислите значение $F(7)$.

Программа для вычисления F(n)

Функция задана соотношениями: \( F(n) = 1 \) при \( n \le 2 \); \( F(n) = F(n-1) + 3 \cdot F(n-2) \) при \( n > 2 \).

program CalculateF; var   n: integer;   function F(n: integer): integer;   begin     if n <= 2 then       F := 1     else       F := F(n-1) + 3 * F(n-2);   end; begin   n := 7;   writeln('F(7) = ', F(n)); end.

Значение \(F(7)\) вычисляется следующим образом:

  • \( F(1) = 1 \)
  • \( F(2) = 1 \)
  • \( F(3) = F(2) + 3 \cdot F(1) = 1 + 3 \cdot 1 = 4 \)
  • \( F(4) = F(3) + 3 \cdot F(2) = 4 + 3 \cdot 1 = 7 \)
  • \( F(5) = F(4) + 3 \cdot F(3) = 7 + 3 \cdot 4 = 19 \)
  • \( F(6) = F(5) + 3 \cdot F(4) = 19 + 3 \cdot 7 = 40 \)
  • \( F(7) = F(6) + 3 \cdot F(5) = 40 + 3 \cdot 19 = 97 \)

Результат: \( F(7) = 97 \).

Напишите программу для вычисления биномиального коэффициента $C_n^k = \frac{n!}{k! \cdot (n-k)!}$ с использованием подпрограммы.

Программа для вычисления биномиального коэффициента

Для решения задачи удобно использовать две функции: рекурсивную функцию для вычисления факториала \(N!\) и основную функцию для вычисления \(C_n^k\).

program BinomialCoefficient;   function Factorial(n: integer): longint;   begin     if n = 0 then       Factorial := 1     else       Factorial := n * Factorial(n - 1);   end;   function Combinations(n, k: integer): longint;   begin     if (k < 0) or (k > n) then       Combinations := 0     else       Combinations := Factorial(n) div (Factorial(k) * Factorial(n - k));   end; var   n_val, k_val: integer;   result: longint; begin   n_val := 5;   k_val := 2;   result := Combinations(n_val, k_val);   writeln('C(', n_val, ', ', k_val, ') = ', result); // C(5, 2) = 10 end.

Используется рекурсивная функция Factorial для реализации факториала.

Определите, что будет выведено в результате работы следующей программы на языке Pascal:

Анализ работы рекурсивной программы

Программа содержит процедуру rek(n), которая рекурсивно вызывает саму себя с аргументами \(n-4\) и \(n \div 3\). Базовое условие: \(n < 0\). Вызов начинается с rek(9).

  • rek(9): \(9 \ge 0\). Вызывает:
    • rek(5): \(5 \ge 0\). Вызывает:
      • rek(1): \(1 \ge 0\). Вызывает:
        • rek(-3): \(-3 < 0\). Выход.
        • rek(0): \(0 \ge 0\). Вызывает:
          • rek(-4): \(-4 < 0\). Выход.
          • rek(0): \(0 \ge 0\). Вызывает:
            • rek(-4): Выход.
            • rek(0): Вызывает рекурсию бесконечно.
        • Выводит: 1
        • rek(0): \(0 \ge 0\). Вызывает:
          • rek(-4): Выход.
          • rek(0): Вызывает рекурсию бесконечно.
      • Выводит: 5
      • rek(2): \(2 \ge 0\). Вызывает:
        • rek(-2): Выход.
        • rek(0): Вызывает рекурсию бесконечно.
    • Выводит: 9

    В данной программе процедура rek(0) вызывает rek(0), создавая бесконечную рекурсию, поскольку условие \(n \le 0\) не срабатывает, а \(0 \div 3 = 0\). Программа либо вызовет ошибку переполнения стека, либо зациклится. Если бы программа работала только для положительных \(n\), результатом была бы последовательность выводимых чисел, но из-за rek(0) происходит зацикливание.

Задали создать проект?

Создай с помощью ИИ за 5 минут

До 90% уникальность
Готовый файл Word
15-30 страниц
Список источников по ГОСТ
Оформление по ГОСТ
Таблицы и схемы

Готовые проекты

Список готовых проектов к текущему параграфу.

Уведомление об авторском праве и цитировании

ВНИМАНИЕ: Представленные фрагменты из учебных материалов используются исключительно в научно-образовательных целях в объеме, оправданном поставленной целью.

Данное использование осуществляется в рамках, установленных законодательством об авторском праве (в частности, нормами о свободном использовании произведения для образовательных целей).

В соответствии с законодательством, автор и источник заимствования указаны для каждого используемого фрагмента.