Міністерство освіти і науки України
НУ „Львівська політехніка”
Кафедра ЕОМ
ЗВІТ
Про виконання лабораторної роботи №3
Прості типи даних мови Турбо Паскаль
Кохалик Р.В.
(Студент)
ІКТА КІ-17
(Група)
Мітьков В.С.
(Керівник лаб. занять)
Львів 2003
Лабораторна робота №3
Прості типи даних мови Турбо Паскаль
Мета роботи вивчення способів оголошення та застосування простих типів даних для програмування обчислювальних задач.
Теоретичний вступ
1. Оголошення типiв даних
Константа, змiнна, значення функцiї або виразу в Турбо-Паскалi характеризується своїм типом. В програмi не можна використовувати нi одного iдентифiкатора без попереднього оголошення його типу. В Турбо-Паскалi визначенi простi та структурованi типи даних. До простих типiв вiдносяться порядковi та дiйснi. Порядковi типи мають кiнцеве число можливих значень. Цi значення можна впорядкувати i кожному з них можна поставити у відповідність його порядковий номер.
Дiйснi типи в машинному представленнi теж мають кiнцеве число значень, але їх кiлькiсть дуже велика. Тому поставити їм у вiдповiднiсть порядковий номер не можливо.
1.1. Порядковi типи
До порядкових типiв вiдносять: цiлi, логiчний, символьний, перелiковий i тип-дiапазон.До значень порядкових типiв x можна застосовувати функцiю ORD(x), яка повертає порядковий номер x.Для цiлих типiв ORD(x) = x.Для логiчного, символьного i перелiкового типiв функцiя ORD(x) дає цiле додатнє число вiд 0 до 255.Для типу-дiапазону ORD(x) повертає числове значення, що залежить вiд типу цого границь: цiлий, логiчний символьний, перелiковий.
1.1.1. Цiлi типи
Над цiлими числами визначенi операцiї:
+ додавання,- вiднiмання,* множення,/ дiлення (5/2 = 2.5)
div цiлочисельне дiлення (5 div 2 = 2) mod залишок вiд цiлочисельного дiлення (5 mod 2 = 1) =,<>,>,<,>=,<= - операцiї вiдношення not, and, or, xor - порозряднi логiчнi операцiї. Внутрiшнє представлення цiлих типiв визначається їх довжиною i знаком. Вiд'ємнi числа зберiгаються в доповняльному кодi, а додатнi – у прямому кодi.
1.1.2. Логiчний тип
Для опису логiчного типу використовується ключове слово boolean. Значенням даних логiчного типу є константи true ("логiчна iстина") або false ("логiчна фальш").
Для них справедливi наступнi правила: ORD(false)=0;ORD(true)=1;false<true;SUCC(false)=true;
PRED(true)=false;
Результатом операцiй вiдношення є булевський тип даних, наприклад:
var b:boolean;begin b:=5>7;writeln(b) {FALSE} end.
Значення булевського типу не можна ввести за допомогою процедури Read, але можна вивести за допомогою процедури Write.
1.1.3. Символьний тип
Данi символьного типу оголошуються за допомогою ключового слова char. Множиною значень типу char є символи, впорядкованi у вiдповiдностi з розширеним набором коду ASCII (American Standard Code for Information Interchange).Застосування функцiї ORD(ch) до значень символьного типу дає внутрiшнiй код вiд 0 до 255 Довiльне значення символьного типу можна отримати за допомогою функцiї CHR(n:byte),або знаку #, наприклад:CHR(65)='A';#65='A' Використовуючи явне перетворення до значень порядкового типу, можна отримати символ, наприклад:char(65)='A' .
Аналогiчно символ можна перетворити у цiле число: byte('A')=65. У пам'ятi тип char зберiгається як беззнаковий байт, хоча аргументом функцiї CHR може бути довiльне цiле значення зi знаком. Конкретний код символу завжди визначається як залишок вiд цiлочисельного дiлення вказаного числа на 256 (дiлення по модулю 256), наприклад:
CHR(321)='A';
1.1.4. Перелiчувальні типи
Перелiчувальні типи визначають впорядкованi множини значень шляхом вказання списку iдентифiкаторiв, якi позначають цi значення. Список iдентифiкаторiв задається у дужках через кому. Не дозволяється замiсть iдентифiкаторiв 1-n використовувати числа, символи, рядки символiв та данi iнших типiв! Iм'я та значення перелiкового типу не повиннi повторюватися в межах одного рiвня дiї описiв програми (в межах блоку).В межах визначеного блоку iдент1,...,iдентn є константами, тому не дозволяється здiйснювати їх модифiкацiю. Iдентифiкаторам 1-n в пам'ятi присвоєнi номери вiд 0 до n-1. Максимальне значення n = 65535.
Перелiковий тип є чисто внутрiшнiм типом даних Турбо-Паскаля. Данi перелiкового типу не можна ввести чи вивести! В основному вони використовуються для семантичної визначеностi програми. Якщо кiлькiсть елементiв перелiкового типу менша або рiвна 256, то у пам'ятi змiнна цього типу зберiгається як тип byte. Якщо кiлькiсть елементiв бiльша вiд 256, то змiнна зберiгається як тип word.
1.1.5. Тип-дiапазон
Тип-дiапазон визначає пiдмножину свого базового типу, в якостi якого може виступати довiльний порядковий тип, крiм типу-дiапазону.
Тип-дiапазон задається своїми границями:
type iм'я_типу=min_знач..max_знач;
Значення функцiї ORD для змiнних типу-дiапазону залежить вiд його базового типу. Якщо базовим типом є один iз цiлих типiв, то функцiя ORD повертає значення аргумента. Якщо базовим типом є символьний, то функцiя ORD повертає код символа. Для базового логiчного типу функцiя ORD повертає 0 для константи false i 1 для константи true. Для базового перелiкового типу функцiя ORD повертає порядковий номер елемента.Якщо елемент не належить визначеному дiапазону, то виникає помилка.При програмуваннi на Турбо-Паскалi рекомендується широко використовувати типи-дiапазони, що пiдвищує надiйнiсть програми.
1.2. Дiйснi типи
У Турбо-Паскалi є п'ять дiйсних типiв:
4 single 7..8 + -(1.5E-45..3.4E38);
6 real дiйсний 11..12 + -(2.9E-39..1.7E38);
8 double 15..16 + -(5.0E-324..1.7E308);
10 extended 19..20 +-(3.4E-4951..1.1E4932);
8 comp 19..20 -2^63+1..2^63-1
Доступ до типiв single, double, extended, comp можливий тiльки при наявностi сопроцесора типу 8087, або в режимi його програмної емуляцiї. Для доступу до вказаних дiйсних типiв можна скористатися наступними директивами компiлятора:
{$E+,N+} - доступнi всi дiйснi типи;{$E+,N-} - доступний тiльки тип real;
{$E-,N+} - доступнi всi дiйснi типи тiльки при наявностi сопроцесора 8087, iнакше тiльки тип real;{$E-,N-} - доступний тiльки тип real.
Арифметичний спiвпроцесор 8087 обробляє числа тiльки у форматi extended, а три iнших типи отримуються простим вкороченням результатiв до потрiбних розмiрiв з метою економiї пам'ятi. Всi дiйснi типи, крiм comp, зберiгаються у пам'ятi машини у форматi з плаваючою крапкою. Данi типу comp зберiгаються у пам'ятi, як дуже великi цiлi числа зi знаком. Насправдi такi числа iнтерпретуються як дiйснi з фiксованою крапкою.Дiйснi типи дозволяють ввiд за допомогою процедури Read i вивiд за допогою процедури Write.
Завдання для роботи
Визначити операцiї div та mod через iншi операцiї та стандартнi
функцiї.
Визначити порядок виконання операцiй у виразi
-(a mod b)+(a div b)*c;
Текст прграми:
Program lab3; Uses crt; Var a,b,x,y:real; Begin Clrscr; iteLn (' a/b'); Write ('Enter a='); Read (a); Write ('Enter b='); Read (b); x:=trunc(a/b); y:=a/b - x; Readln; WriteLn ('a Div b =',x:4:0,'; a Mod b =',y:4:4); readLn; End.
2); Порядок виконання операцій такий:
a) Виконується (a mod b);
б) Перед результатом а) ставиться „-”;
в) Виконується (a div b);
г) Результат в) множиться на „с”;
д) Результати кроків б) та г) додаються.