Введение в ос linux



Pdf просмотр
страница5/6
Дата15.11.2016
Размер0.54 Mb.
Просмотров1791
Скачиваний0
1   2   3   4   5   6
Ввод с клавиатуры.
Переменные можно считывать со стандартного ввода. Для этого используется команда read echo -n Enter number of elements:
read x
Управляющие структуры shell
Оболочка bash поддерживает операторы выбора if … then … else и case, а также операторы организации циклов for, while, until, благодаря чему она превращается в мощный язык программирования.
Операторы if и test (или [ ])
Конструкция условного оператора в слегка упрощенном виде выглядит так: if list1 then list2 else list3 fi где list1, list2 и list3 — это последовательности команд, разделенные запятыми и оканчивающиеся точкой с запятой или символом новой строки. Кроме того, эти последовательности могут быть заключены в фигурные скобки: {list}.
Оператор if проверяет значение, возвращаемое командами из list1. Если в этом списке несколько команд, то проверяется значение, возвращаемое последней командой списка. Если
это значение равно 0, то будут выполняться команды из list2; если это значение не нулевое, будут выполнены команды из list3. Значение, возвращаемой таким составным оператором if, совпадает со значением, выдаваемым последней командой выполняемой последовательности.
Полный формат команды if имеет вид: if list then list [ elif list then list ] ... [ else list ] fi
(здесь квадратные скобки означают только необязательность присутствия в операторе того, что в них содержится).
В качестве выражения, которое стоит сразу после if или elif, часто используется команда test, которая может обозначаться также квадратными скобками [ ]. Команда test выполняет вычисление некоторого выражения и возвращает значение 0, если выражение истинно, и 1 в противном случае. Выражение передается программе test как аргумент.
Вместо того, чтобы писать test expression, можно заключить выражение в квадратные скобки:
[ expression ].
Заметьте, что test и [ — это два имени одной и той же программы, а не какое-то магическое преобразование, выполняемое оболочкой bash (только синтаксис [ требует, чтобы была поставлена закрывающая скобка). Заметьте также, что вместо test в конструкции if может быть использована любая программа.
В заключение приведем пример использования оператора if: if [ -e textmode2.htm ] ; then ls textmode* else pwd fi
Об операторе test (или […]) надо бы поговорить особо.
Оператор test и условные выражения
Условные выражения, используемые в операторе test, строятся на основе проверки файловых атрибутов, сравнения строк и обычных арифметических сравнений числовых значений. Сложные выражения строятся из следующих унарных или бинарных операций
(для каждого типа проверок существуют свои примитивы):
Проверка файловых атрибутов

-a file
Верно, если файл с именем file существует.

-b file
Верно, если file существует и является специальным файлом блочного устройства.

-c file
Верно, если file существует и является специальным файлом символьного устройства.

-d file
Верно, если file существует и является каталогом.


-e file
Верно, если файл с именем file существует.

-f file
Верно, если файл с именем file существует и является обычным файлом.

-g file
Верно, если файл с именем file существует и для него установлен бит смены группы.

-h file или -L file
Верно, если файл с именем file существует и является символической ссылкой.

-k file
Верно, если файл с именем file существует и для него установлен "sticky'' bit.

-p file
Верно, если файл с именем file существует и является именованным каналом (FIFO).

-r file
Верно, если файл с именем file существует и для него установлено право на чтение

-s file
Верно, если файл с именем file существует и его размер больше нуля.

-t fd
Верно, если дескриптор файла fd открыт и указывает на терминал.

-u file
Верно, если файл с именем file существует и для него установлен бит смены пользователя.

-w file
Верно, если файл с именем file существует и для него установлено право на запись.

-x file
Верно, если файл с именем file существует и является исполняемым.

-O file
Верно, если файл с именем file существует и его владельцем является пользователь, на которого указывает эффективный идентификатор пользователя.

-G file
Верно, если файл с именем file существует и принадлежит группе, определяемой эффективным идентификатором группы.

-S file
Верно, если файл с именем file существует и является сокетом.

-N file
Верно, если файл с именем file существует и изменялся с тех пор, как был последний раз прочитан.

file1 –nt file2
Верно, если файл file1 имеет более позднее время модификации, чем file2.

file1 –ot file2

Верно, если файл file1 старше, чем file2.

file1 –ef file2
Верно, если файлы file1 и file2 имеют одинаковые номера устройств и индексных дескрипторов (inode).
Оценка строк

-z string
Верно, если длина строки равна нулю.

-n string
Верно, если длина строки не равна нулю.

string1 == string2
Верно, если строки совпадают. Вместо == может использоваться =.

string1 !== string2
Верно, если строки не совпадают.

string1 < string2
Верно, если строка string1 лексикографически предшествует строке string2 (для текущей локали).

string1 > string2
Верно, если строка string1 лексикографически стоит после строки string2 (для текущей локали).
Арифметические сравнения

arg1 OP arg2
Здесь OP — это одна из операций арифметического сравнения: -eq (равно), -ne (не равно), -lt (меньше чем), -le (меньше или равно), -gt (больше), -ge (больше или равно).
В качестве аргументов могут использоваться положительные или отрицательные целые.
Из этих элементарных условных выражений можно строить сколь угодно сложные с помощью обычных логических операций ОТРИЦАНИЯ, И и ИЛИ:

!(expression)
Булевский оператор отрицания.

expression1 -a expression2
Булевский оператор AND (И). Верен, если верны оба выражения.

expression1 -o expression2
Булевский оператор OR (ИЛИ). Верен, если верно любое из двух выражений.
Такие же условные выражения используются и в операторах while и until, которые мы рассмотрим чуть ниже.
Оператор case
Формат оператора case таков: case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
Команда case вначале производит раскрытие слова word, и пытается сопоставить результат с каждым из образцов pattern поочередно. После нахождения первого совпадения
дальнейшие проверки не производятся, выполняется список команд, стоящий после того образца, с которым обнаружено совпадение. Значение, возвращаемое оператором, равно 0, если совпадений с образцами не обнаружено. В противном случае возвращается значение, выдаваемое последней командой из соответствующего списка.
Каждая строка с условием должна завершаться правой (закрывающей) круглой скобкой ).Каждый блок команд, отрабатывающих по заданному условию, должен завершаться двумя символами точка-с-запятой ;;.
#!/bin/bash echo -n " Какую оценку ты получил на экзамене?: "
read z case $z in
5) echo Отлично!!!!
;;
4) echo Хорошо !
;;
3) echo удовлетворительно !
;;
2) echo Неудовлетворительно!
;;
*) echo !
;;
esac
Оператор select
Оператор select позволяет организовать интерактивное взаимодействие с пользователем.
Он имеет следующий формат: select name [ in word; ] do list ; done
Вначале из шаблона word формируется список слов, соответствующих шаблону. Этот набор слов выводится в стандартный поток ошибок, причем каждое слово сопровождается порядковым номером. Если шаблон word пропущен, таким же образом выводятся позиционные параметры. После этого выдается стандартное приглашение bash, и оболочка ожидает ввода строки на стандартном вводе. Если введенная строка содержит число, соответствующее одному из отображенных слов, то переменной name присваивается значение, равное этому слову. Если введена пустая строка, то номера и соответствующие слова выводятся заново. Если введено любое другое значение, переменной name присваивается нулевое значение. Введенная пользователем строка запоминается в переменой
REPLY. Список команд list выполняется с выбранным значением переменной name.
#!/bin/bash echo "Какую ОС Вы предпочитаете?" select var in "Linux" "Windows" "Free BSD" "Other"; do break done echo "Вы бы выбрали $var"
Если сохранить этот текст в файле, сделать файл исполняемым и запустить, на экран
будет выдан следующий запрос:
Какую ОС Вы предпочитаете?
1) Linux
2) Windows
3) Free BSD
4) Other
#?
Нажмите любую из 4 предложенных цифр (1,2,3,4). Если вы, например, введете 1, то увидите собщение:
“Вы бы выбрали Linux”
Оператор for
Оператор for работает немного не так, как в обычных языках программирования. Вместо того, чтобы организовывать увеличение или уменьшение на единицу значения некоторой переменной при каждом проходе цикла, он при каждом проходе цикла присваивает переменной очередное значение из заданного списка слов. В целом конструкция выглядит примерно так: for name in words do list done.
Правила построения списков команд (list) такие же, как и в операторе if.
Пример. Следующий скрипт создает файлы foo_1, foo_2 и foo_3: for a in 1 2 3 ; do touch foo_$a done
В общем случае оператор for имеет формат: for name [ in word; ] do list ; done
Вначале производится раскрытие слова word в соответствии с правилами раскрытия выражений, приведенными выше. Затем переменной name поочередно присваиваются полученные значения, и каждый раз выполняется список команд list. Если "in word" пропущено, то список команд list выполняется один раз для каждого позиционного параметра, который задан.
В Linux имеется программа seq, которая воспринимает в качестве аргументов два числа и выдает последовательность всех чисел, расположенных между заданными. С помощью этой команды можно заставить for в bash работать точно так же, как аналогичный оператор работает в обычных языках программирования. Для этого достаточно записать цикл for следующим образом: for a in $( seq 1 10 ) ; do cat file_$a done
Эта команда выводит на экран содержимое 10-ти файлов: "file_1", ..., "file_10".
Операторы while и until
Оператор while работает подобно if, только выполнение операторов из списка list2 циклически продолжается до тех пор, пока верно условие, и прерывается, если условие не верно. Конструкция выглядит следующим образом: while list1 do list2 done.

Пример: while [ -d mydirectory ] ; do ls -l mydirectory >> logfile echo -- SEPARATOR -- >> logfile sleep 60 done
Такая программа будет протоколировать содержание каталога "mydirectory" ежеминутно до тех пор, пока директория существует.
Оператор until аналогичен оператору while: until list1 do list2 done.
Отличие заключается в том, что результат, возвращаемый при выполнении списка операторов list1, берется с отрицанием: list2 выполняется в том случае, если последняя команда в списке list1 возвращает ненулевой статус выхода.
Функции
Синтаксис
Оболочка bash позволяет пользователю создавать собственные функции. Функции ведут себя и используются точно так же, как обычные команды оболочки, т. е. мы можем сами создавать новые команды. Функции конструируются следующим образом: function name () { list }
Причем слово function не обязательно, name определяет имя функции, по которому к ней можно обращаться, а тело функции состоит из списка команд list, находящегося между { и }.
Этот список команд выполняется каждый раз, когда имя name задано как имя вызываемой команды. Отметим, что функции могут задаваться рекурсивно, так что разрешено вызывать функцию, которую мы задаем, внутри нее самой.
Функции выполняются в контексте текущей оболочки: для интерпретации функции новый процесс не запускается (в отличие от выполнения скриптов оболочки).
Аргументы
Когда функция вызывается на выполнение, аргументы функции становятся позиционными
параметрами (positional parameters) на время выполнения функции. Они именуются как $n, где n — номер аргумента, к которому мы хотим получить доступ. Нумерация аргументов начинается с 1, так что $1 — это первый аргумент. Мы можем также получить все аргументы сразу с помощью $*, и число аргументов с помощью $#. Позиционный параметр 0 не изменяется.
Если в теле функции встречается встроенная команда return, выполнение функции прерывается и управление передается команде, стоящей после вызова функции. Когда выполнение функции завершается, позиционным параметрам и специальному параметру # возвращаются те значения, которые они имели до начала выполнения функции.
Локальные переменные (local)
Если мы хотим создать локальный параметр, можно использовать ключевое слово local.
Синтаксис ее задания точно такой же, как и для обычных параметров, только определению предшествует ключевое слово local: local name=value.
Вот пример задания функции, реализующей упоминавшуюся выше команду seq: seq()
{
local I=$1; while [ $2 != $I ]; do
{ echo -n "$I ";
I=$(( $I + 1 ))
}; done; echo $2
}
Функция вычисления факториала fact
Еще один пример: fact()
{ if [ $1 = 0 ]; then echo 1; else
{ echo $(( $1 * $( fact $(( $1 — 1 )) ) ))
}; fi
}
Это функция факториала, пример рекурсивной функции. Обратите внимание на арифметическое расширение и подстановку команд.

