1. Trang chủ
  2. » Giáo Dục - Đào Tạo

LẬP TRÌNH CHO MÁY TÍNH ĐIỆN TỬ

65 58 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 65
Dung lượng 700,45 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chương 6 LẬP TRÌNH CHO MÁY TÍNH ĐIỆN TỬ Chương này sẽ trình bày các khái niệm cơ bản về thuật toán và việc sử dụng ngôn ngữ lập trình Pascal để giải quyết bài toán trên máy tính điện tử

Trang 1

Chương 6

LẬP TRÌNH CHO MÁY TÍNH ĐIỆN TỬ

Chương này sẽ trình bày các khái niệm cơ bản về thuật toán và việc sử dụng ngôn ngữ lập trình Pascal để giải quyết bài toán trên máy tính điện tử Qua đó, người học có thể nắm bắt được những mấu chốt của ngôn ngữ lập trình Pascal và có thể xây dựng những chương trình ứng dụng đơn giản, giúp người học có cái nhìn tổng quan về cách giải quyết công việc trên máy tính điện tử bằng chương trình

Nội dung chính của chương gồm:

- Tổng quan về lập trình cho máy tính điện tử: Phần này sẽ giới thiệu về thuật toán; cách thức trình bày một thuật toán và giới thiệu về các ngôn ngữ lập trình – công cụ biểu diễn thuật toán vào máy tính điện tử

- Giới thiệu ngôn ngữ lập trình Pascal: Trình bày sơ lược

về sự hình thành và phát triển của ngôn ngữ Pascal và các yếu tố cơ sở trong ngôn ngữ Pascal

- Sử dụng cơ bản ngôn ngữ lập trình Pascal: Giới thiệu các đối tượng được sử dụng trong ngôn ngữ Pascal

- Lập trình tuần tự: Giới thiệu cho người học về dạng thức chương trình đơn giản nhất cho máy tính điện tử Các công cụ giúp người học có thể xây dựng được một chương trình đơn giản

- Lập trình phân nhánh: Trình bày về công cụ giải quyết các bài toán có sự lựa chọn, có điều kiện thực thi đối với một hay một nhóm công việc

- Lập trình chu trình: Trình bày về công cụ để giải quyết các bài toán có những phép toán giống như nhau, chỉ khác nhau về dữ liệu đầu vào

- Dữ liệu mảng: Giới thiệu một kiểu dữ liệu có cấu trúc trong Pascal đồng thời qua những ví dụ giúp người học

Trang 2

có thể nắm bắt khả năng giải quyết các bài toán trên thực

vô giác nên không thể hiểu hay nhận biết được các yêu cầu của người sử dụng và càng không thể suy luận để giải quyết các yêu cầu mà người sử dụng đưa ra Để giải quyết bất cứ công việc nào, dù là nhỏ nhất thì máy tính điện tử cũng phải được hướng dẫn một cách tỷ mỉ từng thao thác cần thiết phải tiến hành Mọi thao tác này được ghi vào thành một bảng hướng dẫn và đó được gọi là thuật toán

Thuật toán là một bảng hướng dẫn gồm hữu hạn các mệnh lệnh, quy định chính xác các thao tác hay phép toán mà máy tính điện

tử cần thực hiện một cách máy móc theo trình tự vạch sẵn để giải quyết bài toán hay nhiệm vụ nào đó

Trong toán học, để giải quyết một lớp bài toán đặc trưng nào đó, người ta có thể ghi nhận lại phương pháp giải quyết lớp bài toán

đó với các bước thực hiện cụ thể Khi cần phải giải một bài toán

cụ thể nào đó thuộc lớp bài toán này thì người giải chỉ cần áp dụng máy móc các bước thực hiện đó thì sẽ có được lời giải Ví

dụ để giải bài toán ax2 + bx + c = 0 Dù a, b, c nhận giá trị như thế nào, có thể là các hằng số, biểu thức hay đa thức thì người giải chỉ cần thực hiện theo 3 bước

1/ Tính giá trị delta

Trang 3

2/ Xét giá trị delta : nếu delta âm thì kết luận bài toán

vô nghiệm ngược lại bài toán có 02 nghiệm

3/ Tính nghiệm của bài toán theo công thức

Với 3 bước thao tác trên, người ta gọi đó là thuật toán giải phương trình bậc 2

b Tính chất của thuật toán

Thuật toán có nhiều tính chất nhưng để xây dựng một thuật toán cần phải đảm bảo tuân thủ 03 tính chất cơ bản của thuật toán đó là:

- Tính chính xác: Một thao tác của thuật toán phải rõ rang, không gây nhầm lẫn hiểu theo nhiều nghĩa khác nhau Hay nói cách khác là trong cùng một điều kiện nếu thực hiện cùng một thao tác thì phải cho ra cùng một kết quả

- Tính phổ dụng: Thuật toán được xây dựng đảm bảo dung

để giải quyết một lớp bài toán chứ không xây dựng để giải quyết một bài toán cụ thể

- Tính kết thúc: Các thao tác của thuật toán phải đảm bảo dừng lại và cho ra kết quả sau một số hữu hạn các bước thực hiện

c Biểu diễn thuật toán bằng sơ đồ khối

Sơ đồ khối là công cụ để biểu diễn thuật toán một cách trực quan, cho phép tiện theo dõi các tiến trình và tránh các sai sót nhầm lẫn

Để biểu diễn thuật toán bằng sơ đồ khối người ta sử dụng các ký pháp sau;

- Đường mũi tên: Để chỉ hướng tiến trình của thuật toán

