Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Все, что вы хотели знать о написании скриптов для JFW, 6 страница



действий, которые имеют место, пока наш скрипт файлов является

активным, и таким образом мы можем обратиться к текущей строке

по имени в наших скриптах.

 

К использованию переменной типа string применяются следующие

правила:

 

1. Переменная string должна быть объявлена прежде, чем ее можно

будет использовать.

2. Ее значение по умолчанию всегда "null" или никаких символов.

 

Когда вы присваиваете значение переменной String, вы должны

помещать строку в кавычки. Например, корректным будет следующий

синтаксис: Let StringVariable = "Hello". Обратите внимание, что

в версиях Jaws ранее 3 вы должны были помещать пробел между

кавычками, когда вы проверяете на нулевое значение. Теперь все

изменилось. Null показывается двумя кавычками, без пробела между

ними.

 

Handle - хранит ручку окна. Ручка окна (Window handle) - это

уникальный номер, который система присваивает каждому окну в

текущей работающей программе. Переменная объявляется так:

 

Handle MyHandleVariable

 

Вы, вероятно, помните из нашего предыдущего описания

идентификаторов окон, что ручка окна присваивается системой и

является уникальной для конкретного окна. Хотя handle также

является целым числом и им, следовательно, можно манипулировать

как всеми остальными целочисленными значениями, использование

переменной handle зарезервировано единственно для идентификации

ручки окна. В большинстве случаев мы будем использовать ее,

чтобы идентифицировать конкретное окно, информация из которого

нам нужна.

 

К использованию переменной handle применяются следующие правила:

 

1. Переменная типа Handle должна быть объявлена прежде, чем ее

можно будет использовать.

2. Ее значение по умолчанию равно нулю.

 

Object - это переменная, предназначенная для хранения объекта.

Объект, для целей языка скриптов Jaws, обращается к типам

объектов, представленных в некоторых приложениях Microsoft,

таких, как Office 97 suite. Переменная объявляется так:

 

Object MyObjectVariable

 

Переменная типа object используется для хранения объекта,

который был возвращен в Jaws скрипт или функцию. Ее роль

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

из некоторых приложений Microsoft, которую обычно очень трудно

или невозможно получить, просто озвучивая экран. К использованию

переменной object применяются следующие правила:

 

1. Переменная типа object должна быть объявлена прежде, чем ее



можно будет использовать.

2. Ее значение по умолчанию всегда Null или Empty (пусто).

 

Переменные могут быть локальными, что означает, что они могут

использоваться в скрипте, в котором они объявлены, и

глобальными, что означает, что они могут использоваться в любом

скриипте в файле скриптов, где они определены. Глобальные

переменные могут быть объявлены в начале файла скриптов, с

помощью заголовка globals. Поместите эту группу сразу же после

операторов включения. Глобальные переменные также могут быть

объявлены в include файле, как это сделано в случае с файлом

скриптов по умолчанию и его заголовочным файлом включения

HJGLOBAL.JSH. Если этот файл включен, глобальные переменные,

объявленные в этом файле, можно использовать в любом скрипте по

умолчанию. Вам следует создать заголовочный файл для переменных,

которые вы намерены использовать в нескольких файлах скриптов.

Если вы объявляете глобальную переменную, которую вы намерены

использовать только с одним приложением, то будет лучше объявить

эту переменную прямо в файле скриптов, а не в файле заголовков,

и включить имя приложения в в имя переменной. Это послужит тем,

что сообщит пользователю, что это глобальная переменная,

предназначенная для использования только в этом приложении.

Пользователь также должен понимать, что коль скоро переменная

создана и ей присвоено какое-то значение, это значение остается

в памяти, даже после того, как приложение, которое ее

использовало, было закрыто. Если приложение открыто снова во

время одной и той же компьютерной сессии, глобальные переменные

из файла скриптов для этого приложения будут иметь те же

значения, которые они имели перед тем, как программа была

закрыта. Единственный способ очистить глобальные переменные -

выгрузить, а потом снова загрузить Jaws.

 

Локальные переменные объявляются в скрипте в первом утверждении

после начального оператора скрипта. Они имеют заголовок Var.

 

Вот как выглядит каждый класс переменных в примере, взятом из

