Các kiểu dữ liệu đơn giản trong Pascal Các kiểu dữ liệu Pascal

Bài học trình bày các kiểu dữ liệu tiêu chuẩn chính trong Pascal, khái niệm về biến và hằng; giải thích cách làm việc với các phép tính số học

Pascal là một ngôn ngữ lập trình đánh máy.Điều này có nghĩa là các biến lưu trữ dữ liệu thuộc một kiểu dữ liệu cụ thể. Những thứ kia. Chương trình phải chỉ ra trực tiếp dữ liệu nào có thể được lưu trữ trong một biến cụ thể: dữ liệu văn bản, dữ liệu số, nếu là số thì số nguyên hoặc phân số, v.v. Điều này chủ yếu cần thiết để máy tính “biết” những thao tác nào có thể được thực hiện với các biến này và cách thực hiện chúng một cách chính xác.

Ví dụ, việc bổ sung dữ liệu văn bản, hay như nó được gọi chính xác trong lập trình - nối - là việc hợp nhất các chuỗi thông thường, trong khi việc bổ sung dữ liệu số xảy ra theo chiều bit, ngoài ra, số phân số và số nguyên cũng được thêm vào theo cách khác. Điều tương tự cũng áp dụng cho các hoạt động khác.

Hãy xem xét các kiểu dữ liệu phổ biến nhất trong Pascal.

Các kiểu dữ liệu số nguyên trong Pascal

Kiểu Phạm vi Bộ nhớ cần thiết (byte)
byte 0..255 1
nói ngắn gọn -128..127 1
số nguyên -32768.. 32767 2
từ 0..65535 2
kéo dài -2147483648..2147483647 4

Các bạn cần lưu ý rằng khi viết chương trình bằng Pascal số nguyên(dịch từ tiếng Anh nói chung) được sử dụng phổ biến nhất, vì phạm vi giá trị được yêu cầu nhiều nhất. Nếu cần phạm vi rộng hơn, hãy sử dụng kéo dài(số nguyên dài, dịch từ tiếng Anh là số nguyên dài). Kiểu byte trong Pascal nó được sử dụng khi không cần phải làm việc với các giá trị âm, điều tương tự cũng xảy ra với kiểu từ(chỉ có phạm vi giá trị ở đây lớn hơn nhiều).

Ví dụ về cách mô tả (khai báo) biến trong Pascal:

chương trình a1; var x,y:số nguyên; (kiểu số nguyên) myname:string; (loại chuỗi) bắt đầu x:=1; y:=x+16; tên tôi:="Peter"; writeln("name: ",myname, ", age: ", y) end.

Kết quả:
Tên: Peter, tuổi: 17

Chú thích bằng Pascal

Nhận thấy như thế nào bình luận được sử dụng trong Pascal. Trong ví dụ nhận xét, tức là văn bản dịch vụ mà trình biên dịch “không nhìn thấy” được đặt trong dấu ngoặc nhọn. Thông thường, các lập trình viên đưa ra các nhận xét để giải thích các đoạn mã.

Nhiệm vụ 3. Dân số Mátxcơva là a = 9.000.000 người. Dân số của New Vasyuki là b=1000 người. Viết chương trình xác định sự khác biệt về số dân giữa hai thành phố. Sử dụng biến

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

Số thực trong Pascal và trong lập trình nói chung là tên gọi của số phân số.

Kiểu Phạm vi Bộ nhớ cần thiết (byte)
thực tế 2,9 * 10E-39 .. 1,7 * 10E38 6
đơn 1,5 * 10 E-45 .. 3,4 * 10E38 4
gấp đôi 5*10E-324.. 1.7*10E308 8
mở rộng 1.9*10E-4951 .. 1.1*10E4932 10

Kiểu thực trong Pascal là kiểu thực được sử dụng phổ biến nhất.

Những điều trên đã được trình bày các kiểu dữ liệu đơn giản trong Pascal, bao gồm:

  • thứ tự
  • Trọn
  • trêu ghẹo não
  • Tính cách
  • Có thể liệt kê được
  • Khoảng thời gian
  • Thực tế

