Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.2 MB, 236 trang )
Giáo trình Tin học Đại cơng
KS.Đặng Quang Thanh
c. Sơ đồ thuật toán
Giả sử biến điều khiển là i
* Sơ đổ thuật toán của vòng FOR dạng tiến
i:=giá trị đầu
i<=giá trị
cuối
Đ
Công việc
i:=i+1
Công việc
i:=i -1
S
* Sơ đổ thuật toán của vòng FOR dạng lùi
i:=giá trị cuối
i >=giá trị
đầu
Đ
S
d. Một số ví dụ
Ví dụ 1: Tìm tất cả các ớc số của một số nguyên n cho trớc
Phân tích bài toán:
Dữ liệu vào là một số nguyên n nhập từ bàn phím. Dữ liệu ra là tất cả các ớc số của số nguyên
n. Một số i đợc gọi là ớc số của n khi n chia cho số đó không d, tức là n mod i=0. Ta xây dựng một
vòng lặp từ 1 tới n và kiểm tra tất cả các số nguyên trong khoảng đó xem số nào thoả mãn điều kiện
trên thì in ra màn hình.
Thuật toán và sơ đồ
- Bắt đầu
- Nhập số nguyên n
- Trong vòng lặp với i chạy từ 1 đến n, kiểm tra nếu n mod i=0 thì in i ra màn hình
69
Giáo trình Tin học Đại cơng
KS.Đặng Quang Thanh
- Kết thúc
BEGIN
Nhập n
i:=1
i:=i+1
Đ
i<=
n
N mod
i=0
S
Đ
END.
In i
Chơng trình:
Program
Timuocso;
Var
I,n:integer;
Begin
Write(' Nhap vao n=');Readln(n);
For i:=1 to n do
If n mod i=0 then
Write(i:8);
Readln;
End.
Ví dụ 2:Tính tổng bình phơng các số lẻ từ 1 tới n
Bạn đọc tự phân tích và đa ra thuật toán .
Chơng trình:
Program tongbp;
Var
I,n:integer;
70
S
Giáo trình Tin học Đại cơng
Begin
KS.Đặng Quang Thanh
Tong:integer;
Write(' Nhap n=');readln(n);
Tong:=0;
For i:=1 to n do
If odd(i) then
Tong:=tong +sqr(i);
Writeln(' tong lap phuong la :',tong);
Readln;
End.
II. Vòng lặp không xác định (Repeat...Until và While ...Do)
a. Vòng lặp Repeat...Until
Cú pháp:
Repeat
Until
Hoạt động
Khi gặp vòng lặp này chơng trình sẽ đi thực hiện công việc, sau khi thực hiện xong sẽ
kiểm tra biểu thức logic. Nếu biểu thức logic sai, quay trở về đầu vòng lặp thực hiện công
việc lần thứ hai, sau đó lại kiểm tra biểu thức logic, quá trình tiếp tục cho đến khi biểu thức
logic là đúng thì thoát khỏi vòng lặp.
Sơ đồ thuật toán.
công việc
S
BT logic
Đ
b. Vòng lặp While ...Do
Cú pháp:
While
Hoạt động:
Khi gặp vòng lặp này chơng trình sẽ kiểm tra biểu thức logic. Nếu biểu thức logic đúng
đi thực hiện công việc, sau khi thực hiện công việc xong quay trở về đầu vòng lặp kiểm tra biểu
thức logic, quá trình tiếp tục cho đến khi biểu thức logic là sai thì thoát khỏi vòng lặp.
Sơ đồ thuật toán:
BT logic
Đ
Công việc
S
71
Giáo trình Tin học Đại cơng
KS.Đặng Quang Thanh
d. Một số ví dụ
Ví dụ 1: Nhập vào một dãy số bất kỳ tính tổng của dãy số đó, việc tính tổng chỉ dừng lại khi
nhập vào một số 0.
Phân tích bài toán:
- Một dãy số bất kỳ ở đây ta không thể xác định đợc số lợng các số hạng của dãy một cách
cụ thể mà chỉ thực hiện công việc nhập từng số hạng của dãy lặp đi lặp lại cho đến khi nhập vào một
số 0 thì dừng lại. Cụ thể nh sau:
- Dùng một biến a để chứa tạm thời giá trị của mỗi số hạng nhập vào
- Mỗi một lần nhập một số thông qua biến a. Cụ thể dùng lệnh
Writeln(Nhap vao a=);Readln(a);
- Sau đó lấy giá trị của số mới nhập cộng thêm giá trị đã có trong biến Tong, kết quả đ a vào
biến Tong. Cụ thể là thực hiện lệnh Tong:=Tong+a;
- Sau khi tính tổng xong đi kiểm tra xem số a nhập vào có bằng không hay không. Nếu a=0
thì kết thúc công việc nhập và tính tổng. Ngợc lại (a<>0) lại thực hiện toàn bộ công việc trên một
lần nữa.
Vậy với bài toán trên ta dùng cấu trúc lặp không xác định cụ thể là vòng lặp Repeat. Nếu
dùng vòng lặp While ..do thì phải kiểm tra a trớc rồi mới tính tổng.
Sơ đồ thuật toán dùng vòng lặp Repeat
BEGIN
tong:=0
Nhập a
Tong:=Tong+a
Đ
a=0
S
In tong
END.
72
Giáo trình Tin học Đại cơng
KS.Đặng Quang Thanh
Chơng trình dùng vòng lặp Repeat
Program Vi_du1;
Var
a,tong:real;
Begin
tong:=0;
Repeat
Write('nhap vao so a=');readln(a);
Tong:=tong+a;
Until a=0;
Writeln('Tong cua day so la:',tong:6:2);
readln
End.
Sơ dồ thuật toán dùng vòng lặp While ..Do
BEGIN
tong:=0
Nhập a
a<>0
Đ
Tong:=Tong+a
S
In tong
END.
Chơng trình dùng vòng lặp While ..Do
Program Vi_du1;
Var
a,tong:real;
Begin
tong:=0;
Write('nhap vao so a=');readln(a);
While a<>0 do
Begin
73
Nhập a
Giáo trình Tin học Đại cơng
KS.Đặng Quang Thanh
Tong:=tong+a;
Write('nhap vao so a=');readln(a);
end;
Writeln('Tong cua day so la:',tong:6:2);
readln
End.
Ví dụ 2: Tìm UCLN của hai số nguyên a và b theo thuật toán.
- Nếu a>b thì thay a=a-b
Ngợc lại b:=b-a. Quá trình đợc lặp lại cho đến khi a= b thì dừng lại.
Bạn đọc tự vẽ sơ đồ
Chơng trình.
Program USCLN;
Var
a,b:integer;
Begin
Write(' Nhap vao so a=');readln(a);
Write(' Nhap vao so b=');readln(b);
While a<>b do
If a>b then
a:=a-b
Else b:=b-a;
Writeln('USCLN la:',a);
Readln
End.
74
Giáo trình Tin học Đại cơng
KS.Đặng Quang Thanh
Bài tập
Bài 1: Lập trình tính tổng của n số bất kỳ
Bài 2 : Với yêu cầu trên dùng vòng lặp Repeat .
Bài 3 : Lập trình tính tổng cuả n số bất kỳ dùng vòng lặp While .
Bài 4 : Lập trình tính tổng của nhiều số bất kỳ nhập từ bàn phím (trừ số 0) . Nếu gõ số 0 thì dừng
tính và thông báo kết quả tính đợc ra màn hình .
Bài 5 : Tìm USCLN của 2 số theo thuật giải :
1,Nếu a=b thì USCLN =a=b .
2,Xác định số lớn hơn trong hai số.
3,Thông số lớn hơn bằng hiệu 2 số .
4,Quay lại về bớc 1
Bài 6 :Lập trình tính an =? Với a và n cho trớc .
Bài 7 :Lập trình tính trung bình cộng của n số thực cho trớc .
Bài 8 : Cho N số tự nhiên . Tính tổng của n số chẵn , tổng của các số lẻ và tích của tổng chẵn và lẻ
Bài 9: Tính căn bậc hai của số thực A cho trớc Theo thuật giải :
Yn+1 = = Với Y1=1
Khi thoả mãn điều kiện :
<=10-6
Bài 10 : Tính căn bậc 3 của số A cho trớc với độ chính xác cho trớc theo thuật giải :
= Yn+1 =
Khi điều kiện :
<=
Baì 11 : Tính S=1+x+x/2+x/3+......+x/n với x là số thực , n là số nguyên cho trớc
Bài 12 : Tính
Sin(x)=......
Bài 13 : Tính
Cos(x)=1Bài 14: Lập chơng trình nhập vào các số nguyên cho đến khi gặp số 0 . Tính tổng của các số dơng ,
đếm xem có bao nhiêu số âm , trung bình cộng của các số lẻ rồi đa kết quả ra màn hình .
Baì 15 : Lập chơng trình nhập vào x,n (n là số lợng các dấu căn) từ bàn phím rồi tính :
F=
Bài 16: Lập chơng trình nhập vào x,n từ bàn phím rồi tính :
S = 1+x/2+x2/3+x3/4+......+xn/n+1
Baì 17: Lập trình nhập vào hai số nguyên , tìm ớc số chung lớn nhất của hai số đó . Trong chơng
trình có kiểm tra xem 2 số đó có lớn hơn 0 và nhắc nhở vào lại cho đến khi thoả mãn .
Baì 18 Lãi xuất hàng tháng gửi tiết kiệm là 1% (không kỳ hạn) . Một ngời gửi vào số tiền ban đầu là
a .Vậy sau bao nhiêu tháng ngời đó đạt đợc số tiền không lớn hơn b .
75
Giáo trình Tin học Đại cơng
KS.Đặng Quang Thanh
Bài 19: Lập chơng trình tìm tất cả các số nguyên có 3 chữ số mà tổng các chữ số đó bằng 20 và lấy
số đó chia cho 6 thì d 2 .
Baì 20 :
Yn+1==(Yn + ) Với Y1 = 1
Khi thoả mãn điều kiện :
<=10-6
Bài 21: Viết chơng trình kiểm tra công thức sau:
1+2+3+4+.......+N = N(N+1)/2
Bài 22: Viết chơng trình kiểm tra công thức sau:
12 + 22 + 32 + .......+ n2 = n(n+1)(2n+1)/6
Bài 23 : Lập Trình tính S:
S = n(n-1)......(n-m+1)/m!
Bài 24: Tính tổng
S = 1 + 3 + 5 +7 + 9 + 11 + 13
Bài 25: Tính tổng
S = 1 + 3 + 5 + .......+ n
N có thể là chẵn hoặc là lẻ.
Bài 26: Viết chơng trình in lên màn hình các thông tin sau:
a. Các số có hai chữ số trong đó số hàng chục nhận giá trị từ 3 đến 8 , chữ số hàng đơn vị
nhận giá trị từ 2 đến 9.
b. Tổng các chữ số có hai chữ số
c. Tích các số chẵn của một chữ số.
Bài 27: Viết chơng trình nhập chiều dài , chiều rộng của hình chữ nhật và in chữ nhật đó ra màn
hình bằng các dấu * có dạng sau:
***********
*
*
***********
Bài 28: Viết chơng trình nhập vào chiều cao và in ra màn hình tam giác bởi các dấu * có dạng nh
sau:
*
* *
** * **
*********
Bài 29: Viết chơng trình in ra màn hình bản cửu chơng
Bài 30: Viết chơng trình nhập vào một số thực a từ bàn phím và tìm số tự nhiên n nhỏ nhất sao cho:
1 + 1/2 + 1/3 + ........+1/n > a
Bài 31: Viết chơng trình đọc một kí tự từ bàn phím và in ra màn hình mã ASCII của nó. Chơng trình
chỉ kết thúc khi phím số không đợc nhấn.
Bài 32: Viết chơng trình nhập vào một số tự nhiên từ bàn phím và in ra màn hình các số các chữ số
lẻ có mặt trong số đớ. Ví dụ nhập 3456, in ra số có hai chữ số lẻ.
Bài 33: Ta định nghĩa số hoàn hảo là số bằng tổng các ớc số của nó mà không kể chính nó. Ví dụ
28=1+2+4+7+14. Viết chơng trình tìm mọi số hoàn hảo không lớn hơn số n cho trớc.
Bài 34: Cho số thực a và số tự nhiên n. Hãy tính:
76
Giáo trình Tin học Đại cơng
KS.Đặng Quang Thanh
a/ a(a+1).......(a+n-1)
b/ 1/a + 1/a(a+1)+........+1/a(a+1)....(a+n)
Bài 35: Tìm tất cả các ớc số của một số nguyên n cho trớc
Bài 36: Biết số dân thành phố là 650000 và tỷ lệ tăng dân là 4.5% mỗi năm, hãy tính số dân trong
vòng năm năm tiếp theo.
Bài 37: Hãy in ra mã ASCII của các kí tự từ A đến Z và từ a đến z .
Bài 38: Tính tổng bình phơng các số lẻ từ 1 đến n
Bài 39: Tính tổng bình phơng các số chẵn từ 1 đến n
Bài 40: Đọc vào n số nguyên rồi in ra giá trị cực đại.
Bài 41: Tìm các số nguyên a,b,c,d khác nhau trong khoảng (0,10) thỏa mãn điều kiện
a*d*d=b*c*c*c
Bài 42: Giải bài toán vui
Trăm trâu trăm cỏ
Trâu đứng ăn năm
Trâu nằm ăn ba
Lụ khụ trâu già
ba con một bó
Hỏi có mấy trâu đứng, nằm , già
Bài 43: Một tờ giấy có độ dày 0.1 mm. Phải gấp đôi tờ giấy lên bao nhiêu lần để nó dày hơn 1m.
Bài 44: Tìm tất cả các số nguyên tố trong khoảng (2,n).
Bài 45: Đổi một số nguyên sang hệ nhị phân
Bài 46: Đổi một số nguyên sang hệ thập lục phân
Bài 47: Sử dụng REPEAT...UNTIL , viết chơng trình nhập điểm một môn học nào đó của từng học
sinh và tính điểm trung bình của lớp .
Bài 48: Làm lại bài 47 sử dụng WHILE .....DO
Bài 49: Làm lại bài tập trên sử dụng FOR..TO...DO
77
Giáo trình Tin học Đại cơng
KS.Đặng Quang Thanh
chơng V
Kiểu vô hớng liệt kê , kiểu đoạn con
Dữ liệu có cấu trúc : kiểu mảng
I. Định nghĩa kiểu dữ liệu mới
Trong quá trình lập trình có những biến ta không thể xác định đợc kiểu dữ liệu của nó.
Pascal cung cấp cho ta các kiểu dữ liệu cơ sở (real, integer, string, char, boolean) đã có sẵn. Còn để
sử lý các bài toán phức tạp hơn, chúng ta phải tự định nghĩa những kiểu dữ liệu mới dựa trên năm
kiểu cơ sở.
Để định nghĩa kiểu dữ liệu mới, trong phần khai báo sau từ khoá TYPE ta sẽ định nghĩa
thêm các kiểu dữ liệu mới cần dùng để sau đó ta có thể sử dụng kiểu dữ liệu mới này nh dùng kiểu
dữ liệu cơ sở.
Ví dụ: Ta định nghĩa dữ liệu kiểu màu sắc gồm 3 màu Đo, xanh, vàng nh sau:
TYPE
Mausac=(do, xanh, vang);
Var
Mau:mausac;
II. Kiểu vô hớng liệt kê (Enumerated Scalar type)
Một kiểu dữ liệu thuộc kiểu vô hớng có thể đợc định nghĩa nh là một tập hợp các giá trị đợc
sắp xếp theo một thứ tự tự nhiên. Một biến khi đợc khai báo là kiểu vô hớng nào đó có thể nhận một
giá trị trong tập hợp các giá trị đó.
Ví dụ: các ngày trong tuần khi định nghĩa là một kiểu liệt kê
Type
Ngay=(hai, ba, bon, nam, sau, bay, chunhat);
Var
Thu: ngay;
1. Viết ra màn hình giá trị kiểu liệt kê
Ta không thể dùng trực tiếp lệnh Write hoặc Writeln để in ra màn hình nh các biến có kiểu
thuộc các kiểu cơ sở. Mà ta phải dùng một thủ thuật sau:
Giả sử muốn in thứ hai ra màn hình
IF thu=hai then Write('Hai');
2. Đọc vào kiểu liệt kê
Tơng tự nh in ta không thể đọc vào một cách trực tiếp bằng lệnh readln mà phải làm nh 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.
Type
Ngay=(hai, ba, bon, nam, sau, bay, chunhat);
Var
Thu: ngay;
78
Giáo trình Tin học Đại cơng
KS.Đặng Quang Thanh
I:integer;
BEGIN
Readln(i);
Thu:=ngay(i);
END.
*Hàm thứ tự ORD(x)
Hàm này cho ta số thứ tự của x trong kiểu vô hớng đếm đợc , thực chất là hàm biến
đổi một giá trị kiểu vô hớng đếm đợc sang gia strị kiểu số nguyên.
Ví dụ:
ORD(ba)=1 là đúng vì ba có số thứ tự là 1
Ngợc lại
Ngay(4) cho ta kết quả là sau
III. Kiểu khoảng con (Sub-range Type)
Ta thấy rằng có nhiều trờng hợp một biến có thể chỉ lấy giá trị trong một khoảng đợc xác
định bởi giá trị giới hạn dới và giá trị giới hạn trên thuộc một kiểu vô hớng đếm đợc nào đó.
Cách định nghĩa kiểu khoảng con:
TYPE
Tên kiểu=hằng cận dới..hằng cận trên;
Ví dụ: Tuổi thọ của ngời từ 0 đến 100. khi đó ta có thể định nghĩa nh sau:
TYPE
Tuoitho=0..100;
Var
Tuoi:tuoitho;
IV. Dữ liệu kiểu mảng
1. Định nghĩa: Mảng là tập hợp hữu hạn các phần tử có cùng kiểu. Số phần tử của mảng đợc
xác định ngay từ khi định nghĩa ra mảng. Mỗi phần tử của mảng đợc truy nhập trực tiếp thông qua
tên mảng cùng với chỉ số của mảng đợc đặt trong hai ngoặc vuông[].
2. Định nghĩa kiểu mảng và khai báo
TYPE
Kiểu_mảng=array[miền chỉ số1, miền chỉ số 2...] of kiểu_phần_tử;
Var
Tên_biến_mảng:Kiểu_mảng;
Hoặc có thể khai báo trực tiếp
Var
Ten_biến_mảng:array[miền chỉ số1, miền chỉ số 2...] of kiểu_phần_tử;
79