Занятие 2.

 

Мы начинаем увлекательное путешествие в мир программирования.
Что такое программирование? В общем это написание инструкций для компьютера, которые он выполняет.

А что такое компьютер? Это и логбуки/ноутбуки и десктопы, которые стали обычным предметом нашей жизни. Это еще и бортовые компьютеры встроенные в современные самолеты, автомобили, исследовательские приборы и медицинские инструменты. Для многих современных приборов и устройств использование больших компьютеров невозможно. Вместо компьютеров в них применяются встроенные микроконтроллеры. Это можно сказать, упрощенные версии компьютеров, их родные братья. Головой компьютера является его микропроцессор. Это ему пишутся инструкции, которые он выполняет.
Что такое микропроцессор? Вообще-то, можно сказать, он является набором большого числа выключателей. Самый простой компьютер можно построить самим из обыкновенных выключателей, батарейки и светодиода с сопротивлением( или лампочки). Например, вы можете взять батарейку АА 1.5V, красный светодиод, сопротивление 220 Ом, и любые два выключателя.

 

Что может делать этот компьютер? Не так уж и мало. Например, он может умножать два числа. Это правда будут не произвольные числа, а только те которые мы сможем закодировать с одним выключателем. Поскольку у выключателя всего два возможных положения: включен и выключен, то такими числами будут 0 и 1. 0 -будет соответствовать положению выключен. А 1 -положению включен. Точно также и у светодиода (лампочки) есть только два состояния: включен и выключен. И опять мы можем присвоить состоянию выключен значение 0, а состоянию включен- 1. Теперь если S1=0 и S2=0, как на рисунке, то 0x0=0 и LED действительно не будет гореть и покажет нам 0. Легко проверить, что LED=0, т.е. не горит, и в случае если S1=1 и S2=0. И действительно 0х1=0. Аналогичный результат будет для S1=0 и S2=1. А вот S1=1 и S2=1 зажгут светодиод и LED=1=1x1.
«Да, но это только два числа 0 и 1. А как быть с остальными числами?»-спросите вы. Оказывается с помощью 0 и 1 можно закодировать любое целое число. В отличие от нашей десятичной системы, где есть основные цифры от 0 до 9, в этом случае будут использованы только цифры 0 и 1, и называется она поэтому двоичная (в ней роль нашей десятки будет играть 2). Например, число 2 в ней будет записано как 10, а число 3- как 11. Ведь 3=2+1, а 210 =102 . Поэтому 310 = 102+1 = 112 . Двоичную систему можно представить как систему счета в мире лошадей. У них по одному копыту на «руке». Как лошадь с помощью своих копыт могла бы сосчитать число 3? Сравните это с тем, как вы считаете с помощью пальцев число 11. Таким образом, для записи любого числа нам потребуется взять просто больше выключателей.
Но и это еще не все. С помощью той же схемы можно еще совершать логические действия, логические операции, делать логические выводы, решать логические задачи. В этом случае выключенные выключатель и светодиод имеют логическое значение «ЛОЖЬ». А включенные - «ПРАВДА» (или обычно пишут «ИСТИНА»).
Например, пусть светодиод LED означает, что «молодой человек поступил в университет». Переключатель S1 — означает «молодой человек успешно закончил школу», а S2 - «молодой человек подал заявление на поступление в университет». Легко видеть, что LED утверждение истинно («правда») только если истинны S1 и S2. В данном случае последовательное включение S1 и S2 реализует логическую операцию «И». Т.е. значение светодиода истинно (горит) когда S1 И S2 истинны (включены). Если же молодой человек не закончил успешно школу или не подал вовремя заявление в университет, то значение LED= FALSE.
Всевозможные комбинации состояний S1, S2 и LED можно представить в виде таблицы истинности операции И:

INPUT OUTPUT
S1 S2 S1 AND S2
0 0 0
0 1 0
1 0 0
1 1 1

Таким кодированием логических операций занимается Булева Алгебра (Boolean Algebra). И как видите, у нее много общего с двоичной системой. Вместе они создают базу работы любого компьютера.

В электронике элементы И обозначаются так:

 в Соединенных Штатах

 

в Европе


Конечно, кроме логической операции «И» или умножения существует еще ряд других основных операций. Всего таких операций 3: «И», «ИЛИ», «НЕ». В дополнение к ним есть другие операции, которые уже могут быть представлены в виде комбинаций этих трех основных. Одна из них операция «исключающая ИЛИ». По английски это AND, OR, NOT, XOR.
Операция «ИЛИ» реализуется с помощью следующей схемы:

 

Логически она означает, что LED покажет истину (“TRUE”), если или S1 , или S2 истинно.
Таблица истинности операции ИЛИ следующая:

INPUT OUTPUT
S1 S2 S1 OR S2
0 0 0
0 1 1
1 0 1
1 1 1

На языке арифметических действий она означает сложение:
0+0=0
1+0=1
0+1=1
, только нам надо помнить, что в двоичной системе отсчета 1+1=10.
В электронике такие элементы обозначаются как:

 в Соединенных Штатах

 

в Европе


Операция «НЕ» логически означает отрицание. Чтобы ее представить в виде выключателей, нужно использовать реле. Мы пока этого делать не будем. Её таблица истинности:

INPUT OUTPUT
R1 NOT R1
0 1
1 0

Принятые обозначения в схемотехнике:

 в Соединенных Штатах

 

в Европе

 


Таблица истинности операции XOR, очень похожа на таблицу OR, за исключением случая, когда S1=S2=1:

INPUT OUTPUT
S1 S2 S1 XOR S2
0 0 0
0 1 1
1 0 1
1 1 0


Соответствующие схемотехнические обозначения:

 в Соединенных Штатах

 

в Европе


В качестве примера, можно посмотреть как реализован настоящий сумматор одного разряда , например разряда единиц, т.е. сумматор чисел 0 и 1 в двоичной системе (показан на рисунке а). Для этого надо использовать два элемента «AND», один «XOR» и один инвертор «NOT» (устройство сумматора показано на рисунке б):

 

Здесь А, В входные величины, S разряд единиц полученной суммы, а P- значение десятков полученной суммы А и В. Аналогичным образом строятся остальные элементы арифметико-логического устройства ( arithmetic logic unit ) микропроцессоров и микроконтроллеров. По-позже мы будем работать с такими сумматорами, при изготовлении делителей частоты.


А пока мы ознакомимся как реализованы эти операции в OpenOffice SpreadSheets и как их можно использовать. Откроем лист (например, Sheet1) и запишем в нем в строку 4 , в ячейки А4, В4, С4.....H4, I4  ряд чисел от 1 до 7; а в строку 5, в ячейки А5, В5, С5.....H5, I5  числа от 9 до 3. У нас получатся две такие строки:


Теперь в ячейку А3 строки выше первого ряда цифр в ячейках А4 и А5, запишем функцию:
=AND(A4=A5; 1=1),
а затем скопируем в остальные ячейки третьей строки. Получится

 

Что мы сделали:
мы записали функцию AND которая сравнила истинность значений двух выражений- А4=A5 и 1=1. Второе выражение всегда истинно. Скопировав эту ячейку в другие, вместо A4=A5 мы получим в других ячейках B4=B5, C4=C5 и т.д. Таким образом, с помощью функции AND мы найдем колонку, в которой значения цифр первой цифровой строки (строка номер 4) и второй строки (ее номер 5) равны.

Чтобы найти колонки в которых цифры первой строки больше 3, а второй меньше 6, надо задать следующую функцию:
=AND( A4 > 3; A5< 6)
и скопировать ее в остальные ячейки строки 3. Получится


Если мы захотим найти колонки в которых цифры или первой или второй строки меньше 3, то надо использовать функцию:
=OR( A4 < 3; A5<3)

 


Домашние задания

1. Собрать электрическую схему устройств «И» и «ИЛИ». Используйте сопротивление любое от 100 ом до 300 ом , батарейку от 1.5V до 3V. Если у вас зеленый светодиод, то лучше брать батарейку 3V. Например две батарейки АА соединенных последовательно, т.е плюс одной соединен с минусом другой, а выходы подключены как на рисунке. В качестве выключателей можете использовать просто куски провода с зачищенными концами. Чтобы их замыкать, просто скручивайте, а размыкать- просто разомкните . Также учащиеся могут придумать и сделать выключатели своих конструкций.


2. Придумать свои две задачи на использование функций
=AND(....;.....) и = OR (.....;....)
в OpenOffice таблицах


 

Занятие 3.

 ВВЕДЕНИЕ В ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ BASIC.

ЧТО ТАКОЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ. ЧЕМ ОТЛИЧАЕТСЯ КОМПИЛЯТОР ОТ ИНТЕРПРЕТАТОРА.

 

