uy - Antiviruslar
Paskalda kasrli ma'lumotlar turlari. Oddiy ma'lumotlar turlari

Tartib turlarga (4.1-rasmga qarang) butun son, mantiqiy, belgi, sanab o'tilgan va diapazon turlari kiradi. ORD(X) funksiyasi ularning har biriga taalluqli bo‘lib, u X ifoda qiymatining tartib raqamini qaytaradi. Butun sonlar turlari uchun ORD(X) funksiyasi X ning o‘zi qiymatini qaytaradi, ya’ni. ORD(X) = X har qanday qobiq turiga tegishli X uchun. ORD(X) ni mantiqiy, belgilar va sanab turlariga qo‘llash 0 dan 1 gacha (mantiqiy), 0 dan 155 gacha (belgi), 0 dan 65535 gacha (sanoq) oralig‘ida musbat butun son hosil qiladi. Diapazon turi asosiy tartib turining barcha xossalarini saqlab qoladi, shuning uchun unga ORD(X) funksiyasini qo‘llash natijasi shu turning xossalariga bog‘liq.

Funksiyalarni tartibli turlarga ham qoʻllashingiz mumkin:

PRED (X) - tartib turining oldingi qiymatini qaytaradi (ORD(X) - 1 tartib raqamiga mos keladigan qiymat), ya'ni.

ORD(PRED(X)) = ORD(X) - 1;

SUCC (X) - ORD(X) +1 tartib raqamiga mos keladigan keyingi tartib qiymatini qaytaradi, ya'ni.

ORD(SUCC(X)) = ORD(X) + 1.

Misol uchun, agar dastur o'zgaruvchini aniqlasa

keyin PRED(C) funksiyasi “4” qiymatini, SUCC(C) funksiyasi esa “6” qiymatini qaytaradi.

Har qanday tartibli turni tartiblangan qiymatlar to‘plami sifatida, chapdan o‘ngga ortib, sonlar o‘qida ma’lum segmentni egallagan holda tasavvur qilsak, chap tomon uchun PRED(X) funksiyasi, o‘ng uchun esa SUCC(X) funksiyasi aniqlanmagan. ushbu segmentning oxiri.

Butun turlari. Butun son turlarining mumkin bo'lgan qiymatlari diapazoni ularning bir, ikki yoki to'rt bayt bo'lishi mumkin bo'lgan ichki tasviriga bog'liq. Jadvalda 4.1 butun son turlarining nomini, ularning baytlarda ichki tasvirlash uzunligini va mumkin bo'lgan qiymatlar diapazonini ko'rsatadi.

4.1-jadval

Butun son parametrlari bilan protseduralar va funktsiyalardan foydalanganda, siz turlarni "uya joylashtirish" ga amal qilishingiz kerak, ya'ni. WORD qayerda ishlatilishi mumkin bo'lsa, BYTE dan foydalanish mumkin (lekin aksincha emas), LONGINT INTEGERni "o'z ichiga oladi", bu esa o'z navbatida SHORTINTni o'z ichiga oladi.

Butun sonlar turlariga taalluqli protsedura va funksiyalar ro'yxati 4.2-jadvalda keltirilgan. Xatlar b, s, w, i, l BYTE, SHORTINT, WORD, INTEGER va LONGINT tipidagi ifodalar mos ravishda belgilanadi, x bu turlarning har qandayining ifodasidir; harflar vb, vs, vw, vi, vl, vx tegishli turdagi o'zgaruvchilarni bildiring. Ixtiyoriy parametr kvadrat qavs ichida ko'rsatilgan.

4.2-jadval

Butun turlarga qo'llaniladigan standart protseduralar va funktsiyalar
Shikoyat qilish Natija turi Harakat
abs(x) x X modulini qaytaradi
chr(b) Char Belgini kodi bo'yicha qaytaradi
dec(vx[, i]) - vx qiymatini i ga, i bo'lmaganda esa 1 ga kamaytiradi
inc(vx[, i]) - vx qiymatini i ga, i bo'lmaganda esa 1 ga oshiradi
Salom(i) Bayt Argumentning yuqori baytini qaytaradi
Salom(w) Bir xil Bir xil
Lo(i) " Argumentning past baytini qaytaradi
Past(w) " Bir xil
toq(l) Mantiqiy Argument toq son bo'lsa, True qiymatini qaytaradi
Tasodifiy (w) Parametr bilan bir xil 0...(w-l) oralig‘ida bir xil taqsimlangan soxta tasodifiy sonni qaytaradi.
sgr(x) X Argument kvadratini qaytaradi
almashtirish(i) Butun son Bir so'zda baytlarni almashtiradi
almashish(w) So'z

Butun sonlar bilan ishlaganda natija turi operandlar turiga, agar operandlar turli xil butun sonli bo'lsa, maksimal quvvatga ega operand turiga (qiymatlarning maksimal diapazoni) mos keladi. Natijaning mumkin bo'lgan to'lib ketishi hech qanday tarzda nazorat qilinmaydi, bu tushunmovchiliklarga olib kelishi mumkin, masalan:

a:= 32767; (Maksimal mumkin INTEGER qiymati)

x:= a + 2; (Ushbu ifodani baholashda toʻlib-toshish !}

y:= LongInt(a)+2; (O'zgaruvchini kuchliroq turga o'tkazgandan keyin to'lib ketish yo'q)

WriteLn(x:10:0, y:10:0)

Dasturni ishga tushirish natijasida biz olamiz

Boolean turi. Mantiqiy qiymatlar oldindan e'lon qilingan FALSE yoki TRUE konstantalaridan biri bo'lishi mumkin. Qoidalar ularga nisbatan qo'llaniladi:

Yolg'on< True;

succ(False)= rost;

pred(to'g'ri) = noto'g'ri.

Mantiqiy tip tartibli tur boʻlgani uchun uni sanab turuvchi operatorda ishlatish mumkin, masalan:

1 uchun:= False to True qilish ....

Belgi turi. Belgilar turining qiymati kompyuterning barcha belgilar to'plamidir. Har bir belgiga 0...255 oralig'ida butun son beriladi. Bu raqam belgining ichki ko'rinishi uchun kod bo'lib xizmat qiladi, u ORD funktsiyasi tomonidan qaytariladi.

ASCII kodi kodlash uchun ishlatiladi ( Axborot almashish uchun Amerika standart kodeksi- Axborot almashish uchun Amerika standart kodeksi). Bu 7 bitli kod, ya'ni. u 0 dan 127 gacha bo'lgan oraliqda faqat 128 ta belgini kodlashi mumkin. Shu bilan birga, Turbo Paskalda belgini saqlash uchun ajratilgan 8 bitli baytda siz 0 dan 255 gacha bo'lgan oraliqda ikki barobar ko'p belgilarni kodlashingiz mumkin. belgilarning birinchi yarmi 0...127 kodli kompyuter ASCII standartiga mos keladi (4.3-jadval). 128...255 kodli belgilarning ikkinchi yarmi standartning qattiq ramkasi bilan cheklanmaydi va har xil turdagi shaxsiy kompyuterlarda o'zgartirilishi mumkin (2-ilovada ushbu belgilar uchun ba'zi umumiy kodlash variantlari ko'rsatilgan).

4.3-jadval

ASCII standartiga muvofiq belgilarni kodlash
Kod Belgi Kod Belgi Kod Belgi Kod Belgi
NUL B.L. ® "
ZON ! A a
STX " IN b
ETX # BILAN Bilan
EOT $ D d
ENQ % E e
SO'RASH & F f
BEL " G g
B.S. ( H h
NT ) I i
LF * J j
VT + k k
FF , L i
CR - M m
SO . N n
S.I. / HAQIDA
DEL p P
DC1 Q q
DC2 R r
DC3 S s
DC4 T t
N.A.K. U u
SYN V V
ETB w w
JON X X
E.M. U U
SUB : z z
ESC / [ {
FS < \ l
G.S. = ] }
R.S. > ^ ~
BIZ ? - n

0...31 kodli belgilar xizmat kodlariga tegishli. Agar ushbu kodlar dasturning belgilar matnida ishlatilsa, ular bo'sh joy hisoblanadi. I/U operatsiyalarida foydalanilganda ular quyidagi mustaqil ma'noga ega bo'lishi mumkin:

