Главная стр 1стр 2
скачать
1 вопрос.

Структура программы на языке Паскаль.

Пример простейшей программы.
Программа состоит из заголовка и блока.
1. Заголовок программы

program n (input, output, x, y,…);


здесь n – имя программы; input – файл ввода; output – файл вывода; x, y – внешние файлы, используемые в программе.

Заголовка может и не быть или он может быть без параметров.


Блок

Блок программы состоит из шести разделов, следующих в строго определенном порядке:

раздел меток (label)

раздел констант (const)

раздел типов (type)

раздел переменных (var)

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

раздел действий (операторов).


Раздел действий должен присутствовать всегда, остальные разделы могут отсутствовать.
Каждый из первых четырех разделов начинается с соответствующего ключевого слова (label, const, type, var), которое записывается один раз в начале раздела и отделяется от последующей информации только пробелом, либо концом строки, либо комментарием.
Раздел меток (label)

Любой выполняемый оператор может быть снабжен меткой – целой положительной константой, содержащей не более 4-х цифр. Все метки, встречающиеся в программе, должны быть описаны в разделе label.


Общий вид:

label l1, l2, l3…;


здесь l1, l2, l3 – метки.
Пример. label 5, 10, 100;
Метка отделяется от оператора двоеточием.

Пример. Пусть оператор a := b имеет метку 20. Тогда этот оператор выглядит так:

20: a := b;
Раздел констант (const)

Если в программе используются константы, имеющие достаточно громоздкую запись (например, число пи с 8-ю знаками), либо сменные константы (для задания варианта программы), то такие константы обычно обозначаются какими-либо именами и описываются в разделе const, а в программе используются только имена констант. Это делает программу более наглядной и удобной при отладке и внесении изменений.


Общий вид:

const a1 = c1; a2 = c2; …


здесь a1 – имя константы, c1 – значение константы.
Пример. const pi = 3.14; c = 2.7531;
Раздел типов (type)
Если в программе вводится тип, отличный от стандартного, то этот тип описывается в разделе type:

type t1 = вид_типа;

t2 = вид_типа;
где t1 и t2 – идентификаторы вводимых типов.
Затем тип используется при объявлении переменных.
Пример использования нестандартных типов:

const


len=40;

type


year=1930..2010;

names=string[len];

var

empl: names;



y: year;
Раздел описания типов имеет большое значение в программе на языке Pascal. Если в программе не использовать типы, то можно столкнуться с несовместимостью типов переменных, даже если они описаны одинаково.
Раздел переменных (var)
Пусть в программе встречаются переменные v11, v12,…; все они должны быть описаны следующим образом:

var v11, v12,…: type1;

v21, v22,…: type2; …
здесь v11, v12,… - имена переменных; type1 – тип переменных v11, v12,…; type2 – тип переменных v21, v22,….

Пример. var k, i, j: integer; a, b: real;

Каждая переменная должна быть описана до ее использования в программе и отнесена к одному и только одному типу. Названия разделов (const, type, var…) указываются только один раз.
Пример.

var a: real;

b: real;
Таким образом, в разделе var вводится имя каждой переменной и указывается, к какому типу эта переменная принадлежит. Тип переменной можно задать двумя способами: указать имя типа (например, real, color и т.д.), либо описать сам тип, например: array[1..16] of char
Раздел процедур и функций

Здесь присутствуют заголовки и тела пользовательских процедур и функций.


Раздел действий (операторов)

Эта часть программы начинается с ключевого слова begin и заканчивается словом end, после которого должна стоять точка. Раздел действий есть выполняемая часть программы, состоящая из операторов.



2 вопрос.

Типы данных языка Паскаль.

Краткий ответ

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

Типы данных делятся на

I. Простые типы: порядковые, вещественные, дата-время.

Порядковый тип в свою очередь делится на:

1. целые типы;

2. логический тип или булевский тип;

3. символьный тип;

4. перечисляемые типы;

5. ограниченные типы или тип-диапазон.
II. Составные типы: структурированные типы, указатели, строки, процедурные, объекты, классы, варианты.

Структурированные типы в свою очередь делятся на:

1. регулярные типы (массивы);

2. комбинированные типы (записи);

3. множественные типы;

4. файловые типы;
5. Указатели

6. Строковые типы

7. Процедурные типы

8. Объекты

9. Классы

10. Варианты

Привести несколько примеров.
Полный ответ.

На основе стандартных скалярных типов имеется возможность образовывать пользовательские скалярные типы. Есть два способа порождения новых скалярных типов - ограниченные и перечислимые типы.

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


1. Целые типы.

Эта группа типов обозначает множество целых чисел в различных диапазонах. Имеется пять целых типов, различающихся допустимым диапазоном значений и размером занимаемой памяти. Целые типы обозначаются идентификаторами Integer, Byte, ShortInt, Word, LongInt; их характеристики приведены в таблице 1.


Таблица 1

Тип

Диапазон значений

Размер памяти

ShortInt

-128..127

1 байт

Integer

-32768..32767

2 байта

LongInt

-2147483648..2147483647

4 байта

Byte

0..255

1 байт

Word

0..65535

2 байта

Значения целых типов могут изображаться в программе двумя способами: в десятичном виде и в шестнадцатеричном коде. В последнем случае в начале такого кода ставится символ ‘$’.

Примеры:
123
-1
$F1 (десятичное представление 241)

0$B80


2. Булевский (логический) тип

К логическим относятся типы Boolean, ByteBool, Bool, wordBool и LongBool. В стандартном Паскале определен только тип Boolean, остальные логические типы введены в Object Pascal для совместимости с Windows: типы Boolean и ByteBool занимают по одному байту каждый, Bool и WordBool - по 2 байта, LongBool - 4 байта.

Имеется два значения булевского типа, представляющие логические истинностные значения (истина/ложь). Эти значения обозначаются посредством стандартных идентификаторов:

true (истина)

false (ложь).
3. Символьный тип

Значениями символьного типа являются символы из множества ASCII (American Standard Code for Information Interchange - американский стандартный код для обмена информацией). Это множество состоит из 256 различных символов, упорядоченных определенным образом, и содержит символы заглавных и строчных букв, цифр и различных других символов, включая специальные управляющие символы. Допускаются некоторые отклонения от стандарта ASCII, в частности, при наличии соответствующей системной поддержки это множество может содержать буквы русского алфавита.

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

‘*’ ‘a’ ‘X’ ‘:’ ‘’’’

Для представления самого апострофа его изображение удваивается.

Если символ, который нужно изобразить, не имеет графического представления, то можно воспользоваться следующей эквивалентной формой записи, состоящей из символа ‘#’ (решетка, диез) и целочисленного кода символа (от 0 до 255):

#10 #$A

4. Перечислимые типы

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


Иными словами, можно определить новый тип путем явного перечисления всех возможных его значений, причем каждое такое значение будет определяться только именем.
Например: Пусть необходимо разработать программу управления уличным светофором. Ясно, что программа будет моделировать светофор с помощью указания его текущего состояния, т.е. включенного в данный момент света. Таким образом, переменная программы, представляющая светофор, может принимать одно из трех значений, соответствующих красному, желтому и зеленому цветам. Можно было бы ввести для этого переменную целого типа и установить, что, например, значения 1, 2, 3 соответствуют указанным цветам. Однако очевидно, что числа, кодирующие цвета, не имеют прямого отношения к решаемой задаче и, следовательно, усложняют программу и затемняют ее смысл. Поэтому наиболее естественным решением в данном случае будет введение перечислимого типа из трех значений, обозначаемых именами Red, Yellow, Green, и переменной этого типа.

Синтаксис определения перечислимого типа:


(идентификатор 1, идентификатор 2,...,идентификатор N)

Примеры перечислимых типов:

(Red, Yellow, Green)

(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)

(On, Off)

(Left, Up, Right, Down)

Перечислимые типы считаются дискретными типами. Над значениями перечислимых типов определены операции сравнения (считается, что значения перечислимого типа указаны в списке в порядке возрастания). Кроме того, допускается образование ограниченных типов из перечислимых по обычным правилам, например:

Monday..Friday

Left..Up

Имена из списка перечислимого типа считаются константами соответствующего перечислимого типа. Эти идентификаторы должны быть уникальны в пределах блока; недопустимы описания двух и более перечислимых типов с совпадающими константами.
5. Ограниченные типы (тип-диапазон)

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

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

Синтаксис определения такого типа: минимальное_ значение..максимальное_значение

Например:
1..10
-100..100
‘a’..’z’

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

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

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


6. Вещественные типы

Эта группа типов обозначает множества вещественных значений в различных диапазонах Паскаль поддерживает четыре различных вещественных типа. Они именуются идентификаторами Real, Single, Double, Extended и Comp и имеют характеристики, представленные в таблице 2.


Таблица 2

Вещественный тип

Диапазон значений

Число цифр мантиссы

Размер памяти

Real

2.9 E-39..1.7E38

11-12

6 байт

Single

1.5E-45..3.4E38

7-8

4 байта

Double

5.0E-324..1.7E308

15-16

8 байт

Extended

3.4E-4932..1.1E493

19-20

10 байт

Comp

-2E+63..+2E+63-1




8 байт

Примечания

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

2. Все вещественные типы, кроме Real, могут использоваться в программе, вообще говоря, только если сделаны соответствующие опции компилятора. Для корректной компиляции программы, использующей эти типы, можно также применить директиву компилятора {+N}.

Вещественные значения могут изображаться в форме с фиксированной точкой и в форме с плавающей точкой. В первом случае целая и дробная части вещественного числа отделяются друг от друга символом ‘.’ (точка). Обе эти части должны обязательно присутствовать, например:
17.384

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



<мантисса>Е<порядок>

Такое обозначение понимается как “мантисса, умноженная на 10 в степени, равной порядку”. Например:

7Е-2 эквивалентно 7· 10-2

12.25 Е+6 или 12.25 Е6 эквивалентно 12.25· 106


7. Дата/время

Тип дата-время определяется стандартным идентификатором TDateTime и предназначен для одновременного хранения и даты, и времени. Во внутреннем представлении он занимает 8 байт и подобно currency представляет собой вещественное число с фиксированной дробной частью: в целой части числа хранится дата, в дробной - время. Дата определяется как количество суток, прошедших с 30 декабря 1899 года, а время - как часть суток, прошедших с 0 часов, так что значение 36444,837 соответствует дате 11.10.1999 и времени 20:05. Количество суток может быть и отрицательным, однако значения меньшие -693594 (соответствует дате 00.00.0000 от Рождества Христова) игнорируются функциями преобразования даты к строковому типу.


II. Составные типы: структурированные типы, указатели, строки, процедурные, объекты, классы, варианты.

Структурированные типы в свою очередь делятся на:

1. регулярные типы (массивы);

2. комбинированные типы (записи);

3. множественные типы;

4. файловые типы;


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


1. Регулярные типы (массивы)

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

Для корректного определения регулярного типа необходимо задать две характеристики: тип элементов массива, а также количество и «способ нумерования» элементов. Последние характеристики задаются посредством указания типа индекса.
Определение массива имеет следующий общий вид:

Type
A = array [T1] of T2;


Здесь:
Array, of – служебные слова;

Т1 – тип индекса массива;

Т2 – тип компонент массива.

В дальнейшем идентификатор этого типа может быть использован в описании переменных.

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

Ниже приведены описания различных массивов:

Type
M1 = array [1..100] of real;

M2 = array [char] of boolean;

Matrix = array [ 1..10 ] of array[1..20] of integer;

Database = array [1..MaxF] of file of Person;

Var
Vector: M1;

Sym_Table: M2;

Arr1, Arr2: Matrix;

S: array [Red, Yellow, Green] of boolean;

Примечания

1. Число элементов в массиве всегда должно быть фиксировано.

2. Для задания количества элементов массива используется тип; число элементов определяется количеством возможных значений указанного типа, что отличает язык Паскаль от многих других языков, в которых размер массива задается либо целым числом (или выражением целого типа), либо диапазоном целых чисел. Это придает Паскалю дополнительную гибкость, позволяя «нумеровать» элементы массива не только целыми числами, но и значениями произвольного целого типа.
3. В качестве элементов массива могут выступать значения любого типа; в частности, ими могут быть значения любых составных типов, например, массивы:

Var


V2: array[1..10] of array [1..20] of byte;

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

Var

V2: array [ 1..10, 1..20 ] of of byte;



Число индексов в определении (т.е. размерность массива) в языке не ограничивается.

4. Турбо Паскаль допускает единственное возможное действие над массивом в целом: использование его в операторе присваивания, например:

Vect1:=Vect2;
причем типы обоих массивов должны быть эквивалентны.

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

Пример:
V2 [ i, j ]:= V2 [ i, j-1 ] + 1;

Sym_Table [ ‘z’ ]:= Switch and Sym_Table [ ‘a’ ];


2. Комбинированные типы (записи)

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

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

Структура объявления типа записи такова:



<имя типа> = RECORD <список полей> END

Здесь:
<имя типа> - правильный идентификатор;

RECORD, END - зарезервированные слова (запись, конец);

<список полей> - этот список представляет собой последовательность разделов записи, между которыми ставится точка с запятой.

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

Type
Birthday = record

day, month: byte;

year: word

end;


Var

a, b: Birthday;

........

В этом примере тип Birthday (день рождения) содержит три поля с именами DAY, MONTH и YEAR (день, месяц, год); переменные A и B содержат записи типа Birthday.

Как видно из примера, распространенным случаем употребления записи является необходимость описать атрибуты (характеристики) некоторого объекта, представляемого и обрабатываемого в программе. Например, для описания объекта “человек” могут понадобиться следующие характеристики:


  • фамилия, имя, отчество (символьные массивы или строки);

  • пол (перечислимый тип из двух значений);

  • индекс специальности (целое) и т.д.

В этом случае описание комбинированного типа Person (человек) может выглядеть следующим образом:

Type


Person=record

Name, SecondName, SurName: string [20];

Sex: (Male, Female);

Speciality: Word

end;

Имея в программе вышеприведенное описание, можно определить переменные данного типа, например:



Var Sasha, Masha, Natasha: Person;
Примечания
1. В пределах одной записи имена полей должны быть уникальны.

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

Рассмотрим случай, когда в составе записи содержатся поля, имеющие также тип записи. Пусть для комбинированного типа Person необходимо хранить информацию о дате рождения человека. Эту информацию можно представить в виде трех полей в составе типа Person. Однако логичнее для этого определить отдельный тип, так как в этом случае он может использоваться в описании других типов и переменных.
Пример:
Type

Date = Record

Month: (Jan,Feb,Mar,Apr,May,June,July,Aug, Sept, Oct, Nov, Decem);

Day: 1..31;

Year: 1900..2000

end;


Person = Record

Name, SecondName, SurName: string [20];

Sex: (Male, Female);

Speciality: Word;

Birthday: Date

end;


Доступ к полям из элемента Birthday производится по общим правилам, например:

Sasha. Birthday. Year:= 1970;

Masha. Birthday. Month:= May;
3. Множественные типы

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

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

Синтаксис описания некоторого множественного типа имеет вид:

Type

<имя типа> = set of <базовый тип>;
Здесь:

<имя типа> - правильный идентификатор языка;

set, of - зарезервированные слова (множество, из);



<базовый тип> - базовый тип элементов множества, в качестве которого может использоваться любой порядковый тип, кроме WORD, INTEGER, LONGINT (т.е. типы BYTE и CHAR, перечислимые типы, а также ограниченные типы, образованные из них).

Пример:


Type
digitChar = set of ‘0’..’9’;

digit = set of 0..9;

