- Trong mọi ngôn ngữ lập trình ta đều có thể thực hiện các phép toán số học cộng, trừ, nhân, chia với các số nguyên, số thực.
- Kí hiệu các phép toán số học trong ngôn ngữ Pascal:Tên phép toánKiểu dữ liệu +cộngsố nguyên, số thực -
trừ số nguyên, số thực
*
nhânsố nguyên, số thực/
chia số nguyên, số thựcdivchia lấy phần nguyên số nguyên mod chia lấy phần dư số nguyên
Các kiểu dữ liệu số nguyên, số thực thường dùng trong Free Pascal
Published: 29 April 2017 |Hits: 51997
1. Kiểu số nguyên
Kiểu dữ liệuKhoảng giá trịKiểu dữ liệu tương đươngKích thướcDiễn giảiChú ýshortint-128 -> 127int81 byteKiểu số nguyên có dấu 8 bit byte0 -> 255uint81 byteKiểu số nguyên không dấu 8 bit integer-32,768 -> 32,767int162 byteKiểu số nguyên có dấu 16 bit word0 -> 65,535uint162 byteKiểu số nguyên không dấu16 bit longint-2 tỷ -> 2 tỷint324 byteKiểu số nguyên có dấu 32 bit longword0 -> 4 tỷuint324 byteKiểu số nguyên không dấu 32 bit int64-9 tỷ tỷ -> 9 tỷ tỷ 8 byteKiểu số nguyên có dấu 64 bitKhông sử dụng làm biến chạy trong vòng lặp forqword0 -> 18 tỷ tỷuint648 byteKiểu số nguyên không dấu 64 bitKhông sử dụng làm biến chạy trong vòng lặp for2. Kiểu số thực
Kiểu dữ liệuGiá trị tuyệt đối bé nhấtGiá trị tuyệt đối lớn nhấtKiểu dữ liệu tương đươngKích thướcDiễn giảisingle1.5E-453.4E+38 4 byte real5.0E-3241.7E+308double8 byteTrong Free Pascal: real = double. Trong đó:double: số thực với độ chính xác kép [độ chính xác gấp đôi]
Category: Lập trình Pascal
- Dữ liệu là thông tin đã mã hóa trong máy tính. Dữ liệu sau khi tập hợp lại và xử lý sẽ cho ta thông tin.
- Mỗi ngôn ngữ lập trình thường cung cấp một số kiểu dữ liệu chuẩn cho biết phạm vi giá trị có thể lưu trữ, dung lượng bộ nhớ cần thiết để lưu trữ và các phép toán tác động lên dữ liệu.
- Mỗi kiểu dữ liệu được đặc trưng bởi tên kiểu miền giá trị, kích thước trong bộ nhớ, các phép toán, các hàm và thủ tục sử dụng chúng.
- Một số kiểu dữ liệu chuẩn thường dùng cho các biến chẵn trong Pascal, đó là:
Kiểu nguyên: Các kiểu nguyên được lưu trữ và kết quả tính toán là số nguyên nhưng có hạn chế về miền giá trị. Tập số nguyên là vô hạn là có thứ tự, đếm được
Kiểu
Bộ nhớ lưu trữ một giá trị
Phạm vi giá trị
Byte
1 byte
Từ 0 đến 255
Integer
2 byte
Từ -2-15 đến 215 - 1
Word
2 byte
Từ 0 đến 216
Longint
4 byte
Từ -231 đến 231- 1
Kiểu thực: Các kiểu thực được lưu trữ và kết quả tính toán chỉ là gần đúng với sai số không đáng kể, nhưng miền giá trị được mở rộng hơn so với kiểu nguyên. Số thực tromg máy tính rời rạc và hữu hạn. Phép toán chia các toán hạng gồm cả kiểu nguyên và kiểu thực sẽ cho kết quả là kiểu thực.
Kiểu
Bộ nhớ lưu trữ một giá trị
Phạm vi giá trị
Real
6 byte
0 hoặc có giá trị tuyệt đối nằm trong phạm vi từ 2-38 đến 238
Extended
10 byte
0 hoặc có giá trị tuyệt đối nằm trong phạm vi từ 2-4932 đến 24932
Kiểu kí tự: Kiểu kí tự có tập hợp giá trị là các kí tự trong bảng mã ASCII, được dùng khi thông tin là các kí tự, xâu [string]. Kiểu kí tự là kiểu có thứ tự, đếm được. Kí tự đặc biệt dùng để thể hiện sự ngăn cách giữa hai từ viết liên tiếp trong các văn bản, là dấu cách.
Kiểu
Bộ nhớ lưu trữ một giá trị
Phạm vi giá trị
Char
1 byte
256 kí tự trong bộ mã ASCII
Nhìn bảng dưới ta thấy kí tự A có mã ASCII là 65, a có mã là 97.
Kiểu lôgíc: Kiểu lôgíc trong Pascal chi có hai giá trị là true và false, được dùng khi kiểm tra một điều kiện hoặc tìm giá trị cùa một biểu thức lôgíc. Kiểu lôgíc cũng là kiểu thứ tự đếm được.
Kiểu
Bộ nhớ lưu trữ một giá trị
Phạm vi giá trị
Boolean
1 byte
true hoặc false
Lưu ý : Người lập trình cần tìm hiểu đặc trưng của các kiểu dữ liệu chuẩn được xác định bởi bộ dịch và sử dụng để khai báo biến
Ví dụ: Để lưu trữ giá trị nguyên mang giá trị 65537 thì ta không thể sử dụng kiểu byte, integer, word mà phải dung longint. Tuy nhiên nếu ta chỉ lưu trữ giá trị tối đa nhỏ hơn 32767 thì ta nên sử dụng kiểu integer để tiết kiệm bộ nhớ.
Có thể hiểu kiểu dữ liệu trong ngôn ngữ lập trình là các thuộc tính[biến] dùng để lưu trữ thông tin, giá trị mà khi chương trình biên dịch sinh ra.
2. Kiểu dữ liệu nguyên thủy
Kiểu dữ liệu là kiểu dữ liệu được cung cấp sẵn trong các ngôn ngữ lập trình, nó dùng để lưu trữ các giá trị đơn giản.
Dưới đây là các nhóm của kiểu dữ liệu nguyên thủy
các bạn có thể thấy kiểu dữ liệu nguyên thủy được chia ra thành 4 nhóm chính đó là:
- Kiểu logic[
2]: lưu giá trị logic nhận giá trị true hoặc falsepublic class Student{ private String name; public SinhVien[String name]{ this.name = name; } public String getName[]{ return name; } public void setName[String name]{ this.name = name; } }
- Kiểu kí tự[
3]: lưu các thông tin là ký tự: ví dụ 'a', 'c', 'd' ...public class Student{ private String name; public SinhVien[String name]{ this.name = name; } public String getName[]{ return name; } public void setName[String name]{ this.name = name; } }
- Kiểu số nguyên[
4]: lưu các thông tin là kiểu số nguyên như 1,2,3,4,5,6,7,8...public class Student{ private String name; public SinhVien[String name]{ this.name = name; } public String getName[]{ return name; } public void setName[String name]{ this.name = name; } }
- Kiểu số thực[
5]: lưu các thông tin là kiểu số thực như 1.4, 2.5, 2.6...public class Student{ private String name; public SinhVien[String name]{ this.name = name; } public String getName[]{ return name; } public void setName[String name]{ this.name = name; } }
Cụ thể và chi tiết hơn về từng loại trong các nhóm nguyên thủy trên bạn có thể ở bảng dưới đây
3. Kiểu dữ liệu đối tượng
Kiểu dữ liệu đối tượng được chia làm 2 loại:
- Framwork định nghĩa: Những đối tượng này được tạo sẵn và công việc của chúng ta chỉ việc gọi lên và sử dụng chúng, ví dụ: File, String, Scanner...
- Do người dùng định nghĩa: Chính là những class được chúng ta define từ những đối tượng trong bài toán OOP, ví dụ: Học Sinh, Nhân Viên, Giáo Viên, Lập Trình Viên...
public class Student{
private String name;
public SinhVien[String name]{
this.name = name;
}
public String getName[]{
return name;
}
public void setName[String name]{
this.name = name;
}
}
64. Sự khác nhau giữa kiểu dữ liệu nguyên thủy và kiểu dữ liệu đối tượng
Trước tiên chúng ta cần biết khi khai báo và khởi tạo 1 kiểu dữ liện[nguyên thủy và đối tượng] thì hệ thống sẽ cấp phát 1 địa chỉ ô nhớ để lưu trữ giá trị của thuộc tính đó
Kiểu dữ liệu nguyên thủy
Là kiểu dữ liệu có tính chất tham trị:
int a = 3;
int b = a;
b = b + 1;
System.out.println[a]; // 3
System.out.println[b]; // 4
Trong ví dụ trên sẽ thực hiện như sau
- Khởi tạo ra 1 thuộc tính a = 3 khi này hệ thống sẽ cấp phát 1 địa chỉ ô nhớ để lưu trữ giá trị của 3 và địa chỉ ô nhớ này sẽ có giá trị là 3
- Dòng lệnh thứ 2 thực hiện phép gán b = a lúc này sẽ khởi tạo ra thuộc tính b và cũng có giá trị là 3 tuy nhiên địa chỉ ô nhớ của a và b lúc này là 2 địa chỉ ô nhớ khác nhau
- Dòng lệnh thứ 3 thực hiện tăng b lên 1 đơn vị. Vì a và b đang ở 2 địa chỉ ô nhớ khác nhau nên khi giá trị của b thay đổi thì giá trị của a vẫn không bị ảnh hưởng
> Từ ví dụ trên chúng ta có thể hiểu nôm na tính tham trị bản chất của nó chỉ là copy giá trị của 1 địa chỉ khác để tạo ra 1 địa chỉ ô nhớ mới có cùng giá trị với địa chỉ copy
Kiểu dữ liệu đối tượng
Là kiểu dữ liệu có tính tham chiếu:
Chúng ta có đối tượng Sinh viên như sau:
public class Student{
private String name;
public SinhVien[String name]{
this.name = name;
}
public String getName[]{
return name;
}
public void setName[String name]{
this.name = name;
}
}
Và chúng ta thử tính tham chiếu với nó nhé
Student sv1 = new Student["Nguyen Van A"];
Student sv2 = sv1;
Sau đó thử thay đổi giá trị của sv2 nào
sv2.setName["Nguyen Van B"];
Cuối cùng thử in tên của 2 thằng sv1 và sv2
System.out.println["Student 1: " + sv1.getName[]];
System.out.println["Student 2: " + sv2.getName[]];
Khi compile chúng là sẽ thu được kết quả là:
Student 1: Nguyen Van B
Student 2: Nguyen Van B
Đến đây chắc bạn đã nhận ra sự khác biệt giữa kiểu dữ liệu đối tượng và kiểu dữ liệu nguyên thủy rồi chứ?
Các bạn nhìn vào câu lệnh
public class Student{
private String name;
public SinhVien[String name]{
this.name = name;
}
public String getName[]{
return name;
}
public void setName[String name]{
this.name = name;
}
}
7 khi này chúng ta cũng tạo ra 1 thuộc tính kiểu đối tượng sv2 tuy nhiên hệ thống sẽ không cấp phát 1 địa chỉ mới để lưu trữ sv2 mà sẽ đưa sv2 trỏ đến địa chỉ ô nhớ của sv1. Tức là khi này sv1 và sv2 sẽ trỏ vào cùng 1 địa chỉ ô nhớ.Khi ta thực hiện
public class Student{
private String name;
public SinhVien[String name]{
this.name = name;
}
public String getName[]{
return name;
}
public void setName[String name]{
this.name = name;
}
}
8 sẽ làm giá trị đang tại địa chỉ ô nhớ thay đổi và dĩ nhiên khi cả sv1 và sv2 cùng trỏ vào 1 địa chỉ thì cả 2 thằng này sẽ đều nhận được sự thay đổi giá trị của của ô nhớ đó.Kết luận
Như vậy điểm khác biệt giữa 2 kiểu dữ liệu đối tượng và nguyên thủy đó là 1 thằng có tính tham chiếu và 1 thằng có tính tham trị và khi sử dụng chúng nó sẽ khác nhau về việc cấp phát địa chỉ ô nhớ và các refernces vào địa chỉ ô nhớ đó.