Линейные программы. Линейные программы - реферат Что такое линейная программа

Линейными называются программы, состоящие из простых команд (операторов).
Простыми командами (простыми указаниями алгоритма) называются команды, которые не используют условия при своем исполнении. К числу простых операторов относятся команды (операторы) присваивания, ввода и вывода, вызова вспомогательного алгоритма (подпрограммы).

Оператор присваивания. Он задает или изменяет текущее значение некоторой переменной. При этом изменяется содержание конкретного элемента памяти, отведенного для этой переменной. Поскольку цель любого алгоритма - это получение в определенном месте памяти нужного значения, практически любая программа содержит этот оператор. Операторы ввода-вывода. Стандартные процедуры ввода данных используются для определения начальных значений определенных переменных и состоят из имени процедуры и списка ввода, содержащий имена переменных, значения которых будут вводиться с клавиатуры или из файла, т.е. переменным будут присваиваться какие-то определенные значения.
Чаще для определения начальных значений удобнее пользоваться командой ввода, а не командой присваивания, потому что при необходимости использования программы с другими исходными данными не приходится менять текст программы.
Если в записи алгоритма стоит команда ввода, то его выполнение прерывается и управление передается программе, которая может осуществить ввод данных. После ввода данных управление передается следующей команде алгоритма.
На языке Паскаль процедура ввода данных имеет вид:
READ (список ввода);
READLN (список ввода).
При выполнении процедур READ и READLN программа переходит в состояние ожидания ввода данных. Если в списке ввода указано несколько переменных, то их можно вводить в одной строке, отделяя друг от друга символом «пробел», или в отдельных строках (в столбик), завершая ввод каждого значения клавишей Enter.
Работа процедуры не завершится, пока не будут введены значения для всех переменных, указанных в списке. Тип вводимых значений, должно совпадать с тем, который имеет соответствующая переменная.
Оператор READLN отличается от оператора READ тем, что после введения необходимого числа данных курсор перемещается на следующую строку.
Если ввод данных осуществляется с клавиатуры, то список ввода - это список переменных, т.е. последовательность имен переменных, разделенных запятыми. Если ввод осуществляется из файла, то в списке ввода первая переменная - файловая, связана с именем реального файла.
Стандартные процедуры вывода результатов вычислений используются для вывода их значений на экран, принтер или в файл. На языке Паскаль процедуры вывода имеют вид:
WRITE (список вывода);
WRITELN (список вывода).
Список элементов вывода значительно шире, чем в процедурах ввода. В него могут входить:
идентификаторы величин, значения которых будут выводиться на соответствующее устройство или в файл;
выражения, значение которых сначала будут вычислены, а затем выведены на устройство;
стали величины (числовые, символьные, строковые).
Различие между WRITE и WRITELN заключается в том, что вывод оператором WRITE начинается с текущего местоположения курсора на экране монитора и курсор после окончания вывода остается в той же строке. Оператор WRITELN выводит значения с текущего места, а затем курсор перемещается на следующую строку. Можно использовать оператор WRITELN без списка вывода для перемещения курсора на новую строку.
Если вывод осуществляется на экран монитора, то список вывода - это список переменных, или последовательность имен переменных, констант или выражений, разделенных запятыми. Если вывод осуществляется в файл, то в списке вывода первая переменная - файловая, связана с именем реального файла.
В команде вывода после элемента списка вывода через двоеточие можно указать формат вывода, т.е. ширину экрана, на котором будут располагаться значения. При выводе действительных данных можно указать также количество десятичных цифр в дробной части, которую нужно вывести на экран.
Пример: write (А: 10: 3, В: 8).
Оператор вызова вспомогательного алгоритма. В Паскале реализовано подпрограммы-процедуры и подпрограммы-функции. Вызов подпрограммы осуществляется по ее имени с указанием фактических параметров. При этом на месте фактических аргументов могут быть конкретные значения, имена фактических переменных, выражения, а на месте результатов - только имена фактических переменных. При этом количество, типы и назначение формальных и фактических параметров в соответствующих списках параметров должны совпадать.

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