стандартного файла скриптов.

 

Следующие операторы объявления взяты из WINWORD.JSS, файла

скриптов для Microsoft Word For Windows. Обратите внимание, что

большая часть имен глобальных переменных начинается со слова

Global, так чтобы их легко можно было отличить от локальной

переменной. Соглашения о присвоении имен будут подробно

обсуждаться позже, когда мы будем обсуждать технику написания

скриптов.

 

Globals

String GlobalWinwordVersion,

Int GlobalCurrentControl,

Handle GlobalRealWindow,

String GlobalRealWindowName,

Int WinWordFirstTime,; to say auto start message only first time

Handle WinWordContextHandle,; read word in context

Int WinwordFontCode; when font buttons are pushed

 

В этом списке глобальных переменных нужно обратить внимание на два

обстоятельства. Во-первых, во всех строках, за исключением последней, после

имени переменной стоит запятая. Во-вторых, в некоторых строках после

имени переменной записаны комментарии. Комментарием считается все, что

написано после точки с запятой, и может служить в качестве напоминания

задачи переменной. Любые запятые должны стоять перед комментарием.

 

Следующее утверждение объявления локальной переменной взято из функции

HotKeyHelp97 () в WINWORD.JSS, файла скриптов для Microsoft Word For

Wondows. Как показано ниже, объявления переменной появляютсясразу же,

после начального оператора функции.

 

Function HotKeyHelp97 ()

var

handle WinHandle,

Int verbosity

 

Здесь также, все строки, за исключением последней, заканчиваются запятой.

 

Константы

 

Как мы уже сказали прежде, константы - это способ использовать легко

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

символов или чисел. Константы можно представить в виде некоторого числа

или группы букв или слов, которым дали, или присвоили, новое имя. Это

делается по чисто мнемоническим соображениям, поскольку гораздо легче

запомнить имя, чем число или длинный ряд чимволов или слов. Нет никаких

ограничений на то, сколько имен констант вы присвоите числу. Например, в

стандартном файле констант Jaws, и константам TRUE, и ON, присваивается

значение 1. Это означает то, что вы можете написать утверждение скрипта,

чтобы проверить, соответствует ли условие TRUE, On или 1. Все они

рассматриваются как имеющие одно значение, коль скоро константы были

объявлены. Мы настоятельно рекомендуем вам пользоваться константами,

поскольку гораздо труднее запомнить, что когда что-либо истинно, его

состояние равно 1, но легко понять разницу между TRUE и FALSE (истиной

и ложью). Кроме того, когда кто-то другой читает ваш файл скриптов, ему

будет гораздо легче понять, что вы хотели сделать, если они увидят хорошо

поименованные константы, а не числа. И наконец, если вам нужно изменить

значение числа, которое используется в нескольких местах, вы можете

изменить их все сразу, если вы использовали константу для представления

этого числа, просто изменив значение объявления константы.

 

Константы объявляются в начале файла скриптов с помощью заголовка

группы Const, следующим образом:

 

Const

True = 1,

False = 0,

On = 1,

Off = 0

 

Пожалуйста, обратите внимание, что все строки, за исключением последней,

заканчиваются запятыми. Авторы скриптов иногда определяют свои

собственные константы для файла скриптов, но они часто используют те,

которые уже объявлены в HJCONST.JSH. Если это так, они не должны

забывать включить этот файл заголовков. Мы рассмотрим значения констант в

этом файле в следующем разделе, "Техника написания скриптов".

 

Встроенные функции и операторы

 

В языке скриптов Jaws есть несколько типов утверждений, которые можно

использовать для построения скриптов и определяемых пользователем

функций. Это встроенные функции, арифметические операторы и поразрядные

операторы. Существует также специальный тип встроенных функций, который

называется Hook функция, которая будет обсуждаться отдельно.

 

Встроенные функции

 

Язык Jaws предоставляет для использования в скриптах более 200

предзаданных функций. Каждая функция выполняет специфический вид

деятельности. Это строительные блоки, или инструкции, из которых мы

создаем наши скрипты. Например, RouteJAWSToPC проверяет положение Jaws

и PC курсоров, делает необходимые расчеты и перемещает Jaws курсор в ту

