Условные выражения и циклы.
В языке системы Maxima заложены основные исполнимые операторы, которые есть в любом языке программирования. Синтаксис условного оператора совпадает с аналогичным оператором языка Паскаль и может быть проиллюстрирован примерами:
sgn: if x>=0 then 1 else -1;
if x>=0 then y:1 else y:-1
Допустима также сокращённая форма оператора
a: if x>0 then 55;
Оператор цикла может задавиться несколькими способами в зависимости от того, известно ли заранее необходимое количество повторений тела цикла. Его синтаксис рассмотрим на примере вычисления факториала числа 5:
1 способ
p:1$
for k:1 thru 5 step 1 do p:p*k$
display(p);
|
2 способ
p:1$
for k:1 while k<=5 step 1 do p:p*k$
display(p);
|
3 способ
p:1$
for k:1 unless k>5 step 1 do p:p*k$
display(p);
|
4 способ
p:1$
for k:1 next k+1 thru 5 do p:p*k$
display(p);
| Если шаг равен 1, то «step 1» можно опустить.
В условных выражениях и циклах вместо простых операторов можно использовать составные, которые в терминах Maxima называются блоками. Обычный блок имеет вид:
block([a,b,c], a:1, b:a+1, c:b*2, c:c*5);
Вначала располагается список локальных переменных блока [a,b,c] (может быть пустым), далее — набор операторов. Значением блока является значение последнего его оператора. Допускается использовать упрощённый вид блока:
(x:1, x:x+5, b:x)
Чтение и запись данных
В пакете Maxima имеются стандартные функции для чтения данных из файла, а также записи или добавления данных в файл.
Чтение данных производится с помощью функций
data : read_list("Путь к файлу");
data : read_nested_list("Путь к файлу");
Функция read_list( )считвает из файла значения, расположенные в одной строке, разделённые пробелом, и помещает их в список data. Функция read_nested_list( ) расценивает содержимое файла как список строк. Каждая строка может содержать несколько данных, разделённых пробелом, которые тоже являются списком. Поэтому переменная data представляет собой список списков, например
(%i1) data : read_nested_list("d:/5555.dat");
(%o1) [[1,1],[2,5],[3,8],[4,3],[5,12],[6,20],[7,9],[8,8],[9,7],[10,5]]
При этом размер списков устанавливается в соответствии с объемом файла. Данные первого столбца файла можно извлечь из перемненной data с помощью команды
(%i2) k : makelist(first(data[i]),i,1,length(data));
(%o2) [1,2,3,4,5,6,7,8,9,10].
Аналогично для второго стобца
(%i3) kw:makelist(second(data[i]),i,1,length(data));
(%o3) [1,5,8,3,12,20,9,8,7,5]
и т.д.
Перед считыванием файл можно найти с помощью команды
file_search("Путь к файлу");
а также вывести на экран
printfile("Путь к файлу");
Для записи данных в файл следует воспользоваться функцией
write_data(Список,"Путь к файлу");
Список выводится в строку. Значения разделяются пробелом.
Для добавления данных к существующему файлу необходимо изменить значение переменной
file_output_append : true;
и использовать для вывода функцию write_data( ).
Чтобы записать в файл значения элементов списка в столбец, можно воспользоваться следующей последовательностью команд
file_output_append:true;
for m:1 thru length(x) do write_data([y[m]],"Путь к файлу");
Здесь с помощью цикла по очереди выводятся в файл значения элементов списка.
Часть III. Лабораторные работы
ЛАБОРАТОРНАЯ РАБОТА № 1
|