Здесь мы рассмотрим задачу линейного программирования с ограничениями-равенствами - так называемую основную задачу линейного программирования (0ЗЛП).

В дальнейшем мы покажем, как от задачи с ограничениями-неравенствами можно перейти к ОЗЛП, и обратно.

Основная задача линейного программирования ставится следующим образом.

Имеется ряд переменных

Требуется найти такие неотрицательные значения этих переменных, которые удовлетворяли бы системе линейных уравнений:

и, кроме того, обращали бы в минимум линейную функцию

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

Условимся называть допустимым решением ОЗЛП любую совокупность переменных

удовлетворяющую уравнениям (2.1).

Оптимальным решением будем называть то из допустимых решений, при котором линейная функция (2.2) обращается в минимум.

Основная задача линейного программирования необязательно должна иметь решение.

Может оказаться, что уравнения (2.1) противоречат друг другу; может оказаться, что они имеют решение, но не в области неотрицательных значений . Тогда ОЗЛП не имеет допустимых решений. Наконец, может оказаться, что допустимые решения ОЗЛП существуют, но среди них нет оптимального: функция L в области допустимых решений неограничена снизу.

С примерами таких особенностей ОЗЛП мы познакомимся в дальнейшем.

Рассмотрим, прежде всего, вопрос о существовании допустимых решений ОЗЛП.

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

Итак, пусть имеется система уравнений (2.1). Существуют ли неотрицательные значения удовлетворяющие этой системе? Этот вопрос рассматривается в специальном разделе математики - линейной алгебре.

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

Матрицей системы линейных уравнений

называется таблица, составленная из коэффициентов при

Расширенной матрицей системы линейных уравнений называется та же матрица, дополненная столбцом свободных членов:

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

В линейной алгебре доказывается, что для совместности системы линейных уравнений (2.1) необходимо и достаточно, чтобы ранг матрицы системы был равен ранги ее расширенной матрицы.

Пример 1. Дана система трех уравнений с четырьмя неизвестными:

Определить, является ли эта система совместной?

Решение. Матрица системы:

Расширенная матрица:

Определим ранг первой матрицы. Он не может быть больше, чем 3 (так как число строк равно 3). Составим какой-нибудь определитель, вычеркивая из матрицы какой-нибудь столбец, например, последний. Получим

Вычисляя этот определитель по известному правилу, получим:

Этот определитель не равен нулю, значит, ранг матрицы системы равен 3. Очевидно, ранг расширенной матрицы тоже равен 3, так как из элементов расширенной матрицы можно составить тот же определитель. Из равенства рангов матриц следует, что система уравнений совместна.

Пример 2. Исследовать на совместность систему двух уравнений с тремя неизвестными :

Решение. Расширенная матрица системы:

(левая ее часть - матрица системы).

Найдем ранг матрицы системы, составляя все возможные определители второго порядка:

Итак, все возможные определители второго порядка, составленные из элементов матрицы системы равны нулю; значит, ранг этой матрицы системы

Найдем ранг расширенной матрицы. Определитель

Отсюда ранг расширенной матрицы он не равен рангу матрицы системы: Грфг, следовательно, система уравнений несовместна.

Пример 3. Исследовать на совместность систему трех уравнений с четырьмя неизвестными:

Решение Расширенная матрица системы (вместе с матрицей системы):

Найдем ранг матрицы системы. Возьмем определитель третьего порядка, составленный из ее элементов, например:

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

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

Так как имеется неравный нулю определитель второго порядка, например,

то ранг матрицы системы равен

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

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

Итак, если система уравнений-ограничений ОЗЛП совместна, то матрица системы и ее расширенная матрица имеют один и тот же ранг.

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

Очевидно, ранг системы не может быть больше числа уравнений :

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

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

Структура задачи линейного программирования существенно зависит от ранга системы ограничений (2.1).

