Лабораторная работа №33 «Язык программирования Турбо Паскаль: Типы данных, переменные, константы, операнды, операции, выражения» |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
1.Цель и задачи лабораторной работы Приобретение навыков программирования на языке Турбо Паскаль. 2.Теоретические сведения 2.1.Система программирования Турбо Паскаль включает:
Алфавит языка включает символы:
Зарезервированные слова — слова, смысл и назначение которых однозначно предопределены правилами языка. Их нельзя использовать для других целей. Это служебные слова и директивы. Например, 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.
2.2.Типы данных. Данные — это конкретные значения, которые обрабатываются во время выполнения программы. Все данные должны быть явно приписаны к определенным типам. Тип данного — определяет формат машинного представления данного, допустимый набор его значений, а также те действия, которые могут быть выполнены над этими данными. Наряду со стандартными типами данных, не требующими специальных описаний, в Турбо Паскале могут использоваться типы, задаваемые программистом идентификатором в разделе объявлений под рубрикой Type. Простые типы. Простой тип определяет упорядоченное множество значений. Простые типы подразделяются на порядковые и вещественные. Порядковые типы включают значения, каждому из которых поставлен в соответствие определенный порядковый номер. К порядковым относятся упорядоченные типы: целочисленные (по возрастанию), логический (0 — false, 1 — true), символьный (по возрастанию ASCII-кодов), перечисляемые (в порядке перечисления), интервальные (по возрастанию или ASCII — кодам). Целочисленные типы— включают определенное подмножество целых чисел, характеристики которых указаны в таблице.
Например, чтобы определить переменную А как целочисленную величину типа 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.
Перечисляемый тип — определяется конечным набором значений, представленных списком идентификаторов в объявлении типа. Формат объявления данного перечисляемого типа: 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.
Интервальный тип.Данные интервального типа могут принимать значения из указанного диапазона значений. Формат объявления интервального типа: Type < имя типа > = < нижняя граница диапазона >..< верхняя граница диапазона >; Например, интервальный тип со значениями чисел от 0 до 99 объявляется так: Type interval100 = 0..99; Вещественные типы — числа в формате с плавающей точкой, характеризующееся мантиссой и порядком. Определены следующие вещественные типы:
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’
Множественный тип— представляет собой некоторую совокупность элементов (≤ 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.
Совместимость типов предполагает выполнение операций над данными одного типа.
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;
Обращение к переменным выполняется по их именам. Для обращения ко всему массиву используется его имя: 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.
2.4.Выражения, операнды и операции. С помощью выражений задаются правила вычисления новых значений на основе ранее уже известных. Выражения формируются из операндов, знаков операций ( далее — просто операций ) и скобок, позволяющих устанавливать требуемый порядок выполнения действий. Операндами могут служить переменные, константы и имена функций, типы которых должны соответствовать типу операции. Большинство операций в языке являются бинарными, т. е. в них участвуют два операнда. Остальные операции являются унарными, поскольку выполняются над единственным операндом. Бинарные операции изображаются в традиционной алгебраической записи, например, арифметическое сложение двух величин A и B имеет вид A+B. Обозначение унарной операции всегда предшествует операнду, например, смена знака величины C должна записываться как -C. Операнды и результаты выполнения операций. К моменту выполнения операции обоим её операндам ( или одному, если операция унарная ) должны быть тем или иным способом присвоены конкретные значения, причём они должны принадлежать к типам, над элементами которых может быть произведена данная операция. В свою очередь, операция порождает результат, тип которого зависит как от типов операндов, так и от принадлежности операции к определённой функциональной группе. Арифметические операции
Логические операции выполняются над операндами типа boolean:
Строковая операция в языке предусмотрена одна, именуется конкатенацией и обозначается знаком +. Результатом операции S+T, где S и T имеют строковой или символьный типы, является строка, образованная путём слияния операндов S и T. Этот результат совместим с любым строковым типом. Если длина полученной строки превышает 255 символов, стоящие справа лишние символы отбрасываются. Операции над множествами
Результаты операций над множествами подчиняются правилам логики множеств:
Для создания множества используются квадратные скобки и совокупность значений множественного типа. Синтаксис операции создания множества таков: < конструктор множества > :: = [< список >] | []; < список > ::= < элемент > | < группа > [, < список > ] < элемент > ::= < выражение > < группа > ::= < выражение > .. < выражение > Пример создания множества: A := [K+1..N, 13, m div 2] Конструкция [] обозначает пустое множество. Операции сравнения
Сравнение величин простых типов. Если операнды операций сравнения =, < >, <, >, <=, > = имеют простые типы, то эти типы должны быть совместимы. Однако если один операнд относится к действительному типу, то другой может быть целого типа. Сравнение строк. Операции сравнения =, < >, <, >, <=, и > = применяются для посимвольного сравнения строк на основании таблицы ASCII — кодов. Можно сравнить любые два значения строкового типа, поскольку все они являются совместимыми. Значения символьного типа также совместимы со значениями строкового типа, причем при их сравнении символьные значения интерпретируются как строковое значение длиной 1. Сравнение множеств. Если операндами операций =, <=, или > = являются множества A и B, то результаты их сравнения определяются согласно следующим правилам:
Вызовы функций. Наряду с переменными и константами в операциях в качестве операнда может выступать имя функции соответствующего типа. Кроме имени, вызов функции должен содержать список аргументов, если в её объявлении имеется список параметров. Вызов функции приводит к её активизации, причем каждый аргумент подставляется вместо параметра с соответствующим порядковым номером. По завершении обработки функции вычисленное значение присваивается переменной с её именем, которая и участвует в выполнении соответствующей операции как операнд. Приведём примеры вызовов функций: Sin(Alpha) Sqrt(A*A+B*B) Distance(Time, Velocity) Порядок выполнения операций, описываемых выражением, программист может регулировать с помощью круглых скобок. Внутри скобок, а также в выражениях, не содержащих скобок, очерёдность, в которой выполняются операции, определяется их приоритетами. Все операции, в соответствии с приоритетами разделены на четыре категории. В первую очередь выполняются операции, обладающие высшим приоритетом, затем вторым и т.д.
Последовательность вычислений сложных выражений, включающих цепочки операций, а также, возможно, скобки, определяется тремя основными правилами:
Использование выражений, операндов и операций демонстрирует следующий пример: 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 — функция извлечения квадратного корня}
3.Оборудование для лабораторной работы Персональный IBM PC — совместимый компьютер, подключенный в одноранговую локальную вычислительную сеть под управлением Windows 95.4.Порядок выполнения работы
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
©2008-2020, Интернет-институт ТулГУ |
или напишите нам прямо сейчас