Перечислимый и интервальный типы данных Структуры и алгоритмы обработки данных в ЭВМ Старший преподаватель каф. КСУП ТУСУР Потапова Евгения Андреевна Вопросы входного контроля: -Какие типы данных языка Паскаль относятся к простым? -Какие типы данных языка Паскаль относятся к составным? 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