Вы находитесь на странице: 1из 14

Мы начинаем увлекательное путешествие в мир программирования.

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

А что такое компьютер? Это и логбуки/ноутбуки и десктопы, которые стали обычным


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

S1 S2
LED

Что может делать этот компьютер? Не так уж и мало. Например, он может умножать
два числа. Это правда будут не произвольные числа, а только те которые мы сможем
закодировать с одним выключателем. Поскольку у выключателя всего два возможных
положения: включен и выключен, то такими числами будут 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
1 0 0
0 1 0
1 1 1

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


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

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

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

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

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

S1
LED
R 220 ohm

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

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

На языке арифметических действий она означает сложение:


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

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

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

INPUT OUTPUT
R1 NOT R1
1 0
0 1

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

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

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

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

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

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

в США в Европе

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

В качестве примера, можно посмотреть как реализован настоящий сумматор одного разряда,
например разряда единиц, т.е. сумматор чисел 0 и 1 в двоичной системе. Для этого надо
использовать два элемента «AND», один «XOR» и один инвертор «NOT»:
Здесь А, В входные величины, S разряд единиц полученной суммы, а P- значение десятков
полученной суммы А и В. Аналогичным образом строятся остальные элементы арифметико-
логического устройства ( arithmetic logic unit ) микропроцессоров и микроконтроллеров. По-
позже мы будем работать с такими сумматорами, при изготовлении делителей частоты.
А пока мы ознакомимся как реализованы эти операции в OpenOffice SpreadSheets и как их
можно использовать.

Откроем лист и запишем в нем в две строки следующие числа:

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

ЛОЖЬ ЛОЖЬ ЛОЖЬ ЛОЖЬ ИСТИНА ЛОЖЬ ЛОЖЬ ЛОЖЬ ЛОЖЬ


1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 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 таблицах (обязательная)
ВВЕДЕНИЕ В ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ 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 памяти

Пример декларирования:
Dem Prib3 As Integer
Или возможна такое декларирование, с помощью символа %.
Dem 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
5 6 7 8
2 = 32 2 = 64 2 = 128 2 = 256

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

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

Пример декларирования:
Dem Prib3 As Long
Или возможна такая декларирование, с помощью символа &.
Dem Prib3&
**********************************************************
Single 'это числа с плавающей запятой от 1.401298 x 10-45 до 3.402823 x 1038 . Т.е. это
'положительные числа от очень маленьких чисел до очень больших.
'Плавающая запятая означает произвольные десятичные дроби. На число
'процессор отведет тоже 4bytes памяти.

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

Пример декларирования:
Dem Prib3 As Double
Или возможна такая декларирование, с помощью символа #.
Dem Prib3#
**********************************************************
Float 'тоже используется для обозначения чисел с плавающей запятой (десятичных
'дробей)

Пример декларирования:
Dem Prib3 As Float
*******************************************
Boolean 'логическая величина. Может принимать только значения TRUE или
'FALSE; или тоже самое может быть записано как 1 и 0.

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

Пример декларирования:
Dem Prib3 As String
*******************************************
Object 'переменная обозначающая объект. Например объект SpreadSheet.

Пример декларирования:
Dem Prib3 As Object
*******************************************

Правило 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. Сделайте сами следующие 2 примера (задание
обязательное)

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

Пример 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”