КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Названия цветов 1 страница
Целочисленное представление Литералы Значение цветового типа в виде литерала состоит из трёх частей, представляющих собой числовые значения интенсивности трех основных компонент цвета: красного, зеленого и синего. Значение такого вида начинается с символа C и обрамляется одинарными кавычками. Числовые значения интенсивности компоненты цвета лежат в диапазоне от 0 до 255 и могут записываться как в десятичном, так и в шестнадцатеричном виде. Примеры: C'128,128,128' (серый), C'0x00,0x00,0xFF' (синий), C'0xFF,0x33,0x00' (красный). Целочисленное представление записывается в виде шестнадцатеричного или десятичного числа. Шестнадцатеричное число имеет вид 0xRRGGBB, где RR - значение интенсивности красной компоненты цвета, GG - зелёной, а BB - синей. Десятичные константы не имеют прямого отражения в RGB. Они представляют собой десятичное значение шестнадцатеричного целочисленного представления. Представление значений цветового типа в целочисленном виде и в виде шестнадцатеричных литералов очень удобно. Большинство современных текстовых и графических редакторов представляют информацию о содержании красной, синей и зелёной составляющих в выбранном значении цвета. Достаточно подобрать в редакторе нужный цвет и переписать выявленные таким образом числа в соответствующее представление значения цвета. Примеры: 0xFFFFFF (белый), 0x008000 (зеленый), 16777215 (белый), 32768 (зеленый).
Самым простым способом задания цвета является указание его названия в соответствии с таблицей Web-цветов. В этом случае значение цвета представляется словом, поставленным в соответствие цвету, например, Red - красный.
В памяти компьютера значения констант и переменных типа color занимают 4 байта. Пример использования такой переменной в программе: color Paint_1 = C'128,128,128'; // Переменной присвоено значение серого цвета color Colo = C'0x00,0x00,0xFF'; // Переменной присвоено значение синего цвета color BMP_4 = C'0xFF,0x33,0x00' // Переменной присвоено значение красного цвета
color K_12 = 0xFF3300; // Переменной присвоено значение красного цвета color N_3 = 0x008000; // Переменной присвоено значение зелёного цвета color Color = 16777215; // Переменной присвоено значение белого цвета color Alfa = 32768; // Переменной присвоено значение зелёного цвета
color A = Red; // Переменной присвоено значение красного цвета color B = Yellow; // Переменной присвоено значение желтого цвета color Colorit = Black; // Переменной присвоено значение черного цвета color B_21 = White; // Переменной присвоено значение белого цвета Тип datetime
Значение типа datetime - это значение даты и времени. Значения этого типа могут использоваться в программах для анализа момента начала или окончания каких-либо событий, в том числе выхода важных новостей, начала/конца рабочего дня и пр. Константы даты и времени могут быть представлены в виде литеральной строки, которая состоит из 6 частей, представляющих числовое значение года, месяца, даты (либо даты, месяца, года), часа, минуты и секунды. Константа обрамляется одинарными кавычками и начинается с символа D. Допускается использование усечённого значения: либо без даты, либо без времени, либо пустое значение. Диапазон изменения значений: от 1 января 1970 года до 31 декабря 2037 года. В памяти компьютера значения констант и переменных типа datetime занимают 4 байта. Значение представляет собой количество секунд, прошедших с 00:00 1 января 1970 года. Пример использования в программе переменной типа datetime: datetime Alfa = D'2004.01.01 00:00'; // Новый Год datetime Tim = D'01.01.2004'; // Новый Год
datetime Tims = D'2005.05.12 16:30:45'; // 12 мая 2005г. 16 час.30 мин.45 сек. datetime N_3 = D'12.05.2005 16:30:45'; // 12 мая 2005г. 16 час.30 мин.45 сек. datetime Compile = D''; // равнозначно D'[дата компиляции] 00:00:00' Объявление и инициализация переменных
Для того чтобы в ходе вычислений у программы не возникало вопросов, к какому типу данных принадлежит та или иная переменная, в MQL4 принято обязательное правило явно обозначать тип переменных в самом начале программы. Прежде чем переменная начнёт участвовать в каких-либо вычислениях, её необходимо объявить. Объявление переменной - это первое упоминание переменной в программе. При объявлении переменной указывается её тип. Инициализация переменной - это присвоение ей при её объявлении значения, соответствующего её типу. Любая переменная может быть инициализирована. Если явно не задано никакое начальное значение, то численная переменная инициализируется нулем (0), а переменная строкового типа инициализируется пустой строкой.
Объявление переменной может осуществляться в отдельной строке: int Var_1; // Объявление переменной в отдельной строке Эта запись означает, что будет использоваться переменная Var_1 (собственно объявление переменной) и тип этой переменной - int. Допускается объявление в одной строке нескольких переменных одного типа: int Var_1, Box, Comm; // Объявление нескольких переменных в одной строке Эта запись означает, что будут использоваться переменные Var_1, Box и Comm и тип этих переменных - int, то есть перечисленные переменные будут учтены программой как переменные целого типа.
Допускается инициализация переменных в рамках операторов: double Var_5 = 3.7; // Инициализация переменной в операторе присваивания Эта запись означает, что будет использоваться переменная Var_5 вещественного типа с начальным значением 3.7. Нигде в последующих строках программы тип переменных не указывается. Однако всякий раз, обращаясь к переменной, программа будет помнить, что эта переменная того типа, который указан при её объявлении. По ходу вычислений в программе значения переменных могут меняться, но тип переменных не изменяется.
Название переменной никак не связано с типом переменной, т.е. по названию переменной невозможно судить о её типе. Одно и то же название переменной в разных программах может быть использовано для переменных любого типа. Но в пределах одной программы тип любой переменной может быть объявлен только один раз. В ходе выполнения программы тип объявленной переменной не изменяется. Примеры объявления и инициализации переменных
Объявление переменных может осуществляться в нескольких строках или в одной строке. Допускается объявление нескольких переменных одного типа одновременно. В этом случае переменные перечисляются через запятую, а в конце строки ставится точка с запятой.
Объявление типа переменных производится один раз при первом упоминании переменной. При втором и последующих упоминаниях переменной её тип не указывается.
Допускаются объявление и инициализация переменных в операторах.
Операции и выражения
Чтобы понять, какое значение имеют в языке MQL4 операции и выражения, не требуется никаких особых аналогий. Практически это - то же самое, что операции и выражения в простой арифметике. Каждому человеку понятно что в записи f = n + m элементы f, n и m являются переменными, значки = и + являются знаками операций, а n + m - выражением. В предыдущем параграфе мы познакомились с необходимостью представления разных типов данных. Теперь нам предстоит разобраться в каких отношениях между собой эти данные могут находиться (квадратные метры по-прежнему нельзя складывать с яблоками). В MQL4 имеются естественные ограничения и правила использования операций в выражениях.
Понятия "операнд", "операция", "знак операции" и "выражение"
Операнд - это константа, переменная, элемент массива или значение, возвращаемое функцией (понятие "функция" рассматривается в разделе Функции, понятие "масив" - в разделе Массивы; на данном этапе обучения достаточно понимать под операндами уже известные нам константы и переменные). Операция - это действие, производимое над операндами. Знак операции - предопределённый символ или группа символов, предписывающие выполнить некоторую операцию. Выражение - последовательность операндов и знаков операций - запись в программе, вычисленное значение которой характеризуется типом данных. Виды операций
В языке MQL4 различают следующие виды операций: арифметические операции; операции присваивания; операции отношения; логические операции; побитовые операции; операция запятая; вызов функции. Операции применяются в операторах (см. Операторы), только при этом их использование имеет смысл и реализуется в программе. Возможность использования операций определяется свойствами операторов (если свойства оператора позволяют применять конкретную операцию, то её можно использовать, в противном случае использовать данную операцию нельзя). Использование операций за пределами операторов запрещено. Арифметические операции
К символам арифметических операций относятся следующие:
Операции присваивания
К символам операций присваивания относятся следующие:
Операции отношения
К символам операций отношения относятся следующие:
Логические операции
К символам логических операций относятся следующие:
Побитовые операции
Побитовые операции выполняются только с целыми числами. К побитовым операциям относятся следующие: Дополнение значения переменной до единицы. Значение выражения содержит 1 во всех разрядах, в которых значения переменной содержат 0, и 0 во всех разрядах, в которых значения переменной содержат 1.
Двоичное представление x сдвигается вправо на y разрядов. Сдвиг вправо логический, то есть освобождающиеся слева разряды будут заполняться нулями.
Двоичное представление x сдвигается влево на y разрядов; освобождающиеся справа разряды заполняются нулями.
Побитовая операция И двоичных представлений x и y. Значение выражения содержит 1 (ИСТИНА) во всех разрядах, в которых и x, и y содержат не ноль; и 0 (ЛОЖЬ) во всех остальных разрядах.
Побитовая операция ИЛИ двоичных представлений x и y. Значение выражения содержит 1 во всех разрядах, в которых x или y не содержат 0, и 0 - во всех остальных разрядах.
Побитовая операция "исключающее ИЛИ" (eXclusive OR) двоичных представлений x и y. Значение выражения содержит 1 в тех разрядах, в которых x и y имеют разные двоичные значения, и 0 - во всех остальных разрядах.
Операция запятая
Выражения, разделённые запятыми, вычисляются слева направо. Все побочные эффекты вычисления левого выражения могут возникать до вычисления правого выражения. Тип и значение результата совпадают с типом и значением правого выражения.
В качестве примера можно рассматривать список передаваемых параметров (будет рассмотрено далее).
Операторы и функции рассматриваются в разделах Операторы, Функции и в главе Операторы. Вызов функции Вызов функции подробно рассматривается в разделе Вызов функции. Вызов функции подробно рассматривается в соответствующем разделе. Операции над однотипными операндами
Если бы ученику начальной школы сообщили, что, решая задачу о количестве карандашей, он должен строить свои рассуждения на таких понятиях, как операнды, операции и выражения, он, наверное, счёл бы, что от него хотят невозможного. Глядя на символы операций, кто-то может решить, что программирование - некий таинственный, сложный процесс, доступный только избранным. На самом деле в программировании нет ничего сложного, достаточно лишь разобраться в сущности нескольких понятий. Чтобы в этом убедиться, рассмотрим несколько примеров.
Решение. Обозначим количество карандашей у Васи как переменную А, количество карандашей у Пети – как переменную В, а результат – через переменную С. Ответ будет таким: С = А + В В разделе Типы данных мы рассматривали варианты объявления переменных. Карандаши - это предметы, т.е. нечто такое, что в принципе может существовать в виде части (половина карандаша, например). Поэтому карандаши будем учитывать как действительные переменные, т.е. переменные типа double. Программный код можно записать, например, так: double A = 2.0; // Количество карандашей у Васи double B = 3.0; // Количество карандашей у Пети double C = A + B; // Общее количество В данном случае показательным моментом является применение операции "+" для нахождения суммы значений однотипных переменных. Типом значения выражения A + B будет тип тех переменных, которые составляют выражение, в данном случае - тип double. Аналогичным будет ответ для разности величин (на сколько больше карандашей у Пети, чем у Васи?): double A = 2.0; // Количество карандашей у Васи double B = 3.0; // Количество карандашей у Пети double C = B - A; // Разность действительных чисел Подобным образом используются и другие арифметические операции: double C = B * A; // Умножение действ. чисел double C = B / A; // Деление действительных чисел Аналогичные вычисления могут производиться и с целыми числами.
Решение. Обозначим количество ответов Васи как переменную Х, количество ответов Пети как переменную Y, а результат - через Z. В этом примере необходимо использовать тип целых переменных int, т.к. мы учитываем события, являющиеся целыми по своей сути (невозможно выйти для ответа полтора или полраза; сам ответ может быть плохим или хорошим, но в данном случае нас интересует только количество ответов). Решение задачи можно записать так: int X = 2; // Количество ответов Васи int Y = 3; // Количество ответов Пети int Z = X + Y; // Общее количество В случае вычисления разности, произведения и частного от деления целых чисел знак операции "-" используется так же просто: int X = 2; // Целое число int Y = 3; // Целое число int Z = Y - X; // Разность целых чисел int Z = Y * X; // Произведение целых чисел int Z = Y / X; // Частное от деления целых чисел С переменными типа string возникает несколько иная ситуация:
Решение. В MQL4 разрешено складывать значения строковых констант и переменных. В случае сложения переменных типа string строки просто приплюсовываются друг к другу в той последовательности, в которой они упоминаются в выражении. Нетрудно составить код программы, которая вычислила бы интересующий нас результат: string W1 = "Северный"; // Строка 1 Значением переменной Ans будет строка следующего вида:
Получилось несколько неказистое с виду, но в полной мере правильно образованное значение строкового типа. Разумеется, для практического использования в подобных случаях необходимо предусматривать пробелы и др. знаки пунктуации. Любые другие арифметические операции с переменными строкового типа запрещены: string Ans= W1 - W2; // Не допускается
Приведение типов
Приведение типов - это изменение (преобразование) типа значения операнда или выражения. Перед выполнением операций (кроме операций присваивания) происходит преобразование в тип, имеющий наибольший приоритет, а перед операциями присваивания - в целевой тип. Рассмотрим несколько задач, касающихся приведения типов.
Некорректность этого вопроса с точки зрения формальной логики очевидна. Здравый смысл нам подсказывает, что суммировать события с предметами нельзя, что это неправильно.
С одинаковой степенью безысходности (с точки зрения обычных рассуждений) мы можем задать любой из вопросов: 1. Сколько всего? 2. Что написано на доме? Чтобы правильно решить две последние задачи в рамках языка MQL4, необходимо обратиться к правилам приведения типов значений. Для этого необходимо указать, как переменные разных типов представлены в памяти компьютера. Типы данных int, bool, color, datetime и double относятся к числовому типу. Внутренним (машинным) представлением констант и переменных типов int, double, bool, color и datetime является число. При этом переменные типов int, bool, color и datetime представлены в памяти машины как целые числа, а переменные типа double - как числа двойной точности с плавающей точкой, т.е. действительные числа. Значением констант и переменных типа string является набор символов (рис. 16).
Выше указывалось, что значения переменных типов int, bool, color и datetime представлены в памяти машины как целые числа, а double - как действительные числа. Выясняя вопрос о типе выражения, в котором участвуют переменные разных типов, допустимо вести разговор только относительно трёх типов данных: int, double и string. Значения типов bool, color и datetime будут проявлять себя в выражении так же, как значения типа int. Итак, каким будет значение выражения, если его составляют операнды разных типов? В языке MQL4 принято правило неявного приведения типов:
Вернёмся к Задаче 4. Возможны два варианта решения. Вариант 4.1. Вычисляется результат целого типа: double A = 2.0; // Количество карандашей у Васи Прежде всего нам необходимо выяснить, каким будет значение выражения, если операнды имеют разный тип. В выражении: A + Y участвуют операнды двух типов данных: А - действительного типа double и Y - целого типа int. В соответствии с правилом неявного преобразования типов значением этого выражения будет число действительного типа double. Обратите внимание: мы говорим только о типе выражения A+Y, но не о типе переменной F, стоящей слева от знака операции присвоения. Значением этого выражения будет действительное число 5.0. Для определения типа выражения A+Y применена первая часть правила неявного приведения типов. После вычисления выражения A+Y исполняется операция присвоения. В данном случае также имеется несовпадение типов: тип выражения A+Y - double, а тип переменной F - int. В процессе выполнения операции присвоения: сначала тип выражения A+Y будет приведен к типу int (в соответствии с правилом вычисления целых чисел) и равен целому числу 5, а затем этот результат станет значением целой переменной F. Вычисления выполнены в соответствии со второй частью правила неявного приведения типов - приведения к целевому типу. Конечный результат вычислений и преобразований таков: значением целой переменной F является целое число 5. Вариант 4.2. Аналогичная ситуация возникает и в случае, если искать результат в виде значения действительного типа: double A = 2.0; // Количество карандашей у Васи Представленный случай отличается от предыдущего тем, что целевой тип переменной F (слева от знака операции присвоения), в данном случае - тип double, совпадает с типом double выражения A+Y, поэтому целевого преобразования типов не происходит. Результатом вычислений (значением действительной переменной F) будет действительное число 5.0. Теперь посмотрим, каким будет решение Задачи 5. При инициализации переменных вопросов не возникает: string W1 = "Северный"; // Строка 1 Вариант 5.1. Допустимое решение задачи: string W1 = "Северный"; // Строка 1 Здесь в правой части складываются значения двух переменных, одна из которых имеет тип string, а другая - тип double. В соответствии с правилом неявного приведения типов значение переменной А сначала будет приведено к типу string (т.к. у этого типа более высокий приоритет), а после этого произойдёт сложение (конкатенация) однотипных значений. Типом вычисленного значения в правой части от знака операции присвоения будет тип string. На следующем этапе это значение будет присвоено строковой переменной Sum. В результате значением переменной Sum будет следующая строка:
Вариант 5.2. Такое решение является ошибочным: string W1 = "Северный"; // Строка 1 В данном случае нарушен запрет приведения к целевому типу значения типа string. Типом значения выражения W1+A, как и в предыдущем примере, является тип string. При исполнении операции присвоения должно быть произведено целевое приведение типа. Однако, в соответствии с правилом, целевое понижение типа string запрещено. Это - ошибка, которая будет обнаружена редактором MetaEditor на этапе создания программы (при компиляции). В целом, указанные правила понятны и просты: при вычислении любых значений происходит приведение к типу с более высоким приоритетом. Понижение приоритета при целевом приведении типа допустимо только для численных значений, а строки в числа не преобразовываются.
Дата добавления: 2014-12-29; Просмотров: 433; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |