Типы данных в Turbo Pascal.Оператор присваивания

Типы данных в Turbo Pascal.Оператор присваивания

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

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

Типы данных в Turbo Pascal.Оператор присваивания - student2.ru

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

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

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

Целые и вещественные типы предназначены для представления числовых данных. В математике рассматривается бесконечное множество целых чисел.

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

Логический (булевский) тип имеет всего два значения: true (да — истина, 1) и false (нет — ложь, 0), причем данные значения упорядочены, т. е. в операциях сравнения true > false.

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

Запись оператора присваивания

<ИмяПеременной >:= <выражение>

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

В правой части оператора присваивания может находиться:

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

Знак :=читается как «присвоить значение».

Тип переменных в левой и правой частях оператора присваивания должны совпадать!

Выполнение оператора присваивания

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

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

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

Неполное ветвление

If <условие> then <оператор>;

Выполнение условного оператора IF

· проверяется условие

· если оно истинно, то выполняется оператор, стоящий после зарезервированного слова if

· если условие ложно, то выполняется оператор, стоящий после зарезервированного слова else

Часть оператора, стоящая после зарезервированного слова else, может отсутствовать. В этом случае при ложности проверяемого условия просто выполняется оператор, следующий за оператором условия.

Один оператор if может входить в состав другого оператора if. В этом случае говорят о вложенности операторов.

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

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

Следует знать:

· при вложенности операторов каждое else соответствует тому if которое непосредственно ему предшествует

· конструкций со степенью вложенности более 2—3 необходимо избегать из-за сложности их анализа при отладке программы;

· в условных операторах часто используют составной оператор begin end. Если между begin и end находится только один оператор, операторные скобки лучше не писать,

· в условных операторах точка с запятой не ставится после then и перед else.

· самое простое логическое выражение — одна переменная логического типа, которая играет роль целого выражения;

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

Case

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

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

Запись оператора case

case <выражение—селектор> of

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

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

else <оператор;>

end;

Массивы. Типы массивов.

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

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

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

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

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

Характеристики массива:

− тип — общий тип всех элементов массива;

− размерность (ранг) — количество индексов массива;

− диапазон изменения индекса (индексов) — определяет количество элементов в массиве.

Вектор (одномерный массив) — это пример массива, в котором элементы нумеруются одним индексом.

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

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

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

При обращении к элементу массива индекс указывается в квадратных скобках после имени массива. Например, а[3], b[1,2]. Однако использование элементов массива в качестве обычных переменных не дает существенной выгоды. Массивы ценны тем, что их индексы сами могут быть переменными или выражениями, обеспечивая доступ не к одному, а к последовательности элементов. Обработка массивов производится при изменении индексов элементов.

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

для одномерного массива:

var

ИмяМассива:array[НижняяГраницаИндекса..ВерхняяГраницаИндекса] of ТипЭлементов;

для двумерного массива:

var

ИмяМассива: array [НижняяГраницаИндекса1..ВерхняяГраницаИндекса1, НижняяГраницаИндекса2..ВерхняяГраницаИндекса2] of ТипЭлементов.

Дискретность

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

Понятность

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

Результативность

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

Корректность

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

Массовость

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

Оператор FOR

Этот оператор называют циклом со счетчиком или циклом с параметром.

На каждом шаге цикла переменная счетчик автоматически изменяет свое значение на единицу.

Оператор повтора For состоит из заголовка и тела цикла.

Заголовок оператора повтора for определяет:

• диапазон изменения значений переменной (счетчика цикла) и одновременно число повторений оператора, содержащегося в теле цикла;

• направление изменения значения счетчика цикла (возрастание — to; убывание — downto).

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

for... do — заголовок цикла;

операторы; — тело цикла

Запись оператора for

Оператор for можно реализовать двумя способами:

for счетчик:=НачальноеЗначение to КонечноеЗначение do

begin

операторы;

end;

for счетчик :=НачальноеЗначение downto КонечноеЗначение do

begin

операторы;

end;

Выполнение оператора for

§ вычисляются начальное и конечное значения счетчика

§ осуществляется присваивание

счетчик цикла := НачальноеЗначение

§ проверяется условие

счетчик цикла <= КонечноеЗначение

§ если условие выполнено, то

§ выполняется тело цикла

§ значение управляющей переменной изменяется на + 1 (to) или —1 (downto)

§ если условие не выполнено, то работа оператора for завершается,

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

Типы данных в Turbo Pascal.Оператор присваивания - student2.ru

Оператор REPEAT

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

Оператор повтора repeat состоит из:

• заголовка repeat,

• тела цикла

• условия окончания цикла.

Зарезервированные слова repeat и until, обозначают «повторяй» и «пока» соответственно.

Условие — это выражение логического типа: простое выражение отношения или сложное логическое выражение.

Запись оператора REPEAT

repeat

оператор 1;

…………

оператор N;

until условие выхода из цикла.

Выполнение оператора REPEAT

§ выполняется тело цикла — операторы, которые находятся между repeat и until

§ проверяется значение условия выхода из цикла, записанного после until

§ если оно равно false (ложь), т. е. условие не выполняется —

§ выполняется тело цикла

§ снова проверяется условие

§ если условие примет значение true (истина), происходит выход из цикла.

Следует знать:

§ число повторений операторов цикла repeat определяется в ходе работы программы и во многих случаях заранее неизвестно

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

§ нижняя граница операторов тела цикла четко обозначена словом until поэтому нет необходимости заключать эти операторы в операторные скобки begin и end. В то же время наличие операторных скобок не будет являться ошибкой.

Запись оператора

while <условие продолжения повторений> do <тело цикла>;

Условие — булевское выражение, тело цикла — простой или составной оператор.

Тело цикла – простой или составной оператор.

Выполнение оператора WHILE

− вычисляется значение выражения условия.

− если результат равен True

− тело цикла выполняется

− снова вычисляется выражение условия.

− если результат равен False

− происходят выход из цикла

− переход к первому после while оператору.

Следует знать:

§ цикл while — это цикл с предусловием, т. е. операторы тела цикла могут быть не выполнены ни разу если проверяемое условие ложно с самого начала;

§ число повторений операторов цикла while определяется в ходе работы программы и во многих случаях заранее неизвестно;

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

§ цикл while считают самым универсальным видом цикла;

§ цикл while обычно применяется в тех же задачах, что и repeat. Удобнее всего использовать его в тех случаях, когда возможны ситуации невыполнения цикла;

§ в операторе цикла while точка с запятой никогда не ставится после зарезервированного слова do.

Процедуры и функции

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

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

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

procedureИмяПроцедуры(ФормальныеПараметры);

Например, заголовок процедуры без формальных параметров:

procedure horline;

Процедура, использующая формальные параметры:

procedure horline(len:integer; s:char); { len, s - формальные параметры}

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

Тело процедуры по своей структуре аналогично обычной программе:

procedureИмяПроцедуры(ФормальныеПараметры) ;

{ Описательная часть процедуры }

Begin

{ Инструкции исполнительной части процедуры }

end;

Обратите внимание — в конце тела процедуры, как и программы, стоит end однако после него ставится точка с запятой.

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

ИмяПроцедуры(ФактическиеПараметры);

Например:

horline; { фактические параметры не указаны, т. к. в }

{ вызываемой процедуре нет формальных параметров }

или

horline(10,'-'); { число и символ — фактические параметры }

Функции

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

□ Функция передает в программу результат своей работы — единственное значение, носителем которого является имя самой функции.

□ Имя функции может входить в выражение как операнд. Функция воз­вращает результат в точку своего вызова.

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

functionИмяФункции(ФормальныеПараметры) : ТипРезультата;

{ n — формальный параметр } { a,b — формальные параметры { формальных параметров нет }

Например:

function fibo(n: integer): integer; function instep(a,b: real): real; function normrandom : double;

Имя функции уникально в пределах программы.

Тело функции по своей структуре аналогично обычной программе:

functionИмяФункции(ФормальныеПараметры) : ТипРезультата; { Описательная часть функции }

Begin

{ Инструкции исполнительной части функции }

ИмяФункции := Результат; end;

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

Файлы

В Turbo Pascal имеются три вида файлов:

  • текстовый файл (определяется типом text);
  • типизированный файл (задается предложением fi1е оf <Тип>);
  • нетипизированный файл (определяется типом f i1е).

var

ИмяПеременной: text;

var

ИмяПеременной:file;

var

ИмяПеременной: file of Тип;

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

Вне зависимости от файлового типа, любая программа работы с файлом должна:

1. Определить переменные файлового типа.

2. Каждому из используемых физических файлов при помощи процедуры assign (в переводе — назначить) программист указывает переменную файлового типа.

3. Инициировать файл — это значит указать направление передачи данных. Работа с файлом возможна, если он существует. Такой файл открывают, делая его доступным для ввода и/или вывода. В случае отсутствия файл должен быть создан. В первом случае используется процедура reset (пе­реустановка), во втором случае — rewrite (перезапись). При открытии и создании файла для временного хранения его данных автоматически вы­деляется область в оперативной памяти компьютера, которая называется; буфером файла.

4. Все предыдущие этапы носили подготовительный характер. Принцип работки файлов любых типов состоит в следующем. Данные из файла сначала считываются в оперативную память компьютера, для чего в программе назначаются переменные подходящих типов. Вся дальнейшая работка ведется для этих переменных. В случае необходимости ее результаты записываются в новый, или дописываются к уже существующее файлу. Чтение (ввод) данных или запись (вывод) выполняется при помощи инструкций read И readln, write И writeln

5. Закрытие файловой переменной и сохранение данных на диске по окон­чании работы с файлом осуществляет процедура close. Если файл за­крыт, над ним нельзя выполнять никаких действий, пока он вновь не будет открыт.

Текстовые файлы состоят из последовательностей строк произвольной длины.

Каждая строка в текстовом файле оканчивается составным символом «конец строки», который является объединением двух символов: #13(CR) – возврат каретки и символа #10 (LF) – перевод строки.

Составной символ обозначается eoln (End Of Line).

Текстовые файлы – файлы последовательного доступа.

Типизированные файлы состоят из последовательности элементов одного типа и длины. Каждый элемент файла имеет номер. Первый элемент файла считается нулевым.

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

Данные в типизированном файле хранятся во внутреннем двоичном представлении (в виде, в котором они хранятся в оперативной памяти).

Строковый тип

Строка — это последовательность символов. Максимальное количество символов в строке (длина строки) может изменяться от 1 до 255. Пере­менную строкового типа можно определить через описание типа в разделе определения типов или непосредственно в разделе объявления переменных. type

ИмяТипа = string[максимальная длина строки]; var

Идентификатор, ... : ИмяТипа;

Строковую переменную можно задать и без предварительного объявления типа:

Var

Идентификатор, ... : string[макс. длина строки];

или

Var

Идентификатор, ... : string;

Если максимальная длина строки не указывается, то она равна 255 байт.

Строка в языке Turbo Pascal трактуется как массив символов. Для строки из n символов в памяти отводится n+1 байт; п байтов — для хранения символов строки, а один дополнительный байт — для значения текущей длины строки. Этот дополнительный байт имеет номер 0, соответственно первый символ строки имеет номер 1, второй — номер 2 и т. д.

К любому символу в строке можно обратиться как к элементу одномерного массива.

array[0..n] of char;

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

В отличие от массивов переменные строкового типа могут участвовать целиком в операторах ввода/вывода.

Записи

Запись — это структурированный тип данных, состоящий из фиксированно­го числа компонентов одного или нескольких типов, называемых полями записи. В отличие от массива, компоненты (поля) записи могут быть раз­личного типа. Чтобы можно было ссылаться на тот или иной компонент записи, каждое поле имеет свое имя (а не номер, как элемент массива). Записи можно объявить следующим способом.

Сначала объявляется тип записи.

type

ИмяТипа = record

ИмяПоля1: ТипПоля1;

ИмяПоля2: ТипПоля2;

ИмяПоляN: ТипПоляN;

end;

Затем объявляются переменные соответствующего типа.

var

ИмяПеременной: ИмяТипа;

Например:

type avto=record

number: integer; { номер автомобиля }

marka: string[20]; { марка автомобиля }

fio: string[40]; ( фам*илия, инициалы владельца }

address: string[60]; { адрес владельца } end; var m,v: avto;

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

m.number, т.marka, т. fio, m.address

Составное имя можно использовать везде, где допустимо применение типа поля. Для присваивания полям значений используется оператор присваи­вания.

Составные имена можно использовать в операторах ввода/вывода:

Библиотечный модуль

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

Процедуры и функции, содержащиеся в модуле, подключаются к програм­ме, которая их использует, на этапе компоновки. Хранится модуль, как в исходном, так и в откомпилированном виде (файлы с расширениями pas и tpu соответственно).

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

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

Типы данных в Turbo Pascal.Оператор присваивания

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

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

Типы данных в Turbo Pascal.Оператор присваивания - student2.ru

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

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

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

Целые и вещественные типы предназначены для представления числовых данных. В математике рассматривается бесконечное множество целых чисел.

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

Логический (булевский) тип имеет всего два значения: true (да — истина, 1) и false (нет — ложь, 0), причем данные значения упорядочены, т. е. в операциях сравнения true > false.

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

Наши рекомендации