elemColor = (Red, Yellow, Blue);

color = set of Color;


Var
s1, s2, s3: digitChar;

s4, s5, s6: digit;

myColor: Color;
Примечания.


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

Например, не может быть множества: 1, 2, 2.

  1. Порядок “расположения” элементов в множестве не имеет значения.

  2. Множества:

1, 2, 3

3, 2, 1


одинаковы.

Это соответствует принятой в математике трактовке множества как бесповторной неупорядоченной совокупности объектов.

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

Например:

s6:= [1, 2, 3];

s4:= [ 0, 1, 2, 3+4 ];

s5:= [ 0..3, 6 ]; {эквивалентно множеству [0, 1, 2, 3, 6]}

s1:= [ ‘0’..’5’ ];

s2:= []; {пустое множество}

myColor:= [ Red ];


4. Файловые типы

Любой файл имеет три характерные особенности. Во-первых, у него есть имя, что дает возможность программе работать одновременно с несколькими файлами. Во-вторых, он содержит компоненты одного типа. Типом компонентов может быть любой тип Object Pascal, кроме файлов. Иными словами, нельзя создать “файл файлов”. В-третьих, длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти.

Файловый тип можно задать одним из трех способов:

<имя> = File of <тип>;

<имя> = TextFile;

<имя> = File;

Здесь <имя> - имя файлового типа (правильный идентификатор);

File, of - зарезервированные слова (файл, из); TextFile - имя стандартного типа текстовых файлов;

<тип> - любой тип Object Pascal, кроме файлов.
5. Указатели

Object Pascal предоставляет в распоряжение программиста гибкое средство управления динамической памятью - так называемые указатели. Указатель - это переменная, которая в качестве своего значения содержит адрес байта памяти. С помощью указателей можно размещать в динамической памяти любой из известных в Object Pascal типов данных. Лишь некоторые из них (Byte, Char, ShortInt, Boolean) занимают во внутреннем представлении один байт, остальные - несколько смежных. Поэтому на самом деле указатель адресует лишь первый байт данных.

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

var


p1: ^Integer;

р2: ^Real;


6. Строковые типы

Тип STRING (строка) в Паскале широко используется для обработки текстов. Он во многом похож на одномерный массив символов ARRAY [0..N] OF CHAR, однако, в отличие от последнего, количество символов в строке-переменной может меняться от 0 до N, где N - максимальное количество символов в строке. Значение N определяется объявлением типа STRING[N] и может быть любой константой порядкового типа, но не больше 255.

Паскаль разрешает не указывать N, в этом случае длина строки принимается максимально возможной, а именно N=255.

Строка в Паскале трактуется как цепочка символов. К любому символу в строке можно обратиться так же, как к элементу одномерного массива ARRAY [0..N] OF CHAR, например:

Var

st: string;



.........

if st [5] = ‘A’ then.....

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

Значение текущей длины строки можно не только извлекать из первого байта самой строки, но и получать с помощью функции LENGTH (st).

Например:
Var
st: string;

.........


write (‘Введите строку: ’);

readln (st);

writeln (‘Текущая длина строки - ’,Length(st));

........


Данный фрагмент программы распечатает текущую длину введенной строки.

К строкам можно применять операцию “+” - сцепление, например:

st:= ‘a’ + ‘b’;

st:= st + ‘c’; {st содержит “abc”}

Если длина сцепленной строки превысит максимально допустимую длину N, то “лишние” символы отбрасываются.

Операции отношения =, <>, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением CHR(0).

Следующие операции отношения дадут значение TRUE:

‘A’ > ‘1’

‘Turbo’ < ‘Turbo Pascal’

‘Паскаль’ >‘Turbo Pascal’

Все остальные действия над строками и символами реализуются с помощью встроенных процедур и функций.
7. Процедурные типы

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

Для объявления процедурного типа используется заголовок процедуры (функции), в котором опускается ее имя, например:

type


Proc1 = Procedure (a, b, с: Real; var d: Real); Proc2 = Procedure (var a, b);

РгосЗ = Procedure;

Func1 = Function: String;

Func2 = Function (var s: String): Real;

Как видно из приведенных примеров, существует два процедурных типа: тип-процедура и тип-функция.

8. Объекты

Тип данных Object является базовым в Visual Basic.NET. Это означает, что все типы данных и типы объектов являются производными от него либо непосредственно, либо косвенно. Это означает также, что любой другой тип данных, простейший или составной, может быть преобразован в Object. Если параметр Option Strict выключен, тип Object может быть использован в качестве универсального типа данных.


9. Классы

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

Пример:
type
TMyClass = class(TObject) Field: Integer;

end;
var

MyClass: TMyClass;
10. Варианты

Вариант (в Delphi 1 он отсутствует) - это тип variant, разработанный специально для тех случаев, когда на этапе компиляции программист не может сказать, какого типа данные будут использоваться в выражении или как параметры вызова подпрограмм. Переменная-вариант занимает в памяти дополнительные 2 байта, в которые помещается информация о действительном типе переменной. Эта информация позволяет компилятору создать код, который будет осуществлять необходимое преобразование типов на этапе прогона программы.

В переменную-вариант можно поместить:


  • целое или вещественное число;

  • логическое значение;

  • строку;

  • время и/или дату;

  • OLE-объект;

  • массив произвольной размерности и длины, содержащий элементы одного из перечисленных выше типов.