Belgi Kod Ma'nosi
BEL Qo'ng'iroq qilish; Ushbu belgining ekrani ovozli signal bilan birga keladi
NT Gorizontal jadvallar; ekranda ko'rsatilganda kursorni 8 va 1 ning (9, 17, 25 va boshqalar) karrali bo'lgan joyga olib boradi.
LF Qator tarjimasi; uni ekranda ko'rsatganda, barcha keyingi belgilar bir xil pozitsiyadan boshlab chiqariladi, lekin keyingi qatorda
VT Vertikal yorliq; ekranda ko'rsatilganda, u maxsus belgi bilan almashtiriladi
FF Sahifani ishga tushirish; printerga chiqarilganda u sahifa hosil qiladi, ekranga chiqarilganda esa maxsus belgi bilan almashtiriladi
CR Vagonni qaytarish; Enter tugmasini bosish orqali kiritiladi (READ yoki READLN yordamida kiritilsa, u “Enter” buyrug'ini bildiradi va kirish buferiga joylashtirilmaydi; chiqarilganda esa “Joriy satr boshidan chiqishni davom ettirish” buyrug'ini bildiradi)
SUB Fayl oxiri; Ctrl-Z tugmalarini bosib klaviaturadan kiritiladi; chiqarilganda u maxsus belgi bilan almashtiriladi
SSC Ishning tugashi; ESC tugmachasini bosish orqali klaviaturadan kiritiladi; chiqarilganda u maxsus belgi bilan almashtiriladi

CHAR turiga aloqador operatsiyalar, shuningdek, o'rnatilgan funksiyalar qo'llaniladi: SNR(V) - CHAR tipidagi funksiya; BYTE tipidagi B ifodani belgiga aylantiradi va uni qiymati bilan qaytaradi;

UPCASE(CH) - CHAR tipidagi funksiya; Agar CH kichik lotin harfi bo'lsa, bosh harfni qaytaradi, aks holda CH belgisini o'zi qaytaradi, masalan:

cl:= UpCase("s") ;

c2:= UpCase ("F");

WriteLn(cl," ",c2)

UPCASE funksiyasi kirill alifbosini qayta ishlamaganligi sababli, uni ishga tushirish natijasi

dasturlar ekranda aks etadi

Enum turi. Sanab o'tilgan tur qabul qilishi mumkin bo'lgan qiymatlar ro'yxati bilan belgilanadi. Har bir qiymat ba'zi identifikator tomonidan nomlanadi va qavslar bilan o'ralgan ro'yxatda joylashgan, masalan:

