Scilab/Управление сеансом: различия между версиями

Содержимое удалено Содержимое добавлено
м <source> -> <syntaxhighlight> (phab:T237267)
 
Строка 12:
# Затем нажмите <Ctrl>+<X>.
Вы увидите такой результат
<sourcesyntaxhighlight lang=scilab>
-->
 
Строка 18:
-1->
-2->
</syntaxhighlight>
</source>
 
Вы нажали комбинации, которые выполнили одно и то же действие — создали подуровень, т.е. как бы в одном сеансе вы открыли одновременно три. На каждом подуровне своя область памяти для хранения переменных. Данная система работает по принципу стека «первым вошёл, последним вышел». Это означает, что выход из подуровня очищает безвозвратно область памяти, выделенную на него.
 
Выполните следующее:
# Введите на втором подуровне выражение<sourcesyntaxhighlight lang=scilab>-2-> 2+2;</sourcesyntaxhighlight>
# Нажмите еще раз любую комбинацию, чтобы создать подуровень;
# Введите еще раз<sourcesyntaxhighlight lang=scilab>-3-> 2+2;</sourcesyntaxhighlight>
 
Теперь посмотрите в окно '''Обозреватель переменных''' и вы увидите, что «в мире» сосуществуют две переменные с одинаковым именем. Это происходит потому, что они не подозревают о существовании друг друга.
 
Чтобы подняться на уровень выше, необходимо ввести команду
<sourcesyntaxhighlight lang=scilab>
resume
</syntaxhighlight>
</source>
 
Если вы уверены, что подуровни вам больше не нужны, то удалить их можно все сразу командой
<sourcesyntaxhighlight lang=scilab>
abort
</syntaxhighlight>
</source>
после которой вы окажетесь на главном уровне с единственной областью памяти для переменных.
 
Строка 55:
<center><math>2\cdot x^2+4\cdot x-10=0.</math></center></br>
# Для начала создадим два подуровня, с помощью одной из двух комбинаций клавиш.
# На втором подуровне вычислим [[дискриминант]], введя<sourcesyntaxhighlight lang=scilab>-2-> D=4^2-4*2*-10;</sourcesyntaxhighlight>
# Теперь мы заберем результат на первый подуровень, а второй удалим. Для этого введите следующее<sourcesyntaxhighlight lang=scilab>-2-> D=resume(D)</sourcesyntaxhighlight> Отметим, что Вы попросили среду переместить значение D второго уровня в переменную D уровня выше, а всё остальное удалить. Так как пространство первого уровня пусто, то переменная D будет создана системой, но если бы это имя было занято, то переносимый результат был бы записан в уже имеющуюся переменную.
# На первом уровне рассчитаем корни, для чего введите<sourcesyntaxhighlight lang=scilab>-1-> x1=(-4+sqrt(D))/4, x2=(-4-sqrt(D))/4</sourcesyntaxhighlight> Обратите внимание на то, что мы ввели две команды за раз, разделив их запятой. Таким образом, мы нашли два вещественных корня, записав их соответственно в переменные x1 и x2.
# Дискриминант нам уже не нужен, а корни необходимо перенести на главный уровень. Чтобы перенести за раз больше одной переменной, необходимо переносимые переменные объединить в вектор. Введите следующую команду<sourcesyntaxhighlight lang=scilab>-1-> [x1, x2]=resume(x1, x2)</sourcesyntaxhighlight>. Обратите внимание на то, как объявляется вектор: в квадратные скобки помещаются переменные, разделяемые запятыми. В дальнейшем мы научимся их создавать и для математических целей.
# Мы решили нашу подзадачу, но правильно ли? Проведем проверку и заодно научимся ещё одному приёму. Введите следующую команду<sourcesyntaxhighlight lang=scilab>--> 2*x1^2+4*x1-10,..</sourcesyntaxhighlight> и нажмите клавишу <Enter>. Вы увидите, что командная строка создаст новую строку, но результат расчёта не покажет. Дело в том, что ввод команды ещё не завершен: введя две точки в конце команды вы даёте указание создать новую строчку и продолжить ввод команды. После того, как вы завершите ввод, интерпретатор проигнорирует эти точки и слепит всё в единую команду. Этот приём используется, когда вам за один раз необходимо ввести много длинных и несвязанных между собой команд. После создания строчки введите вторую команду<sourcesyntaxhighlight lang=scilab>--> 2*x2^2+4*x2-10</sourcesyntaxhighlight> и нажмите клавишу <Enter>
 
Вы увидите следующее<sourcesyntaxhighlight lang=scilab>--> 2*x1^2+4*x1-10,..
--> 2*x2^2+4*x2-10
ans =
-1.776D-15
ans =
-3.553D-15</sourcesyntaxhighlight>Очевидно, что мы правильно рассчитали корни с двойной точностью. Отметим, что команды выполнились последовательно и результат последней команды записался в переменную ans.
|}
Теперь углубимся. Нажимая сочетания клавиш <Ctrl>+<X> или <Ctrl>+<C> вы на самом деле вызывали функцию
<sourcesyntaxhighlight lang=scilab>pause</sourcesyntaxhighlight>. Новый подуровень не запрещает вам пользоваться уже созданными переменными. Например, вы можете воспользоваться полученными корнями на новом уровне при этом не меняя имя переменной. Создавая подуровень вы защищаете уже полученные результаты.
 
Например, попробуйте ввести
<sourcesyntaxhighlight lang=scilab>--> pause
-1-> x1=x1+3;</sourcesyntaxhighlight>Вы увидите, что в области памяти подуровня будет создана переменная x1, в которую будет занесен результат прибавления тройки к найденному нами корню квадратного уравнения. При этом мы не потеряли корень, так как его значение было только скопировано. Это еще одно удобство подуровней, которым необходимо пользоваться, т.е. переменные верхних подуровней всегда защищены от изменений, но при этом к ним всегда есть доступ с нижних уровней.
 
Не менее полезными будут следующие приёмы работы с текущей строкой:
Строка 148:
 
Приведем поучительные примеры. Введите в командной строке
<sourcesyntaxhighlight lang="scilab">
--> 2+2*3
ans =
Строка 161:
ans =
20.
</syntaxhighlight>
</source>
Разберем все примеры по очереди. В первом случае интерпретатор проходя слева на право, согласно таблице приоритетов, выполняет операцию умножения (результат 6), к которому прибавляет двойку (в результате 8). Во втором случае, так как операторы умножения и деления на одном уровне, интерпретатор сначала выполнит операцию деления, потому что он стоит левее, а затем умножения.
 
Строка 169:
 
Теперь во втором примере изменим приоритет вычислений, выполнив сначала умножение, а затем деление
<sourcesyntaxhighlight lang="Scilab">
--> 6/(2*4)
ans=
0.75
</syntaxhighlight>
</source>
 
Более сложные действия, которые невозможно выполнить за один ход, группируются в функции, о которых мы поговорим чуть позже. В концепции, которую мы здесь ввели, функции тоже можно считать своего рода операторами, потому что в большинстве случаев нам не важно знать как функция работает и какие инструкции она несет в себе. Она лишь принимает аргументы (своего рода операнды) и возвращает нам результат.
Строка 210:
 
Для того, чтобы поставить комментарий, необходимо ввести два правых слэша, например,
<sourcesyntaxhighlight lang="Scilab">
// это мой комментарий
</syntaxhighlight>
</source>
Комментарии можно оставлять и в командной строке, хотя это вообще говоря, бессмысленно. К сожалению, в Scilab отсутствуют многострочные комментарии.