Cơ bản về ngôn ngữ Pascal I. Giới Thiệu



tải về 291.86 Kb.
trang2/4
Chuyển đổi dữ liệu30.08.2016
Kích291.86 Kb.
#28831
1   2   3   4

b. Lệnh CASE .. OF
* Lưu đồ biểu diễn:

Hình 6.5: Lưu đồ lệnh CASE .. OF



  • Cách viết, ý nghĩa:
    Cách viết Ý nghĩa
    CASE OF Xét giá trị của biểu thức chọn
    GT1 : Công việc 1 ; Nếu có giá trị 1 (GT1) thì thi hành Công việc 1
    ....................... ...................................
    GTi : Công việc i ; Nếu có giá trị i (GT i) thì thi hành Công việc i
    ....................... ....................................
    ELSE Công việc 0 ; Nếu không có giá trị nào thỏa thì thực hiện
    Công việc 0
    END;
    Ghi chú:
    - Lệnh CASE .. OF có thể không có ELSE
    - Biểu thức chọn là kiểu rời rạc như Integer, Char, không chọn kiểu Real
    - Nếu muốn ứng với nhiều giá trị khác nhau của biểu thức chọn vẫn thi hành một lệnh thì giá trị đó có thể viết trên cùng một hàng cách nhau bởi dấu phẩy (,) : Giá trị k1, k2, ..., kp : Lệnh k ;
    Ví dụ 6.14: PROGRAM Chon_mau ;
    VAR color : char ;
    BEGIN
    write (' Chọn màu theo một trong 3 ký tự đầu là R / W / B ') ;
    readln ( color) ;
    CASE color OF
    'R' ,'r' : write (' RED = màu đỏ ') ;
    'W', 'w' : write (' WHITE = màu trắng ') ;
    'B' , 'b' : write (' BLUE = màu xanh dương ') ;
    END ;
    Readln;
    END.

4. Cấu trúc lặp




a. Lệnh FOR
Cấu trúc FOR cho phép lặp lại nhiều lần một dãy lệnh. Số lần lặp lại dãy lệnh đã biết trước. Phát biểu FOR có 2 dạng:
FOR .. TO .. DO đếm lên
FOR .. DOWNTO ..DO đếm xuống
* Cú pháp tổng quát là:
FOR := TO/DOWNTO DO ;
* Lưu đồ:

Hình 6. 6: Lưu đồ phát biểu FOR .. TO .. DO

Chú ý: Trị đầu, trị cuối là các biến hoặc hằng và biến đếm phải là kiểu rời rạc.
Ví dụ 6.15: Chương trình in một dãy số từ 0 đến 9
Program Day_So ;
VAR
i : Integer ;
BEGIN
FOR i := 0 TO 9 DO Write (i) ;
Readln ;
END.
b. Lệnh WHILE .. DO
* Lưu đồ của lệnh

Hình 6. 7: Lưu đồ cấu trúc WHILE .. DO



* Ý nghĩa lưu đồ:
Trong khi mà điều kiện còn đúng thì cứ thực hiện Công việc, rồi quay trở về kiểm tra điều kiện lại. Vòng lặp được tiếp tục, đến khi điều kiện đặt ra không còn đúng nữa thì đi tới thực hiện lệnh tiếp theo
* Cú pháp
WHILE <điều kiện> DO

Hình 6.8: Sơ đồ cú pháp lệnh WHILE .. DO



  • Ghi chú:
    · Ðiều kiện trong cấu trúc lặp WHILE .. DO là một biểu thức logic kiểu Boolean chỉ có 2 giá trị là Ðúng (True) hoặc Sai (False)
    · Nếu điều kiện Ðúng thì chương trình sẽ chạy trong cấu trúc WHILE .. DO.
    · Sau mỗi lần lặp, chương trình trở lại kiểm tra điều kiện. Tùy theo biểu thức logic của điều kiện là Ðúng hay Sai thì chương trình sẽ thực hiện Công việc tương ứng.
    · Nếu Sai thì chuyển xuống dưới cấu trúc WHILE .. DO
    Ví dụ 6.16: Chương trình tính trung bình n số: x1 + x2 + x3 + ... + xn
    Program Trung_binh_Day_So ;
    VAR
    n, count : Integer ;
    x, sum, average : real ;
    BEGIN
    count := 1 ;
    sum := 0 ;
    Write (' Nhập n = ') ;
    readln (n) ;
    WHILE count < n+1 DO
    BEGIN
    Write (' Nhập giá trị thứ' , count,' của x = ' ) ;
    readln (x) ;
    sum := sum + x ;
    count := count + 1 ;
    END ;
    average := sum/n ;
    Writeln (' Trung bình là =' , average : 10 : 3 ) ;
    Writeln (' Nhấn Enter để thoát ...' ) ;
    Readln ;
    END.

c. Lệnh REPEAT .. UNTIL
Câu lệnh REPEAT .. UNTIL dùng trong các trường hợp khi biến điều khiển không có kiểu rời rạc và đặc biệt trong các trường hợp số lần lặp không biết trước.

Hình 6.9: Lưu đồ cấu trúc của REPEAT .. UNTIL



* Ý nghĩa câu lệnh:
Nếu điều kiện logic là Sai (False) thì lặp lại lệnh cho đến khi điều kiện Ðúng thì mới thoát ra khỏi cấu trúc REPEAT .. UNTIL.
Nếu có nhiều câu lệnh thì mỗi lệnh ngăn cách nhau bằng dấu chấm phẩy (;)Công việc của REPEAT và UNTIL không nhất thiết phải dùng lệnh ghép để nhóm từ 2 lệnh đơn trở lên thành công việc.

Hình 6.10: Sơ đồ cú pháp REPEAT .. UNTIL



  • Ví dụ 6.17: Với bài toán trung bình cộng một dãy số ở ví dụ trước có thể viết theo cấu trúc REPEAT .. UNTIL như sau:
    Program Trung_binh_Day_So ;
    VAR n, count : Integer ;
    x, sum : real ;
    BEGIN
    count := 1 ;
    sum := 0 ;
    Write := (' Nhập n = ') ; readln (n) ;
    REPEAT
    Write (' Nhập giá trị thứ' , count, 'của x = ') ;
    readln(x) ;
    sum := sum + x ;
    count := count + 1 ;
    UNTIL count > n ;
    Writeln (' Trung bình là =' , sum/n : 8 :2 ) ;
    Readln ;
    END.
    Ghi chú:
    So sánh 2 cách viết WHILE .. DO và REPEAT .. UNTIL ta thấy có sự khác biệt:
    - Trong cấu trúc WHILE .. DO thì <Ðiều kiện> được kiểm tra trước, nếu thỏa <Ðiều kiện> thì mới thực hiện .
    - Ngược lại, trong cấu trúc REPEAT .. UNTIL thì sẽ được thực thi trước sau đó mới kiểm tra <Ðiều kiện>, nếu không thỏa <Ðiều kiện> thì tiếp tục thi hành cho đến khi <Ðiều kiện> là đúng.
    Lệnh REPEAT .. UNTIL thường được sử dụng trong lập trình, nhất là lúc người sử dụng muốn tiếp tục bài toán ở trường hợp thay đổi biến mà không phải trở về chương trình và nhấn tổ hợp phím Ctrl + F9 lại.
    Ví dụ 6.18: Nhân 2 số a và b
    Program Tich;
    VAR a, b : integer ;
    CK : char ;
    BEGIN
    REPEAT
    Write (' Nhập số a = '); Readln (a) ;
    Write (' Nhập số b = '); Readln (b) ;
    Writeln (' Tích số của a x b là :' , a*b : 10 ) ;
    Writeln (' Tiếp tục tính nữa không (CK) ? ');
    Readln (CK) ;
    UNTIL upcase(CK) = K; {hàm chuyển đổi ký tự trong biến}
    {CK thành ký tự in hoa}
    END.

Nhập Và Xuất Dữ Liệu Trong Turbo Pascal

Thông thường, chương trình Turbo Pascal được đặt trong một thư mục riêng rẽ có tên TP. Ðể sử dụng Turbo Pascal, ta cần có các tập tin tối thiểu:


- TURBO.EXE - TURBO.TPL
- TURBO.TP - GRAPH.TPU
- Các file đồ họa : *.BGI - Các Font chữ trong đồ họa : *.CHR
Sử dụng câu lệnh Turbo và nhấn Enter, màn hình sẽ xuất hiện :

Ðể trợ giúp người sử dụng, phím chức năng F10 có tác dụng mở các Menu với nhiều Options khác nhau. Ta cũng có thể kích hoạt trên thanh Menu chính bằng cách kết hợp phím , ví dụ để kích hoạt mục File, ta nhấn đồng thời phím Alt- F, sau đó dùng các phím mũi tên và nút Enter để chọn lựa và ra lệnh thi hành. Phím F1 trợ giúp thể hiện các thông tin trên màn hình.
Ta có thể sử dụng các tổ hợp phím để tạo ra các khối chữ hoặc câu lệnh (trên màn hình thấy có sự thay đổi màu) để ta có thể sao chép, cắt dán, xóa bỏ ...
Ctrl-K-B Ðánh dấu đầu khối
Ctrl-K-K Ðánh dấu cuối khối
Ctrl-K-C Chép khối tại sau vị trí con trỏ
Ctrl-K-V Di chuyển khối tới sau vị trí con trỏ
Ctrl-K-Y Xóa khối hiện hành
Ctrl-K-W Ghi khối hiện hành vào đĩa như một tập tin
Ctrl-K-R Ðọc khối tập tin đã ghi vào đĩa vào sau vị trí con trỏ
Ctrl-K-H Tắt/ Mở khối
Một chương trình máy tính, sẽ có các bước căn bản sau:

Trong thảo chương Turbo Pascal, các thủ tục nhập dữ liệu được dùng:


THỦ TỤC NHẬP Ý NGHĨA
READ(x1, x2, ..., xn) Nhập các biến x1, x2, ..., xn theo hàng ngang
từ bàn phím (con trỏ không xuống hàng).
READLN(x1, x2, ..., xn) Nhập các biến x1, x2, ..., xn theo hàng dọc
từ bàn phím (mỗi lần nhập con trỏ xuống hàng).
READLN; Dừng chương trình, đợi Enter mới tiếp tục.
ASSIGN(F, File_Name); Mở tập tin F có tên là File_Name
RESET(F); Chuẩn bị đọc tập tin
READ(F, x1, x2, ..., xn) ; Ðọc các giá trị trên tập tin F ra các biến x1, x2, ..., xn
tương ứng
CH := ReadKey ; Ðọc một ký tự từ bàn phím vào biến ký tự CH
KEYPRESSED Một hàm có giá trị là TRUE nếu có một phím
được bấm và là FALSE nếu ngược lại.
THỦ TỤC XUẤT Ý NGHĨA
WRITE(x1, x2, ..., xn) Viết giá trị trong các biến x1, x2, ..., xn ra màn hình
theo hàng ngang (con trỏ không xuống hàng).
WRITELN(x1, x2, ..., xn) Viết giá trị trong các biến x1, x2, ..., xn ra màn hình
theo hàng dọc (mỗi lần viết trị x có xuống hàng).
WRITELN; Xuống hàng
WRITELN(I : n); Viết ra giá trị của biến nguyên I vào n chỗ tính từ
phải sang trái. Nếu dư chỗ (chữ số của I < n) sẽ để trống
WRITELN(R : n : m); Viết ra giá trị của biến thực R vào n chỗ, chỉ lấy
m số thập phân.
WRITELN( abc... ); Viết ra nguyên văn chuỗi ký tự abc...
WRITELN (LST, x1, x2, ..., xn) Viết ra máy in các trị biến x1, x2, ..., xn
ASSIGN(F, File_Name) Mở tập tin F có tên là File_Name
REWRITE(F) ; để chuẩn bị viết vào
WRITE (F, x1, x2, ..., xn) ; Viết các giá trị x1, x2, ..., xn vào tập tin F
CLOSE (F) ; Ðóng tập tin F
Cần lưu trữ chương trình ta dùng phím F2.
Mở một file đã có ta dùng phím F3.
Ðể thay đổi kích thước/Di chuyển cửa sổ chương trình, dùng phím F5 và
Ctrl+F5.
Trường hợp mở nhiều chương trình, ta dùng phím F6 và Ctrl+F6 để đi đến/trở
về trước chương trình hiện hành.
Ðể biên dịch và kiểm tra lỗi, ta dùng phím F9.
Ðể chạy chương trình đã soạn thảo xong, đánh Ctrl+F9
Muốn thoát khỏi Turbo Pascal và trở về DOS, đánh Alt+X.

Cấu trúc dữ liệu

- I. KIỂU LIỆT KÊ, KIỂU MIỀN CON



1. Kiểu vô hướng liệt kê (enumerated scalar type)

Chương trước chúng ta đã đi qua các kiểu dữ liệu đơn giản là các dữ liệu kiểu dữ liệu vô hướng chuẩn (Standard Scalar-type Data) như Integer, Real, Char, Boolean. Các kiểu này đã được định nghĩa sẵn trong mọi chương trình cài đặt trong máy. Ngôn ngữ Pascal cho phép người lập trình có thể tự đặt ra các kiểu vô hướng mới bằng cách tự liệt kê các giá trị của kiểu vô hướng mới và phải khai báo định nghĩa kiểu. Danh sách các giá trị này được đặt trong ngoặc đơn ( ) và được mô tả bằng một tên kiểu (như phần mô tả kiểu TYPE). Kiểu vô hướng theo cách này gọi là kiểu vô hướng liệt kê (Enumerated Scalar Type).
a. Cách khai báo
Có 2 cách khai báo một biến kiểu liệt kê:
+ Khai báo gián tiếp: Ðịnh nghĩa kiểu (dựa vào từ khóa type) trước khi khai biến (var)
TYPE
= () ;
VAR
: ;
Ví dụ 8.1:
TYPE
Days = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ;
Colors =(Red, Yellow, Green, White, Blue, Black) ;
Subjects = (Mathematics, Physics, Chemistry, Biology) ;
VAR
Ngay : Days ;
MauVe : Colors ;
MonThi, Kiemtra : Subjects ;
+ Khai báo trực tiếp: Kiểu sau biến được định nghĩa trực tiếp.
VAR
: () ;
Ví dụ 8.2:
VAR
Ngay : (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ;
MauVe : (Red, Yellow, Green, White) ;
Ta có thể gán cho biến các giá trị của kiểu tương ứng:
Ngay := Mon ;
MauVe := Red ;
Biến theo định nghĩa của kiểu nào chỉ nhận giá trị của kiểu đó mà thôi.
Theo khai báo như ví dụ 8.2. ở trên, ta không thể có MauVe := Mon ;
Kiểu vô hướng liệt kê là một kiểu đếm được.
Theo định nghĩa kiểu vô hướng liệt kê, thứ tự danh sách giá trị liệt kê được ngầm đánh số tăng tuyến tính bắt đầu từ số 0 trở đi theo thứ tự từ trái sang phải. Như vậy, ở ví dụ trên: Sun < Mon < Tue < Wed .... và Red < Yellow < Green ...
b. Một số hàm chuẩn áp dụng cho kiểu vô hướng
* Hàm thứ tự ORD (X)
Hàm này cho ta thứ tự của giá trị x trong kiểu vô hướng đếm được. Hàm ORD thực chất là hàm biến đổi một giá trị kiểu vô hướng đếm được sang giá trị kiểu số nguyên.
Theo ví dụ trên:
ORD (Sun) = 0 là Ðúng vì Sun có thứ tự là 0
ORD (Mon) = 1 là Ðúng vì Mon có thứ tự là 1
ORD (Green) = 3 là Sai vì Green có thứ tự là 2
ORD (n) = n trong đó n là một giá trị kiểu Longint
* Hàm PRED (X)
Hàm này cho giá trị đứng trước x trong định nghĩa kiểu của x.
Theo ví dụ trên :
PRED (Mon) = Sun
PRED (Green) = Yellow
PRED (n) = n - 1
* Hàm SUCC (X)
Hàm này cho giá trị đứng sau x trong định nghĩa kiểu của x.
Theo ví dụ trên:
SUCC (Mon) = Tue
SUCC (Green) = White
SUCC (n) = n + 1
* Hàm chuyển một số nguyên thành một giá trị vô hướng
Tên hàm này chính là tên kiểu vô hướng mà ta đã khai báo trước.
Theo ví dụ trên:
Days(2) = Tue
Colors(3) = White
LONGINT (n) = n
c. Viết ra và đọc vào kiểu liệt kê Viết và đọc theo kiểu liệt kê thì khác với kiểu vô hướng chuẩn.
* Viết ra kiểu liệt kê
Thủ tục Write và Writeln chỉ chấp nhận đưa ra các giá trị thuộc kiệu vô hướng chuẩn (Real, Integer, Byte, Char, Boolean) mà không chấp nhận viết ra một giá trị kiểu vô hướng liệt kê, ví dụ cách viết sau là không đúng:
Writeln(Color(4)) Writeln(Red) Writeln(Days)
mà chỉ có thể chấp nhận nếu viết:
Writeln (Char(78)) vì Char(78) = N là giá trị vô hướng chuẩn.
Ðể viết ra một giá trị của biến vô hướng liệt kê, ta có thể áp dụng thủ thuật sau:
IF MauVe = Red THEN Writeln(‘Red’) ;
* Ðọc vào kiểu liệt kê
Thủ tục Read và Readln cũng chỉ chấp nhận đọc vào một giá trị kiểu vô hướng chuẩn mà không chấp nhận đọc trực tiếp các giá trị kiểu vô hướng liệt kê, ví dụ không thể đọc Readln(Days). Ðể đọc vào một giá trị kiểu liệt kê ta có thể dùng phương pháp sau: đọc số thứ tự của giá trị biến vô hướng rồi biến đổi kiểu dữ liệu thêm:
Ví dụ 8.3:
TYPE Days = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ;
VAR i : Integer ;
BEGIN
Write('Nhập số từ 0 . .6 tương ứng cho ngày:'); Readln(i) ;
Case Days(i) of
Sun: writeln('Ngày Chủ nhật');
Mon: writeln('Ngày thứ hai');
Tue: writeln('Ngày thứ ba');
Wed: writeln('Ngày thứ tư');
Thu: writeln('Ngày thứ năm');
Fri: writeln('Ngày thứ sáu');
Sat: writeln('Ngày thứ bảy');
Else writeln('Nhập sai');
end;
Readln;
END.
Mục 2 ở phần II ở phía sau, sẽ giới thiệu chuỗi String, ta có thể dùng thủ thuật sau để đọc kiểu liệt kê:
Ví dụ 8.4: Readln(St) ;
IF St = ‘Mon’ THEN Ngay := Mon ;


2. Kiểu miền con (Sub-range type)





a. Khái niệm
Khi khai báo một số trường hợp, ví dụ Tuổi của người hoặc Ðiểm thi học sinh, nếu ta viết:
VAR
TuoiTho : Integer ; {Integer có miền xác định -32 768 .. 32 767}
Hay Diem : Real ; {Real có miền xác định 2.9 E-39 .. 1.7 E38}
Nếu viết như vậy sẽ tốn ô nhớ vì Integer có kích thước 2 bytes hoặc Real có kích thước đến 6 bytes. Làm như vậy sẽ không cần thiết vì Tuổi con người chỉ biến thiên trong khoảng từ 0 đến 200 là lớn nhất và điểm thi học sinh thì chỉ trong khoảng từ 0 đến 10 chẳng hạn.
Trong Pascal cho phép ta xác định một biến lấy giá trị trong một khoảng nào đó được giới hạn ở một hằng cận dưới (first data item) và một hằng cận trên (last data item). Hai giá trị này phải cùng một kiểu vô hướng đếm được và hằng cận trên có giá trị lớn hơn hằng cận dưới. Khai báo như vậy gọi là khai báo kiểu miền con (Sub-range type) và biến của nó chỉ chiếm 1 byte trong ô nhớ mà thôi. Trong lúc chạy chương trình, ta có thể kiểm tra giá trị của biến không được vượt ra khỏi giới hạn của khoảng con.
b. Cách khai báo
Miền con là một tập hợp con của một kiểu đếm được. Có 2 cách khai báo:
+ Khai báo gián tiếp:
TYPE
= .. ;
VAR
: < Tên kiểu miền con> ;
Ví dụ 8.5:
TYPE
TuoiTho = 0 .. 200 ;
VAR Tho : TuoiTho ;
+ Khai báo trực tiếp:
VAR
: .. ;
Ví dụ 8.6:
VAR Tuoi : 0 .. 200 ;
II. KIỂU MẢNG, KIỂU CHUỖI

Pascal có 4 kiểu cấu trúc dữ liệu là kiểu mảng (ARRAY), tập hợp (SET), bản ghi (RECORD) và tập tin (FILE). Sau đây ta lần lượt tìm hiểu từng kiểu cấu trúc.



1. Dữ liệu kiểu mảng (Array-Type Data)

T

ột mảng dữ liệu là một tập hợp số hữu hạn phần tử có giống như các biến, có cùng kiểu, gọi là kiểu cơ bản.
Mảng được được tổ chức theo một trật tự xác định. Số phần tử của mảng được khai báo ngay từ khi định nghĩa ra mảng.
a. Mảng một chiều (One-Dimensional Array)
Mảng một chiều có thể được hiểu như một danh sách các phần tử (theo cột), có cùng kiểu. Mỗi phần tử của mảng được xác định được truy nhập trực tiếp thông qua tên mảng cùng với chỉ dẫn truy nhập được để giữa hai ngoặc vuông [ ].
Ví dụ 8.7:
List là một mảng 1 chiều có n phần tử. Các phần tử của List có thể mang các tên List[1], List[2], List[3], ..., List[n], và có thể minh họa như hình sau:






















List[1] List[2] List[3] List[4] ......... List[n]
Hình 8.1: Minh họa mảng một chiều
+ Khai báo gián tiếp:
TYPE
= ARRAY [Kiểu chỉ số ] OF ;
VAR
: Kiểu mảng ;
+ Khai báo trực tiếp :
VAR
< Danh sách biến > : ARRAY [ Kiểu chỉ số] OF < Kiểu phần tử > ;
* Chú ý: Kiểu chỉ số phải là kiểu rời rạc (đếm được).
Ví dụ 8.8:
TYPE
KM1 = ARRAY [1.. 100] OF INTEGER ;
KM2 = ARRAY [1 .. 20 ] OF CHAR ;
DAY = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ;
VAR
TUOI : KM1 ;
TEN : KM2 ;
NGAY : ARRAY [DAY] OF BOOLEAN ;
Ý nghĩa:
- KM1 là kiểu mảng gồm 100 phần tử được đánh số từ 1 đến 100 thông qua kiểu chỉ dẫn là một miền con các số nguyên từ 1 .. 100. TUOI là biến có kiểu là KM1.
- KM2 là kiểu mảng gồm 20 phần tử đánh số từ 1 .. 20 có kiểu là các ký tự. Biến TEN có kiểu là KM2.
- NGAY là một biến mảng gồm 7 phần tử kiểu Boolean được đánh dấu qua kiểu chỉ dẫn là tên của 7 ngày trong tuần.
Chú ý:
Khi khai báo mảng, kiểu chỉ dẫn chỉ có thể là:
- Kiểu miển con của các loại dữ liệu vô hướng đếm được như ký tự, số nguyên
- Kiểu liệt kê do người viết định nghĩa (như NGAY trong tuần)
- Kiểu Boolean
Kiểu chỉ dẫn không thể là kiểu không đếm được như REAL
Viết như sau là SAI : X1 : ARRAY [Real] OF Integer ;
Ta cũng không thể khai báo như: X2 : ARRAY [Integer] OF Integer ;
Mặc dầu Integer là kiểu vô hướng đếm được do giới hạn của vùng nhớ dành cho dữ liệu, số lượng phần tử của 1 mảng cũng bị hạn chế tùy theo kích thước của kiểu dữ liệu của các phần tử, ta nên dùng kiểu miền con để khai báo số phần tử của mảng

+ Truy xuất các phần tử của mảng:
Mỗi phần tử của mảng được truy xuất thông qua Tên Biến Mảng cùng với chỉ số của mảng trong dấu ngoặc vuông [ ]. Ví dụ tên biến mảng là A, khi viết A[7], ta hiểu nó là phần tử thứ 7 của mảng A.
Ví dụ 8.9: Lập trình giải một bài toán tính trung bình một dãy số x[i] :
x[1], x[2], x[3], ... , x[n]
sau đó tiếp tục tính độ lệch (deviation) của từng phần tử so với trị trung bình, theo công thức:

độ_lệch = x[i] - trung_bình



Giả sử dãy số của chúng ta có giới hạn n = 100 phần tử trở lại, n là một biến số để khai báo số phần tử muốn tính . Sau đó ta lần lượt nhập tính giá trị của phần tử kiểu số thực (real) từ phần tử thứ 1 đến phần tử thứ n. Trong chương trình sẽ tạo ra một mảng 1 chiều x với n các phần tử. Tính trung bình của n phần tử và độ lệch. In kết quả ra màn hình.
PROGRAM Average_deviations ;
{ Nhập n số phần tử kiểu số thực, tính trị trung bình của chúng, sau đó tính tiếp độ lệch của từng phần tử số so với trị trung bình }
VAR
n, count : integer ;
sum, average, deviation : real ;
x : ARRAY [1 .. 100] OF real ;
BEGIN
(* Nhập số phần tử và tính trung bình*)
Write (' Nhập bao nhiêu số n để tính trung bình ? ') ;
Readln (n) ;
Writeln ;
sum := 0 ;
FOR count := 1 TO n DO
BEGIN
Write ( ‘ i = ‘, count : 3, ‘ x = ‘ ) ;
Readln (x [count] ) ;
sum := sum + x[count];
END ;
average := sum/n ;
Writeln (' Trung bình của dãy số là = , average ') ;
Writeln ;
(* Tính độ lệch so với trị trung bình *)
FOR count := 1 TO n DO
BEGIN
deviation := x[count] - average ;
Write ( ‘ i = ‘, count : 3, ‘ x = ‘, x[count] ) ;
Writeln (' Ðộ lệch d = , deviation ');
END ;
Readln;
END.
Giả sử, ta nhập vào 5 số hạng (các số có gạch dưới là phần của người nhập):
x[1] = 3.0 x[2] = -2.0 x[3] = 12.0 x[4] = 4.4 x[5] = 3.5
Khi chạy chương trình (nhấn Ctrl + F9), trên màn hình ta sẽ thấy :
Nhập bao nhiêu số n để tính trung bình ? 5
i = 1 x = 3.0
i = 2 x = -2.0
i = 3 x = 12.0
i = 4 x = 4.4
i = 5 x = 3.5
Trung bình của dãy số là = 4. 1800000E+00
i = 1 x = 3. 0000000E+00 Ðộ lệch d = - 1. 1800000E+00
i = 2 x = -2. 0000000E+00 Ðộ lệch d = - 6. 1800000E+00
i = 3 x = 1. 2000000E+00 Ðộ lệch d = 7. 8200000E+00
i = 4 x = 4. 4000000E+00 Ðộ lệch d = 2. 2000000E - 01
i = 5 x = 3. 5000000E+00 Ðộ lệch d = - 6. 8000000E - 01
Ta có thể định khoảng chừa kết quả và phần lẻ thập phân, dùng lệnh : m : n
Ví dụ 8.10: Sắp xếp một dãy số theo thứ tự từ nhỏ đến lớn
Tiến trình của bài toán:
- Giả sử chuỗi số của ta có n phần tử . Lần lượt cho chương trình đọc giá trị của các phần tử nhập được.
- Một thủ tục (Procedure) sẽ làm công việc sắp xếp như sau : đầu tiên đưa phần tử thứ nhất so sánh với các phần tử tiếp theo, nếu nó lớn hơn phần tử so sánh thì đem đổi chổ giá trị của hai phần tử với nhau. Sau đó tiếp tục đem phần tử thứ 2 so sánh các phần tử tiếp theo theo trình tự như vậy, ... và cứ như thế cho đến phần tử thứ n - 1.
- In kết quả ra màn hình
Chương trình Pascal như sau:
PROGRAM Reorder ;
(* Sắp xếp một mảng các phần tử số thực từ nhỏ đến lớn*)
VAR n, i, loc: 1 .. 100 ;
x : ARRAY [1 .. 100] OF real ;
temp : real ;
PROCEDURE interchange ;
(* Ðổi chỗ các phần tử mảng từ nhỏ đến lớn*)
BEGIN
FOR loc := 1 TO n-1 DO
FOR i := loc + 1 TO n DO
IF x[i] < x [loc] THEN
BEGIN
temp := x[loc] ;
x[loc] := x[i] ;
x[i] := temp ;
END ;
END ;
BEGIN
Write (' Có bao nhiêu phần tử số ? ') ; Readln (n) ;
FOR i := 1 TO n DO
BEGIN
Write ( ‘ x[ ‘, i : 3, ‘] = ? ‘ ) ;
Readln( x[i] ) ;
END ;
interchange ;
Writeln ;
Writeln (' Số liệu đã sắp xếp : ') ;
Writeln ;
FOR i := 1 TO n DO
Writeln ( ‘x[ ‘, i : 3, ‘ ] = ‘, x[i] : 4 : 1 ) ;
Readln;
END.
Khi chạy chương trình, giả sử ta có 5 số liệu như phần nhập :
(các số có gạch dưới là phần nhập từ bàn phím)
Có bao nhiêu phần tử số ? 5
x[ 1] = ? 4. 7
x[ 2] = ? - 2. 3
x[ 3] = ? 12. 9
x[ 4] = ? 8. 8
x[ 5] = ? 6. 0
Kết quả là :
Số liệu đã sắp xếp :
x[ 1] = ? - 2. 3
x[ 2] = ? 4. 7
x[ 3] = ? 6. 0
x[ 4] = ? 8. 8
x[ 5] = ? 12. 9
Каталог: nonghocbucket -> UploadDocument server07 id114188 190495
UploadDocument server07 id114188 190495 -> ChuyêN ĐỀ ĐIỀu khiển tán sắC
UploadDocument server07 id114188 190495 -> Trong khuôn khổ Hội nghị của fifa năm 1928 được tổ chức tại Amsterdam (Hà Lan), Henry Delaunay đã đưa ra một đề xuất mang tính đột phá đối với lịch sử bóng đá
UploadDocument server07 id114188 190495 -> MỤc lục phần I: MỞ ĐẦU
UploadDocument server07 id114188 190495 -> «Quản trị Tài sản cố định trong Công ty cổ phần Điện lực Khánh Hòa»
UploadDocument server07 id114188 190495 -> Khóa luận tốt nghiệp 2010 Mục tiêu phát triển kinh tế xã hội trong thời kì tới 85
UploadDocument server07 id114188 190495 -> ĐỒ Án tốt nghiệp tk nhà MÁY ĐƯỜng hiệN ĐẠi rs
UploadDocument server07 id114188 190495 -> Đề tài: Qúa trình hình thành và phát triển an sinh xã hội ở Việt Nam
UploadDocument server07 id114188 190495 -> Chuyên đề tốt nghiệp Trần Thị Ngọc – lt2 khct L ời cảM ƠN
UploadDocument server07 id114188 190495 -> Địa vị của nhà vua trong nhà nước phong kiến Việt Nam

tải về 291.86 Kb.

Chia sẻ với bạn bè của bạn:
1   2   3   4




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương