Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Начала прогаммирования в среде MatLab / Начала программирования в среде MatLab.pdf
Скачиваний:
254
Добавлен:
02.05.2014
Размер:
5.66 Mб
Скачать

2.4. Создание Script-файлов

107

 

 

 

if kon==3, flag=3;

end

end

В этом случае Script-файл "ScrFil_yadro" будет повторно выполняться до тех пор, пока на вопрос 'Закончить работу-<3>, продолжить - <Enter>' не будет введен из клавиатуры ответ "3". Если же ответ будет именно таким, цикл закончится и будут выполняться следующие за этим циклом операторы. Естественно, что переменная flag не должна изменять свое значение в Script-файле "ScrFil_yadro".

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

k=1;

while k==1 ScrFile_Yadro

k = menu(' Что делать ? ',' Продолжить роботу ', ' Закончить работу '); end

Тогда, после первого выполнения Script-файла "ScrFil_Yadro" на экране появится окно меню, изображенное на рис. 2.3, и, при нажатии кнопки первой альтернативы значение k останется равным единице, цикл повторится, а при нажатии второй кнопки k станет равным 2, цикл закончится и программа перейдет к окончанию работы.

2.4.4. Организация изменения данных в диалоговом режиме

Повторение действий, содержащихся в ядре "ScrFil_yadro", имеет смысл только в том случае, когда в начале этого ядра обеспечено выполнение действий по изменению некоторых из исходных величин. MatLAB содержит ряд удобных средств, позволяющих осуществлять изменение данных в диалоговом режиме с использованием стандартных меню-окон пользователя.

Организацию диалогового изменения данных рассмотрим на примере некоторых 5 параметров, которые назовем Параметр1, Параметр2, ... , Параметр5. Пусть их обозначения как переменных в программе таковы: х1, х2, ... , х5. Тогда меню выбора параметра для изменения его значения должно содержать 6 альтернатив: 5 из них предназначены для выбора одного из указанных параметров, а последняя должна предоставить возможность выхода из меню, если значение всех параметров установлены.

Поэтому вариант оформления такого меню может быть, например, следующим:

k = menu( ‘ Що змінити ? ', ' Параметр1 ', ' Параметр2 ', ...

‘ Параметр3 ’, ‘ Параметр4 ’, ‘ Параметр5 ’,‘ Ничого не змінювати ’),

что приведет к появлению окна, представленного на рис. 2.4.

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

2.4. Создание Script-файлов

108

 

 

 

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

x1=-1.89;

x2=239.78;

x3=-2.56e-3; x4=7.28e-15;x5=1.023e-32;

k = menu( '

Що змінювати ? ', ...

sprintf (' Параметр1

x1

= %g', x1),...

sprintf (' Параметр2

x2

= %g', x2),...

sprintf (' Параметр3

x3

= %g', x3),...

sprintf (' Параметр4

x4

=

%g', x4),...

sprintf (' Параметр5

x5

=

%g', x5),...

' Нічого не змінювати ')

Результат приведен на рис. 2.5.

Рис. 2.4

Рис. 2.5

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

x = input( [sprintf ('Текущее значение x =%g',x), ‘Новое значение x = ‘]).

Если ввести команды

»x = 3.02e-2;

»x=input( [sprintf('Текущее значение x = %g',x), ' Новое значение x = ']

то в командном окне появится надпись:

Текущее значение x = 0. 0302 Новое значение x =

Выполнение программы приостановится. ПК будет ожидать ввода информации с клавиатуры. Если теперь набрать на клавиатуре "0.073" и нажать клавишу <Enter>, то в командном окне появится запись:

Текущее значение x = 0. 0302 Новое значение x = 0. 073 x = 0. 0730

Чтобы предотвратить повторный вывод на экран введенного значения, необходимо строку с функцией input завершить символом “ ; ”.

2.4. Создание Script-файлов

109

 

 

 

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

if k==1,

x1 = input( [sprintf( 'Текущее значение x1 = %g', x1) ...

' Новое значение x1= ']);

elseif k==2,

x2 = input( [sprintf('Текущее значение x2 = %g', x2) ...

' Новое значение x2= ']);

elseif k==3,

x3 = input( [sprintf('Текущее значение x3 = %g', x3) ...

' Новое значение x3= ']);

elseif k==4

x4 = input( [sprintf('Текущее значение x4 = %g', x4) ...

' Новое значение x4= ']);

elseif k==5

x5 = input( [sprintf('Текущее значение x5 = %g', x5) ...

' Новое значение x5= ']);

end

Чтобы можно было проконтролировать правильность ввода новых значений, обеспечить возможность их корректировки и последовательного изменения всех желаемых параметров, нужно, чтобы после ввода нового значения любого параметра на экране снова возникало то же меню, но уже со скорректированными значениями. При этом конец работы с меню должен наступить только при условии выбора последней альтернативы меню " Нічого не змінювати ", соответствующей значению k, равному 6.

Поэтому предыдущие операторы следует заключить в цикл:

k=1; while k<6

k = menu( ' Що змінювати ? ', ...

sprintf (' Параметр1 x1 = %g', x1),...

sprintf (' Параметр2 x2 = %g', x2),...

sprintf (' Параметр3 x3 = %g', x3),...

sprintf (' Параметр4 x4 = %g', x4),...

sprintf (' Параметр5 x5 = %g', x5), ' Нічого не змінювати '); if k==1,

x1 = input( [sprintf('Текущее значение x1

= %g', x1) ...

 

'

Новое значение x1= ']);

elseif

k==2,

 

 

x2 = input( [sprintf('Текущее значение x2

= %g', x2) ...

 

'

Новое значение x2= ']);

elseif

k==3,

 

 

x3 = input( [sprintf('Текущее значение x3

= %g', x3) ...

 

'

Новое значение x3= ']);

elseif

k==4

 

 

x4 = input( [sprintf('Текущее значение x4

= %g', x4) ...

 

'

Новое значение x4= ']);

elseif

k==5

 

 

x5 = input( [sprintf('Текущее значение x5

= %g', x5) ...

 

'

Новое значение x5= ']);

end end

Так организуется возможность достаточно удобного изменения значений параметров в диалоговом режиме.

2.4. Создание Script-файлов

110

 

 

 

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

2.4.5. Типовая структура и оформление Script-файла

При написании текста программы в виде Script-файла необходимо принимать во внимание следующее.

1.Удобно оформлять весь процесс диалогового изменения параметров в виде отдельного Script-файла, к примеру, с именем "ScrFil_Menu", где под сокращением "ScrFil" понимается имя основного (собирательного) Script-файла.

2.Так как уже в самом начале работы с программой в меню выбора изменяемого параметра, должны сразу выводиться некоторые значения параметров, перед главным циклом программы, обеспечивающим возвращение к началу вычислений, необходимо поместить часть программы, которая задает первоначальные значения всех параметров. Кроме того, в начале работы программы очень удобно вывести на экран краткую информацию о назначении программы, более детальную информацию об исследуемой математической модели с указанием места в ней и содержания всех исходных параметров, а также исходные ("вшитые") значения всех параметров этой модели. Это желательно также оформить в виде отдельного Script-файла, например, с именем "ScrFil_Zastavka".

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

назвав его "ScrFil_Kin".

В целом типовая схема оформления Script-файла отдельной программы может быть представлена в таком виде:

%<Обозначение Script-файла (ScrFil.m)>

% <Текст комментария с описанием назначения программы>