Структурированные типы данных
Массив – это n – мерная совокупность однотипных элементов. В массивы можно объединить данные любого типа. Данные объединятся в массивы в случае, если надо выполнять одни и те же действия над определенным количеством однотипных значений. Массивы отображают следующие математические понятия:
1. Вектор с элементами Ai для i=1¸N (одномерный массив).
2. Матрица с элементами Ai,j (двумерный массив). Матрица – это все же вектор, компонентамикоторого являются ее строки.
3. Пространство Ai,j,k…(N-мерный массив, где N – количество его измерений (индексов)).
Массивы можно определять в разделах TYPE или VAR.
Формат:
Type T = array [T1] of T2;
Var M : array [T1] of T2;
где Т – имя типа массива;
М – имя массива;
Т1 – тип индексов в виде списка типов, по одному для каждого измерения; обычно тип индексов диапазонный;
Т2 - базовый тип: тип элементов массива;
Array и of – зарезервированные слова, имеющие смысл массив и из.
Множество – это совокупность связанных данных, состоящая из элементов одного типа, который называется базовым. Множество, в отличие от массива, может включать произвольное количество элементов (не более 256).
Описатель переменной типа множества SET. Объявление переменной типа множества определяет базовый тип, т.е. состав элементов, из значений которых создаются конкретные значения множественного типа, и мощность множества (максимальное количество его элементов).
Тип переменной-множества может быть определен в разделе Type или Var.
Формат:
Type имя типа множества = SET OF базовый тип;
Var имя множества: SET OF базовый тип;
Запись (комбинированный тип) – это структура данных, состоящая из фиксированного количества элементов, называемых полями. Поля могут быть различных типов. В составе записи могут быть данные скалярные типы, массивы и записи того же или другого типа. Записи могут быть постоянной (фиксированной) и переменной структуры (вариантные записи).
Описание записи может быть в разделе TYPE или VAR и имеет такой вид:
A=record
x,y:m;
. . .
z:n;
end;
где а – имя объявляемой записи;
record, end – зарезервированные слова, имеющие смысл запись и конец;
x, y, z – имена полей;
m, n - типы, которым принадлежат поля.
Файл (с точки зрения языка Паскаль) – структурированный тип данных, состоящий из последовательности компонентов одного типа и одной длины.
В качестве базового типа компонентов файла можно использовать любой тип данных, как простой, так и сложный (кроме типа файл).
Чаще всего компонентами файлов являются записи. Число компонентов файла определяет его объем или длину. Максимальная длина файла ограничивается только свободным местом на диска. Допускается существование файлов, не содержащих ни одного элемента – такие файлы называются пустыми. В файле в каждый момент может быть доступен только один элемент.
Файлы как типы делятся на три категории:
· Типизированный
· Нетипизированный
· Текстовый
Для сохранения информации в Паскале предусмотрена возможность сохранять файловые типы и файловые переменные.
Определение файлового типа:
· F=file of a;
· F=text;
· F=file;
5. Основы алгоритмизации и программирования.Структура программы на языке Pascal: раздел описания меток, раздел описания констант, раздел описания типов данных, раздел описания переменных, раздел описания процедур и функций, раздел операторов, комментарии.
Структура программы
Программа реализует алгоритм решения задачи. В ней записывается последовательность действий, выполняемых над определенными данными для реализации заданной цели. Основными характеристиками программы являются: точность полученного результата время выполнения и объем требуемой памяти.
Программа на языке Pascal состоит из заголовка, раздела описаний и раздела операторов.
PROGRAM Imya; Заголовок программы
Uses - раздел подключения модулей
label - раздел меток
const - раздел констант
type - раздел типов Раздел описаний
var - раздел переменных
procedure - раздел процедур
function - раздел функций
BEGIN
Оператор 1;
Оператор 2; Раздел операторов
... (тело программы)
Оператор n
END.
Заголовок содержит служебное слово PROGRAM, имя программы, задаваемое программистом, и в круглых скобках имена стандартных процедур Input, Output для связи программы с внешними устройствами ввода-вывода. Заканчивается заголовок символом ";" (точка с запятой).
Раздел описаний предназначен для объявления всех встречающихся в программе данных и их характеристик (имена данных, их тип, возможные значения). Этот раздел содержит следующие подразделы: раздел подключения стандартных и пользовательских модулей, объявление меток, констант, типов, переменных, объявление процедур и функций. Порядок расположения разделов не важен и описания могут повторяться.
Объявление процедур и функций является одним разделом. Следует заметить, что не все перечисленные разделы обязательны в программе. В простых программах могут потребоваться, например, только разделы описания констант и переменных.
После каждого описания ставится символ ";".
Раздел операторов ("тело" программы) заключается в операторные скобки вида: BEGIN ("начать") и END ("окончить"), при этом после служебного слова END Обязательно ставится точка. В разделе операторов записывается последовательность исполняемых операторов и каждый выражает действие, которое необходимо выполнить. Исполняемые операторы отделяются друг от друга символом ";".
Для создания наглядных и легко читаемых программ необходимо следовать следующим правилам:
1) Стандартизация стиля программирования заключается в том, что необходимо всегда придерживаться одного способа записи текста программы.
2) Для четкого указания вложенности управляющих структур требуется особым образом располагать операторы в тексте, так что служебные слова, которыми начинается и заканчивается, тот или иной оператор, записываются на одном уровне, а все вложенные в него операторы записываются с отступом вправо. При записи конструкций языка более глубоких уровней вложенности следует сдвигать их от начала строки вправо. Каждое описание и каждый оператор следует писать с новой строки. Продолжение описаний и операторов на новые строки надо сдвигать вправо. Следует избегать длинных строк.
3) Рекомендуется любую программу сопровождать комментариями, поясняющими назначение всей программы и отдельных ее блоков, процедур, функций.
4) Имена для объектов программы надо выбирать так, чтобы они наилучшим образом соответствовали этим объектам, отражали их назначение.
5) Списки идентификаторов в блоках описания следует упорядочивать - это облегчает поиск в них нужных элементов.
6) Программирование сверху вниз. В процессе разработки алгоритма и программы следует начинать с самой общей модели решения, постепенно уточняя ее до уровня отдельного блока и затем детально прорабатывая каждый блок.
Комментарии
Комментарии – это текстовые строки, вставляемые в тексте программы для пояснения функций отдельных ее частей и не влияющие на процесс ее выполнения. Ограничиваются комментарии двух сторон фигурными скобками или вместо открывающейся фигурной скобки применяют пару символов (*, а вместо закрывающейся скобки – пару символов *). Текст комментария может содержать любое количество латинских и русских букв, цифр и других символов алфавита языка Паскаль. Ограничений на длину комментария нет, он может занимать несколько строк.
В тексте комментария не должно быть знаков ограничителей, с которых начинается комментарий. Например: {Пример{1} задания{4}}. Однако ограничители {} могут быть вложены в (* *), и наоборот.
Например: (*Пример{1} задания{4}*)
{Пример(*1*) задания(*4*)}
Комментарии игнорируются компилятором и поэтому не оказывают никакого влияния на программу.
По месту расположения в программе комментарии можно разделить на 4 класса:
o объясняющие назначение программы,
o поясняющие смысл идентификаторов переменных и констант,
o описывающие логически обособленные части программы,
o объясняющие сложные для понимания элементы алгоритма.
Комментарии удобно использовать при отладке программы. В процессе отладки часто требуется исключить выполнение какой-либо части программы.
6. Основы алгоритмизации и программирования. Операторы языка Pascal: простые, структурированные, операторы ввода-вывода.
Операторы языка Паскаль разделяются на две группы: простые и структурированные. Простые операторы не содержат в себе других операторов; структурированные включают в себя другие операторы – как простые так и структурированные.
К простым операторам относятся:
· Оператор присваивания;
· Оператор безусловного перехода (GOTO);
· Пустой оператор.
· Операторы ввода и вывода.
К структурированным операторам относятся:
· Составной операторы (begin..end);
· Условные операторы (IF и CASE);
· Операторы цикла (While, repeat, For).
Простые операторы
Оператор присваивания.
Знак присваивания делит этот оператор на две части. В правой части представлено выражение, состоящее из идентификаторов констант, переменных, функций и знаков операций, которое необходимо вычислить. После вычисления полученное выражение присваивается переменной, указанной в левой части оператора. При этом тип переменной должен быть совместим с типом вычисленного выражения.
Оператор безусловного перехода (GOTO).
Представляет собой простой оператор, используя который можно изменять порядок выполнения операторов в программе. Общий вид оператора безусловного перехода:
GOTO р,
Где р – метка, которой помечен некоторый иной оператор в программе. Меткой может служить идентификатор или целое число (без знака) от 1 до 9999. Все метки, используемые в программе должны быть объявлены. Раздел описания меток обозначается зарезервированным словом LABEL. Если метка должна использоваться внутри процедуры или функции, она должна быть описана в ней. Передача управления снаружи внутрь процедуры или функции с помощью оператора перехода невозможна.
Применение оператора безусловного перехода является нежелательным, т.к. присутствие этого оператора в программе нарушает ее структурную целостность и наглядность.
Кроме оператора безусловного перехода в Паскале существуют безусловные функции: Exit и Halt.
Exit позволяет завершить работу текущего программного блока (самой программы, процедуры или функции).
Halt позволяет завершить работу программы.
Пустой оператор.
Пустой оператор не выполняет никаких действий, и в тексте программы он представлен символом «;».
Операторы ввода и вывода.
Ввод данных с клавиатуры
Процедура чтения Read обеспечивает ввод данных для последующей их обработки программой.
Общий вид: READ (<список переменных>);
Например: READ(a,b,c);
READ(d);
В списке перечисляются имена переменных. Значения этих переменных набираются через пробел на клавиатуре. После набора данных для одной процедуры Read нажимается клавиша ввода Enter. Значения переменных должны вводиться в строгом соответствии с синтаксисом языка Паскаль. Если соответствие нарушено, то возникают ошибки.
Процедура чтения READLN аналогична процедуре Read, единственное отличие в том, что после считывания последнего в списке значения курсор переходит на начало новой строки.
Readln;– происходит переход на новую строку без ввода данных(используется для приостановки выполнения программы, после нажатия клавиши ввода Enterпрограмма продолжает работу).
Вывод данных
Процедура вывода Write производит вывод данных.
Общий вид: WRITE(<список вывода>);
Write(V1[:W1[:D1]],…, Vn[:Wn[:Dn]]); W определяет ширину поля вывода, D – сколько знаков выводить после точки.
Writeln(V1[:W1[:D1]],…, Vn[:Wn[:Dn]]); – квадратные скобки используются для обозначения необязательных частей операторов.
WRITELN; осуществляет переход на новую строку без вывода данных
В списке вывода могут быть представлены выражения допустимых типов данных (integer, real, char и т.д.) и произвольный текст, заключенный в апострофы.
Например, Write(‘Привет’); Write(34.7); Write(45+55); Write(b, d);
Неформатированный вывод – Write(R). Если длина поля W не указана, то под каждое число отводится стандартная длина поля и числа печатаются в экспоненциальной форме. На экране будет:3.04550000000000Е+02 . Е+02 – степень равна 2.
В процедурах вывода Write и Writeln имеется возможность записи выражения, определяющего ширину поля вывода.
Форматированный вывод – Write(r:5:2). На экране будет выведено число в привычной нам форме: 304.55.
Процедура Writeln аналогична процедуре Write. Отличие в том, что после вывода последнего в списке выражения курсор переходит на начало новой строки.
Синтаксис процедуры Write и WriteLn:
Write (X,Y); или WriteLn (X,Y); - "Слепой" вывод значений переменных.
Write (X+Y); или WriteLn (X+Y); - Вывод результата выражения.
Write (X); или WriteLn (X); - Неформатированный вывод значения переменной.
Write (X:6:2); или WriteLn (X:6:2); - Форматированный вывод значения переменной.
Write ('Фраза'); или WriteLn ('Фраза'); - Вывод некоторой фразы на дисплей.
Write ('Фраза',Y); или WriteLn ('Фраза',Y); - Вывод фразы и значения переменной на экран, "неслепой" вывод значения переменной,
где:
1) X, Y - переменные, значения которых нужно вывести на экран;
2) 'Фраза' - некоторый пояснительный текст, который обычно сопровождает значение переменной;
3) X:6:2 - указывается формат значения переменной. Это значит, что всего 6 символов, отводится под значение переменной X, причем после десятичной точки будет выведено на экран 2 символа. Это так называемый форматированный вывод числа с фиксированной точкой.
Структурированные операторы
Составной оператор.
Представляет собой последовательность некоторых операторов, которые выполняются в том порядке в каком содержатся в тексте программы. При этом зарезервированные слова begin и end являются операторными скобками, в которые заключены операторы, входящие в составной оператор.
Составной оператор имеет вид:
Begin S1; S2; .., Sn end;
Где 1 – Sn – операторы, образующие составной оператор;
begin и end–операторные скобки.
Составной оператор может включать другие составные операторы, причем допускается любой уровень вложенности.
Условные операторы.
1. Оператор IF имеет вид:
If p then a1 else a2
При выполнении этого оператора сначала выполняется некоторое логическое выражение p (условие), в случае истинности которого выполняется оператор a1, а в случае ложности оператор a2.Ключевые слова If, then и else имеют смысл если, то и иначе.
Возможен сокращенный вариант оператора IF:
If p then a1
Если условие p истинно, выполняется оператор a1. Если условие p ложно, управление передается следующему (за оператором If) оператору в программе.
Условие представляет собой логическое значение TRUE или FALSE либо константу логического типа, имеющую одно из этих значений, либо переменную логического типа, либо один из операторов сравнения.
В Паскале допускается вложенность оператора IF.
2. Оператор CASE имеет вид:
Case p of
a: S1;
b: S2;
…
n: Sn
elseSn+1
end;
При выполнении этого оператора сначала вычисляется некоторое выражение p, называемое селектором выбора, а затем в зависимости от полученного значения (если оно равно одной из констант a, b, …, n, которые называются константами выбора), выполняется один из операторов: S1, S2,…, Sn, помеченные соответствующей константой. Если значение выражения p не совпадает ни с одной из констант выбора, выполняется оператор Sn+1, содержащийся после ключевого слова else, причем ветвь else в операторе Case необязательна. Использованные здесь зарезервированные слова Case, of, else, end имеют смысл вариант, из, иначе, конец.
Каждый из операторов в операторе Case, помеченный константой выбора может быть составным.
Выражение, играющее роль селектора, должно принадлежать порядковому типу данных (т.е. типу, имеющему конечное число значений). Например: Integer, Boolean, Char.
Кроме одиночных констант, в вариантах оператора Case могут использоваться диапазоны значений и списки.
Пример:
Case x of
1..5: S1;
2, 3, 8: S2;
4, 6, 9..13: S3
elseS4
end;
Операторы цикла.
Для многократного повторения одних и тех же действий в Паскале предусмотрены три оператора цикла. Если число повторений (или итераций) заранее не известно, но известно условие завершения цикла, в таких случаях применяются операторы REPEAT и WHILE. Если же число повторений известно, то используется оператор FOR.
1. Оператор WHILE – оператор цикла с предусловием, имеет следующий вид:
While p do s;
При выполнении этого оператора сначала вычисляется некоторое логическое выражение p (условие), принадлежащее типу Boolean, в случае истинности которого выполняется оператор s (являющийся, как правило, составным). После этого вычисление условия, его проверка и выполнение оператора S повторяются до тех пор, пока выражение p не становится равным FALSE. Затем управление передается следующему (после WHILE) оператору программы. Ключевые слова WHILE и DO имеют смысл пока и выполнять.
Если условие p равно FALSE с самого начала, оператор S называемый телом цикла, не выполнится ни разу. Если условие p тождественно TRUE цикл бесконечен. Для того чтобы тело цикла выполнилось насколько раз, значение условия каждый раз преобразовываться в теле цикла.
2. Оператор REPEAT – оператор с постусловием, имеет следующий вид:
Repeat S until p;
При выполнении этого оператора сначала выполняется тело цикла S, затем вычисляется некоторое логическое выражение p (условие), принадлежащее типу Boolean, в случае ложности которого вновь выполняется тело цикла. Затем выполнение тела цикла, вычисление условия p и его проверка выполняются до тех пор, пока выражение p не станет равно TRUE. После этого управление передается следующему (за REPEAT) оператору в программе. Зарезервированные слова Repeat и Until имеют смысл повторять и пока не.
Оператор цикла REPEAT отличается от оператора WHILE, тем, что здесь условие проверяется после выполнения тела цикла, т.е. гарантируется хотя однократное его выполнение. Оператор REPEAT выполняется до тех пор, пока условие равно FALSE, и управление передается следующему (за REPEAT) оператору, когда условие становится равным TRUE. (Для оператора WHILE имеет место обратная зависимость). Условия повторения цикла для операторов REPEAT и WHILE противоположны.
Даже если условие p равно TRUE с самого начала, тело цикла выполнится хотя бы раз. Если условие p тождественно FALSE, цикл будет бесконечным.
Тело цикла REPEAT не требует заключения в операторные скобки begin .. end. Между ключевыми словами REPEAT и UNTIL можно ввести любое количество операторов, без необходимости заключать их в операторные скобки.
В операторе REPEAT перед ключевым словом UNTIL знак «;» необязателен.
3. Оператор FOR – оператор цикла с параметром имеет следующий вид:
For i=a to b do S;
При выполнении этого оператора сначала вычисляется некоторое начальное значение а, которое присваивается переменной i, называемой параметром цикла. Затем вычисляется конечное значение b и проверяется, имеет ли место равенство i=b. Если равенства нет, выполняется оператор s, который может быть составным, и переменная I увеличивается на единицу. После этого проверка, не равен ли конечному значению, а также выполнение оператора S и увеличение переменной I на единицу выполняется циклически до тех пор, пока не будет получен равенство i=b.
Параметр цикла I, а также начальное и конечное значение (a и b) могут принадлежать любому порядковому типу, но при этом все они должны быть одного типа. Если начальное значение превышает конечное или равно ему с самого начала, оператор s не выполнится ни разу.
Использованные здесь зарезервированные слова For, to, do имеют смысл от, до и выполнять.
Возможна и другая форма оператора цикла с параметром:
For i=a downto b do S;
Здесь, чтобы выполнялся оператор S, начальное значение а должно превышать конечное значение b. В этом случае параметр I с каждым циклом уменьшается на единицу, пока не станет равным конечному значению b.
Оператор цикла с параметром следует использовать тогда, когда заранее точно известно, сколько раз должно выполнится тело цикла.
4. Вложенные циклы. Это подразумевает, что существует внешний цикл и один или несколько внутренних. Каждое повторение внешнего цикла означает завершение всех внутренних циклов; при этом всем выражениям, которые управляют внутренними циклами, вновь присваиваются начальные значения. Вложение допустимо не только для операторов цикла с параметром (FOR), но и для других операторов цикла (WHILE и REPEAT).
Несколько правил при организации вложенных циклов:
· Все правила присущие простому циклу должны соблюдаться;
· Имена параметров для вложенных циклов должны быть различны;
· Внутренний цикл должен полностью входить во внешний