Основы программирования

 
 

Разработка программ достаточно сложное дело. И сложность заключается в том, что человеку пытающемуся программировать, необходимо поменять способ мышления. Разработка программ требует навыков разложения любого процесса на последовательность этапов, что весьма трудно сделать человеку, который с детства привык мыслить образами. Поэтому обучение программированию требует от человека значительных усилий.

Разработка программы включает три этапа:

· Разработка алгоритма

· Написание программы на языке программирования

· Отладка программы

На первом из них необходимо разделить процесс решения задачи на последовательность этапов с учётом типовых процедур, используемых в языках программирования: присваивание, циклы и условные операторы. Это один из самых творческих и трудных этапов. Наиболее известным способом изображения алгоритма является блок схема. Блок – схема это графическое изображение алгоритма. Основными элементами блок схем являются следующие.

Линейный блок
Условный блок
Цикл
Подпрограмма
Да
Нет

Описание алгоритма с помощью блок схем имеет следующие преимущества.

· Алгоритм не зависит от языка программирования

· Процессы описываются более наглядно

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

· С помощью блок схем удобно описывать сложные алгоритмы

Широкое распространение блок схемы получили при процедурном программировании, когда программы создавались в виде единого модуля довольно большого размера. С переходом к объектно – ориентированному программированию роль блок схем снизилась, так как вместо одного большого модуля программы, программисту приходится писать много небольших фрагментов реализующих отклики на события происходящие с объектами. И в дальнейшем все примеры будут рассматриваться применительно к объектно ориентированному подходу. Но прежде рассмотрим пример описания алгоритма с помощью блок схемы.

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

Начало
Заданы: не отсортированный массив чисел Аn, где n число элементов
Fl=False
i = 1 до n-1
T=Ai , Ai = Ai+1, Ai+1 = T
Ai < Ai+1
Fl=False?
Fl= True
Завершить расчёт

Эта блок схема описывает следующие действия. Предполагается, что в памяти имеется массив чисел А, содержащий n неупорядоченных чисел. Далее, устанавливаем переменную Fl (флажок) в состояние False (Ложь). Эта переменная регистрирует: были ли произведены обмены данными при просмотре массива чисел. Следующий блок организует цикл по перебору чисел массива от 1 до n-1. Далее следует проверка: i-е число меньше i+1 го. Если да, то i-й и i+1 – й элементы нужно поменять местами, что делается в следующем блоке. В противном случае переходим к следующему элементу массива. Если обмен элементов имел место, то флажок F1 устанавливаем в значение Истина (True). После завершения цикла, когда просмотрены все элементы массива, проверяем значение F1. Если оно равно значению Ложь (False), сортировка закончена. Иначе цикл повторяется. После выполнения алгоритма числа в массиве будут отсортированы в убывающем порядке.

На языке Basic этот алгоритм будет выглядеть так.

Dim n As Integer, i As Integer T As Integer

Dim A(n) As Integer

Dim F1 As Boolean

NewCicl:

F1= False

For i= 1 To n-1

If A(i) < A(i+1) Then

T=A(i)

A(i)=A(i+1)

A(i+1)=T

F1=True

End If

Next

If F1= True Then GoTo NewCicl

….

….

Более подробно язык Basic рассматривается в приложении 11. Однако здесь вкратце рассмотрим основные параметры языка, а затем особенности его использования в объектно ориентированном программировании. В общем, любой язык программирования состоит из 5 групп операторов:

1. Операторы описания или декларирования переменных;

2. Операторы присваивания;

3. Условные операторы;

4. Операторы цикла;

5. Операторы описания процедур и функций.

Операторы описания переменных имеют дело с переменными. Переменная это поименованное место в памяти компьютера, предназначенное для временного хранения данных. Переменная характеризуется уникальным именем и типом. Уникальность имени заключается в том, что оно не должно повторяться в программе, в которой определена. Тип переменной показывает, какие данные будут храниться в переменной. По типу переменной определяются операции, которые могут над ней производиться. Так над переменными, описанными как числовые (целые, с плавающей точкой, денежные), могут выполняться все арифметические операции; над переменными типа даты могут выполняться операции вычитания одной даты из другой, вычитание и сложение даты с целым числом; над символьными переменными могут выполняться операции объединения (конкатенации) и разъединения текстов. Переменные играют роль записной книжки при проведении сложных расчётов.

Операторы присваивания позволяют заносить в память переменных различные значения. Синтаксис оператора следующий:

<переменная> = <выражение>

Знак равенства это и есть оператор присваивания. Он читается как - присвоить значение. Действие его следующее: сначала вычисляется выражение стоящее справа от знака присваивания, затем полученное значение переносится в переменную слева от него. В процессе выполнения оператора могут возникать различные ситуации. Так, если переменной имеющей тип с плавающей точкой мы присвоим целое число, то в процессе выполнения оператора будет выполнено неявное преобразование формата числа. Однако, если переменной целого типа будет присвоено значение числа с плавающей точкой, оператор выдаст ошибку, так как непонятно, куда девать дробную часть числа. С другой стороны, числовой переменной можно присвоить символьное значение, если оно содержит набор цифровых символов и знаки. Но для этого нужно использовать явное преобразование.

Условные операторы позволяют выполнять ту или иную группу операторов в зависимости от значения некоторого выражения. Синтаксис оператора для языка Basic следующий:

If <условное выражение> Then

<1 я группа операторов>

Else

<2 я группа операторов >

End If

Оператор выполняется следующим образом. Вычисляется условное выражение, если его результат –«Истина», то выполняется первая группа операторов, иначе вторая. Оператор может иметь сокращённые формы. Например, такие.

If <условное выражение> Then

< группа операторов>

End If

If <условное выражение> Then < группа операторов>

И в том и в другом случае, если условное выражение – «Истина», то выполняется группа операторов, иначе следующие операторы. Условный оператор существует во всех языках высокого уровня. Например, в C# он имеет следующий синтаксис.

if (<условное выражение>)

{ Блок операторов 1}

else

{ Блок операторов 2}

Как видно они очень похожи.

Операторы цикла позволяют повторять одну и ту же группу операторов несколько раз с разными параметрами. Существует несколько типов операторов цикла. Здесь рассмотрим один из них. Это цикл For с заданным числом повторений. За остальными отсылаю к приложению 11. Рассмотрим простейший пример цикла.

For i = 1 To 10

MsgBox (i)

Next i

Операторы For и Next обозначают начало и конец цикла, i – это управляющая переменная цикла, которая может принимать значения от 1 до 10 с шагом 1. MsgBox (i) это оператор, который выводит на экран значение переменной i. Вместо него могут располагаться несколько операторов, которые будут выполняться для разных значений управляющей переменной. Если значения i нужно менять с шагом 2, фрагмент кода цикла будет выглядеть так.

For i = 1 To 10 Step 2

MsgBox (i)

Next i

Кроме этого типа цикла используют циклы с предусловиями и циклы с постусловиями. Приведу пример первого из них.

А = 1

While А < 10

А = Int(Rnd() * 20)

MsgBox А

Wend

Цикл начинается с ключевого слова While (пока) и заканчивается Wend. Семантика цикла такова. В начале цикла проверяется условие. В данном случае это А < 10. Если оно выполняется, а это действительно так – А в предыдущем операторе установлено равным 1, то выполняются операторы тела цикла. Эти операторы должны включать действия связанные с изменением переменных, входящих в условие. В примере это получение случайного числа от 0 до 1 оператором Rnd(), умножение его на 20 и преобразование в целое число. А так же вывод на экран получившегося числа А (оператор MsgBox А). Если в процессе выполнения тела цикла образуется А больше или равно 10, то цикл будет завершён. Цикл с постусловием имеет тот же смысл, но условие завершения цикла проверяется не в начале, а в конце цикла. Синтаксис цикла поясняется следующим примером.

Dim var_A

Do

var_A = InputBox("Введите число")

Loop Until IsNumeric(var_A)

Здесь объявлена переменная типа variant, которая может принимать данные любого типа. Цикл начинается ключевым словом Do (выполнить) и заканчивается выражением Loop Until, за которым следует условное выражение. Если результат вычисления условного выражения ИСТИНА, то цикл завершается, иначе повторяется снова. В примере в качестве условного выражения используется функция IsNumeric(var_A), которая проверяет – является ли введённый текст числом. Если да, то цикл заканчивается, иначе запрос на ввод числа повторяется. Функция InputBox("Введите число") выводит на экран подсказку и ждёт ввода данных. После завершения ввода, введённое значение присваивается переменной var_A.

Подпрограммы содержат операторы, которые так же могут выполняться многократно, но только при обращении к подпрограмме. Обращение к подпрограмме может быть выполнено из любой части программы. Особенностью подпрограмм является то, что при обращении к подпрограмме в неё передаются параметры. Параметры, как правило, представляют собой список переменных разных типов, значения которых используются в подпрограмме для расчётов. Параметры заданные при описании подпрограммы называются формальными, а параметры определённые для обращения к подпрограмме – фактическими. Подпрограммы делятся на процедуры и функции. Процедуры это подпрограммы, которые обмениваются данными с вызывающей программой только через параметры. Функции это подпрограммы, которые получают значения через параметры, а возвращают только одно значение, как правило, описанное переменной, являющейся именем функции. Приведу пример процедуры.

Public Sub UserInput(UserNumber As Integer)

MsgBox _

("Здравствуйте, вы пользователь № " + _

Str(UserNumber))

End Sub

Здесь Sub и End Sub начало и конец процедуры, UserInput - имя процедуры, а UserNumber As Integer – описание переменной формального параметра. А модификатор доступа Public означает, что эту процедуру можно вызвать из любого модуля проекта. Существуют и другие модификаторы доступа, в частности, Private. Он дает доступ к процедуре только из того модуля, где она объявлена. Обращение к процедуре может выглядеть так UserInput (1). В результате такого обращения оператор в теле процедуры выведет на экран сообщение: Здравствуйте, вы пользователь № 1

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

Public Function Square(num_One As Double) As Double

Square = num_One ^ 2

End Function

Здесь Function и End Function начало и конец описания функции, Square имя функции, num_One As Double описание переменной формального параметра. В отличие от процедуры здесь появляется описание типа функции As Double, то есть имя функции рассматривается как переменная с плавающей запятой двойной точности. Поэтому в теле функции появляется оператор, который присваивает имени функции результат возведения в квадрат параметра функции. Обращение к функции может выглядеть так.

Dim mum_Rez As Double

mum_Rez=Square(2.3)

Одной из важнейших особенностей подпрограмм, как процедур, так и функций является то, что область «видимости» переменной ограничено подпрограммой. То есть переменная, если она не объявлена с модификатором Public, за пределами подпрограммы недоступна. Это позволяет использовать процедуры и функции для решения автономных задач. Особенно наглядно это проявляется при рекурсивном использовании функций. Например, нужно вычислить факториал числа А=n!, что равнозначно А=1*2*3*….*n. Вычисление факториала можно реализовать следующей рекурсивной функцией.

Function Factorial(n As Integer) As Integer

If n=1 Then

Factorial = 1

Else

Factorial = n* Factorial(n -1)

End If

End Function

Для проверки работы функции обратимся к ней с помощью выражения A= Factorial(4). Обращение к функции приводит к последовательному выполнению выражений

Factorial = 4* Factorial(3)

Factorial = 3* Factorial(2)

Factorial = 2* Factorial(1)

При последнем обращении функция вернёт Factorial = 1 и далее в обратном порядке.

В настоящее время процедурное программирование практически не встречается. Ему на смену пришёл объектно-ориентированный подход к разработке программ (см. приложение 7). Практически все продукты MS Office используют этот подход для программных реализаций. Программирование в среде MS Office хотя и является объектно-ориентированным, но носит упрощённую форму. Существуют среды для профессиональных программистов, принципы которых изложены в приложении 9. Далее коснусь основных методов объектно-ориентированного подхода в MS Office. Их основы подробно излагаются в приложении 10.

В отличие от процедурного программирования объектно-ориентированный подход к разработке программ предполагает не программную реализацию алгоритма, а написание фрагментов программных кодов, обслуживающих объекты. Под объектом понимается либо некоторое экранное изображение, несущее функциональную нагрузку, либо программный код, описывающий логически завершённую совокупность действий. Их принято называть элементами управления (ЭУ). Каждый элемент управления имеет набор свойств, которые характеризуют его вид; данные, которые он отражает, а так же набор событий, которые с ним могут происходить. Кроме того с ЭУ связаны методы, которые выполняют стандартные действия с объектом. С точки зрения программной реализации каждый объект описывается специальной программой, которая называется классом. В классе описывается сам объект, его свойства и методы. Большинство существующих программных систем построено с помощью классов. При этом классы представлены в виде откомпилированных программ, собранных в файлах называемых библиотеками программ. В системах программирования MS Office установлены ссылки на эти библиотеки, благодаря чему может быть использован любой из классов библиотеки. В этих системах, в основном, используются классы созданные разработчиками. Однако можно создавать новые классы и добавлять их в библиотеку программ. Для профессиональных разработок фирмой Microsoft были разработаны хорошо структурированные библиотеки, которые были объединены в единый каркас среды разработки Framework.Net, рассмотренный в приложении 9.

Для работы с объектами используют объектные переменные. Они объявляются так же как и простые и служат для временного хранения объектов. Главным объектом при программировании в среде MS Office является Application (приложение). Этот объект имеет набор свойств и методов, принципы работы с которыми для Excel следующие.

Microsoft Office Excel - это популярные электронные таблицы. Обычно, программируя для этой программы, преследуют такие цели:

· Автоматизация вычислений.

· Автоматизация ввода и обработки информации.

· Работа с базами данных - вывод, ввод, анализ, визуализация информации.

· Анализ финансовой и другой информации.

· Создание систем для организации автоматизированного ввода данных

· Математическое моделирование.

В Excel рабочая область листа разбита на ячейки, каждая из которых имеет собственное имя. Имена ячеек могут быть двух видов.

· Первый вид (стиль A1) - это имя, состоящее из буквенного имени столбца и номера строки. Например, A1 - ячейка, находящаяся на пересечении столбца А (первого) и первой строки.

· Другой вид - это индексы ячеек (стиль именования R1C1). Для адресации ячейки в таком стиле указывают номер строки (R - Row - строка) и номер столбца (C - Column - столбец), на пересечении которых расположена ячейка. Строки изначально пронумерованы, а номера столбцов начинаются с 1 - первому столбцу соответствует столбец A, второму - В и т.д. Например, (2, 3) - это адрес ячейки, находящийся на пересечении второй строки и третьего столбца, то есть, если переложить это на стиль A1 - получим ячейку С2.


Для выполнения большинства операций в MS Excel применяются следующие объекты.

· Excel.Application (Приложение) - объект, представляющий приложение Microsoft Excel.

· Workbook (Рабочая книга) - представляет рабочую книгу - аналог документа Microsoft Word.

· Worksheet (Рабочий лист) - книга в MS Excel разбита на рабочие листы. Именно на листе расположены ячейки, которые могут хранить информацию и формулы.

· Range (Диапазон) - может быть представлен в виде одной ячейки или группы ячеек. Работа с листом удобна - чтобы работать с какой-либо ячейкой, надо знать лишь ее имя (в формате A1) или адрес (R1C1).

· QueryTable (Таблица запросов) - этот объект используют для импорта в Microsoft Excel информации из баз данных. Подключение к базе данных, запрос информации и т.д. производятся средствами объекта, а итоги запроса выгружаются на лист MS Excel в виде обычной таблицы.

· PivotTable (Сводная таблица) - это особый вид электронной таблицы Excel - она позволяет в интерактивном режиме обобщать и анализировать большие объёмы информации, в частности, взятой из базы данных.

· Chart (Диаграмма) - представляет собой диаграмму. Обычно их используют для визуализации данных.

В основном нам придётся иметь дело с объектом Excel.Application. Этот объект имеет следующие свойства:

· активные объекты - ActiveCell, ActiveChart, ActivePrinter, ActiveSheet, ActiveWindow, ActiveWorkbook

· наборы объектов и коллекции - Cells, Columns, Rows, Sheets, Workbooks, Worksheets, Names

Это только некоторые из свойств объекта Excel.Application. При использовании свойства отделяются от объекта точкой. Например, адрес активной ячейки даёт выражение Application.ActiveCell.Address. Смысл этого выражения следующий: объект – активная ячейка внутри объекта - приложение имеет свойство Address, которое возвращает адрес (номер строки и столбца) ячейки. Под активной ячейкой понимается ячейка выделенная пользователем. Так же понимается и свойство Value, но оно возвращает значение, а не адрес ячейки. Использование этих свойств показано в следующем примере:

MsgBox ("В ячейке с именем " + Application.ActiveCell.Address + " хранится значение " + Application.ActiveCell.Value)

ActiveCell.Value = InputBox("Введите новое значение для ячейки " + ActiveCell.Address)

Как видно из примера, указанные свойства могут участвовать в выражениях, как справа, так и слева от знака присваивания. К наиболее распространённым свойствам объектов в Excel относятся Range (интервал), Cells (ячейки), Columns(столбцы), Rows(строки), Sheets(страницы). Эти свойства возвращают соответствующие наборы объектов и коллекции. Определим их основное предназначение.

· Cells, Columns, Rows - возвращают наборы объектов Range, содержащие, соотвественно, ячейки, столбцы, строки. При вызове этих свойств можно указывать, какие именно объекты нужно возвратить, а можно, вызвав без параметров, получить все объекты нужного вида.

· Sheets, Worksheets - возвращают коллекции, которые содержат листы активной книги. В коллекции Sheets будут содержаться листы, которые содержат диаграммы и обычные листы, а в коллекции Worksheets - лишь обычные листы.

· Workbooks - возвращает коллекцию открытых книг.

· Names - возвращает коллекцию именованных диапазонов.

Рассмотрим более подробно объект Range.Обращение к нему возвращает ячейку или диапазону ячеек, указанных при его вызове. Собственно говоря, Range наряду с Cells - это основные инструменты для работы с ячейками листа. Например, так можно вставить число 4 в ячейку E1:

ActiveSheet.Range("E1") = 4

А такая конструкция позволяет прибавить по 1 к значению каждой из ячеек диапазона A1:K100

Dim MyCell As Variant

For Each MyCell In ActiveSheet.Range("A1:K100")

MyCell.Value = MyCell.Value + 1

Next

При использовании конструкции For-Each обход ячеек осуществляется по строкам.

Можно адресовать ячейку или диапазон ячеек, указав их адреса в стиле A1. Здесь и далее мы используем метод Select объекта Range, который выделяет ячейки

ActiveSheet.Range("A2").Select

Для обращения к диапазону ячеек нужно знать верхнюю правую и нижнюю левую границы диапазона. Например, для обращения к диапазону высотой в одну строку от A2 доE2 или к диапазону A2:E4 - понадобится такой код

ActiveSheet.Range("A2:E2").Select

ActiveSheet.Range("A2:E4").Select

Можно воспользоваться конструкцией с использованием объекта Cells, который позволяет обращаться к отдельной ячейке по ее индексу в формате R1C1. Чтобы обратиться к ячейке A5 таким способом, нужно заметить, что она расположена в пятой строке и первом столбце:

ActiveSheet.Cells(5,1).Select

Можно объединить использование Range и Cells, указав координаты ячеек при адресации диапазона с помощью Cells.

ActiveSheet.Range(Cells(5, 4), _

Cells(7, 5)).Select

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

For i = 1 To 3

For j = 1 To 3

ActiveSheet.Cells(i, j).Select

Application.Wait (Now + _

TimeValue("0:00:01"))

p = p + 1

Selection = p

Next j

Next i

ActiveSheet.Range("A1:E5").Clear

Здесь мы циклически выделяем ячейки диапазона A1:C3, делая задержку на 1 секунду после каждого выделения и выводя количество прошедших с начала работы программы секунд. Здесь мы воспользовались для выделения ячейки уже знакомым вам методом Select, а для ввода данных в выделенную ячейку применили объект Selection, который в данном случае ссылается на выделенную ячейку. В конце мы очистили диапазон A1:E5 от введенных данных.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: