Оператор альтернативного выбора

Основы программирования в системе Scilab

В Scilab встроен мощный язык программирования с поддержкой объектов. Работа в Scilab может осуществляться как в режиме командной строки, так и в программном режиме. Для создания программы (программу в Scilab иногда называют сценарием) необходимо:

1. Вызвать команду Editorиз меню.

2. В окне редактора Scipadнабрать текст программы.

3. Сохранить текст программы с помощью команды File /Saveв виде файла с расширением sce, например file.sce.

4. После этого программу можно будет вызвать, набрав в командной строке exec, например exec("file.sce"), или вызвав команду меню File/Exec..., или, находясь в окне Scipad, выполнить команду Execute/Load into Scilab(Ctrl+l).

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

Основные операторы sci-языка

Функции ввода-вывода в Scilab

Для организации простейшего ввода в Scilab можно воспользоваться функциями

x=input('title');

или

x=x_dialog('title', 'stroka');

Функция input выводит в командной строке Scilab подсказку title и ждет пока пользователь введет значение, которое в качестве результата возвращается в переменную х.

-->x=input('title');

title-->4

-->x

x =

4.

Функция x_dialog выводит на экран диалоговое окно с именем title, после чего пользователь может щелкнуть OKи тогда stroka вернется в качестве результата в переменную x, либо ввести новое значение вместо stroka, которое и вернется в качестве результата в переменную x.

Оператор альтернативного выбора - student2.ru

Набрав вместо strokа число 45 и распечатав х, получим:

Оператор альтернативного выбора - student2.ru

-->x

x =

45

Функция input преобразовывает введенное значение к числовому типу данных, а функция x_dialog возвращает строковое значение. Поэтому при использовании функции x_dialog для ввода числовых значений, возвращаемую ею строку следует преобразовать в число с помощью функции evstr. Поэтому можно предложить следующую форму использования функции x_dialog для ввода числовых значений.

x=evstr(x_dialog('title', 'stroka'));

Можно сразу набрать

->x=evstr(x_dialog('title', '46'));

-->x+6

ans =

52.

Для вывода в текстовом режиме можно использовать функцию disp следующей структуры disp(b). Здесь b - имя переменной или заключенный в кавычки текст.

-->disp('Привет')

Привет

-->disp("Привет")

Привет

Конструкция -->a=4;disp(a,"a=") дает

-->

a=

4.

Оператор присваивания

Оператор присваивания имеет следующую структуру

a=b

здесь a – имя переменной или элемента массива, b - значение или выражение. В результате выполнения оператора присваивания переменной a присваивается значение выражения b.

x=5;y=sin(x);

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

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

ifЛогическое_выражение then

Инструкции_1

Else

Инструкции_2

End

Инструкции в списке разделяют оператором,(запятая)или ;(точка с запятой).

Логические выражения

Логические выражения состоят из констант, переменных и функций, соединенных операциями отношения: больше (>), больше или равно (>=), равно (==), не равно (~=) , меньше (<), меньше или равно (<=). Например: x2>y. Логические выражения принимают значения «истина» или «ложь». Например, при x=2 и y=8 значение выражения x2>y является ложью. Несколько логических выражений могут быть объединены в одно операторами & и |. Например: x.^2>y | y>7. Если несколько логических выражений соединены оператором &, то значение такого выражения является истиной, если каждое логическое выражение, входящее в него, является истиной. Если несколько логических выражений соединены оператором |, то значение такого выражения является истиной, если хотя бы одно логическое выражение, входящее в него, является истиной.

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

ifЛогическое_выражение_1 then

Инструкции_1

elseifЛогическое_выражение_2 then

Инструкции_2

Else

Инструкции_3

End

В этом случае оператор if работает так: если логическое выражение_1истинно, то выполняются инструкции_1, а затем инструкции, стоящие после оператора end. Если логическое выражение_2 является истиной, то выполняются инструкции 2, а затем инструкции, стоящие после оператора end. Если ни одно из логических выражений не является истиной, то выполняются инструкции, стоящие после слова else.