Варианты могут участвовать в целочисленных, вещественных, логических и время-дата выражениях при условии корректности соответствующих преобразований. Например, если варианту v присвоена строка '1.0', то выражение 1+v будет правильным вещественным значением 2,0. Однако если v:= 'текст', выражение 1+v вызовет исключение EVariantError.

3 вопрос.

Переменные, константы в языке Паскаль.

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

Целочисленные константы определяются числами, записанными либо в десятичной, либо в шестнадцатеричной системе счисления. Эти числа должны использоваться без десятичной точки.

Пример:
const a=5;

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

Пример:
сonst b=21.43;

Символьная константа - некоторый символ, заключенный в апострофы.

Пример:
const c='w';

Строковые константы - последовательность любых символов, которая заключена в апострофы.

Пример:
const d='stroka';

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

Примеры:
god: integer = 2012;

simvol: char = '!';

tip: real = 57.23;


Приведем простенький пример программы на языке Паскаль, реализующий некоторые виды констант:
program prost;

const


m = 11; {константа m не меняет исходное значение}

n: integer = 4; {типизированная константа n}

var

x,y,f:integer; {переменные x и y имеют целый тип}



begin

writeln('Введите x'); readln(x);

writeln('Введите y'); readln(y);

f:=m*exp(n*ln(x+y)); {меняется значение переменной x}

writeln('Значение функции равно',f); {выводим значение f на экран}

end.
4 вопрос.



Операторы в языке Паскаль (понятие, классификация)

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

Все операторы можно разбить на две группы. Одну группу образуют операторы, которые в своем составе (т.е. в последовательности символов, образующей запись оператора) не содержат других операторов. Операторы этой группы назовем основными операторами. К ним относятся: оператор присваивания, оператор процедуры, оператор перехода, пустой операторы паскаль. Другую группу образуют операторы, в состав которых входят другие операторы. Операторы этой группы будем называть производными операторами. К этой группе относятся следующие типы операторов: составной оператор, выбирающий оператор, оператор цикла, оператор присоединения. В записи алгоритма могут использоваться последовательности из этих операторов, без ограничений на их количество. Все операторы в такой последовательности отделяются друг ог друга разделителем ” ; ” (точка с запятой) — тем самым производится четкое разбиение всей записи на отдельные операторы. Таким образом, если обозначить через S любой допустимый оператор, то в общем случае такая последовательность будет иметь вид

S; S; .. . ; S

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







5 вопрос.

Ввод-вывод данных в языке Паскаль. Примеры.
В Паскале ввод осуществляется с помощью процедур read() и readln(), а вывод - благодаря write() и writeln(). Процедуры, которые имеют окончание ln, после своего выполнения переводят указатель на новую строку.

Write() чаще используется, когда надо вывести для пользователя сообщение на экран, после чего получить данные, не переводя курсора на новую строку. Например, выводим на экран "Введи число: " и не переводим курсор на новую строку, а ждем ввода.

Ввод данных в языке программирования Паскаль обеспечивается процедурами read() и readln(). Ввод данных осуществляется либо с клавиатуры, либо из файла. Здесь рассматривается только ввод с клавиатуры.

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

В процедуры ввода можно передавать не один фактический параметр, а множество.

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

Существуют особенности ввода данных с помощью операторов read() и readln(). Если используются подряд несколько операторов read(), то вводимые данные можно разделять всеми допустимыми способами. При использовании нескольких вызовов readln() каждый последующий срабатывает только после нажатия Enter. Программа ниже иллюстрирует это. Комментарии поясняют последовательность возможных действий при вводе данных.

var


a,b,c,d: integer;

begin


read(a); // a -> or or -> b

read(b);


writeln(a,' ',b);

readln(c); // c -> only -> d

readln(d);

writeln(c,' ',d);

read(a,b); // a -> or or -> b

writeln(a,' ',b);

readln(c,d); // c -> or or -> d

writeln(c,' ',d);

end.

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



  • целочисленные величины выводятся как целые десятичные числа,

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

  • величины символьного типа и строки выводятся в виде символов, величины логического типа - в виде true и false (логические константы).

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

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

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

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


Пример, показывающий запись операторов вывода:
program vyvod;

var rM, rN: real;

iS, iT:integer;

bZ, bL: boolean;

chY, chD, chH, chX: char;

begin


. . .

writeLn(rM, rN:10:2);

writeLn(iS, iT:8);

writeLn(bZ, bL:8);

writeLn(chY, chD, chH, chX);

end.
Вопрос 6.



Условный оператор в языке Паскаль. Полное и неполное ветвление. Примеры.
Если условие выполняется, то будет выполнена инструкция "1", если нет, то - инструкция "2". Несмотря на то, что в схеме присутствуют два действия, выполнено будет только одно, так как условие либо ложно, либо истинно. Третьего не дано. Такая схема позволяет решать задачи, в которых в зависимости от сложившихся обстоятельств требуется совершить то или иное действие. Нет никакого сомнения, что число задач такого рода огромно. Более того, очень сложно придумать реально значимое задание, алгоритм выполнения которого содержал бы в себе простое прямое следование команд. Даже примитивный пример, взятый из курса математики, как вы увидите, не может быть решен без использования ветвления. Итак, необходимо вычислить значение выражения y=1/x. Вам известно, что данная функция не всегда имеет значение, то есть не для всех значений аргумента существует значение результата. Наша задача так составить алгоритм, чтобы исполнитель ни в коем случае не встал в тупик, даже при получении нуля в качестве аргумента. Сформулировать это на естественном языке не трудно:

