Пиши Дома Нужные Работы

Обратная связь

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

 

Изменить последовательность выполнения операторов можно с помощью операторов ветвления.

Одним из них является условный оператор IfThen. Он имеет два форматов записи.

1. Однострочный формат

Ifусловие ThenОператор1 [ Else Оператор2]

(в квадратные скобки взята необязательная часть). Если условие истинно, Оператор1 выполняется, в противном случае он пропускается и выполняется Оператор2, если он указан.

2. Блочный формат.

 

Ifусловие Then

Операторы1

[ Else

Операторы2]

End If

 

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

В качестве примера рассмотрим задачу вычисления корней квадратного трехчлена с коэффициентами A, B, C. Как известно, вещественные корни существуют при условии, что дискриминант больше либо равен нулю: D = B2 – 4AC ³ 0. Ниже приведен фрагмент программы, в котором дискриминант сравнивается с нулем и если он оказывается меньше нуля, выводится сообщение «Вещественных корней нет», противном случае подсчитываются значения корней.

 
 

 


D = B^2 – 4*A*C If D < 0 Then Print “ Вещественных корней нет ” Else X1 = (–B + sqr (D)) / (2*A) X2 = (–B – sqr (D)) / (2*A) Print “ Вещественных корней нет ” End If  
D := B2 – 4AC

 
 

 


да нет

D < 0

 

 
 


“Решений Вычисление

нет” корней X1, X2

       
 
   
 


Вывод X1, X2

 

 
 

 


Конец

 

Рис. 10. Фрагмент программы вычисления корней квадратного уравнения и его блок-схема

Еще одним оператором ветвления является Select Case.

Select CaseВыражение

CaseСписок_значений1

Операторы1



CaseСписок_значений2

Операторы2

……….

[Case ElseСписок_значений3

Операторы3 ]

End Select

 

Здесь в качестве параметра Выражение может быть как имя переменной, так и арифметическое выражение, а параметры Список_значений1, Список_значений2 и т.д. могут быть как одиночными числовыми значениями, так и списками – несколькими числами, разделенными запятыми.

Если значение выражения не совпадет ни с одним из значений, указанных в списках, будет выполнены операторы, указанные в разделе Case Else (если таковой присутствует, если же его нет, то следующим будет выполнен оператор, следующий за оператором Select.

В качестве списка значений можно указывать не только одно из возможных значений, но и несколько значений, разделенных запятыми. Можно также указать интервал значений (например, 4 To 6), или задать его с помощью ключевого слова IS и одного из знаков отношения < , <=, >, >=, < >, = (например, IS >= 10).

В качестве примера рассмотрим следующую задачу. Пусть задана кусочно-непрерывная функция f (x) следующим образом:

y

       
 
   
 


–1 для x < –1, 1

f (x) = 0 для –1 £ x < 1,

2 для x ³ 1. –2 –1 0 1 2 x

 

–1

 

 

Требуется написать программу, вычисляющую значение этой функции для любого заданного значения x. Воспользуемся для этой цели оператором ветвления Select Case:

 

Select CaseX

Case IS < –1

Y = –1

Case IS < 1

Y = 2

Case IS >= 1

Y = 1

End Select

 

Предположим, что X = –2. Тогда истинными являются условия IS <= –1 иIS < 1. Однако проверка условия IS < –1 идет первой и Y получит значение –1. Хотя второе условие также истинно для текущего значения X, оператор Y = 0 выполняться не будет, поскольку выбор уже будет сделан.

Программирование циклических процессов

 

Для многократного выполнения одного или нескольких операторов применяются операторы цикла. Имеется несколько типов оператора цикла.

 

1. Оператор цикла типа пересчета:

For Счетчик =Начальное_значение To Конечное_значение [ Step Шаг ]

Операторы

Next [Счетчик]

Здесь Счетчик – параметр цикла, переменная целого или вещественного типа, Начальное_значение и Конечное_значение – числа, задающие границы интервала изменения параметра цикла, Шаг – шаг изменения параметра цикла, если он не указан, то по умолчанию он принимается равным 1. Операторы – один или несколько операторов, которые повторяются до тех пор, пока Счетчик не достигнет конечного значения.

Пример.

Задан целочисленный массив A из N элементов. Нужно подсчитать количество четных элементов в этом массиве.

Решение. Пусть S – переменная для результата, которой перед началом цикла присвоено нулевое значение. Поскольку длина массива известна, используем цикл типа пересчета.

    S = 0 For i = 1 to N If A(i) mod 2 = 0 then S = S + 1 Next i Print S    

S : = 0

 
 

 


i := 1,2, …, N

 
 

 


нет

A(i) mod 2 = 0

 

да

 

S : = S +1

 
 

 


Вывод S

 
 

 


Рис.11. Пример цикла типа пересчета. Справа – фрагмент программы.

2. Оператор повторений с предусловиемDo While … Loop:

 

Do WhileУсловие

Операторы

Loop

Указанные Операторы повторяются до тех пор, пока Условие остается истинным.

Пример.Найти сумму числового ряда 1 – x1 + x2 x3 + … (0 < x < 1) с точностью e = 0,001. Из курса математики известно, что погрешность суммы знакочередующегося ряда не превышает абсолютной величины первого отброшенного члена.

Поскольку в данном случае количество слагаемых заранее неизвестно, используем оператор цикла типа Do While. Пусть S – переменная для результата, EPS – заданная точность, А – очередное слагаемое

На рис.12 показана блок-схема алгоритма и фрагмент программы.

  A = X S = 1 Do While abs(A) > EPS S = S – A A = – A * X Loop Print S  

S := 1

A := X

 

ôAô> EPS

 

да

S := S – A

A := –A*X

       
 
 
   

 

 


Вывод S

 
 

 


Рис.12. Пример цикла типа Do While с предусловием

Справа – фрагмент программы.

Комментарий. После первого шага величина S будет равна 1–X, а значение A, которое вначале было равно X изменится на – X2. После второго шага S и A окажутся равными соответственно 1–X+X2 и X3. Таким образом в S будет накапливаться сумма числового ряда до тех пор, пока очередное слагаемое по модулю остается больше заданного значения EPS. Если при первой проверке условие не будет выполнено, то цикл выполнятся не будет, следующим будет выполнен оператор вывода.

 

3. Оператор повторений с постусловиемDo … Loop While:

Do

Операторы

Loop WhileУсловие

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

Для предыдущего примера вариант решения показан на рис.13.

S := 1

    A = X S = 1 Do S = S – A A = – A * X Loop While abs(A) > EPS Print S    
A := X


S := S – A

A := –A*X

 
 


 

ôAô> EPS

да

 

Вывод S

 
 


Рис.13. Пример цикла типа Do While с постусловием.

Справа – фрагмент программы.

 

4. Оператор повторений с предусловиемDo Until … Loop:

Do UntilУсловие

Операторы

Loop

Операторы повторяются до тех пор, пока Условие не станет истинным.

Пример.В текстовом файле A.TXT содержится список фамилий. Нужно прочитать этот файл и вывести список фамилий на экранную форму. Поскольку неизвестно, сколько фамилий в списке, используем для чтения их из файла оператор цикла типа Do Until.

Open “A.TXT” For Input As #1 Do Until EOF(1) Input #1, S Print S Loop Close #1   Рис.14. Пример цикла типа Do Until с предусловием. Справа – фрагмент программы.  

S := 1

A := X

 

конец файла?

да

нет

чтение S

 
 

 


вывод S

 
 


Комментарий. Здесь используется функция EOF, аргументом которой является номер канала, присвоенный открытому для чтения файлу (в данном случае 1). Эта функция возвращает логическое значение True («истина») в случае, когда из открытого файла будут считаны все записи. До тех пор, пока все записи не считаны, значение функции EOF равно False («ложь»). В приведенном фрагменте записи будут считываться в переменную S до тех пор, пока не будет достигнут конец файла.

 

5. Оператор повторений с постусловиемDo … Loop Until:

Do

Операторы

Loop UntilУсловие

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

На рис.15 показан фрагмент программы, в котором решается задача предыдущего примера, но с использованием оператора повторений с постусловием .

 

Open “A.TXT” For Input As #1 Do Input #1, S Print S Loop Until EOF(1) Close #1    

S := 1

A := X


чтение S

 
 

 


вывод S

 
 


конец файла?

нет

да

 

Рис.15. Пример цикла типа Do Until с постусловием.

Справа – фрагмент программы.

Комментарий. Фрагменты программ, представленные на рис.14 и 15 выполняют одни и те же действия и практически равносильны, за одним исключением. Если файл A.TXT окажется пустым, то есть в нем не будет записей, при выполнении второй программы будет выведено сообщение об ошибке, поскольку команда чтения из файла выполняется до того, как проверяется достигнут ли конец файла. В программе на рис.14 такая ошибка исключается, поскольку проверка значения функции EOF происходит в начале цикла.

 

 






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2024 pdnr.ru Все права принадлежат авторам размещенных материалов.