Оператор альтернативного выбора
Еще одним способом организации разветвлений является оператор 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 можно по формуле modulo(x,k). Следовательно, при построении алгоритма необходимо использовать шесть условных операторов.
Решение задачи станет значительно проще, если при написании программы воспользоваться оператором select.
D=input('D=');
//Вычисление остатка отделения 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
Массив – это совокупность однородных элементов, имеющих одно имя. Одномерный массив – это вектор . Двумерный массив – это матрица
размерности 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-языке.
Ввод-вывод массивов и матриц
Ввод массивов и матриц может быть организован как в режиме диалога:
clc
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];
Вычисление суммы и произведения элементов массива (матрицы)
Рассмотрим алгоритм нахождения суммы, который заключается в следующем: вначале сумма равна 0 (s=0), затем к s добавляем первый элемент массива и результат записываем опять в переменную s, далее к переменной s добавляем второй элемент массива и результат записываем в s и далее аналогично добавляем к s остальные элементы массива. При нахождении суммы элементов матрицы последовательно суммируем элементы всех строк.
Алгоритм нахождения произведения следующий: на первом начальное значение произведения равно 1 (p=1), затем последовательно умножаем p на очередной элемент, и результат записываем в p и т.д.
Программа вычисления суммы элементов массива
//Записываем в переменную s число 0.
s=0;
//Перебираем все элементы массива
for i=1:length(x)
//накопление суммы
s=s+x(i);
end
Программа вычисления произведения элементов массива
p=1;
for i=1:length(x)
p=p*x(i);
end
Программа вычисления суммы элементов матрицы
s=0;
//Вычисляем количество строк n и столбцов m матрицы a.
[n,m]=size(a);
for i=1:n
for j=1:m
s=s+a(i,j);
end
end
disp(s);
Программа вычисления произведения элементов матрицы
//Начальное значение произведение (p) равно 1.
p=1;
//Вычисляем количество строк N и столбцов M матрицы a.
[N,M]=size(a);
//Перебираем все строки матрицы.
for i=1:N
//Перебираем все столбцы матрицы.
for j=1:M
Умножаем значение p на текущий элемент матрицы.
p=p*a(i,j);
end
end
Поиск максимального (минимального) элемента массива (матрицы)
Алгоритм решения задачи поиска максимума и его номера в массиве следующий. Пусть в переменной с именем Max хранится значение максимального элемента массива, а в переменной с именем Nmax - его номер. Предположим, что первый элемент массива является максимальным и запишем его в переменную Max, а в Nmax - его номер (1). Затем все элементы, начиная со второго, сравниваем в цикле с максимальным. Если текущий элемент массива оказывается больше максимального, то записываем его в переменную Max, а в переменную Nmax - текущее значение индекса i. Фрагмент программы поиска максимума:
Реализация алгоритма поиска максимума
//Записываем в Max значение первого элемента массива.
Max=a(1);
//Записываем в Nmax номер максимального элемента
//массива, сейчас это число 1.
Nmax=1;
//Перебираем все элементы массива, начиная со второго.
for i=2:N
//Если текущий элемент массива больше Max,
if x(i)>Max
//то текущий элемент массива объявляем максимальным,
Max=x(i);
//а его номер равен i.
Nmax=i;
end;
end;
Алгоритм поиска минимального элемента в массиве будет отличаться от приведенного выше лишь тем, что в операторе if знак поменяется с > на <.
Программа поиска минимального элемента матрицы и его индексов: Nmin - номер строки , min - номер столбца минимального элемента.
Обратите внимание, что при поиске минимального (максимального) элемента матрицы циклы по i и j начинаются с 1. Если написать с двух, то при обработке элементов будет пропущена первая строка или первый столбец при сравнении a(i , j) с min.
Программа поиска минимального элемента матрицы и его индексов
//Записываем в Min a(1,1), в Nmin и Lmin число 1.
Min=a(1,1); Nmin=1; Lmin=1;
for i=1:N
for j=1:M
//Если текущий элемент матрицы меньше Min,
if a(i,j)<Min
//то текущий элемент массива объявляем минимальным,
Min=a(i,j);
//а его индексы равны i и j.
Nmin=i;
Lmin=j;
end;
end;
end;
Другие примеры.
Пример: вычислить количество отрицательных элементов вектора x=(-2, 5, -7, 9, -15).
Решение.
x=[-2, 5, -7, 9, -15];
n=length(x);
k=0;
for i=1:n
if x(i)<0 then
k=k+1;
end
end
t= k
Пример: вычислить произведение положительных элементов матрицы
Решение.
a=[1 3 5 7
9 -2 0 5];
[n, m]=size(a);
s=1;
for i=1:n
for j=1:m
if a(i, j)>0 then
s=s*a(i, j);
end
end
end
s
Структура функций
В пакете есть возможность использовать функции. Функции играют роль подпрограмм. Это позволяет создавать интегрированные в Scilab специализированные программы и использовать библиотеки. Рекомендуемое расширение для файлов подпрограмм sce, а для библиотечных функций sci.
Дата добавления: 2016-01-20; просмотров: 908;