ranglar =(qizil, oq, ko'k);

Sanab o'tilgan turlardan foydalanish dasturlarni ingl. Agar, masalan, dastur yil oylari bilan bog'liq ma'lumotlardan foydalansa, u holda dasturning quyidagi qismi:

TypeMonth=(yanvar, fevral, mart, aprel, may, iyun, iyul, avgust, sentabr, oktyabr, noyabr, dekabr);

oy: TypeMonth;

agar oy = avgust keyin WriteLn("Dengizga borish yaxshi bo'lardi!");

Ko'ryapsizmi, bu juda aniq bo'lar edi. Voy! Turbo Paskalda siz identifikatorlarda kirill alifbosidan foydalana olmaysiz, shuning uchun biz shunday yozishga majburmiz:

TypeMonth=(yan, fevral, mart, may, iyun, iyul, avgust, sentabr, oktyabr, noyabr, dekabr);

oy: TypeMonth;

agar oy = avgust keyin WriteLn("Dengizga borish yaxshi bo'lardi!");

Sanab o'tilgan turdagi qiymatlar va bu qiymatlarning tartib raqamlari o'rtasidagi muvofiqlik sanab o'tish tartibi bilan belgilanadi: ro'yxatdagi birinchi qiymat 0 tartib raqamini oladi, ikkinchisi - 1 va hokazo. Ro'yxatga olingan turning maksimal sig'imi 65536 qiymatni tashkil qiladi, shuning uchun aslida sanab o'tilgan tur butun WORD turining ma'lum bir kichik to'plamini belgilaydi va uni 0, 1 va boshqalar qiymatlari bilan butun son doimiylari guruhining ixcham deklaratsiyasi sifatida ko'rib chiqish mumkin.

Ro'yxatga olingan turlardan foydalanish mos keladigan o'zgaruvchilar qabul qiladigan qiymatlarni boshqarishga imkon berish orqali dasturlarning ishonchliligini oshiradi. Masalan, quyidagi sanab o'tilgan turlar berilsin:

ranglar = (qora, qizil, oq);

ordenal= (bir, ikki, uch);

kunlar = (dushanba, seshanba, chorshanba);

Quvvat va ichki vakillik nuqtai nazaridan barcha uch tur ham tengdir:

ord(qora)=0, ..., ord(oq)=2,

ord(bir)=0, ...ord(uch)=2,

ord(dushanba)=0, ...ord(chorshanba)=2.

Biroq, agar o'zgaruvchilar aniqlangan bo'lsa

rang: ranglar; son:ordenal;

keyin operatorlarga ruxsat beriladi

num:= succ(ikki);

kun:= oldingi (seshanba);

lekin qabul qilib bo'lmaydi

Yuqorida aytib o'tilganidek, sanab o'tilgan turdagi qiymatlar va ORD(X) funktsiyasi tomonidan belgilangan butun sonlar to'plami o'rtasida birma-bir moslik mavjud. Turbo Paskal ham teskari konvertatsiya qilishga imkon beradi: WORD tipidagi har qanday ifodani sanab turidagi qiymatga aylantirish mumkin, agar butun son ifodasining qiymati sanab turidagi power1™ dan oshmasa. Ushbu konvertatsiya sanab o'tilgan tur nomi bilan avtomatik e'lon qilingan funksiyadan foydalanish orqali erishiladi (4.4-bo'limga qarang). Masalan, yuqorida muhokama qilingan turdagi deklaratsiya uchun quyidagi topshiriqlar ekvivalentdir:

col:= ranglar (0);

Albatta, topshiriq

qabul qilib bo'lmaydigan bo'ladi.

Har qanday sanab o'tilgan turdagi o'zgaruvchilar ushbu turni e'lon qilmasdan e'lon qilinishi mumkin, masalan:

rang: (qora, oq, yashil);

Tur oralig'i. Diapazon turi uning asosiy turining kichik to‘plami bo‘lib, diapazon turidan tashqari har qanday tartibli tur bo‘lishi mumkin. Diapazon turi uning asosiy turdagi qiymatlari chegaralari bilan belgilanadi:

<мин.знач.>..<макс.знач.>

Bu yerga<мин.знач. >- turdagi diapazonning minimal qiymati;

<макс.знач.>- uning maksimal qiymati.

Masalan:

raqam = "0".."9";

Diapazon turini TYPE bo'limida tavsiflash shart emas, lekin o'zgaruvchini e'lon qilishda bevosita ko'rsatilishi mumkin, masalan:

Ichr: "A".."Z";.

Diapazon turini aniqlashda siz quyidagi qoidalarga amal qilishingiz kerak:

  • ikkita ".." belgisi bitta belgi sifatida qabul qilinadi, shuning uchun ular orasidagi bo'shliqqa ruxsat berilmaydi;
  • diapazonning chap chegarasi uning o'ng chegarasidan oshmasligi kerak. Diapazon turi o'zining asosiy turining barcha xususiyatlarini meros qilib oladi, lekin uning pastki quvvati cheklovlari bilan. Xususan, agar o'zgaruvchi aniqlangan bo'lsa

kun = (mo,tu,we,th,fr,sa,su);

Weekend = sa .. su;

keyin ORD(W) 5 qiymatini qaytaradi, PRED(W) esa xatolikka olib keladi.

Turbo Paskal standart kutubxonasi diapazon turlari bilan ishlashni qo'llab-quvvatlaydigan ikkita funktsiyani o'z ichiga oladi:

HIGH(X) - X o'zgaruvchisi tegishli bo'lgan diapazon tipining maksimal qiymatini qaytaradi;

LOW(X) - diapazon turining minimal qiymatini qaytaradi.

Quyidagi qisqa dastur chiziqni chop etadi

WriteLn(Past(k),"..",Yuqori(k))

Butun sonlar to'plami cheksizdir, lekin biz har doim ma'lum bir masalani hal qilishda yuzaga keladigan har qanday butun sonni ifodalash uchun bitlar sonini tanlashimiz mumkin. Haqiqiy sonlar to'plami nafaqat cheksiz, balki uzluksizdir, shuning uchun biz qancha bit olsak ham, biz muqarrar ravishda aniq tasvirga ega bo'lmagan raqamlarga duch kelamiz. Suzuvchi nuqta raqamlari haqiqiy raqamlarni ifodalashning mumkin bo'lgan usullaridan biri bo'lib, bu aniqlik va qabul qilingan qiymatlar oralig'i o'rtasidagi kelishuvdir.

Suzuvchi nuqtali raqam shartli ravishda belgi, ko'rsatkich va mantisga bo'lingan individual raqamlar to'plamidan iborat. Ko'rsatkich va mantis butun sonlar bo'lib, ular belgisi bilan birga suzuvchi nuqta raqamining quyidagi ko'rinishini beradi:

Matematik jihatdan u quyidagicha yozilgan:

(-1) s × M × B E, bu erda s - belgi, B - ildiz, E - ko'rsatkich va M - mantis.

Baza raqamli sanoq sistemasini aniqlaydi. Matematik jihatdan isbotlanganki, asosi B=2 (ikkilik tasviri) boʻlgan suzuvchi nuqtali sonlar yaxlitlash xatolariga eng chidamli boʻladi, shuning uchun amalda faqat 2 va kamdan-kam hollarda 10 ta asoslar uchraydi.Keyingi taqdimot uchun biz har doim B deb qabul qilamiz. =2 va suzuvchi nuqtali raqam uchun formula quyidagicha ko'rinadi:

(-1) s × M × 2 E

Mantis va tartib nima? Mantis haqiqiy sonning eng muhim bitlarini ifodalovchi belgilangan uzunlikdagi butun sondir. Aytaylik, bizning mantisimiz uchta bitdan iborat (|M|=3). Masalan, ikkilik tizimda 101 2 ga teng bo'lgan "5" raqamini olaylik. Eng muhim bit 2 2 =4 ga to'g'ri keladi, o'rta bit (bu nolga teng) 2 1 =2, eng muhim bit esa 2 0 =1. Buyurtma- bu eng yuqori raqamning asosining (ikkita) kuchi. Bizning holatda E = 2. Bunday raqamlarni "ilmiy" standart shaklda yozish qulay, masalan, "1.01e+2". Darhol ma'lum bo'ladiki, mantis uchta belgidan iborat bo'lib, tartib ikkitadir.

Aytaylik, biz mantisaning bir xil 3 bitidan foydalanib, kasr sonini olishni xohlaymiz. Buni, masalan, E=1 olsak, qila olamiz. Shunda bizning sonimiz teng bo'ladi

1,01e+1 = 1×2 1 +0×2 0 +1×2 -1 =2+0,5=2,5

Shubhasiz, shu tarzda bir xil sonni turli yo'llar bilan ifodalash mumkin. Mantisning uzunligi |M|=4 bo'lgan misolni ko'rib chiqaylik. "2" raqamini quyidagicha ifodalash mumkin:

2 = 10 (ikkilik tizimda) = 1.000e+1 = 0.100e+2 = 0.010e+3.

Shuning uchun, allaqachon birinchi mashinalarda raqamlar deb ataladigan narsalarda ifodalangan normallashtirilgan shakl, mantisaning birinchi biti har doim birga teng deb qabul qilinganda.

Bu bitta bitni saqlaydi (chunki yashirin bit xotirada saqlanishi shart emas) va raqam noyob tarzda ifodalanishini ta'minlaydi. Bizning misolimizda "2" bitta tasvirga ega ("1.000e+1") va mantis xotirada "000" sifatida saqlanadi, chunki yetakchi birlik bilvosita nazarda tutiladi. Ammo raqamlarning normallashtirilgan ko'rinishida yangi muammo paydo bo'ladi - bu shaklda nolni ifodalash mumkin emas.

  • Parametrlarni tanlash va Yechimlarni qidirish buyruqlari yordamida ma'lumotlarni tahlil qilish
  • Eksperimental psixologik tadqiqot ma'lumotlarini tahlil qilish va sharhlash.
  • Manba ma'lumotlarini tahlil qilish. Shahar yo'llari uchun texnik standartlar.
  • OLGAN MA'LUMOTLARNING TAHLILI. SUG‘ORLASH TIZIMINING EHTiyojlari uchun SUV TA’MINOTI XUSUSIYATLARINING Etarliligi yoki yetarli emasligi to‘g‘risida qaror qabul qilish.
  • Aloqa liniyasi uskunalari: ma'lumotlarni uzatish uskunalari, terminal uskunalari, oraliq uskunalar.

  • Har qanday dasturlash tilida yozilgan har qanday dastur asosan ma'lumotlarni qayta ishlash uchun mo'ljallangan. Ma'lumotlar raqamlar, matnlar, grafiklar, tovushlar va boshqalar bo'lishi mumkin. Ba'zi ma'lumotlar manba ma'lumotlari, boshqalari esa dastur tomonidan manba ma'lumotlarini qayta ishlash natijasida olingan natijadir.

    Ma'lumotlar kompyuter xotirasida saqlanadi. Dastur ularga ma'lumotlar saqlanadigan xotira joylari bilan bog'langan o'zgaruvchilar nomlari yordamida kirishadi.

    O'zgaruvchilar asosiy dastur kodidan oldin tasvirlangan. Bu erda o'zgaruvchilarning nomlari va ularda saqlangan ma'lumotlar turi ko'rsatilgan.

    Paskal dasturlash tilida juda ko'p ma'lumotlar turlari mavjud. Bundan tashqari, foydalanuvchining o'zi o'z turlarini belgilashi mumkin.

    O'zgaruvchining turi u bilan bog'langan xotira joyida qanday ma'lumotlarni saqlash mumkinligini aniqlaydi.

    O'zgaruvchilar turi butun son Odatda -32768 dan 32767 gacha bo'lgan butun son qiymatlari bilan bog'lanishi mumkin. Paskalda boshqa butun son turlari mavjud (bayt, longint).

    O'zgaruvchilar turi haqiqiy haqiqiy (kasr) raqamlarni saqlang.

    O'zgaruvchan Mantiqiy(Boolean) turi (mantiqiy) faqat ikkita qiymatni qabul qilishi mumkin - rost(1, rost) yoki yolg'on(0, noto'g'ri).

    Belgi turi (belgi) ma'lum bir tartiblangan belgilar ketma-ketligidan qiymatlarni olishi mumkin.

    Interval turi foydalanuvchi tomonidan belgilanadi va faqat tartibli turlardan shakllanadi. Muayyan diapazondagi qiymatlar to'plamini ifodalaydi.

    Ushbu turdagi o'zgaruvchi olishi mumkin bo'lgan qiymatlarni ro'yxatlash orqali siz o'zingizning ma'lumotlar turini yaratishingiz mumkin. Bu deb ataladigan narsa sanab o'tilgan ma'lumotlar turi.

    Yuqoridagilarning barchasi oddiy ma'lumotlar turlari. Ammo oddiy turlarga asoslangan murakkab, tuzilganlari ham bor.

    Massiv xotirada bitta maydonni egallagan va bir xil turdagi komponentlarning belgilangan sonidan iborat strukturadir.

    Strings belgilar ketma-ketligidir. Bundan tashqari, ushbu belgilar soni 255 tadan oshmasligi kerak. Bu cheklash Paskal tiliga xos xususiyatdir.

    Yozib olish maydonlar deb ataladigan qattiq sonli komponentlardan tashkil topgan strukturadir. Yozuvning turli sohalaridagi ma'lumotlar har xil turdagi bo'lishi mumkin.

    Setlar ixtiyoriy sondagi elementlar to'plamini ifodalaydi, lekin bir xil sanab o'tilgan turdagi.

    Fayllar Paskal uchun ular tashqi xotira qurilmalarida (masalan, qattiq diskda) saqlanadigan bir xil turdagi ma'lumotlar ketma-ketligidir.

    Kabi ma'lumotlar turi tushunchasi ko'rsatgich kompyuter xotirasida ma'lumotlarni dinamik saqlash bilan bog'liq. Ko'pincha, dinamik ma'lumotlar turlaridan foydalanish statik ma'lumotlar turlaridan foydalanishdan ko'ra dasturlashda samaraliroqdir.

    2-MA'RUZA

    Dasturlash asoslari.

    Paskal tiliga kirish. Ma'lumotlar turlari. Operatsiyalar.

    Til alifbosiPaskal

    Har qanday tabiiy til belgilar, so'zlar, iboralar va jumlalar kabi elementlardan iborat. Dasturlash tilida ham shunga o'xshash elementlar mavjud: belgilar, so'zlar, iboralar (iboralar), operatorlar (gaplar).

    Belgilar to'plamidan so'zlar hosil bo'ladi. Ifodalar - bular so'z guruhlari va operatorlar - Bu so'zlar va iboralarning kombinatsiyasi. Til belgilari - ba'zi matnlarni tuzishda qo'llaniladigan elementar belgilar (harflar). Demak, bu belgilar majmuasi til alifbosini tashkil qiladi.

    Paskal alifbosi quyidagilardan iborat:

    1.Lotin alifbosining katta va kichik harflari, ular quyidagi belgilarni o'z ichiga oladi:

    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - bosh harflar;

    A b c d e f g h i j k l m n o p q r s t u v w x y z - kichik harflar;

    2. o‘nlik arab raqamlari: 0 1 2 3 4 5 6 7 8 9;

    3. o'n oltilik raqamlar (o'nlik raqamlar va A dan F gacha bo'lgan harflardan tuzilgan);

    4. Rus alifbosining 32 ta katta va kichik harflari;

    5. maxsus belgilar:

    Maxsus belgilar kombinatsiyasi qo'shma belgilar hosil qilishi mumkin:

    : = topshiriq;

    < >teng emas;

    >= dan katta yoki teng;

    <= меньше или равно;

    Qiymatlar diapazoni;

    (* *) yoki ( ) - sharh.

    Paskal tili dasturining tuzilishi

    Passal kompilyatori undan qanday harakatlar kutilayotganini to'g'ri tushunishi uchun sizning dasturingiz ushbu tilning sintaksisiga (dasturni qurish qoidalariga) to'liq mos ravishda formatlangan bo'lishi kerak.

    Har qanday Paskal dasturi quyidagi bloklardan iborat bo'lishi mumkin (ixtiyoriy qismlar bundan keyin kvadrat qavslar bilan belgilanadi):

    dastur<имя_программы>;

    [foydalanadi<имена_подключаемых_модулей>;]

    [yorliq<список_меток>;]

    [ konst<имя_константы> = <значение_константы>;]

    [turi<имя_типа> = <определение_типа>;]

    [var<имя_переменной> : <тип_переменной>;]

    [ tartib<имя_процедуры> <описание_процедуры>;]

    [funktsiya<имя_функции> <описание_функции>;]

    boshlash (dasturning asosiy qismining boshlanishi)

    <операторы>

    oxiri. (* dasturning asosiy qismining oxiri *)

    Paskal tili kompilyatorlarining keyingi versiyalari endi dastur nomini, ya'ni dastur qatorini ko'rsatishni talab qilmaydi.<имя_программы>; o'tkazib yuborish mumkin. Ammo bu faqat butun dastur bitta modul faylida bo'lsa mumkin. Agar dastur bir nechta mustaqil qismlardan - modullardan iborat bo'lsa, ularning har birida sarlavha (dastur yoki blok) bo'lishi kerak.

    Sanab o'tilgan har qanday ixtiyoriy bo'limlar dastur matnida bir necha marta paydo bo'lishi mumkin, ularning umumiy ketma-ketligi ham o'zgarishi mumkin, lekin Paskal tilining asosiy qoidasiga doimo amal qilish kerak: ob'ektni ishlatishdan oldin uni e'lon qilish va tavsiflash kerak.

    Paskal kompilyatorlari kichik va katta harflarni ajratmaydi va bo'sh joy belgilarini e'tiborsiz qoldirmaydi, shuning uchun dastur matni o'qish va disk raskadrovka uchun eng qulay bo'lgan tarzda tuzilishi mumkin.

    Kompilyator direktivalari

    Belgilar bilan boshlanadigan qator ($ izoh emas, balki kompilyator direktivasi - dasturni kompilyatsiya qilish va bajarish jarayoni bog'liq bo'lgan maxsus buyruq. Direktivlarni ular "ma'nosi bo'yicha" tegishli bo'limlarda ko'rib chiqamiz.

    Masalan, chiziq ($I-,Q+) kiritish/chiqarish tekshiruvini o‘chirib qo‘yadi, lekin hisoblashning to‘lib ketishini boshqarishni yoqadi.

    Identifikatorlar

    Dastur ob'ektlariga berilgan nomlar (konstantalar, turlar, o'zgaruvchilar, funktsiyalar va protseduralar va butun dastur) identifikatorlar deb ataladi. Ular faqat raqamlar, lotin harflari va "_" (pastki chiziq) belgisidan iborat bo'lishi mumkin. Biroq, raqam nomni boshlay olmaydi. Identifikatorlar har qanday uzunlikda bo'lishi mumkin, lekin agar ikkita nomda bir xil birinchi 63 ta belgi bo'lsa, unda nomlar bir xil deb hisoblanadi.

    Siz dastur ob'yektlariga istalgan nom berishingiz mumkin, lekin ular Paskal tomonidan qo'llaniladigan zahiralangan so'zlardan farqli ekanligiga ishonch hosil qilishingiz kerak, chunki kompilyator baribir "begona" nomli o'zgaruvchilarni qabul qilmaydi.

    Bu erda eng keng tarqalgan zahiralangan so'zlar ro'yxati:

    massivni amalga oshirish shl

    case interfeysi qatori

    keyin const yorlig'i

    fayl ko'rsatgichidan foydalanadi

    far protsedurasi var

    dastur uchun

    bilan oldinga rekord

    funktsiyani takrorlash xor

    O'zgaruvchilar va ma'lumotlar turlari

    O'zgaruvchi - bu dastur ishlayotgan vaqtda qiymati o'zgarishi mumkin bo'lgan dastur ob'ekti.

    Ma'lumotlar turi - bu ma'lumotlar turiga tegishli o'zgaruvchilar olishi mumkin bo'lgan qiymatlar diapazonining xarakteristikasi.

    Dasturda ishlatiladigan barcha o'zgaruvchilar quyidagi shablon yordamida maxsus var bo'limida tavsiflanishi kerak:

    var<имя_переменной_1> [, <имя_переменной_2, _>] : <имя_типа_1>;

    <имя_переменной_3> [, <имя_переменной_4, _>] : <имя_типа_2>;

    Paskal tilida turli xil ma'lumotlar turlarining katta to'plami mavjud, ammo hozir biz ulardan faqat bir nechtasini ko'rsatamiz. Biz barcha ma'lumotlar turlari haqida keyinroq gaplashamiz.

    Konstantalar

    Konstanta - bu dastur ishga tushishidan oldin qiymati ma'lum bo'lgan ob'ekt.

    Konstantalar vizual dasturlarni loyihalash uchun zarur bo'lib, dastur matnida qayta-qayta takrorlanadigan qiymatlardan foydalanganda ajralmas hisoblanadi va agar bu qiymatlarni butun dastur davomida birdaniga o'zgartirish zarur bo'lsa, qulaydir.

    Paskalda konstantalarning uch turi mavjud:

    Nomsiz konstantalar (raqamlar va raqamlar, belgilar va satrlar, to'plamlar);

    Nomlangan tiplanmagan konstantalar;

    Nomlangan terilgan konstantalar.

    Nomsiz doimiylar

    Nomsiz konstantalarning nomlari yo'q va shuning uchun ularni e'lon qilish shart emas.

    Nomsiz konstanta turi avtomatik tarzda aniqlanadi, sukut bo'yicha:

    Har qanday raqamlar ketma-ketligi (ehtimol, "-" yoki "+" belgisidan oldin yoki bitta nuqta bilan ajratilgan) kompilyator tomonidan nomsiz doimiy - son (butun yoki haqiqiy) sifatida qabul qilinadi;

    Apostroflar ichiga olingan har qanday belgilar ketma-ketligi nomsiz konstanta - satr sifatida qabul qilinadi;

    Vergul bilan ajratilgan, kvadrat qavslar bilan chegaralangan har qanday butun sonlar yoki belgilar ketma-ketligi nomsiz doimiy - to'plam sifatida qabul qilinadi.

    Bundan tashqari, mantiqiy ma'lumotlar turiga tegishli ikkita maxsus konstanta rost va yolg'on mavjud.

    Nomsiz konstantalardan foydalanishga misollar qatoriga quyidagi operatorlar kiradi:

    real2:= 12,075 + x;

    string4:= "abc" + string44;

    set5:= * set55;

    boolean6:= rost;

    Tiplanmagan doimiylar

    Nomlangan doimiylar, ularning nomidan ko'rinib turibdiki, nomga ega bo'lishi kerak. Shuning uchun bu nomlar kompilyatorga xabar qilinishi kerak, ya'ni maxsus const bo'limida tasvirlangan.

    Agar siz doimiyning turini ko'rsatmasangiz, unda uning ko'rinishi bo'yicha kompilyatorning o'zi qaysi (asosiy) turga tayinlanishi kerakligini aniqlaydi. Ta'riflangan har qanday konstantadan boshqa konstantalar, o'zgaruvchilar va ma'lumotlar turlarini e'lon qilishda foydalanish mumkin. Mana, nomlanmagan konstantalarni tavsiflashning ba'zi misollari:

    Yozilgan konstantalar

    Yozilgan nomli konstantalar - bu dastur ishga tushganda ma'lum bo'lgan boshlang'ich qiymati bo'lgan o'zgaruvchilar(!). Shuning uchun, birinchidan, terilgan konstantalardan boshqa konstantalarni, ma'lumotlar turlarini va o'zgaruvchilarni aniqlash uchun foydalanish mumkin emas, ikkinchidan, dastur ishlayotgan paytda ularning qiymatlarini o'zgartirish mumkin.

    Yozilgan konstantalar quyidagi shablon yordamida tavsiflanadi:

    const<имя_константы> : <тип_константы> = <начальное_значение>;

    Quyidagi misollar buni qanday qilishni ko'rsatadi:

    const n: integer = -10;

    b: mantiqiy = rost;

    Tegishli ma'lumotlar turlarini o'rganar ekanmiz, biz boshqa turdagi konstantalarga misollar keltiramiz.

    Paskal ma'lumotlar turlari

    Paskal kompilyatorlari dasturni ishga tushirishdan oldin uni ishga tushirish uchun zarur bo'lgan xotira hajmi haqida ma'lumot berilishini talab qiladi. Buning uchun o'zgaruvchilarni tavsiflash bo'limida (var) dasturda ishlatiladigan barcha o'zgaruvchilarni sanab o'tish kerak. Bundan tashqari, siz kompilyatorga ushbu o'zgaruvchilarning har biri qancha xotirani egallashini aytishingiz kerak.

    Bularning barchasi kelajakdagi o'zgaruvchining turini ko'rsatish orqali dasturga etkazilishi mumkin. O'zgaruvchining turi haqida ma'lumotga ega bo'lgan kompilyator unga qancha bayt ajratish kerakligini, u bilan qanday amallarni bajarish mumkinligini va qanday konstruktsiyalarda ishtirok etishini "tushunadi".

    Dasturchilarga qulaylik yaratish uchun Paskalda ko'plab standart ma'lumotlar turlari mavjud va qo'shimcha ravishda mavjudlari (standart yoki yana dasturchining o'zi tomonidan belgilanadi) asosida yangi ma'lumotlar turlarini yaratish imkoniyati mavjud, ular tuzilgan deb ataladi.

    Paskalda asosiy va tuzilgan ma'lumotlar turlariga bo'linish jadvalda ko'rsatilgan:

    Tartibli (diskret) ma'lumotlar turlari

    Manzil ma'lumotlari turlari

    Strukturaviy ma'lumotlar turlari

    Arifmetik ma'lumotlar turlari

    Ma'lumotlarning asosiy turlari

    Mantiqiy

    Ramziy

    Haqiqiy

    Netipizi

    indekslangan indeks

    Qurilish turlari

    Ro'yxatga olinadi

    hafta = (su, mo, tu, biz, th, fr, sa);

    Yozilgan ko'rsatgich

    Massiv

    String string

    rekord rekord

    Protsessual

    Ob'ekt

    Interval (diapazon)

    Dasturchi tomonidan tuzilgan ma'lumotlar turlari

    Tartib ma'lumotlar turlari

    Asosiy ma'lumotlar turlari orasida tartibli tiplar ajralib turadi. Ushbu nomni ikki yo'l bilan oqlash mumkin:

    1. Tartib tipidagi har bir element yagona (tartib) son bilan bog‘lanishi mumkin. Qiymatlarni raqamlash noldan boshlanadi. Istisno - bu shortint, integer va longint ma'lumotlar turlari. Ularning raqamlanishi elementlarning qiymatlariga to'g'ri keladi.

    2. Bundan tashqari, har qanday tartibli turdagi elementlarda tartib belgilanadi (so'zning matematik ma'nosida), bu bevosita raqamlashga bog'liq. Shunday qilib, tartib tipdagi har qanday ikkita element uchun ulardan qaysi biri kichikroq va qaysi biri kattaroq ekanligini aniq aytish mumkin.

    Tartibdagi ma'lumotlar turlarini boshqaradigan standart tartiblar

    Quyidagi funktsiyalar va protseduralar faqat tartibli turlar uchun aniqlanadi:

    1.Ord(x) funksiyasi x o‘zgaruvchisi qiymatining tartib raqamini qaytaradi (x o‘zgaruvchisi tegishli bo‘lgan turga nisbatan).

    2.Pred(x) funksiyasi x dan oldingi qiymatni qaytaradi (turning birinchi elementiga taalluqli emas).

    3.Succ(x) funksiyasi x dan keyingi qiymatni qaytaradi (turning oxirgi elementiga taalluqli emas).

    4.Inc(x) protsedurasi x dan keyingi qiymatni qaytaradi (arifmetik ma'lumotlar turlari uchun bu x:=x+1 operatoriga ekvivalentdir).

    5.Inc(x,k) protsedurasi x dan keyingi k-qiymatni qaytaradi (arifmetik ma'lumotlar turlari uchun bu x:=x+k operatoriga ekvivalentdir).

    6. dec(x) protsedurasi x dan oldingi qiymatni qaytaradi (arifmetik ma'lumotlar turlari uchun bu x:=x-1 operatoriga ekvivalentdir).

    7.dec(x,k) protsedurasi x dan oldingi k-e qiymatini qaytaradi (arifmetik ma'lumotlar turlari uchun bu x:=x-k operatoriga ekvivalentdir).

    Bir qarashda inc(x) protsedurasidan foydalanish natijasi succ(x) funksiyasidan foydalanish natijasi bilan aynan bir xildek ko‘rinadi. Biroq, ular orasidagi farq ruxsat etilgan diapazon chegaralarida paydo bo'ladi. Succ(x) funksiyasi turning maksimal elementiga taalluqli emas, lekin inc(x) protsedurasi hech qanday xatolikka olib kelmaydi, lekin mashinani qoʻshish qoidalariga muvofiq harakat qilib, element raqamiga keyingisini qoʻshadi. . Raqam, albatta, diapazondan tashqariga chiqadi va kesish tufayli diapazonning minimal qiymatining soniga aylanadi. Ma'lum bo'lishicha, inc() va dec() protseduralari har qanday tartibli turni xuddi "halqada yopilgan" kabi qabul qiladi: oxirgi qiymatdan so'ng darhol birinchi qiymat yana keladi.

    Keling, aytilganlarning hammasini misol bilan tushuntirib beraylik. Ma'lumotlar turi uchun

    o'n olti = 0..15 turi;

    15 raqamiga 1 qo'shishga urinish quyidagi natijani beradi:

    Dastlabki birlik kesiladi va shuning uchun inc(15)=0 bo'ladi.

    Xuddi shunday holat ixtiyoriy tartibli ma'lumotlar turining ruxsat etilgan diapazonining pastki chegarasida dec(x) protsedurasi va pred(x) funksiyasi uchun kuzatiladi:

    dec(min_element)= max_element

    Tartibga oid ma'lumotlar turlari

    1. Mantiqiy tip ikkita qiymatga ega: noto‘g‘ri va rost va ular uchun quyidagi tengliklar amal qiladi:

    ord(false)=0, ord(true)=1, false

    pred(to'g'ri)=noto'g'ri, succ(noto'g'ri)=to'g'ri,

    inc(to'g'ri)=noto'g'ri, inc(noto'g'ri)=to'g'ri,

    dec(to'g'ri)=noto'g'ri, dec(noto'g'ri)=to'g'ri.

    2. Belgilar tipidagi char 256 kengaytirilgan ASCII belgilarni o'z ichiga oladi (masalan, "a", "b", "i", "7", "#"). Ord() funksiyasi tomonidan qaytarilgan belgilar soni ASCII jadvalidagi belgilar raqami bilan bir xil.

    3. Jadvaldagi butun sonli ma’lumotlar turlarini umumlashtiramiz:

    Ma'lumotlar turi

    Baytlar soni

    Diapazon

    2147483648..2147483647

    4. Sanalgan ma’lumotlar turlari ularning elementlarini aniq sanab o‘tish orqali tip bo‘limida ko‘rsatiladi. Masalan:

    hafta turi =(quyosh, dushanba, shanba, chorshanba, pays, jum, shanba)

    Eslatib o'tamiz, ushbu ma'lumotlar turi uchun:

    inc (o'tirdi) = quyosh, dec (quyosh) = o'tirdi.

    5. Intervalli ma'lumotlar turlari faqat ularning diapazoni chegaralari bilan belgilanadi. Masalan:

    turi oy = 1..12;

    budni = dus..fri;

    6. Dasturchi tomonidan tuzilgan ma lumotlar tiplari tiplar bo limida quyidagi naqsh bo yicha tavsiflanadi:

    turi<имя_типа> = <описание_типа>;

    Masalan:

    lat_bukvy = "a".."z","A".."Z" yozing;

    Asosiy ma'lumotlar turlari standartdir, shuning uchun ularni tip bo'limida tasvirlashning hojati yo'q. Biroq, agar xohlasangiz, bu, masalan, uzoq ta'riflarga qisqa nomlar berish orqali ham amalga oshirilishi mumkin. Aytaylik, yangi ma'lumotlar turini joriy etish orqali

    int turi = butun son;

    Dastur matnini biroz qisqartirishingiz mumkin.

    Haqiqiy ma'lumotlar turlari

    Eslatib o'tamiz, bu ma'lumotlar turlari tartibli emas, balki arifmetikdir.

    Ma'lumotlar turi

    Baytlar soni

    Diapazon (mutlaq qiymat)

    1.5*10-45..3.4*1038

    2.9*10-39..1.7*1038

    5.0*10-324..1.7*10308

    3.4*10-4932..1.1*104932

    Tuzilgan ma'lumotlar turlari

    Biz ushbu ma'lumotlar turlarini (ular uchun belgilangan operatsiyalar bilan bir qatorda) bir necha ma'ruzalar davomida ko'rib chiqamiz.

    Amallar va ifodalar

    Arifmetik amallar

    Keling, operatsiyalar haqida gapiraylik - u yoki bu asosiy ma'lumotlar turidagi o'zgaruvchilar uchun ruxsat etilgan standart harakatlar. Asos sifatida arifmetik va mantiqiy amallar bo'ladi.

    Eslatma: Quyida sanab o'tilgan barcha operatorlar (unar "-" dan tashqari) ikkita operandni talab qiladi.

    1. Mantiqiy amallar (va - mantiqiy VA, yoki - mantiqiy YOKI, mantiqiy emas, xor - eksklyuziv OR) faqat mantiqiy turdagi qiymatlarga taalluqlidir. Ular, shuningdek, mantiqiy qiymatlarga olib keladi. Mana ushbu operatsiyalar uchun qiymatlar jadvali:

    rost yolg'on haqiqat

    yolg'on yolg'on yolg'on

    rost yolg'on yolg'on

    2. Taqqoslash amallari (=,<>, >, <, <=, >=) barcha asosiy turlarga tegishli. Ularning natijalari ham mantiqiy qiymatlardir.

    3. Butun sonlar arifmetikasining amallari faqat butun son turlariga tegishli. Ularning natijasi turi operandlarning turlariga bog'liq bo'lgan butun sondir.

    a div b - a ni b ga to'liq bo'lish (ehtimol, 0 ga bo'linish taqiqlanganligini eslatishning hojati yo'q, shuning uchun bunday hollarda operatsiya xatolikni keltirib chiqaradi). Natijada operandlar tegishli bo'lgan turlar uchun umumiy ma'lumotlar turi bo'ladi.

    Masalan, (qisqa div bayt = butun son). Buni shunday tushuntirish mumkin: butun son - bu bayt va qisqartma kichik to'plamlar bo'lgan minimal turi.

    a mod b - a ga b bo'linganda qoldiqni olish. Natijaning turi, oldingi holatda bo'lgani kabi, operandlarning turlari bilan belgilanadi va 0 b uchun noqonuniy qiymatdir. Natijasi har doim manfiy bo'lmagan son bo'lgan matematik operatsiya rejimidan farqli o'laroq, "dasturchi" operatsiyasi rejimining natijasi belgisi uning birinchi operandining belgisi bilan belgilanadi. Shunday qilib, agar matematikada (-2 mod 5) = 3 bo'lsa, bizda (-2 mod 5) = -2 bo'ladi.

    a shl k - a qiymatini k bitga chapga siljitish (bu a o'zgaruvchining qiymatini 2k ga ko'paytirishga teng). Amaliyot natijasi birinchi operand(lar) bilan bir xil turdagi bo'ladi.

    a shr k - a ning qiymatini k bitga o'ngga siljitadi (bu a o'zgaruvchining qiymatini to'liq 2k ga bo'lish bilan tengdir). Amaliyot natijasi birinchi operand(lar) bilan bir xil turdagi bo'ladi.

    va, yoki, emas, xor - mos mantiqiy amallar bilan bir xil qoidalarga muvofiq butun sonlarning ikkilik tasvirining bitlari bilan ishlaydigan ikkilik arifmetik amallar.

    4. Umumiy arifmetik amallar (+, -, *, /) barcha arifmetik tiplarga tegishli. Ularning natijasi ikkala operand uchun umumiy bo'lgan ma'lumotlar turiga tegishli (yagona istisno - bu kasrga bo'linish operatsiyasi /, natijasi har doim haqiqiy ma'lumotlar turidir).

    Boshqa operatsiyalar

    Paskalning ba'zi standart ma'lumotlar turlarining qiymatlariga xos bo'lgan boshqa operatsiyalar mavjud. Biz ushbu operatsiyalarni tegishli bo'limlarda ko'rib chiqamiz:

    #, in, +, *, : 5-maʼruzaga qarang “Rimzlar. Chiziqlar. Ko'pchilik"

    @, ^: 7-ma'ruzaga qarang "Manzillar va ko'rsatkichlar"

    Standart arifmetik funksiyalar

    Arifmetik amallarga standart arifmetik funksiyalar ham kiradi. Biz ularning ro'yxatini jadvalda qisqacha tavsif bilan taqdim etamiz.

    Funktsiya

    Tavsif

    Argument turi

    Natija turi

    Raqamning mutlaq qiymati (modul).

    Arifmetika

    Argument turi bilan bir xil

    Arktangens (radianlarda)

    Arifmetika

    Haqiqiy

    Kosinus (radianlarda)

    Arifmetika

    Haqiqiy

    Koʻrsatkich (sobiq)

    Arifmetika

    Haqiqiy

    Sonning kasr qismini olish

    Arifmetika

    Haqiqiy

    Sonning butun qismini olish

    Arifmetika

    Haqiqiy

    Tabiiy logarifm (e asosi)

    Arifmetika

    Haqiqiy

    Raqamning toq ekanligini tekshirish

    Raqam ma'nosi

    Haqiqiy

    Eng yaqin butun songa yaxlitlash

    Arifmetika

    Pastga yaxlitlash - eng yaqin kichikroq butun songa

    Arifmetika

    Sinus (radianlarda)

    Arifmetika

    Haqiqiy

    Kvadratlashtirish

    Arifmetika

    Haqiqiy

    Kvadrat ildiz

    Arifmetika

    Haqiqiy

    Arifmetik ifodalar

    Barcha arifmetik amallar bir-biri bilan birlashtirilishi mumkin - albatta, ularning operandlari uchun ruxsat etilgan ma'lumotlar turlarini hisobga olgan holda.

    Har qanday operatsiya operandlari o'zgaruvchilar, konstantalar, funksiya chaqiruvlari yoki boshqa amallar asosida tuzilgan ifodalar bo'lishi mumkin. Hammasi birgalikda ifoda deyiladi.

    Arifmetik ifodalarga misollar:

    (x<0) and (y>0) - natijasi mantiqiy tipdagi ifoda;

    z shl abs(k) - ikkinchi operand standart funksiyaga chaqiruvdir;

    (x mod k) + min(a,b) + trunc(z) - arifmetik amallar va funksiya chaqiruvlarining kombinatsiyasi;

    toq(round(x/abs(x))) - "ko'p qavatli" ifoda.

    Hisoblash tartibi

    Agar ifoda qavslarni o'z ichiga olgan bo'lsa, u holda hisob-kitoblar quyidagi tartibda amalga oshiriladi: qavslarni joylashtirish chuqurligi qanchalik kichik bo'lsa, ularga kiritilgan operatsiya shunchalik kechroq hisoblanadi. Qavslar bo'lmasa, birinchi navbatda yuqori ustunlikka ega bo'lgan operatsiyalarning qiymatlari, keyin esa pastroq ustuvorliklarga ega bo'lganlar hisoblanadi. Bir xil ustuvorlikdagi bir nechta ketma-ket amallar chapdan o'ngga ketma-ketlikda hisoblanadi.

    2.1-jadval. Ustuvorliklar (barcha uchun) Paskal operatsiyalari

    Tur tushunchasi har qanday dasturlash tilining asosiy tushunchalaridan biridir. Dastur ishlayotgan ob'ektlar (konstantalar, o'zgaruvchilar, funktsiyalar, ifodalar) ma'lum bir turga tegishli.

    Turi - bu dastur ob'ektlari olishi mumkin bo'lgan qiymatlar to'plami va bu qiymatlar bo'yicha ruxsat etilgan operatsiyalar to'plami.

    Masalan, 1 va 2 qiymatlari butun son turi bo'lib, ularni qo'shish, ko'paytirish va boshqa arifmetik amallar bajarish mumkin. "Monitor" va "Paskal" ma'nolari lingvistik xususiyatga ega, ularning o'ziga xos amallar to'plami mavjud. Ko'p ishlatiladigan tillarda faqat qat'iy belgilangan, oldindan ma'lum bo'lgan turlardan foydalanish mumkin. Paskal boshqa yuqori darajali tillarda uchraydigan standart tiplar bilan bir qatorda dasturchiga o'z turlarini yaratish imkonini beradi.

    Paskal tilida ruxsat etilgan barcha turlar ikkita katta guruhga bo'lingan: oddiy va murakkab (tuzilgan).

    Turi Diapazon Mantis, belgilar Kerakli xotira (bayt)
    HAQIQIY 2.9*10E-39..1.7*10E38 11-12
    YIGIT 1.5*10E-45..3.4*10E38 7-8
    DOUBLE 5.0*10E-324..1.7*10E308 15-16
    UZAYTILGAN 1.9*10E-4951..1.1*10E4932 19-20
    COMP -2E+63+1..2E+63-1 10-20

    SINGLE, DOUBLE, EXTEND, COMP turlaridan samarali foydalanish faqat ($N+) direktivasi yoqilganda mumkin. Odatiy bo'lib, u o'chirilgan. Muhandislik va iqtisodiy muammolarni hal qilish uchun REAL tipidagi qiymatlar etarli.

    Misol

    Var Res, Summa, Itog: haqiqiy;

    Mantiqiy ma'lumotlar turi BOOLEAN identifikatori bilan tavsiflanadi. Ushbu turdagi o'zgaruvchilar va konstantalar ikkita qiymatdan faqat bittasini qabul qilishi mumkin: TRUE (to'g'ri) yoki FALSE (noto'g'ri).

    Misol

    Var Sel1, Sel2: mantiqiy;

    A, B, C, D: mantiqiy;

    Mantiqiy ifodalar 1 bayt xotirani egallaydi va mantiqiy va relyatsion ifodalarda hamda dastur operatorlarining bajarilish tartibini nazorat qilish uchun ishlatiladi.

    Harf (belgi) turi standart CHAR identifikatori bilan tavsiflanadi. Ushbu turdagi konstantalar va o'zgaruvchilar ASCII kod jadvali qiymatlaridan birini qabul qilishi mumkin. Bu tipdagi doimiy yoki o‘zgaruvchining ma’nosi apostroflar ichiga olingan.

    Masalan, Var Bukva, Znak, Belgi: char;

    Bukva:='A'; Znak:=’+’; Belgisi:=’!’

    Belgilar tipidagi o'zgaruvchilar xotirada 1 baytni egallaydi. Arifmetik ifodalarda char ma'lumotlaridan foydalanish taqiqlanadi. Taqqoslash operatsiyalari harfiy qiymatlarga qo'llanilishi mumkin, natija literal o'zgaruvchining soniga yoki kod jadvalidagi doimiyga bog'liq.

    Paskal standart ma'lumotlar turlariga qo'shimcha ravishda skalyar tiplarni qo'llab-quvvatlaydi, foydalanuvchi aniqlangan. Bularga kiradi sanab o'tish mumkin Va interval turlari. Ushbu turdagi ma'lumotlar xotirada 1 baytni egallaydi, shuning uchun har qanday maxsus turdagi 255 dan ortiq elementni o'z ichiga olmaydi. Ulardan foydalanish dasturning ko'rinishini sezilarli darajada yaxshilaydi, xatolarni topishni osonlashtiradi va xotirani tejaydi.

    Enum turi to'g'ridan-to'g'ri ma'lum turdagi o'zgaruvchi olishi mumkin bo'lgan barcha qiymatlarni sanab o'tish orqali aniqlanadi. Shaxsiy qiymatlar vergul bilan ajratiladi va butun ro'yxat qavs ichiga olinadi.

    Format

    Turi<имя типа>=(<значение1, значение2, ..., значениеN>);

    Var<идентификатор, ...>: < имя типа>;

    Misol

    Turi fasl =(bahor, yoz, kuz, qish);

    Var S1, S2: Fasl;

    Kuz: (sentyabr, oktyabr, noyabr);

    Bu misolda aniq belgilangan Mavsum foydalanuvchisi maʼlumotlari turi koʻrsatilgan. Ularning ma'nolari aniqlanadi - fasllarning belgilari. S1 va S2 o'zgaruvchilari sanab o'tilgan qiymatlardan faqat bittasini qabul qilishi mumkin. Ularga boshqa qiymatlarni belgilashga urinish dasturiy ta'minotning uzilishiga olib keladi. Ro'yxatning uchinchi turi anonimdir (nomi yo'q) va Var bo'limida qiymatlarni sanash orqali belgilanadi. Kuz bu turdagi o'zgaruvchidir va sentyabr, oktyabr, noyabr qiymatlarini olishi mumkin. Shunday qilib, har qanday turni belgilash mumkin, ammo bu har doim ham qabul qilinishi mumkin emas. Birinchi usul, albatta, tushunarliroq va Paskal tilining tabiatiga ko'proq mos keladi.

    Interval turi berilgan o'zgaruvchi uchun qiymatlar diapazonining chegaralarini belgilaydigan ikkita konstantani belgilashga imkon beradi. Interval o'zgaruvchisi ustidagi har bir operatsiya uchun kompilyator o'zgaruvchining qiymati belgilangan diapazonda qolish-qolmasligini aniqlash uchun tekshirish tartiblarini yaratadi. Ikkala konstanta ham realdan boshqa standart turlardan biriga tegishli bo'lishi kerak. Birinchi doimiyning qiymati, albatta, ikkinchisining qiymatidan kichik bo'lishi kerak.

    Format

    Turi<имя типа> = <константа1> .. <константа2>;

    Var<идентификатор>: < имя типа>;

    Misol

    Turi Kunlar = 1.. 31;

    Var Work_d, Free_d: Kunlar;

    Ushbu misolda o'zgaruvchilar Ish_k, bo'sh_k turiga ega kunlar va 1 diapazondan istalgan qiymatni qabul qilishi mumkin. . 31.

    Diapazondan chiqish dasturning uzilishiga olib keladi.

    Siz diapazon chegaralarini doimiy qiymatlar bilan emas, balki ularning nomlari bilan belgilash orqali interval turini belgilashingiz mumkin:

    Const Min = 1; Maks = 31;

    Tur kunlar = Min .. Maks;

    Var Work_d, Free_d: Kunlar;

    Strukturaviy turlar ma'lumotlar turlari skalyar tiplarga asoslanadi va ularning turli kombinatsiyalarini o'z ichiga olishi mumkin. Ular skalyar elementlarning tartiblangan to'plamini belgilaydi va ularning tarkibiy qismlarining turi bilan tavsiflanadi. Paskal tili quyidagi tuzilgan ma'lumotlar turlarini taqdim etadi:

    chiziq - apostroflar ichiga olingan belgilar ketma-ketligi;

    massiv - indeks bo'yicha kirish mumkin bo'lgan bir xil turdagi elementlarning qat'iy sonidan iborat tuzilgan ma'lumotlar turi ;

    bir guruh - bir butun sifatida ko'rib chiqilishi mumkin bo'lgan ba'zi bir belgi yoki belgilar guruhiga ko'ra tanlangan ob'ektlar to'plami;

    rekord - har xil turdagi komponentlarning belgilangan soni to'plami;

    fayl- bir xil turdagi va bir xil uzunlikdagi komponentlar ketma-ketligi.

    Yana ikkita tuzilgan turdagi - protsessual va ob'ektni - odatiy ko'rinishdagi ma'lumotlar bilan taqqoslash qiyin.

    1-rasm- Paskal tilining asosiy turlari to'plami

    Paskal tilidagi eng oddiy raqamli ma'lumotlar turi butun sonlarni saqlash uchun mo'ljallangan butun sonlar turlaridir. Paskalda butun sonlar odatda ikki turga bo'linadi: imzolangan va ishorasiz. Belgilangan raqamlar butun son turi bo'lib, u ham musbat, ham manfiy raqamlarni o'z ichiga oladi, ishorasiz raqamlar faqat musbat raqamlardir.

    Quyida butun sonli ikkita jadval mavjud. Avval yozamiz imzolangan butun son turlari:


    TuriBaytQiymatlar diapazoni
    qisqartma1 -128 ... 127
    kichik2 -32768 ... 32767
    butun son, uzunlik4 -2147483648 ... 2147483647
    int648 -9223372036854775808 ... 9223372036854775807

    Bu esa belgisiz butun son turlari:


    TuriBaytQiymatlar diapazoni
    bayt1 0 ... 255
    so'z2 0 ... 65535
    uzun so'z, kardinal4 0 ... 4294967295
    uint648 0 ... 18446744073709551615

    Ko'rib turganingizdek, birinchi ustunda tur nomi, ikkinchisida - bu turdagi raqamlar bo'yicha xotirada band bo'lgan baytlar soni, uchinchisida - mos ravishda mumkin bo'lgan qiymatlar oralig'i mavjud. Belgilangan raqamlarning ikki turi mavjud - integer va longint (so'zma-so'z "integer" va "long butun"), ular sinonimdir. Ya'ni, tavsif bo'limida bir yoki boshqa nomdan foydalanishingiz mumkin.

    Xuddi shunday, ikkinchi jadvalda (Paskalda manfiy bo'lmagan butun sonlar) ikkita 4 baytli sinonimik butun son turlari mavjud - uzun so'z va kardinal , shuning uchun birini yoki boshqasini ishlating.

    Shuni ham ko'rishingiz mumkinki, agar birinchi jadval raqamlarini shartli ravishda nolga nisbatan o'ng tomonga siljitsak (minimal son 0 bo'lishi uchun intervalni o'ngga siljitsak), ikkinchi jadvalda yotgan butun sonlar oraliqlarini olamiz. mos keladigan qatorlarda. Demak, agar 1 baytli shortint turida chap va o'ng chegaralarga 128 qo'shsak, bayt turini olamiz (0..255); agar 2 baytli turdagi smallintda biz chegaralarga 32768 qo'shsak, tegishli 2 baytli belgisiz turdagi so'zni olamiz (0..65535) va hokazo.

    Bularning barchasi, chunki ishorasiz butun sonlar turlarida raqamlarni ikkiga bo'lish mumkin: raqamlarning yarmi salbiy qismga, yarmi musbat qismga. Nima uchun imzolangan raqamlarda chap chegara mutlaq qiymatdagi 1 o'ng chegaradan kattaroq? - deb so'rayapsiz. Misol uchun, shortint turida minimal -128, maksimal esa atigi 127 (modul 1 kamroq). Buning sababi shundaki, o'ng tomon ham 0 ni o'z ichiga oladi va siz buni bilishingiz va eslab qolishingiz kerak.

    Xo'sh, nima uchun Paskalda butun sonlarni juda ko'p turlarga bo'lish kerak? Nega, masalan, PascalABC.Net va Free Pascal-dagi butun son turlarining eng kattasi - int64 - minus va ortiqcha bilan deyarli 9 yarim kvintillion (!) ga erishib bo'lmaydi? Ha, oddiy oddiy (?) sabab - xotirani tejash. Agar siz ikkita kichik bir baytli musbat raqamni (0..255) qo'shishingiz kerak bo'lsa va siz bu raqamlarni int64 (8 bayt) deb ta'riflagan bo'lsangiz, unda bu 8 marta ko'proq xotirani oladi. Va agar dastur katta bo'lsa va juda ko'p o'zgaruvchilar bo'lsa, unda xotirani tejash juda keskin oshadi. Bundan tashqari, agar muammo uzunlik, massa, masofa, vaqt va boshqalar kabi miqdorlar bilan bog'liq bo'lsa, imzolangan butun son turlaridan foydalanishning ma'nosi yo'q.

    Saytning Abrahamyan muammolar kitobi bo'limida (Integer kichik bo'limi) Paskalda har xil butun son turlaridan foydalanishni kuzating.



     


    O'qing:



    Nima uchun noutbukga kichik SSD kerak va unga Windows-ni o'rnatishga arziydimi?

    Nima uchun noutbukga kichik SSD kerak va unga Windows-ni o'rnatishga arziydimi?

    O'yinlar uchun SSD drayveri qanchalik muhim, u nimaga ta'sir qiladi va ushbu texnologiyaning foydaliligi nimada - bu bizning maqolamizda muhokama qilinadi. Qattiq holat...

    Dasturlar yordamida flesh-diskni ta'mirlash Noutbukdagi USB portni qanday tuzatish kerak

    Dasturlar yordamida flesh-diskni ta'mirlash Noutbukdagi USB portni qanday tuzatish kerak

    USB portini qanday tuzatish mumkin? Mutaxassisdan javob: Kompyuterdan foydalanganda USB portlari tez-tez buziladi. Birinchidan, ular muvaffaqiyatsizlikka uchradi ...

    Disk tuzilishi buzilgan, o'qish mumkin emas, nima qilish kerak?

    Disk tuzilishi buzilgan, o'qish mumkin emas, nima qilish kerak?

    Foydalanuvchilarning shaxsiy kompyuterlarida ko'pincha muhim ma'lumotlar - hujjatlar, fotosuratlar, videolar saqlanadi, ammo ma'lumotlarning zaxira nusxasi odatda...

    Kompyuter nimadan iborat?

    Kompyuter nimadan iborat?

    Nashr etilgan: 14.01.2017 Assalomu alaykum, do'stlar, bugun biz kompyuter tizim blokining dizaynini batafsil ko'rib chiqamiz. Keling, nima ekanligini bilib olaylik ...

    tasma tasviri RSS