6.1.Дефиниране на нестандартни типове данни
Когато се създава една програма, стремежът е тя да бъде максимално близка до обектите или явленията, които описва. Тъй като обектите, които моделираме (описваме) са безкрайно разнообразни, не е възможно съответстващите им типове да бъдат предвидени и предварително заложени в един език за програмиране. Ето защо в езика Паскал е предвидена възможност програмистът да създава свои нестандартни типове данни. Това става в раздела Type по следния начин
Type Име на типа: Описание на типа;
Името на типа се избира от програмиста, като се спазват изискванията към имена на обекти в Паскал. Oписание на типа за нестандартните типове е специфично за всеки конкретен нестандартен тип и ще бъде обяснено, когато той се разглежда.
В редица случаи (но не навсякъде) е допустимо използването на анонимни нестандартни типове данни. Това става в раздела Var по следния начин:
Var Списък от променливи : Oписание на типа;
Отначало ще разгледаме дефинирането и използването на двата скаларни (прости) нестандартни типове данни - изброен тип и ограничен тип.
6.2.Изброен тип
Понякога се налага в програмата да се използват променливи, които могат да имат неголям брой точно определени нестандартни стойности. Тогава в програмата се дефинира нестандартен тип данни, наречен изброен тип. Описанието на този тип има следния общ вид:
( Списък стойности )
В списъка от стойности се изброяват всички стойности, които могат да имат променливите от този тип, и те са допустимите стойности за този тип. Самите стойности не са нито числови, нито символни. Те се образуват по правилата за образуване на имена на променливи приличат и на имена на променливи, например Pon, Vtr, Srd и т.н.
Примери:
Type
Den= (Pon,Vtr,Srd,Cеt,Pet,Sаb,Ned);
Mesec= (Jan,Fev,Mrt,Apr,Maj,Jun,Jul,Aug,Spt,Oct,Noe,Dec);
Cviat= (Bjal,Zelen,Cerven,Rozov,Kafiav,Ceren);
Auto= (Opel, Lada, FIAT,Ford, BMW);
Изброените стойности се считат подредени и номерирани в реда на изброяването им в списъка, като номерирането им започва от 0.
6.2.2.Променливи от изброен тип
В раздел Var могат да се декларират променливи от вече описани изброени типове. Например
Var
D: den;
M1, M2: mesec;
Cv: Cviat;
Auto1,Auto2: auto;
Могат да се дефинират и променливи от анонимен изброен тип, например:
Var Zoo:(lion, dog, cat, mouse);
6.2.3.Операции с данни от изброен тип
Стойности от изброен тип не могат да се въвеждат от клавиатурата, да се извеждат на екрана и да участват в аритметични операции. Когато все пак се наложи да се въвеждат или извеждат, това се прави косвено. Например стойността на променливата D от изброен тип можем да въведем както е показано в следния пример:
Type
Den = (Pon,Vtr,Srd,Cet,Pet,Sab,Ned);
Var D : Den;
n : integer;
Begin
. . . . . . . . . . . . . . . .
Write(‘Задайте поредния номер на деня: ‘); Readln(n);
Case n of
1: D:=Pon;
2: D:=Vtr;
3: D:=Srd;
4: D:=Cet;
5: D:=Pet;
6: D:=Sab:
7: D:=Ned
end;
. . . . . . . . . . . . . . . .
Променливите от изброен тип, подобно на променливите от другите дискретни типове, могат да бъдат аргументи на стандартните функции pred, succ и ord. За тях са допустими операциите за сравняване (сравняват се номерата на стойностите в описанието на типа) и операцията присвояване. Те могат да бъдат управляващи променливи в цикъл с параметър или селектори в оператори за избор.
Програма 6.1. Програма, която извежда имената на дните от седмицата.
Type
Den = (Pon,Vtr,Srd,Cet,Pet,Sab,Ned);
Var D : Den;
N : integer;
Begin
For D := Pon to Ned do
begin
N := ord (D);
Write (N+1,' - ');
Case D of
Pon : Writeln ('Понеделник');
Vtr : Writeln ('Вторник');
Srd : Writeln ('Сряда');
Cet : Writeln ('Четвъртък');
Pet : Writeln ('Петък');
Sab : Writeln ('Събота');
Ned : Writeln ('Неделя')
еnd
еnd
End.
6.3.Ограничен тип 6.3.1.Дефиниране на ограничен тип
При много задачи се използва само определена подобласт от областта на допустимите стойности на даден дискретен тип данни. В такива случаи е целесъобразно да се дефинира нов тип данни, който включва само стойностите от тази подобласт. Такъв тип данни се нарича ограничен и е производен от някакъв изходен (базисен) дискретен тип данни. Изходният (базисният) тип може да е стандартен дискретен тип или вече дефиниран изброен тип.
Общият вид на описанието на ограничен тип данни е:
Начална стойност .. крайна стойност
Примери:
Type
NomerMesec = 1..12;
GlavnaBukva = 'A'..'Z';
Den= (Pon,Vtr,Srd,Cеt,Pet,Sаb,Ned);
RabotenDen = Pon..Pet;
Mesec = (Jan,Fev,Mrt,Apr,Maj,Jun,Jul,Aug,Spt,Oct,Noe,Dec);
Liato = Jun..Aug;
Тук първите два ограничени типа са производни на стандартни типове данни, а последните два ограничени типа - на дефинирани изброени типове.
6.3.2.Променливи от ограничен тип
В раздел Var могат да се декларират променливи от вече описани ограничени типове. Например
Var
NomMes : NomerMesec;
GlavBuk : GlavnaBukva;
RabDen = RabotenDen;
LetMes :Liato;
Могат да се дефинират и променливи от анонимен ограничен тип, например
Var
Ind :1..25;
KodOp :1..10;
6.3.3.Операции с данни от ограничен тип
С данните от ограничен тип са допустими всички операции, които са допустими за данни от техния базисен тип. Допустимо е и присвояването на стойности от ограничен тип на променливи от базисния и обратно. Във втория случай е необходимо стойностите да не излизат извън зададения диапазон.
Сподели с приятели: |