же точку, в которой находится PC курсор. Вся эта деятельность для вас

прозрачна, поскольку все, что вам надо знать, это то, что она перемещает

Jaws курсор к PC курсору.

 

Нет никакого практического смысла обсуждать здесь все предзаданные

функции, поэтому мы удовлетворимся обсуждением наиболее важных из них.

В приложении C перечислены многие из наиболее важных функций и даны

краткие описания каждой. Эти описания основаны на информации, которую

можно найти в файле BUILTIN.JSD, который можно найти в поддиректории

\settings\enu вашей главной JFW директории, предполагая, что вы используете

U. S. English версию Jaws. Эти описания в BUILTIN.JSD являются теми же

описаниями, которые вы слышите, когда просматриваете список функций

диспетчера скриптов. Хотя все Jaws функции являются важными, те, которые

приведены в приложении C показались нам самыми важными и достойными

того, чтобы быть включенными здесь. Хорошее понимание этого материала

сослужит вам хорошую службу на вашем пути к тому, чтобы стать мастером

по написанию скриптов. Эти описания и описания оставшихся функций

можно просмотреть в любое время, вызвав диалог Insert Function (вставка

функции) в диспетчере скриптов или просмотрев файл BUILTIN.JSD.

 

Мы также сгруппировали многие встроенные функции по типу задачи,

которую они выполняют. Эти группировки можно просмотреть в приложении

D. Если вы хотите выполнить конкретный тип задачи, но не знаете имя

функции, можете попытаться посмотреть в приложении D категориий, вместо

того, чтобы просматривать весь алфавитный список приложения C или

BUILTIN.JSD.

 

Перед изучением приложения C есть парочка понятий относительно

некоторых функций, которые мы должны обозреть. Синтаксис этих

встроенных функций очень похож на тот, который мы обсуждали в

отношении функций, определяемых пользователем, но давайте на некоторое

время остановимся, чтобы его напомнить.

 

Синтаксис функции следующий:

 

ИмяФункции ([параметры])

 

Некоторые встроенные функции требуют параметры. На это указывает слово

"параметры" в квадратных скобках. Параметр - это данные, которые должна

иметь функция, чтобы выполнить свою работу. Если требуется несколько

параметров, параметры внутри скобок разделяются запятыми. Формат в

точности тот же самый, что и тот, который уже обсуждался прежде для

определяемых пользователем функций. Когда вызывается функция, требующая

более одного параметра, данные должны быть предоставлены в том же

порядке, который задан определением функции.

 

Некоторые встроенные функции предоставляют "возвраты". Вспомним, что

возврат - это данные, которые функция возвращает обратно в скрипт для

дальнейшей обработки. Если функция предоставляет возврат, эта информация

предоставляется в файле BUILTIN.JSD и в документации списка функций

диспетчера скриптов.

 

Функции GetCurrentWindow и GetFocus

 

Есть две встроенные функции, которые настолько важны для написания

скриптов, что они заслуживают отдельного внимания. Эти две функции

называются GetCurrentWindow и GetFocus. Какого же черта они делают? Мы

уже немного говорили о ручках окон, но мы никогда не говорили вам в

явном виде, как ее получить и что с ней делать, если даже вы ее получили.

Именно здесь вы должны начать изучение того, как делать две эти штуки.

Это позволит вам получить подробную информацию об окне (которое, как мы

уже сказали, также означает любой орган управления), которое присутствует

в вашем приложении.

 

Ниже приведены определения двух этих функций, взятые из

BUILTIN.JDF.

 

GetCurrentWindow - определяет ручку окна (Window Handle) для

окна, которое содержит активный курсор. В противоположность

этому, функция GetFocus использует аналитический процесс, чтобы

найти окно, которое в данный момент содержит фокус, независимо

от того, какой курсор является активным.

 

GetFocus - предоставляет ручку окна для окна, которое содержит

фокус. Она всегда ищет PC курсор или выделенный объект, который

имеет фокус. Она не принимает во внимание, какой курсор является

активным. В противоположность этому, функция GetCurrentWindow

является менее сообразительной. Она просто сообщает ручку окна,

в котором находится активный курсор.

 

Так что же означают эти определения? Прежде всего, обе функции

