Информатика. Учебное пособие
.pdf72
языке. Таким образом, для каждой цепочки (последовательности) символов синтаксис позволяет ответить на вопрос, является ли она текстом на данном языке или нет.
Семантика - это система правил истолкования отдельных языковых конструкций, позволяющих (при заданных исходных данных) однозначно воспроизвести процесс обработки данных по заданной программе.
Синтаксические правила показывают, как образуется данное понятие из других понятий и (или) букв алфавита, а семантические правила определяют свойства данного понятия в зависимости от свойств используемых в нем понятий. Более расширенно можно сказать, что алфавит алгоритмического языка состоит из фиксированного набора основных символов, причем часть этих символов является литерами*, а часть - определенными комбинациями литер, причем каждая из таких комбинаций имеет определенный (т.е. заранее фиксированный) смысл - так же, как и любой основной символ,
представленный литерой*.
Алгоритмический язык - формальный язык, предназначенный для записи алгоритмов. Он определяется заданием алфавита (словаря исходных символов), точным описанием его синтаксиса (грамматики) и семантики.
9.2. Разработка алгоритма решения задачи
Решение любой задачи предполагает обработку разнообразной информации о реальных объектах. Например, при решении задачи о начислении зарплаты сотрудникам фирмы объектами задачи могут быть:
табельный номер сотрудника, его фамилия, имя, отчество, оклад, отработанное
________________________________________
* Лúтера - элемент алфавита. Литера служебная, управляющая... Литера действует, задает что-либо (перевод строки, установку ...), разграничивает элементы данных... С разными аспектами обработки данных связаны различные классификации литер. К важнейшим классам относятся буквы и цифры. Служебная литера, разграничивающая элементы данных (например, знаки пунктуации, пробелы и др.), называется разделителем.
73
время и др. При решении системы алгебраических уравнений необходимой информацией являются значения коэффициентов уравнений и их правых частей.
Любая информация, представленная в формализованном виде и пригодная для обработки, называется данными. Организация данных,
обеспечивающая определенные связи и соотношения между ними, называется
структурой данных.
Существуют линейные и нелинейные структуры данных. К линейным
структурам можно отнести: константы, переменные и массивы. Нелинейные
структуры данных - деревья и графы. Нелинейные структуры данных выходят за рамки нашей программы и здесь не рассматриваются.
К о н с т а н т а м и называются данные, которые в период реализации алгоритма не изменяют своего значения.
П е р е м е н н ы м и называют данные, которым в процессе работы алгоритма могут быть присвоены различные значения.
Рассмотренные данные (константы и переменные) называются простыми.
Этим данным приписываются имена и по этим именам осуществляется обращение к соответствующим ячейкам памяти, где записываются их значения.
М а с с и в о м называется множество упорядоченных однотипных данных, объединенных одним именем. Массивы характеризуются: именем,
размерностью и типом данных, которые хранятся в данном массиве. Так,
можно говорить о массиве символов, массиве целых чисел, массиве действительных чисел. Имя массива - уникальный набор символов, которые входят в алфавит языка программирования. Размерность массива - максимально допустимое число элементов массива. В памяти ЭВМ данные, образующие линейную структуру массива, хранятся в виде списка последовательно, одни за другими. Для определения положения элемента массива среди остальных необходимо задать значение индекса массива. В зависимости от количества
74
индексов массивы бывают одномерными (один индекс), двумерными - два
индекса. трехмерными - три индекса и т.д.
Например, одномерный массив целых чисел по именем N размерностью
46, описанный на языке BASIC как DIM N(45), можно схематично представить
следующим образом (табл. 9.1).
Таблица 9.1
Данные |
-7 |
12 |
0 |
... |
56 |
... |
-32 |
3 |
|
|
|||||||
|
|
|
|
|
|
|
|
|
Условные адреса |
N(0) |
N(1) |
N(2) |
... |
N(I) |
... |
N(44) |
N(45) |
|
|
|
|
|
|
|
|
|
(Можно нулевой элемент не заполнять, а массив начинать с номера 1).
Запись DIM N(45) означает, что под именем N в памяти ЭВМ предусмотрено место для записи до 46 целых чисел (элементов массива): N(0), N(1), ..., N(I), ..., N(45) - имена переменных, используя которые, можно организовать хранение,
поиск и обработку соответствующих данных. Доступ к каждому из элементов массива осуществляется по имени и значению индекса массива. Например,
после выполнения команды А=N(45)+N(2) переменной А будет присвоено значение, равное 3+0=3.
Структуру двумерного массива можно представить в виде матрицы или таблицы данных, тогда первый индекс массива указывает на номер строки, а
второй индекс - на номер столбца матрицы (таблицы), на пересечении которых находится соответствующий элемент.
Двумерный массив размерностью 12 (3 строки и 4 столбца) описываются на языке BASIC как DIM ST(2, 3) или ST(3, 4) - если не брать во внимание нулевой элемент. Схематично формирование условных адресов элементов массива можно представить следующим образом (табл. 9.2).
75
Таблица 9.2
ST(0,0) |
ST(0,1) |
ST(0,2) |
ST(0,3) |
ST(1,0) |
ST(1,1) |
ST(1,2) |
ST(1,3) |
ST(2,0) |
ST(2,1) |
ST(2,2) |
ST(2,3) |
(Или, можно не брать нулевую строку, а начинать с первой - табл. 9.3)
|
|
|
Таблица 9.3 |
|
|
|
|
|
|
ST(1,1) |
ST(1,2) |
ST(1,3) |
ST(1,4) |
|
|
|
|
|
|
ST(2,1) |
ST(2,2) |
ST(2,3) |
ST(2,4) |
|
|
|
|
|
|
ST(3,1) |
ST(3,2) |
ST(3,3) |
ST(3,4) |
|
|
|
|
|
|
9.3. Этапы решения задачи на ЭВМ
Подготовка любой задачи к решению на ЭВМ состоит из нескольких этапов. Все этапы взаимосвязаны. Последующие этапы зависят от реализации предыдущих, а после выполнения очередного этапа может потребоваться возврат к предыдущим этапам и поиск их новых решений.
Э т а п 1 - четкая формулировка задачи, выявление исходных данных,
необходимых для ее решения, (т.е. постановка задачи, ее формализация).
Эт а п 2 - разработка математической модели решаемой задачи.
Эт а п 3 - выбор метода решения. Он определяется решаемой задачей, а
также возможностями ЭВМ (ее быстродействием, объемом памяти, точностью представления чисел, наличием разработанных ранее готовых программ и др.).
Выполнение этого этапа требует некоторого кругозора как в области
программирования, так и в области используемых методов.
76
Э т а п 4 - разработка алгоритма на основе выбранного метода. При выборе алгоритма желательно рассмотреть, проанализировать несколько вариантов, прежде чем сделать окончательный выбор. Следует обратить внимание на тесную взаимосвязь третьего и четвертого этапов, так как алгоритм в бóльшей степени определяется выбранным методом, хотя один и тот же метод, в свою очередь, может быть реализован с помощью различных алгоритмов.
При разработке алгоритма решения сложной задачи следует использовать метод пошаговой детализации, следя за тем, чтобы на каждом шаге структура алгоритма оставалась простой и ясной. Следует максимально использовать существующие типовые или разработанные ранее алгоритмы для отдельных фрагментов (блоков) алгоритма.
Э т а п 5 - выбор структуры данных. От выбора способа представления данных зависит и алгоритм их обработки. Нужно выбирать структуру данных,
наиболее естественную для решаемой задачи, использовать массивы для представления данных, когда это наиболее очевидный способ их организации.
Э т а п 6 - собственно программирование, т.е. запись разработанного алгоритма на языке программирования, вопросы выбора которого здесь не рассматриваются.
Если разработка алгоритма выполнена хорошо, то программирование принципиальных трудностей не вызывает, но хорошо бы придерживаться следующих рекомендаций по составлению программы, что собственно может значительно облегчить ее отладку и дальнейшую эксплуатацию.
1. Программа должна быть универсальной, т.е. не зависящей от конкретного набора данных. Например, если количество обрабатываемых данных может меняться, то следует предусмотреть хранение максимально возможного их количества. Универсальная программа должна уметь обрабатывать ошибки,
которые могут возникнуть в процессе обработки информации.
2. Вместо констант лучше использовать переменные. Если в программе используются константы, то при их изменении нужно изменять в исходной
77
программе каждый оператор, содержащий прежнюю константу. Эта процедура отнимает много времени и часто вызывает ошибки. В программе следует предусмотреть контроль вводимых данных (в частности, программа не должна выполняться, если данные выходят за пределы допустимого диапазона).
3. Некоторые простые приемы позволяют повысить эффективность
программы (т.е. уменьшить количество выполняемых операций и время работы программы). К таким приемам относятся:
-использование операции умножения вместо возведения в степень
(Х3=Х*Х*Х);
-если некоторое арифметическое выражение встречается в вычислениях несколько раз, то его следует вычислить заранее и хранить в памяти ЭВМ, а
по мере необходимости использовать;
-при организации циклов в качестве границ индексов использовать переменные, а не выражения, которые вычислялись бы при каждом прохождении цикла;
-особое внимание обратить на организацию циклов, убрав из них все повторяющиеся с одинаковыми данными вычисления и выполняя их до входа в цикл.
4.Программа должна содержать комментарии, позволяющие легко проследить за логической взаимосвязью и функциями отдельных ее частей. При написании программы следует структурировать ее текст так, чтобы она хорошо читалась. В частности, в программе должно быть хорошо видно, где начинается и где заканчивается цикл.
Э т а п 7 - тестирование, отладка и исправление обнаруженных ошибок.
Для выполнения тестирования необходимо подготовить тесты –
специально подобранные исходные данные в совокупности с теми результатами, которые должна выдавать программа при обработке этих данных. Разработка тестов - трудоемкая работа, часто требующая выполнения
78
ручных подсчетов. При составлении тестов нужно стремиться обеспечить
проверку всех ветвей программы.
Существует ряд рекомендаций по тестированию и отладке, например
такие:
-необходимо проверить работу программы (или отдельных ее частей)
вручную до выхода на компьютер;
-проводить тестирование и отладку нужно отдельно для логически самостоятельных частей программы;
-при отладке программы необходимо использовать существующие средства в трансляторах алгоритмических языков;
-при тестировании программы обычно используется минимально необходимый объем данных.
Эт а п 8 - счет по готовой программе и анализ результатов. Этот этап является завершающим шагом выполнения всех предыдущих этапов и служит подтверждением (или опровержением) их правомерности. После этого этапа,
возможно, потребуется пересмотреть сам подход к решению задачи и возвратиться к первому этапу для повторного выполнения всех этапов с учетом приобретенного опыта.
9.4. Алгоритм и его свойства
Алгоритмом называется определенная, формальная, общепонятная конечная последовательность предписаний (указаний, правил, этапов),
выполняя которые шаг за шагом, можно прийти от варьируемых исходных данных к числу (группе чисел), представляющему результат решения задачи.
Каждый алгоритм должен обладать следующими основными свойствами:
- дискретностью – это свойство состоит в том, что алгоритм должен представлять процесс решения задачи как последовательность простых шагов. При этом для выполнения каждого шага алгоритма требуется
79
некоторый конечный отрезок времени, т.е. преобразование исходных
данных в результат осуществляется во времени дискретно;
-определенностью – каждая команда алгоритма должна быть четкой,
однозначной и не оставлять места для произвола;
-конечностью – алгоритм должен приводить к решению задачи за конечное число шагов;
-массовостью – алгоритм решения задачи разрабатывается не для одной конкретной задачи, а для целого класса однотипных задач,
различающихся лишь исходными данными.
Этап, результатом которого является разработка алгоритма решения задачи,
часто называют алгоритмизацией, понимая под этим сведéние задачи к последовательности этапов, выполняемых последовательно друг за другом.
Разработанный алгоритм можно зафиксировать несколькими способами,
например, следующим образом:
-на естественном языке;
-в виде схемы (блок-схемы);
-на специальном языке (алгоритмическом языке).
9.5. Программирование на алгоритмическом языке Quick Basic 9.5.1.Алфавит языка и структура программы.
Алфавит языка Quick Basic (QB) включает в себя прописные (A-Z) и
строчные (a-z) латинские буквы, цифры 0-9 и специальные символы:
знаки арифметических операций: + (плюс); – (минус); * (умножение);
/ (деление); \ (деление нацело); ^ (возведение в степень); MOD (получение остатка от деления по модулю);
знаки операций отношения: = (равно); < (меньше); > (больше);
знаки препинания и разделители: , (запятая); . (точка); : (двоеточие); ; (точка
сзапятой); ' (апостроф); () (круглые скобки); _ (подчеркивание);
80
символы объявления типа данных: %; &; !; #; $.
Строчные и прописные буквы в QB не различаются, поэтому, например,
слова tex и TEX компилятором воспринимаются одинаково.
Программа на языке QB содержит одну или несколько строк исходного текста. Каждая строка может содержать один или несколько операторов -
специальных синтаксических конструкций, содержащих одно или несколько служебных слов, определяющих характер действия (ввести данные, проверить условие и т.п.). Операторы в строке разделяются двоеточием. Количество операторов в строке не ограничено, однако принято в строке размещать один оператор, за исключением тех случаев, когда правила языка, требуют использования нескольких операторов или операторы в строке образуют логически непрерывную последовательность.
Программная строка может содержать метку - последовательность букв или цифр, начинающуюся с буквы; в этом случае метка может быть единственной в строке и отделяться от последующего текста двоеточием.
Строка может начинаться с номера, являющегося целым числом в диапазоне
0 – 65535. Метки и номера служат для ссылок на некоторые строки.
Максимальная длина строки - 256 символов. Однако принято ограничивать ее длину 80 символами, что связано с удобством представления информации на экране.
Программа может содержать комментарии (примечания). Комментарий может располагаться в отдельной строке или в конце программной строки.
Начало текста комментария отмечается символом апостроф (').
Некоторые слова в QB являются зарезервированными, к ним относятся имена команд, операторов и встроенных функций. В дальнейшем мы будем выделять зарезервированные слова прописными буквами, а для всех остальных конструкций использовать строчные буквы. Весь текст программы рекомендуется вводить строчными буквами. Это связано с тем, что в среде QB
81
4.5 по завершении ввода программной строки выделение зарезервированных слов прописными буквами осуществляется автоматически.
9.5.2.Классы, типы данных и способы их объявления.
Программы на языке QB оперируют с двумя основными классами данных:
числовыми и строковыми. Числовые данные используются для представления и обработки в программе целых и действительных чисел.
Числовые данные могут иметь один из четырех типов: целые обычной длины (INTEGER), целые двойной длины (LONG), вещественные обычной точности (SINGLE) и вещественные двойной точности (DOUBLE). Данные обычной и двойной длины различаются объемом занимаемой памяти и,
соответственно, диапазоном возможных значений.
В табл. 9.1 приведены основные характеристики числовых данных.
Суффикс является признаком типа данных и может быть использован для его явного описания.
|
|
|
|
|
Таблица 9.1 |
|
|
|
|
|
|
|
|
|
Длина |
Точность |
Диапазон возможных |
|
|
|
Тип |
(байт) |
(дес.цифр) |
значений |
|
Суффикс |
|
|
|
|
||||
|
|
|
|
|
|
|
INTEGER |
2 |
- |
-32768 - +32767 |
|
% |
|
|
|
|
|
|
|
|
LONG |
4 |
- |
-2147483648 - 2147483647 |
|
& |
|
|
|
|
|
|
|
|
SINGLE |
4 |
7 |
-3,40*1038 |
- +3,40*1038 |
|
! |
|
|
|
|
|
|
|
DOUBLE |
8 |
1 |
-1,79*10308 |
- +1,79*10308 |
|
# |
|
|
|
|
|
|
|
Строковые данные или просто строки имеют тип STRING и
используются для хранения и обработки последовательностей произвольных символов. Каждый символ строки занимает 1 байт памяти. Длина строки не может превышать 32767 байт. Суффиксом строковых данных служит символ $.
Данные обоих классов разбиваются на константы и переменные.
Константы вещественных типов могут быть представлены в двух форматах: с