Scilab
Scilab – это свободно распространяемая система компьютерной математики, которая предназначена для выполнения инженерных и научных вычислений, таких как:

решение нелинейных уравнений и систем;

решение задач линейной алгебры;

решение задач оптимизации;

дифференцирование и интегрирование;

задачи обработка экспериментальных данных (интерполяция и аппроксимация, метод наименьших квадратов);

решение обыкновенных дифференциальных уравнений и систем.
Scilab предоставляет широкие возможности по созданию и редактированию различных видов графиков и поверхностей.
Система имеет достаточно мощный собственный язык программирования высокого уровня.
Scilab был разработан в 1994 году во Франции, в Национальном исследовательском институте информатики и автоматизации (Institut national de recherche en informatique et en automatique, INRIA) и Национальной школе дорожного ведомства (École Nationale des Ponts et Chaussées, ENPC). С 2003 года поддержкой Scilab занимается консорциум Scilab
Consortium.
Отличительные особенности пакета:

Бесплатность

Маленький размер (13Мб против более чем двухгигабайтного пакета MATHLAB )

Возможность запуска в консоли без использования графического интерфейса. Это позволяет производить автоматизированные вычисления.
Пакет свободно распространяется через Интернет вместе с исходными кодами и снабжен обширной документацией. Scilab свободно распространяется вместе с исходными кодами.
Использование, копирование, изменение, распространение - свободные. Пакет защищен специальной лицензией, основное отличие которой от стандартной GNU лицензии, по утверждению авторов, определяется стремлением избежать появления клонов.
Существенным является то, что пакет Scilab работает в UNIX (включая Linux) и Windows.
Включен в стандартную поставку SuSE.
Пакет Scilab является средой создания законченных приложений, включающую в себя реализацию численного метода и визуализацию результата.
Пакет Scilab применим для инженерных расчетов и при этом прост в обращении, имеет интерфейс, систему помощи и возможность программирования, использования русского языка, обширную библиотеку алгоритмов базовой математики. Возможно проведение вычислений как в численном, так и в формульном виде. Для визуализации результатов существует графическая библиотека с возможностью интерактивного вмешательства.
Имеется возможность программирования. Особо важным являются наличие интерфейса с откомпилированными функциями языков Си и Фортран, а также существование пакета
Scilab//, обеспечивающий возможность параллельных вычислений.
Имеется возможность расширения возможностей программы внешними программами и модулями, написанными на разных языках программирования. Программа имеет открытый исходный код (не
GPL
) и позволяет использование её как в персональных, так и коммерческих целях (с разрешения INRIA)

Свободно распространяемую версию пакета вместе с полной документацией на английском языке в формате pdf можно получить по адресу http://www.scilab.org
Доступные инструменты:

2D и 3D графики, анимация

Линейная алгебра, разреженные матрицы (sparse matrices)

Полиномиальные и рациональные функции

Интерполяция, аппроксимация

Симуляция: решение ОДУ и ДУ

Scicos: гибрид системы моделирования динамических систем и симуляции

Дифференциальные и не дифференциальные оптимизации

Обработка сигналов

Параллельная работа

Статистика

Работа с СКА (системами компьютерной алгебры - такие программные продукты, как Maple, Maxima, Reduce, Derive и другие.)
Scilab имеет схожий с MATHLAB язык программирования, в составе имеется утилита, позволяющая конвертировать документы Matlab → Scilab.
Scilab позволяет работать с элементарными и большим числом специальных функций
(Бесселя, Неймана, интегральные функции), имеет мощные средства работы с матрицами, полиномами (в том числе и символьно), производить численные вычисления (например численное интегрирование) и решение задач линейной алгебры, оптимизации и симуляции, мощные статистические функции, а также стредство для построения и работы с графиками.
Scilab состоит из 3-х частей:
1. интерпретатор
2. библиотека функций (Scilab-процедуры)
3. библиотека Fortran и С процедур
Основы работы в Scilab
Текстовые комментарии
Текстовый комментарий в Scilab это строка, начинающаяся с символов //.
Использовать текстовые комментарии можно как в рабочей области, так и в тексте файла- сценария. Строка после символов // не воспринимается как команда и нажатие клавиши
Enter приводит к активизации следующей командной строки.
-->//6+8
-->
Элементарные математические выражения
Для выполнения простейших арифметических операций в Scilab применяют следующие операторы:+ сложение, – вычитание, * умножение, / деление слева направо, \ деление справа
налево, ^ возведение в степень.
Вычислить значение арифметического выражения можно, если ввести его в командную строку и нажать клавишу ENTER. В рабочей области появится результат.
--> 2.35*(1.8-0.25)+1.34^2/3.12
ans =
4.2180
Если вычисляемое выражение слишком длинное, то перед нажатием клавиши ENTER следует набрать три или более точек. Это будет означать продолжение командной строки.
--> 1+2+3+4+5+6....
+7+8+9+10+....
+11+12+13+14+15
ans =
120
Если символ точки с запятой «;» указан в конце выражения, то результат вычислений не выводится, а активизируется следующая командная строка.
--> 1+2;
--> 1+2
ans =
3
В рабочей области Scilab можно определять переменные, а затем использовать их в выражениях.
Любая переменная до использования в формулах и выражениях должна быть определена.
Для определения переменной необходимо набрать имя переменной, символ «=» и значение переменной. Здесь знак равенства – это оператор присваивания, действие которого не отличается от аналогичных операторов языков программирования. То есть, если в общем виде оператор присваивания записать как имя переменной = значение выражения то в переменную, имя которой указано слева, будет записано значение выражения, указанного справа.
Имя переменной не должно совпадать с именами встроенных процедур, функций и встроенных переменных системы и может содержать до 24 символов. Система различает большие и малые буквы в именах переменных. То есть ABC, abc, Abc, aBc – это имена разных переменных.Выражение в правой части оператора присваивания может быть числом, арифметическим выражением, строкой символов или символьным выражением. Если речь идет о символьной или строковой переменной, то выражение в правой части оператора присваивания следует брать в одинарные кавычки.
Если символ «;» в конце выражения отсутствует, то в качестве результата выводится имя переменной и ее значение. Наличие символа «;» передает управление следующей командной строке. Это позволяет использовать имена переменных для записи промежуточных результатов в память компьютера
Для очистки значения переменной можно применить команду clear имя переменной;
Команда clear; отменяет определения всех переменных данной сессии.
Системные переменные Scilab
Если команда не содержи знака присваивания, то по умолчанию вычисленное значение
присваивается специальной системной переменной ans. Причем полученное значение можно использовать в последующих вычислениях, но важно помнить, что значение ans изменяется после каждого вызова команды без оператора присваивания.
--> 25.7-3.14
ans =
22.5600
--> //Значение системной переменной равно 22.5600
--> 2*ans ans =
45.1200
Результат последней операции без знака присваивания хранится в переменной ans.
Другие системные переменные в Scilab начинаются с символа %:

