Semenalidery.com

IT Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Программирование алгоритмов разветвляющейся структуры

Программирование алгоритмов разветвленной структуры.

Номер примера указан в соответствии с номером схемы вычислений данной задачи, разработанной в пункте 4.1. Разветвляющиеся вычислительные процессы.

Пример 3. Написать программу вычисления Z = max(A,B,C).

Алгоритм вычисления разобран в п. 4.1, схема вычисления представлена на рис.3. имена переменных в программе выбраны в соответствии со схемой.

Исходные данные А,В,С – переменные действительного типа обычной точности (типа Single). Введем их с помощью оператора ввода INPUT с клавиатуры под управлением списка. Под управлением списка выведем на дисплей и результат, переменную Z.

Результат Z и промежуточную переменную R объявляем переменными типа Single.

Напоминаем ! Что перед использованием переменных их надо обязательно объявить.

Для вычисления промежуточной переменной R и переменной результата Z используем структурный логический оператор IF.

Для читаемости снабдим программу комментариями. Заметим, что количество комментариев определяется автором.

‘ Вычисление Z = max(A,B,C)

DIM A as Single, B as Single, C as Single, Z as Single, R as Single

‘ Ввод исходных данных А,В,C

‘ Вычисление R = max(A,B)

‘ Вычисление Z = max(R,C)

Массивы переменных

Упорядоченная последовательность значений переменных одного типа называется массивом. Массив характеризуется именем, количеством измерений (количеством индексов) и размером. Размер массива – это число его элементов.

Имена массивов определяются по тем же правилам, что и имена простых переменных.

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

Dim x(1 To 10) As Single

Ключевое слово To — разделитель начального и конечного значений индекса. Этот оператор объявил массив X действительных чисел обычной точности состоящий из десяти элементов.

Оператор DIM является выполняемым оператором программы, поэтому его можно располагать в любом месте программы, но обязательно перед использованием массива.

При объявлении можно указать только верхнюю границу, тогда по умолчанию нижняя граница равна 0. Нижняя граница по умолчанию будет установлена равной 1, если в главной секции имеется инструкция Option Base 1. Допустимым значением для Option Base являются только 0 и 1.

В следующей строке программы двумерный массив фиксированного размера описывается как массив типа Integer, имеющий 11 строк и 11 столбцов:

Dim Y(10, 10) As Integer

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

Оператор цикла

Структурный оператор цикла имеет следующую конструкцию

где FOR – для; TO – до; Step – шаг; Next (следующий) — ключевые слова,

i – параметр цикла (простая переменная),

m1, m2 – начальное и конечное значение параметра цикла,

m3 – шаг изменения параметра (может принимать отрицательные значения).

m1, m2, m3 могут быть константами, простыми переменными, переменными с индексами и арифметическими выражениями целого и действительного типа, значения которых должно быть определено до входа в цикл. Они могут принимать положительное и отрицательное значение.

Операторы FOR и NEXT используются только в паре.

Оператор FOR определяет начало цикла, NEXT – конец цикла. Переменная цикла указанная в операторе FOR обязательно должна совпадать с переменной, указанной в операторе NEXT.

Все операторы от FOR до оператора NEXT составляют цикл. Оператор работает следующим образом: сначала параметр цикла i = m1, при каждом последующем выполнении цикла параметр i увеличивается на шаг m3, т. е. i = m1+ m3, i = m1+ 2m3 и т.д., до тех пор, пока i ≤ m2. После этого выполняется выход из цикла к оператору, следующему за оператором NEXT.

Если шаг изменения параметра m3 = 1, то оператор имеет вид

Организация цикла с помощью оператора FOR должна подчиняться определенным правилам. Например:

Параметры m1, m2, m3 не должны изменяться внутри цикла, эти значения определяются до входа в цикл.

Входить в цикл можно только через оператор FOR, иначе параметр цикла не будет определен.

Оператор FOR может входить в последовательность операторов, используемых в структурном IF. В этом случае область действия цикла должна полностью находиться внутри данного блока.

Разрешается использование цикла в цикле. Область действия внутреннего цикла должна полностью находиться в области действия внешнего цикла. Такие циклы называются вложенными. Параметры внешнего и внутреннего циклов разные и изменяются они не одновременно. При этом у каждого цикла должен быть свой оператор NEXT.

Программирование алгоритмов разветвляющейся структуры

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

Каждый подобный путь называется ветвью алгоритма.

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

Читать еще:  Технология модульного программирования

Для программной реализации этого типа алгоритмов в языке программирования Pascal можно использовать три оператора:

1. Условный оператор (оператор условного перехода).

2. Оператор выбора (оператор варианта).

3. Оператор безусловного перехода. Рассмотрим все эти операторы подробнее. Оператор безусловного перехода имеет вид: GOTO

GOTO— зарезервированное слово (перейти на метку) — метка

Метка в Турбо Паскале — это произвольный идентифи­катор, позволяющий именовать некоторый оператор про-

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

Метка располагается непосредственно перед помечае­мым оператором и отделяется от него двоеточием.

Перед тем как использовать метку в программе, она должна быть описана. Описание меток состоит из заре­зервированного слова LABEL (метка), за которым следует список меток:

Label 1оор,1Ы;

Begin

goto lbl; loop: . lbl. goto loop;

End.

Действие оператора GOTOсостоит в передаче управле­ния соответствующему меченному оператору. Правила использования меток:

— метка, на которую ссылается оператор GOTO,должна быть описана в разделе описаний

— метки, описанные в процедуре (функции) локализуют­ся в ней.

Условный оператор. Условный оператор позволяет проверить некоторое условие и в зависимости от резуль­татов проверки выполнить то или иное действие.

Структура условного оператора:

IF THEN ELSE ;

IF, THEN, ELSE— зарезервированные слова (если, то, иначе)

— выражение логического типа

, — операторы языка Турбо Паскаль.

Часть ELSE условного оператора может быть опущена.

Тогда при значении true выражения, стоящего в усло­вии, выполняется , в противном случае этот оператор пропускается.

Пример.

Написать программу расчета функции: [cos 2 *, при 0 0)and(x у

Решение: Program wetw2; Var max,x,y:real; Begin

if x>y then max:=x;

< если х>у max:=x, иначе значение max не меняется>

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

Пример.

х + 3, если х 2 , если 0 х

Решение: Program Gg; Var x,y:real; Begin Write(‘x=’); Readln(x); if x 4 then y:=exp(x-6) else y:=sqr(x); writeln(‘y=’,y:8:2); Readln; End.

Оператор выбора (оператор варианта). Условный оператор при выполнении программы позволяет выбрать одно из двух возможных действий. Если же необходимо выполнить много взаимоисключающих проверок, то удоб­нее воспользоваться оператором выбора (варианта). Общий вид оператора: CASE OF

: ;

Селектор представляет собой выражение скалярного типа (но не вещественного). Выполнение оператора вари­анта начинается с вычисления значения селектора. Затем для исполнения выбирается оператор, одна из меток ко­торого совпадает с полученным значением. После выпол­нения этого оператора (он может быть простым или со­ставным) управление передается на оператор, следующий за оператором варианта. Если же значение селектора не совпало ни с одной из меток, то выполняется оператор, стоящий после служебного слова ELSE.

Вообще говоря, ветвь ELSE может и отсутствовать.

Рассмотрим пример использования оператора варианта. Заметим сразу, что оператор варианта удобно использовать для ввода и вывода значений перечисляемых скалярных типов данных. Например, в следующем фрагменте програм­мы с внешнего носителя вводится порядковый номер объек­та из списка значений перечисляемого типа COLOR (цвет). Оператор CFSE присваивает соответствующее значение пе­ременной CLR. Аналогично осуществляется вывод значе­ний CLR при помощи оператора варианта.

Type color = (red, blue, black);

Write (‘Введите порядковый номер /0-1-2/ => ‘); Readln (x); Case x of

2: clr:=black; else

writeln (‘Неправильный ввод’) 194

2: writeln (‘black’); end; End.

Протокол работы программы: Введите порядковый номер /0-1-2/ => 2 цвет = black

Выводы_____________________________________

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

Каждый подобный путь называется ветвью алгоритма.

Для реализации разветвляющихся алгоритмов на язы­ке программирования Pascal используются операторы:

1. Оператор безусловного перехода — GOTO ;

2. Условный оператор IF THEN ELSE ;

3. Оператор выбора (оператор варианта):
CASE OF

1. Ниже приведены блок-схемы некоторых алгоритмов. Укажите, какая из вышеприведенных блок-схем явля­ется блок-схемой алгоритма ветвящейся структуры?

Уроки 27 — 28
§ 3.4. Программирование разветвляющихся алгоритмов

Ключевые слова:

• условный оператор
• неполный условный оператор
• составной оператор
• вложенные ветвления

3.4.1. Условный оператор

При записи на языке Паскаль разветвляющихся алгоритмов используют условный оператор. Его общий вид:

if then else

Для записи неполных ветвлений используется неполная форма условного оператора:

if then

Слова if — then — else переводятся с английского языка на русский как если — то — иначе, что полностью соответствует записи ветвления на алгоритмическом языке.

Читать еще:  Электрически перепрограммируемые пзу

Перед else знак «;» не ставится.

В качестве условий используются логические выражения:

• простые — записанные с помощью операций отношения;
• сложные — записанные с помощью логических операций.

Пример 1. Запишем на языке Паскаль рассмотренный в п. 2.4.2 (пример 8) алгоритм определения принадлежности точки х отрезку [а, b].

Пример 2. Воспользуемся неполным условным оператором для записи на языке Паскаль рассмотренного в п. 2.4.2 (пример 9) алгоритма присваивания переменной у значения наибольшей из трёх величин а, b и с.

Дополните эту программу так, чтобы её выполнение приводило к присваиванию переменной у значения большей из четырёх величин а, b,с и d.

3.4.2. Составной оператор

В условном операторе и после then, и после else можно использовать только один оператор. Если при некотором условий требуется выполнить определённую последовательность операторов, то их объединяют в один составной оператор.

begin end называется составным оператором.

Пример. Алгоритм решения квадратного уравнения вам хорошо известен. Запишем соответствующую программу на языке Паскаль.

3.4.3. Многообразие способов записи ветвлений

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

if then

if then

else

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

Пример. Воспользуемся вложенным ветвлением для записи на языке Паскаль рассмотренного в п. 2.4.2 (пример 10) алгоритма решения линейного уравнения.

Как правило, для решения одной и той же задачи можно предложить несколько алгоритмов. Убедимся в этом, записав программу решения линейного уравнения, не прибегая к вложенным ветвлениям.

Возможно, второй вариант программы покажется вам более наглядным. Но и у первого варианта есть свои преимущества: в нём делается меньше проверок.

if then else

Используйте вложенные ветвления для записи программы, определяющей принадлежность точки х отрезку [а, b].

if then

САМОЕ ГЛАВНОЕ

При записи на языке Паскаль разветвляющихся алгоритмов используют условный оператор:

if then else

Для записи неполных ветвлений используется неполный условный оператор:

if then

Если при некотором условии требуется выполнить определённую последовательных операторов, то их объединяют в один составной оператор, имеющий вид:

begin end

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

1. Ознакомьтесь с материалами презентации к параграфу, содержащейся в электронном приложении к учебнику. Используйте эти материалы при подготовке ответов на вопросы и выполнении заданий.

2. Как на языке Паскаль записывается полное и неполное ветвление?

3. Является ли условным оператором следующая последовательность символов?

а) if х =у then х:=0; у:=0 else write (z)
в) if x b then с:=1;
if a>b then d:=2;
if a 5 then с: =2