- Khối bắt đầu hay kết thúc: Chỉ ra điểm bắt đầu hay kết thúc thuật toán

Trang 4

Mỗi thuật toán chỉ có một khối bắt đầu duy nhất Bên trong khối

có thể ghi chữ B (Begin hay Bắt đầu) Còn khối kết thúc, mỗi thuật toán có thể có nhiều khối tương ứng với số khả năng kết thúc khác nhau , nên trong khối được ghi E (End) hoặc K (Kết thúc)

- Khối nhập dữ liệu: Ghi danh sách các đại lượng cần được nhận giá trị

- Khối xử lý: Ghi các công thức hay phương trình để tính toán, xử lý dữ liệu

- Khối kiểm tra điều kiện: Ghi biểu thức logic, mà kết quả của nó sẽ xác định hướng tiến trình tiếp theo

B

E

Trang 5

- Khối kết xuất thông tin: Ghi danh sách các đại lượng đã được tính toán, xử lý và cần được đưa ra

- Khối nối tiếp: Ghi cặp ký hiệu, được dùng khi các đường tiến trình chồng chéo nhau hoặc sơ đồ khối được biểu diễn ở các phạm vi khác nhau

Ví dụ: Lập sơ đồ khối thuật toán để giải quyết bài toán giải phương trình bậc hai:

Trang 7

Ví dụ: Lập sơ đồ khối thuật toán nhập dữ liệu, tìm và đưa ra giá trị lớn nhất và nhỏ nhất trong dãy A gồm N phần tử

6.1.2 Ngôn ngữ lập trình (Programing Language)

Ngôn ngữ lập trình là một hệ thống được ký hiệu hóa để miêu tả những tính toán (qua máy tính) trong một dạng mà cả con người

và máy đều có thể đọc và hiểu được

Trang 8

Theo khái niệm ở trên thì một ngôn ngữ lập trình phải thỏa mãn được hai điều kiện cơ bản là:

- Nó phải dễ hiểu và dễ sử dụng đối với người lập trình, để con người có thể dùng nó giải quyết các bài toán khác

- Nó phải miêu tả một cách đầy đủ và rõ ràng các tiến trình (tiếng Anh: process), để có thể chạy được trên các máy tính khác

Một tập hợp các chỉ thị được biểu thị nhờ ngôn ngữ lập trình để thực hiện các thao tác máy tính nào đó thông qua một chương trình

Như vậy, theo khái niệm, mỗi ngôn ngữ lập trình cũng chính là một chương trình, nhưng có thể được dùng để tạo nên các chương trình khác Một chương trình máy tính được viết bằng một ngôn ngữ lập trình thì những chỉ thị (của riêng ngôn ngữ ấy) góp phần tạo nên chương trình được gọi là mã nguồn của chương trình ấy

Thao tác chuyển dạng từ mã nguồn sang thành chuỗi các chỉ thị máy tính được thực hiện hoàn toàn tương tự như là việc chuyển dịch giữa các ngôn ngữ tự nhiên của con người Các thao tác này gọi là biên dịch (hay ngắn gọn hơn là dịch) Người ta còn phân việc biên dịch làm hai loại tùy theo quá trình dịch xảy ra trước quá trình thực thi các tính toán hay nó xảy ra cùng lúc với quá trình tính toán:

+ Thông dịch: Một phần mềm thông dịch là một phần mềm có khả năng đọc, chuyển dịch mã nguồn của một ngôn ngữ và ra lệnh cho máy tính tiến hành các tính toán dựa theo cú pháp của ngôn ngữ

+ Biên dịch: Một phần mềm biên dịch hay ngắn gọn hơn trình dịch là phần mềm có khả năng chuyển dịch mã nguồn của một

Trang 9

ngôn ngữ ban đầu sang dạng mã mới thuộc về ngôn ngữ cấp thấp hơn

Ngôn ngữ cấp thấp nhất là một chuỗi các chỉ thị máy tính mà có thể được thực hiện trực tiếp bởi chính máy tính (thông qua các theo tác trên vùng nhớ) Trước đây, hầu hết các trình dịch cũ thường phải thông dịch từ mã nguồn sang bộ mã phụ (các tệp có dang *.obj), rồi sau đó, mới biên dịch tiếp sang các tập tin thi hành Ngày nay, hầu hết các trình dịch đều có khả năng viên dịch mã nguồn trực tiếp sang thành các tập tin thi hành hay biên dịch sang các dạng mã khác thấp hơn tuỳ theo yêu cầu của người lập trình

Điểm khác nhau giữa thông dịch và biên dịch là: Trình thông dịch sẽ dịch từng câu lệnh một và chương trình đích sẽ không được lưu lại Còn trình biên dịch sẽ dịch toàn bộ chương trình, cho ra chương trình đích được lưu lại trong máy tính rồi mới thực hiện chương trình

Một chương trình máy tính có thể được thực thi bằng cách tổ hợp của việc biên dịch và thông dịch

6.2 GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH PASCAL

6.2.1 Sơ lƣợc sự hình thành và phát triển của ngôn ngữ lập trình Pascal

PASCAL là ngôn ngữ lập trình được giáo sư Niklaus Wirth ở trường Đại học Zurich, Thụy Sỹ phát minh ra vào những năm