%i – мнимая единица (
1
-
);

%pi – число  (3.141592653589793);

%e – число e=2.7182818;

%inf – машинный символ бесконечности ();

%NaN – неопределенный результат (0/0, /, 1

и т.п.);

%eps – условный ноль %eps=2.220Е-16.
Все перечисленные переменные можно использовать в математических выражениях.
Пример вычисления выражения F=cos(
/3)+(a-b)e
2
-->a=5.4;b=0.1;
-->F=cos(%pi/3)+(a-b)*%e^2
F =
39.661997
Пример неверного обращения к системной переменной.
-->sin(pi/2)
!--error 4
undefined variable : pi
Восемь значащих цифр – это формат вывода вещественного числа по умолчанию. Для того, чтобы контролировать количество выводимых на печать разрядов применяют команду printf с заданным форматом, который соотвествует правилам принятым для этой команды в языке С:
-->printf("%1.12f",%pi)
3.141592653590
-->printf("%1.15f",%pi)
3.141592653589793
-->printf("%1.2f",q)
123.46
-->printf("%1.10f",q)
123.4567890123
-->//По умолчанию 6 знаков после запятой
-->printf("%f",q)
123.456789

Функции в Scilab
Все функции, используемые в Scilab, можно разделить на два класса:

встроенные;

определенные пользователем.
В общем виде обращение к функции в Scilab имеет вид:
имя_переменной = имя_функции(переменная1 [, переменная2, …])
где

имя_переменной – переменная, в которую будут записаны результаты работы функции; этот параметр может отсутствовать, тогда значение, вычисленное функцией будет присвоено системной переменной ans ;

имя_функции – имя встроенной функции или ранее созданной пользователем;

переменная1, переменная2, … – список аргументов функции.
Элементарные математические функции
Пакет Scilab снабжен достаточным количеством всевозможных встроенных функций.
Функция
Описание функции
Тригонометрические
sin(x)
синус числа х cos(x)
косинус числа х tan(x)
тангенс числа х cotg(x)
котангенс числа х asin(x)
арксинус числа х acos(x)
арккосинус числа х atan(x)
арктангенс числа х
Экспоненциальные
exp(x)
Экспонента числа х log(x)
Натуральный логарифм числа х
Другие
sqrt(x)
корень квадратный из числа х abs(x)
модуль числа х log10(x)
десятичный логарифм от числа х log2(x)
логарифм по основанию два от числа х
С функциями, определяемыми пользователем, ознакомимся позже, после рассмотрения таких структур данных, как матрицы, и основных управляющих операторов.
Массивы и матрицы в Scilab
Массив – представляет собой упорядоченный набор однотипных данных, объединенных одним именем.

Массив состоит из пронумерованной последовательности элементов. Номера в этой последовательности называются индексами.
Переменную, представляющую собой просто список данных, называют одномерным
массивом или вектором. Для доступа к данным, хранящимся в определенном элементе массива, необходимо указать имя массива и порядковый номер этого элемента (индекс).
Если возникает необходимость хранения данных в виде таблиц, в формате строк и столбцов, то необходимо использовать двумерные массивы (матрицы). Для доступа к данным, хранящимся в таком массиве, необходимо указать имя массива и два индекса, первый должен соответствовать номеру строки, а второй номеру столбца в которых хранится необходимый элемент.
Значение нижней границы индексации в Scilab равно единице. Индексы могут быть только целыми положительными числами.
Ввод и формирование массивов и матриц
Самый простой способ задать одномерный массив в Scilab имеет вид
[name]=Xn:dX:Xk где name – имя переменной, в которую будет записан сформированный массив, Xn – значение первого элемента массива, Xk – значение последнего элемента массива, dX – шаг, с помощью которого формируется каждый следующий элемент массива, то есть значение второго элемента составит Xn+dX, третьего Xn+ dX+dX и так далее до Xk.
Возможен и такой способ определения одномерного массива:
[name]=Xn:Xk
Если параметр dX в конструкции отсутствует, это означает, что по умолчанию он принимает значение равное единице, то есть каждый следующий элемент массива равен значению предыдущего плюс один.
Переменную заданную как массив можно использовать в арифметических выражениях и в качестве аргумента математических функций. Результатом работы таких операторов являются массивы
--> Xn=-3.5;dX=1.5;Xk=4.5;
--> X=Xn:dX:Xk
X =
-3.5000 -2.0000 -0.5000 1.0000 2.5000 4.0000
--> Y=sin(X/2)
Y =
-0.9840 -0.8415 -0.2474 0.4794 0.9490 0.9093
--> A=0:5

