Все предметы
ВНО 2016
Конспекты уроков
Опорные конспекты
Учебники PDF
Учебники онлайн
Библиотека PDF
Словари
Справочник школьника
Мастер-класс для школьника

Информатика

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

Алгоритмический язык Паскаль (Pascal)

Алгоритмический язык Паскаль (Pascal) названа в честь французского математика XVII века. Блеза Паскаля, который был создателем первой механической вычислительной машины. Автор языка - профессор Федерального технического университета (Швейцария) Никлаус Вирт; язык создана в 1970 году как инструмент для обучения студентов навыкам программирования.
Первое диалоговое среда подготовки и выполнения программ на языке Паскаль был создан в 1983 году. Автор первого Турбо-Паскалю и основатель фирмы Borland International - Филипп Кан. Последние версии языка Паскаль, которые работают под MS DOS и Windows,- Паскаль 7.0 фирмы Borland и Microsoft (1992 г.). Следующие версии получили развитие в языке Delphi и работают под ОС Windows.
Элементы языка Паскаль
Основными элементами языка Паскаль являются символы, слова, выражения, команды (операторы).
Символы - неразделимы знаки, которые обрабатывает транслятор языка.
Слова - минимальная смысловая единица языка, состоящая из символов (идентификаторы, числа, служебные слова).
Выражения - это последовательности, состоящие из имен переменных, функций, констант, знаков операций и круглых скобок, определяющих порядок выполнения действий.
Выражения могут быть арифметическими и логическими. Арифметическими есть выражения, которые записываются с помощью арифметических операций и в результате вычисления которых получают числовые значения. Кроме известных четырех арифметических действий в Паскале есть действия div (частное от деления нацело двух целых чисел) и mod (остаток от деления нацело двух целых чисел). В арифметических выражениях могут использоваться также стандартные функции: тригонометрические (sin(x), cos(x), arctan(x)), определение модуля (abs(x)), округление (round(x)), возведение в квадрат (sqr(x)) и другие.
Команды (операторы) - это указания на выполнение отдельных действий.
Язык Паскаль содержит символы для составления идентификаторов (большие и малые латинские буквы, арабские цифры, знак подчеркивания); символы-разделители (пробел, управляющие символы с ASCII-кодами от 0 до 31);специальные символы, выполняющие определенные функции при построении различных конструкций языка(+ - * / = > .,; : @ ‘ ( ) { } [ ] # $ ^); составные символы, которые воспринимаются компилятором как единое целое(= >=: = (* *) (..)..); «неиспользуемые символы (символы, не входящие в алфавит языка, но используются в комментариях и в виде значений символьных и строковых констант).
Идентификаторы - последовательности из букв, цифр и символа подчеркивания, начинающиеся с буквы или символа подчеркивания. Большие и малые буквы не различаются.
В языке программирования используется ограниченное количество слов, значение и способ использования которых задан (служебные слова).
Структура описания алгоритма на языке программирования
При написании программы необходимо соблюдать правила размещения в тексте различных содержательных блоков. Любую программу можно условно разделить на две основные части (см. таблицу): раздел описи (раздел объявлений и соглашений; раздел текстов процедур и функций) и выполнения (раздел основного блока).
Заголовок программы состоит из зарезервированного слова PROGRAM и имени программы, которое является идентификатором (эта строка может отсутствовать).
В директивах компилятора можно задать режимы его работы при трансляции программы. С помощью оператора USES подключаются к тексту программы модули библиотек, он может быть использован только один раз, и его место четко определено.
Раздел описания меток LABEL содержит перечисленные через запятую имена меток перехода, которые могут представлять собой целое число от 0 до 9999), строка символов, символьно-цифровую конструкцию.
В разделе CONST содержатся перечисленные через запятую константы, используемые в программе.
В разделе TYPE можно определить новые типы, здесь могут использоваться ранее определенные в разделе CONST константы.
В разделе описания переменных VAR содержится список переменных, используемых в программе, и определяется их тип. Жесткое соблюдение порядка объявлений меток, констант, типов и переменных не требуется.
Если в программе используются процедуры и/или функции, необходимо их объявить. Вслед за зарезервированным словом PROCEDURE (FUNCTION) идет имя процедуры (функции) и список формальных параметров (если они есть). Далее идет объявление локальных меток, констант, типов и переменных. Локально объявленные конструкции доступны только внутри данной подпрограммы.
Тело процедуры (функции) ограничивается служебными словами BEGIN...END;.
Основной блок состоит из последовательности операторов, которые определяют последовательность действий для выполнения основного алгоритма.
Тело программы ограничивается служебными словами BEGIN...END, как и тело подпрограммы, но после оператора END ставится точка, что является обозначением конца программы. Все последующие описания будут восприняты как комментарий и игнорироваться транслятором.
Типы данных в Паскале
С точки зрения программирования величины - это данные, которыми оперирует программа и которые требуют места в памяти компьютера.
В зависимости от формата представления значений величины в памяти компьютера, множества допустимых значений, множества допустимых операций величины делятся на типы.
Стандартные типы данных. Величины, значения которых хранятся в одном элементе памяти, называют простыми величинами. В Паскале к ним относятся стандартные (базовые) типы и их производные:
• разновидности целого типа - Integer, Shortint, Longint, Byte, Word;
• разновидности вещественного типа - Real, Singl, Double, Extended, Comp;
• символьный тип Char;
• логический тип Boolean.
Описание величин. Для описания (объявления) постоянных величин используется служебное слово CONST, переменных - VAR. При помощи объявления устанавливается не только факт существования переменной, но и ее тип.
Пример:
CONST n=5;
VAR summer: integer; a1, b1: char;
Структурированные типы данных. Это данные, состоящие из нескольких элементов простого типа. Такие типы данных удобно использовать, когда обрабатывается большое количество данных одного типа или несколько данных различных типов объединяются в одну группу.
В структурированных типов данных можно отнести строки, массивы, записи, множества.
Линейные программы
Линейными называются программы, состоящие из простых команд (операторов).
Простыми командами (простыми указаниями алгоритма) называются команды, которые не используют условия при своем исполнении. К числу простых операторов относятся команды (операторы) присваивания, ввода и вывода, вызова вспомогательного алгоритма (подпрограммы).
Оператор присваивания. Он задает или изменяет текущее значение некоторой переменной. При этом меняется содержимое конкретного элемента памяти, отведенного для этой переменной. Поскольку цель любого алгоритма - это получение в определенном месте памяти нужного значения, практически любая программа содержит этот оператор.
Эта команда может иметь такой вид:
Формат командыПримеры
имя переменной>: = значение>;A:=5; D:= 10;
имя переменной>: = имя переменной >;A:=D;
имя переменной>: = выражение>;A:=A+D*5;