1970 Ông đặt tên ngôn ngữ này là PASCAL để tưởng nhớ nhà toán học người Pháp ở thế kỷ 17 Blaise Pascal Ngôn ngữ PASCAL được hình thành với mục đích ban đầu nhằm hướng dẫn sinh viên trong các trường đại học một thói quen viết chương trình có cấu trúc sáng sủa, rõ ràng, dễ đọc và dễ hiểu cho những người khác Nhưng cũng chính vì lý do đó mà ngôn ngữ PASCAL được phát triển nhanh chóng và được thương mại

Trang 10

hóa Trong quá trình phát triển, nó đã hình thành các nhánh ngôn ngữ khác nhau nhưng phổ biến hơn cả là:

- ISO PASCAL được gọi là PASCAL chuẩn (International Standard Organization)

- ANSI PASCAL (Amerrican National Satandard Institute)

6.2.2 Các yếu tố cơ sở của ngôn ngữ Pascal

+ Bộ ký tự

Cũng như mọi ngôn ngữ của con người hay máy tính điện tử PASCAL có một bộ ký tự để biểu diễn nội dung cần diễn đạt của ngôn ngữ Bộ ký tự trong TURBO PASCAL bao gồm

- Các chữ cái: Là các chữ cái trong bảng chữ cái tiếng Anh

từ A đến Z và từ a đến z

- Các chữ số: Là các chữ số hệ thập phân từ 0 đến 9

Trang 11

- Các ký hiệu đặc biệt: Là các ký tự đặc biệt có trên bàn phím ký tự của máy tính điện tử

+ Từ khóa (keyword): là một từ tiếng Anh hoặc cách viết tắt của cụm từ có ý nghĩa xác định trong ngôn ngữ lập trình PASCAL

Bộ từ khóa của ngôn ngữ Pascal bao gồm:

Từ khóa để khai báo: Const, Var, Type, Array, String, Record,…

Từ khóa của lệnh phân nhánh : If … Then … Else, Case

… Of

Từ khóa của của lệnh chu trình : For … To … Do, While

… Do, Repeat … Until

Từ khóa điều khiển : With, Goto, Exit

Từ khoá toán tử : And, Or, Not, In, Div, Mod

+ Tên: Là một dãy các ký tự, gồm các chữ cái, chữ số và dấu gạch nối Tên bắt đầu bởi chữ cái và không chứa các ký tự toán

tử hay dấu khoảng trống

Tên dùng để chỉ một đối tượng được sử dụng trong chương trình, do người sử dụng đặt ra Khi đặt tên cho đối tượng, người

sử dụng cần lưu ý:

- Tên phải là duy nhất, dãy ký tự đã dùng đặt cho đối tượng này thì không đặt được cho đối tượng khác Trong Pascal, các ký tự trong dãy được dùng đặt tên không phân biệt chữ hoa hay chữ thường

- Dãy ký tự được dùng đặt tên chỉ có 63 ký tự đầu là có ý nghĩa Nếu dãy quá dài thì từ ký tự thứ 64 trở đi, Pascal

Trang 12

Trong số các dãy trên thì dãy b là không sử dụng để đạt được tên

vì chứa các dấu khoảng trống, dãy c không sử dụng được vì bắt đầu bằng chữ số, dãy e và g không sử dụng được vì chứa dấu toán tử (dấu gạch dưới _ khác với dấu toán tử -)

Ngoài ra, Pascal có những tên chuẩn dùng để chỉ các đối tượng

đã được Pascal định nghĩa sẵn (kiểu dữ liệu, như thủ tục xuất, nhập dữ liệu, như các hàm có sẵn,…) bao gồm

Boolean, Char, Integer, Word, Byte, Real, Text

False, True, Maxint

Abs, Arctan, Chr, Cos, Sin, Eof, Eoln, Exp, Ln, Odd, Ord, Round, Trunc, Sqr, Sqrt, Pred, Succ

Dispose, New, Get, Put, Read, Readln, Write,Writeln, Reset, Rewrite

+ Lời giải thích: là các dòng văn bản hoặc đoạn chương trình không được thi hành khi chương trình thực hiện

Như để ghi chú cho công việc của một dòng lệnh hoặc một đoạn chương trình, người sử dụng có thể diễn tả bằng ngôn ngữ tự nhiên nhưng phải đảm bảo để máy tính nhận biết và không thi hành nó bằng cách đặt vào trong cặp “{ ….}” hoặc cặp

“(*….*)” Lúc này trong cửa sổ soạn thảo chương trình của Pascal, dòng chú thích sẽ bị mờ đi và chúng ta hiểu rằng đó là phần mà máy tính sẽ không kiểm soát và thực hiện chúng

Ví dụ:

Var X: Integer; (* X được khai báo là biến thuộc kiểu số nguyên *)

Trang 13

+ Dấu “;”: Được dùng làm dấu ngăn cách giữa các câu lệnh trong ngôn ngữ Pascal Không hiểu theo nghĩa là dấu kết thúc lệnh

Có những ngôn ngữ lập trình quy định mỗi câu lệnh phải viết trên một dòng, nhưng với ngôn ngữ Pascal trên một dòng có thể viết nhiều câu lệnh và một câu lệnh có thể viết trên nhiều dòng Vậy để máy tính có thể phân biệt câu lệnh này với câu lệnh khác, Pascal sử dụng dấu “;” để ngăn cách chúng với nhau

Ví dụ:

Write(„Nhap mot co nguyen n = „); Readln(n);

If n mod 2 = 0 Then Writeln(„n la mot so chan‟)

Else Writeln(„n la mot so le‟);

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

+ Phần tên chương trình: Bắt đầu bởi từ khóa Program theo quy cách

Program <tên chương trình>;

Ví dụ:

Program Baitap1;

