intTypePromotion=3

Giáo trình Tin học đại cương A1: Phần 2 - NXB ĐHQG TP.HCM

Chia sẻ: Hoa La Hoa | Ngày: | Loại File: PDF | Số trang:231

0
145
lượt xem
49
download

Giáo trình Tin học đại cương A1: Phần 2 - NXB ĐHQG TP.HCM

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Phần 2 Giáo trình Tin học đại cương A1 tiếp tục giới thiệu đến bạn đọc nội dung chương 3 về lập trình căn bản bằng ngôn ngữ Pascal, với các nội dung như: Giới thiệu về ngôn ngữ Pascal, cấu trúc của chương trình Pascal, các phần tử cơ bản của Pascal, các kiểu dữ liệu đơn giản, hằng - biến và biểu thức, các câu lệnh đơn giản,... và các nội dung khác. Hi vọng giáo trình tin học đại cương A1 sẽ cung cấp cho bạn đọc những kiến thức cơ bản nhất về máy tính, chương trình Pascal giúp bạn đọc dễ dàng nghiên cứu.

Chủ đề:
Lưu

Nội dung Text: Giáo trình Tin học đại cương A1: Phần 2 - NXB ĐHQG TP.HCM

  1. CHƯƠNG 3 LẬP TRÌNH CĂN BẢN BẰNG NGÔN NGỮ PASCAL 1. GIỚI THIỆU NGÔN NGỮ PASCAL Pascal là ngôn ngữ lập trình cấp cao được giáo sư Niklaus Wirth ở Trường đại học Kỹ thuật Zurich (Thụy sĩ) thiết kế và công bố vào năm 1971. Ông đặt tên cho ngôn ngữ của mình là Pascal để tưởng nhớ nhà toán học nổi tiếng người Pháp ở thế kỷ 17: Blaise Pascal, người đã sáng chế ra chiếc máy tính cơ khí đầu tiên của nhân loại. Qua thời gian sử dụng, Pascal ngày càng được đông đảo người dùng đánh giá cao, và trở thành một trong các ngôn ngữ lập trình phổ biến nhất hiện nay. Thành công của ngôn ngữ Pascal là ở chỗ: nó là ngôn ngữ đầu tiên đưa ra và thể hiện được khái niệm lập trình có cấu trúc. Ý tưởng về một chương trình có cấu trúc xuất phát từ suy nghĩ cho rằng có thể chia một bài toán lớn, phức tạp thành nhiều bài toán nhỏ, đơn giản hơn. Nếu mỗi bài toán nhỏ được giải quyết bằng một chương trình con, thì khi liên kết các chương trình con này lại sẽ tạo nên một chương trình lớn giải quyết được bài toán ban đầu. Bằng cách chia một chương trình thành các chương trình con như vậy, người thảo chương có thể lập trình để giải quyết riêng lẻ từng phần một, từng khối một, hoặc có thể tổ chức để nhiều người cùng tham gia, mỗi người phụ trách một vài khối. Ðặc biệt khi phải thay đổi hay sửa chữa trong một khối thì điều đó sẽ ít ảnh hưởng đến các khối khác. Tính cấu trúc của ngôn ngữ Pascal còn thể hiện trong việc tổ chức các câu lệnh và tổ chức dữ liệu. Từ các lệnh đã có, người thảo chương có thể nhóm chúng lại với nhau và đặt giữa 57
  2. hai từ khóa Begin và End tạo thành một câu lệnh mới phức tạp hơn gọi là câu lệnh ghép. Ðến lượt mình, hai hay nhiều lệnh ghép lại có thể được nhóm lại để tạo thành một câu lệnh ghép phức tạp hơn nữa… Tương tự như thế, ngôn ngữ Pascal cũng cho phép xây dựng các kiểu dữ liệu phức tạp hơn từ các kiểu dữ liệu đã có. Pascal là một ngôn ngữ không chỉ chặt chẽ về mặt cú pháp mà còn chặt chẽ về mặt dữ liệu. Mỗi biến, mỗi hằng tham gia trong chương trình luôn có một kiểu dữ liệu xác định và chỉ nhận những giá trị có cùng kiểu dữ liệu với nó. Ðiều này buộc người lập trình phải nắm chắc cú pháp và luôn chú ý đến tính tương thích của các biểu thức về mặt kiểu dữ liệu. Chính vì thế, lập trình bằng ngôn ngữ Pascal là một cơ hội tốt không chỉ rèn luyện tư duy mà còn rèn luyện tính cẩn thận và chính xác. Ngày nay, ngôn ngữ Pascal được dùng để viết các chương trình ứng dụng trong nhiều lĩnh vực. Với văn phạm sáng sủa, dễ hiểu, với khả năng đủ mạnh, Pascal được xem là ngôn ngữ thích hợp nhất để giảng dạy ở các trường phổ thông và đại học. 2. CẤU TRÚC CỦA CHƯƠNG TRÌNH PASCAL 2.1. Ví dụ mở đầu Để có một cái nhìn tổng quan trước khi đi vào các vấn đề chi tiết của ngôn ngữ Pascal, xin hãy cùng xem chương trình sau: Bài toán: Viết chương trình để nhập vào độ dài hai cạnh của một hình chữ nhật, tính và in lên màn hình diện tích và chu vi của hình chữ nhật đó. Nếu gọi hai cạnh của hình chữ nhật là a và b, gọi diện tích và chu vi lần lượt là S và P thì công thức tính S và P là: S = a*b P = 2*(a+b) 58
  3. Chương trình cụ thể như sau: PROGRAM VIDU; {Tinh dien tich va chu vi hinh chu nhat} Uses CRT; Var a, b, S, P: Real; Begin Clrscr; Write( ‘Nhap chieu dai: ‘); Readln(a); Write( ‘Nhap chieu rong: ‘); Readln(b); S:=a*b; P:=2* (a+b); Writeln (‘Dien tich = ‘, S:8:2); Writeln (‘Chu vi = ‘, P:8:2); Readln; End. Giải thích các dòng trong chương trình: + {Tinh dien tich va chu vi hinh chu nhat} Đây là lời chú giải, nêu lên mục đích của chương trình. + Uses CRT; 59
  4. Khai báo sử dụng thư viện CRT của Turbo Pascal. + Var a, b, S, P: Real; Khai báo bốn biến a, b, S, P có kiểu dữ liệu là số thực (Real). + Begin Lệnh bắt đầu chương trình + Clrscr; Lệnh xóa màn hình. + Write(‘Nhap chieu dai: ‘); Lệnh in lên màn hình câu ‘Nhap chieu dai: ‘nhằm nhắc người dùng nhập vào số đo chiều dài. + Readln(a); Lệnh nhập dữ liệu cho biến a. + Write( ‘Nhap chieu rong: ‘); Lệnh in lên màn hình câu ‘Nhap chieu rong: ‘nhằm nhắc người dùng nhập vào số đo chiều rộng. + Readln(b); Lệnh nhập dữ liệu cho biến b. + S:= a* b; Lệnh tính diện tích S của hình chữ nhật. + P:= 2*(a+b); Tương tự, lệnh tính chu vi P của hình chữ nhật. + Writeln(‘Dien tich = ‘, S:8:2); 60
  5. Lệnh này in lên màn hình câu ‘Dien tich= ‘, kế đó in giá trị của biến S. Chỉ thị S:8:2 ấn định dành 8 cột trên màn hình để in giá trị của S, trong đó có hai cột để in phần thập phân. + Writeln(‘Chu vi = ‘, P:8:2); Lệnh này in lên màn hình câu ‘Chu vi = ‘, kế đó in giá trị của chu vi P có cả thảy 8 chữ số, trong đó có 2 số phần lẻ. + Readln; Lệnh dừng màn hình để xem kết quả chạy chương trình. + End. Dấu hiệu kết thúc chương trình. 2.2. Cấu trúc chung của chương trình Pascal Chương trình là một dãy các câu lệnh chỉ thị cho máy các công việc phải thực hiện. Một chương trình Pasccal đầy đủ gồm ba phần chính: + Phần tiêu đề + Phần khai báo + Phần thân chương trình Program Têntựđặt; {Phần tiêu đề} {Phần khai báo } Uses ... {khai báo sử dụng thư viện chuẩn} Label ... {khai báo nhãn} Const ... {khai báo hằng} Type ... {khai báo kiểu dữ liệu} Var ... {khai báo biến} Function ... {khai báo các chương trình con} 61
  6. Procedure ... {hàm và thủ tục} {Phần thân chương trình } Begin {Các lệnh} End. 2.2.1. Phần tiêu đề chương trình Phần này bắt đầu bằng từ khóa Program, sau đó ít nhất là một khoảng trắng và một tên do người dùng tự đặt, cuối cùng kết thúc bằng dấu chấm phẩy ‘;’. Ví dụ: Program Btap1; hoặc: Program Giai_pt_bac2; Phần tiêu đề chiếm một dòng, còn gọi là phần đầu của chương trình, nó có thể không có cũng được. 2.2.2. Phần khai báo Phần khai báo có nhiệm vụ giới thiệu và mô tả các đối tượng, các đại lượng sẽ tham gia trong chương trình, giống như ta giới thiệu các thành viên trong một cuộc họp. Nó gồm khai báo sử dụng thư viện chuẩn, khai báo nhãn, khai báo hằng, khai báo kiểu dữ liệu mới, khai báo biến, và khai báo các chương trình con. Tùy theo yêu cầu cụ thể mà mỗi khai báo này có thể có hoặc không. Khai báo nhãn (Label) chỉ dùng khi trong chương trình có sử dụng lệnh nhảy vô điều kiện GOTO. Nhược điểm của lệnh GOTO là làm mất tính cấu trúc của chương trình, trong khi có thể thay thế nó bằng các câu lệnh có cấu trúc của Pascal. Vì thế, để rèn luyện kỹ năng lập trình có cấu trúc, chúng ta sẽ không dùng lệnh GOTO trong giáo trình này. 62
  7. Các thủ tục và hàm được dùng khi có nhu cầu thiết kế các chương trình lớn, phức tạp. Đối với các bài toán nhỏ, đơn giản, việc sử dụng chương trình con là chưa cần thiết. Chi tiết về phần này sẽ được trình bày kỹ trong các bài sau. Sau đây ta điểm qua vài nét về các khai báo thông dụng nhất. a) Khai báo hằng và khai báo biến Biến là đại lượng có giá trị thay đổi được, còn Hằng là đại lượng có giá trị không đổi, chúng được dùng trong chương trình để lưu trữ các dữ liệu, tham gia vào các biểu thức tính toán và các quá trình xử lý trong máy. Việc khai báo có tác dụng xác định tên và kiểu dữ liệu của biến hay hằng. Biến và hằng là những thành phần khó có thể thiếu được trong một chương trình. Để khai báo biến ta dùng từ khóa Var, để khai báo hằng ta dùng từ khóa Const, ví dụ: Const N=10; Var x, y: Real; i, k: Integer; b) Khai báo (định nghĩa) một kiểu dữ liệu mới Ngoài các kiểu dữ liệu mà bản thân ngôn ngữ đã có sẵn như kiểu thực, kiểu nguyên, kiểu ký tự, kiểu lôgic,... người dùng có thể tự xây dựng các kiểu dữ liệu mới phục vụ cho chương trình của mình, nhưng phải mô tả sau từ khóa TYPE. Khi đã định nghĩa một kiểu dữ liệu mới, ta có thể khai báo các biến thuộc kiểu dữ liệu này. Ví dụ, ta định nghĩa một kiểu dữ liệu mới có tên là Mang: Type Mang = Array[1..10] of Real; Bây giờ có thể khai báo hai biến A và B có kiểu dữ liệu là kiểu Mang: Var A, B: Mang; 63
  8. c) Khai báo sử dụng thư viện chuẩn Turbo Pascal có sẵn một số hàm và thủ tục chuẩn, chúng được phân thành từng nhóm theo chức năng mang các tên đặc trưng, gọi là các thư viện hay đơn vị chương trình (Unit), như: Crt, Graph, Dos, Printer... Muốn sử dụng các hàm hay thủ tục của thư viện nào, ta phải khai báo có sử dụng thư viện đó, lời khai báo phải để ở ngay sau phần tiêu đề của chương trình theo cú pháp: Uses danhsáchthưviện; Ví dụ: do thủ tục Clrscr nằm trong thư viện CRT, nên nếu trong chương trình mà có dùng lệnh Clrscr, thì phải khai báo: Uses CRT; Muốn sử dụng cả hai thư viện CRT và GRAPH, ta khai báo: Uses CRT, GRAPH; 2.2.3. Phần thân chương trình Đây là phần chủ yếu nhất của một chương trình, bắt buộc phải có. Thân chương trình bắt đầu bằng từ khóa BEGIN và kết thúc bằng END. (có dấu chấm ở cuối). Giữa khối BEGIN và END là các lệnh. Mỗi lệnh phải kết thúc bằng dấu chấm phẩy ‘;’. Một lệnh, nếu dài, thì có thể viết trên hai hay nhiều dòng, ví dụ: Writeln(‘Phuong trinh co hai nghiem la X1= ‘, X1:8:2,’va X2= ‘, X2:8:2); Ngược lại, một dòng có thể viết nhiều lệnh miễn là có dấu ‘;’ để phân cách các lệnh đó, chẳng hạn: Write(‘Nhap A, B, C: ‘); Readln(A,B,C); Thông thường mỗi dòng chỉ nên viết một lệnh để dễ đọc, dễ kiểm tra lỗi. 64
  9. 3. CÁC PHẦN TỬ CƠ BẢN CỦA PASCAL 3.1. Tập ký tự cơ bản Mỗi ngôn ngữ đều được xây dựng từ một tập ký tự nào đó. Nhiều ký tự nhóm lại với nhau tạo nên các từ. Nhiều từ liên kết với nhau theo một qui tắc ngữ pháp nhất định (gọi là văn phạm) thì tạo nên các mệnh đề. Trong các ngôn ngữ thảo chương, mệnh đề còn được gọi là câu lệnh. Một tập hợp các câu lệnh được sắp xếp theo một trật tự nhất định nhằm chỉ thị cho máy các thao tác phải thực hiện tạo thành một chương trình. Các chương trình được soạn thảo bởi người thảo chương và được lưu trữ trên đĩa dưới dạng các tập tin. Ngôn ngữ Pascal được xây dựng trên bộ ký tự cơ bản, gồm: + Các chữ cái latinh: A, B, C,...,Z, a, b, c,..., z + Các chữ số: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 + Các ký hiệu đặc biệt: +, -, *, /, =,
  10. set, shl, shr, string, then, to, type, unit, until, uses, var, while, with, xor Các từ khóa có thể viết dưới dạng chữ hoa hay chữ thường hay xen kẽ chữ hoa với chữ thường đều được. Ví dụ viết Begin hay Begin hay BEGIN là như nhau. 3.3. Tên (identifier) Các biến, các hằng, các hàm, các thủ tục,... được sử dụng trong chương trình đều cần phải đặt tên, còn gọi là định danh hay danh hiệu. Các tên này do người thảo chương tự đặt và phải đảm bảo đúng quy tắc: tên phải bắt đầu bằng chữ cái, kế đó có thể là chữ cái, chữ số, hay dấu gạch nối ‘_’. Tên không được đặt trùng với từ khóa. Chiều dài của tên tối đa là 127 ký tự. Thông thường tên nên đặt ngắn gọn và có tính gợi nhớ. Dưới đây là ví dụ về các tên được đặt đúng: + Delta, X1, X2, i, j , Chuc_vu, Luong, So_luong, Don_gia. + Còn các tên: 3ABC, In, Chu vi, Ma-so là sai vì: + 3ABC: bắt đầu bằng số + Chu vi: có chứa ký tự trắng + Ma-so: ký tự ‘-’là dấu trừ chứ không phải gạch nối. + In: trùng với từ khóa In Cũng giống như từ khóa, Tên không phân biệt viết hoa hay viết thường. Ví dụ viết X1 hay x1 cũng chỉ là một tên thôi. Trong Pascal có một số tên đã được đặt sẵn rồi, gọi là tên chuẩn, chẳng hạn: Abs, Arctan, Boolean, Byte, Char, Cos, Copy, Delete, Eof, False, Longint, Ord, Integer, Real, Readln, Writeln, True, Text, ... 66
  11. Mặc dù người lập trìmh có thể đặt một tên mới trùng với một trong các tên chuẩn, song, để đỡ nhầm lẫn, chúng ta nên tránh điều này. 4. CÁC KIỂU DỮ LIỆU ĐƠN GIẢN 4.1. Khái niệm Chức năng của máy điện toán là xử lý các thông tin. Các thông tin được nhập và lưu trữ trong bộ nhớ của máy dưới các dạng khác nhau: có thể là số, là chữ, có thể là hình ảnh, âm thanh,... mà thuật ngữ tin học gọi chung là dữ liệu. Tính đa dạng của dữ liệu đòi hỏi phải tổ chức và phân phối bộ nhớ thích hợp để lưu trữ và xử lý tốt các dữ liệu. Ngôn ngữ thảo chương chia các dữ liệu thành từng nhóm riêng trên đó xây dựng một số phép toán tạo nên các kiểu dữ liệu khác nhau, mỗi kiểu dữ liệu là một tập hợp các giá trị mà một biến thuộc kiểu đó có thể nhận. Khi một biến được khai báo thuộc kiểu dữ liệu nào thì máy sẽ dành cho biến đó một dung lượng thích hợp trong bộ nhớ để có thể lưu trữ các giá trị thuộc kiểu dữ liệu đó. Các kiểu dữ liệu trong ngôn ngữ Pascal được chia ra thành hai loại chính: loại đơn giản và loại có cấu trúc. Mỗi kiểu dữ liệu đơn giản là một tập các giá trị cơ sở có thứ tự. Ví dụ kiểu Integer gồm các số nguyên nằm trong phạm vi từ -32768 đến 32767 và có thứ tự tự nhiên: -32768< ... < -1 < 0 < 1 < ... < 32767 , kiểu lôgic chỉ có hai giá trị False, True với quy ước False < True. Các kiểu dữ liệu có cấu trúc được xây dựng từ các kiểu dữ liệu đơn giản. Mỗi kiểu dữ liệu có cấu trúc là một tập các phần tử thuộc kiểu dữ liệu đơn giản được tổ chức lại theo một quy tắc nhất định . Các kiểu dữ liệu đơn giản gồm có: kiểu nguyên, kiểu thực, kiểu lôgic, kiểu ký tự, kiểu liệt kê và kiểu đoạn con. 67
  12. Các kiểu dữ liệu có cấu trúc gồm có: kiểu mảng, kiểu bản ghi, kiểu tập hợp và kiểu tập tin. Riêng chuỗi ký tự (STRING) là một kiểu dữ liệu đặc biệt, vừa có tính đơn giản lại vừa có tính cấu trúc. Mỗi chuỗi có thể xem là một giá trị, nhưng cũng có thể xem là một mảng các giá trị kiểu ký tự. Vì vậy, việc sử dụng chuỗi cũng có hai mức khác nhau: mức đơn giản và mức có cấu trúc. Các kiểu dữ liệu đơn giản còn được phân thành hai loại: đếm được (Ordinal type) và không đếm được. Kiểu thực thuộc loại không đếm được, các giá trị của nó dày đặc. Tất cả các kiểu dữ liệu đơn giản còn lại: nguyên, ký tự, lôgic, liệt kê và đoạn con đều thuộc loại đếm được (còn gọi là rời rạc). Dưới đây sẽ lần lượt trình bày kỹ về bốn kiểu dữ liệu đơn giản chuẩn và thông dụng: kiểu nguyên, kiểu thực, kiểu logic, kiểu ký tự. Kiểu chuỗi được giới thiệu để có thể sử dụng ngay ở mức đơn giản. 4.2. Kiểu số nguyên 4.2.1. Các kiểu số nguyên Tên kiểu Phạm vi giá trị Số byte ShortInt -128 .. 127 1 Byte 0..255 1 Integer -32768 .. 32767 2 Word 0 .. 65535 2 LongInt -2147483648 .. 2147483647 4 68
  13. Ngoài kiểu Integer là thông dụng nhất, các số nguyên còn được chia ra thành bốn kiểu nữa đó là: Byte, Word, ShortInt và LongInt. Bảng trên liệt kê chi tiết về tên gọi, phạm vi giá trị và độ dài tính theo đơn vị byte của từng kiểu nguyên. Các biến nguyên chỉ có thể nhận các giá trị là các số nguyên nằm trong phạm vi giá trị của biến đó. Khi gán cho một biến một số nguyên nằm ngoài phạm vi của biến thì máy sẽ báo lỗi: "Const out of range". Ví dụ, cho khai báo: Var i: Byte; N: Integer; thì các lệnh đưới đây là đúng: i:= 200; N:= -1500; còn các lệnh dưới đây là bị lỗi: i:= -5; N:= 50000; Ðặc biệt không thể gán một số thực cho một biến nguyên. Câu lệnh sau là sai: N:= 12.5; Khi gặp tình huống này, máy sẽ báo lỗi "Type mismatch". Chú ý Các số nguyên hệ thập lục phân (hệ 16) được biểu diễn bằng cách viết thêm dấu $ ở trước số, ví dụ ba số sau đây: $A, $FF và $10 là các số nguyên viết trong hệ 16. Chúng có giá trị tương ứng trong hệ 10 là: 10, 255 và 16 69
  14. 4.2.2. Các phép toán số học trên số nguyên + Phép cộng và trừ: ký hiệu + và - như thường lệ. + Phép nhân: ký hiệu bằng dấu *, ví dụ 4*2 cho kết quả là 8. + Phép chia: ký hiệu bằng dấu /, ví dụ 6/4 cho kết quả là 1.5. + Phép chia lấy phần nguyên: ký hiệu bằng từ khóa DIV. + Phép lấy phần dư nguyên của phép chia: ký hiệu bằng từ khóa MOD. Ví dụ: 15 DIV 6 cho kết quả là 2. 15 MOD 6 cho kết quả là 3. Các phép toán trên đều cho kết quả là các số nguyên, trừ ra phép chia (/) luôn cho kết quả là một số thực. Vì thế nếu N là một biến nguyên, mà gán: N:= 20/5; thì máy sẽ báo lỗi, bởi vế phải có giá trị kiểu thực (=4.0) mặc dù phần lẻ bằng không. Nhận xét: số nguyên N là chẵn nếu N mod 2 = 0 (tức N chia hết cho 2), ngược lại, là lẻ nếu N mod 2 0. (dấu trong Pascal có nghĩa là khác nhau ). * Thứ tự thực hiện các phép toán cũng giống như thường lệ: + Các biểu thức trong (...) được tính trước tiên + Kế đến là *, /, div, mod + Sau cùng là +, - Ðối với các phép toán cùng thứ tự mà đứng liền nhau thì phép toán nào đứng trước được làm trước. 70
  15. Ví dụ: tính biểu thức sau: 15 mod (2 +4) * 20 div (10 div 4) + 40 mod ( 5* 3) = 15 mod 6 * 20 div 2 + 40 mod 15 = 3 * 20 div 2 + 10 = 60 div 2 + 10 = 30 + 10 = 40 * Ví dụ sau đây là một ứng dụng của các phép toán div, mod: + Ví dụ: Nhập một số tiền N đồng, đổi ra xem được bao nhiêu tờ 5 đồng, bao nhiêu tờ 2 đồng, bao nhiêu tờ 1 đồng sao cho tổng số tờ là ít nhất. Ví dụ N = 43đ = 8 tờ 5đ + 1 tờ 2đ + 1 tờ 1đ. Cách tính như sau: Số tờ 5đ = 43 div 5 = 8 Số tiền dư = 43 mod 5 = 3 Số tờ 2đ = Số tiền dư div 2 = 3 div 2 =1 Số tờ 1đ = Số tiền dư mod 2 = 3 mod 2 = 1 Dưới đây là chương trình cụ thể: PROGRAM VIDU4_1; {Ðổi tiền} Var N, st5, st2, st1, sodu: LongInt; Begin Write(‘Nhap so tien: ’); Readln(N); st5:= N div 5; Sodu:= N mod 5; {tính phần dư} 71
  16. st2:= Sodu div 2; st1:= Sodu mod 2; Writeln(‘KET QUA DOI TIEN LA: ‘); Writeln(‘So to 5đ= ‘, st5); Writeln(‘So to 2đ= ‘, st2); Writeln(‘So to 1đ=‘, st1); Readln; End. 4.2.3. Các phép toán so sánh Ngôn ngữ Pascal có sáu phép toán so sánh được liệt kê trong bảng Ký hiệu Ý nghĩa Ví dụ = bằng nhau x=y khác nhau xy < nhỏ hơn x= lớn hơn hoặc bằng x>=y Kết quả của các biểu thức so sánh là một giá trị lôgic Ðúng (TRUE) hoặc Sai (FALSE). Ví dụ: Biểu thức 5*2=10 cho kết quả là TRUE. 72
  17. Biểu thức 5+2 7 cho kết quả là FALSE. Biểu thức 6 div 2 > 10 div 3 cho kết quả là FALSE. 4.2.4. Các phép toán lôgic trên số nguyên Các phép tính NOT, AND, OR, XOR xử lý các bít nhị phân được xác định như sau: NOT 1 = 0 1 AND 1=1 1 OR 1=1 1 XOR 1=0 NOT 0 = 1 1 AND 0=0 1 OR 0=1 1 XOR 0=1 0 AND 1=0 0 OR 1=1 0 XOR 1=1 0 AND 0=0 0 OR 0=0 0 XOR 0=0 Mỗi số nguyên được biểu diễn trong máy dưới dạng một dãy các bít nhị phân. Số kiểu Integer được biểu diễn bằng 16 bit. Ví dụ: số 1 và số 2 có biểu diễn trong máy lần lượt là: 0000 0000 0000 0001 0000 0000 0000 0011 Phép lấy NOT một số nguyên sẽ đảo tất cả các bít biểu diễn số nguyên đó, tức là 0 thành 1, còn 1 thành 0. Ví dụ: NOT 1 = 1111 1111 1111 1110 NOT 2 = 1111 1111 1111 1100 Phép lấy AND, OR, XOR hai số nguyên được tiến hành bằng cách AND, OR, XOR từng cặp bít tương ứng của hai số đó, ví dụ: 1 OR 2 = 0000 0000 0000 0011= 2 1 AND 2 = 0000 0000 0000 0001= 1 73
  18. 4.2.5. Các phép dịch chuyển số học SHR và SHL N SHR k: dịch các bít của số nguyên N sang phải đi k bit. N SHL k: dịch các bít của số nguyên N sang trái đi k bit. Có thể chứng minh được: N SHR k = N div 2k N SHL k = N * 2k Ví dụ: 120 shr 4 = 7, vì: 120 shr 4 = 120 div 24 = 120 div 16 = 7. 120 shl 3 = 960, vì: 120 shl 3 = 120 * 23 = 120 * 8 = 960. Hai phép toán SHR và SHL được dùng khi muốn tăng tốc độ tính toán trên các số nguyên. 4.2.6. Các hàm có đối số nguyên * Hàm PRED(k): đối số k nguyên, trả về số nguyên đứng ngay trước k, tức là k-1 . Ví dụ: Pred (5) = 4, Pred (-6) = -7. * Hàm SUCC(k): đối số k nguyên, trả về số nguyên đứng ngay sau k, tức là k+1 . Ví dụ: Succ (5) = 6, Succ (-6) = -5. Nhận xét Lệnh k:=k+1; tương đương với lệnh k:=Succ(k); Lệnh k:=k-1; tương đương với lệnh k:=Pred(k); * Hàm ODD(k): đối số k nguyên, trả về giá trị logic là TRUE nếu k lẻ, là FALSE nếu k chẵn. 74
  19. Ví dụ: Odd(15) = True; Odd(4) = False. + Ví dụ: Nhập số nguyên N, nếu N chẵn thì in ra chữ chẵn, nếu N lẻ thì in ra chữ lẻ. Chương trình như sau: PROGRAM VIDU4_2; Var N: Integer; Begin Write(‘Nhap so N:’); Readln(N); If Odd(N) = TRUE then Write(N, ‘la so le’) Else Write(N, ‘la so chan’); Readln; End. 4.2.7. Các thủ tục có đối số nguyên Có hai thủ tục khá thông dụng là: * Thủ tục INC(k): tăng k lên một đơn vị. Ví dụ, sau khi thực hiện các lệnh: k:=5; Inc(k); thì giá trị sau cùng của k là 6. Vậy, lệnh Inc(k); tương đương với lệnh k:=k+1; hay k:=Succ(k); * Thủ tục DEC(k): giảm k đi một đơn vị. Ví dụ, sau khi thực hiện các lệnh: 75
  20. k:=5; Dec(k); thì giá trị của k sẽ là 4. Vậy, lệnh Dec(k); tương đương với lệnh k:=k-1; hay k:=Pred(k); 4.3. Kiểu số thực 4.3.1. Kiểu Real và các kiểu mở rộng Kiểu Real là kiểu số thực thông dụng nhất dùng để biểu diễn các số thực x có trị tuyệt đối |x| nằm trong khoảng từ 2.9*10-39 đến 1.7*10+38. Nếu x > 1.7*10+38 thì không biểu diễn x trong máy được, còn nếu |x| < 2.9*10-39 thì x được coi là bằng 0. Có hai cách biểu diễn các số thực: * Cách 1: Viết bình thường, trong đó dấu phẩy thập phân được thay bằng dấu chấm thập phân. Ví dụ: 45.0 -256.45 +122.08 * Cách 2: Viết số dưới dạng khoa học: 1.257E+01 (có giá trị = 1.257*101 = 12.57 ) 1257.0E-02 (có giá trị = 1257*10-2 = 12.57 ) Trong dạng này số gồm có hai phần, phần đứng trước E gọi là phần định trị, được viết theo cách 1, phần đứng sau E gọi là phần bậc, gồm dấu cộng hoặc trừ, tiếp đến là một số nguyên. Số viết theo cách 1 còn gọi là số có dấu chấm thập phân cố định, số viết theo cách 2 còn gọi là số có dấu chấm thập phân di động hay số dạng khoa học (Scientific). Ví dụ: Muốn khai báo hai biến x, y kiểu real, ta viết: 76
ADSENSE
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản