Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Управление и оптимизация / Osnovi informatsionnikh i komputernikh tekhnologiy 2011

.pdf
Скачиваний:
50
Добавлен:
02.09.2019
Размер:
2.13 Mб
Скачать

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

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

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

Название символа и обозначение

Процесс

Решение (ветвление)

Модификация (Цикл)

Предопределенный процесс

Пояснение

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

Блок используется для обозначения переходов управления по условию. В каждом блоке «решение» должны быть указаны вопрос, условие или сравнение, которые он определяет.

Вход в элемент обозначается линией, входящей обычно в верхнюю вершину элемента. Если выходов два или три, то обычно каждый выход обозначается линией, выходящей из оставшихся вершин (боковых и нижней). Если выходов больше трех, то их следует показывать одной линией, выходящей из вершины (чаще нижней) элемента, которая затем разветвляется. Соответствующие результаты вычислений могут записываться рядом с линиями, отображающими эти пути. Примерами условий могут быть: операции сравнения: три выхода: >, <, =.

Блок используется для организации циклических конструкций. (Слово модификация означает видоизменение, преобразование). Внутри блока записывается параметр цикла, для которого указываются его начальное значение, граничное условие и шаг изменения значения параметра для каждого повторения.

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

Внутри символа записывается название процесса и передаваемые в него данные. Например, в программировании − вызов процедуры или функции.

101

Ввод-вывод

Пуск-остановка (терминатор)

Преобразование данных в форму, пригодную для обработки (ввод) или отображения результатов обработки (вывод).

Элемент отображает вход из внешней среды или выход из нее (наиболее частое применение − начало и конец программы). Внутри фигуры записывается соответствующее действие.

Пример блок-схемы

m:=54;

n:=16;

да

m = n?

нет

нет да m > n?

n:=n-m;

 

m:=m-n;

102

ЯЗЫК ПРОГРАММИРОВАНИЯ TURBO PASCAL

Введение

Pascal – это императивный язык программирования, который был разработан Н. Виртом для обучения структурному программированию и назван в честь французского математика и физика Блеза Паскаля. Характеристиками языка являются: строгая типизация и наличие процедурного программирования.

Object Pascal – поддерживает парадигму объектно-ориентированного программирования.

Turbo Pascal – разработка компании Borland для платформы DOS - обозначение диалекта языка Паскаль от фирмы Borland.

Pascal ABC – язык основанный на Object Pascal и сочетающий простоту Pascal возможности платформы .NET (компонентно-ориентированный подход, предложенный компанией Microsoft).

Программа - набор команд на языке, понятном исполнителю, реализующий некоторый алгоритм. Программа на таком языке называется исходным текстом и хранится во внешнем файле с расширением .pas. Так как Pascal язык высокого уровня, то при исполнении программы ее посредством компиляции переводят в исполняемый код, который записывается в файл с расширением .exe.

Всостав среды разработки TurboPascal входит:

текстовый редактор,

компилятор,

отладчик.

Элементы языка Turbo Pascal

Алфавит

Алфавит языка Pascal состоит из:

букв - буквы латинского алфавита от а до z и от А до Z, знак подчеркивания “_”. В языке нет различия между заглавными и строчными буквами алфавита, если только они не входят в символьные и строковые выражения4

арабских цифр от 0 до 9;

шестнадцатеричных цифр;

специальных символов: + - * / = , ' . : ; < > [ ] ( ) { } " @ $ # ;

пары символов: < > , < = , > = , : = , ( * , * ) , ( . , . ) , / / - их нельзя разделять в программе пробелами;

пробелов, к ним относятся все символы в диапазоне кодов 0..32;

зарезервированных слова, которые не могут использоваться в качестве идентификаторов – уникальных имен данных;

103

стандартные директивы – некоторые команды - связаны с некоторыми стандартными объявлениями в программе (absolute, far, name, public и другие).

Рассмотрим более подробно некоторые структуры алфавита. Идентификаторы – последовательность букв и цифр, начинающаяся с

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

Например: a, MyVar, _variable, date_27_sep_39.

Идентификаторы: 1 Program, block#l, mod являются неправильными. Так как первый начинается с цифры, второй содержит специальный символ, третий является зарезервированным словом.

Константы

Вкачестве констант в Pascal используются:

числа:

o целые в диапазоне от -263 до +263-11, если число выходит из этого диапазона, то оно считается вещественным,

o вещественные,

oшестнадцатеричные,

логические константы (true – «истина», false – «ложь»);

символы - любой символ, заключенный в апострофы ('z' - символ “z”);

строки символов – любая последовательность символов, в том числе и пробелов, (кроме символа CR - возврат каретки), заключенная в апострофы;

конструктор множества - список элементов множества, например: [1,2,3..11,12],[красный, синий].

Переменные