сообщают ручки окон, поэтому их использование позволит нам

получить эту информацию об окне в нашем приложении. Например,

утверждения Let MyHandle = GetCurrentWindow () и Let MyHandle = GetFocus ()

установят Handle переменную равной значению ручки запрашиваемого

окна.Если вслед за этим вы использовали утверждение, такое как

SayInteger (MyHandle), Jaws озвучит число или ручку окна, о

котором идет речь. Разница между двумя этими функциями состоит в

том, что GetFocus будет сообщать ручку любого окна, в котором,

по мнению Jaws, находится фокус. Это может быть, например,

выделенная в данный момент кнопка или поле редактирования в окне

диалога. GetCurrentWindow будет проверять, какой курсор является

активным а затем сообщит ручку окна, содержащего этот курсор.

Таким образом, если вы активизируете Jaws курсор, например, и

удаляетесь от фокуса к другому органу управления,

GetCurrentWindow сообщит ручку окна этого нового органа

управления, тогда как GetFocus будет по-прежнему сообщать ручку

окна, содержащего фокус.

 

Итак, теперь вы знаете, как получить ручку окна. И что вы

намерены с этим делать? Само по себе это мало что дает,

поскольку это просто число. Однако, функции GetFocus и

GetCurrentWindow могут использоваться в качестве параметров

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

информацию об интересующем нас окне. Использование этих других

функций наряду с функциями GetFocus и GetCurrentWindow, чтобы

сообщить этим другим функциям, о каком окне нужно получить

информацию, может предоставить очень полезную информацию. Ниже

приведены некоторые примеры.

 

GetControlID (GetCurrentWindow ()) - сообщит идентификатор

органа управления окна, содержащего активный курсор.

 

GetFirstChild (GetFocus ()) - сообщает ручку первого дочернего

окна для окна, в котором находится фокус. Эту дочернюю ручку

можно затем использовать для получения информации о дочернем

окне.

 

GetParent (GetCurrentWindow ()) - сообщает ручку родительского

окна, которое породило текущее дочернее окно.

 

SayControl (GetFocus ()) - озвучит содержание и приглашение

органа управления, который в данный момент содержит фокус.

 

SayWindowTypeAndText (GetCurrentWindow ()) - сообщит

разнообразную информацию об окне, содержащем активный курсор,

такую, как заголовок окна, если он есть, содержание окна, тип

окна и другую информацию.

 

Итак, теперь у вас есть некоторое понимание того, как

использовать некоторые Jaws Функции, чтобы получить ручки,

которые могут использоваться другими Jaws функциями для

получения информации, которая будет необходима для ваших

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

или для того, чтобы принять решение относительно того, как

продолжать обработку скрипта. Повторим, что вы найдете список

наиболее важных встроенных функций в приложении C, а полный

список этих функций - в файле BUILTIN.JSD.

 

Функции Pause и Delay

 

Есть две функции, которые временно приостанавливают обработку

скрипта, Pause () и Delay (). Такая приостановка работы скрипта

часто бывает необходима, чтобы не дать скрипту уйти слишком

далеко вперед по сравнению с приложением, с которым он работает.

Например, если вы используете функцию, которая перемещает Jaws

курсор в другую часть экрана, или которая убирает меню, вам

может понадобиться приостановить работу скрипта, чтобы разрешить

завершение действий, прежде чем скрипт продолжит работу. Функция

Pause просто останавливает обработку скрипта, и дает другому

приложению возможность завершить свою обработку. Затем скрипт

продолжает работу. Функция Delay останавливает обработку скрипта

на указанный период времени, который указывается целым числом в

скобках. Чем больше целое число, тем дольше остановка. Однако,

если выбранного времени недостаточно, чтобы наше приложение

завершило свою работу, скрипт продолжит работу в любом случае.

Иногда необходим процесс проб и ошибок, чтобы определить

необходимое время задержки. В общем, функция Delay является

более полезной, когда вы хотите заставить скрипт остановиться,

независимо от того, закончило приложение свою работу, или нет.

Иногда функция Pause просто не останавливает скрипт на

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

желаемого эффекта, вызывается Delay. В общем, стоит сначала

попробовать Pause. Если требуется более длительная приостановка,

