Интервальный тип данных

advertisement
Перечислимый и
интервальный типы
данных
Структуры и алгоритмы обработки данных в ЭВМ
Старший преподаватель каф. КСУП ТУСУР
Потапова Евгения Андреевна
Вопросы входного контроля:
-Какие типы данных языка Паскаль относятся к простым?
-Какие типы данных языка Паскаль относятся к составным?
2
Основные простые типы данных языка паскаль:
Integer - целые числа в диапазоне -32767..32768,
Real –
вещественные числа,
Boolean – логический тип данных, возможны 2 значения:
TRUE – истина
FALSE - ложь ,
Char – символьный тип, значения – символы кодовой
таблицы ASCII
3
К простым порядковым типам относятся
Целочисленные
Символьный
Булевский
Для них определены операции
SUCC - следующий
PRED - предыдущий
ORD – номер по порядку
4
Интервальный тип данных
На основе рассмотренных порядковых типов можно
определить новые порядковые типы: например, можно
сузить диапазон значений любого из порядковых типов.
Такие типы называют ограниченными (или интервальными)
типами.
Другое их название - диапазоны.
Такие типы задаются границами своих значений внутри
базового типа:
<минимальное значение> .. <максимальное значение>
5
Примеры определения типов – диапазонов
в разделе описания типов:
TYPE
Typedate=1..31;
TypeMonth=1..12;
TypeSim='A'..'Z’;
Var
D:Typedate;
M:TypeMonth;
…..
6
Можно сразу определить переменную типа диапазон в разделе описания переменных:
Var Day:1..31;
Month:1..12;
Sim:'A'..'Z' и т.п.
Необходимо помнить, что левая граница
диапазона не должна превышать правой.
Тип-диапазон наследует все свойства своего
базового типа, но с ограничениями, связанными с
его меньшей мощностью.
7
Пример 1
var day:1..31;
s: '0'..'9';
begin
day:=3; s:='0';
writeln(succ(day));
writeln(pred(day));
writeln(ord(day));
writeln(succ(s));
writeln(ord(s));
end.
4
2
3
1
48 (номер из кодовой таблицы ASCII)
Пример программы, которая выводит на экран следующее
значение, предыдущее значение, номер по порядку
переменной типа - диапазон
8
Пример 2
Составить программу, печатающую для натурального
числа к фразу: «Мы нашли к грибов в лесу»,
согласовав окончание слова «гриб» с числом к.
9
var k:1..1000;
modk:0..99;
begin
Writeln('Vvedite k');
Readln(k);
modk:=k mod 100;;//остаток от деления на 100, 2 последних цифры
if (modk>10) and (modk<15) then Writeln('nashli ', k,' gribov v lesu')
else begin
case modk mod 10 of //исследуем последнюю цифру
1: Writeln('nashli ', k,' grib v lesu');
2..4: Writeln('nashli ', k,' griba v lesu')
else Writeln('nashli ', k,' gribov v lesu');
end;
end;
end.
10
Vvedite k
19
nashli 19 gribov v lesu
Vvedite k
1
nashli 1 grib v lesu
Vvedite k
12
nashli 12 gribov v lesu
Vvedite k
111
nashli 111 gribov v lesu
Vvedite k
22
nashli 22 griba v lesu
11
При описании массивов в разделе описания
переменных программы также используются
ограниченные типы данных, например:
Var A: array[1..10] of real;
B: array[1..5,1..5] of integer;
Если при программировании выйти за пределы
допустимого диапазона, то будет сообщение
об ошибке.
12
Перечислимый тип данных
Перечислимый тип задается перечислением
тех значений, которые он может получать.
Каждое значение именуется некоторым
идентификатором и располагается в списке,
обрамленном круглыми скобками, например:
type
Colors = (red, white, blue);
Days= (Monday, Tuesday, Wednesday);
13
Переменные любого перечислимого типа
можно объявлять без предварительного
описания этого типа, например:
var
col: (black, white, green);
summer: (Jun, July, August)
14
Для
переменных,
относящихся
к
перечислимому типу данных, определены
операции
SUCC - следующий
PRED - предыдущий
ORD – номер по порядку
Номер начинается с 0
15
Например:
ord(black)=0, ..., ord(white)=2,
ord(Monday)=0, ..., ord(Wednesday)=2
16
Пример 3
var
col: (black, white, green);
summer: (Jun, July, August);
begin
col:=white;
summer:=Jun;
Writeln(succ(col));
Writeln(pred(col));
Writeln(Ord(col));
Writeln(pred(summer));
Writeln(ord(summer));
Writeln(succ(summer));
end.
green
black
1
-1
0
July
17
Eсли определены переменные
type
Colors = (red, white, blue);
Days= (Monday, Tuesday, Wednesday);
var
col : colors;
day : days ;
то допустимы операторы
col := blue;
day := pred(Tuesday);
но не допустимы
col := succ(Tuesday);
day := red;
18
Пример 4
type
Colors = (red, white, blue);
Days= (Monday, Tuesday, Wednesday);
var
col: Colors;
day: Days;
begin
col:=white;
day:=Monday;
Writeln(succ(col));
Writeln(pred(col));
Writeln(Ord(col));
col:=Colors(0);
Writeln(col);
Writeln(succ(col));
Writeln(succ(day));
Writeln(day);
end.
blue
red
1
red
white
Tuesday
Monday
19
Пример 5
Для чисел от 1 до 99 напечатать их
словесную запись.
var g,i,g1,g2,ff:1..99;
ge:(odin ,dwa,tri,chetire,pjat,shest,sem,vosem,devjat);
gd:(desjat,odinnadcat,dwenadcat, trinadcat, chetirnadcat, pjatnadcat, shestnadcat,
semnadcat, vosemnadcat, devjatnadcat);
gdd:(dvadcat, tridcat,sorok,pjatdecat, shestdecat, semdecat, vosemdecat, devanosto);
begin
for ff:=1 to 99 do
begin
// writeln('vvod g');
// readln(g);
g:=ff;
20
case g of
1..9: begin// для единиц
ge:=odin;
for i:=1 to 9 do
begin
if ord(ge)+1=g then write(ge);
ge:=succ(ge)
end;
end;
10..19: begin // для чисел от 10 до 19
gd:=desjat; g1:=g mod 10;
for i:=0 to 9 do
begin
if ord(gd)=g1 then write(gd);gd:=succ(gd);
end;
end
21
else begin
gdd:=dvadcat; ge:=odin; // числа больше девятнадцати
g1:=g mod 10; g2:=g div 10;
for i:=0 to 8 do //выводим десятки
begin
if ord(gdd)+2=g2 then write(gdd,' ');
gdd:=succ(gdd);
end;// для for
for i:= 1 to 9 do //выводим единицы
begin ge:=succ(ge);
if ord(ge)=g1 then write(pred(ge));
end; //для for
end; // для else
end;//для case
writeln; end;
end.
22
odin
dwa
tri
chetire
pjat
shest
sem
vosem
devjat
desjat
odinnadcat
dwenadcat
trinadcat
chetirnadcat
pjatnadcat
shestnadcat
semnadcat
vosemnadcat
devjatnadcat
dvadcat
dvadcat odin
dvadcat dwa
dvadcat tri
dvadcat chetire
dvadcat pjat
dvadcat shest
dvadcat sem
dvadcat vosem
dvadcat devjat
tridcat
tridcat odin
tridcat dwa
tridcat tri
tridcat chetire
tridcat pjat
tridcat shest
tridcat sem
tridcat vosem
tridcat devjat
sorok
sorok odin
sorok dwa
sorok tri
sorok chetire
sorok pjat
sorok shest
sorok sem
sorok vosem
sorok devjat
pjatdecat
pjatdecat odin
pjatdecat dwa
pjatdecat tri
pjatdecat chetire
pjatdecat pjat
pjatdecat shest
pjatdecat sem
pjatdecat vosem
pjatdecat devjat
23
Вопросы по теме:
• Как описать ограниченные типы данных в
программе?
• Как описать перечислимые типы данных?
• Какие стандартные функции применимы как
к ограниченным, так и к перечислимым типам
данных?
24
В ходе лекции были рассмотрены следующие
вопросы:
•
•
•
•
ограниченные типы данных
перечислимые типы данных
примеры описания
рассмотрены примеры программ
25
Спасибо за внимание!
26
Download