Рассмотрим, прежде всего, случай, когда , т. е. когда число линейно независимых уравнений, входящих в систему (2.1), равно числу переменных п. Отбросим «лишние» уравнения, являющиеся линейными комбинациями других. Система уравнений-ограничений ОЗЛП принимает вид:

Так как то определитель, составленный из коэффициентов,

не равен нулю. Из алгебры известно, что в этом случае система (2.4) имеет единственное решение. Чтобы найти величину достаточно в определителе заменить столбец - столбцом свободных членов и разделить на .

Итак, при система уравнений-ограничений ОЗЛП имеет единственное решение:

Если в этом решении хотя бы одна из величин отрицательна, это значит, что полученное решение недопустимо и, значит, ОЗЛП не имеет решения.

Если все величины неотрицательны, то найденное решение является допустимым. Оно же, очевидно, является и оптимальным (потому что других нет).

Очевидно, этот тривиальный случай не может нас интересовать.

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

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

Задача 1.1. Расчет по формуле

Написать программу, которая переводит температуру в градусах по Фаренгейту в градусы Цельсия по формуле:

где С - температура по Цельсию, a F - температура по Фаренгейту.

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

В данном случае:

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

В качестве результата - другое вещественное число.

Перед написанием программы откроем интегрированную среду Visual C++:

Пуск/Программы/Microsoft Visual Studio/ Microsoft Visual C++ 6.00

1) File > New...

2) В открывшемся окне:

Выберите тип Win32 Console Application;

Введите имя проекта в текстовом поле Project Name;

Введите (выберете с помощью кнопки …) имя каталога размещения файлов проекта в текстовом поле Location, например G:/ASOIZ/

Щелкните левой кнопкой мыши на кнопке ОК.

3) открывается диалоговое окно Win32 Console Application - Stepl of 1 и в нем:

Выберите тип An empty project;

Щелкните на кнопке Finish.

4) После щелчка появится окно New Project, в котором щелкните на кнопке ОК.

1) File > New.... В результате откроется диалоговое окно New.

2) На вкладке Files:

Выберите тип файла (в данном случае: C++ Source File);

В текстовом поле File Name введите нужное имя файла;

Флажок Add to project должен быть включен;

Щелкните на кнопке ОК.

Набираем следующий текст программы:

Рассмотрим каждую строку программы отдельно.

В начале программы записана директива препроцессора, по которой к исходному тексту программы подключается заголовочный файл . Это файл, который содержит описания операторов ввода-вывода cin и cout.

Любая программа на С++ состоит из функций, одна из которых должна иметь имя main, указывающее, что именно с нее начинается выполнение программы. После круглых скобок в фигурных скобках { } записывается тело функции, т.е. те операторы, которые требуется выполнить.

Любая заготовка при написании программы имеет вид:

#include <…>

#include <…>

объявление переменных;

ввод исходных данных;

расчет результата;

вывод результата;

Для хранения исходных данных и результатов надо выделить достаточно места в оперативной памяти. Для этого служит оператор 2. В нашей программе требуется хранить два значения: температуру по Цельсию и температуру по Фаренгейту, поэтому в операторе определяются две переменные. Одна, для хранения температуры по Фаренгейту, названа fahr, другая (по Цельсию) - cels. Имена переменным дает программист, исходя из их назначения. Имя может состоять только из латинских букв, цифр и знака подчеркивания и должно начинаться не с цифры.

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

Основные типы:

int (short, unsigned) – целочисленные,

float (double, long double) – вещественные

char – символьный

bool – логический

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

В операторе 4 выполняется ввод с клавиатуры одного числа в переменную fahr . Для этого используется стандартный объект cin и операция извлечения (чтения) >>. Если требуется ввести несколько величин, используется цепочка операций >>.

В операторе 5 вычисляется выражение, записанное справа от операции присваивания (обозначаемой знаком =), и результат присваивается переменной cels, то есть заносится в отведенную этой переменной память. Cначала целая константа 5 будет поделена на целую константу 9, затем результат этой операции умножен на результат вычитания числа 32 из переменной fahr.

Для вывода результата в операторе 6 применяется объект cout. Выводится цепочка, состоящая из пяти элементов. Это строка " По Фаренгейту:" , значение переменной fahr , строка ", в градусах Цельсия:" , значение переменной cels и оператор перехода на новую строку endl.

Последний оператор (оператор 7) этой программы предназначен для возврата из нее и передачи значения во внешнюю среду.

Далее компилируем программу. Для этого нажимаем кнопку на панели инструментов либо комбинацию клавиш Ctrl+F7. В окне вывода (внизу экрана) должно вывестись сообщение 0 error(s), 0 warning(s) (0 ошибок, 0 предупреждений). Если есть ошибки - сверьте с оригиналом.

Для запуска программы нажимаем кнопку на панели инструментов либо комбинацию клавиш Ctrl+F5.

При запуске программы вместо русских символов видим???, что вызвыно различными стандартами кодировки символов кириллицы в операционных системах MS DOS-и Windows. Для исправления добавим в программу функцию CharToOem (дополнения для наглядности выделены красным цветом)

#include

#include

char* RUS(const char* text)

CharToOem(text, buf);

float fahr, cels;

cout<

cels=5/9 * (fahr - 32);

cout<

cout<

Функцию Rus() нельзя использовать более одного раза в цепочке операций << для одного объекта cout , поэтому мы разбили его на два.

Как вы можете видеть, результат выполнения программы со стабильностью оказывается равным нулю! Это происходит из-за способа вычисления выражения. Давайте вновь обратимся к оператору 4. Константы 5 и 9 имеют целый тип, поэтому результат их деления также целочисленный. Естественно, что результат дальнейших вычислений не может быть ничем, кроме нуля. Исправить эту ошибку просто - достаточно записать хотя бы одну из констант в виде вещественного числа, например:

cels = 5. / 9 * (fahr - 32);

Лабораторная работа № 1

Тема: «Программирование линейных алгоритмов. Работа с отладчиком»

Цель работы

1.1 Освоение простейшей структуры программы на языке Си.

1.2 Получение навыков в организации ввода-вывода на Языке Си.

Техническое обеспечение

2.1 Персональная ЭВМ

2.2 Клавиатура.

2.3 Дисплей.

2.4 Печатающее устройство.

Программное обеспечение

3.1 Операционная система Windows

3.2 Система программирования Visual C++ версия 6.0 или Borland C++ версия 3.1 и более поздние версии.

Постановка задачи

Написание простейшей программы с обработкой данных.

5.1 Тема и цель работы.

5.2 Постановка задачи.

5.3 Текст программ.

5.4 Результаты выполнения программ.

5.5 Схемы алгоритма программ.

Общие сведения

Линейная программа

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

Задача 1.1. Расчет по формуле

Написать программу, которая переводит температуру в градусах по Фаренгейту в градусы Цельсия по формуле:

где С - температура по Цельсию, a F - температура по Фаренгейту.

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

В данном случае:

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

В качестве результата - другое вещественное число.

Перед написанием программы откроем интегрированную среду Visual C++:

Пуск/Программы/Microsoft Visual Studio/ Microsoft Visual C++ 6.00

1) File > New...

2) В открывшемся окне:

Выберите тип Win32 Console Application;

Введите имя проекта в текстовом поле Project Name;

Введите (выберете с помощью кнопки …) имя каталога размещения файлов проекта в текстовом поле Location, например G:/ASOIZ/

Щелкните левой кнопкой мыши на кнопке ОК.

3) открывается диалоговое окно Win32 Console Application - Stepl of 1 и в нем:

Выберите тип An empty project;

Щелкните на кнопке Finish.

4) После щелчка появится окно New Project, в котором щелкните на кнопке ОК.

1) File > New.... В результате откроется диалоговое окно New.