Для написания инструкций микропроцессору используются несколько разных систем команд. Эти системы отличаются правилами написания команд, правилами организации программ, правилами общения с памятью и другими программами, и называются языками программирования. Их стали называть языками, потому что они предназначены для общения с микропроцессором. Языки программирования делятся на языки высокого и низкого уровня. Откуда пошло такое деление языков? Дело в том, что процессор вообще-то понимает только так называемые машинные коды. Машинные коды- это наборы двоичных чисел, с помощью которых кодируются разные инструкции для процессора. Но написание таких инструкций очень неудобно для человека. Поэтому были разработаны языки низкого уровня, которые записывают те же самые двоичные коды только в более удобном для человека виде, с использованием слов. К языкам низкого уровня относится Assembler. Мы с ним познакомимся, когда начнем программировать микроконтроллеры для наших роботов. Но со временем, появились еще более удобные для человека языки- языки высокого уровня. К ним относятся BASIC, C++, Python и ещё очень большой ряд других языков исунок ниже иллюстрирует историю развития языков программирования до 2004 года)

Как вы догадываетесь, всё, что написано на языке более понятным человеку, требуется перевести на язык машинных кодов. Сделать это можно двумя способами, и это очень напоминает, как люди переводят с одного языка на другой. Первый способ, выслушать всю речь или прочитать весь рассказ, я затем перевести всё на другой язык, но уже зная смысл всего текста, и стараясь перевести, как можно точнее, именно смысл, учитывая принятые обороты речи и целые выражения, и находя им эквиваленты на другом языке. Аналогом таких выражений и языковых оборотов речи в программировании являются различные объекты, подпрограммы и функции. Эти подпрограммы и функции могут быть описаны, автором программы непосредственно в самой программе ( эту основную программу ещё называют исходными кодами (source code), так и другими авторами в других программах. Обычно внешнюю программу, содержащую набор функций или программ, называют библиотекой. Когда исходные коды переводятся на язык машинных кодов, то к ним подключаются все эти внешние библиотеки, внутренние функции и подпрограммы. Такой процесс перевода называется компиляцией (compilation), а язык на котором написана такая программа, и который осуществляет перевод, называется компилятором (compiler). С и C++ пример компиляторов.

При втором способе перевода, каждое предложение сразу переводится не дожидаясь, когда речь закончится или весь рассказ будет прочитан. В программировании аналогом является перевод каждой завершенной командной строки. Такой перевод называется построчной интерпретацией (interpretation), а язык интерпретатором (interpreter). Примером интерпретатора является Python.

Basic тоже имеет стадию компиляции: сначала программа должна быть полностью написана, а затем к ней должны быть присоединены необходимые библиотеки, подпрограммы и функции. В тоже время при компиляции перевод в машинные коды идет построчно. Поэтому BASIC- построчный интерпретатор (command-line interpreter). Это очень важно помнить. Любая команда должна занимать только одну строку. В случае если команда очень длинная, то можно воспользоваться знаком переноса underscore symbol « _ ».

Кроме командных строк, в Basic есть строка комментарий. Она не воспринимается процессором и нужна только, чтобы помнить/знать особенности программы через длительное время после написания программы. Строка комментарий начинается или знаком одиночная кавычка ( '), или словом REM.

 

'All characters that follow an apostrophe are treated as comments:

Dim A ' This is a comment for variable A

'The keyword Rem, followed by the comment:

Rem This comment is introduced by the keyword Rem.

 

 

С ЧЕГО НАЧИНАЕТСЯ ПРОГРАММА В BASIC

Любая программа в Basic начинается строкой (PROGRAM_NAME — обозначает имя вашей программы)

Sub PROGRAM_NAME

А заканчивается строкой:

End Sub

 

Внимание: Basic различает заглавные и маленькие буквы только в малом числе случаев, когда вы используете специальные команды из специальных библиотек. Во всех остальных случаях он их не различает. Например, End Sub, end sub, END SUB для него означают одно и то же.

 

Программа- это набор инструкций для микропроцессора. Что означают инструкции для микропроцессора? Они определяют преобразования, которые микропроцессор должен совершить над двоичными числами. Физически эти двоичные числа могут означать самые разные вещи: просто числа, адреса ячеек памяти, коды операций над числами. Но для микропроцессора- это просто преобразования двоичных чисел, аналогично тому, как это делалось с десятичными числами, когда вы задавали преобразования в SpreadSheets.

Поэтому и написание программы схоже с тем, как вы задавали преобразования в SpreadSheets. Только теперь перед вами нет таблицы с ячейками. Вам лишь надо указать имена для величин, функций, переменных и параметров, написать уравнения согласно правилам Basic. Т.е. надо написать только ту информацию, которую вы в SpreadSheets писали для себя, а не для компьютера, а уж Basic сам позаботится как перевести это на язык двоичных адресов ячеек и двоичных команд, понятных микропроцессору. Но при одном дополнительном условии. Эти ваши записи-инструкции должны быть понятны Basic, а потому должны соответствовать правилам Basic.

ПРАВИЛО 1: Точно также, как и в SpreadSheets, перед тем как задать функцию, вам надо задать значения области определения и параметры преобразования. В Basic это называется декларированием переменных (variable declaration). В обычных компиляторах декларирование записывается в самом начале программы, но в Basic допускается и в любом другом месте. ГЛАВНОЕ, ДЕКЛАРИРОВАНИЕ ПЕРЕМЕННЫХ ДОЛЖНО БЫТЬ ПЕРЕД ТЕМ, КАК ВЫ ИХ НАЧНЕТЕ ИСПОЛЬЗОВАТЬ, НАПРИМЕР В КАЧЕСТВЕ ПЕРЕМЕННЫХ ФУНКЦИИ.

 

ОСНОВНЫЕ ПРАВИЛА ДИКЛАРИРОВАНИЯ ПЕРЕМЕННЫХ

  • Имена переменных, или маркеры, должны содержать только латинские буквы, цифры или нижний прочерк/underscore (“_”)

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

  • Имя не должно содержать специальных знаков, например таких ä â î ß.

  • Максимальная длина имени 255 знаков.

  • Basic не отличает заглавные от строчечных букв.

  •  Markers can only contain Latin letters, numbers, and underscores (_).

  •  The first character of a marker must be a letter or an underscore.

  • Markers cannot contain special characters, such as ä â î ß.

  • The maximum length of a marker is 255 characters.

  • No distinction is made between uppercase and lowercase characters.

 

Примеры правильных имён:

pribor

m

m4

aAa

_Strt

First_Name

 

Примеры неправильных имён:

First Name

DéjàVu

5Strt

First,Name

 

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

 

ПРАВИЛО 2. ЖЕЛАТЕЛЬНО НАЧИНАТЬ ДЕКЛАРИРОВАНИЕ СЛОВОМ Dim .

 

ПРАВИЛО 3. ПРИ ДЕКЛАРИРОВАНИИ ВЫ ДОЛЖНЫ КРОМЕ ИМЕНИ УКАЗАТЬ ТИП ПЕРЕМЕННОЙ.

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

 

Integer 'это целые числа от-32768 до 32767, что означает на число процессор

'отведет 2bytes памяти

 

Пример декларирования целых чисел:

Dim Prib3 As Integer

Или возможна такое декларирование, с помощью символа %.

Dim Prib3%

**********************************************************

Что такое бит (bit) и байт (byte)

 

Вы уже знаете, что процессор понимает только двоичные числа, и что с помощью двоичных чисел можно закодировать десятичные числа, буквы и все другие знаки клавиатуры. В микропроцессоре двоичные числа записываются с помощью переключателей аналогичных тем, что использовали вы для элементов И и ИЛИ. Только переключатели микропроцессора в сотни тысяч раз меньше. Например для записи числа 101 потребуется 3 переключателя. Каждый переключатель будет отвечать только за свой разряд в этом трехзначном числе. Например, первый переключатель будет отвечать за разряд единиц. Второй- за разряд десятков. Третий- за разряд сотен. Тогда, чтобы записать 101, надо первый и третий переключатели включить, а второй выключить. Бит это информация, которая может быть записана только одним переключателем. Т.е. бит может принимать значение или 0, или 1. А для записи числа 101 нам нужно 3 бита. 8 последовательных бит информации образуют байт. Например, чтобы записать восьмизначное число 11001100 нам потребуется один байт. Бит обозначается маленькой буквой «b», а байт большой «B».

Биты и байты могут быть записаны не только с помощью переключателей. Они могут быть записаны с помощью ячеек памяти. Ячейкой памяти, например, может быть обычный стакан. Если в нем есть вода, то это будет означать 1. Если он пустой- то это будет 0. В микропроцессоре, контроллере, флэшке тоже есть ячейки памяти. Только это не стаканы, а конденсаторы, и заполняются они не водой, а электрическим зарядом. Каждая ячейка памяти компьютера- это тоже один бит информации. Когда говорят, что RAM память компьютера 6GB, то это означает, что его оперативная память содержит 6х109х8= 4.8x1010 ячеек памяти.

Как перевести обычное десятичное число в двоичное? Очень просто. Для этого надо знать что такое степенная функция (число в некоторой степени) и вспомнить, что такое десятичная запись чисел. Например, у нас есть число 17. Мы можем записать, через степени числа 10:

17= 1*10+7.

Про это число мы скажем, что у него цифра 1 в разряде десятков (разряд десятков это 101 ), а цифра 7 в разряде единиц (разряд единиц это 100 ).

Если же теперь мы его запишем через степенную функцию числа 2, то получим:

17= 16 +1=2*2*2*2+1= 24+1= 1*24+1=1*24+0*23+0*22+0*21+1

Эта запись означает что в двоичной системе у числа 17 будет 1 в разряде десяти тысяч, нули в разрядах тысяч, сотен и десятков, и 1 в разряде единиц. Поэтому число десятичное число 17 равно двоичному числу 10001.

 

Аналогично может поступить с любым другим числом. Например возьмем десятичное число 241:

241=2*102+4*101+1, т.е. в разряде сотен ( 102 ) у него 2, в разряде десятков ( 10) у него 4, а в разряде единиц у него 1 (что можно записать как 1* 100 ).

Но если мы запишем его через степени числа 2, то получим

241=1*28+1*27+1*26+1*25+0*24+0*23+0*22+0*21+1*20

поэтому 241 в десятичной записи равен 11110001 в двоичной : 241|10=11110001|2

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

20= 1;  21= 2;  22= 4;  23= 8;  24= 16

25= 32;  26= 64;  27= 128;  28= 256

 

Также можно пользоваться калькулятором для перевода из десятичной системы в двоичную:

 

Для этого откройте калькулятор на вашем компьютере (через Start меню в левом нижнем углу экрана вашего компьютера). Откройте в нем View и отметьте Programmer. После этого слева отметьте Dec (означает Decimal- десятичная запись) и запишите исходное число в десятичной системе. Ниже поля с вашим числом, вы видите группы из четырех цифр. Сами цифры или 0, или 1. Это двоичная запись вашего числа. Ниже этих двоичных цифр есть цифры 0, 15, 31, 32, 47, 63 которыми помечены разряды двоичной записи. Двоичную запись вашего числа можно посмотреть выбрав Bin (binary) вместо Dec.

*******************************************

Long Integer    'это целые числа от –2147483648 до 2147483647, что означает на

'число процессор отведет 4bytes памяти

 

Пример декларирования:

Dim Prib3 As Long

Или возможна такое декларирование длинных целых чисел, с помощью символа &.

Dim Prib3&

**********************************************************

Single 'это числа с плавающей запятой от 1.401298 x 10-45 до 3.402823 x 1038 . Т.е. это

'положительные числа от очень маленьких чисел до очень больших.

'Плавающая запятая означает произвольные десятичные дроби. На число

'процессор отведет тоже 4bytes памяти.

 

Пример декларирования:

Dim Prib3 As Single

Или возможна такое декларирование, с помощью символа !.

Dim Prib3!

**********************************************************

Double 'это числа с плавающей запятой от 4.94065645841247 x 10-324 до '1.79769313486232 x 10308. Практически для наших задач, это положительные 'числа от «почти» 0 до «почти» бесконечности. На число процессор отведет '8bytes памяти.

 

Пример декларирования:

Dim Prib3 As Double

Или возможна такое декларирование, с помощью символа #.

Dim Prib3#

**********************************************************

Float 'тоже используется для обозначения чисел с плавающей запятой (десятичных 'дробей)

 

Пример декларирования:

Dim Prib3 As Float

*******************************************

Boolean 'логическая величина. Может принимать только значения TRUE или 'FALSE; или тоже самое может быть записано как 1 и 0.

 

Пример декларирования:

Dim Prib3 As Boolean

*******************************************

String ' означает, что переменная принимает значения текстовых характеров, таких как 'буквы, знаки переноса и др знаки клавиатуры. Обратите внимание что на 'клавиатуре есть знаки цифр. Если вы их присвоите STRING переменной, это 'будет не цифра, а текстовый знак. Например математические операции будут с 'ним не возможны. С его помощью можно будет только составлять тексты !!! 'String переменные нужны чтобы создавать и печатать тексты, записывать 'адреса ячеек с помощью getCellRangeByName(“ “ )

 

Пример декларирования:

Dim Prib3 As String

*******************************************

Object 'переменная обозначающая объект. Например объект SpreadSheet.

 

Пример декларирования:

Dim Prib3 As Object

*******************************************

Существуют и еще ряд типов переменных, которыми мы пока пользоваться не будем. Например, Date для данных о дате и времени; Currency для данных о деньгах.

 

 

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

Когда переменной присваивается значение, говорят, что она определена. Мы пока остановимся на полном определении переменной. Полное определение переменной включает в себя: 1) ее декларирование (Explicit Variable Declaration ) и 2) присваивание ей значения (Specification of Explicit Number or Explicit String).