то можно использовать Delay.

 

Слово об SDM окнах

 

Как только вы узнали кое-что об окнах, вам придется кое-что

узнать об исключении. Раньше мы уже говорили о взаимодействии

родительских и дочерних окон, и описали, как каждый орган

управления (то есть, кнопка, поле редактирования, блок проверки

и т.д.) является окном со своими собственными правами и является

дочерним окном родительского окна, которое породило его, Обычно

окна диалога. В общем, как оказалось, есть такая ситуация, когда

это не так. В Windows есть тип окна, который он использует в

некоторых своих приложениях, который называется SDM окно, что

расшифровывается как standard dialog manager (стандартный

диспетчер диалога). В SDM окне органы управления не являются

дочерними окнами родительского диалога, и на самом деле, вообще

не являются отдельными окнами. Поэтому у них нет своих ручек.

Это делает невозможным написание скриптов, чтобы получать о них

информацию, используя стандартные методы, используемые для

других органов управления. Например, в общепринятом диалоге,

если вы хотите получить информацию об органе управления, на

котором в данный момент находится фокус, вы можете

воспользоваться вложенным оператором функции, как, например,

GetWindowSubtypeCode (GetFocus ()). GetFocus () передаст ручку

окна, в данный момент содержащего фокус функции GetWindowSubtypeCode ()

а эта функция затем возвратит код подтипа органа управления, в

настоящий момент содержащего фокус. Таким способом вы можете

узнать, является ли текущий орган управления кнопкой,

раюиокнопко, слайдером, блоком проверки или другим типом органа

управления. Но это просто не будет работать в SDM окнах,

поскольку его органы управления просто не имеют уникальных

ручек. Поэтому в Jaws входят некоторые специальные функции,

которые вы увидите в приложении C и которые используются для

получения информации об органах управления в SDM окне.

 

Ну а как мы узнаем, что имеем дело с SDM окном? Ну, по крайней

мере, это-то легко. Вы всегда можете воспользоваться горячей

клавишей Jaws Ctrl+Insert+F1, чтобы получить некоторую

информацию об окне, на котором вы в данный момент

сфокусировались, и один из пунктов, который вы получите, это

класс окна. SDM окна всегда имеют в своих именах буквы SDM.

Например, если вы вызовете диалог открытия файлв в Microsoft

Word и нажмете CTRL+Insert+F1 на органах управления в этом

диалоге, вы обнаружите, что большинство из них имеют имя класса

окна bosa_sdm_Microsoft Word 8.0. Вы также заметите, что все

органы управления с этим именем также имеют одну и ту же ручку

(window handle). Это ручка самого диалога открытия, и таким

образом, в самой по себе в ней нет никакой пользы, в

предоставлении информации о конкретных органах управления. Тогда

как же получать такую информацию? Специальные функции в Jaws,

которые предназначены для того, чтобы делать это, основываются

на том факте, что органы управления в SDM диалоге имеют

уникальный контрольный идентификатор, даже если у них нет

уникальной ручки окна. Используя этот уникальный контрольный

идентификатор в комбинации с ручкой окна диалога, можно получить

информацию об органах управления SDM диалога. Например, две из

специальных SDM функций, приведенных в приложении C, это

SDMGetCurrentControl и SDMGetNextControl. Первая из них

возвращает контрольный идентификатор органа управления, на

котором находится активный курсор, а вторая сообщит контрольный

идентификатор следующего органа управления в SDM диалоге. Таким

образом, если вы хотите получить более подробную информацию о

текущем или следующем органе управления в SDM диалоге, он может

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

двух этих функций с одним из других специальных SDM утверждений,

чтобы сообщить дополнительную информацию об органе управления.

Например, такое утверждение показано ниже.

 

SDMSayControl (GetFocus (), SDMGetCurrentControl ())

 

Функция SDMSayControl озвучит орган управления в SDM диалоге, но

мы хотим, чтобы она сообщила, какой. Чтобы сделать это,

потребуются два параметра. Первый, GetFocus, заставляет функцию

получить ручку текущего активного SDM диалога. Второй параметр,

SDMGetCurrentControl, сообщает функции, что нам нужен

контрольный идентификатор органа управления SDM, на котором мы

