Можно ли использовать процедуры если в программе нет повторяющихся действий

Содержание

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

Подпрограммы полезны в первую очередь потому, что готовые алгоритмы можно использовать много раз при решении более сложных задач, не «изобретая велосипед». Из подпрограмм составляются библиотеки, некоторые из них входят в состав языков программирования. Мы просто используем их, не задумываясь о том, как они работают. Это экономит время программистов, освобождая их от повторного выполнения работы, которая уже была кем-то сделана раньше.

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

Решение задач в процедурном программировании с использованием функций и процедур

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

Определите тип подпрограммы (процедура или функция), которая:

а) рисует окружность на экране;
б) определяет площадь круга;
в) вычисляет значение синуса угла;
г) изменяет режим работы программы;
д) возводит число х в степень у;
е) включает двигатель автомобиля;
ж) проверяет оставшееся количество бензина в баке;
з) измеряет высоту полёта самолёта.

Простая процедура

Предположим, что в нескольких местах программы требуется выводить на экран строку из 10 знаков ‘ -‘ (например, для того чтобы отделить два блока результатов друг от друга). Это можно сделать, например, так:

Конечно, можно вставить этот оператор вывода везде, где нужно вывести такую строку. Но тут есть две сложности. Во-первых, строка из минусов хранится в памяти много раз. Во-вторых, если мы задумаем как-то изменить эту строку (например, заменить знак ‘-‘ на ‘=’), нужно будет искать эти операторы вывода по всей программе.

Для таких случаев в языках программирования предусмотрены процедуры — вспомогательные алгоритмы, которые выполняют некоторые действия:

Процедуры

Многоточием в текстах программ будем обозначать некоторые операторы.

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

Читайте также:
Лучшая бесплатная программа для восстановления удаленных файлов

В языке Паскаль процедура начинается с ключевого слова procedure, тело процедуры начинается с begin и заканчивается ключевым словом end с точкой с запятой. Процедура расположена выше основной программы, до момента её первого использования.

Фактически мы ввели в язык программирования новую команду printLine, которая была расшифрована прямо в тексте программы. Для того чтобы процедура заработала, в основной программе (или в другой процедуре) необходимо её вызвать по имени.

Процедуры и функции в 1С 8.3: чем они отличаются и как их использовать

Что произойдёт, если вызвать процедуру, но не включить её текст в программу? Проверьте этот вариант с помощью компьютера.

Что произойдёт, если включить текст процедуры в программу, но не вызывать её? Проверьте этот вариант с помощью компьютера.

Использование процедур сокращает код, если какие-то операции выполняются несколько раз в разных местах программы. Когда процедура написана и тщательно протестирована, можно передать её другим программистам для использования в этом же или другом проекте.

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

Процедура с параметром

Теперь представьте себе, что нужно выводить строки из знаков «минус» разной длины (5, 10 и др). Конечно, можно сделать несколько процедур, например:

Процедуры

Но так делать не нужно. Дело в том, что обе процедуры выводят цепочки знаков «минус» (т. е. выполняют одни и те же действия!), только разной длины. Поэтому хочется использовать всего одну процедуру, передавая ей нужную длину цепочки.

Заметим, что процедуру printLinelO можно переписать с помощью цикла:

Процедуры

Эта процедура делает то же самое, что и первый вариант, — выводит строку из 10 минусов и переходит на новую строку.

Видим, что процедура стала длиннее и усложнилась, появился цикл. Внутри процедуры объявлена переменная i. Эта переменная принадлежит процедуре, она называется локальной. Другие процедуры и основная программа не могут обращаться к «чужой» локальной переменной.

Где вы уже встречались со словом «локальный» в курсе информатики? Вспомните, от какого иностранного слова оно произошло.

Локальная переменная — это переменная, объявленная внутри подпрограммы. Другие подпрограммы и основная программа не могут к ней обращаться.

Локальная переменная существует только тогда, когда работает процедура. Как только работа процедуры закончена, все локальные переменные удаляются из памяти.

Чем будет отличаться процедура, рисующая 5 знаков «минус», от последнего варианта процедуры printLine10?

Если мы хотим, чтобы число повторений цикла можно было менять, в процедуре вместо числа нужно использовать переменную. И значение этой переменной нужно как-то передать процедуре. Оформляется это так:

Процедуры

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

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

Наша процедура printLine имеет один параметр, обозначенный именем n, — длину строки из знаков «минус».

Читайте также:
Как работать в программе cutting 3

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

Аргумент — это значение параметра, которое передаётся процедуре.

При вызове процедуры аргумент передаётся в скобках:

Что будет выведено на экран при выполнении фрагмента программы?

Для тестирования процедуры printLine Иван хочет написать небольшую программу, в которой длина линии вводится с клавиатуры. Где нужно поместить оператор ввода — в процедуре или в основной программе?

Несколько параметров

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

Процедуры

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

Запишите в тетради полный текст процедуры printLine.

Что будет выведено на экран при выполнении фрагмента программы?

Процедуры в других языках программирования
Рекурсия

Процедура printLine с одним параметром на языках Python и С может быть записана так:

Процедуры

В языке Python объявление процедуры начинается ключевым словом def. Тип параметра указывать не нужно, он определяется автоматически. Тело процедуры записывается с отступом вправо, так же, как тело цикла и условного оператора. Вывести п одинаковых символов можно без цикла, построив сразу нужную строку с помощью «умножения» символа ‘-‘ на n.

Программа на языке С очень похожа на программу на Паскале. Признак процедуры — слово void в заголовке (вместо procedure на Паскале). Тело процедуры заключено в фигурные скобки. Стандартная функция putchar выводит на экран один символ.

Рекурсия

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

Процедуры

Вспомним алгоритм перевода числа в двоичную систему: нужно делить число на 2, каждый раз выписывая остаток от деления, пока не получится 0. На алгоритмическом языке алгоритм можно записать так:

нц пока <> 0

кц

Проверьте вручную работу этого алгоритма для числа 6. Удалось ли вам получить правильный ответ? Почему?

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

Есть разные способы решения этой задачи, которые сводятся к тому, чтобы запоминать остатки от деления (например, в символьной строке) и затем, когда результат будет полностью получен, вывести его на экран. Однако можно применить ещё один красивый подход. Идея такова: чтобы вывести двоичную запись числа п, нужно сначала вывести двоичную запись числа div(n,2), а затем — его последнюю двоичную цифру, которая вычисляется как mod(n,2).

Что же получилось? Прочитайте ещё раз фразу, выделенную курсивом в предыдущем абзаце. Выходит, что для того, чтобы решить задачу для исходного числа, нужно предварительно решить ту же самую задачу для меньшего числа div(n,2).

Такой алгоритм очень просто программируется:

Процедуры

У нас получилось, что процедура printBin вызывает сама себя! Такой приём в программировании называется рекурсией, а процедура — рекурсивной.

Читайте также:
Пояснительная записка к программе пример

Рекурсивная процедура — это процедура, которая вызывает сама себя.

Проверьте с помощью отладчика 1) в пошаговом режиме, что произойдёт при вызове этой процедуры.

1) Для входа в процедуру в пошаговом режиме отладчика используйте клавишу F7.

Приведённая процедура printBin ошибочна, вернее, она не доделана. Представим себе, что мы передали процедуре число 2. Сначала она вызывает сама себя для значения div(2,2) = 1, затем — для значения div(l,2) = 0, и потом ещё бесконечно много раз для нуля. Такие вызовы никогда не закончатся, и программа зациклится. Чтобы этого не произошло, нужно выйти из процедуры (и закончить эти вложенные вызовы), когда значение параметра станет равно нулю:

Процедуры

В алгоритмическом языке для выхода из процедуры используется оператор выход, а в языке Паскаль — оператор exit.

Убедимся, что процедура остановится при любом заданном натуральном числе. Действительно, при каждом вложенном вызове значение параметра уменьшается (делится нацело на 2). В результате когда-нибудь оно обязательно станет равно нулю, и вложенные вызовы закончатся.

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

Выводы

• Процедура — это вспомогательный алгоритм (подпрограмма), решающий самостоятельную задачу, который может использоваться несколько раз.
• Локальная переменная — это переменная, объявленная внутри подпрограммы. Другие подпрограммы и основная программа не могут к ней обращаться.
• Параметр — это величина, от которой зависит работа процедуры. Параметр имеет имя, с ним можно работать так же, как с локальной переменной.
• Аргумент — это значение параметра, которое передаётся процедуре.
• Рекурсивная процедура — это процедура, которая вызывает сама себя.

Нарисуйте в тетради интеллект-карту этого параграфа.

Вопросы и задания

1. Зачем нужны процедуры?
2. Достаточно ли включить процедуру в текст программы, чтобы она «сработала»?
3. Какие возможности появляются, когда в процедуру добавляются параметры?
4. Как определить, что переменная — локальная?
5. Выполните по указанию учителя задания в рабочей тетради.

Подготовьте сообщение

а) «Рекурсия в природе и искусстве»
б) «Ханойские башни»

Источник: murnik.ru

Можно ли использовать процедуры если в программе нет повторяющихся действий

keshatuktuk

July 2022 1 14 Report

1.Какие задачи легче решаются с использованием вспомогательных алгоритмов?

2.Можно ли использовать процедуры, если в программе нет повторяющихся действий? Зачем это может быть нужно?​

Answers https://scholar.tips/dam-50-ballov1kakie-zadachi-legche-reshayutsya-s-ispolzovaniem-vspomogatelnyh-alg.html» target=»_blank»]scholar.tips[/mask_link]

Можно ли использовать процедуры если в программе нет повторяющихся действий

keshatuktuk

1.Какие задачи легче решаются с использованием вспомогательных алгоритмов?

2.Можно ли использовать процедуры, если в программе нет повторяющихся действий? Зачем это может быть нужно?​

5 (5 оценок)

7limonchiK7

7limonchiK7 2 года назад
Светило науки — 370 ответов — 0 раз оказано помощи

Задачи,в которых многократно повторяется один и тот же кусок кода.

Можно. Некоторые функции и процедуры могут быть полезны программистам для быстрого решения задачи. Например: функция max, возращает максимальное из 2 чисел, а функция min минимальное.

Если тебе помог мой ответ, сделай его лучшим 🙂

Источник: vashurok.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru