Jenis yang disebutkan. Semua tipe data dan tipe enum Pascal yang paling umum digunakan

Jenis yang disebutkan ditentukan secara langsung dengan menghitung semua nilai yang dapat diambil oleh variabel. dari jenis ini. Setiap nilai adalah konstanta dari tipenya dan hanya dapat dimiliki oleh salah satu dari tipe enumerasi yang ditentukan dalam program. Tipe enumerasi dijelaskan di bagian deklarasi tipe, yang dimulai dengan kata kunci tipe. Setiap nilai diberi nama oleh beberapa pengidentifikasi dan ditempatkan dalam daftar yang diapit tanda kurung, misalnya:

Jenis Warna = (merah, putih, biru); Hari = (Sen, Sel, Rab, Kam, Jum, Sab, Min);

Pemrogram menggabungkan ke dalam satu grup, sesuai dengan beberapa fitur, seluruh rangkaian nilai yang membentuk tipe yang disebutkan. Penggunaan tipe enumerasi membuat program lebih mudah dibaca. Jenis yang disebutkan meningkatkan keandalan program dengan mampu mengontrol nilai yang diterima variabel terkait.

Variabel dari tipe enumerasi apa pun dapat dideklarasikan tanpa terlebih dahulu mendeklarasikan tipe tersebut, misalnya:

Var TextColor: (hitam, putih, hijau);

Nilai dalam tipe enumerasi adalah konstanta. Tindakan pada mereka mematuhi aturan yang berlaku untuk konstanta. Mereka diberi nomor mulai dari 0 sesuai urutan kemunculannya di deskripsi. Operator relasional berlaku untuk semua tipe yang disebutkan (jika kedua operan memiliki tipe yang sama). Urutan ditetapkan oleh urutan di mana konstanta disebutkan.

Untuk argumen tipe ordinal, ada fungsi yang telah ditentukan berikut ini:

  • succ(X) - di samping X
  • pred(X) - sebelumnya X
  • ord(X) – bilangan urut dari X

Konversi terbalik juga diperbolehkan: setiap ekspresi bertipe WORD dapat dikonversi menjadi nilai dari tipe enumerasi, selama nilai ekspresi integer tidak melebihi kardinalitas tipe enumerasi. Konversi ini dicapai dengan menggunakan fungsi yang dideklarasikan secara otomatis dengan nama jenis yang disebutkan.

Variabel dari tipe apa pun yang tidak cocok dengan tipe standar apa pun juga dapat dimasukkan ke dalam program. Tipe seperti itu ditentukan dengan menghitung nilai dalam deklarasi tipe; salah satu dari nilai ini dapat diambil oleh variabel jenis ini yang dideklarasikan nanti dalam program. Bentuk umum dari enumerated type description:

ketik nm = (kata1, kata2, …, kataN); varw:nm;

di sini nm adalah pengidentifikasi tipe (sewenang-wenang), kata1, kata2… adalah nilai spesifik yang dapat diambil oleh variabel w milik tipe nm. Nilai jenis ini dianggap terurut, mis. deklarasi tipe secara bersamaan memperkenalkan pengurutan kata1< word2 < wordN. Порядковые значения отсчитываются с 0.

Fungsi ord, pred, succ dan prosedur inc dan dec dapat diterapkan pada variabel tipe enum.

Operasi relasional berlaku untuk semua variabel dengan tipe skalar yang sama: =,<>, <=, >=, <, >.

Fitur dari variabel tipe enum adalah nilainya tidak dapat dimasukkan dari keyboard dan ditampilkan di layar (tetapi dapat digunakan saat bekerja dengan file yang diketik).

Contoh 1. ketik warna = (merah, kuning, hijau, biru);
Ini didefinisikan di sini bahwa merah< yellow < green < blue. Переменная типа color может принимать одно из перечисленных значений.

fungsi succ(x)

Diberikan elemen x, urutan terurut yang menjadi milik x ditentukan, dan elemen yang mengikuti x dalam urutan ini dikembalikan.

Contoh 2 Biarkan urutan huruf diberikan dalam urutan abjad. Maka succ(A) adalah B; succ(L) adalah M, dan seterusnya.

Misalnya 1, succ(merah) berwarna kuning.

fungsi pred(x)

Diberikan elemen x, urutan tempat x ditentukan, dan elemen sebelumnya dari urutan ini dikembalikan.

Contoh 3. pred(F) adalah E; pred(Z) adalah Y, dan seterusnya.

fungsi ord(x).

Nomor elemen x dalam urutan dikembalikan.

Contoh 4. ord(merah) adalah 0 dan ord(hijau) adalah 2.