Đây là phần giúp người lập trình phân biệt giữa chương trình này với chương trình khác khi công việc soạn thảo chương trình chưa hoàn tất Nó không có ý nghĩa với một chương trình sau khi đã được dịch sang thành ngôn ngữ máy Chính vì vậy đây là phần không bắt buộc phải có trong chương trình Pascal Nhưng nếu đã viết thì phải đảm bảo viết đúng theo quy tắc

+ Phần khai báo: các đại lượng, các đối tượng được sử dụng trong chương trình đều phải được khai báo trước tại phần này Trừ các đại lượng chuẩn đã được Pascal định nghĩa sẵn

Phần khai báo trong Pascal thường có các khai báo sau:

User : Khai báo các đơn vị chương trình

Const : Khai báo các hằng

Trang 14

Type : Định nghĩa các kiểu dữ liệu

Var : Khai báo các biến

Label : Khai báo các nhãn chương trình

Procedure : Khai báo các chương trình con

Function : Khai báo các hàm do người lập trình định nghĩa Khi khai báo người sử dụng khai báo hết các đại lượng cùng nhóm, loại rồi mới chuyển sang nhóm, loại mới Chứ không khai báo một nhóm các đối tượng cùng loại bởi nhiều từ k

Ten : Array [1 N] of String[25];

Tuoi: Array [1 N] of Integer;

- Phần thân chương trình: được bắt đầu bằng từ khóa “Begin” và kết thúc bởi từ khóa “End.” Giữa cặp từ khóa này là các lệnh tương ứng với các thao tác của thuật toán

Mỗi chương trình Pascal chỉ có duy nhất một từ khóa “End.”, từ khóa này báo cho máy tính biết rằng mọi công việc giao cho chương trình đã hoàn tất, các lệnh ghi sau từ khóa này sẽ không

Trang 15

6.2.4 Soạn thảo và chạy thử nghiệm chương trình Pascal

Để đưa một chương trình vào máy tính điện tử qua hệ thống các quy tắc của ngôn ngữ lập trình Pascal, người sử dụng thực hiện tệp tin TURBO.EXE Trên cửa sổ soạn thảo của Pascal, ngưởi sử dụng nhập các lệnh vào theo đúng quy tắc của ngôn ngữ lập trình Trước khi dịch chương trình đã được soạn thảo thành một tệp thi hành (tệp chương trình có phần mở rộng EXE), người sử dụng cần thử nghiệm để kiểm tra các kết quả đạt được bằng cách ấn tổ hợp phím CTRL +F9 tại cửa sổ soạn thảo chương trình (hoặc vào thực đơn thanh ngang – chọn Run, trong thực đơn đổ xuống chọn mục Run)

6.3 SỬ DỤNG CƠ BẢN NGÔN NGỮ LẬP TRÌNH PASCAL 6.3.1 Hằng

Hằng là đại lượng nhận một giá trị và nó không thay đổi trong suốt quá trình chương trình thực hiện Các hằng phải được khai báo trước khi sử dụng, trừ các hằng chuẩn đã được Pascal định nghĩa sẵn

Trong Pascal, có các hằng được định nghĩa sẵn:

Trang 16

3 False Logic False

Trong Pascal các kiểu dữ liệu được phân thành 4 nhóm:

+ Kiểu dữ liệu vô hướng (còn gọi là kiểu giản đơn)

- Kiểu đơn giản chuẩn bao gồm:

Trang 17

o Kiểu Logic

o Kiểu số nguyên

o Kiểu số thực

o Kiểu ký tự

- Kiểu vô hướng do người lập trình tự định nghĩa

- Kiểu khoảng con

- Kiểu liệt kê

+ Kiểu dữ liệu có cấu trúc

+ Kiểu dữ liệu con trỏ

Trong các kiểu dữ liệu nêu trên thì dữ liệu kiểu vô hướng và kiểu dãy ký tự được sử dụng nhiều nhất vì tính đơn giản và thuận tiện, nhất là đối với những người mới nhập môn về lập trình

Kiểu dữ liệu logic (Boolean)

Dữ liệu kiểu logic là dữ liệu chỉ nhận các giá trị logic là True và False Kiểu logic được định nghĩa bởi từ khóa Boolean

Các biến nhận giá trị logic được gọi là biến logic, và biến có giá trị True sẽ “>” biến có giá trị False

Một số toán tử liên quan đến biến logic bao gồm:

- Toán tử quan hệ: = (bằng); > (lớn hơn); >= (lớn hơn hoặc bằng); < (nhỏ hơn); <= (nhỏ hơn hoặc bằng) và <> (khác)

- Toán tử logic: And (hội); Or (tuyển); Not (phủ định hay còn gọi là đảo) và Xor (hoặc…triệt tiêu)

Với các toán tử logic, chúng ta có thể xem bảng sau:

Trang 18

A B Not A A and B A or B A xor B

Các biến kiểu logic được khai báo thông qua từ khóa Boolean

Ví dụ: Giới tính được quy ước nam là True và nữ là False, để khai báo biến giới tính trong Pascal sẽ được viết:

Var

Gioitinh : Boolean;

Tuy nhiên, cũng cần lưu ý rằng, biến logic không nhận giá trị thông qua việc nhập trực tiếp qua bàn phím

Kiểu dữ liệu số nguyên (Integer)

Dữ liệu kiểu số nguyên là tập hợp các số nguyên nằm trong khoảng – 32768 đến +32767 Kiểu dữ liệu nguyên được định nghĩa bởi từ khóa Integer

Các biến kiểu số nguyên được khai báo thông qua từ khóa Integer

Ví dụ: Để khai báo số sinh viên trong một lớp học và số môn học trong một học kỳ Đây là 2 giá trị nguyên, trong Pascal có thể được khai báo như sau:

Var

SoSV, SoMH: Integer;

Một số toán tử liên quan đến dữ liệu kiểu nguyên:

- Toán tử quan hệ: = (bằng); > (lớn hơn); >= (lớn hơn hoặc bằng); < (nhỏ hơn); <= (nhỏ hơn hoặc bằng) và <> (khác)

- Toán tử nguyên: + (cộng); - (trừ); * (nhân); DIV (chia lấy phần nguyên) và MOD (chia lấy phần dư)

Ví dụ:

Trang 19

(13 mod 3): sẽ cho kết quả là một số nguyên chính là phần dư của việc chia 13 cho 3 và có giá trị là 1

(13 div 4): sẽ cho kết quả là một số nguyên chính là thương nguyên của việc chia 13 cho 4 và có giá trị là 3 Khi viết các phép toán thuộc kiểu nguyên trong Pascal cần chú ý đến miền giá trị của nó Ví dụ:

và khi đó Pascal sẽ đưa ra thông báo:

“Error 76: Constant out of range”

Bên cạnh cách biểu diễn số nguyên như ở trên (biểu diễn bằng 2 byte), Pascal còn có thêm một kiểu đơn giản chuẩn là kiểu biểu diễn số nguyên bằng một byte Phạm vi biểu diễn số nguyên khi này là từ 0 đến 255 và được gọi là kiểu Byte

Ngoài ra, Turbo Pascal từ Version 4.0 trở đi và một số Pascal khác đã đưa thêm vào các định nghĩa kiểu số nguyên mới với các từ khoá Word, ShortInt (Short Integer), LongInt (Long Integer)

Trang 20

LongInt -2147483648 3147483647 4

Kiểu dữ liệu số thực (Real)

Dữ liệu kiểu số thực là tập hợp các giá trị có thể biểu diễn được trong máy tính điện tử Kiểu dữ liệu thực được định nghĩa bởi từ khóa Real

Dữ liệu kiểu số thực trong Pascal có thể được biểu diễn bằng hai cách:

- Số thực dấu phảy tĩnh: Được biểu diễn bởi 02 phần: phần nguyên và phần thập phân, ngăn cách với nhau bởi dấu chấm

Ví dụ: 3.0; 3.14; -5.12

- Số thực dấu phẩy động: Được biểu diễn bởi 02 phần: Phần định trị là một số thực dấu phẩy tĩnh và phần bậc là một số nguyên nằm trong khoảng -39 đến + 38, ngăn cách giữa 2 phần là chữ E

Ví dụ: -1.732E-05 Với cách biểu diễn này thì 1.732 là phần định trị còn -5 là phần bậc và giá trị này được xác định là -1.7 * 10-5

Để khai báo biến dữ liệu thuộc kiểu số thực, dùng từ khóa Real

Ví dụ, để khai báo về dân số, mức thu nhập bình quân/đầu người của một quốc gia

Var

Danso, ThunhapBQ : Real;

Một số toán tử liên quan đến dữ liệu kiểu số thực:

- Toán tử quan hệ: = (bằng); > (lớn hơn); >= (lớn hơn hoặc bằng); < (nhỏ hơn); <= (nhỏ hơn hoặc bằng) và <> (khác)

- Toán tử thực: + (cộng); - (trừ); * (nhân) và / (chia)

Trang 21

Cũng giống như kiểu dữ liệu số nguyên, Pascal còn mở rộng với các kiểu dữ liệu số thực:

(byte)

Kiểu dữ liệu ký tự (Char)

Dữ liệu kiểu ký tự là một ký tự bất kỳ có trong tập hợp các ký tự của bẳng mã ASCII Kiểu dữ liệu ký tự được định nghĩa bởi từ khóa Char

Giá trị của các biến ký tự khi viết trong Pascal được đặt trong cặp dấy nháy đơn („ „) Biến ký tự nào có giá trị là ký tự đứng trước trong bảng mã ASCII thì biến đó nhỏ hơn so với biến ký

tự có giá trị là ký tự đứng sau trong bảng mã ASCII

Ví dụ: „A‟ < „B‟; „B‟ < „a‟

Vì trong bảng mã ASCII, ký tự A đứng ở vị trí thứ 65, B đứng ở vị trí 66 và a đứng ở vị trí 97

Một số toán tử liên quan đến biến dữ liệu kiểu ký tự:

Toán tử quan hệ: = (bằng); > (lớn hơn); >= (lớn hơn hoặc bằng);

< (nhỏ hơn); <= (nhỏ hơn hoặc bằng) và <> (khác)

Biến dữ liệu thuộc kiểu ký tự được khai bảo bởi từ khóa Char

Kiểu dữ liệu dãy ký tự (String)

Dữ liệu kiểu dãy ký tự là một dãy gồm các ký tự bất kỳ có trong bảng mã ASCII Kiểu dữ liệu dãy ký tự được định nghĩa bởi từ khóa String

Trang 22

Cũng giống như biến dữ liệu thuộc kiểu ký tự, giá trị của biến dãy ký tự khi viết trong Pascal sẽ được đặt trong cặp dấu nháy đơn („ „)

Để khai báo biến dữ liệu thuộc kiểu dãy ký tự có thể khai báo theo quy cách:

Var

<biến dãy ký tự>: String; {cách khai báo 1}

<biến dãy ký tự>:String[n]; {cách khai báo 2}

Với cách khai báo 1 thì <biến dãy ký tự> sẽ nhận được tối đa

32767 ký tự

Với cách khai báo 2, giá trị n là một số nguyên, dương nó sẽ giới hạn số ký tự tối đa trong dãy mà <biến dãy ký tự> có thể nhận được

Ví dụ: khai báo biển số xe, địa chỉ của một cơ quan

Var

Bienso: String[9];

Diachi:String;

Ở đây biển số xe hiện tại chỉ nhận được một dãy gồm tối đa là 9

ký tự còn địa chỉ thì có thể nhận một dãy có độ dài lên tới 32767

ký tự Nhưng việc không giới hạn độ dài tối đa cho biến dữ liệu

sẽ làm cho chương trình chiếm dụng bộ nhớ một cách không cần thiết

Một số toán tử liên quan đến biến dữ liệu kiểu dãy ký tự:

- Toán tử quan hệ: = (bằng); > (lớn hơn); >= (lớn hơn hoặc bằng); < (nhỏ hơn); <= (nhỏ hơn hoặc bằng) và <> (khác)

- Toán tử thực: + (cộng, dùng để ghép các dãy ký tự lại với nhau)

Ví dụ: biến A nhận giá trị là „Dai hoc‟ và biến B nhận giá trị là dãy ký tự „Kinh te quoc dan‟

Trang 23

Nếu trong Pascal có một câu lệnhđược viết C := A + B; lúc đó C

sẽ có giá trị là một dãy ký tự „Dai hocKinh te quoc dan‟

6.3.3 Biểu thức

Biểu thức (Expression) là một công thức tính toán để có một giá trị theo một quy tắc toán học nào đó Một biểu thức bao gồm: toán tử (operator) và toán hạng (operand) Toán tử được viết ra bằng dấu phép toán Toán hạng có thể là hằng, hàm hoặc biến Các phần tử của biểu thức có thể được phân thành số hạng, thừa

số, biểu thức đơn giản

Ví dụ: 3 + PI * Sin ( x) ;

Trong ví dụ này, các toán tử (các phép toán) là phép cộng (+) và phép nhân (*) Các toán hạng là hằng số 3 và PI, là hàm Sin với đối số là biến X

- Biểu thức số học là biểu thức có giá trị bằng số (là Integer, Real)

- Biểu thức logic ( Boolean ) là biểu thức có giá trị là True hoặc False

- Biểu thức dãy ký tự là biểu thức có giá trị là một dãy ký tự

- Một biểu thức chứa một trong các toán tử quan hệ ( <>, <, >,

<=, >=, = ) đựoc gọi là một biểu thức Boolean đơn giản hay một biểu thức quan hệ Các toán hạng trong biểu thức quan hệ có thể

là các số nguyên, số thực, kí tự và chúng phải tương thích nhau

về kiểu

- Biểu thức có nhiều hơn một toán tử quan hệ thì được gọi là biểu thức phức Trong Pascal, biểu thức phức phải được tách thành các biểu thức giản đơn và kết hợp lại thông qua toán tử logic

Ví dụ: trong toán học việc viết biểu thức A > B > C rất hay gặp, nhưng khi biểu diễn trong ngôn ngữ Pascal thì không đúng với quy tắc, và khi đó biểu thức trên sẽ được viết lại như sau:

(B > C) and (B < A)

Trang 24

- Khi thực hiện tính toán giá trị cho biểu thức, Pascal sẽ thực hiện lần lượt các toán hạng theo các mức thứ tự ưu tiên như sau: (1) Các toán hạng nằm trong cặp ngoặc ( ), từ trong ra ngoài (2) Toán tử Not

(3) Toán tử * (nhân); / (chia); DIV (chia lấy phần nguyên); MOD (chia lấy phần dư) và AND (hội)

(4) Toán tử + (cộng); - (trừ); Or (tuyển) và Xor (hoặc … triệt tiêu)

(5) Các toán tử quan hệ

Trong trường hợp, các toán tử cùng mức ưu tiên thì Pascal sẽ thực hiện tính toán lần lượt từ trái qua phải

Ví dụ:

1/ Biểu thức 15 + 23 * 45 – 4 cho kết quả 1046

2/ Biểu thức (15 +23)*(45-4) cho kết quả 1558

3/ (3<10) Xor (4 =2* 2) And (8 > 3*3) cho kết quả là True 4/ ((3<10) Xor (4 =2* 2)) And (8 > 3*3) cho kết quả là sai

6.3.4 Hàm trong Pascal

Hàm là một đoạn chương trình được xây dựng để thực hiện một nhiệm vụ cụ thể nào đó Pascal xây dựng sẵn một số hàm và các hàm đó được gọi là hàm chuẩn, khi cần thi hành công việc của một hàm nào đó, người sử dụng phải ghi đúng tên hàm và giá trị của các đối số trong đối hàm

Một số hàm chuẩn liên quan đến dữ liệu kiểu số nguyên và số thực:

Tên hàm

Kiểu

dữ liệu vào

trị sau X

Succ(5) cho kết quả là 6

Trang 25

ODD(X) Integer Boolean Trả lại True

nếu X lẻ, False nếu X chẵn

ODD(5) cho kết quả là True

TRUNC(X) Integer,

Real

Integer Cắt bỏ phần

phân, trả lại giá trị nguyên

TRUNC(5.25) cho kết quả là 5

phân, trả lại giá trị nguyên

INT(5.25) cho kết quả là 5.00

ROUND(X) Integer,

Real

Integer Trả lại giá

trị làm tròn của X

ROUND(5.25) cho kết quả là 5 ROUND(5.75) cho kết quả là 6

phân của X

FRAC(5.25) cho kết quả là 0.25 ABS(X) Integer,

Real

Integer, Real

Trả về giá trị tuyệt đối của X

ABS(-5) cho kết quả là 5

ABS(5.25) cho kết quả là 5.25

SQR(X) Integer,

Real

Integer, Real

Trả về bình phương của

X

SQR(5) cho kết quả là 25 SQR(5.25) cho kết quả 2.75E+1 SQRT(X) Integer,

Real

Real Trả về giá

trị căn bậc 2 của X

SQRT(25) cho kết quả là 5.00

LN(5) cho kết quả

là 1.609 LN(10.5) cho kết quả 2.3513 EXP(X) Integer,

Một số hàm chuẩn liên quan đến dữ liệu kiểu ký tự và dãy ký

tự :

Trang 26

Tên hàm

Kiểu

dữ liệu vào

đứng sau X trong bảng

mã ASCII

Succ(„B‟) cho kết quả là „C‟

X được viết hoa

UPCASE(„b‟) cho két quả là „B‟

trong bảng ASCII của

ký tự X

ORD(„A‟) cho kết quả là 65

có vị trí tương ứng X trong bảng

mã ASCII

CHR(65) cho kết quả là „A‟

6.3.5 Lập trình tuần tự

Lập trình tuần tự hay còn gọi là lập trình với cấu trúc tự nhiên, các lệnh được thực hiện tuần tự từ đầu đến cuối, có nghĩa là lệnh nào viết trước được thực hiện trước, lệnh nào viết sau được thực hiện sau Thực hiện xong lệnh trước trước sẽ chuyển đến thực hiện lệnh sau

Trang 27

Ví dụ :

X := 6 ; (* có nghĩa là biến X nhận giá trị bằng 6 *)

Y := True ; (* có nghĩa là biến Y nhận giá trị True *)

X := X + 3 ; (* có nghĩa là giá trị của X sẽ bằng giá trị của X cộng với 3 Ví dụ nếu lúc đầu X có giá trị là 6 thì sau khi thực hiện câu lệnh này, X sẽ có giá trị là 9 Lưu ý rằng X chỉ là tên của một ô nhớ X + 3 được hiểu là lấy nội dung của ô nhớ X đem cộng với 3, sau đó lại để vào ô nhớ X *)

- Tính tương thích của các kiểu dữ liệu:

Nguyên tắc chung khi dùng phép gán thì kiểu dữ liệu của biến ở bên trái dấu gán và kiểu dữ liệu của biểu thức ở bên phải dấu gán phải giống nhau

Ví dụ: Một biến nguyên I không thể nhận một giá trị kí tự được

I := 'A' ; là điều không thể chấp nhận được

b Thủ tục xuất – nhập dữ liệu

Thủ tục (Procedure) là một chương trình con dùng để thực hiện

1 công việc nào đó trong toàn bộ chương trình Mỗi thủ tục có một tên, được dùng để gọi thủ tục khi cần thi hành thủ tục đó Trong Pascal có hai loại thủ tục:

Thủ tục chuẩn: do Pascal định nghĩa sẵn Có thể sử dụng các thủ tục chuẩn trong chương trình mà không cần phải khai báo Thủ tục “người lập trình”: là do người lập trình xây dựng Muốn

sử dụng các thủ tục này trong chương trình thì phải khai báo

Trang 28

Thủ tục xuất dữ liệu

Dữ liệu có thể xuất ra trên màn hình hoặc trên máy in Ở đây chúng ta chỉ xem xét việc đưa dữ liệu ra màn hình Pascal cho phép đưa các dữ liệu ra màn hình theo 3 quy cách:

Write(<phần tử xuất 1>, [<phần tử xuất 2>,…, <phần tử xuất N)]);

Writeln(<phần tử xuất 1>, [<phần tử xuất 2>,…,<phần tử xuất N]) ;

Trong quy cách viết Write(<phần tử xuất 1>, [<phần tử xuất 2>,…, <phần tử xuất N)]); sau khi viết ra các giá của <phần tử xuất 1>, [<phần tử xuất 2>,…, <phần tử xuất N)] trên cùng một dòng màn hình, con trỏ sẽ xuống đầu dòng tiếp theo

Còn thủ tục Writeln(<phần tử xuất 1>,[<phần tử xuất 2>,…<phần tử xuất N)]); sau khi viết ra các giá trị của <phần tử xuất 1>, [<phần tử xuất 2>,…<phần tử xuất N)] con trỏ sẽ không chuyển xuống đầu dòng tiếp theo mà được đặt ở vị trí sau giá trị của phần tử xuất N

Thủ tục Writeln; (không có tham số) sẽ chỉ làm một động tác đơn giản là đặt con trỏ xuống đầu dòng tiếp theo

Trang 29

Ví dụ: Có các thủ tục xuất dữ liệu như sau:

Writeln(„Ket qua 1: „, 80 + 20, ‟ Lenh 1‟);

Writeln(„Ket qua 2: „, ‟80 + 20‟, „Lenh 2‟);