2) На вкладке Files:

Выберите тип файла (в данном случае: C++ Source File);

В текстовом поле File Name введите нужное имя файла;

Флажок Add to project должен быть включен;

Щелкните на кнопке ОК.

Набираем следующий текст программы:

Рассмотрим каждую строку программы отдельно.

В начале программы записана директива препроцессора, по которой к исходному тексту программы подключается заголовочный файл . Это файл, который содержит описания операторов ввода-вывода cin и cout.

Любая программа на С++ состоит из функций, одна из которых должна иметь имя main, указывающее, что именно с нее начинается выполнение программы. После круглых скобок в фигурных скобках { } записывается тело функции, т.е. те операторы, которые требуется выполнить.

Любая заготовка при написании программы имеет вид:

#include <…>

#include <…>

объявление переменных;

ввод исходных данных;

расчет результата;

вывод результата;

Для хранения исходных данных и результатов надо выделить достаточно места в оперативной памяти. Для этого служит оператор 2. В нашей программе требуется хранить два значения: температуру по Цельсию и температуру по Фаренгейту, поэтому в операторе определяются две переменные. Одна, для хранения температуры по Фаренгейту, названа fahr, другая (по Цельсию) - cels. Имена переменным дает программист, исходя из их назначения. Имя может состоять только из латинских букв, цифр и знака подчеркивания и должно начинаться не с цифры.

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

Основные типы:

int (short, unsigned) – целочисленные,

float (double, long double) – вещественные

char – символьный

bool – логический

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

В операторе 4 выполняется ввод с клавиатуры

Для этого используется стандартный объект cin и операция извлечения (чтения) >>. Если требуется ввести несколько величин, используется цепочка операций >>.

В операторе 5 вычисляется выражение, записанное справа от операции присваивания (обозначаемой знаком =), и результат присваивается переменной cels, то есть заносится в отведенную этой переменной память. Cначала целая константа 5 будет поделена на целую константу 9, затем результат этой операции умножен на результат вычитания числа 32 из переменной fahr.

Для вывода результата в операторе 6 применяется объект cout. Выводится цепочка, состоящая из пяти элементов. Это строка " По Фаренгейту:" , значение переменной fahr , строка ", в градусах Цельсия:" , значение переменной cels и оператор перехода на новую строку endl.

Последний оператор (оператор 7) этой программы предназначен для возврата из нее и передачи значения во внешнюю среду.

Далее компилируем программу. Для этого нажимаем кнопку на панели инструментов либо комбинацию клавиш Ctrl+F7. В окне вывода (внизу экрана) должно вывестись сообщение 0 error(s), 0 warning(s) (0 ошибок, 0 предупреждений). Если есть ошибки - сверьте с оригиналом.

Для запуска программы нажимаем кнопку на панели инструментов либо комбинацию клавиш Ctrl+F5.

При запуске программы вместо русских символов видим???, что вызвыно различными стандартами кодировки символов кириллицы в операционных системах MS DOS-и Windows. Для исправления добавим в программу функцию CharToOem (дополнения для наглядности выделены красным цветом)

#include

#include

char* RUS(const char* text)

CharToOem(text, buf);

float fahr, cels;

cout<

cels=5/9 * (fahr - 32);

cout<

cout<

Функцию Rus() нельзя использовать более одного раза в цепочке операций << для одного объекта cout , поэтому мы разбили его на два.

Как вы можете видеть, результат выполнения программы со стабильностью оказывается равным нулю! Это происходит из-за способа вычисления выражения. Давайте вновь обратимся к оператору 4. Константы 5 и 9 имеют целый тип, поэтому результат их деления также целочисленный. Естественно, что результат дальнейших вычислений не может быть ничем, кроме нуля. Исправить эту ошибку просто - достаточно записать хотя бы одну из констант в виде вещественного числа, например:

cels = 5. / 9 * (fahr - 32);

Линейной называется программа, все операторы которой выполняются последовательно, в том порядке, в котором они записаны. Это самый простой вид программ.

Переменные

Переменная - это величина, которая во время работы программы может -

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

Для каждой переменной задается ее имя и тип, например:

var number: integer; х, у: real; option: char;

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

Тип переменных выбирается исходя из диапазона и требуемой точности представления данных.

При объявлении можно присвоить переменной некоторое начальное значение, т.е. инициализировать ее. Под инициализацией понимается задание значения, выполняемое до начала работы программы. Инициализированные переменные описываются после ключевого слова const:

const number: integer = 100; x: real = 0.02; option: char = "ю";

По умолчанию все переменные, описанные в главной программе, обнуляются.

Выражения

Выражение - это правило вычисления значения. В выражении участвуют -

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

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

  • 1. Унарная операция not, унарный минус -, взятие адреса @.
  • 2. Операции типа умножения:* / div mod and shl shr.
  • 3. Операции типа сложения: + - or xor.
  • 4. Операции отношения: = о = in.

Функции, используемые в выражении, вычисляются в первую

Примеры выражений:

t + sin (х)/2 * х -результат имеет вещественный тип; а

(х > 0) and (у

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

Программа на ПАСКАЛЕ состоит из необязательного заголовка, разделов описании и раздела операторов:

program имя; {заголовок) разделы описаний begin раздел операторов end. (* программа заканчивается точкой *)

Программа может содержать комментарии, заключенные в фигурные скобки {} или в скобки вида (* *).

Общая структура программы приведена на рис. 2.1.

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

Разделы описаний бывают нескольких видов: описание модулей, констант, типов, переменных, меток, процедур и функций.

Модуль - это подключаемая к программе библиотека ресурсов (подпрограмм, констант и т.п.).

Рис. 2.1.

Раздел описания модулей, если он присутствует, должен быть первым. Описание начинается с ключевого слова uses, за которым через запятую перечисляются все подключаемые к программе модули, как стандартные, так и собственного изготовления, например: uses crt, graph, my_module;

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

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

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

const weight: real = 61.5; n = 10;

Раздел описания меток начинается с ключевого слова label, за которым через запятую следует перечисление всех меток, встречающихся в программе. Метка - это либо имя, либо положительное число, не превышающее 9999. Метка ставится перед любым исполняемым оператором и отделяется от него двоеточием. Пример описания меток: label 1, 2, error;

Метки служат для организации перехода на конкретный оператор с помощью оператора безусловного перехода goto.

Процедуры ввода-вывода Любая программа при вводе исходных - данных и выводе результатов взаимодействует с внешними устройствами. Совокупность стандартных устройств ввода и вывода, т.е. клавиатуры и экрана дисплея, называется консолью.

Ввод с клавиатуры. Для ввода с клавиатуры определены следующие процедуры: read и readln: read (список); readln [(список)];

В скобках указывается список имен переменных через запятую. Квадратные скобки указывают на то, что список может отсутствовать. Например:

read (a, b, с); readln (у); readln;

ВНИМАНИЕ

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

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

  • ? значение переменной выделяется как группа символов, расположенных между разделителями;
  • ? эти символы преобразуются во внутреннюю форму представления, соответствующую типу переменной;
  • ? значение записывается в ячейку памяти, определяемую именем переменной.

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

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

Вывод на экран. При выводе выполняется обратное преобразование: из внутреннего представления в символы, выводимые на экран. Для этого в языке определены стандартные процедуры write и writeln: write (список); writeln [(список)];

Процедура write выводит указанные в списке величины на экран, а процедура writeln вдобавок к этому еще и переводит курсор на следующую строку. Процедура writeln без параметров просто переводит курсор на следующую строку.

Выводить можно величины логических, целых, вещественных, символьного и строкового типов. В списке могут присутствовать не только имена переменных, но и выражения, а также их частный случай - константы. Кроме того, для каждого выводимого значения можно задавать его формат, например: writeln (а:4, Ь:6:2);

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