Частные случаи:

1) if Логическое_выражение then Инструкции , end

Примеры:

-->if x>5 then y=8, end

-->if x>5 then y=8;t=6; end

2) if Логическое_выражение then Инструкции_1, else Инструкции_2, end

Пример:

-->if x>5 then y=8,t=6; else y=x^2 ,end

3) if Логическое_выражение then

Инструкции

End

Замечание: слово thenв составе условного оператора ifне является обязательным.

Пример. Вычислить функцию y при x=0.397, если

Оператор альтернативного выбора - student2.ru

Решение:

x=0.397;

if x.^2<=25*cos(x.^3) then

y=sin(3*x)

else

y=(2*x – tan(x))./sqrt(x.^2+2)

end

Набрав этот файл в редакторе Scipad и запустив его на выполнение командой Execute/Load into Scilab, получим:

y =

0.9287402

В качестве примера программирования разветвляющегося процесса рассмотрим решение квадратного уравнения Оператор альтернативного выбора - student2.ru .

Входными данными этой задачи являются коэффициенты квадратного уравнения a, b, c. Выходными данными являются корни уравнения x1 , x2или сообщение о том, что действительных корней нет.

Алгоритм состоит из следующих этапов:

1. Ввод коэффициентов уравнения a, b и с.

2. Проверка, является ли уравнение квадратным (а≠0).

3. Вычисление дискриминанта уравнения d.

4. Если d=0, то выводится сообщение: уравнение имеет два равных корня и печатается значение корня.

5. Если d>0, определяются x1 и x2

6. Если d<0, то выводится сообщение «Корней нет».

Программа решения квадратного уравнения

clc

a=input('a=');

b=input('b=');

c=input('c=');

if a==0 then

disp("Уравнение не является квадратным")

else

// Вычисляем дискриминант.

d=b*b-4*a*c;

// Если дискриминант отрицателен,

if d<0

// то вывод сообщения,

disp(' Действительных корней нет');

elseif d==0

//иначе-вычисление корней соответствующего

// квадратного уравнения.

disp("уравнение имеет два равных корня") ;x=-b/(2*a)

else

x1=(-b+sqrt(d))/2/a

x2=(-b-sqrt(d))/2/a

end

end

a=-->1

b=-->2

c=-->-5

x1 =

1.4494897

x2 =

- 3.4494897

Найти все корни квадратного уравнения можно и без оператора if, воспользовавшись тем, что в Scilab определены операции над комплексными числами.

clc

a=input('a=');

b=input('b=');

c=input('c=');

d=b*b-4*a*c;

x1=(-b+sqrt(d))/2/a;

x2=(-b-sqrt(d))/2/a;

disp(x1,x2);

a=-->1

b=-->2

c=-->3

- 1. - 1.4142136i

- 1. + 1.4142136i

Комплексные корни квадратного уравнения

Оператор альтернативного выбора

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

select параметр

case значение1 then операторы1

case значение2 then операторы2

else операторы

end

Оператор select работает следующим образом: если значение параметра равно значению1, то выполняются операторы1, иначе если параметр равен значению2, то выполняются операторы2; в противном случае, если значение параметра совпадает со значением3, то выполняются операторы3 и т.д. Если значение параметра не совпадает ни с одним из значений в группах case, то выполняются операторы, которые идут после служебного слова else.

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

Рассмотрим использование оператора select на примере решения следующей задачи.

ЗАДАЧА.

Вывести на печать название дня недели, соответствующее заданному числу D, при условии, что в месяце 31 день и 1-е число - понедельник.

Для решения задачи воспользуемся условием, что 1-е число - понедельник. Если в результате остаток от деления заданного числа D на семь будет равен единице, то это понедельник (первое, восьмое, пятнадцатое, двадцать второе и двадцать девятое числа), двойке - вторник, тройке - среда и так далее. Вычислить остаток от деления числа х на k можно по формуле x-int(x/k)*x. Следовательно, при построении алгоритма необходимо использовать семь условных операторов.

Решение задачи станет значительно проще, если при написании программы воспользоваться оператором select.

D=input('Enter a number from 1 to 31');

//Вычисление остатка отделения D на 7, сравнение его с числами

// от 0 до 6.

select modulo(D,7)

case 1 then disp('Monday');

case 2 then disp('Tuesday');

case 3 then disp('Wednesday');

case 4 then disp('Thursday');

case 5 then disp('Friday');

case 6 then disp('Saturday');

else

disp('Sunday');

end

Рассмотрим операторы цикла в Scilab. В sci-языке есть два вида цикла - оператор цикла с предусловием while и оператор for.

Оператор while

Оператор цикла while имеет вид

while условие

операторы

end

Здесь условие - логическое выражение; операторы будут выполняться циклически, пока логическое условие истинно.

Оператор цикла while обладает значительной гибкостью, но не слишком удобен для организации «строгих» циклов, которые должны быть выполнены заданное число раз.

Оператор цикла for используется именно в этих случаях.

Оператор for

Оператор цикла for имеет вид

for x=xn:hx:xk

операторы

end

Здесь x - имя скалярной переменной - параметра цикла, хn - начальное значение параметра цикла, xk - конечное значение параметра цикла , hx - шаг цикла . Если шаг цикла равен 1, то hx можно опустить, и в этом случае оператор for будет таким.

for x=xn:xk

операторы

end

Выполнение цикла начинается с присвоения параметру начального значения (x=xn). Затем следует проверка, не превосходит ли параметр конечное значение (x>xk). Если x>xk, то цикл считается завершенным, и управление передается следующему за телом цикла оператору. Если же x≤xk , то выполняются операторы в цикле (тело цикла). Далее параметр цикла увеличивает свое значение на hx (x=x+hx). После чего снова производится проверка значения параметра цикла, и алгоритм повторяется.

Пример. Протабулировать функцию y=xln2x.Х принимает значения от 1 до с шагом 0,2.

clc

for x=1:.2:2

y=x*log(x)^2;

printf("%1.1f %2.2f",x,y)

disp('')

end

1.0 0.00

1.2 0.04

1.4 0.16

1.6 0.35

1.8 0.62

2.0 0.96

Циклы while и for могут быть прерваны с помощью оператора break.
Пример.
-->a=0; for i=1:5:100, a=a+1; if i>10 then break, end;end
-->a
a =
3.

Обработка массивов и матриц в Scilab

Массив – это совокупность однородных элементов, имеющих одно имя. Одномерный массив – это вектор Оператор альтернативного выбора - student2.ru . Двумерный массив – это матрица

Оператор альтернативного выбора - student2.ru

размерности n*m.

В системе Scilab принято элементы массивов записывать следующим образом: a(1), a(n), b(3, 7), b(n, m).

Для того, чтобы определить количество элементов в одномерном массиве x, используют функцию length вида

n=length(x)

Для того, чтобы определить количество строк (n) и столбцов (m) матрицы b, можно воспользоваться функцией size:

[n, m]=size(b)

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

Рассмотрим основные алгоритмы обработки массивов и матриц и их реализацию на sci-языке.

Ввод-вывод массивов и матриц

Ввод массивов и матриц может быть организован как в режиме диалога:

N=input('N=');

disp("Ввод вектора Х");

for i=1:N

x(i)=input('X=');

end

disp(x);

//Ввод матрицы

N=input('N=');

M=input('M=');

disp(' Ввод матрицы ');

for i=1:N

for j=1:M

a(i,j)=input('');

end

end

disp(a);

N=-->3

Ввод вектора Х

X=-->4

X=-->-3

X=-->46

4.

- 3.

46.

N=-->2

M=-->3

Ввод матрицы

-->-1

-->6

-->0

-->34

-->3

-->65

- 1. 6. 0.

34. 3. 65.

так и непосредственно в программе:

x=[4 -3 46];

a=[-1, 6, 0;34, 3,65];

Наши рекомендации