Слева от знака «:=» расположено имя переменной, справа - значение величины, имя другой переменной, выражение.
Распознав команду присваивания, управление передается программе, которая может выполнять присваивание. Сначала выполняются операции, стоящие справа от знака «: =», а затем результат присваивается переменной, стоящей слева от знака присваивания. Знак присваивания показывает, что участок памяти компьютера, в которой хранится значение указанной переменной, надо изменить на заданное значение, на значение заданной переменной или значение вычисленного выражения.
Операторы ввода-вывода. Стандартные процедуры ввода данных используются для определения начальных значений определенных переменных величин и состоят из имени процедуры и списка ввода, который содержит имена переменных, значения которых будут вводиться с клавиатуры или из файла, т.е. переменным будут присваиваться какие-то определенные значения.
Чаще для определения начальных значений удобнее пользоваться командой ввода, а не командой присваивания, потому что при необходимости использования программы с другими начальными данными не приходится изменять текст программы.
Если в записи алгоритма стоит команда ввода, то его выполнение прерывается и управление передается программе, которая может осуществить ввод данных. После ввода данных управление передается следующей команде алгоритма.
На языке Паскаль процедура ввода данных имеет вид:
READ (список ввода);
READLN (список ввода).
Во время выполнения процедур READ и READLN программа переходит в состояние ожидания ввода данных. Если в списке ввода указано несколько переменных, то их можно вводить в одной строке, отделяя друг от друга символом «пробел», или в отдельных строках (в столбик), завершая ввод каждого значения клавишей Enter.
Работа процедуры не завершится, пока не будут введены значения для всех переменных, указанных в списке. Тип значений, которые вводятся, должно совпадать с тем, который имеет соответствующая переменная.
Оператор READLN отличается от оператора READ тем, что после введения необходимого числа данных курсор перемещается на следующую строку.
Если ввод данных осуществляется с клавиатуры, то список ввода - это список переменных, т.е. последовательность имен переменных, разделенных запятыми. Если ввод осуществляется из файла, то в списке введение первая переменная - файловая, связанная с именем реального файла.
Стандартные процедуры вывода результатов вычислений используются для вывода их значений на экран, принтер или в файл. На языке Паскаль процедуры вывода имеют вид:
WRITE (список вывода);
WRITELN (список вывода).
Список элементов вывода значительно шире, чем в процедурах ввода. В него могут входить:
• идентификаторы величин, значения которых будут выводиться на соответствующее устройство или в файл;
• выражения, значения которых сначала будут вычислены, а затем выведены на устройство;
• стали величины (числовые, символьные, строковые).
Различие между WRITE и WRITELN состоит в том, что вывод оператором WRITE начинается с текущего местоположения курсора на экране монитора и курсор после окончания вывода остается в той же строке. Оператор WRITELN выводит значение из текущего места, а затем курсор перемещается на следующую строку. Можно использовать оператор WRITELN без списка вывода для перемещения курсора на новую строку.
Если вывод осуществляется на экран монитора, то список вывода - это список переменных, или последовательность имен переменных, констант или выражений, разделенных запятыми. Если вывод осуществляется в файл, то в списке вывода первая переменная - файловая, связанная с именем реального файла.
В команде после вывода элемента списка вывода через двоеточие можно указать формат вывода, то есть ширину поля экрана, на котором будут располагаться значения. При выводе действительных данных можно указать также количество десятичных цифр в дробной части, которую надо вывести на экран.
Пример: write (А: 10: 3, В: 8).
Оператор вызова вспомогательного алгоритма. В Паскале реализованы подпрограммы-процедуры и подпрограммы-функции. Вызов подпрограммы осуществляется по ее имени с указанием фактических параметров. При этом на месте фактических аргументов могут быть конкретные значения, имена фактических переменных, выражения, а на месте результатов - только имена фактических переменных. При этом количество, типы и назначение формальных и фактических параметров в соответствующих списках параметров должны совпадать.
Программы с ветвлением
Команды ветвления - это составляющие командами, у которых в отличие от простых команд присутствуют условия, в зависимости от истинности которых выполняются или не выполняются операторы, входящие в состав команды ветвления.
Полное и неполное ветвление. В Паскале реализовано полное и неполное ветвление, а также команда выбора, реализованная как последовательное выполнение нескольких структур ветвления и которая предполагает выбор из нескольких возможных вариантов действий.
1. Конструкция «If - Then» - неполное ветвление используется в том случае, когда определенные действия только в случае выполнения условия.
IF условие> THEN оператор>;
Конструкция «If - Then - Else» - полное ветвление используется в том случае, когда определены различные действия в случае выполнения и невыполнения условия.
IF условие> THEN оператор> ELSE оператор>;
2. Конструкции «Case - Of» неполный выбор или «Case - Of - Else» - полный выбор используются в том случае, когда определены различные действия в случае нескольких выходов (заменяют конструкции из вложенных операторов if).
CASE порядковая переменная> OF
значение>: операторы>
ELSE оператор>;
END.
Простые и составные условия. Высказывание, которое может быть истинным (правильным) или ложным (неверным) называется условием. Простое условие - это высказывание, в котором два выражения, соединенные знаком операции отношения. Составлена условие - это высказывание, в котором две или более простых условий соединенные знаками логических операций.
В языке программирования Паскаль реализованы операции отношение: > - больше; - меньше; = - равно; > - не равно; >= - «не менее»; = - «не более»; и логические операции: not - «нет»; and - «и»; or - «или».
Высказывание - это некоторое утверждение, относительно которого можно сказать, что оно или истинно, или ложно. Таким образом, каждому высказыванию можно приписать «0» (ложно) или «1» (истинно). Пример: «5 - простое число» - истинное, «2 = 3 + 5» - ложное высказывание.
С помощью логических операций можно строить из одного высказывания другие. Построение из данного (данных) высказывания нового высказывания называется логической операцией. Знаки логических операций называют логическими связками. Логические операции чаще всего описываются с помощью таблиц истинности.
Таблицы истинности для операций «инверсии» (отрицание), «конъюнкции» (логическое умножение, или-логическое «и»), дизъюнкции (логическое сложение, или логическое «или»).
АBA and B («и»)A or B («или»)not A («нет»)
11110
10010
01011
00001

Логические выражения - это выражения, состоящие из высказываний, которые могут быть соединены логическими связками. Эти выражения приобретают логическое значение«ложно» или «истинно»). Логические выражения могут быть простыми и составными. В простом логическом выражении используются переменные и константы логического типа, операции сравнения. Связка простых логических выражений с помощью логических операций образует составлен логическое выражение. Простые выражения записываются в составных выражениях в круглых скобках.
Циклические программы
Циклическими программами называют программы, в которых реализован команды цикла.
В Паскале предусмотрены три разновидности операторов цикла: цикл с предусловием, цикл с постусловием, цикл со счетчиком (с пошаговой сменой аргумента). Также реализована работа с вложенными циклами. Вложенные циклы - циклические процессы, допускающие укладеність одних циклов в другие.
Цикл с предусловием (или цикл-«пока») - это цикл, в котором тело цикла выполняется только в случае выполнения условия, заданного перед телом цикла. Если условие становится неверной, то работа цикла прекращается и управление передается оператору, следующему за оператором цикла.
На языке Паскаль оператор цикла с предусловием еще называется «циклом While-Do».
WHILE условие> DO оператор>;
Пример: вычисление суммы первых 100 натуральных чисел методом последовательного добавления.
m:=1; S: =0;
WHILE m=100 DO
begin
S:=S+m;
m:=m+1;
end;
Цикл с постусловием (или цикл-«до») - это цикл, в котором тело цикла выполняется до тех пор, пока условие, заданное после тела цикла, не станет правильной. Если условие становится правильной, то работа цикла прекращается и управление передается оператору, следующему за оператором цикла.
На языке Паскаль оператор цикла с постусловием еще называется «цикл Repeat-Until».
REPEAT оператор> UNTIL условие>;
Пример: вычисление суммы первых 100 натуральных чисел методом последовательного добавления.
m:= 0; S: = 0;
REPEAT
m:=m +1;
S:=S+m;
UNTIL m >= 100;
Цикл со счетчиком (с пошаговой сменой аргумента) - это цикл, в котором тело цикла выполняется заранее известное количество раз. В различных алгоритмических языках реализация этого цикла может предусматривать использование аргументов различных типов, изменении аргумента на разный шаг, диапазон изменения аргумента и т. д.
Цикл со счетчиком аргумента реализуется таким образом:
1) аргумента предоставляется начальное значение;
2) если значение входит в заданный диапазон, то выполняется тело цикла;
3) аргумент изменяется на заданный шаг; выполняется 2);
4) если значение не входит в заданный диапазон, то выполнение цикла прекращается и управление передается оператору, следующему за оператором цикла.
В языке Паскаль реализованы два оператора цикла с пошаговой сменой аргумента: «цикл For» и «цикл For-DownТо».
FOR счетчик цикла>:=начальное значение> TO конечное значение >DOоператор>; (цикл с шагом 1),
FOR счетчик цикла>:=начальное значение>DOWNTO конечное значение >DOоператор>; (цикл с шагом -1),
где счетчик цикла> - переменная порядкового типа,
начальное значение> и конечное значение> - выражение того же типа, что и счетчик цикла> (диапазон изменения счетчика цикла),
оператор> - простой или составной оператор.
Примеры: вычисление суммы первых 100 натуральных чисел методом последовательного добавления.
а) S: =0;
for m:=1 to 100 do
S:=S+m;
б) S: =0;
for m:=100 downto 1 do
S:=S+m;
Во время реализации цикла с пошаговой сменой аргумента в Паскале необходимо заранее знать количество повторений тела цикла и помнить о возможности изменения счетчика цикла только на 1 или-1.
Массивы данных
Массив - это структурированная совокупность фиксированного числа элементов одного типа, доступ к которым осуществляется с помощью индексов. Элементы массива называются индексными переменными. По количеству индексов, которые нужно указать для доступа к отдельному элементу массива, различают одномерные, двумерные, ..., n-мерные массивы. Требования к индексам разные в разных алгоритмических языках. В Паскале индекс - это переменная порядкового типа.
Описание массива содержит имя массива (идентификатор), принцип индексации элементов (диапазон изменения индексов), тип элементов массива.
VAR ім'я_масиву>: ARRAY диапазоны изменения индексов> OF тип_даних>;
Массив называется одномерным (линейная таблица), если для доступа к его элементам достаточно одного индекса.
Например, одномерный массив из 8 действительных чисел в Паскале можно объявить таким образом:
• VAR Name: ARRAY [1..8] OF real;
• Const N=8;
VAR Name: ARRAY [1..N] OF real;
• TYPE MASSIV = ARRAY [1..8] OF real;
VAR Name: MASSIV;
Массив называется двумерным (матрица), если для доступа к его элементам необходимо указать значения двух индексов. Первый индекс указывает номер строки, а второй - номер столбца в этой строке.
При распределении памяти в описательной части программы под массив резервируется столько места, сколько предусматривает указанное количество элементов массива, учитывая тип элементов. Пределы изменения индексов должны быть постоянными величинами, а не переменными, иначе будет неизвестно, сколько места необходимо отвести в памяти для такого массива.
В памяти компьютера элементы одномерных массивов расположены последовательно. Двумерные массивы располагаются таким образом: сначала элементы первой строки, затем второй и т. д.
Работу с массивами можно условно разделить на три части:
• формирование массива;
• проработка массива;
• вывод массива.
Формирование массива. Формирование значений элементов массива можно выполнять следующим образом:
• ввод значений элементов массива с клавиатуры или из файла;
• формирование значений случайным образом, с помощью функции-генератора случайных чисел Random;
• вычисление значений элементов массива по формуле.
Обработка массива. Классическими задачами для работы с массивами можно назвать:
• поиск заданного элемента в массиве;
• нахождения суммы (произведения) элементов массива;
• поиск максимального (минимального) элемента в массиве;
• упорядочение массива по признаку (например, по возрастанию или убыванию и др.).
Одним из сложнейших задач является упорядочение элементов массива. Для решения этой задачи существует несколько алгоритмов.
Сортировка выбором:
1. Установить номер наибольшего элемента массива.
2. Поменять местами наибольший и последний элементы.
3. Повторить 1 и 2 над остачею массива (без последнего элемента).
Применять этот метод к элементам массива, что остались, пока остаток не сократится до одного элемента.
Аналогично сортировка выбором можно применить до малейшего элемента, меняя его с первым. В результате все равно получим растущую (незменшувану) последовательность элементов массива.
Обменное сортировки («пузырь»):
1. Сравнить два рядом расположенных элементов.
2. Если пара нарушает нужный порядок следования, элементы меняют местами.
Сравнение происходит до конца массива. Обмен осуществляется до тех пор, пока проход по массиву не вызовет никакого обмена.
Существуют и другие методы сортировки массивов: метод уставки, быстрая сортировка и т.д.
Вывод массива. Вывод элементов одномерного массива на экран можно выполнять в строку:
For i:=1 to n do Write (mas[i]);
или в столбик:
For i:=1 to n do Writeln (mas[i]).
Для вывода элементов двумерного массива в виде двумерной таблицы (матрицы) можно использовать такую конструкцию:
For i:=1 to n do
Begin
For j:=1 to m do
Write (mas[i,j]);
Writeln;
End.
Работа с текстовой информацией
В Паскале при работе с текстовой информацией существует возможность обработки одиночных символов типа Char и последовательности символов - строк типа String.
Символьный тип. Тип Char - это один из базовых типов языка, предназначенный для хранения и обработки одного символа. Множеством его значений есть отдельные символы (буквы, цифры, знаки), упорядоченные в соответствии с расширенным набором символов ASCII-кода. Переменная этого типа занимает 1 байт памяти. Благодаря тому что в памяти машины символы хранятся в виде кодов (большим считается тот символ, чей код больше), их можно сравнивать. Для символов допустимы все операции сравнения: , =, =, >, >=, >.
Описание данных символьного типа:
Const Name1 = ‘v’; - описание символьной константы,
Var Name2: CHAR; - описание символьной переменной.
Как правило, значения для символьных переменных и констант задаются в кавычках, например, ‘f’, ‘1’, ‘+’. Также можно задать значение, указав непосредственно числовое значение ASCII-кода, поставив перед этим числовым кодом знак #, например, #35, #102.
В Паскале для работы с символьной информацией реализованы функции преобразования: CHR(N) - символ с кодом N, ORD(S) - код символа S. Также применяются функции, определяющие SUCC(S) - следующий символ, PRED(S) - предыдущий символ. Для этих функций выполняются следующие зависимости:
SUCC(S) = CHR(ORD(S) +1);
PRED (S) = CHR(ORD(S) -1).
Для латинских букв ‘a’..‘z’ выполняется функция UPCASE(S), которая переводит эти буквы в верхний регистр ‘A’..’Z’.
Строковый тип. Тип String - тип данных, предназначенный для хранения и обработки последовательности символов. Строку можно рассматривать как особую форму одномерного символьного массива.
Описание данных строкового типа:
Const Name1=‘computer’; - описание строчной константы,
Var Name2: STRING; - описание строчной переменной,
Name3: STRING [20]; - описание строчной переменной заданной длины,
По умолчанию длина строчной переменной равна 255 символам, но можно ограничить длину строки с помощью явного указания длины строки.
В Паскале реализовано обработки строк двумя путями: обработка строки как единого целого и как объекта, который создается из отдельных символов.
Первый путь предоставляет возможность:
• присвоение строковой переменной за одну операцию целого строки символов, например, Name2:=‘computer’; Name3:=‘science’;
• объединение строк в произвольном порядке с помощью операции «+» (операции связывания, объединения), например,
Name3:= ‘computer’+‘science’;
Name3:= Name2 + Name3;
• сравнение строк с помощью операций сравнения: , =, =, >, >=, >, например,
If Name3 > 2 then write (‘no’);
Второй путь дает возможность до каждого отдельного символа строки обращаться по его номеру позиции как к элементу массива по индексу, например,
Name3:= Name2 [6] + 2 [2] + 2 [4];
Элемент с нулевым индексом содержит символ, код которого указывает на действительную длину данной строки.
В Паскале реализованы процедуры и функции для обработки строк. Текущую длину строки S можно узнать с помощью функции LENGTH (S).
Группа функций и процедур, направленная на проработку фрагментов строки:
• функция COPY(S, N, M) - копирование фрагмента строки S длиной M, которая начинается с позиции N;
• функция POS (S1, S) - поиск фрагмента S1 в строке S (получаем позицию, с которой начинается фрагмент S1 в строке S);
• функция CONCAT (S1, S2,...) - объединение строк S1, S2,...;
• процедура INSERT (S1, S2, M) - вставка фрагмента S1 в строку S2 с позиции M;
• процедура DELETE (S1, N, M) - удаление части строки S1 длиной M, начиная с позиции N;
• процедура VAL (S, N, Code) - преобразование строки цифровых символов S в число N (параметр Code=0, если строка S образован не из цифровых символов);
• процедура STR (N, S) - преобразование числа N в строку цифровых символов S.
Для сортировки символьных строк (например, по алфавиту) целесообразно создать массив символьных строк (массив типа String), что, с учетом возможности использования операций сравнения для строк, позволит в простой способ применять основные алгоритмы сортировки.