Writeln((„Ket qua 3: „, „80‟ + ‟20‟, „Lenh 3‟);

Writeln(„Ket qua 4: „, 80, „+ 20‟, „Lenh 4‟);

Và kết quả khi thực hiện được đưa ra trên màn hình:

Thủ tục xuất dữ liệu đầu tiên gồm 3 phần tử xuất ra gồm 1 dãy

ký tự có nội dung „Ket qua 1:‟, phần tử xuất thứ 2 là một biểu thức 80 + 20, Pascal sẽ tính giá trị và đưa ra, phần tử thứ ba là một dãy ký tự có nội dung là „Lenh 1‟

Thủ tục xuất dữ liệu thứ 2, tương tự như vậy nhưng phần tử xuất

ra thứ 2 là một dãy ký tự có nội dung là ‟80 + 20‟

Thủ tục xuất dữ liệu thứ 3, tương tự nhưng phần tử cuất ra thứ 2

là một biểu thức ký tự „80‟ + „20‟ nên Pascal tính và cho kết quả

ra màn hình là một dãy ký tự „8020‟

Thủ tục xuất dữ liệu thứ 4, có bốn phần tử xuất ra trong đó có phần tử xuất ra thứ 3 là một dãy ký tự có nội dung „+20‟ nên kết quả đưa ra trên màn hình nhìn giống như mọt phép toán giữa giá trị hằng của phần tử xuất ra thứ 2 với nội dung của phần tử xuất

ra thứ 3

Nhưng có một vấn đề cho thấy, cả 4 thủ tục xuất dữ liệu ra thì phần tử cuối cùng của các thủ tục không thẳng hàng như các phần tử xuất ra thứ nhất, thứ hai của các thủ tục Vì độ dài của các phần tử xuất ra ở mỗi thủ tục là khác nhau Để khắc phục việc trình bày trên màn hình như trên, Pascal cho phép người sử

Trang 30

dụng định ra khoảng trống dùng để biểu diễn giá trị cho các phần tử đưa ra theo quy cách:

<phần tử xuất ra>[:n[:m]]

Trong đó n, m là các số nguyên dương, n là lượng khoảng trống

để biểu diễn giá của phần tử xuất ra, m là lượng khoảng trống để biểu diễn phần thập phân của giá trị phần tử xuất ra (vậy n > m

và m chỉ dùng cho các dữ liệu kiểu số thực)

Ví dụ trên có thể sửa lại:

Writeln(„Ket qua 1: „, 80 + 20 :10 ,‟ Lenh 1‟);

Writeln(„Ket qua 2: „, ‟80 + 20‟:10, „Lenh 2‟);

Kết quả thực hiện trên màn hình cho thấy, các phần tử xuất ra thứ 2 và thứ 3 ở cả 2 thủ tục xuất dữ liệu đều được lưu trong 10 khoảng trống, và được đưa về phía phải, do không biểu diễn hết

10 khoảng trống nên trước các phần tử đưa ra này còn thừa một lượng khoảng trống Nhưng các phần tử đưa ra ở các thủ tục đã được thẳng hàng

Thủ tục nhập dữ liệu

Để nhập dữ liệu vào cho một chương trình có nhiều cách khác nhau như nhập vào từ bàn phím, nhập vào từ một tệp tin dữ liệu hay nhập trực tiếp trong chương trình Ở đây chúng ta xem xét việc nhập dữ liệu vào từ phàn phím

Để nhập dữ liệu vào từ bàn phím Pascal cung cấp các quy cách như sau:

Read(<biến 1> [,<biến 2>,…, <biến n>]);

Readln(<biến 1> [,<biến 2>,…, <biến n>]);

Trang 31

Readln;

Khi nhập dữ liệu cho các biến thì giá trị của biến này phải cách

dữ liệu của biến kia ít nhất một ký tự khoảng trống hoặc một ký

tự Tab Kết thúc việc nhập dữ liệu bằng phím Enter

Tương tự như Write và Writeln, Readln sẽ tự động chuyển con trỏ xuống đầu dòng dưới sau khi đã nhận xong các giá trị cho các biến Với quy cách Readln; thì chương trình sẽ dừng lại cho đến khi người sử dụng ấn phím Enter

Kết hợp thủ tục xuất và thủ tục nhập dữ liệu

Khi nhập dữ liệu để giúp cho người sử dụng không bị nhầm lẫn giá trị của biến này với biến khác thì trong quá trình lập trình thường sẽ đưa ra dòng thông báo về biến cần nhận giá trị trước khi thực hiện việc nhập dữ liệu cho biến đó Và người ta quen gọi đó là thủ tục xuất – nhập dữ liệu (xuất ra một thông báo về biến và nhập dữ liệu vào cho biến đó)

Write(<Thông báo về biến cần nhận giá trị>);

Readln(<biến>);

Ví dụ: Nhập dữ liệu về tên, tuổi cho một sinh viên trong lớp

Write(„Nhap ten sinh vien: „);

c Một số ví dụ đơn giản về lập trình tuần tự

Trang 32

Ví dụ 1: cho biết họ tên sinh viên cùng các điểm thi tuyển sinh đại học ba môn Toán, Lý, Hóa của sinh viên đó Viết chương trình để nhập dữ liệu, tính và in ra tổng điểm tuyển sinh và điểm trung bình các môn thi tuyển sinh của sinh viên đó

Writeln(„Tong diem thi tuyen sinh : „, Tong :5 :2) ;

Writeln(„Diem thi tuyen trung binh: „, T_binh :5:2);

Readln;

End

Ví dụ 2: cho biết chiều dài, chiều rộng của một hình chữ nhật Viết chương trình nhập dữ liệu, tính và in ra chu vi và diện tích của hình chữ nhật đó

Ngày đăng: 09/04/2019, 07:03

w