русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Управляющие структуры


Дата добавления: 2015-07-23; просмотров: 561; Нарушение авторских прав


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

Диалоговый ввод

Приведем простой пример диалоговой программы, которую легко поймут приверженцы доброго старого Бейсика:

% Вычисление длины окружности с диалоговым вводом радиуса

r=0;

while r>=0,

r=input('Введите радиус окружностиr=');

if r>=0 disp(' Длина окружности l='); disp(2*pi*r), end

end

Эта программа служит для многократного вычисления длины окружности по вводимому пользователем значению радиуса г. Обратите внимание на то, что здесь мы впервые показываем пример организации простейшего диалога. Он реализован с помощью команды input: MnputCВведите радиус окружности r='):

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

if r>=0 disp(' Длина окружности l = '); disp(2*pi*r);end

с помощью команды disp при r>=0 выводит надпись «Длина окружности 1=» и вычисленное значение длины окружности. Она представляет собой одну из наиболее простых управляющих структур типа if...end. В данном случае она нужна для остановки вычислений, если вводится отрицательное значение г (прием, который любят начинающие программисты).



Приведенные строки включены в управляющую структуру while...end. Это необходимо для циклического повторения вычислений с вводом значений r. Пока r>=0. цикл повторяется. Но стоит задать r<0, вычисление длины окружности перестает выполняться, а цикл завершается.

Если данная программа записана в виде m-файла circ.m, то работа с ней будет выглядеть следующим образом:

» circ

Введите радиус окружности R=1

Длина окружности l=

6.2832

Введите радиус окружности R=2

Длина окружности l=

12.5664

Введите радиус окружности R=-1

»

Итак, на примере даже простой программы мы видим пользу применения управляющих структур типа if...end и whi1e...end, а также функций диалогового ввода input('String') и вывода disp. Обратите внимание на завершение работы программы при вводе любого отрицательного числа для радиуса окружности.

Функция Input может использоваться и для ввода произвольных строковых выражений. При этом она задается в следующем виде:

input('Комментарий'. V)

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

» S=input('Введите выражение ','s') Введите выражение (Вводим) 2*sin(l)

S =

2*sin(l)

» eval(S)

ans =

1.6829

Обратите внимание на то, что функция eval позволяет вычислить выражение, заданное (полученное от функции input) в символьном виде. Вообще говоря, возможность ввода любого символьного выражения в сочетании с присущими языку программирования MATLAB управляющими структурами открывает путь к созданию диалоговых программ любой сложности [ Нужно проявлять большую осторожность при применении eval и input, так как программы с их с использованием не всегда возможно компилировать. Впрочем, р-коды таких программ можно использовать с сервером run-time. — Примеч. ред. ].

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

Условный оператор if в общем виде записывается следующим образом:

if Условие

Инструкции_1

elself Условие

Инструкции_2

else

Инструкции_3

end

Эта конструкция допускает несколько частных вариантов. В простейшем, типа! f...end: if Условие Инструкции end

Пока Условие возвращает логическое значение 1 (то есть «истина»), выполняются Инструкции, составляющие тело структуры if...end. При этом оператор end указывает на конец перечня инструкций. Инструкции в списке разделяются оператором , (запятая) или ; (точка с запятой). Если Условие не выполняется (дает логическое значение 0, «ложь»), то Инструкции также не выполняются.

Еще одна конструкция

if Условие

Инструкции_1

else

Инструкции_2

end

выполняет Инструкции_1, если выполняется Условие, или Инструкции_2 в противном случае.

Условия записываются в виде:

Выражение_1 Оператор_отношения Выражение_2,

причем в качестве Операторов_отношения используются следующие операторы: ==, <, >, <=, >= или ~=. Все эти операторы представляют собой пары символов без пробелов между ними.

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

Циклы типа for...end

Циклы типа for...end обычно используются для организации вычислений с заданным числом повторяющихся циклов. Конструкция такого цикла имеет следующий вид:

for vаг=Выражение. Инструкция. .... Инструкция end

Выражение чаще всего записывается в виде s:d:e, где s — начальное значение переменной цикла var, d — приращение этой переменной и е — конечное значение управляющей переменной, при достижении которого цикл завершается. Возможна и запись в виде s :е (в этом случае d=l). Список выполняемых в цикле инструкций завершается оператором end.

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

» for 1=1:5 i^2. end;

ans =

ans =

ans =

ans =

ans =

» for x=0:.25:1 Х ^ 2, end:

ans =

ans =

0.0625

ans =

0.2500

ans =

0.5625

ans =

Оператор continue передает управление в следующую итерацию цикла, пропуская операторы, которые записаны за ним, причем во вложенном цикле он передает управление на следующую итерацию основного цикла. Оператор break может использоваться для досрочного прерывания выполнения цикла. Как только он встречается в программе, цикл прерывается. Возможны вложенные циклы, например:

for i=1:3

for j=l:3

A(1.j)=i+j;

end

end

В результате выполнения этого цикла (файл for2.m) формируется матрица А:

» for2

» А

А =

2 3 4

3 4 5

4 5 6

»

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

» А=[1 2 3:4 5 6]

А =

1 2 3

4 5 6

» for var=A; var, end

var =

var =

var=

Циклы типа while...end

Цикл типа while выполняется до тех пор, пока выполняется Условие:

while Условие Инструкции end

Пример применения цикла while уже приводился. Досрочное завершение циклов реализуется с помощью операторов break или continue.

Конструкция переключателя

Для осуществления множественного выбора (или ветвления) используется конструкция с переключателем типа switch:

switch switch_Bыражение

case саsе_Выражение

Список_инструкций

case {саsе_Выражение1, Саsе_выражение2, саsе_ВыражениеЗ....}

Список_инструкций

otherwise. Список_инструкций end

Если выражение после заголовка switch имеет значение одного из выражений са5е_Выражение..., то выполняется блок операторов case, в противном случае — список инструкций после оператора otherwise. При выполнении блока case исполняются те списки инструкций, для которых сазе_Выражение совпадает со switch_Bbipa-жением. Обратите внимание на то, что сазе_Выражение может быть числом, константой, переменной, вектором ячеек или даже строчной переменной. В последнем случае оператор case истинен, если функция strcmp (значение, выражение) возвращает логическое значение «истине».

Поясним применение оператора switch на примере m-файла swl.m:

switch van

case {1,2,3}

dispCПервый квартал')

case {4,5,6}

disp('Второй квартал')

case {7,8,9}

d.isp( 'Третий квартал')

case {10.11,12}

dispC Четвертый квартал')

otherwise

disp('Ошибка в задании')

end

Эта программа в ответ на значения переменной van — номера месяца — вычисляет, к какому кварталу относится заданный месяц, и выводит соответствующее сообщение:

» var=2;

» swl

Первый квартал

» var=4;swl

Второй квартал

» var=7:swl

Третий квартал

» var=12;swl

Четвертый квартал

» var=-l;swl

Ошибка в задании

Конструкция try...catch...end

В MATLAB 6 введена новая конструкция блока вывода ошибок try...catch...end:

try.

Список инструкций

Список инструкций catch.

Список инструкций

...

Список инструкций

end

Эта конструкция выполняет все списки инструкций. Если в каком-то списке до оператора catch появляется ошибка, то выводится сообщение об ошибке, но системная переменная последней ошибки lasterr не меняется. В сообщениях после catch сообщения об ошибке не выводятся.

В следующем примере задано появление ошибки (переменная ааа не определена), после чего выполняется блок try...catch...end:

ааа

??? Undefined function or variable 'ааа'.

try

2+3:

3+4:

2/0: catch

4+5: end:

Warning: Divide by zero.

»lasterr ans = Undefined function or variable 'aaa'.

Обратите внимание, что в конце блока команда lasterr выводит ее начальное значение. А в другом примере ошибка задана в блоке try...catch...end уже после оператора catch:

» try

2+3:

3+4;

4+5: catch

5/0:

end:

» lasterr

ans = Undefined function or variable 'aaa'.

Как нетрудно заметить, на этот раз ошибка в вычислении 5/0 не выводится, а значение lasterr осталось тем, что было изначально.

Создание паузы в вычислениях

Для остановки программы используется оператор pause. Он используется в следующих формах:

· pause — останавливает вычисления до нажатия любой клавиши;

· pause(N) — останавливает вычисления на N секунд;

· pause on — включает режим отработки пауз;

· pause off — выключает режим отработки пауз.

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

for i=1:20;

х =rand(1,40);

у =rand(1,40);

z = sin(x.*y);

tri = delaunay(x.y);

trisurf(tri,x,y,z)

paused);

end

Команда paused) здесь обеспечивает показ 20 рисунков — построений трехмерных поверхностей из треугольных окрашенных областей со случайными параметрами.



<== предыдущая лекция | следующая лекция ==>
Создание Р-кодов | Понятие об объектно-ориентированном программировании


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.208 сек.