Переменная – это программный объект, который может изменяться при выполнении программы. Все переменные, которые используются в программе, должны быть описаны в специальном разделе, после чего под эту переменную резервируется память. Там же должен быть определен тип переменной. Однако это справедливо не для всех языков программирования. Например, в языках Perl, PHP и некоторых других переменные не требуют специального объявления. Более того тип переменной определяется по типу хранящихся в ней данных. Иногда такого описания не требуется и тогда тип переменной определяется по присваиваемому ей значению. В некоторых случаях это может привести к ошибкам, связанным со смешением типов.

104

Переменные разделяют по зоне видимости на локальные и глобальные. Первый тип переменных доступен только в пределах подпрограммы (процедуры, функции), где они были определены. Сама эта подпрограмма и другие, вложенные в нее, называются областью видимости переменных. Локальные переменные хранятся в области памяти, которая называется стек. Они создаются при входе в подпрограмму и уничтожаются при выходе из нее, освобождая тем самым память. Глобальные переменные доступны во всей программе, они создаются на этапе компиляции и хранятся в течение всего времени выполнения программы.

Выражения и операции

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

Примеры выражений: 21 (а + b) * с sin(t)

а > 2 not a

Операции бывают следующих видов:

унарные, например not (отрицание);

мультипликативные: умножение *, деление и др.;

аддитивные: сложение, вычитание;

отношение: больше, меньше.

Приоритет операций соответствует порядку их перечисления. Далее более подробно буду рассмотрены операции, используемые при программировании на языке Pascal.

Комментарии

Комментарии используются для упрощения чтения программы разработчиком и содержат информацию о смысле определенного блока программы.

Комментарии заключаются в фигурные скобки: {комментарии} Или {*комментарии*}

Во время компилирования программы комментарии игнорируются.

105

Типы данных

Как уже было описано выше, язык Pascal является типизированным, то есть каждая переменная должна быть объявлена в специальном разделе и там же должен быть указан тип данной переменной. Таки образом компилятор требует, чтобы сведения об объеме памяти, необходимые для работы программы, были указаны заранее.

Рассмотрим основные типы языка Pascal. Их можно разделить на базовые типы данных и конструируемые.

Базовые типы

Логический (Boolean). Переменные этого типа могут принимать только два значения: true – истина, или false – ложь.

Символьный (char): состоящий из отельных символов. В него входят 256 символов расширенной таблицы ASCII (например, 'a', 'b', 'я', '7', '#').

Целые: shortint, byte, integer, word, integer, longint. Ниже приведен диапазон чисел для каждого из этих типов.

 

Тип данных

 

Количество байт, отводимых под

 

Диапазон

 

 

 

запись числа

 

-128..127

 

shortint

1

 

 

 

 

 

 

 

 

-27..27-1

 

byte

1

 

 

0..255

 

 

 

 

 

 

0..28-1

 

integer

2

 

 

-32768..32767

 

 

 

 

 

 

-215..215-1

 

word

2

 

 

0..65535

 

 

 

 

 

 

0..216-1

 

longint

4

 

 

-2147483648..2147483647

 

 

 

 

 

 

-231..231-1

 

Вещественные: real, single, extended, comp.

 

 

 

 

 

 

 

 

Тип данных

 

Количество байт, отводимых

 

Диапазон

 

 

 

под запись числа

 

 

 

single

 

4

 

 

1.5*10-45..3.4*1038

 

real

 

6

 

 

2.9*10-39..1.7*1038

 

extended

 

10

 

 

3.4*10-4932..1.1*104932

 

comp

 

8

 

 

-263+1..263-1

Структурированные типы данных: массивы, записи, множества,

файлы, все они характеризуются множественностью образующих этот тип элементов. Множества – набор однотипных элементов, который определяется так: <имя переменной>=[‘элемент1’,…,’элемент n’] или <имя переменной>=set of <тип данных>.

Еще один тип данных, значения которых вводятся пользователем – массив данных – это структурированный тип данных, предназначеный для

106

хранения нескольких однотипных элементов. Массивы могут быть двумерными и одномерными. Описывается массив следующим образом:

<имя переменной>: array[n1..nk] of <тип данных>, где n1 и nk первый и последние номера элементов массива. Обращение к данным осуществляется по этому номеру – индексу следующим образом:

<имя_массива>[<индекс_компоненты>] Для многомерного - так: <имя_массива>[<индекс>,…,<индекс>].

Правила употребления индексов при обращении к компонентам массива таковы:

1.Индекс компоненты может быть константой, переменной или выражением, куда входят операции и вызовы функций.

2.Тип каждого индекса должен быть совместим с типом, объявленным в описании массива именно для соответствующего "измерения"; менять индексы местами нельзя.

3.Количество индексов не должно превышать количество "измерений" массива. Попытка обратиться к линейному массиву, как к многомерному, обязательно вызовет ошибку. А вот обратная ситуация вполне возможна: например, если вы описали N-мерный массив, то его можно воспринимать как линейный массив, состоящий из (N-1)- мерных массивов.

Пример.

var a1: array [1..10] of integer;

