Kiểu dữ liệu số trong pascal. Các kiểu dữ liệu trong Pascal (biến, hằng), kiểu và mô tả của chúng

Trong Pascal các biến được đặc trưng bởi kiểu... Kiểu là một thuộc tính của một biến, theo đó một biến có thể nhận nhiều giá trị khác nhau được cho phép bởi kiểu này và tham gia vào nhiều hoạt động được phép trên một kiểu nhất định.

Một kiểu xác định tập hợp các giá trị hợp lệ mà một biến của một kiểu đã cho sẽ nhận. Nó cũng xác định tập hợp các hoạt động được phép từ một biến kiểu này và xác định sự biểu diễn của dữ liệu trong RAM của máy tính.

Ví dụ:

n: số nguyên;

Pascal là một ngôn ngữ tĩnh, từ đó kiểu của một biến được xác định trong quá trình mô tả và không thể thay đổi được. Ngôn ngữ Pascal có một hệ thống kiểu được phát triển - tất cả dữ liệu phải thuộc về kiểu dữ liệu đã biết trước đó (kiểu chuẩn được tạo ra trong quá trình phát triển ngôn ngữ hoặc kiểu do người dùng định nghĩa được lập trình viên xác định). Lập trình viên có thể tạo các kiểu của riêng mình với cấu trúc phức tạp tùy ý dựa trên các kiểu chuẩn, hoặc kiểu đã được người dùng xác định. Số lượng các loại được tạo là không giới hạn. Các kiểu do người dùng định nghĩa trong chương trình được khai báo trong phần TYPE theo định dạng:

[tên] = [loại]

Hệ thống các loại tiêu chuẩn có cấu trúc phân nhánh, phân cấp.

Chính trong hệ thống phân cấp là loại đơn giản... Các kiểu này có mặt trong hầu hết các ngôn ngữ lập trình và được gọi là đơn giản, nhưng trong Pascal chúng có cấu trúc phức tạp hơn.

Các loại có cấu trúcđược xây dựng theo quy tắc nhất định từ các loại đơn giản.

Con trỏđược hình thành từ các kiểu đơn giản và được sử dụng trong các chương trình để thiết lập địa chỉ.

Các loại thủ tục mới đối với Turbo Pascal và chúng cho phép các chương trình con được coi như các biến.

Các đối tượng cũng mới và chúng được thiết kế để sử dụng ngôn ngữ này như một ngôn ngữ hướng đối tượng.

Có 5 kiểu kiểu số nguyên trong Pascal. Mỗi trong số chúng đặc trưng cho phạm vi giá trị được chấp nhận và không gian bộ nhớ bị chiếm dụng của chúng.

Khi sử dụng số nguyên, bạn nên được hướng dẫn bằng cách lồng các kiểu, tức là các loại có phạm vi nhỏ hơn có thể được lồng trong các loại có phạm vi lớn hơn. Kiểu Byte có thể được lồng vào tất cả các kiểu dài 2 và 4 byte. Đồng thời, kiểu Short Int, chiếm 1 byte, không thể được lồng vào kiểu Word, vì nó không có giá trị âm.

Có 5 loại thực:

Các kiểu số nguyên được biểu diễn hoàn toàn chính xác trong máy tính. Không giống như kiểu số nguyên, giá trị của kiểu thực chỉ xác định một số tùy ý với một số độ chính xác hữu hạn, tùy thuộc vào định dạng của số. Số thực được biểu diễn trong máy tính với dấu phẩy động hoặc cố định.

2358.8395

0.23588395*10 4

0,23588395 * E 4

Một vị trí đặc biệt trong Pascal được chiếm bởi kiểu Comp, thực tế nó là một số nguyên có dấu lớn. Loại này tương thích với tất cả các loại thực và có thể được sử dụng cho các số nguyên lớn. Khi biểu diễn các số thực bằng dấu phẩy động, dấu thập phân luôn được ngụ ý trước phần định trị bên trái hoặc phần định trị cao, nhưng khi tác động với một số, nó được dịch chuyển sang trái hoặc phải.

Các loại thông thường

Loại thông thường kết hợp một số loại đơn giản. Bao gồm các:

  • tất cả các kiểu số nguyên;
  • loại ký tự;
  • kiểu boolean;
  • loại phạm vi;
  • kiểu liệt kê.

Các đặc điểm chung cho kiểu thứ tự là: mỗi kiểu có một số hữu hạn các giá trị có thể có; giá trị của các loại này có thể được sắp xếp theo một cách nhất định và một số nhất định có thể được liên kết với mỗi số, đó là một số thứ tự; các giá trị liền kề của các loại thứ tự khác nhau.

Hàm ODD (x) có thể được áp dụng cho các giá trị của kiểu thứ tự, hàm này trả về số thứ tự của đối số x.

Hàm PRED (x) - Trả về giá trị trước đó của kiểu thứ tự. PRED (A) = 5.

Hàm SUCC (x) - Trả về giá trị tiếp theo của kiểu thứ tự. SUCC (A) = 5.

Loại ký tự

Giá trị kiểu ký tự là 256 ký tự từ tập hợp được cho phép bởi bảng mã của máy tính đang được sử dụng. Khu vực bắt đầu của tập hợp này, tức là phạm vi từ 0 đến 127, tương ứng với tập hợp mã ASCII, nơi các ký tự bảng chữ cái, số Ả Rập và các ký tự đặc biệt được tải. Các ký tự vùng bắt đầu luôn hiện diện trên bàn phím PC. Khu vực cao cấp được gọi là thay thế, nó chứa các bảng chữ cái quốc gia và các ký tự đặc biệt khác nhau, và các ký tự đồ họa giả không tương ứng với mã ASCII.

Giá trị kiểu ký tự chiếm một byte trong RAM. Trong chương trình, giá trị được đặt trong dấu nháy đơn. Ngoài ra, các giá trị có thể được đặt dưới dạng mã ASCII của nó. Trong trường hợp này, dấu # phải được đặt trước số có mã ký tự.

C: = 'A'

Kiểu boolean

Có hai giá trị Boolean: True và False. Các biến loại này được chỉ định bằng từ dịch vụ BOOLEAN. Giá trị boolean chiếm một byte trong RAM. Giá trị True và False tương ứng với các giá trị số 1 và 0.

Loại phạm vi

Có một tập hợp con của kiểu cơ sở của nó, có thể là bất kỳ kiểu thứ tự nào. Loại phạm vi được xác định bởi các ranh giới trong loại cơ sở.

[giá trị tối thiểu]… [giá trị tối đa]

Loại phạm vi có thể được chỉ định trong phần Loại dưới dạng một loại cụ thể hoặc trực tiếp trong phần Var.

Khi xác định loại phạm vi, bạn phải được hướng dẫn bởi:

  • đường viền bên trái không được vượt quá đường viền bên phải;
  • range-type kế thừa tất cả các thuộc tính của kiểu cơ sở, nhưng với các hạn chế liên quan đến cardinality thấp hơn của nó.

Kiểu liệt kê

Kiểu này thuộc về kiểu thứ tự và được chỉ định bởi một bảng liệt kê các giá trị mà nó có thể liệt kê. Mỗi giá trị được đặt tên bởi một số định danh và nằm trong danh sách được đóng khung trong dấu ngoặc đơn. Một kiểu liệt kê được chỉ định trong Kiểu:

Người dân = (đàn ông, phụ nữ);

Giá trị đầu tiên là 0, giá trị thứ hai là 1, v.v.

Công suất tối đa 65535 giá trị.

Loại chuỗi

Kiểu chuỗi thuộc nhóm kiểu có cấu trúc và bao gồm kiểu cơ sở Char. Kiểu chuỗi không phải là kiểu thứ tự. Nó định nghĩa một tập hợp các chuỗi ký tự có độ dài tùy ý lên đến 255 ký tự.

Trong chương trình, kiểu chuỗi được khai báo bởi từ String. Vì String là kiểu cơ sở nên nó được mô tả bằng ngôn ngữ và một biến kiểu String được khai báo trong Var. Khi khai báo một biến kiểu chuỗi đằng sau một Chuỗi, nên chỉ ra độ dài của chuỗi trong dấu ngoặc vuông. Một số nguyên từ 0 đến 255 được sử dụng để biểu thị.

Fam: Chuỗi;

Việc chỉ định độ dài chuỗi cho phép trình biên dịch phân bổ một số byte được chỉ định trong RAM cho biến. Nếu độ dài chuỗi không được chỉ định, thì trình biên dịch sẽ cấp phát số byte tối đa có thể (255) cho giá trị của biến này.

Cơ quan Liên bang về Giáo dục

trừu tượng

"CÁC LOẠI DỮ LIỆU TRONG PASCAL"

1. Các kiểu dữ liệu

Bất kỳ dữ liệu nào, tức là hằng số, biến, thuộc tính, giá trị hàm hoặc biểu thức được đặc trưng bởi kiểu của chúng. Một kiểu xác định tập hợp các giá trị hợp lệ mà một đối tượng có thể có, cũng như tập hợp các hoạt động hợp lệ có thể áp dụng cho nó. Ngoài ra, kiểu cũng xác định định dạng của biểu diễn bên trong của dữ liệu trong bộ nhớ PC.

Nói chung, ngôn ngữ Object Pascal được đặc trưng bởi cấu trúc rẽ nhánh của các kiểu dữ liệu (Hình 1.1). Ngôn ngữ này cung cấp một cơ chế để tạo các kiểu mới, do đó tổng số kiểu được sử dụng trong chương trình có thể lớn như mong muốn.

Dữ liệu được xử lý trong chương trình được chia thành các biến, hằng số và ký tự:

Hằng số là những dữ liệu có giá trị được đặt trong phần khai báo hằng và không thay đổi trong quá trình thực hiện chương trình.

Biến được khai báo trong phần khai báo biến, nhưng không giống như hằng, chúng nhận các giá trị đã có trong quá trình thực thi chương trình và các giá trị này có thể thay đổi. Hằng số và biến có thể được truy cập bằng tên.

Theo nghĩa đen không có định danh và được biểu diễn trực tiếp trong văn bản chương trình bằng giá trị.

Loại xác định tập hợp các giá trị mà các phần tử dữ liệu có thể nhận và tập các thao tác được phép trên chúng.

Tất cả các loại được mô tả chi tiết trong này và bốn chương tiếp theo.

1.1 Các loại đơn giản

Các loại đơn giản bao gồm thứ tự, thực và ngày-giờ.

Các loại thông thường khác nhau ở chỗ mỗi chúng có một số hữu hạn các giá trị có thể có. Các giá trị này có thể được sắp xếp theo một cách nhất định (do đó là tên của các loại) và do đó, mỗi giá trị có thể được liên kết với một số nguyên - số thứ tự của giá trị.

Các loại thực Nói đúng ra, cũng có một số hữu hạn các giá trị, được xác định bởi định dạng của biểu diễn bên trong của một số thực. Tuy nhiên, số lượng các giá trị có thể có của các kiểu thực quá lớn nên không thể so sánh một số nguyên (số của nó) với mỗi kiểu trong số chúng.

Loại ngày giờ nhằm mục đích lưu trữ ngày và giờ. Trên thực tế, nó sử dụng một định dạng thực cho những mục đích này.

1.1.1 Các loại thông thường

Các kiểu thứ tự bao gồm (xem Hình 1.1) số nguyên, boolean, ký tự, kiểu liệt kê và phạm vi. Hàm Ord (x) có thể áp dụng cho bất kỳ hàm nào trong số chúng, hàm này trả về giá trị thứ tự của biểu thức X.


Lúa gạo. 1.1 - Cấu trúc kiểu dữ liệu

trọn của các loại, hàm ord (x) trả về giá trị x, nghĩa là, Ord (X) = x cho x thuộc bất kỳ trọn kiểu. Áp dụng Thứ tự (x) cho hợp lý , tượng trưng và có thể đếm được loại cho một số nguyên dương trong phạm vi từ 0 đến 1 ( kiểu boolean), từ 0 đến 255 ( tượng trưng), từ 0 đến 65535 ( liệt kê được). Loại phạm vi bảo toàn tất cả các thuộc tính của kiểu thứ tự cơ sở, vì vậy kết quả của việc áp dụng hàm ord (x) cho nó phụ thuộc vào các thuộc tính của kiểu này.

Bạn cũng có thể áp dụng các hàm cho kiểu thứ tự:

pred (x)- trả về giá trị trước đó của kiểu thứ tự (giá trị tương ứng với số thứ tự ord (x) -1, nghĩa là, оrd (рred (х)) = оrd (х) - 1;

succ (x)- trả về giá trị tiếp theo của kiểu thứ tự, tương ứng với số thứ tự ord (x) +1, tức là ord (Succ (x)) = ord (x) + 1.

Ví dụ: nếu chương trình định nghĩa biến

thì hàm PRED (c) sẽ trả về ký tự "4", và hàm SUCC (c) sẽ trả về ký tự "6".

Nếu chúng ta tưởng tượng bất kỳ kiểu thứ tự nào là một tập hợp các giá trị có thứ tự tăng từ trái sang phải và chiếm một đoạn nhất định trên trục số, thì hàm pred (x) không được xác định cho bên trái và succ (x) - cho đầu bên phải của phân đoạn này.

Các loại số nguyên ... Phạm vi các giá trị có thể có cho các kiểu số nguyên phụ thuộc vào biểu diễn bên trong của chúng, có thể là một, hai, bốn hoặc tám byte. Bàn 1.1 liệt kê tên của các kiểu số nguyên, độ dài của biểu diễn bên trong của chúng theo byte và phạm vi giá trị có thể có.

Bảng 1.1 - Các kiểu số nguyên

Tên Chiều dài, byte Phạm vi giá trị
Hồng y 4 0. .. 2 147 483 647
Byte 1 0...255
Ngắn gọn 1 -128...+127
Khói 2 -32 768...+32 767
Từ 2 0...65 535
Số nguyên 4
Longint 4 -2 147 483 648...+2 147 483 647
Int64 8 -9*1018...+9*1018
Từ dài 4 0. . .4 294 967 295

Các loại Từ dàiInt64được giới thiệu lần đầu trong phiên bản 4 và các loại KhóiHồng y không có sẵn trong Delphi 1. Loại số nguyênđối với phiên bản này, nó mất 2 byte và có phạm vi giá trị từ -32768 đến +32767, nghĩa là, nó giống như Khói .

Khi sử dụng các thủ tục và hàm với các tham số nguyên, người ta nên được hướng dẫn bởi "lồng" của các kiểu, tức là. bất cứ nơi nào nó có thể được sử dụng từ, sử dụng được phép Byte(nhưng không phải ngược lại), trong Longint"Đã bao gồm" Khóiđến lượt nó, bao gồm Ngắn gọn .

Danh sách các thủ tục và hàm áp dụng cho kiểu số nguyên được đưa ra trong bảng. 1.2. Các chữ cái b, s, w, i, l lần lượt biểu thị các biểu thức của loại Byte , Shortint, Word, Integer và Longint ,

x là một biểu thức của bất kỳ loại nào trong số này; các chữ vb, vs, vw, vi, vl, vx biểu thị các biến của kiểu tương ứng. Một tham số tùy chọn được chỉ định trong dấu ngoặc vuông.

Bảng 1.2 - Các thủ tục và hàm tiêu chuẩn áp dụng cho các kiểu số nguyên

Bắt mắt Loại kết quả Hoạt động
abs (x) NS Trả về mô-đun x
chr (b) Char Trả về một ký tự theo mã của nó
dec (vx [, i]) - Giảm giá trị của vx theo i và khi không có i - đi 1
inc (vx [, i]) - Tăng giá trị của vx lên i và khi không có i, lên 1
Chào (w) Byte Trả về cung bậc cao của đối số
Xin chào (tôi) Cũng Trả về byte thứ ba
Lo (i) Trả về byte quan trọng nhất của đối số
Thấp) Cũng
lẻ (l) Boolean Trả về True nếu đối số là số lẻ
Ngẫu nhiên (w) Giống như tham số Trả về một số giả ngẫu nhiên được phân phối đều trong phạm vi 0 ... (w-l)
sqr (x) NS Trả về bình phương của đối số
hoán đổi (i) Số nguyên Hoán đổi các byte trong một từ
hoán đổi (w) Từ Quá

Đối với các phép toán với số nguyên, kiểu kết quả sẽ tương ứng với kiểu của toán hạng và nếu các toán hạng có kiểu số nguyên khác nhau thì kiểu chung, bao gồm cả hai toán hạng. Ví dụ, khi hành động với rút ngắntừ thông thường sẽ là loại số nguyên... Trong cài đặt mặc định, trình biên dịch Delphi không tạo bất kỳ mã nào để kiểm tra xem một giá trị có nằm ngoài phạm vi hay không, điều này có thể dẫn đến nhầm lẫn.

Các kiểu boolean ... Các kiểu boolean bao gồm Boolean, ByteBool, Bool, wordBoolLongBool... Trong Pascal chuẩn, chỉ có kiểu được định nghĩa Boolean, phần còn lại của các kiểu boolean được giới thiệu trong Object Pascal để tương thích với Windows: BooleanByteBool chiếm một byte mỗi BoolWordBool- 2 byte mỗi, LongBool- 4 byte. Giá trị Boolean có thể là một trong các hằng số đã khai báo trước đó là Sai hoặc Đúng.

Vì kiểu boolean là kiểu thứ tự nên nó có thể được sử dụng trong toán tử vòng lặp thuộc kiểu đếm được. Trong Delphi 32 cho BooleanÝ nghĩa

Ord (True) = +1, trong khi đối với các loại khác ( Bool, WordBool Vân vân.)

Ord (True) = -1, vì vậy loại toán tử này nên được sử dụng cẩn thận! Ví dụ, đối với Delphi 6, câu lệnh thực thi showMessage ("---") trong vòng lặp sau sẽ không được thực thi dù chỉ một lần:

for L: = False to True do

Tin chương trình ("-);

Nếu chúng ta thay thế loại tham số vòng lặp L trong ví dụ trước bằng Boolean, vòng lặp sẽ chạy và thông báo sẽ xuất hiện hai lần trên màn hình. [Đối với phiên bản Delphi 1 và 2, ord (True) = + 1 cho bất kỳ kiểu boolean nào.]

Loại ký tự ... Giá trị kiểu ký tự là tập hợp của tất cả các ký tự PC. Mỗi ký tự được gán một số nguyên trong phạm vi 0 ... 255. Số này đóng vai trò là mã cho biểu diễn bên trong của biểu tượng và được trả về bởi hàm ord.

Windows sử dụng mã ANSI để mã hóa (được đặt theo tên của American National Standard Institute - Viện Tiêu chuẩn Hoa Kỳ đã đề xuất mã này). Nửa đầu của các ký tự PC có mã 0 ... 127 tương ứng với bảng 1.3. Nửa sau của các ký tự có mã 128 ... 255 khác nhau đối với các phông chữ khác nhau. Phông chữ tiêu chuẩn của Windows Arial Cyr, Courier New Cyr và Times New Roman để đại diện cho các ký tự Cyrillic (không có chữ cái "ё" và "Ё") sử dụng 64 mã cuối cùng (từ 192 đến 256): "A" ... "Z" là các giá trị được mã hóa 192..223, "a" ... "i" - 224 ... 255. Các ký hiệu "Ё" và "ё" có mã số 168 và 184 tương ứng.

Bảng 1.3 - Mã hóa ký tự theo tiêu chuẩn ANSI

Mã số Biểu tượng Mã số. Biểu tượng Mã số. Biểu tượng Mã số Biểu tượng
0 NUL 32 BL 64 @ 96 "
1 ZON 33 ! 65 MỘT 97 Một
2 STX 34 66 V 98 NS
3 ETX 35 # 67 VỚI 99 với
4 EOT 36 $ 68 NS 100 NS
5 ENQ 37 % 69 E 101 e
6 ACK 38 & 70 NS 102 NS
7 BEL 39 " 71 NS 103 NS
8" BS 40 ( 72 NS 104 NS
9 HT 41 ) 73 tôi 105 tôi
10 LF 42 * 74 NS 106 NS
11 VT 43 + 75 ĐẾN 107 k
12 FF 44 NS 76 L 108 1
13 CR 45 - 77 NS 109 NS
14 VÌ THẾ 46 78 n 110 n
15 SI 47 / 79 0 111 O
16 DEL 48 0 80 NS 112 P
17 DC1 49 1 81 NS 113 NS
18 DC2 50 2 82 NS 114 NS
19 DC3 51 3 83 NS 115 NS
20 DC 4 52 4 84 NS 116 NS
21 NAK 53 5 85 U 117 u
22 SYN 54 6 86 V 118 v
23 ETB 55 7 87 W 119 W
24 CÓ THỂ 56 8 88 NS 120 NS
25 EM 57 9 89 Y 121
26 SUB 58 : 90 Z .122 z
27 thoát 59 ; 91 NS 123 {
28 FS 60 < 92 \ 124 1
29 GS 61 = 93 ] 125 }
30 Rs 62 > 94 L 126 ~
31 CHÚNG TA 63 NS 95 127 NS

Các ký tự có mã 0 ... 31 là mã dịch vụ. Nếu các mã này được sử dụng trong văn bản ký tự của chương trình, chúng được coi là khoảng trắng.

Phổ biến nhất trong toán học kiểu số- đây là trọn số đại diện cho vô số giá trị rời rạc và có giá trị các số đại diện cho một dãy giá trị liên tục không giới hạn.

Mô tả kiểu dữ liệu số (số nguyên) Pascal

Các tập hợp con khác nhau của tập hợp các số nguyên có thể được triển khai trong cùng một ngôn ngữ. Phạm vi các giá trị có thể có cho các kiểu số nguyên phụ thuộc vào cách biểu diễn bên trong của chúng, có thể là một, hai hoặc bốn byte. Ví dụ, Pascal 7.0 sử dụng các kiểu dữ liệu số nguyên sau:

Với toàn bộ kiểu dữ liệu số Pascal, bạn có thể thực hiện các thao tác sau:

  • Môn số học:
    phép cộng (+);
    phép trừ (-);
    phép nhân(*);
    phần còn lại của phép chia (mod);
    lũy thừa;
    cộng một bậc (+);
    trừ một bậc (-).
  • Hoạt động quan hệ:
    quan hệ đẳng thức (=);
    quan hệ bất bình đẳng (<>);
    tỷ lệ nhỏ hơn (<);
    tỷ lệ lớn hơn (>);
    tỷ lệ không ít (> =);
    tỷ lệ không còn nữa (<=).

Khi hành động với kiểu dữ liệu số nguyên kiểu của kết quả sẽ tương ứng với kiểu của toán hạng và nếu các toán hạng có kiểu số nguyên khác nhau, thì kiểu của toán hạng có số lượng lớn nhất (phạm vi giá trị lớn nhất). Tràn kết quả có thể xảy ra không được kiểm soát theo bất kỳ cách nào (nó quan trọng!) mà có thể dẫn đến sai sót.

Cần đặc biệt chú ý đến phép toán chia của kiểu dữ liệu số nguyên. Trong Pascal, cho phép hai phép chia, được ký hiệu tương ứng "/" div... Bạn cần biết rằng kết quả của phép chia "/" không phải là một tổng thể, nhưng số thực(điều này đúng ngay cả khi bạn chia 8 cho 2, tức là 8/2 = 4,0). Phép chia chia là phép chia số nguyên, I E. kiểu kết quả là số nguyên.

Mô tả các kiểu dữ liệu số (hợp lệ) Pascal

Kiểu dữ liệu số thực là một tập hợp con các số thực có thể được biểu diễn dưới dạng gọi là dấu phẩy động với một số chữ số cố định. Với dấu phẩy động, mỗi kiểu dữ liệu số được biểu diễn dưới dạng hai nhóm số. Nhóm số đầu tiên được gọi là phần định trị, nhóm thứ hai - thứ tự. Nói chung, kiểu dữ liệu số dấu phẩy động có thể được biểu diễn như sau: X = (+ | -) MP (+ | -) r, trong đó M là phần định trị của một số; r là bậc của số (r là số nguyên); P là cơ số của hệ thống số. Ví dụ: đối với cơ số thập phân, biểu diễn 2E-1 (ở đây E là cơ số của hệ thống số thập phân) sẽ giống như sau: 2 * 10 -1 = 0.2 và biểu diễn 1.234E5 sẽ tương ứng với: 1.234 * 10 5 = 123400,0.

Pascal sử dụng các kiểu số thực sau đây, chỉ xác định một số tùy ý với độ chính xác hữu hạn, tùy thuộc vào định dạng bên trong của số thực:

Khi mô tả một biến thực kiểu real, một biến 4 byte sẽ được tạo trong bộ nhớ máy tính. Trong trường hợp này, 3 byte sẽ được cung cấp cho phần định trị và một cho thứ tự.

Bạn có thể thực hiện các thao tác sau trên các kiểu dữ liệu số hợp lệ:

  • Môn số học:
    phép cộng (+);
    phép trừ (-);
    phép nhân(*);
    phân công(/);
    lũy thừa;
    cộng một bậc (+);
    trừ một bậc (-).
  • Hoạt động quan hệ:
    quan hệ bất bình đẳng (<>);
    tỷ lệ nhỏ hơn (<);
    tỷ lệ lớn hơn (>);
    tỷ lệ không ít (> =);
    tỷ lệ không còn nữa (<=).

Như bạn có thể thấy, Pascal được đặc trưng bởi một loạt các kiểu thực, nhưng quyền truy cập vào các kiểu dữ liệu số Độc thân, képmở rộng chỉ có thể với các chế độ biên dịch đặc biệt. Các kiểu dữ liệu số này được thiết kế để hỗ trợ phần cứng cho số học dấu phẩy động và để sử dụng hiệu quả, PC phải bao gồm một bộ đồng xử lý toán học.

Một vị trí đặc biệt trong Pascal bị chiếm bởi kiểu dữ liệu số. comp, được coi như một số thực không có phần mũ và phần phân số. Thật, comp Là một số nguyên có dấu "lớn" lưu trữ 19..20 chữ số thập phân có nghĩa. Đồng thời, kiểu dữ liệu số comp trong biểu thức, nó hoàn toàn tương thích với các kiểu thực khác: tất cả các phép toán thực được định nghĩa trên nó, nó có thể được sử dụng như một đối số của các hàm toán học, v.v.

Giới thiệu về Chuyển đổi kiểu dữ liệu Pascal dạng số

Việc chuyển đổi ngầm định (tự động) các kiểu dữ liệu số hầu như không thể xảy ra trong Pascal. Một ngoại lệ chỉ được thực hiện cho loại số nguyênđược phép sử dụng trong các biểu thức như thực... Ví dụ: nếu các biến được mô tả như thế này:

Var X: số nguyên; Y: thực;

Sau đó, nhà điều hành

sẽ đúng về mặt cú pháp, mặc dù có một biểu thức số nguyên ở bên phải dấu gán và một biến thực ở bên trái, trình biên dịch sẽ tự động chuyển đổi các kiểu dữ liệu số. Việc chuyển đổi ngược lại sẽ tự động như thực trong loại số nguyên trong Pascal là không thể. Hãy nhớ có bao nhiêu byte được cấp phát cho các biến kiểu số nguyênthực: cho kiểu dữ liệu số nguyên số nguyên 2 byte bộ nhớ được cấp phát và 6 byte thực. Để chuyển đổi thực v số nguyên có hai chức năng tích hợp: vòng(x) làm tròn số thực x thành số nguyên gần nhất, cắt ngắn(x) cắt bớt số thực bằng cách loại bỏ phần phân số.

KIẾN TRÚC 2

Khái niệm cơ bản về lập trình.

Giới thiệu về Pascal. Loại dữ liệu. Các hoạt động.

Bảng chữ cái ngôn ngữPascal

Bất kỳ ngôn ngữ tự nhiên nào cũng bao gồm các yếu tố như ký hiệu, từ, cụm từ, câu. Ngôn ngữ lập trình cũng có các yếu tố tương tự: ký hiệu, từ, biểu thức (cụm từ), toán tử (câu).

Từ ngữ được hình thành từ một tập hợp các ký hiệu. Biểu thức - đây là những nhóm từ và toán tử - đây là sự kết hợp của các từ và cách diễn đạt. Ký hiệu ngôn ngữ - có những ký hiệu cơ bản (chữ cái) được sử dụng để soạn một số loại văn bản. Vì vậy, tập hợp các ký hiệu này tạo thành bảng chữ cái của ngôn ngữ.

Bảng chữ cái Pascal bao gồm:

1. Các chữ cái viết hoa và viết thường trong bảng chữ cái Latinh, bao gồm các ký tự sau:

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 - chữ hoa;

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 - chữ thường;

2. Chữ số Ả Rập thập phân: 0 1 2 3 4 5 6 7 8 9;

3. chữ số thập lục phân (được xây dựng từ các chữ số thập phân và các chữ cái từ A đến F);

4. 32 chữ hoa và chữ thường của bảng chữ cái tiếng Nga;

5. ký tự đặc biệt:

Sự kết hợp của các ký tự đặc biệt có thể tạo thành các ký tự ghép:

: = sự phân công;

< >không công bằng;

> = lớn hơn hoặc bằng;

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

Phạm vi giá trị;

(* *) hoặc () - bình luận.

Cấu trúc của chương trình Pascal

Để trình biên dịch Pascal hiểu chính xác những hành động được mong đợi từ nó, chương trình của bạn phải được định dạng hoàn toàn theo cú pháp (quy tắc xây dựng chương trình) của ngôn ngữ này.

Bất kỳ chương trình Pascal nào cũng có thể bao gồm các khối sau (ở đây và bên dưới, dấu ngoặc vuông đánh dấu các phần tùy chọn):

chương trình<имя_программы>;

[sử dụng<имена_подключаемых_модулей>;]

[nhãn mác<список_меток>;]

[hăng sô<имя_константы> = <значение_константы>;]

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

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

[thủ tục<имя_процедуры> <описание_процедуры>;]

[hàm số<имя_функции> <описание_функции>;]

begin (phần đầu của phần chính của chương trình)

<операторы>

kết thúc. (* cuối phần nội dung chính của chương trình *)

Các phiên bản sau của trình biên dịch Pascal không còn yêu cầu chỉ định tên của chương trình, tức là chương trình dòng<имя_программы>; có thể được bỏ qua. Nhưng điều này chỉ có thể thực hiện được nếu toàn bộ chương trình được chứa trong một tệp mô-đun. Nếu chương trình bao gồm một số phần - mô-đun độc lập, thì mỗi phần trong số chúng phải có một tiêu đề (chương trình hoặc đơn vị).