Примеры полного определения различных переменных:

 

Dim oVarIn As Integer

Dim oVarSngl As Single

Dim oVarSngl2!

Dim oStrng As String

oVarIn = 9

oVarSngl=0.587E3

oVarSngl2=23.5

oStrng= “First String” 'когда вы присваиваете значение string , то сам стринг/текст пишется

'в кавычках.

 

ПРИМЕРЫ ПРОГРАММ

Пример 1 (см. видео Занятие 7, часть2 и часть3 на NashKlich

https://youtu.be/7cAH4Cet43k

https://youtu.be/y1nqdgsdQfM


 

REM ***** BASIC *****

Sub Rotate

 

Dim n As Integer

Dim m As Integer

Dim Sheet0 As Object

 

Sheet0= ThisComponent.Sheets(0)

For m=1 To 20

For n=10 To -10 Step -1

Sheet0.getCellRangeByName("E3").value=n

Wait 1000

'MsgBox(Sheet0.dbg_properties)

'MsgBox(Sheet0.dbg_methods)

Next n

Next m

 

End Sub


Пример 2(создайте модуль сами, запишите программу и выполните её):


 

Sub oSampl1

 

Dim oVarIn As Integer

Dim oVarSngl As Single

Dim oVarSngl2!

Dim oStrng As String

oVarIn = 9

oVarSngl=0.587E1

oStrng= "First String" 'когда вы присваиваете значение string , то сам стринг/текст пишется

'в кавычках.

MsgBox(oStrng)

MsgBox("I write string")

oStrng=oStrng & ". I make addition to string" 'обратите внимание на оператор & который

'позволяет добавлять стринги друг к другу

MsgBox(oStrng)

oVarIn = oVarIn +14

MsgBox("new value of oVarIn: " & oVarIn)

oVarSngl2= oVarSngl*100

MsgBox(oVarSngl2)

oVarIn= oVarSngl

MsgBox("new value of oVarIn: " & oVarIn)

 

End Sub


 

Задание 2 .

Напишите сами программу, которая выдаст сначала сообщение

Hello”

Затем используйте стринг этого сообщения и с помощью оператора &, добавьте к нему дополнительный стринг, чтобы получилось второе сообщение
”Hello. I can do it”

 

 

 

Занятие 4.

ОПЕРАТОРЫ В VISUAL BASIC

На занятии 2, вы познакомились с логическими операциями AND, OR, NOТ, XOR. В Basic как и в других языках тоже используются логические операции, которые записывают с помощью аналогичных логических операторов:
AND
OR
XOR
NOT
EQV -этот оператор означает логическое равенство или эквивалентность выражения слева от знака EQV выражению стоящему справа от этого знака.
IMP -этот оператор означает Implication (if the first expression is true, then the second must also be true). Мы его пока использовать не будем.

Кроме логических операторов, в Basic используются операторы сравнения:
= - это обычный знак равенства, и как обычно, это знак означает равенство стоящего справа от него стоящему слева.
< > - это знак неравенства. Т.е. он говорит, что стоящий справа от него НЕ РАВЕН стоящему слева.
> - это знак больше. Он говорит, что стоящий слева от него БОЛЬШЕ стоящего справа.
>= - это знак больше или равен. Он говорит, что стоящий слева от него больше БОЛЬШЕ или РАВЕН (другими словами не меньше) стоящего справа.
< - знак меньше. Он говорит, что стоящий слева от него МЕНЬШЕ стоящего справа.
<= - это знак больше или равен. Он говорит, что стоящий слева от него МЕНЬШЕ или РАВЕН (другими словами не больше) стоящего справа.

Есть также хорошо вам известные математические операторы:
+ сложение
-  вычитание
* умножение
/ деление
^ возведение в степень.
Два других математических оператора, которые мы пока не будем использовать:
\ целая часть от деления, и
MOD остаток от деления.

Для сложения (добавления) стрингов (текстов), используется оператор :
& -этот оператор вы использовали ранее при программировании MsgBox сообщений.


ВЕТВЛЕНИЕ В VISUAL BASIC

Вы знаете сказки, когда богатырь стоит перед камнем на распутии дорог и думает куда ему пойти. А надпись на камне говорит, что если он на право пойдет -то коня потеряет; если налево — то с жизнью распрощаешься, а по средней пойдешь- с Кощеем повстречаешься. Это пример ветвления, который тоже используется в программировании. В Visual Basic используются следующие ветвления по условию:
1. Ветвление по условию  If. . . Then. . . Else

Пример:
If A < 5 Then
B = 6
Else
B = 1
End If
В этом примере если А меньше 5 то B=6, c во всех остальных случаях B=1 (т.е. если А больше или равно 5, то B=1 ).
Обратите внимание, ветвление по условию, кончается

2. Ветвление по условию   Select. . . Case

Пример:
Select Case DayOfWeek
Case 1:
NameOfWeekday = "Sunday"
Case 2:
NameOfWeekday = "Monday"
Case 3:
NameOfWeekday = "Tuesday"
Case 4:
NameOfWeekday = "Wednesday"
Case 5:
NameOfWeekday = "Thursday"
Case 6:
NameOfWeekday = "Friday"
Case 7:
NameOfWeekday = "Saturday"
End Select

В этом примере существует переменная DayOfWeek. Елси она равна 1, то другой переменной NameOfWeekday присваивается стринг «Sunday”. Если она рава 2, то присваивается «Monday”. И так далее до ”Sunday”.
Ветвление по выбору заканчивается командой End Select.

При моделировании шкалы Нониуса и вращении отрезка вы уже сталкивались с периодическим повторением. В жизни вы можете найти очень много других примеров периодических событий. Например, стрелки часов регулярно повторяют свое движение по кругу, стартуя с 12 и проходя по очереди 1,2,3,4 и далее до 11, и далее завершая полный оборот вставая на 12. А затем все повторяется сначала. Вы ходите в школу- это другой пример периодического, или другими словами повторяющегося движения. Причем, вы ходите в школу в рабочие дни недели, а в выходные эта периодичность нарушается. Колебания маятника- еще один пример периодического/повторяющегося движения.


ЦИКЛЫ В VISUAL BASIC


Для программирования таких повторяющихся явлений существуют циклы. По английски они называются cycles или loops:
1. Цикл For. . . Next


Пример:
Dim n As Integer

For n = 1 To 10

''''''''Здесь располагаются коды которые будут циклично выполняться'''''''
''''''''при этом переменная n увеличивается на 1 по выполнению каждого цикла'''''

Next n


2. Пример с немного другой формой записи For....Next:

Dim n As Integer

For n = 1 To 10 Step 2

''''''''Здесь располагаются коды которые будут циклично выполняться'''''''
''''''''при этом переменная n увеличивается на 2 по выполнению каждого цикла'''''

Next n


3. Пример с выходом из цикла по выполнению условия (условие может быть любым. Пусть это будет условие k<n).

Dim n As Integer
Dim k As Integer
k=20

For n = 1 To 10
k=k-4

''''''''Здесь располагаются другие коды которые будут циклично выполняться'''''''
''''''''при этом переменная n увеличивается на 1 по выполнению каждого цикла,'''''
''''''''а переменная k уменьшается на 4 за каждый выполненный цикл'''''''''''''''''''''''''

If k<n Then
Exit For ''''''''выход из цикла как только k станет меньше n
End If

Next n

 

2. Цикл Do While. . . Loop
Пример:

Do While A > 10

'''''''''''''''Здесь располагаются другие коды которые будут циклично выполняться'''''''
''''''''''''Например это может быть A=A+1 и тогда А растет на 1 после каждого цикла'''

А=A+1
Loop

 

3. Цикл While . . . Wend
Пример:
While A > 7
A=A+2
' '''''''''... здесь пишутся команды которые будут выполняться пока А больше 7''''''''''''''''''''''''''
Wend

 



А теперь рассмотрим конкретные коды:
Сначала откроем новый SpreadSheets файл.

Открываем Organize Dialogs... в Macros :

 

Затем открываем Modules. На этой страничке выделяем левой клавишeй мышки любой модуль, например Module1 и нажимаем на кнопку New ( если вы уже это делаете повторно и у вас уже есть модуль нужный вам , то жмите на Edit).


В появившемся окне напишите имя нового модуля GreenCell :


У вас опять появятся Modules с новым, только что созданным модулем GreenCell. Выделите его с помощью левой клавиши и нажмите теперь на кнопку Edit:


Теперь у вас появится следующий экран с новой программой Sub Main:

 

Программа «Бегающая зеленая ячейка»


Удалите Sub Main и End Sub. А вместо них скопируйте и вставьте нижеследующий код, начиная с Sub GreenCell до End Sub включительно:


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub GreenCell
Dim Sheet0 As Object
Dim oCells As Object
Dim oList As Object

Dim n As Integer
Dim m As Integer
Dim k As Integer
Dim a As Single
Dim b As Single
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
REM this part of the subrouting will clean certain praramters in the certain cells
''''Set Sheet which will be used for this program.
''''Remember the first Sheet1 in OpenOffice has position index number of 0 !!!!!
''''So, our Sheet0 and Sheets(0) are related to the Sheet1 of the open SpreadSheet''''''''''''''''''''
Sheet0= ThisComponent.Sheets(0)

''''''''''Set Cells which will be cleaned'''''''''''''''''''''''''
oCells=Sheet0.getCellRangeByName("A1:L26")

'''''''''''Set parameters (strings, values, formulas and hardattr) of cells that will be erased''''''''''''''''''''''
Flags=com.sun.star.sheet.CellFlags.STRING + com.sun.star.sheet.CellFlags.VALUE + com.sun.star.sheet.CellFlags.HARDATTR + com.sun.star.sheet.CellFlags.FORMULA

'''''''''''clean selected parameters of the selected cells''''''''''''''''''''''''''''''''
oCells.clearContents(Flags)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
REM This part of program is creating the running green cell

MsgBox("Push ""OK"" to start program")

For k=0 to 1 '''set number of cycles
'''''clean the variable b'''''''''''''
b=0

For m=0 to 3 ''''this cycle sets the raw coordinate of the running cell

'''''clean the variable a'''''''''''''
a=0

For n=0 to 5 step 1 ''''this cycle sets the column coordinate of the running cell

''''getCellByPosition(x,y) points to the cell, which is located at the intersect of column x with raw y.
''''remember the first column and first raw in OpenOffice have index of 0.
''''RGB(0,128m0) and RGB(38,229,38) are codes of the green color'''

Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(38,229,38)

Wait 300
''''''Clean the green color of the cell
Sheet0.getCellByPosition(3+a,5+b).CellBackColor=RGB(255,255,255)

''''''create new column coordinates of the green cell
a=a+1
Next n
''''''create new raw coordinates of the green cell
b=b+1
Next m
Next k

MsgBox("The End")
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''



После этого откройте Sheet1 в SpreedSheets. Затем откройте Tools/Macros/Run Macro

 

В появившимся окне Macro Selector, откройте My Macros/Standard/GreenCell и нажмите на кнопу Run:

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

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

Сообщение говорит, что есть синтаксическая ошибка (т.е. написано не по правилам) и поясняет, что появился не к месту символ CRLF (carriage returns and line feeds- перенос строки и знак окончания строки). Ошибка вам сразу станет понятной, если вы вспомните, что в Basic все команды должны занимать только одну строку. Стрелка же указывает на команду, присваивающую значение переменной Flags, которая заняла две строки. Исправить это легко. Как вы помните, в Basic есть знак переноса строки « _ », который надо поставить в конце строки после знака « + ». Правильно будет так:
Flags=com.sun.star.sheet.CellFlags.STRING + com.sun.star.sheet.CellFlags.VALUE + _
com.sun.star.sheet.CellFlags.HARDATTR + com.sun.star.sheet.CellFlags.FORMULA

И исправленные коды станут такими:


После того, как вы исправите эту ошибку, ваша программа должна заработать.
Те же коды не содержащие ошибки можно скопировать из текстового GreenCell_codes.txt , который прилагается. Чтобы было легче копировать, можно, открыв текстовый файл, выделить весь текст с помощью одновременного нажатия клавиш CTRL и A (такое одновременное нажатие пары клавиш обозначается обычно так: CTRL+A). После этого нажимаете две другие клавиши: CTRL+C. Затем указав мышкой место в вашем модуле, куда хотите поместить эти коды, нажмите одновременно две другие кнопки CRTL+V. После этого сохраните всё с помощью CTRL+S, и можно запускать программу.