Наряду с одномерными массивами может быть задан двумерный массив – аналог матрицы.

var a9: array[1..10,1..20] of real; - двумерный массив 10 х 20

При задании массива можно его размерность определить в разделе констант.

const nnn=100;

var a: array[1..nnn,1..nnn] of real; m,n: integer;

Запись – это структура данных, состоящая из фиксированного числа элементов, которые, в отличии от массива, могут быть разных типов.

<имя переменной>= record

Поле 1: тип;

……

Поле n: тип

end.

Строка (string) во многом похожа на одномерный массив символов. Так же можно рассмотреть более сложные типы, такие как

типизированный указатель: ^<тип> и файл.

К конструируемым типам данных можно отнести типы данных,

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

107

перечисляемый: week=(ma,tu, we, th, fr, sa, cu) и интервальный (диапазон): a= 1..5.

Структура программы. Основные команды

Структура программы

Любая программа пишется в соответствии с правилами синтаксиса, характерными для конкретного языка программирования.

Программа, составленная на языке Pascal, состоит из следующих элементов:

раздел объявлений и соглашений (декларационная часть),

раздел текстов процедур и функций,

раздел основного блока (сама программа).

Вобщем виде программу можно записать так:

program <имя_программы>;

[ uses <имена_подключаемых_модулей>; label <список_меток>;

const <имя_константы> = <значение_константы>; type <имя_типа> = <определение_типа>;

var <имя_переменной> : <тип_переменной>;] [procedure <имя_процедуры> <описание_процедуры>;] [function <имя_функции> <описание_функции>;] begin {начало основного тела программы} <операторы>

end. (* конец основного тела программы *)

В квадратных скобках указаны основные блоки. Разберем каждый элемент более подробно.

Строка заголовка программы состоит из зарезервированного слова PROGRAM и имени программы. В Турбо Паскале эта строка не обязательна, и ее можно исключить. Следующее за оператором PROGRAM имя является идентификатором и обладает всеми его свойствами, переменные внутри тела программы не могут иметь имена, совпадающие с именем программы.

 

Раздел объявлений и соглашений

PROGRAM

Заголовок программы;

USES

Подключаемые библиотеки;

LABEL

Подраздел объявления глобальных меток;

CONST

Подраздел объявления глобальных констант;

TYPE

Подраздел объявления глобальных типов;

VAR

Подраздел объявления глобальных переменных;

В разделе uses объявляются имена подключаемых модулей (библиотек), которые используются при выполнении программы. Модулем

108

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

Пример.

uses CRT, Graph;

Метки помечают какое-либо место в тексте программы и, в дальнейшем, используется для обращения (перехода) к данному элементу. В качестве метки могут использоваться символы, произвольные целые числа без знака, содержащие не более четырех цифр. Метка ставится перед оператором и отделяется от него двоеточием.

Пример.

label 3, 471, 29, Quit;

В разделе констант описываются именованные константы и определяются их значения.

Пример.

const n = -10;

m = 1000000000; mmm = n*100; c = 'z';

Вэтом же разделе определяются типизированные именованные константы.

const <имя_константы> : <тип_константы> = <начальное_значение>; const n: integer = -10;

Вразделе type задаются конструируемы типы данных. Например, type week =(sun,mon,tue,wed,thu,fri,sat).

Далее определяются идентификаторами, которыми обозначаются данные (константы и переменные), а также типы этих данных, которые в дальнейшем используются в программе.

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

Раздел процедур и функций

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

Если программа достаточно объемная ее так же можно разбить на несколько подпрограмм, для удобства проверки.

109

Подпрограммы бывают двух типов: процедуры (PROCEDURE) и

функции (FUNCTION).

Структура этих подпрограмм полностью аналогична структуре самой программы. Меняется только заголовок (procedure или function). Они могут содержать такие же разделы, что и основная программа, в частности, раздел локальных процедур и функций, вызываемых только в пределах данной подпрограммы. Внутри процедур и функций можно использовать глобальные переменные.

Раздел основного блока программы

BEGIN {Основной блок программы} {текст программы}

END.

В этом разделе содержится смысловая часть программы.

Пример.

program Primer; {вычисление суммы двух чисел} var

x,y,s: integer; begin

WriteLn('Введите через пробел два числа '); ReadLn(x,y);

s := x + y;

WriteLn('Сумма чисел равна ',s); end.

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

Основные команды. Арифметические операции

Для каждого типа данных определены действия, которые применимы к его значениям. Рассмотрим математические операции.

Стандартные арифметические операции: «+», «-», «/», «*» - применимы ко всем арифметическим типам данных, за исключением деления, которое не определено на множестве целых чисел.

Операции сравнения (=, <>, >, <, <=, >=),которые применимы ко всем базовым типам. Их результатами являются значения типа boolean.

Операции целочисленной арифметики.

a div b - деление а на b (b не может быть равно нулю). Результат будет принадлежать к типу данных, общему для тех типов, к которым принадлежат операнды.

110