1. Получить значение x.

2. Если x=0, то сообщить, что выражение значения не имеет, иначе - вычислить y как 1/x.
Таким образом используется приведенная выше алгоритмическая структура. Она может быть выражена простыми словами:

Если <усл.> {Если выполняется условие}

то <действие 1> {то выполнить действие № 1 }

иначе <действие 2> {иначе - выполнить действие № 2 }

все
Как это записать на Паскале? Да точно так же, только по-английски.
Формат условного оператора на языке Паскаль:

If <условие>

Then <оператор 1>

Else <оператор 2>;


Обратите внимание на то, что в Then- и Else- части стоит только один оператор. Но что делать, чтобы решить задачу, в которой по выполнению или невыполнению условия нужно совершить не одно, а несколько действий? Здесь приходит на помощь уже известный вам составной оператор. В операторные скобки можно заключить любое количество операторов.
Вариант условного оператора в этом случае:

If <условие>

Then Begin <группа операторов 1> end

Else Begin < группа операторов 2> end;


Знак "точка с запятой" не ставится перед служебным словом Else, но операторы в группах, естественно, отделяются друг от друга этим знаком.
Теперь поговорим об условиях. В программах на языке Паскаль условия представляют собой выражения, значением которых является величина логического (Boolean) типа. Это может быть как просто переменная указанного типа, так и сложная последовательность высказываний, связанных логическими операциями.
В простых условиях могут применяться знаки операций сравнения: >(больше), <(меньше), =(равно), <>(не равно), >=(больше или равно), <=(меньше или равно).
Примеры простых условий: A=5 {Значение переменной А равно 5}

(C+D3)>=(D1*(45-2)) {Значение выражения в левой части больше либо равно значению выражения из правой части}

S<>'ABC' {Значение переменной S не равно строковой константе 'ABC'}
Приведем пример решения еще одной задачи: "Из двух чисел выбрать наибольшее".
На первый взгляд решение очевидно, но оно не столь тривиально, как кажется.

Program Example;

Var A,B,C : Real; {A,B - для хранения аргументов, C - результат}

Begin


Writeln('Введите два числа');

Readln(A,B); {Вводим аргументы с клавиатуры}

If A>B Then C:=A Else C:=B; {Если A>B, то результат - A, иначе результат - B}

Writeln(C); {Выводим результат на экран}

End.
7 вопрос. Оператор выбора в языке Паскаль. Пример.
Оператор выбора (или оператор варианта) дает возможность выполнить одно из нескольких действий в зависимости от значения скалярного выражения или выражения ограниченного типа.
Формат оператора варианта:

case <селектор> of



<константа 1> : <оператор 1>;

...


<константа N> : <оператор N>

else


<оператор>

end;
Здесь <селектор> – это выражение любого порядкового типа; <константа> - постоянная величина того же типа, что и селектор, представляет собой различные значения, которые может иметь селектор варианта, называется меткой варианта. После каждой метки располагается оператор. Когда одно и то же действие необходимо выполнить для нескольких различных значений селектора варианта, эти значения можно записать в виде списка.


Выполнение оператора выбора происходит так:

вычисляется выражение-селектор;

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

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


Изображение оператора варианта на блок-схеме приведено на рисунке.

Изображение оператора варианта на блок-схеме

Примеры использования
Селектор интервального типа:

case I of

1..10 : writeln('число ', I:4, ' в диапазоне 1 - 10');

11..20 : writeln('число ', I:4, ' в диапазоне 11 - 20');

21..30 : writeln('число ', I:4, ' в диапазоне 21 - 30')

else


writeln('число ', I:4, ' вне пределов контроля')

end;
Селектор целочисленного типа:

case I of

1 : Z := I + 10;

2 : Z := I + 100;

3 : Z := I + 1000

end;
Селектор перечисляемого пользовательского типа:

var


Season: (Winter, Spring, Summer, Autumn);

begin


.

.

.



case Season of

Winter: writeln('Зима');

Spring: writeln('Весна');

Summer: writeln('Лето');

Autumn: writeln('Осень')

end;


end.
Пример программы с использованием оператора case, которая по введенному номеру дня недели выводит на экран его название на русском языке.

program Day_Week;

var

Day: byte;



begin

write('Введите номер дня недели: ');

readln(Day);

case Day of {Вычисление значения селектора и выбор}

1: writeln('Понедельник');

2: writeln('Вторник');

3: writeln('Среда');

4: writeln('Четверг');

5: writeln('Пятница');

6: writeln('Суббота');

else

7: writeln('Воскресенье');



end;

end.
8 вопрос. Оператор цикла for в языке Паскаль. Пример использования.



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


Для организации этого цикла используется оператор цикла с параметром, имеющий вид:
For <параметр цикла> := <начальное значение> To <конечное значение> Do <тело цикла>;
где
for - для;

to - до;


do - выполнить;
<параметр цикла> - переменная целого типа;

<начальное значение> и <конечное значение> - арифметические выражения целого типа;

<тело цикла> - один или несколько операторов языка Паскаль.
Если тело цикла содержит более одного оператора, то оно заключается в так называемые операторные скобки begin...end.
В отличие от других языков программирования, в Паскале шаг изменения параметра строго постоянен и равен 1. Такой цикл называют прямым. Единственное исключение из этого правила составляет цикл с шагом (-1), который имеет следующий вид:
For <параметр цикла> := <начальное значение> DownTo <конечное значение> Do <тело цикла>;
Этот цикл называют обратным.
В прямом цикле начальное значение меньше конечного, в обратном - начальное значение больше конечного.
Например,
For i := 1 To 10 Do write(i); - выводит на экран строку 12345678910

For i := 10 DownTo 1 Do write(i); - выводит на экран строку 10987654321


9 вопрос.

Оператор цикла while в языке Паскаль. Пример использования.

Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет.



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

var

i, n: integer;



begin

write ('Количество знаков: ');

readln (n);

i := 1;


while i <= n do begin

write ('(*) ');

i := i + 1

end;


readln

end.
Задача: вычислить сумму ряда 1+1.5+2+2.5+3+3.5+ .. + 30


program example-while;
var

sum:real;

n:real;

BEGIN


sum:=0;

n:=1;


while n < =30 do

begin


sum:=sum+n;

n:=n+0.5;

end;

writeln('Сумма равна: ',sum);



END.

10 вопрос.

Оператор цикла repeat в языке Паскаль. Пример использования.

В цикле repeat логическое выражение стоит после тела цикла. Причем, в отличие от цикла while, здесь всё наоборот: в случае true происходит выход из цикла, в случае false – его повторение.

var

i, n: integer;



begin

write ('Количество знаков: ');

readln (n);

i := 1;


repeat

write ('(*) ');

i := i + 1

until i > n;

readln

end.
В примере, даже если n будет равно 0, одна звездочка все равно будет напечатана.


Program test2;

Var b:Real;

Begin

b:=100;


Repeat b:=b/2;

Until b<10;

Writeln(b:0:2);

End.
11 вопрос.



Массивы. Понятие, разновидности, способы описания. Доступ к элементам массива. Основные способы сортировки массивов.

Массив – это именованная группа однотипных данных, хранящихся в последовательных ячейках памяти. Каждая ячейка содержит элемент массива. Элементы нумеруются по порядку, но необязательно начиная с единицы (хотя в языке программирования Pascal чаще всего именно с нее). Порядковый номер элемента массива называется индексом этого элемента.

Общая форма описания одномерного массива на Паскале такая:



var <имя массива>: array [<нижняя граница индекса .. верхняя граница индекса>] of <тип массива>

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



var T: array [1..12] of real;

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

Type

Mass=array[1..n] of Integer;



Var

A,B:Mass;


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

Простой массив является одномерным. Он представляет собой линейную структуру.


Пример программы, задающей массив из десяти случайных целых чисел от 0 до 100.

Var


M:array[1..10] of Integer;

i:Byte;


Begin

Randomize;

For i:=1 to 10 do

Begin


M[i]:=random(100);

Write(M[i],’ ‘);

End;

End.
Существует три основных способа сортировки массивов:



  1. Метод пузырька.

  2. Метод вставки.

  3. Метод сортировки посредством выбора.



12 вопрос.

Строковый тип данных в языке Паскаль, строковые выражения. Операции со строковым типом.

Строка — это последовательность символов. Каждый символ занимает 1 байт памяти (код ASCII). Количество символов в строке называется ее длиной. Длина строки может находиться в диапазоне от 0 до 255. Строковые величины могут быть константами и переменными. Особенностью строки в Turbo Pascal является то, что с ней можно работать как с массивом символов, с одной стороны, и как с единым объектом, — с другой. За счет этого обработка строк достаточно гибка и удобна. Строковая константа есть последовательность символов, заключенная в апострофы. Например: 'это строковая константа', ‘272’. Строковая переменная описывается в разделе описания переменных следующим образом:

Var <идентификатор> : string[<максимальная длина строки>];

Например:

Var Name : string[20];

Параметр длины может и не указываться в описании. В таком случае подразумевается, что он равен максимальной величине — 255. Например: Var slovo : string.

Строковая переменная занимает в памяти на 1 байт больше, чем указанная в описании длина. Дело в том, что один (нулевой) байт содержит значение текущей длины строки. Если строковой переменной не присвоено никакого значения, то ее текущая длина равна нулю. По мере заполнения строки символами ее текущая длина возрастает, но она не должна превышать максимальной по описанию величины.

Символы внутри строки индексируются (нумеруются) от единицы. Каждый отдельный символ идентифицируется именем строки с индексом, заключенным в квадратные скобки. Например: N[5], S[i], slovo[k+l]. Индекс может быть положительной константой, переменной, выражением целого типа. Значение индекса не должно выходить за границы описания.

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

Строковые выражения строятся из строковых констант, переменных, функций и знаков операций. Над строковыми данными допустимы операции сцепления и операции отношения.

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

Пример: 'Мама ' + 'мыла ' + 'раму'. В результате получится строка: 'Мама мыла раму'. Длина результирующей строки не должна превышать 255.

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

Пример:


Выражение

Результат

‘True1’<’True2’

True

‘Mother’>’MOTHER’

True

‘Мама ‘ <> ‘Мама’

True

‘Cat’=’Cat’

True

Функция Copy(S, Pozition, N) выделяет из строки S подстроку длиной N символов, начиная с позиции Pozition. Здесь N и Pozition — целочисленные выражения.

Пример:


Значение S

Выражение

Результат

‘Мама мыла раму’

Copy(S, 6, 4)

‘мыла’

‘Маша ела кашу’

Copy(S, 1, 8)

‘Маша ела’

Функция Concat(S1, S2, …, SN) выполняет сцепление (конкатенацию) строк S1, S2, …, SN в одну строку.

Пример:


Выражение

Результат

Concat('Маша ', 'ела ', 'кашу')

'Маша ела кашу'

Функция Length(S) — определяет текущую длину строки S. Результат — значение целого типа.

Пример:


Значение S

Выражение

Результат

'test-5'

Length(S)

6

'(A+B)*C'

Length(S)

7

Функция Pos(S1, S2) — обнаруживает первое появление в строке S2 подстроки S1. Результат — целое число, равное номеру позиции, где находится первый символ подстроки S1. Если в S2 подстроки S1 не обнаружено, то результат равен 0.

Пример:


Значение S2

Выражение

Результат

'abcdef'

Pos('cd', S2)

3

'abcdcdef'

Pos('cd', S2)

3

'abcdef'

Pos('k', S2)

0

Процедура Delete(S, Poz, N) — удаление N символов из строки S, начиная с позиции Poz.

Пример:


Исходное значение S

Оператор

Конечное значение S

'abcdefg'

Delete(S, 3, 2)

'abefg'

'abcdefg'

Delete(S, 2, 6)

'a'

В результате выполнения процедуры уменьшается текущая длина строки в переменной S.

Процедура Insert(S1, S2, Poz) — вставка строки S1 в строку S2, начиная с позиции Poz.

Пример:


Исходное значение S2

Оператор

Конечное значение S2

'ЭВМ РС'

Insert('IBM-', S2, 5)

'ЭВМ IBM-PC'

'Рис. 2'

Insert('N', S2, 6)

'Рис. N 2'


13 вопрос.

Комбинированный тип Record. Понятие, описание, обращение к полям.

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

Описание записи в языке ПАСКАЛЬ осуществляется с помощью служебного слова RECORD, вслед за которым описываются компоненты записи. Завершается описание записи служебным словом END.

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

type Row=Record

FIO: String[20];

TEL: String[7]

end;


var str: Row;

Описание записей возможно и без использования имени типа, напри- мер:

var str: Record

FIO: String[20];

TEL: String[7]

end;


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

str.FIO, str.TEL

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

Обращение к компонентам записей можно упростить, если воспользоваться оператором присоединения with.

Он позволяет заменить составные имена, характеризующие каждое по- ле, просто на имена полей, а имя записи определить в операторе присоединения:

with M do OP;

Здесь М - имя записи, ОР - оператор, простой или составной. Оператор ОР представляет собой область действия оператора присоединения, в пределах которой можно не использовать составные имена.

Инициализация записей осуществляется с помощью типизированных констант:

type

RecType= Record



x,y: Word;

ch: Char;

dim: Array[1..3] of Byte

end;


const

Rec: RecType= ( x: 127; y: 255;

ch: 'A';

dim: (2, 4, 8) );


14 вопрос.

Работа с файлами, файловые переменные и функции.

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

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

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

'LAB1.DAT'

'c:\ABC150\pr.txt'

'my_files'

Турбо Паскаль поддерживает три файловых типа:



  • текстовые файлы;

  • типизированные файлы;

  • нетипизированные файлы.

Доступ к файлу в программе происходит с помощью переменных файлового типа. Переменную файлового типа описывают одним из трех способов:

file of тип - типизированный файл (указан тип компоненты);


text - текстовый файл;
file - нетипизированный файл.

Примеры описания файловых переменных:

var

f1: file of char;



f2: file of integer;

f3: file;

t: text;


скачать

следующая >>
Смотрите также:
1 вопрос. Структура программы на языке Паскаль. Пример простейшей программы
481.48kb.
Руководство по языку Паскаль
543.28kb.
Программа на языке Паскаль состоит из заголовка, разделов описаний и раздела операторов. Заголовок программы содержит имя программы, например
30.14kb.
Программа для компьютера на машинном языке 14 Языки программирования 15 Пример настоящей программы для компьютера на языке Лого 16
4341.98kb.
Программа на языке паскаль состоит из двух частей подготовительной части и тела программы
57.52kb.
Множественный тип данных Множество в языке Паскаль
86.64kb.
Задача на кодирование информации. Билет 3
33.74kb.
Урок 1 Visual Basic. Линейные алгоритмы
221.71kb.
Тематическое планирование кружка на 2009/2010 уч г. «Основы алгоритмизации и программирования на языке Turbo Pascal»
63.37kb.
Структура программы на языке Turbo Pascal
170.72kb.
Лекция 1 Структура программы. Описание типов данных. Лекция 2 Арифметические и логические операции. Лекция 3 Операторы
611.52kb.
Понятие модели. Информационная модель. Виды информационных моделей (на примерах). Реализация информационных моделей на компьютере. Пример применения электронной таблицы в качестве инструмента математического моделирования
29.49kb.