Algoritme bahasa Pascal dibangun sedemikian rupa sehingga untuk beroperasi pada variabel, Anda biasanya perlu menentukan jenisnya. Selain itu, deskripsi tipe untuk setiap variabel harus dibuat sebelum program dijalankan (di bagian var). Artinya, ketika kompiler diluncurkan, program pertama-tama menerima informasi mengenai tipe data apa yang akan digunakannya dan baru kemudian melakukan tindakan apa pun.
Jadi di Pascal ada 3 tipe utama: simple, structured dan pointer. Namun, setiap jenis memiliki subtipe sendiri. Untuk kenyamanan, semua tipe data dicantumkan.

Setiap jenis memiliki rentang nilainya sendiri. Di bawah ini adalah rentang untuk sederhana Tipe

Jenis yang paling umum digunakan bilangan bulat,nyata,rindu,byte,rangkaian,boolean dan arang karena biasanya dalam tugas tidak diindikasikan tipe spesifik mana yang harus digunakan untuk penyelesaian. Berhati-hatilah saat menggunakan jenis dan awasi rentang yang diizinkan untuk setiap jenis. Misalnya, bilangan pecahan tidak dapat diberi tipe integer, dan tipe char hanya boleh satu karakter (misalnya, variabel f:=gfgfgf tidak boleh char)
Sekarang tentang bagaimana mendeskripsikan jenisnya. Seperti disebutkan di atas, operator diberi tipe di awal program (Anda bahkan dapat mengatakannya sebelum program dimulai). Jadi, jenisnya dijelaskan di bagian var, yang terletak sebelum awal program (yaitu, sebelum memulai). Pertimbangkan contoh sederhana
varx,u,yu,i:bilangan bulat;
s,f:nyata;
g:tali;
mulai
....
akhir. Seperti yang Anda lihat dari contoh, template deskripsi tipe terlihat seperti ini
operator1, operator2: ketik; Seperti yang telah Anda perhatikan, tidak perlu mendeskripsikan setiap operator, jika jenisnya umum, cukup mencantumkannya dipisahkan dengan koma. Juga tidak perlu berpindah ke baris baru setelah setiap jenis, ini dilakukan di sini hanya untuk memudahkan pembacaan kode. Secara umum, kode harus dapat dibaca dan dipahami dengan baik, oleh karena itu disarankan untuk menggabungkan operator tipe umum, dan menulis setiap tipe dari baris baru.

Deskripsi dan penggunaan

Tipe enumerasi didefinisikan sebagai sekumpulan pengidentifikasi yang, dari sudut pandang bahasa, memainkan peran yang sama dengan konstanta bernama biasa, tetapi terkait dengan tipe tersebut. Deskripsi klasik dari tipe pencacahan dalam Pascal adalah sebagai berikut:

Jenis Cardsuit = (klub, wajik, hati, sekop) ;

Di sini, tipe data Cardsuit dideklarasikan, yang nilainya dapat berupa salah satu dari empat konstanta yang terdaftar. Variabel tipe Cardsuit dapat mengambil salah satu nilai club, diamonds, hearts, spades , diizinkan untuk membandingkan nilai tipe enum untuk kesetaraan atau ketidaksetaraan, serta menggunakannya dalam pernyataan pemilihan (dalam kasus Pascal) sebagai nilai yang mengidentifikasi pilihan.

Menggunakan enum memungkinkan Anda melakukannya kode sumber program lebih mudah dibaca, karena memungkinkan Anda untuk mengganti "angka ajaib" yang menyandikan nilai tertentu dengan nama yang dapat dibaca.

Berdasarkan pencacahan dalam beberapa bahasa, kumpulan tipe dapat dibuat. Dalam kasus seperti itu, himpunan dipahami (dan dijelaskan) sebagai kumpulan nilai unik yang tidak terurut dari tipe enum.

Jenis yang disebutkan dapat digunakan dalam deklarasi variabel dan parameter formal fungsi (prosedur, metode). Nilai dari tipe yang disebutkan dapat diberikan ke variabel yang sesuai dan melewati parameter dari tipe yang sesuai dalam fungsi. Selain itu, perbandingan nilai yang disebutkan untuk persamaan dan ketidaksetaraan selalu didukung. Beberapa bahasa juga mendukung operator pembanding lainnya untuk nilai dari jenis yang disebutkan. Hasil membandingkan dua nilai yang disebutkan dalam kasus seperti itu ditentukan, sebagai aturan, dengan urutan nilai-nilai ini dalam deklarasi tipe - nilai yang muncul lebih awal dalam deklarasi tipe dianggap "kurang" dari nilai yang terjadi kemudian. Terkadang tipe enumerasi atau beberapa rentang nilai dari tipe enumerasi juga dapat digunakan sebagai tipe indeks untuk sebuah array. Dalam hal ini, ada satu elemen dalam larik untuk setiap nilai rentang yang dipilih, dan pesanan nyata urutan elemen sesuai dengan urutan nilai dalam deklarasi tipe.

Penerapan

Biasanya, selama kompilasi, nilai pencacahan direpresentasikan menggunakan bilangan bulat. Bergantung pada bahasa pemrograman tertentu, representasi seperti itu dapat sepenuhnya disembunyikan dari pemrogram, atau tersedia baginya menggunakan "solusi" tertentu (misalnya, konversi paksa dari nilai tipe enum ke nilai tipe "bilangan bulat"), atau bahkan dikendalikan oleh pemrogram ( dalam kasus seperti itu, pemrogram memiliki kesempatan untuk secara eksplisit menentukan nomor apa yang akan dikodekan oleh semua atau beberapa nilai tipe enum. Semua pilihan memiliki sisi positif dan negatifnya. Di satu sisi, kemampuan untuk menggunakan nilai numerik dari konstanta yang membentuk tipe enumerasi, terutama jika disalahgunakan, menghilangkan penggunaan tipe ini dan menimbulkan bahaya kesalahan (saat menggunakan nilai numerik untuk yang tidak ada konstanta yang sesuai dalam tipe). Di sisi lain, manajemen nilai eksplisit menyediakan beberapa fitur tambahan. Misalnya, ini memungkinkan penggunaan tipe enum saat mengatur antarmuka dengan modul yang ditulis dalam bahasa lain, jika mereka menggunakan atau mengembalikan nilai yang disandikan bilangan bulat dari beberapa set yang telah ditentukan sebelumnya.

Kemungkinan lain yang disediakan tipe enumerasi pada tingkat implementasi bahasa adalah penghematan memori. Dengan tipe enum kecil, beberapa bit cukup untuk menyimpan nilai tipe ini (tipe Cardsuit di atas hanya membutuhkan dua bit per nilai, sedangkan integer standar pada kebanyakan arsitektur yang digunakan membutuhkan 32 bit - 16 kali lebih banyak), dan compiler dapat menggunakan fakta ini untuk memadatkan penyimpanan data dalam memori. Ini bisa menjadi sangat penting jika beberapa nilai tipe enum disimpan dalam satu catatan - memadatkan catatan saat memprosesnya dalam jumlah besar dapat membebaskan banyak memori. Namun, perlu dicatat bahwa kompiler biasanya tidak mengimplementasikan fitur ini, setidaknya belakangan ini, ketika memori komputer menjadi jauh lebih murah.

Kritik

Jenis pencacahan tradisional untuk bahasa pemrograman yang dikembangkan, digunakan cukup luas dan sering diterima begitu saja. Namun, jenis ini juga bukan tanpa kritik dari teori dan praktisi pemrograman. Jadi, saat mengembangkan bahasa pemrograman Oberon, tipe yang disebutkan dimasukkan dalam daftar fitur yang dihapus dari bahasa tersebut. Niklaus Wirth, perancang bahasa, mengutip alasan berikut:

Di sisi lain, misalnya, di Jawa, yang awalnya tidak mengandung tipe enumerasi, tipe ini kemudian diperkenalkan tidak hanya karena alasan kenyamanan, tetapi juga keandalan: masalah menggunakan grup konstanta bernama alih-alih enumerasi adalah bahwa ada tidak ada kontrol dari kompiler mengenai keunikan konstanta nilai, serta kemungkinan menetapkan nilai secara acak ke variabel yang tidak sesuai dengan salah satu dari konstanta ini.

Deskripsi enum dalam berbagai bahasa

Ada

Cardsuit Enum ( CLUBS, DIAMONDS, HEARTS, SPADES );

Bahasa yang dinamis dan diketik dengan lemah dengan sintaks seperti C (misalnya perl atau JavaScript) umumnya tidak memiliki enum.

C++

C#

Enum Cardsuit ( Klub, Berlian, Sekop, Hati );

Jawa

Enum Cardsuit (Klub, Berlian, Sekop, Hati)

Haskell

Dalam beberapa bahasa pemrograman (misalnya Haskell), pencacahan dapat ditiru menggunakan tipe Aljabar. Misalnya, tipe Boolean yang berisi dua pengidentifikasi untuk mewakili nilai kebenaran dikodekan seperti ini:

Bool Data = Salah | BENAR

Catatan


Yayasan Wikimedia. 2010 .

Wikipedia

Untuk alasan teknis, Bool mengalihkan ke sini. Anda dapat membaca tentang Bool di sini: stdbool.h. Boolean (eng. Boolean atau tipe data logis) tipe data adalah tipe data primitif dalam ilmu komputer yang dapat mengambil dua kemungkinan ... Wikipedia

Dalam teori pemrograman, tipe apa pun yang nilainya adalah nilai dari beberapa tipe lain yang dibungkus dengan konstruktor tipe aljabar. Dengan kata lain, tipe data aljabar memiliki sekumpulan konstruktor tipe, yang masing-masing ... ... Wikipedia

Integer, tipe data integer (English Integer), dalam ilmu komputer, salah satu tipe data paling sederhana dan umum dalam bahasa pemrograman. Digunakan untuk mewakili bilangan bulat. Himpunan angka jenis ini adalah ... ... Wikipedia

Tipe primitif (built-in, base) adalah tipe data yang disediakan oleh bahasa pemrograman sebagai unit bawaan dasar dari bahasa tersebut. Bergantung pada bahasa dan penerapannya, rangkaian jenis tersebut dapat sangat bervariasi. Itu ditentukan oleh ... ... Wikipedia

Istilah ini memiliki arti lain, lihat Set (makna). Himpunan adalah tipe dan struktur data dalam ilmu komputer, merupakan implementasi dari himpunan objek matematika. Tetapkan tipe data memungkinkan Anda untuk menyimpan sejumlah nilai ... ... Wikipedia

Beberapa bahasa pemrograman menyediakan tipe data khusus untuk bilangan kompleks. Kehadiran tipe bawaan menyederhanakan penyimpanan nilai kompleks dan perhitungannya. Isi 1 Aritmatika lebih kompleks 2 Dukungan dalam bahasa ... Wikipedia

Untuk menyempurnakan artikel ini teknologi Informasi diinginkan?: Temukan dan atur dalam bentuk tautan catatan kaki ke sumber resmi yang mengkonfirmasi apa yang tertulis. Setelah meletakkan catatan kaki, buat lebih akurat di ... Wikipedia

Bagaimana tipe data enumerasi dan interval Pascal diatur? Setiap tipe data terstruktur dalam bahasa Pascal dicirikan oleh sekumpulan elemen penyusunnya. Konstanta atau variabel jenis ini selalu berisi beberapa komponen, yang masing-masing juga dapat berupa tipe terstruktur. Ini mengingatkan kita pada tipe bersarang.

Bahasa Pascal mencakup tipe terstruktur berikut: string, array, record, set, file. Tetapi sebelum melanjutkan untuk mempelajari tipe-tipe ini, kami akan mempertimbangkan dua tipe data ordinal - enumerasi dan interval.

Jenis enumerasi Pascal:

tipe data yang dihitung adalah urutan terurut dari konstanta skalar yang menyusun tipe tersebut. Sebagai nilai dari setiap konstanta, kami menggunakan namanya. Nama-nama konstanta yang berbeda dipisahkan dengan koma, dan himpunan konstanta yang memiliki tipe enumerasi ditempatkan dalam tanda kurung.

Dalam proses pembuatan program, kita mungkin perlu menggabungkan ke dalam satu grup, menurut beberapa kriteria, sekumpulan nilai dari tipe yang disebutkan. Misalnya, tipe enum ZnakZodiaka (tanda zodiak) mencakup nilai skalar Oven, Strelec, Kozerog, Bliznecy, Vesy (Aries, Sagitarius, Capricorn, Gemini, Libra); tipe enumerated Planeta (Planet) menggabungkan nilai skalar Merkurius, Venera, Bumi, Mars (Merkurius, Venus, Bumi, Mars). Deklarasi tipe yang disebutkan terjadi di bagian deklarasi tipe:

ZnakZodiaka=(Oven,Strelec,Kozerog,Bliznecy,Vesy);

Variabel tipe skalar yang dideklarasikan di bagian tipe dideklarasikan menggunakan nama tipe:

Planeta = (Merkurius, Venera, Bumi, Mars); var Solnsystem: Planeta;

Dengan demikian, variabel Solnsystem dapat mengambil nilai-nilai berikut: Merkurius, Venera, Bumi, atau Mars. Juga, variabel dari tipe yang disebutkan dapat dideklarasikan di bagian var:

Solnsystem: Merkurius, Venera, Bumi, Mars;

Seperti yang bisa kita lihat, nama tipe tidak lagi ada di sini, dan variabelnya adalah kumpulan dari nilai tipe yang disebutkan. Operator penugasan ":=" dapat diterapkan ke variabel dari jenis yang dimaksud

Sistem Soln:= Merkuri;

Urutan nilai dari jenis yang disebutkan diberi nomor secara otomatis, mulai dari nol:

Planeta = (Merkurius, Venera, Bumi, Mars);

Dalam contoh ini Merkurius adalah 0, Venera adalah 1, Bumi adalah 2, Mars adalah 3.

Tipe data interval pascal:

Rentang nilai yang memiliki tipe ordinal apa pun didefinisikan sebagai tipe data interval. Segmen diatur dalam rentang dari nilai konstanta minimum hingga maksimum, yang dipisahkan satu sama lain oleh titik dua "..". Konstanta dapat berupa bilangan bulat, karakter, boolean, atau konstanta enumerasi. Tipe dasar adalah tipe skalar di mana segmen ditentukan.