Программирование, изучаемое в базовом школьном курсе информатики и ИКТ, носит исключительно декларативный характер. Это связано с ничтожным количеством часов, отводимых на изучение этой тематики и абсолютной несостоятельностью изучаемых языков (за исключением Visual Basic и некоторых современных языках, изучаемых исключительно в профильных учреждениях).
Полное отсутствие учебников именно для базового курса также не способствует достижению приемлемого результата.
На данной странице будет предпринята попытка обобщить только ту информацию, которая используется во всех без исключения языках высокого уровня.
Вместе с тем, в некоторых случаях приводится подборка из нескольких языков, чтобы не была упущена важная идея, которая отсутствует в некоторых случаях.
Оператор | Название оператора | Пример операции | Результат |
= | Присваивание | с = с + 1 | Увеличение значения x на 1 |
+ | Сложение | x = 2 + 5 | x = 7 |
- | Вычитание | x = 2 - 5 | x = -3 |
* | Умножение | x = 2 * 5 | x = 10 |
^ | Возведение в степень | с = 2^3 | x = 8 |
/ | Деление | x = 2/5 | x = 0,4 |
\ | Целая часть от деления | x = 2\5 | x = 0 |
Mod | Остаток от деления (modulo of division) | x = 2 Mod 5 x = 10 Mod 4 |
x = 2 (5*0+2) x = 2 (4*2+2) |
& | Конкатенация (слияние) строк. Может использоваться для соединения данных разного типа в символьный |
x = "2" & "5", либо x = "2" + "5" либо x = "2" & 5 |
x = "25" |
В отличие от других операторов, присваивание может быть использовано в строке только один раз, в связи с чем во многих случаях для него используется предварительное двоеточие: Unit:=wdCharacter.
В Visual Basic двоеточие служит для оформления нескольких строк в одну. Зачастую это не только делает текст более компактным, но и помогает быстрее его понять:
x(1,1) = "Иванов" : x(1,2) = "Иван" : x(1,3) = "Иванович" : x(1,4) = "01.01.1980"
Оператор | Название оператора | |
== | Равенство, в отличии от присвоения | |
=== | Идентичность или строгое совпадение | |
< | Меньше | |
> | Больше | |
<= | Меньше или равно | |
>= | Больше или равно | |
<> | Не равно | |
Оператор | Название оператора | |
AND | И. Означает, что оба соединяемых выражения должны быть истинны | |
OR | ИЛИ. Хоть одно из выражений истинно | |
XOR | Исключающее ИЛИ. Только одно из выражений должно быть истинно | |
NOT | НЕ. Ставится перед логическим выражением, значение которого меняется на противоположное |
В математике принято обозначать переменные символами латинского алфавита. Для программирования такой подход неприемлем. Помимо того, что число переменных в большой программе может составлять несколько сотен, придется очень постараться, чтобы разобрать (запомнить), что описывает переменная «f» или «r». (Данное обозначение использовалось в учебных целях для сокращения слов Find и Replace, что, конечно же, является безобразием с точки зрения именования.)
Имена переменных в большинстве языков программирования подчиняются примерно одинаковым правилам.
О последнем пункте следует поговорить особо.
Если назвать переменную «CV», то она мало отличается от шарады. Название «CurrentValue» позволит определить, что переменная содержит текущее значение вычислений или иной обработки информации. Но, что крайне важно, ничего нельзя сказать о типе хранящихся данных, а, значит, и о том, какими методами с ней нужно (можно) работать. Наоборот, «intCurrentValue» содержит в начале своего имени явное указание на целочисленное значение.
Такие правила присвоения имен получили название венгерская нотация и имеют как сторонников, так и противников. Более подробную информацию можно прочитать в Википедии, однако не стоит забывать, что уже через несколько месяцев «плохое» название придется восстанавливать с огромными трудностями. А просьба совета у другого человека может превратиться в оскорбление.
Итоговый совет один: придерживаться одинаковых правил, которые кажутся понятными и разумными. Ведь речь идет не о профессиональном программировании, а создании продуктов для облегчения собственной жизни.
Типы данных могут значительно отличаться в зависимости от среды программирования и/или используемой версии языка. Но некоторые из них используются повсеместно без каких-либо изменений и особенностей.
А поскольку правила обработки информации в зависимости от типа практически применимы только для разработки баз данных или программирования, множество вопросов остается вне понимания учащихся.
Хотя типов данных (точнее программных переменных, в которых данные хранятся) довольно много, можно выделить наиболее важные группы, имеющие общие правила обработки.
В квадратных скобках указан размер в байтах. Кроме указания на место, занимаемое в памяти, для многих типов это определяет возможный диапазон значений. Так, 2 байта для целых чисел дают 22*8 (65536) значений. Но один бит используется для указания знака, что ограничивает диапазон значений 215 (до ±32768).
Если для числовых данных и, соответственно, переменных арифметические действия являются само собой разумеющимися, то для других типов обычно возникают некоторое непонимание. Разрешить его вполне можно с помощью логических рассуждений.
Символьные данные обычно используются в операции сложения, когда нужно собрать из кусочков выражение. Все участвующие фрагменты должны быть только символьного типа.
Сложение символов обычно вызывает только одну трудность: учет стыковочных пробелов. С одной стороны, пробелы не появляются сами по себе (и два слова могут склеиться). С другой, наличие множества пробелов в конце первого фрагмента также должно быть учтено (иначе возникнет большой пробел между фрагментами).
Логические данные полностью подчиняются законам алгебры логики.
Дата может вычитаться из даты (разница в днях), либо к ней можно прибавить целое число (будущая дата) или вычесть целое число (дата в прошлом).
В связи с вышеизложенным, для того чтобы выполнить над данными определенные действия, во многих случаях необходимо произвести изменение (преобразование) их типа.
Во всех языках программирования существует большое число функций, предназначенных для преобразования одного типа данных в другой. Необходимость этого связана с тем, что многие действия можно производить только над данными одного типа. Например, нельзя сложить число 10 и строку из двух цифр: "20". Если первое превратить в строку, то результат будет представлять собой четырехсимвольную строку "1020". Наоборот, преобразовав "20" в число и опять сложив их, получим число 30.
В других ситуациях просто предполагаются разнообразные математические операции над числами, а результат нужно вывести в виде строки, снабженными поясняющими словами. Например, обработали число 5 и получили число 120. Чтобы собрать строку: "Из числа 5 получен результат 120!", нужно провести преобразование чисел и их сложение с текстом:
"Из числа" + Str(5) + "получен результат" + Str(120) + "!"
В большинстве языков программирования для положительных чисел мы получим строку, в начале которой стоит пробел, а для отрицательных – дефис.
Для того, чтобы избавиться от этого пробела, можно использовать одну из двух функций Trim(<эстрока>) или Ltrim(<эстрока>).
Следует четко понимать, что любой текст, взятый из документа изначально будет набором символов, даже если они представляют собой цифры.
Для осуществления ветвления программ используются два основных оператора: If... Else... End If и Case...
По существу, оператор следует переводить как Если... Иначе... Конец If.
Первичным следует считать использование так называемого неполного If. В этом случае не используется часть Else.
If <ээээээээээээээээээээээээ
ээээм образом, блок команд будет выполнен только когда будет истинным условие, заданное на входе оператора.
Пример, в котором переменная памяти x будет уменьшена в 10 раз, только если она превысила значение 10:If x > 10 Then x = x/10 End If
Чаще встречается случай, когда нужно обработать данные одним из двух способов в зависимости от условия:
If <ээээээээээээээээээээээээээээээээээээээээмер, в котором переменная памяти x возводится в квадрат, если она отрицательна, а иначе – в куб (ноль также будет возводиться в куб):
If x < 0 Then x = x^2 Else x = x^3 End If
Замечание. В некоторых языках окончание записывается слитно: EndIf.
Так как чрезвычайно часто встречается ситуация, когда единственное назначение условного оператора – изменение переменной памяти по условию, все развитые языки содержат функцию IIf(). Она решает названную задачу в гораздо более компактном виде.
Пример, в котором переменной х присуждается нулевое значение, если она отрицательна и единица во всех остальных случаях.:
x = IIf(x < 0, 0, 1)
Недостаток функции заключается в том, что она всегда вычисляет оба значения (и для истинного и для ложного случая), а, значит, работает сравнительно медленнее. Также, в некоторых случаях подобные вычисления могут приводить к делению на ноль, если программист не предусмотрит этого заранее.
Данный оператор может иметь два варианта синтаксиса. В первом случае в начале конструкции производится вычисление какого либо выражение, значение которого проверяется на соответствие несколько раз:
Select Case проверяемое выражение Case значение1 действия1 [Case значение2 [действия2]] ... [Case Else [действия для других случаев]] End Select
Именно этот вариант используется в VBA.
В других случаях расчеты и проверка осуществляется для каждого случая, что позволяет задавать разнообразные выражения. (В этом синтаксисе оператор соответствует If–ElseIf.)
Select Case Case проверяемое выражение1 действия1 [Case проверяемое выражение2 [действия2]] ... [Case Else [действия для других случаев]] End Select
Организация циклов в программах встречается довольно часто и применяется для двух основных случаев: когда нужно повторить фрагмент программы определенное количество раз и когда это повторение осуществляется до тех пор, пока выполняется некое условие.
Классический образец цикла для случаев, когда известно, сколько раз он должен быть повторен, либо это можно вычислить.
Общий синтаксис:
For счетчик = start To end [Step шаг] [программа] [Exit For] [программа] Next [счетчик]
В приведенном ниже примере находится произведение четных чисел (шаг = 2) от 2 до введенного пользователем значения y. Если произведение превысит 1 трлн., то произойдет выход из цикла. Нетрудно убедиться, что i достигнет только 24, а y будет равен 1,961,990,553,600.
Dim i as Byte, x As Double, y As Integer x = 1 y = InputBox() For i = 2 To y Step 2 x = x * i If x > 1000000000000 Then Exit For End If Next i
Один из важнейших в программировании циклов, завершение которого определяется выполнимостью условия. Таким образом, число итераций цикла может быть от нуля до бесконечности.
Общий синтаксис:
While <ээээээээээээээээээээ
ээээвие является обязательным и может представлять собой символьное или числовое выражение, анализ которого возвращает истинное или ложное значение (то есть логическое). Если результатом вычисления будет значение Null, то оно расценивается как ложное.
Тело цикла выполняется при истинном значении условия, вплоть до оператора Wend, а затем вновь возвращается на строку While для повторной оценки условия. Если оно истинно, то происходит повтор тела цикла. Иначе происходит завершение цикла и исполнение программы продолжается со строки, идущей после Wend.
Цикл While может быть вложенным.
Обратите внимание, что принудительного выхода из цикла нет: только анализ исходного условия! Для того, чтобы его реализовать, следует воспользоваться циклом Do...Loop.
Данный цикл в том или ином виде используется в большинстве языков программирования и исполняется, пока истинно условие (While) или пока условие не будет достигнуто (Until)
Общий синтаксис:
Do {While|Until} <эээээээээээээээээээээээээээээээээээээээээээээ
Do [тело цикла] [Exit Do] [продолжение тела цикла] Loop {While|Until} <ээээээээ
эээинтаксиса следует, что условие можно задать в конце. Тогда цикл будет обязательно исполнен хотя бы один раз.
Число команд Exit Do внутри тела не ограничено и обычно реализуется через ветвление с использованием If...Then. При таком завершении, исполнение программы продолжается со строки, идущей после Loop.
Не являясь циклом, данная конструкция позволяет существенно сократить исходный код, повысив его читабельность.
Она предназначена для случаев, когда объектные выражения с одинаковым началом (нередко довольно длиным) повторяются много раз.
Понятно, что в следующем примере речь идет о поиске – всё, что внутри конструкции – строки которого не нужно выискивать в программе. Фраза «Selection.Find» записана только один раз. Все строки, которые должны получить её в начало, следует начинать с точки.
With Selection.Find .ClearFormatting .Replacement.ClearFormatting .Text = "?" .Replacement.Text = "!" ... End With
Без With это выглядело бы так:
Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting Selection.Find.Text = "?" Selection.Find.Replacement.Text = "!" ...
Функции представляют собой подпрограммы, выполняющие некоторую обработку информации и всегда возвращающие результат этой обработки. Функция – классический пример вспомогательного алгоритма. Именно функции обладают наиболее выраженным свойством массовости, так как многократно используются при решении большого и разнообразного числа задач.
Вызов функций, как правило одинаковый:переменная = ИмяФункции([аргументы через запятую]).
Число аргументов может быть различным, что указывается в описании. Некоторые из них являются необязательными и их приводят в конце списка для удобства использования.
Порядок указания аргументов задается строго. Менять их местами нельзя! Если значение среднего аргумента опускается, то должна быть поставлена пустая запятая:
MsgBox("Сообщение", , "Заголовок").
Но! В описании функции может быть указано, что первый аргумент необязательный, а его значение присваивается по умолчанию (см. InStr()).
Тип каждого аргумента также задается достаточно строго и в большинстве случаев не может быть изменен.
Вместе с тем, многие функции могут не иметь аргументов вообще: Date(), так как обрабатывают определенную заранее системную информацию.
Ниже приведены некоторые наиболее часто используемые функции с их разбивкой по принципу типа обрабатываемой информации (в алфавитном порядке).
Символ | ASCII-код |
Табулятор | 9 |
Enter | 13 |
Esc | 27 |
Пробел | 32 (первый неслужебный знак) |
! | 33 (первый знак, который выводится на экран и на печать) |
Использование UDF (User Defined Function) позволяет намного расширить возможности языка программирования.
Линейное программирование предполагает последовательное исполнение программы. На начальных этапах программирования это кажется вполне достаточным.