Bất kỳ phần nào trong số các phần tùy chọn được liệt kê có thể xuất hiện nhiều lần trong văn bản chương trình, trình tự chung của chúng cũng có thể thay đổi, nhưng quy tắc chính của ngôn ngữ Pascal phải luôn được tuân thủ: trước khi một đối tượng được sử dụng, nó phải được khai báo và mô tả.

Các trình biên dịch Pascal không phân biệt chữ thường và chữ hoa, và bỏ qua các ký tự khoảng trắng, vì vậy văn bản chương trình có thể được cấu trúc sao cho thuận tiện nhất khi đọc và gỡ lỗi.

Chỉ thị trình biên dịch

Một dòng bắt đầu bằng các ký hiệu ($ không phải là một chú thích, mà là một chỉ thị của trình biên dịch - một lệnh đặc biệt mà quá trình biên dịch và thực thi một chương trình phụ thuộc vào đó. Chúng tôi sẽ xem xét các chỉ thị trong các phần mà chúng đề cập đến "theo ý nghĩa".

Ví dụ: dòng ($ I-, Q +) tắt xác thực I / O, nhưng bật kiểm soát tràn tính toán.

Định danh

Tên được đặt cho các đối tượng chương trình (hằng số, kiểu, biến, hàm và thủ tục và toàn bộ chương trình nói chung) được gọi là định danh. Chúng chỉ có thể bao gồm số, chữ cái Latinh và dấu "_" (gạch dưới). Tuy nhiên, một chữ số không thể bắt đầu tên. Số nhận dạng có thể có độ dài bất kỳ, nhưng nếu hai tên có 63 ký tự đầu tiên giống nhau, thì những tên đó được coi là giống hệt nhau.

Bạn có thể đặt cho các đối tượng chương trình bất kỳ tên nào, nhưng bạn cần chúng phải khác với các từ dành riêng được sử dụng bởi ngôn ngữ Pascal, vì trình biên dịch sẽ không chấp nhận các biến có tên "ngoại lai".

Dưới đây là danh sách các từ dành riêng phổ biến nhất:

triển khai mảng shl

chuỗi giao diện trường hợp

sau đó nhãn const

con trỏ tệp sử dụng

thủ tục xa var

cho chương trình trong khi

chuyển tiếp hồ sơ với

hàm lặp lại xor

Các biến và kiểu dữ liệu

Biến là một đối tượng chương trình có giá trị có thể thay đổi trong khi chương trình đang chạy.

Kiểu dữ liệu là một đặc tính của phạm vi giá trị mà các biến của kiểu dữ liệu này có thể nhận.

Tất cả các biến được sử dụng trong chương trình phải được mô tả trong phần var đặc biệt theo mẫu sau:

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

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

Ngôn ngữ Pascal có một tập hợp lớn các kiểu dữ liệu khác nhau, nhưng bây giờ chúng tôi sẽ chỉ cho biết một số kiểu dữ liệu đó. Chúng ta sẽ nói thêm về tất cả các loại dữ liệu.

Hằng số

Hằng số là một đối tượng có giá trị được biết trước ngay cả trước khi chương trình bắt đầu chạy.

Hằng số cần thiết cho việc thiết kế các chương trình trực quan, không thể thay thế khi sử dụng các giá trị lặp đi lặp lại nhiều lần trong văn bản chương trình, chúng rất tiện lợi nếu cần thay đổi các giá trị này cùng một lúc trong toàn bộ chương trình.

Có ba loại hằng trong Pascal:

Hằng số không tên (số và số, ký hiệu và chuỗi, bộ);

Các hằng số không định kiểu được đặt tên;

Các hằng số đã nhập được đặt tên.

Hằng số không được đặt tên

Các hằng số không có tên không có tên và do đó không cần phải mô tả.

Loại của một hằng số không được đặt tên được xác định tự động, theo mặc định:

Bất kỳ dãy số nào (có thể đứng trước dấu "-" hoặc "+" hoặc bị ngắt bởi một dấu chấm) được trình biên dịch coi là một hằng số không có tên - một số (số nguyên hoặc thực);

Bất kỳ chuỗi ký tự nào được đặt trong dấu nháy đơn được coi như một hằng số không có tên - một chuỗi;

Bất kỳ chuỗi số nguyên hoặc ký tự nào được phân tách bằng dấu phẩy, được bao quanh bởi dấu ngoặc vuông, được coi là một hằng số không có tên - một tập hợp.

Ngoài ra, có hai hằng số đặc biệt true và false, có liên quan đến kiểu dữ liệu boolean.

Ví dụ về việc sử dụng các hằng số không có tên bao gồm các toán tử sau:

real2: = 12.075 + x;

string4: = "abc" + string44;

set5: = * set55;

boolean6: = true;

Hằng số không định dạng

Các hằng số được đặt tên, như tên gọi của chúng, phải có tên. Do đó, những tên này phải được báo cáo cho trình biên dịch, nghĩa là, được mô tả trong một phần đặc biệt const.

Nếu bạn không chỉ định kiểu của một hằng số, thì bằng cách xuất hiện của nó, trình biên dịch sẽ tự xác định kiểu (cơ sở) nào mà nó thuộc về. Bất kỳ hằng số nào đã được mô tả đều có thể được sử dụng khi khai báo các hằng số, biến và kiểu dữ liệu khác. Dưới đây là một số ví dụ về việc mô tả các hằng số có tên không định kiểu:

Hằng số đã nhập

Các hằng được đặt tên được nhập là các biến (!) Với giá trị ban đầu đã được biết trước khi chương trình bắt đầu. Do đó, thứ nhất, các hằng được định kiểu không thể được sử dụng để định nghĩa các hằng, kiểu dữ liệu và biến khác, và thứ hai, giá trị của chúng có thể được thay đổi trong khi chương trình đang chạy.

Mô tả các hằng số đã nhập theo mẫu sau:

hăng sô<имя_константы> : <тип_константы> = <начальное_значение>;

Các ví dụ dưới đây cho thấy cách thực hiện việc này:

const n: số nguyên = -10;

b: boolean = true;

Chúng tôi sẽ cung cấp các ví dụ về các hằng được định kiểu khác khi chúng tôi nghiên cứu các kiểu dữ liệu tương ứng.

Các kiểu dữ liệu Pascal

Các trình biên dịch Pascal yêu cầu cung cấp thông tin về dung lượng bộ nhớ cần thiết để chạy chương trình trước khi chạy chương trình. Để thực hiện, trong phần mô tả biến (var), bạn cần liệt kê tất cả các biến được sử dụng trong chương trình. Ngoài ra, bạn cũng cần cho trình biên dịch biết mỗi biến này sẽ chiếm bao nhiêu bộ nhớ.

Tất cả điều này có thể được truyền đạt đến chương trình bằng cách chỉ định kiểu của biến tương lai. Có thông tin về kiểu của một biến, trình biên dịch "hiểu" có bao nhiêu byte phải được cấp phát cho nó, những hành động nào có thể được thực hiện với nó và nó có thể tham gia vào những cấu trúc nào.

Để thuận tiện cho người lập trình, có nhiều kiểu dữ liệu chuẩn trong ngôn ngữ Pascal, cộng với khả năng tạo kiểu dữ liệu mới dựa trên những kiểu dữ liệu hiện có (chuẩn hoặc lại do người lập trình tự định nghĩa), được gọi là kiểu xây dựng.

Sự phân chia thành các kiểu dữ liệu cơ bản và xây dựng trong Pascal được hiển thị trong bảng:

Kiểu dữ liệu thứ tự (rời rạc)

Các kiểu dữ liệu địa chỉ

Các kiểu dữ liệu có cấu trúc

Các kiểu dữ liệu số học

Các kiểu dữ liệu cơ bản

Hợp lý

Tính cách

Thực

Atypisi

con trỏ được lập chỉ mục

Các loại cấu tạo

Có thể đếm được

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

Con trỏ đã nhập

Mảng

Chuỗi chuỗi

Ghi lại kỷ lục

Thủ tục

Sự vật

Khoảng thời gian (phạm vi)

Các kiểu dữ liệu do lập trình viên xây dựng

Các kiểu dữ liệu thông thường

Trong số các kiểu dữ liệu cơ bản, kiểu thứ tự nổi bật. Tên này có thể được giải thích theo hai cách:

1. Mỗi phần tử của kiểu thứ tự có thể được liên kết với một số (thứ tự) duy nhất. Các giá trị được đánh số bắt đầu từ số không. Ngoại lệ là các kiểu dữ liệu shortint, integer và longint. Đánh số của chúng trùng với giá trị của các phần tử.

2. Ngoài ra, trên các phần tử của bất kỳ kiểu thứ tự nào, một thứ tự được xác định (theo nghĩa toán học của từ này), thứ tự phụ thuộc trực tiếp vào việc đánh số. Do đó, đối với bất kỳ hai phần tử nào của một kiểu thứ tự, người ta có thể nói chắc chắn cái nào trong số chúng nhỏ hơn và cái nào lớn hơn.

Quy trình tiêu chuẩn Xử lý các loại dữ liệu thông thường

Chỉ đối với các giá trị của kiểu thứ tự, các hàm và thủ tục sau được xác định:

1. Hàm ord (x) trả về số thứ tự của giá trị của biến x (liên quan đến kiểu mà biến x thuộc về).

2. Hàm pred (x) trả về giá trị đứng trước x (không áp dụng cho phần tử đầu tiên của kiểu).

3. Hàm succ (x) trả về giá trị theo sau x (không áp dụng cho phần tử cuối cùng của kiểu).

4. Thủ tục inc (x) trả về giá trị sau x (đối với kiểu dữ liệu số học, giá trị này tương đương với toán tử x: = x + 1).

5. Thủ tục inc (x, k) trả về giá trị thứ k theo sau x (đối với kiểu dữ liệu số học, giá trị này tương đương với toán tử x: = x + k).

6. Thủ tục dec (x) trả về giá trị đứng trước x (đối với kiểu dữ liệu số học, giá trị này tương đương với toán tử x: = x-1).

7. Thủ tục dec (x, k) trả về giá trị thứ k đứng trước x (đối với kiểu dữ liệu số học, giá trị này tương đương với toán tử x: = x-k).

Thoạt nhìn, có vẻ như kết quả của việc áp dụng thủ tục inc (x) hoàn toàn trùng khớp với kết quả của việc sử dụng hàm succ (x). Tuy nhiên, sự khác biệt giữa chúng xuất hiện ở ranh giới của phạm vi cho phép. Hàm succ (x) không thể áp dụng cho phần tử tối đa của kiểu, nhưng thủ tục inc (x) sẽ không tạo ra bất kỳ lỗi nào, nhưng, hoạt động theo quy tắc cộng máy, sẽ thêm một đơn vị khác vào số phần tử. Tất nhiên, số sẽ vượt ra ngoài phạm vi và do bị cắt bớt, sẽ chuyển thành số có giá trị nhỏ nhất của phạm vi. Nó chỉ ra rằng các thủ tục inc () và dec () cảm nhận bất kỳ kiểu thứ tự nào như thể nó được "đóng trong một vòng": ngay sau giá trị cuối cùng, giá trị đầu tiên lại xuất hiện.

Hãy để chúng tôi giải thích mọi thứ đã được nói với một ví dụ. Đối với kiểu dữ liệu

gõ mười sáu = 0..15;

cố gắng thêm 1 đến 15 sẽ tạo ra kết quả sau:

Đơn vị ban đầu sẽ được cắt bớt, và do đó inc (15) = 0.

Một tình huống tương tự ở giới hạn dưới của phạm vi cho phép của kiểu dữ liệu thứ tự tùy ý được quan sát đối với thủ tục dec (x) và hàm trước (x):

dec (min_element) = max_element

Các kiểu dữ liệu liên quan đến thứ tự

1. Kiểu boolean boolean có hai giá trị: false và true, và các giá trị bằng nhau sau đây là của chúng:

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

pred (true) = false, succ (false) = true,

inc (true) = false, inc (false) = true,

dec (true) = false, dec (false) = true.

2. Kiểu ký tự char chứa 256 ký tự của bảng ASCII mở rộng (ví dụ: "a", "b", "i", "7", "#"). Số ký tự được trả về bởi ord () giống với số ký tự trong bảng ASCII.

3. Các kiểu dữ liệu số nguyên được tóm tắt trong một bảng:

Loại dữ liệu

Số byte

Phạm vi

2147483648..2147483647

4. Các kiểu dữ liệu được liệt kê được xác định trong phần kiểu bằng cách liệt kê rõ ràng các phần tử của chúng. Ví dụ:

gõ tuần = (sun, mon, tue, wed, thu, fri, sat)

Nhớ lại rằng đối với kiểu dữ liệu này:

inc (sat) = sun, dec (sun) = sat.

5. Các kiểu dữ liệu khoảng thời gian chỉ được xác định bởi các ranh giới của phạm vi của chúng. Ví dụ:

gõ tháng = 1..12;

budni = mon..fri;

6. Các kiểu dữ liệu do người lập trình xây dựng, được mô tả trong phần kiểu theo mẫu sau:

kiểu<имя_типа> = <описание_типа>;

Ví dụ:

gõ lat_bukvy = "a" .. "z", "A" .. "Z";

Các kiểu dữ liệu cơ bản là tiêu chuẩn, vì vậy không cần mô tả chúng trong phần kiểu. Tuy nhiên, nếu bạn muốn, bạn cũng có thể làm điều này, ví dụ, bằng cách đặt tên ngắn cho các định nghĩa dài. Giả sử bằng cách giới thiệu một kiểu dữ liệu mới

kiểu int = số nguyên;

bạn có thể rút ngắn văn bản của chương trình một chút.

Các kiểu dữ liệu thực

Nhớ lại rằng các kiểu dữ liệu này là số học, nhưng không phải thứ tự.

Loại dữ liệu

Số byte

Phạm vi (giá trị tuyệt đối)

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

Các kiểu dữ liệu đã xây dựng

Những loại dữ liệu này (cùng với các phép toán được định nghĩa cho chúng), chúng tôi sẽ xem xét thêm trong suốt một số bài giảng.

Hoạt động và biểu thức

Các phép tính toán học

Hãy nói về các hoạt động - các hành động tiêu chuẩn được phép đối với các biến của một hoặc một kiểu dữ liệu cơ bản khác. Cơ sở sẽ được hình thành bởi các phép toán số học và logic.

Lưu ý: Tất cả các phép toán sau (ngoại trừ "-" và không phải một ngôi) yêu cầu hai toán hạng.

1. Phép toán logic (và - logic AND, hoặc - logic OR, không - logic NOT, xor - unique OR) chỉ áp dụng cho các giá trị kiểu boolean. Chúng cũng dẫn đến các giá trị kiểu boolean. Dưới đây là bảng giá trị cho các hoạt động này:

đúng sai đúng

sai sai sai

đúng sai sai

2. Phép toán so sánh (=,<>, >, <, <=, >=) có thể áp dụng cho tất cả các loại cơ sở. Kết quả của chúng cũng là giá trị boolean.

3. Các phép toán của số học số nguyên chỉ áp dụng cho kiểu số nguyên. Kết quả của chúng là một số nguyên, kiểu của nó phụ thuộc vào kiểu của toán hạng.

a div b - toàn bộ phép chia a cho b (có lẽ không cần phải nhắc rằng phép chia cho 0 bị cấm, vì vậy trong những trường hợp như vậy, phép toán đưa ra lỗi). Kết quả sẽ là kiểu dữ liệu chung cho các kiểu mà các toán hạng thuộc về.

Ví dụ, (rút gọn div byte = số nguyên). Điều này có thể được giải thích như sau: số nguyên là kiểu tối thiểu, trong đó cả byte và shortint đều là tập con.

a mod b - lấy phần dư khi chia hoàn toàn a cho b. Loại kết quả, như trong trường hợp trước, được xác định bởi các loại toán hạng và 0 là giá trị bị cấm đối với b. Không giống như mod hoạt động toán học, luôn cho kết quả là một số không âm, dấu của kết quả của hoạt động mod của lập trình viên được xác định bởi dấu của toán hạng đầu tiên của nó. Như vậy, nếu trong toán học (-2 mod 5) = 3, thì ta có (-2 mod 5) = -2.

a shl k - dịch chuyển giá trị của a với k bit sang trái (điều này tương đương với việc nhân giá trị của biến a với 2k). Kết quả của phép toán sẽ cùng kiểu với (các) toán hạng đầu tiên của nó.

a shr k - dịch chuyển giá trị của a theo k bit sang phải (điều này tương đương với việc chia hoàn toàn giá trị của biến a cho 2k). Kết quả của phép toán sẽ cùng kiểu với (các) toán hạng đầu tiên của nó.

và, hoặc, không, xor là các phép toán số học nhị phân làm việc với các bit của biểu diễn nhị phân của số nguyên, theo các quy tắc tương tự như các phép toán logic tương ứng của chúng.

4. Các phép toán số học tổng quát (+, -, *, /) có thể áp dụng cho mọi loại số học. Kết quả của chúng thuộc về kiểu dữ liệu chung cho cả hai toán hạng (ngoại lệ duy nhất là hoạt động của phép chia phân số /, kết quả của nó luôn thuộc kiểu dữ liệu thực).

Các hoạt động khác

Có những hoạt động khác cụ thể cho các giá trị của một số kiểu dữ liệu Pascal tiêu chuẩn. Chúng tôi sẽ xem xét các hoạt động này trong các phần tương ứng:

#, in, +, * ,: xem bài giảng 5 “Các ký hiệu. Dây. Bộ "

@, ^: xem bài giảng 7, "Địa chỉ và con trỏ"

Các hàm số học tiêu chuẩn

Các hàm số học tiêu chuẩn cũng liên quan đến các phép toán số học. Chúng tôi cung cấp danh sách chúng kèm theo mô tả ngắn gọn trong bảng.

Hàm số

Sự miêu tả

Loại đối số

Loại kết quả

Giá trị tuyệt đối (môđun) của một số

Môn số học

Khớp với loại đối số

Tiếp tuyến của cung (tính bằng radian)

Môn số học

Thực

Cosine (tính bằng radian)

Môn số học

Thực

Nhà triển lãm (ví dụ)

Môn số học

Thực

Lấy phần phân số của một số

Môn số học

Thực

Lấy một phần nguyên của một số

Môn số học

Thực

Lôgarit tự nhiên (cơ số e)

Môn số học

Thực

Kiểm tra số lẻ

Ý nghĩa của con số

Thực

Làm tròn đến số nguyên gần nhất

Môn số học

Làm tròn xuống - đến số nguyên nhỏ hơn gần nhất

Môn số học

Sin (tính bằng radian)

Môn số học

Thực

Bình phương

Môn số học

Thực

Chiết xuất căn bậc hai

Môn số học

Thực

Biểu thức số học

Tất cả các phép toán số học có thể được kết hợp với nhau - tất nhiên, có tính đến các kiểu dữ liệu được phép cho các toán hạng của chúng.

Toán hạng của bất kỳ hoạt động nào có thể là biến, hằng số, lời gọi hàm hoặc biểu thức dựa trên các hoạt động khác. Tất cả cùng nhau được gọi là một biểu thức.

Ví dụ về biểu thức số học:

(NS<0) and (y>0) - một biểu thức có kết quả là kiểu boolean;

z shl abs (k) - toán hạng thứ hai là một lời gọi hàm tiêu chuẩn;

(x mod k) + min (a, b) + trunc (z) - sự kết hợp của các phép toán số học và lời gọi hàm;

lẻ (round (x / abs (x))) là một biểu thức đa cấp.

Thứ tự tính toán

Nếu dấu ngoặc đơn được đặt trong biểu thức, thì các phép tính được thực hiện theo thứ tự: độ sâu lồng của dấu ngoặc đơn càng nhỏ thì phép tính đặt trong đó càng muộn. Nếu không có dấu ngoặc đơn, thì giá trị của các phép toán có mức độ ưu tiên cao hơn sẽ được tính trước, sau đó đến giá trị của các phép toán có mức độ ưu tiên thấp hơn. Một số hoạt động liên tiếp có cùng mức độ ưu tiên được tính theo trình tự "từ trái sang phải".

Bảng 2.1. Mức độ ưu tiên (cho tất cả) của các phép toán Pascal

Kiến thức và hiểu biết về các kiểu dữ liệu là không thể thiếu đối với lập trình.

Trong hướng dẫn này, chúng tôi sẽ giới thiệu cho bạn các kiểu dữ liệu trong ngôn ngữ lập trình Turbo Pascal.

Trong Pascal, bất kỳ đối tượng nào, tức là hằng số, biến, giá trị hàm hoặc biểu thức được đặc trưng bởi kiểu của chúng. Một kiểu xác định tập hợp các giá trị hợp lệ cho một đối tượng, cũng như tập hợp các thao tác áp dụng cho nó. Ngoài ra, kiểu xác định định dạng của biểu diễn dữ liệu nội bộ trong bộ nhớ máy tính. Về kiểu đối tượng, Pascal là một ngôn ngữ tĩnh. Điều này có nghĩa là kiểu của một đối tượng, ví dụ, một biến, được xác định trong quá trình mô tả và không thể thay đổi sau đó.

Cấu trúc của các kiểu dữ liệu trong Pascal:

Các loại ngôn ngữ đơn giản
Các kiểu đơn giản bao gồm kiểu thứ tự, thực, chuỗi và địa chỉ (con trỏ). Tất cả chúng đều xác định loại chỉ có một giá trị duy nhất.

Các loại thông thườngđặc trưng bởi thực tế là mỗi giá trị trong số chúng có một số hữu hạn các giá trị có thể có, trong đó một thứ tự tuyến tính được thiết lập. Mỗi giá trị có thể được liên kết với một số nguyên - số thứ tự của nó.

Các loại số nguyên- biểu thị tập hợp các số nguyên trong các phạm vi khác nhau. Có năm kiểu số nguyên, khác nhau về phạm vi giá trị hợp lệ và kích thước bộ nhớ được sử dụng. Các kiểu số nguyên được biểu thị bằng các định danh: Byte, ShortInt, Word, Integer, LongInt; đặc điểm của chúng được thể hiện trong bảng sau.

Giá trị của kiểu số nguyên được viết trong chương trình theo cách thông thường:
123 4 -3 +345 -699
Không cho phép sự hiện diện của dấu thập phân trong một số nguyên. Sẽ là một sai lầm khi viết một số nguyên như thế này:
123.0
Ngoài ký hiệu thập phân thông thường, nó được phép viết số nguyên ở định dạng thập lục phân bằng cách sử dụng tiền tố $, ví dụ:
$ 01AF $ FF $ 1A $ F0A1B
Trường hợp chữ A, B, ..., F không thành vấn đề.

Hoạt động hợp lệ:

  • - phân công;
  • - tất cả các cấp số cộng: +, -, *, /, div, mod (đối với phép chia thông thường [/], kết quả là thực!);
  • - so sánh<, >, >=, <=, <>, =.
Kiểu boolean- chỉ gồm hai giá trị: False (sai) và True (đúng). Các từ False và True được định nghĩa trong ngôn ngữ và trên thực tế, là các hằng số boolean. Trường hợp của các chữ cái trong văn bản của họ là không đáng kể: FALSE = false. Các giá trị kiểu này là kết quả của việc đánh giá các biểu thức điều kiện và logic và tham gia vào tất cả các loại câu lệnh điều kiện trong ngôn ngữ.
Hoạt động hợp lệ:
  • - phân công;
  • - so sánh:<, >, >=, <=, <>, =;
  • - các phép toán logic: NOT, OR, AND, XOR
Loại ký tự (Char) là kiểu dữ liệu gồm một ký tự (dấu, chữ cái, mã). Giá trị Char có thể là bất kỳ ký tự nào từ bộ ASCII. Nếu một biểu tượng có biểu diễn đồ họa, thì trong chương trình, nó được viết trong dấu ngoặc kép (dấu nháy đơn), ví dụ:
"f" "s" "." "*" "" - (không gian)
Để đại diện cho chính dấu nháy đơn, hình ảnh của nó được nhân đôi: "" "".
Nếu ký tự không có biểu diễn đồ họa, ví dụ: tab hoặc ký tự xuống dòng, thì bạn có thể sử dụng hình thức tương đương để viết giá trị ký tự, bao gồm tiền tố # và mã ASCII của ký tự:
#9 #32 #13
Hoạt động hợp lệ:
  • - phân công;
  • - so sánh:<, >, >=, <=, <>, =. Ký tự lớn hơn là ký tự có số ASCII cao hơn.
Loại chuỗi (Chuỗi, Chuỗi [n])- kiểu dữ liệu này xác định chuỗi ký tự - chuỗi. Tham số n xác định số ký tự tối đa trong chuỗi. Nếu không được chỉ định, n = 255 được giả sử. Giá trị của kiểu "string" trong chương trình được viết dưới dạng một chuỗi các ký tự được đặt trong dấu nháy đơn (dấu nháy đơn), chẳng hạn
"Đây là một chuỗi"
"1234" cũng là một chuỗi, không phải số
"" - dòng trống

Hoạt động hợp lệ:
  • - phân công;
  • - phép cộng (nối, ghép); ví dụ, S: = "Winter" + "" + "đã đến!";
  • - so sánh:<, >, >=, <=, <>, =. Các chuỗi được coi là bằng nhau nếu chúng có cùng độ dài và tương đương với từng ký tự.
Các loại thực- Biểu thị một tập hợp các số thực trong các dãy khác nhau. Có năm loại thực, khác nhau về phạm vi giá trị chấp nhận được và kích thước bộ nhớ được sử dụng. Các loại thực được biểu thị bằng các số nhận dạng: Real, Single, Double, Extended, Comp; đặc điểm của chúng được thể hiện trong bảng sau.

Loại tổng hợp mặc dù nó thuộc về các kiểu thực, trên thực tế nó là một số nguyên với một phạm vi giá trị rất lớn.
Giá trị của kiểu thực có thể được viết trong chương trình theo một số cách:
1.456 0.000134 -120.0 65432
+345 0 -45 127E + 12
-1,5E-5 -1,6E + 12 5E4 0,002E-6

Sẽ là một sai lầm khi viết một số thực như thế này:
0,5 (đúng 0,5)
12. (12.0 hoặc 12 đều đúng)

Một số thực ở dạng dấu phẩy động (dạng số mũ) được viết dưới dạng một cặp
<мантисса>E<порядок>
Việc chỉ định này được hiểu là "phần định trị nhân với mười trong lũy ​​thừa bằng thứ tự." Ví dụ,
-1,6E + 12 tương ứng với -1,61012

Hoạt động hợp lệ:
- phân công;
- tất cả các số học: +, -, *, /;
- so sánh:<, >, >=, <=, <>, =.

Khi so sánh các số thực, cần nhớ rằng do sự biểu diễn của chúng trong bộ nhớ máy tính không chính xác (theo quan điểm chắc chắn của việc làm tròn), nên tránh các nỗ lực xác định sự bằng nhau chặt chẽ của hai giá trị thực. Có khả năng sự bình đẳng sẽ trở thành sai, ngay cả khi trên thực tế không phải vậy.

Phạm vi hoặc (loại bị hạn chế) không phải là loại ngôn ngữ được xác định trước (chẳng hạn như Số nguyên hoặc Giá trị) và do đó không có bất kỳ số nhận dạng nào được liên kết với nó. Loại này do người dùng nhập. Sử dụng nó, chúng ta có thể xác định một kiểu mới sẽ chỉ chứa các giá trị từ một phạm vi con giới hạn của một số kiểu cơ bản. Kiểu cơ sở chỉ có thể là kiểu số nguyên, kiểu Char (ký tự) và bất kỳ kiểu liệt kê nào do người lập trình giới thiệu.

Để giới thiệu một kiểu mới - một dải ô - bạn cần chỉ định tên của kiểu đầu vào và ranh giới dải ô trong khối mô tả kiểu TYPE thông qua ký hiệu dải ô đặc biệt ".." (hai dấu chấm liên tiếp):
KIỂU
Kỷ = 1..21; (phạm vi phụ của loại quay số)
CapsLetters = "A" .. "Z"; (dải con của loại Char)

Các loại ngôn ngữ có cấu trúc

Các kiểu có cấu trúc bao gồm: mảng, bản ghi, tập hợp, tệp,… Tất cả chúng đều xác định kiểu (hoặc các kiểu) của một số cấu trúc dữ liệu.

Mảng- một cấu trúc có thứ tự của cùng một loại dữ liệu, lưu trữ chúng một cách tuần tự. Mảng nhất thiết phải có các kích thước xác định có bao nhiêu phần tử được lưu trữ trong cấu trúc. Bất kỳ phần tử nào trong mảng đều có thể đạt được bằng chỉ mục của nó.

Kiểu mảng được xác định bởi cấu trúc:
Array [range] của ElementType;

Phạm vi trong dấu ngoặc vuông cho biết giá trị chỉ số của phần tử đầu tiên và cuối cùng trong cấu trúc. Ví dụ về khai báo kiểu và biến:

TYPE Vector = mảng Real; VAR V1: Vectơ; V2: mảng Byte;
Ở đây V1 được định nghĩa bằng cách sử dụng kiểu Vector được mô tả ở trên; kiểu của biến V2 được xây dựng trực tiếp ở giai đoạn mô tả của nó.

Là kiểu của các phần tử mảng, bạn cũng có thể chỉ định một mảng, từ đó hình thành các cấu trúc đa chiều. Ví dụ, một mô tả của một cấu trúc hai chiều (ma trận) sẽ trông như thế này:
VAR M1: mảng của mảng Byte; Tương tự có thể được viết gọn hơn nhiều: VAR M2: array of Byte;
Ở đây các mảng M1 và M2 có cấu trúc hoàn toàn giống nhau - một ma trận vuông 3x3.

Một phần tử mảng được truy cập bằng cách chỉ định chỉ mục của nó, ví dụ:

Writeln (V1); (hiển thị phần tử đầu tiên của mảng V1) readln (M2); (đầu vào của phần tử thứ ba của hàng thứ hai của ma trận M2)
Điều này hoàn thành bài học về kiểu dữ liệu, văn bản đã được sao chép và dán gần như hoàn toàn (liên kết sẽ ở bên dưới), vì Tôi thấy không có lý do gì để nói về tài liệu này bằng lời của tôi. Nếu sự khác biệt giữa các kiểu dữ liệu thậm chí còn rõ ràng một chút, thì điều này đã tốt.