сейчас находимся. Таким образом, эта функция озвучит имя и

другую информацию об органе управления SDM, на котором мы

находимся в данный момент в SDM диалоге. Другими словами, мы

можем вычислить уникальный орган управления, сообщив Jaws и

ручку SDM диалога, на который мы ссылаемся, и контрольный

идентификатор органа управления, который нас интересует. Две этих

частей информации, взятые вместе, оказывается достаточно, чтобы

сообщить Jaws, о каком органе управления в SDM диалоге мы хотим

узнать. Другие SDM функции, приведенные в приложении C,

предоставляют другие опции для идентификации органов управления

в SDM диалогах.

 

Арифметические операторы

 

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

в скриптах классические арифметические операции. Этими

операторами являются минус, или дефис, для вычитания, плюс для

сложения, слэш для деления и знак звезды для умножения. Эти

операторы обычно используются на целочисленных переменных и

целых числах. Утверждения, как показано ниже, иллюстрируют, как

можно использовать эти операторы.

 

Let IntVar = IntVar + 1

(это увеличит целочисленную переменную, которая называется

IntVar на 1)

Let IntVar = FirstVar * SecondVar

(это устанавливает, что IntVar равняется FirstVar, умноженная на

SecondVar)

SayString (MyConstant + "YourConstant)

(это озвучит содержание двух констант, Myconstant и

YourConstant, как если бы это было одно сообщение).

 

Логические операторы

 

Логические операторы используются для сравнения переменных с

другими переменными или константами. Нам часто бывает необходимо

знать, имеет ли объект то же значение, меньшее значение или

большее значение, чем другой объект. Иногда необходимо сравнить

несколько объектов или группу объектов, с другими объектами.

Логические операторы обычно используются внутри циклов if-then и

While, чтобы решить, являются ли условия, необходимые для

логических решений, истинными или ложными. Ниже приводится

список логических операторов Jaws.

 

== - два знака равенства подряд спрашивают, является ли первое

условие равным второму условию. То есть, является ли выражение

слева от двух знаков равенства эквивалентным выражению справа.

Например, выражение (A == B) спрашивает, является ли A равным B.

 

!=- восклицательный знак и знак равенства - спрашивает, является

ли первое условие неравным второму условию. То есть, является ли

выражение слева от восклицательного знака и знака равенства

отличным от выражения справа. Например, выражение (A!= B)

является истинным, если A не равно B.

 

< - знак "меньше" спрашивает, является ли первое условие меньше

второго условия. То есть, является ли выражение слева от знака <

меньше, чем выражение справа. Таким образом, выражение (A < B)

является истинным, если если A меньше B.

<= - знак "меньше", после которого следует знак равенства,

спрашивает, является ли первое условие меньшим или равным

второму условию. То есть, является ли выражение слева от <=

меньшим или равным выражению справа. Таким образом, выражение (A

<= B) будет истинным, если A меньше или равно B.

 

> - знак "Больше" - спрашивает, является ли первое условие

больше второго условия. То есть, является ли выражение слева от

знака > больше, чем выражение справа. Таким образом, выражение

(A > B_ является истинным, если A больше B.

 

>= - знак "Больше", после которого следует знак равенства,

спрашивает, является ли первое условие большим или равным, чем

второму условию. То есть, является ли выражение слева от >=

большим либо равным выражению справа. Таким образом, выражение

(A >= B) будет истинным, если A будет больше или равно B.

 

&& - этот оператор помещается между двумя логическими

сравнениями, которые производятся с использованием таких

логических операторов, как те, которые были описаны выше. Он

спрашивает, является ли первое условие верным "и кроме того"

является ли верным второе условие. Выражение в целом оценивается

как истинное только в том случае, если сравниваемые элементы по

обеим сторонам оператора && являются истинными. Таким образом,

в выражении (A == B) && (C!= D), значение истины возвращается

только в том случае, если A равно B, а C не равно D.

 

|| - этот оператор помещается между двумя логическими

сравнениями, которые производятся с использованием логических


Дата добавления: 2015-11-04; просмотров: 14 | Нарушение авторских прав







mybiblioteka.su - 2015-2024 год. (0.086 сек.)







<== предыдущая лекция | следующая лекция ==>