Để hiển thị giá trị của các biến kiểu thực, đầu ra được định dạng thường được sử dụng:

  • định dạng sử dụng một số, cho biết số lượng vị trí được phân bổ cho số này ở dạng hàm mũ;
  • p:=1234,6789; Writeln(p:6:2); (1234,68)

    Cùng với các kiểu đơn giản, ngôn ngữ còn sử dụng kiểu dữ liệu có cấu trúc và con trỏ, đây sẽ là chủ đề của các bài học tiếp theo về Pascal.

    Hằng số trong Pascal

    Thông thường trong một chương trình, người ta biết trước rằng một biến sẽ nhận một giá trị cụ thể và sẽ không thay đổi giá trị đó trong suốt quá trình thực hiện toàn bộ chương trình. Trong trường hợp này, bạn phải sử dụng hằng số.

    Việc khai báo một hằng số trong Pascal xảy ra trước khi khai báo các biến (trước từ dịch vụ var) và trông như thế này:

    Một ví dụ về mô tả hằng số trong Pascal:

    1 2 3 4 5 6 hằng số x= 17 ; var myname: string ; bắt đầu tên tôi: = "Peter" ; writeln("name: ", myname, ", age: ", x) end.

    hằng số x=17; var myname:string; bắt đầu tên tôi:="Peter"; writeln("name: ",myname, ", age: ", x) end.

    Đầu ra “đẹp” của số nguyên và số thực

    Để đảm bảo rằng sau khi hiển thị các giá trị của các biến có các vết thụt lề, sao cho các giá trị không “hợp nhất” với nhau, thông thường người ta chỉ ra bằng dấu hai chấm số lượng ký tự cần cung cấp để hiển thị giá trị:


    Các phép tính số học trong Pascal

    Trình tự thao tác

    1. đánh giá các biểu thức trong ngoặc đơn;
    2. nhân, chia, div, mod từ trái sang phải;
    3. phép cộng và phép trừ từ trái sang phải.

    Thủ tục và hàm số học tiêu chuẩn Pascal

    Ở đây đáng để nghiên cứu chi tiết hơn về một số phép tính số học.

    • Phép toán inc trong Pascal, được phát âm là tăng dần, là một thủ tục Pascal tiêu chuẩn có nghĩa là tăng lên một.
    • Ví dụ về hoạt động inc:

      x:=1; inc(x); (Tăng x lên 1, tức là x=2) writeln(x)

      Việc sử dụng thủ tục inc phức tạp hơn:
      Inc(x,n) trong đó x là loại thứ tự, n là loại số nguyên; thủ tục tăng x theo n.

    • Thủ tục Dec trong Pascal hoạt động tương tự: Dec(x) - giảm x đi 1 (giảm) hoặc Dec(x,n) - giảm x đi n.
    • Toán tử abs đại diện cho mô đun của một số. Nó hoạt động như thế này:
    • một: =- 9; b:=abs(a) ; (b=9)

      một:=-9; b:=abs(a); (b=9)

    • Toán tử div trong Pascal thường được sử dụng vì một số tác vụ liên quan đến hoạt động của toàn bộ phép chia.
    • Phần dư của phép chia hay toán tử mod trong Pascal cũng không thể thiếu để giải một số bài toán.
    • Đáng chú ý là hàm lẻ tiêu chuẩn của Pascal, hàm này xác định xem một số nguyên có phải là số lẻ hay không. Nghĩa là, nó trả về true cho số lẻ, false cho số chẵn.
    • Ví dụ sử dụng hàm lẻ:

      var x: số nguyên; bắt đầu x:=3; writeln(sqr(x)); (câu trả lời 9) kết thúc.

    • Phép tính lũy thừa trong Pascal bị thiếu như vậy. Nhưng để nâng lũy ​​thừa của một số, bạn có thể sử dụng hàm exp.
    • Công thức là: exp(ln(a)*n), trong đó a là một số, n là độ (a>0).

      Tuy nhiên, trong trình biên dịch Pascal abc, phép lũy thừa đơn giản hơn nhiều:

      var x: số nguyên; bắt đầu x:=9; writeln(sqrt(x)); (câu trả lời 3) kết thúc.

    Nhiệm vụ 4. Biết kích thước của hộp diêm: chiều cao - 12,41 cm, chiều rộng - 8 cm, độ dày - 5 cm, tính diện tích đáy hộp và thể tích của nó
    (S=chiều rộng*độ dày, V=diện tích*chiều cao)

    Nhiệm vụ 5. Vườn thú có ba con voi và khá nhiều thỏ, số lượng thỏ thay đổi thường xuyên. Một con voi được cho là ăn một trăm củ cà rốt mỗi ngày và một con thỏ - hai. Mỗi buổi sáng, người trông vườn thú cho máy tính biết số lượng thỏ. Để đáp lại điều này, máy tính phải cho người phục vụ biết tổng số củ cà rốt cần cho thỏ và voi ăn hôm nay.

    Nhiệm vụ 6. Người ta biết rằng x kg kẹo giá bao nhiêu Một rúp Xác định chi phí là bao nhiêu y kg số kẹo này và có thể mua được bao nhiêu kg kẹo ở k rúp Tất cả các giá trị được nhập bởi người dùng.

    Bất kỳ chương trình nào được viết bằng bất kỳ ngôn ngữ lập trình nào đều được thiết kế cơ bản để xử lý dữ liệu. Dữ liệu có thể là số, văn bản, đồ họa, âm thanh, v.v. Một số dữ liệu là dữ liệu nguồn, số khác là kết quả, thu được bằng cách xử lý dữ liệu nguồn của chương trình.

    Dữ liệu được lưu trữ trong bộ nhớ của máy tính. Chương trình truy cập chúng bằng cách sử dụng tên biến được liên kết với các vị trí bộ nhớ nơi dữ liệu được lưu trữ.

    Các biến được mô tả trước mã chương trình chính. Tên của các biến và loại dữ liệu được lưu trữ trong chúng được chỉ ra ở đây.

    Có rất nhiều kiểu dữ liệu trong ngôn ngữ lập trình Pascal. Ngoài ra, người dùng có thể tự xác định loại của riêng mình.

    Loại biến xác định dữ liệu nào có thể được lưu trữ trong vị trí bộ nhớ liên kết với nó.

    Loại biến số nguyên chỉ có thể được liên kết với các giá trị số nguyên thông thường trong khoảng -32768 đến 32767. Pascal có các kiểu số nguyên khác (byte, longint).

    Loại biến thực tế lưu trữ số thực (phân số).

    Biến đổi Boolean(Boolean) loại (boolean) chỉ có thể nhận hai giá trị - ĐÚNG VẬY(1, đúng) hoặc SAI(0, sai).

    Kiểu ký tự (char) có thể lấy các giá trị từ một chuỗi ký tự được sắp xếp cụ thể.

    Loại khoảng do người dùng xác định và chỉ được hình thành từ các loại thứ tự. Đại diện cho một tập hợp con các giá trị trong một phạm vi cụ thể.

    Bạn có thể tạo kiểu dữ liệu của riêng mình bằng cách liệt kê các giá trị mà một biến thuộc loại đó có thể nhận. Đây là cái gọi là kiểu dữ liệu liệt kê.

    Tất cả những điều trên đều là những kiểu dữ liệu đơn giản. Nhưng cũng có những cái phức tạp, có cấu trúc, dựa trên các kiểu đơn giản.

    Mảng là một cấu trúc chiếm một vùng duy nhất trong bộ nhớ và bao gồm một số thành phần cố định cùng loại.

    Dây là một dãy ký tự. Hơn nữa, số lượng ký tự này không được nhiều hơn 255. Hạn chế này là một tính năng đặc trưng của Pascal.

    Ghi là một cấu trúc bao gồm một số thành phần cố định được gọi là trường. Dữ liệu trong các trường khác nhau của bản ghi có thể có nhiều loại khác nhau.

    bộđại diện cho một tập hợp gồm nhiều phần tử nhưng có cùng kiểu liệt kê.

    Các tập tinđối với Pascal, chúng là các chuỗi cùng loại dữ liệu được lưu trữ trên các thiết bị bộ nhớ ngoài (ví dụ: ổ cứng).

    Khái niệm về kiểu dữ liệu như con trỏ liên quan đến việc lưu trữ động dữ liệu trong bộ nhớ máy tính. Thông thường, sử dụng kiểu dữ liệu động sẽ hiệu quả hơn trong lập trình so với sử dụng kiểu dữ liệu tĩnh.

    Dữ liệu là một khái niệm chung cho mọi thứ mà máy tính hoạt động. Bất kỳ kiểu dữ liệu nào cũng xác định tập hợp các giá trị mà một biến cụ thể có thể nhận và các thao tác có thể áp dụng cho chúng. Mỗi biến gặp trong chương trình phải được liên kết với một và chỉ một loại.

    Có hai loại kiểu đơn giản trong Pascal: kiểu thứ tự và kiểu thực. Loại thứ tự được xác định bởi người lập trình (loại liệt kê hoặc loại phạm vi) hoặc được biểu thị bằng tên của một trong ba loại thứ tự được xác định trước: Boolean, Integer hoặc Char. Một kiểu thực được biểu thị bằng tên kiểu quy định là Real.

    Một kiểu liệt kê được đặc trưng bởi nhiều giá trị khác nhau mà nó chứa, trong đó một thứ tự tuyến tính được xác định. Bản thân các giá trị được chỉ định trong định nghĩa của loại này theo tên.

    Loại phạm vi (có giới hạn) được chỉ định bằng cách sử dụng các giá trị tối thiểu và tối đa liên quan đến loại thứ tự được mô tả trước đó. Đây là cách một loại thứ tự mới được tạo ra.

    Kiểu dữ liệu thứ tự

    Kiểu dữ liệu thứ tự mô tả một tập hợp các giá trị hữu hạn và có thứ tự. Các giá trị này được ánh xạ tới dãy số thứ tự 0,1,2,...; một ngoại lệ chỉ được thực hiện cho các số nguyên thứ tự, ánh xạ lên chính chúng. Mỗi loại thứ tự có giá trị tối thiểu và tối đa. Đối với tất cả các giá trị ngoại trừ giá trị tối thiểu đều có giá trị trước đó và đối với tất cả các giá trị ngoại trừ giá trị tối đa đều có giá trị tiếp theo.

    Các hàm được quy định succ, pred, ord chấp nhận các đối số thuộc bất kỳ loại thứ tự nào:
    succ(X) - cho giá trị thứ tự tiếp theo sau X
    pred(X) - đưa ra giá trị thứ tự trước X
    ord(X) - đưa ra số thứ tự cho X

    Đối với tất cả các loại thứ tự, có các toán tử quan hệ = , = và > , giả sử cả hai toán hạng đều cùng loại.

    kiểu Boolean

    Giá trị Boolean là một trong hai giá trị thật, được biểu thị bằng tên được xác định trước là false và true.

    Có các toán tử logic sau đây tạo ra giá trị logic khi được áp dụng cho toán hạng logic:
    và - logic VÀ
    hoặc - logic HOẶC
    không - logic KHÔNG

    Ngoài ra, bất kỳ phép toán quan hệ nào (= , = , > , in) đều tạo ra kết quả logic.

    Ngoài ra, kiểu boolean được xác định sao cho sai

    Ngoài ra còn có các hàm logic được xác định trước (tức là các hàm đưa ra kết quả logic):
    lẻ(F) - đúng nếu số nguyên là F-lẻ và kết quả là sai nếu F-chẵn
    eoln(F) - kiểm tra cuối dòng
    eof(F) - kiểm tra cuối tập tin

    Kiểu số nguyên

    Kiểu số nguyên bao gồm nhiều số nguyên khác nhau.

    Khi làm việc với toán hạng số nguyên, các phép tính số học sau tạo ra các giá trị số nguyên:
    * - phép nhân
    div - phần nguyên từ phép chia
    mod - phần dư của phép chia
    + - phép cộng
    - - phép trừ

    Pascal cũng có một hằng số được xác định trước gọi là MaxInt, chứa giá trị lớn nhất của một Số nguyên và bằng 32767

    Toàn bộ kết quả cũng đạt được nhờ bốn chức năng quan trọng được quy định:
    abs(I) - giá trị tuyệt đối của giá trị nguyên I
    sgr(I) - giá trị nguyên của I bình phương cho rằng I trunc(R) - cho phần nguyên của số thực R
    round(R) - trả về số nguyên được làm tròn. Trong trường hợp này: với R>0 có nghĩa là trunc(R+0,5) và đối với R

    Nếu I là một giá trị nguyên thì:
    succ(I) - đưa ra giá trị số nguyên tiếp theo (I+1)
    pred(I) - đưa ra giá trị số nguyên trước đó (I-1)

    Kiểu ký tự (Char)

    Giá trị Char là các phần tử của một tập hợp ký tự hữu hạn và có thứ tự. Các giá trị thuộc loại này được biểu thị bằng một ký tự đơn được đặt trong dấu ngoặc đơn (dấu nháy đơn). Nếu cần có dấu nháy đơn thì nó được viết hai lần.
    Ví dụ: "*" "G" "3" """" "X"

      Đối với loại Char, áp dụng các giả định tối thiểu sau:
    1. Các chữ số thập phân từ 0 đến 9 được sắp xếp theo giá trị số của chúng và nối tiếp nhau (ví dụ: succ("5") = "6").
    2. Có thể có chữ in hoa từ "A" đến "Z"; nếu vậy thì chúng được sắp xếp theo thứ tự bảng chữ cái, nhưng không nhất thiết phải theo sau nhau (ví dụ: "A"
    3. Có thể có các chữ cái viết thường từ "a" đến "z"; nếu vậy thì chúng được sắp xếp theo thứ tự abc, nhưng không nhất thiết phải theo sau nhau (ví dụ: "a"

    Để ánh xạ một bộ ký tự nhất định thành số sê-ri và ngược lại, có hai hàm được xác định trước:
    ord(C) - đưa ra số thứ tự của ký tự C trong bộ ký tự được sắp xếp đã đề cập
    chr(I) - cung cấp ký tự có số sê-ri I

    Đối với các đối số kiểu Char, các hàm được xác định trước pred và succ có thể được định nghĩa như sau:
    pred(C) = chr(ord(C)-I)
    succ(C) = chr(ord(C)+I)

    Bình luận. Ký hiệu trước hoặc sau phụ thuộc vào tập hợp ký hiệu được chỉ định, vì vậy cả hai mối quan hệ này chỉ hợp lệ nếu ký hiệu trước hoặc sau tồn tại.

    Loại thực

    Giá trị của kiểu thực là các phần tử của tập hợp con số thực do người thực hiện xác định.

    Tất cả các thao tác trên số lượng loại thực đều mang tính gần đúng, độ chính xác của chúng được xác định bằng cách triển khai (máy) mà bạn đang xử lý. Kiểu thực là kiểu đơn giản, nó không phải là kiểu thứ tự. Giá trị thực không có số thứ tự và đối với bất kỳ giá trị nào trong số chúng không có giá trị trước hoặc giá trị tiếp theo.

    Nếu ít nhất một trong các toán hạng là kiểu thực (số còn lại có thể là số nguyên), thì các phép toán sau sẽ cho kết quả thực:
    * - phép nhân
    / - phép chia (cả hai toán hạng đều có thể là số nguyên, nhưng kết quả luôn là số thực)
    + - phép cộng
    - - phép trừ

    Có các hàm được quy định đưa ra kết quả thực với một đối số thực:
    abs(R) - giá trị tuyệt đối của R
    sqr(R) - R bình phương nếu kết quả nằm trong phạm vi số thực

    Và các hàm quy định này cho kết quả thực với một số nguyên hoặc đối số thực:
    sin(X) - cho sin của X; X được biểu thị bằng radian
    cos(X) - cho ra cosin của X; X được biểu thị bằng radian
    arctan(X) - cho arctang của X được biểu thị bằng radian
    ln(X) - cho giá trị logarit tự nhiên (cơ số e) của X, X>0
    exp(X) - cho giá trị của hàm số mũ (tức là lũy thừa của X)
    sqrt(X) - cho giá trị căn bậc hai của X, X>=0

    Cảnh báo. Các hàm pred, succ không thể được sử dụng cho các đối số thực. Bạn không thể sử dụng các giá trị thuộc loại thực khi lập chỉ mục các mảng, để điều khiển trong một vòng lặp có tham số, để xác định loại cơ sở của các tập hợp, để lập chỉ mục trong toán tử biến thể.

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

    Tiểu luận

    "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à các hằng, 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 thao tác hợp lệ có thể áp dụng cho nó. Ngoài ra, loại này còn xác định định dạng biểu diễn dữ liệu bên trong trong bộ nhớ PC.

    Nhìn chung, ngôn ngữ Object Pascal được đặc trưng bởi cấu trúc phân 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, nhờ đó tổng số kiểu được sử dụng trong một 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 và hằng:

    Hằng số biểu thị 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 số, chúng nhận các giá trị của mình trong quá trình thực thi chương trình và các giá trị này có thể được thay đổi. Các hằng số và biến có thể được gọi bằng tên.

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

    Kiểu 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 hợp các thao tác được phép thực hiện trên chúng.

    Chương này và bốn chương tiếp theo sẽ mô tả chi tiết từng loại.

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

    Các kiểu đơn giản bao gồm các kiểu thứ tự, kiểu thực và kiểu ngày giờ.

    Các loại thứ tự khác nhau ở chỗ mỗi chúng có một số hữu hạn các giá trị có thể. Các giá trị này có thể được sắp xếp theo một cách nhất định (do đó có tên của các loại) và do đó, mỗi giá trị trong số chúng 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ó số lượng giá trị hữu hạn, được xác định bởi định dạng biểu diễn bên trong của một số thực. Tuy nhiên, số lượng giá trị có thể có của các kiểu thực lớn đến mức không thể liên kết một số nguyên (số của nó) với mỗi kiểu thực.

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

    1.1.1 Các loại thứ tự

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


    Cơm. 1.1 - Cấu trúc kiểu dữ liệu

    trọn các loại, hàm ord(x) trả về giá trị của chính x, tức là Ord(X) = x với x thuộc bất kỳ loại nào. trọn kiểu. Áp dụng Lệnh(x) cho hợp lý , tượng trưng và đếm được các loại cho một số nguyên dương trong phạm vi 0 đến 1 ( kiểu boolean), từ 0 đến 255 ( tượng trưng), từ 0 đến 65535 ( có thể đếm được). Phạm vi loại giữ nguyên tất cả các thuộc tính của kiểu thứ tự cơ sở, do đó 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 các loại thứ tự:

    trước(x)- trả về giá trị trước đó của loại thứ tự (giá trị tương ứng với số thứ tự ord(x) -1, tức là ord(pred(x)) = ord(x) - 1;

    thành công(x)- trả về giá trị tiếp theo của loại 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 một chương trình định nghĩa một 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ỳ loại thứ tự nào là một tập hợp các giá trị có thứ tự tăng dần 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 đầu bên trái và succ(x) là không được xác định cho phần cuối bên phải của phân đoạn này.

    Kiểu số nguyên . Phạm vi giá trị có thể có của các loại 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. Trong bảng 1.1 hiển thị tên của các loại số nguyên, độ dài biểu diễn bên trong của chúng theo byte và phạm vi các giá trị có thể có.

    Bảng 1.1 - Kiểu số nguyên

    Tên Độ dài, byte Phạm vi giá trị
    hồng y 4 0. .. 2 147 483 647
    Byte 1 0...255
    rút gọn 1 -128...+127
    bạc hà 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 tiên trong phiên bản 4 và các loại bạc hàhồng y không có sẵn ở 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, tức là giống như bạc hà .

    Khi sử dụng các thủ tục và hàm có tham số nguyên, bạn nên được hướng dẫn bằng cách “lồng” các loại, tức là. bất cứ nơi nào nó có thể được sử dụng từ, được phép sử dụng Byte(nhưng không phải ngược lại), trong Longint“đi vào” bạc hà, lần lượt bao gồm rút gọn .

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

    x là biểu thức của bất kỳ loại nào trong số này; các chữ cái vb, vs, vw, vi, vl, vx biểu thị các biến có 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 - Quy trình và chức năng tiêu chuẩn áp dụng cho toàn bộ loại

    Bắt mắt Loại kết quả Hoạt động
    cơ bụng (x) x Trả về mô-đun x
    chr(b) Char Trả về một ký tự theo mã của nó
    tháng mười hai(vx[,i]) - Giảm giá trị của vx xuống i và khi không có i - xuống 1
    inc(vx[,i]) - Tăng giá trị của vx lên i và khi không có i - lên 1
    Xin chào (w) Byte Trả về cung cao nhất của đối số
    Xin chào (tôi) Như nhau Trả về byte thứ ba
    Lo(i) Trả về byte thấp của đối số
    Thấp) Như nhau
    lẻ(l) Boolean Trả về True nếu đối số là số lẻ
    Ngẫu nhiên(w) Tương tự như tham số Trả về một số giả ngẫu nhiên được phân bố đồng đều trong phạm vi 0...(w-l)
    mét vuông(x) X Trả về bình phương của đối số
    trao đổi (i) số nguyên Hoán đổi byte trong một từ
    trao đổi(w) Từ Như nhau

    Khi thao tác với số nguyên, loại kết quả sẽ tương ứng với loại toán hạng và nếu toán hạng có loại số nguyên khác nhau thì loại chung bao gồm cả hai toán hạng. Ví dụ, khi thao tác với nói ngắn gọntừ loại phổ biến sẽ là số nguyên. Trong cài đặt mặc định, trình biên dịch Delphi không tạo mã để 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 hiểu lầm.

    Các kiểu Boolean . Các loại logic bao gồm Boolean, ByteBool, Bool, wordBoolLongBool. Trong Pascal tiêu chuẩn, chỉ có kiểu được xác định Boolean, các kiểu logic khác được đưa vào Object Pascal để tương thích với Windows: các kiểu BooleanByteBool mỗi cái chiếm một byte, BoolWordBool- mỗi cái 2 byte, LongBool- 4 byte. Giá trị Boolean có thể là một trong các hằng được khai báo trước False hoặc True.

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

    Thứ tự (Đúng) = +1, trong khi đối với các loại khác ( Bool, WordBool vân vân.)

    Ord(True) = -1, vì vậy nên thận trọng khi sử dụng những loại toán tử này! Ví dụ: đối với phiên bản Delphi 6, câu lệnh showMessage(" --- ") có thể thực thi được trong vòng lặp sau sẽ không bao giờ được thực thi:

    cho L:= Sai thành Đúng

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

    Nếu chúng ta thay thế tham số vòng lặp loại 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 trên màn hình hai lần. [Đối với phiên bản Delphi 1 và 2 ord (True) =+1 cho bất kỳ loại boolean nào.]

    Loại ký tự . Giá trị của loại ký tự là tập hợp 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ã để biểu diễn bên trong ký hiệu; nó được trả về bởi hàm ord.

    Để mã hóa trong Windows, mã ANSI được sử dụng (được đặt theo tên của Viện Tiêu chuẩn Quốc gia Hoa Kỳ, viện tiêu chuẩn hóa Hoa Kỳ đã đề xuất mã này). Nửa đầu ký tự PC có mã 0... 127 tương ứng với Bảng 1.3. Nửa sau của ký tự có mã 128...255 khác nhau đối với các phông chữ khác nhau. Các phông chữ tiêu chuẩn của Windows Arial Cyr, Courier New Cyr và Times New Roman sử dụng 64 mã cuối cùng (từ 192 đến 256) để thể hiện các ký tự Cyrillic (không có chữ “ё” và “Ё”): “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ố lần lượt là 168 và 184.

    Bảng 1.3 - Mã hóa ký tự theo 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 KHÔNG 32 B.L. 64 @ 96 "
    1 ZON 33 ! 65 MỘT 97 MỘT
    2 STX 34 66 TRONG 98 b
    3 ETX 35 # 67 VỚI 99 Với
    4 EOT 36 $ 68 D 100 d
    5 ENQ 37 % 69 E 101 e
    6 ACK 38 & 70 F 102 f
    7 BEL 39 " 71 G 103 d
    8" B.S. 40 ( 72 N 104 h
    9 HT 41 ) 73 TÔI 105 Tôi
    10 LF 42 * 74 J 106 j
    11 VT 43 + 75 ĐẾN 107 k
    12 FF 44 F 76 L 108 1
    13 CR 45 - 77 M 109 tôi
    14 VÌ THẾ 46 78 N 110 N
    15 S.I. 47 / 79 0 111
    16 DEL 48 0 80 R 112 P
    17 DC1 49 1 81 Q 113 q
    18 DC2 50 2 82 R 114 r
    19 DC3 51 3 83 S 115 S
    20 DC 4 52 4 84 T 116 t
    21 N.A.K. 53 5 85 bạn 117 bạn
    22 SYN 54 6 86 V. 118 v
    23 ETB 55 7 87 W 119 W
    24 CÓ THỂ 56 8 88 X 120 x
    25 E.M. 57 9 89 Y 121 bạn
    26 PHỤ 58 : 90 Z .122 z
    27 THOÁT 59 ; 91 t 123 {
    28 FS 60 < 92 \ 124 1
    29 G.S. 61 = 93 ] 125 }
    30 R.S. 62 > 94 L 126 ~
    31 CHÚNG TA 63 F 95 127 r

    Các ký tự có mã 0...31 ám chỉ mã dịch vụ. Nếu những 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.

    Các kiểu dữ liệu ngôn ngữ Pascal: phân loại và mô tả. Các kiểu dữ liệu số học và thứ tự, hành động với chúng. Biểu thức số học: hàm, phép tính và thứ tự thực hiện. Khả năng tương thích và chuyển đổi kiểu dữ liệu.

    Trình biên dịch Pascal yêu cầu thông tin về dung lượng bộ nhớ cần thiết để chạy chương trình phải được cung cấp trước khi chương trình chạy. Để làm điều này, 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ớ. Sẽ rất tốt nếu thỏa thuận trước về các hoạt động khác nhau áp dụng cho một số biến nhất định...

    Tất cả điều này có thể được truyền đạt tới chương trình bằng cách chỉ ra loại biến tương lai. Có thông tin về loại biến, trình biên dịch “hiểu” số byte cần được phân bổ 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 cấu trúc nào.

    Để thuận tiện cho người lập trình, Pascal có nhiều kiểu dữ liệu tiêu chuẩn, cộng thêm khả năng tạo kiểu mới.

    Khi xây dựng các loại dữ liệu mới dựa trên các loại dữ liệu hiện có (tiêu chuẩn hoặc do chính lập trình viên xác định lại), chúng ta phải nhớ rằng bất kỳ tòa nhà nào cũng phải được xây dựng trên một nền tảng tốt. Vì vậy, bây giờ chúng ta sẽ nói về “nền tảng” này.

    Dựa trên các kiểu dữ liệu cơ bản tất cả các loại ngôn ngữ Pascal khác đều được xây dựng, được gọi là: được xây dựng.

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

    Các kiểu dữ liệu do lập trình viên 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à chuẩn nên không cần mô tả trong phần kiểu. Tuy nhiên, nếu muốn, điều này cũng có thể được thực hiện, ví dụ, bằng cách đưa ra những định nghĩa dài tên ngắn gọn. Giả sử bằng cách giới thiệu một kiểu dữ liệu mới

    gõ Int = Số nguyên;

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

    Các loại thi công tiêu chuẩn cũng không cần phải mô tả trong phần kiểu. Tuy nhiên, trong một số trường hợp việc này vẫn phải thực hiện do yêu cầu về cú pháp. Ví dụ, trong danh sách tham số thủ tục hoặc chức năng Không thể sử dụng hàm tạo kiểu (xem bài giảng 8).

    Kiểu dữ liệu thứ tự

    Trong số các kiểu dữ liệu cơ bản, đáng chú ý nhất là các loại thứ tự. Tên này có thể được biện minh theo hai cách:

    Các thủ tục tiêu chuẩn xử lý kiểu dữ liệu thứ tự

    Chỉ dành cho số lượng các loại thứ tự Các chức năng và thủ tục sau đây được xác định:

    1. Chức năng thứ tự(x) trả về số thứ tự của giá trị của biến x (liên quan đến loại mà biến x thuộc về).
    2. Chức năng dự đoán(x) trả về giá trị trước x (không áp dụng cho phần tử đầu tiên của loại).
    3. Chức năng thành công(x) trả về giá trị theo sau x (không áp dụng cho phần tử cuối cùng của loại).
    4. Thủ tục Inc(x) trả về giá trị sau x (đối với các kiểu dữ liệu số họcđiều 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 sau x (đối với các kiểu dữ liệu số họcđiều này tương đương với toán tử x:= x + k).
    6. Thủ tục Tháng mười hai(x) trả về giá trị trước x (đối với các kiểu dữ liệu số họcđiều này tương đương với toán tử x:= x - 1).
    7. Thủ tục Tháng mười hai(x, k) trả về giá trị k–e trước x (đối với các kiểu dữ liệu số họcđiều 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 quy trình Inc(x) hoàn toàn trùng khớp với kết quả áp dụng hàm thành công(x). Tuy nhiên, sự khác biệt giữa chúng xuất hiện ở ranh giới trong phạm vi cho phép. Chức năng thành công(x) không áp dụng được cho phần tử tối đa của một loại, nhưng đây là quy trình 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 của máy, sẽ thêm đơn vị tiếp theo 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ẽ biến thành số có giá trị nhỏ nhất của phạm vi. Hóa ra các thủ tục Inc() Tháng mười hai() họ nhận thức bất kỳ loại thứ tự nào như thể “đóng trong một vòng”: ngay sau loại 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 bằng 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 vào số 15 sẽ cho kết quả như sau:

    1 1 1 1 1 1 0 0 0 0

    Đơn vị ban đầu sẽ bị cắt đi, và do đó hóa ra Inc(15)=0 .

    Tình huống tương tự ở giới hạn dưới của phạm vi cho phép của loại dữ liệu thứ tự tùy ý được quan sát thấy đối với quy trình Tháng mười hai(x) và chức năng dự đoán(x):

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

    Bây giờ chúng ta hãy mô tả kiểu dữ liệu thứ tự chi tiết.

    1. kiểu Boolean Boolean có hai giá trị: Sai và Đúng và các đẳng thức sau đây áp dụng cho chúng:
    2. Đến loại ký tự Char bao gồm 256 ký tự bảng ASCII mở rộng(ví dụ: "a", "b", "i", "7", "#"). Số ký tự được hàm trả về thứ tự() , khớp với số của ký hiệu này trong bảng ASCII.
    3. Kiểu dữ liệu số nguyên Hãy đặt nó vào một bảng:
    4. Có thể liệt kê được kiểu dữ liệu được chỉ đị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); 0 1 2 3 4 5 6

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

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

      gõ Tháng = 1 .. 12 ;
      Budni = Thứ Hai .. Thứ Sáu;

    6. Lập trình viên có thể tạo các kiểu dữ liệu của riêng mình, là sự kết hợp của một số kiểu tiêu chuẩn. Ví dụ:

      gõ Valid_For_Identifiers = "a" .. "z", "A" .. "Z", "_", "0" .. "9";

    Loại này bao gồm việc kết hợp một số khoảng và trong trường hợp này thứ tự của các chữ cái Latinh được thay đổi: nếu ở loại tiêu chuẩn