Лабораторная работа по дисциплине «Информационные технологии в менеджменте» для ТулГУ



Лабораторная работа №33 «Язык программирования Турбо Паскаль: Типы данных, переменные, константы, операнды, операции, выражения»

1.Цель и задачи лабораторной работы

Приобретение навыков программирования на языке Турбо Паскаль.

2.Теоретические сведения

2.1.Система программирования Турбо Паскаль включает:

  • язык программирования;
  • редактор текстов для ввода и корректировки программ;
  • компилятор, переводящий тексты программ во внутри машинное представление;
  • отладчик для тестирования и отладки программ путём выполнения программы по шагам, проверки или модификации значений переменных, установки точек остановки и т.д.;
  • библиотеки стандартных, графических и прикладных программ, используемых при разработке собственных;
  • поддержку методов объектно-ориентированного проектирования и оверлейной организации программ;
  • удобную среду программирования с системой меню, оконным интерфейсом, контекстной системой подсказок, т.е. дружественным интерфейсом.

!!! Загрузите систему программирования Турбо Паскаль

(файл программы BPW.exe).

Ознакомьтесь с содержимым окна редактирования

(главным меню и панелью инструментов).

Алфавит языка включает символы:

  • прописные и строчные латинские буквы A..Z, a..z
  • десятичные цифры 0..9
  • специальные символы  +  —  *  /  =  <  >  [  ]  .  ,  (  )  :  ;  ^  @  {  }  $  #  _

Зарезервированные слова — слова, смысл и назначение которых однозначно предопределены правилами языка. Их нельзя использовать для других целей. Это служебные слова и директивы. Например, and, array, begin, goto, end и т.д.

Идентификаторы — имена для обозначения констант, переменных и их типов, полей, процедур, функций, модулей, программ. Начинаются с буквы или символа подчеркивания _ и далее возможны буквы, цифры, _. Длина имени любая, но компилятор различает идентификаторы по первым 63-м символам.

Метки — целые числа в диапазоне 0..9999 или идентификаторы. Используются при передаче управления оператором goto.

Числа :

а) <целое>::=<цифра>[<целое>]  Например: 2, 33, 796 и т.д.

б) <вещественное с фиксированной точкой>::= <знак> <целое>.<целое>   Например: 77.35, 2.421, -0.3 и т.д.

в) <вещественное в экспоненциальной форме >::= <знак> 0. <целое>E<знак><целое>  Например: -0.7Е+02= 70, 0.5Е-1=0.05 и т.д.

Строки — последовательность любых символов, заключенная в апострофы. Два соседних апострофа в строке обозначают один символ — апостроф. Например: ‘Turbo Pascal’  ‘ Объявление ’ и т.д.

Комментарии — любая комбинация символов в фигурных скобках {  } или комбинированных скобках (*  *). Например:

       {Пишите программы с комментариями}

       (* В них удобнее разбираться *)

Структура программы. Программа включает заголовок и два раздела. В первом разделе содержатся объявления всех объектов, используемых в программе (типы данных, константы, переменные, метки, процедуры, функции); во втором — операторы для описания действий над предварительно объявленными объектами:

<программа>::=[<заголовок>];

                           <раздел объявлений>

                           Begin

                                     <раздел операторов>

                           End.

Например:

Program Ex1;                         {заголовок} {пример 1}

       Uses WinCrt;                      {раздел}

       Var                                     {. . .}

              a: integer;                      {объявлений}

       Begin

              a:=4;                              {раздел}

              writeln(‘ Оценка — ‘, a); {операторов}

       End.

!!! Скопируйте Пример 1 через буфер обмена в окно редактирования системы программирования Турбо Паскаль и выполните эту программу по команде RunRun

!!! Измените оценку на 5 и снова выполните программу

2.2.Типы данных.

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

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

Простые типы. Простой тип определяет упорядоченное множество значений. Простые типы подразделяются на порядковые и вещественные. Порядковые типы включают значения, каждому из которых поставлен в соответствие определенный порядковый номер. К порядковым относятся упорядоченные типы: целочисленные (по возрастанию), логический (0 — false, 1 — true), символьный (по возрастанию ASCII-кодов), перечисляемые (в порядке перечисления), интервальные (по возрастанию или ASCII — кодам).

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

Обозначение типа Диапазон значений Длина (в байтах)
shortint -128..127 1
integer -32768..32767 2
longint -2147483648 ..2147483647 4
byte 0..255 1
word 0..65535 2

Например, чтобы определить переменную А как целочисленную величину типа integer, а переменную В — типа shortint в разделе объявлений надо записать:

Var

       A: integer;

       B: shortint;

Логический тип — обозначается зарезервированным словом boolean. Данные  логического типа могут принимать два значения true и false.

Объявление переменной С как переменной логического типа сводится к записи в разделе объявлений:

Var

       C: boolean;

Cимвольный тип — обозначается словом char. Данные символьного типа принимают значения кодов символов в соответствии с таблицей ASCII — кодов.

Объявление символьной переменной D выглядит так:

Var

       D: char;

Например,

Program Ex2;               {пример 2}

       Uses WinCrt;

       Var   a: integer;  c: boolean;  d: char;    {объявление переменных}

       Begin

              a:=4; c:=true; d:=’!’;         {присваивание переменным значений}

              writeln(‘ Оценка — ‘, a,’ ‘,c,d);      {вывод на экран}

       End.

!!! Скопируйте Пример 2 через буфер обмена в новое окно редактирования системы программирования Турбо Паскаль и выполните эту программу по команде RunRun. Объясните работу программы.

 Перечисляемый тип — определяется конечным набором значений, представленных списком идентификаторов в объявлении типа. Формат объявления данного перечисляемого типа:

Type

       < имя типа > = (< список >);

где < список >:: = < идентификатор > [,< список >]

Например, к данным перечисляемого типа относится набор карточных мастей ( трефы, бубны, черви, пики ):

Type

       Suit = (Club, Diamond, Heart, Spade);

или месяцев I квартала года:

Type

       month = (January, February, March);

Объявление переменной card, принимающей значения мастей карт выглядит так:

Var

       card: suit;

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

Program Ex3;             {пример 3}

       Uses WinCrt;

       Type

              Suit = (Club, Diamond, Heart, Spade);  {объявление}

              month = (January, February, March);     {перечисляемых типов}

       Var

              a1:array[suit]of string[10];          {объявление переменных — одномерных}

              b1:array[month]of string[10];      {массивов, состоящих из строк}

              card: suit;       {объявление переменных }

              monI: month; {перечисляемого типа}

       Begin                  a1[Club]:=’Club’;a1[Diamond]:=’Diamond’;a1[Heart]:=’Heart’;a1[Spade]:=’Spade’;

              b1[January]:=’January’; b1[February]:=’February’; b1[March]:=’March’;

              card:=Heart;

              monI:=March;

              writeln(‘карта =’,a1[card],#13#10,’месяц I-го квартала =’,b1[monI]);

       End.

!!! Скопируйте Пример 3 через буфер обмена в новое окно редактирования системы программирования Турбо Паскаль и выполните эту программу по команде RunRun.

Попытайтесь разобраться в этой программе.

Интервальный тип.Данные интервального типа могут принимать значения из указанного диапазона значений. Формат объявления интервального типа:

Type

< имя типа > = < нижняя граница диапазона >..< верхняя граница диапазона >;

Например, интервальный тип со значениями чисел от 0 до 99 объявляется так:

Type interval100 = 0..99;

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

Обозначение типа Диапазон изменения Число значащих цифр Размер в байтах
real 2.9E-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.1E4932 19-20 10

!!! Скопируйте Пример 1 через буфер обмена в новое окно редактирования системы программирования Турбо Паскаль, изменив тип Integer на Real. и выполните эту программу по команде RunRun

Cтруктурированные типы данных. Структурированные данные определяются типами своих компонентов и способами их структуризации.

Регулярный тип — одномерный или многомерный массив фиксированного числа однотипных элементов. При объявлении регулярного типа указывается тип индекса по каждому его измерению, а также тип элементов:

Type

<имя типа> = array [<список типов индексов>] of <тип элементов>;

где

<список типов индексов>::=<имя типа>[,<список типов индексов>]

Например, объявим массив А из 100 вещественных чисел:

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

Var a:date;

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

Type month = (January, February, March);

       prib = array [month,1..31] of real;

Var B: prib;

Ссылки на элементы массивов указываются как А[1], … ,A[100], B[march,10] и т.д.

Строковый тип. Данные строковых типов представляют собой последовательности символов переменной длины, объявленные зарезервированным словом string. При объявлении строковой величины в квадратных скобках указывается максимальное число символов в диапазоне от 1 до 255. Например:

Var text1: string[40];

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

text1: = ’Happy birthday to you’

!!! Объясните Пример 3, выполнив его еще раз.

Множественный тип— представляет собой некоторую совокупность элементов (≤ 256), которые определяются с помощью интервального типа или путём перечисления. Формат объявления

<имя типа> = set of <базовый тип>;

Например,

Type

       simbol =(Alpha, Betha, Gamma); {перечислимый тип}

       Letters = set of simbol;

       Digits = set of 0..9; {множество чисел от 0 до 9}

Множества, также как и перечислимые типы, не могут быть выведены на экран или принтер.

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

Формат записи:

< имя записи > = record < список полей >; end;

Например:

Program Ex4;             {пример 4}

       Uses WinCrt;

       Type

              Date = record

                     Year     : Word;

                     Month : 1..12;

                     Day     : 1..31;

              end;

       Var

              date1,date2:date;

       Begin

              date1.year:=1996;date1.month:=7;date1.day:=1;     {присваивание полям}

              date2.year:=1997;date2.month:=8;date2.day:=20;    {записей значений}

              writeln(‘день =’,date1.day,’  месяц =’,date1.month,’  год =’,date1.year,#13#10, ‘день =’,date2.day,’  месяц =’,date2.month,’  год =’,date2.year);

       End.

!!! Скопируйте Пример 4 через буфер обмена в новое окно редактирования системы программирования Турбо Паскаль и выполните эту программу по команде Run/ Run.

Объясните работу программы

Совместимость типов предполагает выполнение операций над данными одного типа.

!!! Скопируйте Пример 1 через буфер обмена в новое окно редактирования системы программирования Турбо Паскаль, измените тип Integer на Boolean и выполните эту программу по команде Run/ Run.

По команде Help/ Error Messages найдите описание ошибки этапа компилляции

2.3.Переменные и константы используются для работы с данными. Переменные принимают разные значения в ходе выполнения программы. Значения константам присваивает компилятор и они сохраняются в процессе выполнения программы.

Объявление переменных. Каждая используемая в программе переменная должна быть объявлена под рубрикой Var в разделе объявлений, т.е. отнесена к определённому типу данных. Чтобы объявить переменную надо указать её имя и тип. При объявлении однотипных переменных тип можно указывать один раз после списка их имён:

Var

       < список > : < тип >;

где < список >:: = < имя переменной > [,< список >]

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

Type

       Matr10x5=Array[1..10,1..5] of real;

       float = real;

Var

       A,B,C: Matr10x5;

       D:float;

или

Var

       A, B, C : array[1..10,1..5] of real;

!!! Объясните Примеры 1-4

Обращение к переменным выполняется по их именам. Для обращения ко всему массиву используется его имя:

My Array

Для обращения к элементу массива за именем в квадратных скобках указывается индекс элемента: MyArray[count+1] или MyArray[3], а в случае двумерного массива — два индекса MyArray2[3,7] и т.д.

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

My Array [count+1].Field1

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

Var

       Name : string [12];

       Letr : char;

тогда присвоение переменной letr значения 2-го элемента строки выглядит так:

letr := name [2];

Константы. Различают константы без имени, которые используются непосредственно в виде их значений как операнд выражений (например, A:=2*x; ), и именованные константы. Есть две разновидности именованных констант — обычные и типизированные.

Обычные константы имеют неявно назначенные типы, которые компилятор распознаёт автоматически, исходя из присвоенных константам значений:

< объявление константы > ::= Const < список >;

где < список > ::= < элемент > [, < список > ]

< элемент > ::= < имя константы> = < значение > | < выражение>

Например,

Const

       Min = 0;

       Max = 100;

       center = ( Max — Min ) / 2;

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

< элемент > ::= < имя константы> : < тип > = < значение > | < выражение>

Например,

Const

       Max : real = 9999;

       Delta : real = 1000;

       Min : real = Max — Delta;

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

Const

       Heading : string [10] = ‘ Section 3 ‘;

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

Type

       seasons=(winter, spring, summer, autumn);

       matr1x4=array[seasons] of integer;

Const

       Qdays : matr1x4=(90,92,92,91);

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

Qdays[winter]=90, Qdays[spring]=92, Qdays[summer]=92, Qdays[autumn]=91

Например,

Program Ex5;             {пример 5}

       Uses WinCrt;

       Type matr=array[1..5]of real;

       Const r : matr=(1.0,2.0,3.0,4.0,5.0);

              p=3.1415926;

       Var l: real; i:byte;

       Begin

              for i:=1 to 5 do                                                           {циклический}

                     begin                                                                         {расчет}

                            l:=2*p*r[i];                                                              {5 значений}

                            writeln(‘Радиус =’,r[i],’  Длина окружности =’,l); {с выводом на }

                     end;                                                                             {экран}

       End.

!!! Скопируйте Пример 5 через буфер обмена в новое окно редактирования системы программирования Турбо Паскаль и выполните эту программу по команде RunRun

2.4.Выражения, операнды и операции. С помощью выражений задаются правила вычисления новых значений на основе ранее уже известных. Выражения формируются из операндов, знаков операций ( далее — просто операций ) и скобок, позволяющих устанавливать требуемый порядок выполнения действий. Операндами могут служить переменные, константы и имена функций, типы которых должны соответствовать типу операции. Большинство операций в языке являются бинарными, т. е. в них участвуют два операнда. Остальные операции являются унарными, поскольку выполняются над единственным операндом. Бинарные операции изображаются в традиционной алгебраической записи, например, арифметическое сложение двух величин A и B имеет вид A+B. Обозначение унарной операции всегда предшествует операнду, например, смена знака величины C должна записываться как -C.

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

Арифметические операции

Операция

Обозначение

Тип операндов

Тип результата

Сложение

+

Целый вещественный

Целый вещественный

Вычитание

Целый вещественный

Целый вещественный

Умножение

*

Целый вещественный

Целый вещественный

Деление

/

Целый вещественный

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

Целочисленное деление

div

Целый

Целый

Остаток от деления

mod

Целый

Целый

Логические операции выполняются над операндами типа boolean:

Операция

Значение операнда А

Значение операнда В

Значение операции

not A

true
false


false
true

A and B

true
true
false
false

true
false
true
false

true
false
false
false

A or B

true
true
false
false

true
false
true
false

true
true
true
false

Строковая операция в языке предусмотрена одна, именуется конкатенацией и обозначается знаком +. Результатом операции S+T, где S и T имеют строковой или символьный типы, является строка, образованная путём слияния операндов S и T. Этот результат совместим с любым строковым типом. Если длина полученной строки превышает 255 символов, стоящие справа лишние символы отбрасываются.

Операции над множествами

Операция

Обозначение

Тип операндов

Объединение

+

Множества с совместимыми типами

Разность

Множества с совместимыми типами

Пересечение

*

Множества с совместимыми типами

Результаты операций над множествами подчиняются правилам логики множеств:

  • величина C принадлежит множеству A+B в том и только в том случае, если C принадлежит множествам A или B;
  • величина C принадлежит множеству A-B в том и только в том случае, если C принадлежит множеству A, но не принадлежит множеству B;
  • величина C принадлежит множеству A*B в том и только в том случае, если C принадлежит как множеству A, так и множеству B;

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

< конструктор множества > :: =  [< список >] | [];

< список > ::= < элемент > | < группа > [, < список > ]

< элемент > ::= < выражение >

< группа > ::= < выражение > .. < выражение >

Пример создания множества:

A := [K+1..N, 13, m div 2]

Конструкция [] обозначает пустое множество.

Операции сравнения

Операция Обозначение Тип операндов Тип результата
равно = совместимый простой boolean
не равно < > совместимый простой, множественный, строковый boolean
меньше < совместимый простой, строковый boolean
больше > совместимый простой, строковый boolean
меньше или равно <= совместимый простой, строковый boolean
больше или равно >= совместимый простой, строковый boolean
подмножество <= совместимые типы boolean
подмножество >= совместимые типы boolean
проверка вхождения элемента в множество in левый операнд: элемент множества; правый операнд: множество типа, совместимого с элементом boolean

Сравнение величин простых типов. Если операнды операций сравнения =, < >, <, >, <=,  > = имеют простые типы, то эти типы должны быть совместимы. Однако если один операнд относится к действительному типу, то другой может быть целого типа.

Сравнение строк. Операции сравнения =, < >, <, >, <=, и > = применяются для посимвольного сравнения строк на основании таблицы ASCII — кодов. Можно сравнить любые два значения строкового типа, поскольку все они являются совместимыми. Значения символьного типа также совместимы со значениями строкового типа, причем при их сравнении символьные значения интерпретируются как строковое значение длиной 1.

Сравнение множеств. Если операндами операций  =, <=, или > = являются множества A и B, то результаты их сравнения определяются согласно следующим правилам:

  • выражение А=В истинно тогда и только тогда, когда содержащиеся в А и В элементы попарно тождественны;
  • выражение А<=В истинно, если каждый элемент множества А является также элементом множества В;
  • выражение А>=В истинно, если каждый элемент множества В является также элементом множества А;
  • результат операции in является истинным, если величина порядкового типа входит как элемент в заданное множество.

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

Sin(Alpha)

Sqrt(A*A+B*B)

Distance(Time, Velocity)

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

Операции

Приоритет

Категория

+, -, not, @

первый (высший)

унарные операции

*, /, div, mod, and, shl, shr

второй

операции типа умножения

+, -, or, xor

третий

операции типа сложения

=, < >, <, >, <=, >=, in

четвёртый

операции типа сравнения

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

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

Использование выражений, операндов и операций демонстрирует следующий пример:

Program Ex6;      {Пример 6: Решение квадратного уравнения ax2+bx+c=0}

       Uses WinCrt;

       Const e:real=0.000001;

              f0:string[20]=’Введите коэффициент’;

              f1:string[7]=’Ответ: ‘;

              f2:string[7]=’       ‘;

       Var a,b,c,d,x1,x2: real;

       Begin

              write(f0+’ А =’);  {используется строковая операция конкатенации}

              readln(a);

              write(f0+’ B =’);

              readln(b);

              write(f0+’ C =’);

              readln(c);

              if (abs(a)<e) and (abs(b)<e) and (abs(c)<e)      {abs — функция для определения}

                                                                                      {абсолютной величины}

              then writeln(f1+’Бесчисленное множество корней’)

              else if (abs(a)<e) and (abs(b)<e) and (abs(c)>e)

                     then writeln(f1+’Нет корней’)

                     else if (abs(a)<e) and (abs(b)>e)

                            then writeln(f1+’x1,2 =’,-c/b)

                            else

                                   begin

                                          d:= sqr(b)-4*a*c;                                           {вычисление дискриминанта}

                                          if d<0 then writeln(f1+’x1 =’,-b/2*a,’ +i ‘,sqrt(abs(d))/2*a,{вывод на экран}

                                                        #13#10,f2+’x2 =’,-b/2*a,’ -i ‘,sqrt(abs(d))/2*a)     {мнимых корней}

                                                 else writeln(f1+’x1 =’,(-b+sqrt(d))/2*a,       {вывод на экран}

                                                               #13#10,f2+’x2 =’,(-b-sqrt(d))/2*a);        {действительных корней}

                                          end;                     {sqr — функция возведения в квадрат}

       End.                                    {sqrt — функция извлечения квадратного корня}

!!! Скопируйте Пример 6 через буфер обмена в новое окно редактирования системы программирования Турбо Паскаль и выполните эту программу по команде RunRun.

Постарайтесь объяснить работу этой программы

3.Оборудование для лабораторной работы

Персональный IBM PC — совместимый компьютер, подключенный в одноранговую локальную вычислительную сеть под управлением Windows 95.

4.Порядок выполнения работы

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

©2008-2020, Интернет-институт ТулГУ

Если Вы нашли ошибку, выделите её и нажмите Ctrl+Enter.
Узнать сколько стоит решение этого задания
(ответ в течение 5 мин.)
X