A =
0 1 2 3 4 5
--> 0:5
ans =
0 1 2
3 4
5
Еще один способ задания векторов и матриц в Scilab это их поэлементный ввода.
Так для определения вектор–строки следует ввести имя массива, а затем после знака присваивания, в квадратных скобках через пробел или запятую перечислить элементы массива:
[name]=x
1
x
2
… x n
или [name]=x
1
, x
2
, …, x n
--> V=[1 2 3 4 5]
V =
1 2 3 4 5
--> W=[1.1,2.3,-0.1,5.88]
W =
1.1000 2.3000 -0.1000 5.8800
Элементы вектора–столбца вводятся через точку с запятой:
[name]=x
1
; x
2
; …; x n
--> X=[1;2;3]
X =
1 2
3
Обратиться к элементу вектора можно, указав имя массива и порядковый номер элемента в круглых скобках: name(индекс).
Ввод элементов матрицы так же осуществляется в квадратных скобках, при этом элементы строки отделяются друг от друга пробелом или запятой, а строки разделяются между собой точкой с запятой:
[name]=[x
11
, x
12
, …, x
1n
; x
21
, x
22
, …, x
2n
;…; x m1
, x m2
, …, x mn
;
Обратиться к элементу матрицы можно, указав после имени матрицы, в круглых скобках, через запятую, номер строки и номер столбца на пересечении которых элемент расположен: name(индекс1, индекс2).
Кроме того, матрицы и векторы можно формировать, составляя их из ранее заданных матриц и векторов (листинг 3.6).
--> v1=[1 2 3]; v2=[4 5 6]; v3=[7 8 9];
--> //Горизонтальная конкатенация векторов–строк.
--> V=[v1 v2 v3]

V =
1 2 3
4 5
6 7
8 9
--> //Вертикальная конкатенация векторов–строк, результат матрица
--> V=[v1; v2; v3]
V =
1 2 3
4 5 6
7 8 9
Знак двоеточия «:»
Указывая его вместо индекса при обращении к массиву, можно иметь доступ к группам его элементов
Действия над матрицами
Для работы с матрицами и векторами в Scilab предусмотрены следующие операции:

+ – сложение;

– – вычитание;

’ – транспонирование;

* – матричное умножение;

* – умножение на число;

^ – возведение в степень;

\ – левое деление, (A\B)
 (A
–1 
B), операция может быть применима для решения уравнения матричного уравнения вида A

X=B;

/ – правое деление, (B/A)
(B

A
–1
), используют для решения матричных уравнений
вида X

A=B;

.* – поэлементное умножение матриц;

.^ – поэлементное возведение в степень;

.\ – поэлементное левое деление;

./ – поэлементное правое деление;
Кроме того, если к некоторому заданному вектору или матрице применить
математическую функцию, то результатом будет новый вектор или матрица той же размерности, но элементы будут преобразованSы в соответствии с заданной функцией

Специальные матричные функции
Для работы с матрицами и векторами в Scilab существуют специальные функции.
Рассмотрим наиболее часто используемые из них:

length(X) – определяет количество элементов матрицы X, если X – вектор, его длину

prod(X) – вычисляет произведение элементов матрицы или вектора X

sum(X) – вычисляет сумму элементов матрицы или вектора X, кроме того с помощью этой функции можно вычислить скалярное произведение векторов

min(X) – находит минимальный элемент матрицы или вектора X

max(X) – находит максимальный элемент матрицы или вектора X

mean(X) – определяет среднее арифметическое матрицы или вектора X

sort(X) – выполняет упорядочивание массива X, если X – матрица, сортировка выполняется по столбцам

eye(n, m) – возвращает единичную матрицу соответствующей размерности ;

ones(n, m) – формирует матрицу, состоящую из единиц

zeros(n, m) – возвращает нулевую матрицу соответствующей размерности

diag(V [, k]) – возвращает квадратную матрицу с элементами V на главной диагонали или на k–й; функция diag(A [, k]), где A ранее определенная матрица, в качестве результата выдаст вектор столбец, содержащий элементы главной или k–ой диагонали матрицы А;

rand([n, m, p, …]) – возвращает матрицу случайных чисел, rand без аргументов возвращает одно случайно число;

cat(n, A, B, [C, …]) – объединяет матрицы А и В или все входящие матрицы A, B, C, … При n=1 – по строкам, при n=2 – по столбцам. То же что [A; B] или [A, B] );

tril
(
A
[, k
])
– формирует из матрицы
А
нижнюю треугольную матрицу начиная с главной или с k–й диагонали;

size(A) – определяет число строк и столбцов матрицы А, результатом ее работы является вектор [n, m];

det(A) – вычисляет определитель квадратной матрицы A ;


trace(A) – вычисляет след матрицы А (сумму элементов главной диагонали);

inv(A) – возвращает матрицу обратную к A;

linsolve(A, b) – возвращает решение системы линейных уравнений Ax=b
Программирование в Scilab
Функции ввода-вывода в Scilab
Для организации простейшего ввода в Scilab можно воспользоваться функциями x=input('title');
или x=x_dialog('title', 'stroka');
Функция input выводит в командной строке Scilab подсказку title и ждет пока пользователь введет значение, которое в качестве результата возвращается в переменную х.
Функция x_dialog выводит на экран диалоговое окно, после чего пользователь может щелкнуть OK и тогда stroka вернется в качестве результата в переменную x, либо ввести новое значение вместо stroka, которое и вернется в качестве результата в переменную x.
Функция input преобразовывает введенное значение к числовому типу данных, а функция x_dialog возвращает строковое значение. Поэтому при использовании функции x_dialog для ввода числовых значений, возвращаемую ею строку следует преобразовать в число с помощью функции evstr. Поэтому можно предложить следующую форму использования функции x_dialog для ввода числовых значений. x=evstr(x_dialog('title', 'stroka'));
Для вывода в текстовом режиме можно использовать функцию disp следующей структуры disp(b)
Здесь b – имя переменной или заключенный в кавычки текст.
Оператор присваивания
Оператор присваивания имеет следующую структуру a=b здесь a – имя переменной или элемента массива, b – значение или выражение. В результате выполнения оператора присваивания переменной a присваивается значение выражения b.
Условный оператор
Одним из основных операторов, реализующим ветвление в большинстве языков программирования, является условный оператор if. Существует обычная и расширенная формы оператора if в Scilab. Обычный if имеет вид if условие операторы1
else
операторы2
end
В Scilab для построения логических выражений могут использоваться условные операторы: (&, and – логическое и, |, or – логическое или,
, not - логическое отрицание) и операторы отношения: < (меньше), > (больше),== (равно),
=,
<> (не равно), <= (меньше или равно), >= (больше или равно).
Зачастую при решении практических задач недостаточно выбора выполнения или невыполнения одного условия. В этом случае можно, конечно, по ветке else написать новый оператор if, но лучше воспользоваться расширенной формой оператора if.
if условие1
операторы1
elseif условие2
операторы2
elseif условие 3
операторы3