else с:=3

Какое значение имеет переменная а, если в результате выполнения условного оператора переменной с присваивается значение 3?

13. Напишите программу, вычисляющую значение функции:

14. Составьте программу для решения задачи № 21 к § 2.4 (определение дня недели).

15. Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит 8. Напишите программу, которая по введённым координатам двух полей (k, l) и (m, n) определяет, имеют ли эти поля один цвет.

16. Напишите программу, в которой пользователю предлагается дополнить до 100 некоторое целое число а (а — случайное число, меньшее 100). Ответ пользователя проверяется и комментируется.

Программирование алгоритмов разветвляющейся структуры

Цель работы – ознакомление с инструкциями VBA, используемыми для условной передачи управления, – оператором If … Then … Else. Овладение практическими навыками организации циклов в программе с помощью оператора For … Next.

Макрос в Excel – это:

a) Записанная последовательность команд и действий пользователя, сохраненная под уникальным именем, которую может выполнять Excel.

b) Созданный программистом код процедуры-подпрограммы

Последовательность действий для создания и использования макроса (процедуры-подпрограммы).

1. Запустите Excel.

2. Перейдите в окно редактора Visual Basic. Для этого можно воспользоваться командой меню СервисàМакрос или комбинацией клавиш Alt+F11.

3. Выполните команду меню Вставкаà Модуль, затем команду ВставкаàПроцедура.

4. В диалоговом окне введите имя процедуры и выберите тип Процедура (Sub).
Имя должно начинаться с буквы и может содержать буквы, цифры и знаки подчеркивания (пробелы нельзя!).

5. В окне кода между операторами начала и конца процедуры введите текст (код процедуры).

6. Перейдите на рабочий лист Excel комбинацией клавиш Alt+F11 или с помощью панели задач.

Читать еще:  Как запустить безопасный режим

7. Введите в ячейки необходимые исходные данные, а затем выполните команду меню СервисàМакросàМакросы. Выберите имя созданного Вами макроса и нажмите кнопку Выполнить.

Последовательность действий для записи макроса как последовательности действий.

1. «Отрепетируйте» последовательности действий (например, выделите ячейки с данными, выполните команду Очистить, сделайте активной первую ячейку).

2. Выполните команду меню СервисàМакросàНачать запись.

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

4. Проделайте последовательности действий, отрепетированных в п.1.

5. Щелкните на кнопке Остановить запись.

Последовательность действий для создания кнопки и назначения ей макроса

1. Включите панель инструментов Формы.

2. Включите на этой панели инструмент Кнопка и нарисуйте с его помощью кнопку нужного размера.

3. В открывшемся диалоговом окне выберите имя макроса, назначаемого этой кнопке.

6. Измените текст на кнопке на подходящее название, например, Выполнить.

4. Щелкните на созданной кнопке для выполнения макроса.

Пример выполнения работы

Задание:

1) Создать пользовательскую функциюy(x).

2) Создать процедуру табулирования функции y(x) для x, изменяющихся в пределах заданных начального и конечного значения с указанным шагом изменения.

3) С помощью панели инструментов Формы создать на рабочем листе с исходными данными две командные кнопки:

a) Для запуска процедуры заполнения ячеек.

b) Для запуска процедуры очистки ячеек с исходными данными.
Примечание. Вторую и третью процедуры создать, воспользовавшись средствами автоматической записи макросов.

4) Протестировать процедуру для следующих значений исходных данных.

Программирование разветвляющихся алгоритмов

Условная инструкция

Условная инструкция – это инструкция управления реализующая алгоритмическую структуру “ветвление”. Синтаксически условная инструкция (далее – инструкция if ) записывается следующим образом:

Выше описана полная форма условной инструкции if . В неполной форме блок на else отсутствует. Выражение-условие следует после служебного слова if и всегда заключается в круглые скобки.
Выражение-условие – это логическое выражение или выражение скалярного типа. Если выражение принимает значение true или любое ненулевое значение, то будут выполняться инструкции, находящиеся в блоке if . Если выражение принимает значение false или 0 , то будут выполняться инструкции, находящиеся в блоке else . Если в блоке более одной инструкции, то эта группа инструкций называется составной и должна обязательно заключаться в фигурные скобки.
Фигурные скобки в C++ определяют область видимости данных. Те данные, которые определяются внутри фигурных скобок будут недоступными вне этих скобок. Например:
Программа 8.4.1

Такая программа содержит одну ошибку (попытка использования неопределенного объекта) и одно предупреждение (переменная x не используется). Иными словами, переменная x , объявленная в блоке if , не видна вне этого блока.
Для более компактного оформления программного кода мы будем использовать следующий стиль написания инструкции if (стиль Java):

Неполная форма инструкции if

Неполная форма ветвления используется столь же часто, как и полная. Приведем примеры нескольких задач.
Программа 8.4.2 На вход программе подаются 4 числа определить количество положительных чисел в исходном наборе. Если таких чисел нет, то сообщить об этом.

Обсуждение. Если счетчик i не изменит своего значения после прохождения каскада инструкций if , то его значение так и останется нулевым. Результат операции !i – true , если значение i == 0 (логическое отрицание).
Программа 8.4.3 Даны три числа. Определить максимальное из этого набора.

Обсуждение. Предположим, что max – это первое введенное число, тогда сверим с max и остальные два. Если какое-то из двух значений больше max , переприсвоим значение max .

Задачи с использованием полной формы инструкции if

Решим простую задачу. Даны две переменные целого типа. Присвоить переменной с меньшим значением большее. Вывести новые значения переменных.
Программа 8.4.4

Даны два действительных числа a и b . Возвести в третью степень большее из них и в четвертую степень меньшее. Вывести новые значения a и b .
Программа 8.4.5

Многообразие способов записи ветвлений

Поскольку ветвление предполагает максимум два пути решения, то часто приходится вставлять одно ветвление внутрь другого, то есть применять вложенные ветвления (частный случай – это инструкция switch , с которой мы познакомимся позднее).
Глубина вложенности, впринципе, не ограничена, но на практике следует избегать инструкций слишком глубокой вложенности. Это может привести к нечитаемости алгоритма и трудно выявляемым ошибкам. Подумайте как упростить задачу.
Пример задачи. Дана точка A с координатами x и y . Определить, какой координатной четверти принадлежит A .
Программа 8.4.6

Обратите внимание, что при написании кода вложенные инструкции if оформляются с дополнительным отступом.

Программа 8.4.7 Даны коэффициенты a, b и c. Найдите вещественные корни квадратного уравнения, если вещественных корней нет – сообщите об этом.

Ссылка на основную публикацию
Adblock
detector