1 семестр сессия / Bilet15
.docБилет №15. Концепция типа данных. простой тип данных.
Согласно приведенной классификации, простые типы включают порядковые и вещественные типы. Рассмотрим вначале порядковые типы.
Порядковый тип - такой тип, который содержит упорядоченный ряд значений так, что каждому значению можно однозначно сопоставить некоторый порядковый номер (отсюда и название - порядковый тип). Другими словами, на порядковом типе задан линейный порядок значений (с отношениями <, >, <=, >=, =, <> между значениями). Каждый порядковый тип эквивалентен некоторому отрезку натурального ряда.
Вещественные типы не обладают указанными свойствами порядковых типов, т.к. множество их значений не сопоставимо однозначно с целыми числами-номерами (в виду приближенного представления вещественных чисел!).
К любому порядковому типу применимы следующие функции:
Ord(X) - порядковый номер значения выражения Х этого типа;
Pred(X) - предыдущее значение выражения Х этого типа;
Succ(X) - следующее значение выражения Х этого типа;
High(X) - наибольшее значение диапазона аргумента Х;
Low(X) - наименьшее значение диапазона аргумента Х;
Функция Ord определена для любого значения порядкового типа, причём нумерация значений начинается от номера 0 (номера наименьшего значения типа). Функции Pred и Succ не определены соответственно для левой и правой границы отрезка номеров значений типа.
Рассмотрим теперь разновидности порядковых типов согласно классификации.
Целые типы. Помимо уже знакомого нам типа integer, в Турбо Паскале имеется ещё несколько типов для представления целых чисел. Два из них представляют отрезки натуральных чисел:
byte - тип с диапазоном значений от 0 до 255 (представимых одним байтом);
word -тип с диапазоном значений от 0 до 65535 (представимых двумя байтами).
Два целых типа представляют "короткие целые" и "длинные целые":
shortint - тип с диапазоном значений -128 .. +127 (длиной 1 байт)
longint - тип с диапазоном значений -2147483648 ..+2147483647 (длиной четыре байта).
Для всех целых типов применимы стандартные процедуры и функции:
Для целых типов ord(x) = х, pred(x) = x - 1 , succ(x) = x + 1.
Символьный тип. Значениями этого типа являются, как указывалось ранее, все символы кодовой таблицы ASCII (Американский стандартный код внутримашинного обмена, используемый в системе MS DOS), которые считаются, упорядочены своими кодами. Для символьного типа применимы бинарные отношения (<,>, <=,>=,=, <>). Значением функции ord является код символа (в диапазоне 0..255). Стандартными функциями, применимыми к типу char, являются:
chr(b) - преобразование значения выражения b типа byte в символ ASCII.
upcase(c) - преобразование строчных латинских букв в прописные (для символов, не являющихся латинскими буквами, результатом является сам символ с).
Логический тип. Значениями логического типа (Boolean) являются константы true и false, которые считаются упорядоченными так, что ord(false)=0, ord(true) =1.
Соответственно, pred(true)= false, succ(false) =true, false<true, true>false.
Логические операции and, or, xor, not применимы также к целым числам, как битовые операции (0 - эквивалентен false, а 1 - эквивалентен true). К битовым операциям также относятся операции shl и shr (J shl K - сдвиг J на K бит влево, и J shr K - сдвиг J на K бит вправо).
Перечислимый тип. Это тип, задаваемый перечислением своих значений. В Паскале приняты соответствующие формы описания перечислимых типов, наиболее общим, из которых является следующий:
type < имя типа > = ( < список значений > );
где: < список значений > - перечисляемые через запятую значения, располагаемых в порядке от минимального до максимального (т.е. в виде диапазона значений). Каждое значение обозначается уникальным именем (идентификатором значения). Пример определения перечислимого типа:
type color = (black, red, green, blue, white );
Максимальная мощность перечислимого типа - 65536 значений.
Для любого порядкового типа можно определить тип-диапазон как подмножество значений этого порядкового типа (базового типа). Тип диапазон определяется своими границами внутри базового типа в форме : < мин.значение>..< макс.значение >
Например, type digit = 0..9; {тип - десятичная цифра}
date = 1..31; { тип - дата }
lat_lt = 'A' ..'Z'; { тип - латинская буква }
color3 = red .. blue; {тип - три цвета из набора color}
Тип-диапазон наследует все свойства своего базового типа, которые применимы для него (некоторые свойства, связанные с ограничением множества возможных значений могут оказаться неприменимы для типа-диапазона). Тип - диапазон предоставляет удобную и компактную форму определения порядковых типов без явного перечисления значений этих типов.
Вещественные типы. Помимо типа real, с которым уже встречались ранее, в Турбо Паскале имеется ещё несколько типов данных для представления вещественных чисел. Для всех этих типов характерно то, что значения чисел представляются приближенно в отличие от представлений целых чисел. Точность представления зависит от вещественного типа, для каждого из которых имеется свой формат представления числа.
Кроме типа real имеется ещё 3 вещественных типа:
single - диапазон десятичного порядка от -45 до +38 (длина числа 4 байта);
double - диапазон десятичного порядка от -324 до +308 (длина числа 8 байтов);
extended -диапазон десятичного порядка от -4951 до +4932 (длина 10 байтов);
Фактически эти типы перекрывают все потребности в точности представления вещественных чисел.
Дополнительно к указанным типам в Турбо Паскале имеется также специальный тип comp, который рассматривается как вещественное число. Фактически число типа comp - целое число со знаком, занимающее 8 байтов и представляющее 19-20 значащих десятичных цифр. Этот тип может использоваться для представления денежных сумм, обеспечивая точность до минимальных денежных единиц.
Для операций с вещественными числами предусмотрены стандартные функции, в числе которых: тригонометрические функции (sin, cos, arctan), логарифм и экспонента (ln, exp), выделение целой и дробной части (int, frag), квадратный корень (sqrt), функции abs, sqr и random, аналогичные функциям, используемым для целых типов.
Задача 4.2.6(15)
program Project15;
type mas=array[1..4,1..4] of Integer;
var a,b:mas;
i,j,k,l,s:Integer;
procedure p(x:mas; e:Integer; var n:integer);
var i,min:Integer;
begin
min:=x[1,1];
n:=1;
for i:=2 to e do
if x[i,i]<min then
begin
min:=x[i,i];
n:=i;
end;
end;
begin
for i:=1 to 3 do
for j:=1 to 3 do
read(a[i,j]);
Writeln;
for i:=1 to 4 do
for j:=1 to 4 do
read(b[i,j]);
p(a,3,k);
p(b,4,l);
s:=a[k,k];
a[k,k]:=b[l,l];
b[l,l]:=s;
Writeln;
for i:=1 to 3 do begin
for j:=1 to 3 do begin
write(a[i,j],' ');
end; writeln; end;
Writeln;
for i:=1 to 4 do begin
for j:=1 to 4 do begin
write(b[i,j],' ');
end; writeln; end;
Readln;
end.