elseif условие n операторыn else операторы end
Оператор выбора
Еще одним способом организации разветвлений является оператор альтернативного выбора следующей структуры:
select параметр case значение1 then операторы1
case значение2 then операторы2

else операторы end
Оператор while
Оператор цикла while имеет вид while условие операторы end
Здесь условие – логическое выражение; операторы будут выполняться циклически, пока логическое условие истинно.

Оператор for
for x=xn:hx:xk операторы end
Здесь x – имя скалярной переменной – параметра цикла, xn – начальное значение параметра цикла, xk – конечное значение параметра цикла, hx – шаг цикла. Если шаг цикла равен 1, то hx можно опустить, и в этом случае оператор for будет таким.
for x=xn:xk операторы end
Выполнение цикла начинается с присвоения параметру стартового значения (x=xn). Затем следует проверка, не превосходит ли параметр конечное значение (x>xk). Если результат проверки утвердительный, то цикл считается завершенным, и управление передается следующему за телом цикла оператору. В противном случае выполняются операторы в цикле
(тело цикла). Далее параметр меняет свое значение (x=x+hx). Далее снова производится проверка значения параметра цикла, и алгоритм повторяется
Функции в Scilab
Помимо использования стандартных встроенных функций, пользователь может создавать и использовать свои функции. Для создания функции можно воспользоваться 2-мя способами.
1. Использование оператора deff
Синтаксис deff('[имя1,...,имяN]=имя_функции(переменная_1,...,переменная_M)
',
'имя=выражение;...;имя1=выражение1;...;имяN=выражениеN
')
где имя1,...,имяN – список выходных параметров (от 1 до N), то есть переменных, которым будет присвоен конечный результат вычислений, имя_функции – имя с которым эта функция будет вызываться, переменная_1,...,переменная_M – входные параметры
(от 1 до M).
Примеры:
-->deff('[x]=myplus(y,z)','x=y+z')
-->deff('[x]=mymacro(y,z)',['a=3*y+1'; 'x=a*z+y'])
2. Использование конструкции function
function [] = () тело функции endfunction где function_name – имя функции;
output_args – список выходных параметров функции;
input_args – список входных параметров функции.
Если вызываемая функция находится не в текущем файле, то перед ее вызовом следует загрузить файл, в котором находится функция exec('file',-1).
Все имена переменных внутри функции, а так же имена из списка входных и выходных параметров воспринимаются системой как локальные, то есть эти переменные считаются определенными только внутри функции.
Вообще говоря, функции в Scilsb играют роль подпрограмм. Поэтому целесообразно набирать их тексты в редакторе и сохранять в виде отдельных файлов. Причем имя файла должно обязательно совпадать с именем функции. Расширение файлам-функциям обычно присваивают *.sci или *.sce.
Работа с файлами в Scilab
Открытие файла
[fd,err]=mopen(file, mode), где err - индикатор ошибки;
fd - параметр fd, возвращаемый функцией mopen используется как файловый идентификатор file – путь к файлу;
mode – режим открытия файла. сушествуют следующие режимы:
r или rb: чтение (файл должен существовать); w или wb: запись(если файл не существовал, то он создается, если существовал, то предыдущее содержимое удаляется;. a или ab: добавление в конец файла (если файл не существовал, то он создается). r+ или r+b: чтение и запись(файл должен существовать) w+ или w+b: чтение и запись (принцип работы как в w и wb). a+ или a+b: чтение и запись (принцип работы как в a и ab).
Закрытие файла
mclose([fd])
С помощью функции mclose('all') можно закрыть сразу все открытые файлы, кроме стандартных системных файлов.
Если идентиыикатор фаула опущен, то закрывается последний открытый файл.
Запись в файл
Функция mfprintf
mfprintf(fd, format, s), где format – форматная строка.
s – список выводимых параметров.
В форматной строке указываются форматы вывода параметров:
%[ширина][.точность]тип.
Тип
с При вводе символьный тип char, при выводе один байт.
d,i
Десятичное со знаком i Десятичное со знаком o Восьмеричное int unsigned u Десятичное без знака x, X
Шестнадцатеричное int unsigned, при х используются символы a-f, при Х – A-F.
f Значение со знаком вида [-]dddd.dddd e Значение со знаком вида [-]d.dddde[+|-]ddd
E Значение со знаком вида [-]d.ddddE[+|-]ddd g Значение со знаком типа e или f в зависимости от значения и точности
G Значение со знаком типа E или F в зависимости от значения и точности s Строка символов
Флаги
- Выравнивание числа влево. Правая сторона дополняется пробелами. По умолчанию выравнивание вправо.
+ Перед числом выводится знак «+» или «-»
Пробел Перед положительным числом выводится пробел, перед отрицательным – «-»
# Выводится код системы счисления: 0 – перед восьмеричным числом, 0х (0Х) пе-ред шестнадцатеричным числом.
Ширина
n Ширина поля вывода. Если n позиций недостаточно, то поле вывода расширяется до минимально необходимого. Незаполненные позиции заполняются пробелами.
0n То же, что и n, но незаполненные позиции заполняются нулями.
Точность
ничего
Точность по умолчанию n
Для типов e, E, f выводить n знаков после десятичной точки
Модификатор
h Для d, i, o, u, x, X короткое целое l Для d, i, o, u, x, X длинное целое
В строке вывода могут использоваться некоторые специальные символы
\b Сдвиг текущей позиции влево

\n Перевод строки
\r Перевод в начало строки, не переходя на новую строку
\t Горизонтальная табуляция
\’ Символ одинарной кавычки
\’’
Символ двойной кавычки
\? Символ ?
Функция mput
mput(x [,type,fd]), где x: число или вектор fd: дескриптор файла. type: формат записи числа:
"l","i","s","ul","ui","us","d","f","c","uc": соответственно long, int, short, unsigned long, unsigned int, unsigned short, a double, float, char и unsigned char.
Запись матрицы в файл – функция write
write(filename,a,[format])
a: матрица.
Чтение из файла
Функция mfscanf
A=mfscanf(fd, s), где
Из файла с идентификатором fd считываются в переменную A значения в соответствии с форматом s. При чтении числовых значений из текстового файла следует помнить, что два числа считаются разделенными, если между ними есть хотя бы один пробел, символ табуляции или символ перехода на новую строку.
Функция mget
x=mget([n,type,fd]), где x – вектор ли число;
n – число считываемых параметров;
type – формат числа(см mput)
Чтение матрицы – функция read
[x]=read(filename,m,n,[format]), где m и n – размерности матрицы. m=-1 если заранее неизвестно количество строк матрицы
Функция определения конца файла
e=meof(fd)
Функция определяет, достигнут ли конец файла

Создание приложений в Scilab
Создание графического окна
Для создания пустого графического окна служит функция figure.
F=figure();
В результате выполнения этой команды будет создано данном графическое окно с именем objfigure1. По умолчанию первое окно получает имя objfigure1, второе – objfigure2 и т.д. Указатель на графическое окно записывается в переменную F. Размер и положение окна на экране монитора можно задавать с помощью параметра 'position',[x y dx dy], где

x, y - положение верхнего левого угла окна (по горизонтали и вертикали соответственно) относительно верхнего левого угла экрана;

dx - размер окна по горизонтали (ширина окна) в пикселях;

dy - размер окна по вертикали (высота окна) в пикселях.
Параметры окна можно задавать одним из двух способов.
1. Непосредственно при создании графического окна задаются его параметры. В этом случае обращение к функции figure имеет вид
F=figure('Свойство1',
'Значение1',
'Свойство2',
'Значение2', ...,'Свойствоn', 'Значениеn')
здесь 'Свойство1' – название первого параметра, Значение1 – его значение,
'Свойство2' – название второго параметра, Значение2 – значение второго параметра и т.д.
Например,
F=figure('position', [10 100 300 200]);
2. После создания графического окна с помощью функции set(f,'Свйоство','Значение') устанавливается значение параметров, здесь f
- указатель на графическое окно, 'Свойство' - имя параметра, 'Значение' – его значение.
f=figure();
set(f,'position',[20,40,600,450])
Для изменения заголовка окна используется параметр 'figure_name', 'name' опре- деляющий заголовок окна ('name').
f=figure();
set(f,'position',[20,40,600,450]);
set(f,'figure_name','FIRST WINDOW');
f=figure('position',[20,40,600,450],'figure_name','FIRST
WINDOW');

Графическое окно можно закрыть с помощью функция close(f) (здесь f – указатель на окно). Удаляется окно с помощью функции delete(f), где f- указатель на окно.
Создание объектов (функция uicontrol)
В Scilab используется динамический способ создания интерфейсных компонентов. Он заключается в том, что на стадии выполнения программы могут создаваться (и удаляться) те или иные графические объекты (кнопки, метки, флажки и т.д.) и их свойствам присваиваются соответствующие значения.
С=uicontrol(F, 'Style', 'тип_компонента', 'Свойство_1',
Значение_1, 'Свойство_2', Значение_2,... 'Свойство_k',Значение_к); где C – указатель на создаваемый компонент;
F –указатель на объект, внутри которого будет создаваться компонент; первый аргумент функции uicontrol не является обязательным, и если он отсутствует, то родителем (владельцем) создаваемого компонента является текущий графический объект – текущее графическое окно;
'Style'– служебная строка Style, указывает на стиль создаваемого компонента(символьное имя);
'тип_компонента'– определяет, к какому классу принадлежит создаваемый компонент, это может быть PushButton, Radiobutton, Еdittext, StaticText, Slider,
Panel, Button Group, Listbox или др компоненты;
'Свойство_к', Значение_к – определяют свойства и значения отдельных компонентов, они будут описаны ниже конкретно для каждого компонента.
У существующего интерфейсного объекта можно изменить те или иные свойства с помо- щью функции set:
set(C,'Свойство_1',Значение_1,...)
где C – указатель на компонент, параметры которого будут меняться;
Получить значение параметра компонентов можно с помощью функции get следующей структуры:
get(С,'Свойство')
где С – указатель на динамический интерфейсный компонент, значение параметра которого необходимо узнать;
'Свойство'- имя параметра, значение которого нужно узнать.
Функция возвращает значение параметра. Далее мы поговорим об особенностях создания различных компонентов.
Типы компонентов:
pushbutton – кнопка;
text – текстовое поле для отображения текстовой информации;
edit – окно редактирования;
radiobutton – кнопка со значением on или off – переключатель;
checkbox – флажок;
listbox – список строк.
Свойства компонентов:
string – заголовок;
position – координаты расположения компонента;
callback – обработка события (например, при нажатии на кнопку);
BackgroundColor – цвет фона (значением является ибо строка, либо вектор, состоя- щий из трех величин типа real. В случае, если это строка, т значения компонент цвета разде- ляются с помощью знака «|»: «R|G|B». Каждая величина предствляет значение в интервале
[0,1]);
Horizontalalignment – выравнивание текста (используется в компонентах 'text',
'edit' и 'checkbox', значения: left
– выравнивание по левому краю; center
– выравнивание текста по центру (значение по умолчанию); right
– выравнивание по правому краю).
Пример создания текстового поля.
w=figure('Position',[50,50,200,200]);
t=uicontrol('Style','text','Position',[100,100,50,20],'String',
'0
.1');
set(t,'BackgroundColor',[1 1 1]);
set(t,'HorizontalAlignment','left');
Пример создания кнопки
w=figure();
pbtn=uicontrol(w,'Style','pushbutton',
'string',
'OK',
'Callback', 'sinus');
function y=sinus()
x=-5*%pi:0.2*%pi:5*%pi;
y=sin(x);
plot(x,y);
endfunction
Пример создания переключателя
hFig=figure('Position',[50,50,200,200]);

//Создание радиокнопок hRb1=uicontrol('Style','radiobutton','String','sin(x)','value',
0, 'Position',[25,100,60,20],'callback','Radio1');
hRb2=uicontrol('Style','radiobutton','String','cos(x)','value',
0, 'Position',[25,140,60,20],'callback','Radio2');
//обработчик нажатия на кнопки function Radio1()
newaxes;
x=-2*%pi:0.1:2*%pi;
set(hRb2,'value',0);
y=sin(x);
plot(x,y);
xgrid();
endfunction function Radio2()
newaxes;
x=-2*%pi:0.1:2*%pi;
set(hRb1,'value',0);
y=cos(x);
plot(x,y);
xgrid();
endfunction
Пример создания списка строк
f=figure();
h=uicontrol(f,'style','listbox','position', [10 10 150 160]);
set(h, 'string', "item 1|item 2|item3");
set(h, 'value', [1 3]);

Язык программирования Pascal
История
Pascal разрабатывался с 1968 по 1970 г. Николаусом Виртом. Цель заключалась в том, чтобы создать язык, лишенный многочисленных недостатков ALGOL. Pascal был назван в честь французского математика Блеза Паскаля, который еще в 1642 г. изобрел цифровой калькулятор. С конца 70-х до конца 80-х гг. этот язык доминировал среди языков, используемых на начальном этапе обучения программированию; позже его заменили С и C+
+, а затем Java.
ALGOL 60 был первой попыткой создания языка на основе формального описания, однако его реализация оказалась сложной. В частности, оказалось достаточно трудно реализовать передачу параметров по имени, хотя это довольно элегантный механизм. В языке ALGOL 60 не были определены операторы ввода-вывода, поскольку в то время считалось, что они зависят от реализации, да и собственную статическую память также трудно было реализовать. Помимо того, в 60-х гг. были разработаны новые практические решения, например типы данных и структурное программирование. Языки типа FORTRAN были популярны благодаря своей эффективности при выполнении программ, несмотря на отсутствие элегантности.
В 1965 г., во время работы в Стенфордском университете (Stanford University), Вирт разработал новую, расширенную версию ALGOL 60 для компьютеров серии IBM 360, в которую вошло определение указателей и структур данных. Этот язык, известный как
ALGOL W, использовался в нескольких университетах, но его реализация ограничивалась только компьютерами IBM 360. Для выполнения программ на этом языке требовался значительный по размерам пакет программ поддержки обработки строк, вещественных чисел двойной точности и других сложных типов данных. Таким образом, ALGOL W в качестве системного языка программирования оказался малоэффективным.
В 1968 г. Вирт вернулся в Швейцарию и начал работу над преемником ALGOL W - языком, который мог бы компилироваться за один проход. Для создания исходного компилятора был использован алгоритм рекурсивного спуска. Этот компилятор выполнялся на компьютере Control Data. Также был разработан широко известный теперь интерпретатор
Р-кода. Компилятор языка Pascal сначала транслировал исходную программу в программу на языке гипотетической машины со стековой архитектурой. Благодаря такой своей организации Pascal легко переносился на компьютеры других систем. Компилятор Pascal был написан на одноименном языке. Все, что требовалось для перехода в другую систему, - это переписать соответствующим образом интерпретатор
Р-кода.
Появившийся в 1970 г. Pascal начал завоевывать признание. В 1983 г. был разработан американский стандарт языка (IEEE 770/ ANSI X3.97), а вскоре был разработан стандарт ISO
(ISO 7185).
Пример простейшей программы на Pascal program Hello;
begin writeln('Hello, world!');
readln;
end.
Структура программы на Pascal
Любая программа на Pascal состоит из трех блоков: блока объявлений, блока описания процедур и функций и блока операторов (основной блок программы)

Блок объявлений:
program ... (название программы)
uses ... (используемые программой внешние модули)
const ... (подраздел описания констант)
type ... (подраздел объявления типов)
var ... (подраздел объявления переменных)
Блок описания процедур и функций:
procedure (function)
begin end;
Блок основной программы:
begin
(операторы основной программы) ...
end;
выработать практические навыки работы с системой Borland Pascal, научиться создавать, вводить в компьютер, выполнять и исправлять простейшие программы на языке Pascal в режиме диалога, познакомиться с диагностическими сообщениями компилятора об ошибках при выполнении программ, реализующих линейные алгоритмы.

Каталог: lit -> edu -> informatica
lit -> «\"Серьезные игры\" в обучении английскому языку»
lit -> Описание курса hp education Services
lit -> Руководство На русском языке Android 0 Lollipop tm android: краткое руководство II
informatica -> Лекция Введение в ос linux 2 Основные характеристики Linux  Реальная многозадачность 
lit -> Voyager ™ pro hd гарнитура Bluetooth ® дополнительные сведения
lit -> Руководство по безопасной работе для получения важных сведений о безопасности, зарядке, аккумуляторе и нормативных
lit -> Дополнительные сведения гарнитура ml10 и ml12 Bluetooth ® 2 кнопка вызова
lit -> Руководство по безопасной работе для получения важных сведений о


Поделитесь с Вашими друзьями:
1   2   3   4   5   6


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал