Sử dụng ngôn ngữ lập trình để giải một số bài toán cơ bản... Các bước để giải một bài toán trên máy tính Bước 1: Xác định vấn đề - bài toán Bước 2: Lựa chọn phương pháp giải Bước
Trang 1NHẬP MÔN LẬP TRÌNH
TIN HỌC ĐẠI CƯƠNG
Trang 2BIỂU DIỄN BÀI TOÁN TRÊN MÁY TÍNH
I Bài toán và thuật toán:
Khái niệm bài toán trong tin học
Khái niệm thuật toán, các đặc trưng cơ bản của thuật toán
Biểu diễn bài toán trên máy tính.
Biểu diễn thuật toán.
II Ngôn ngữ lập trình Pascal
Khái niệm về ngôn ngữ lập trình và chương trình dịch.
Các lệnh cơ bản: lệnh nhập/xuất, lệnh rẽ nhánh (if), lệnh lặp
(while, for)
Sử dụng ngôn ngữ lập trình để giải một số bài toán cơ bản.
Trang 31 Vấn đề - bài toán
2 Máy tính và việc giải quyết vấn đề - bài
toán
3 Thuật toán - thuật giải
4 Các phương pháp biểu diễn thuật toán
5 Bài tập tổng hợp
I BÀI TOÁN VÀ THUẬT TOÁN
Trang 4Các bước để giải một bài toán trên máy tính
Bước 1: Xác định vấn đề - bài toán
Bước 2: Lựa chọn phương pháp giải
Bước 3: Xây dựng thuật toán hoặc thuật
giải
Bước 4: Cài đặt chương trình
Bước 5: Hiệu chỉnh chương trình
Bước 6: Thực hiện chương trình
Trang 51 Vấn đề - bài toán
Vấn đề được hiểu như những khó khăn vướng mắc cần
được giải quyết
Vấn đề được thể hiện dưới dạng bài toán Có điều kiện
ban đầu và kết quả cần đạt tới
A là giả thiết hay điều kiện ban đầu
B là kết luận hay kết quả cần đạt tới
là suy luận, giải pháp để giải quyết vấn đề
Trang 72 3
Trang 82 Máy tính và việc giải quyết vấn đề - bài toán
Máy tính có thể tính toán một khối lượng khổng lồ phép tính
với độ chính xác tuyệt đối và tốc độ cực nhanh
Máy tính không thể tự tìm ra cách giải quyết vấn đề mà phải
nhờ vào những chỉ dẫn của con người thông qua ngôn ngữ
máy
Sự phát triển của ngôn ngữ bậc cao giúp con người có thể giao tiếp với máy tính một cách dễ dàng hơn.
Quá trình chuyển đổi giữa ý tưởng , ngôn ngữ tự nhiên sang
ngôn ngữ bậc cao gọi là lập trình
Ngôn ngữ bậc cao còn được gọi là ngôn ngữ lập trình
Trang 112.1.2 Hợp ngữ (Assembly)
Có cấu trúc rất giống ngôn ngữ máy
Mã lệnh được thay bằng tên viết tắt tương ứng
Chỉ chạy được sau khi đã được dịch ra ngôn ngữ máy thông qua chương trình hợp dịch ( Assembler )
Ưu điểm: khắc phục được nhược điểm của ngôn ngữ máy
Nhược điểm: không phù hợp với số đông người lập trình
Trang 122.1.3 Ngôn ngữ bậc cao
Mô phỏng ngôn ngữ tự nhiên, sử dụng các ký hiệu toán học thống nhất chung
Không phụ thuộc vào loại máy tính cụ thể
Chỉ chạy được sau khi đã được dịch ra ngôn ngữ máy thông qua chương trình thông dịch ( Interpreter ) hoặc biên dịch ( Compiler )
Ưu điểm: dễ viết, chương trình dễ hiểu, dễ hiệu chỉnh và dễ nâng cấp hơn
Trang 14Nội dung
2.2.1 Khái niệm
2.2.2 Kỹ thuật thông dịch (Interpreter)
2.2.3 Kỹ thuật biên dịch (Compiler)
Trang 152.2.1 Khái niệm
Là chương trình đặc biệt dùng để chuyển chương trình trên ngôn ngữ ban đầu (chương trình nguồn) sang chương trình tương đương trên ngôn ngữ máy
Trang 162.2.2 Kỹ thuật thông dịch
Là kiểu dịch từng dòng lệnh để hiểu công việc cần làm và thực hiện ngay chứ không nhất thiết phải tạo ra các đoạn
mã tương đương trong ngôn ngữ máy
Nếu một câu lệnh phải thực hiện nhiều lần thì cũng phải dịch nhiều lần
Ứng dụng: môi trường đối thoại giữa người và hệ thống
Trang 172.2.3 Kỹ thuật biên dịch
Là kiểu dịch toàn bộ chương trình ban đầu thành một
chương trình tương ứng trong ngôn ngữ máy (chương trình đích), sau đó nạp chương trình đích vào máy tính để thực hiện
Ứng dụng: phù hợp với các chương trình ổn định và phải thực hiện nhiều lần
Trang 18Một số ngôn ngữ lập trình thông dụng
Basic được thiết kế bởi John G Kemeny và Thomas E Kurtz tại ĐH Dartmouth vào 1963
Pascal được Niklaus Wirth phát thiết kế năm 1970
C do Dennis Richie thiết kế năm 1972 tại phòng thí
nghiệp Bell Telephone của hãng AT&T sử dụng trong
hệ điều hành Unix
Java được phát triễn bởi James Gosling thuộc Sun
Microsystem vào 6/1991
Trang 19Phương pháp gián tiếp
Áp dụng khi vấn đề - bài toán chưa tìm ra lời giải chính xác
Trang 203 Thuật toán – Thuật giải
3.1 Thuật toán
Thuật toán là một dãy hữu hạn các bước xác định nhằm giải quyết vấn đề với kết quả mong muốn.
Ví dụ: Thuật toán giải phương trình bậc nhất
ax+b=0 với a,b là hằng số
1 Yêu cầu cho biết giá trị của a,b
2 Nếu a=0 thì
2.1 Nếu b = 0 thì PT vô định Kết thúc 2.2 Nếu b ≠ 0 thì PT vô nghiệm Kết thúc
3 Nếu a ≠ 0 thì PT có nghiệp x=-b/a Kết thúc
Trang 223.3 Đặc trưng của thuật toán
Đầu vào và đầu ra
Mọi thuật toán đều nhận kết quả ở đầu vào, xử lý và cho kết quả cuối cùng
Tính hiệu quả
Khối lượng tính toán, không gian và thời gian được thi hành
là yếu tố quyết định để đánh giá, lựa chọn thuật toán giải quyết vấn đề.
Tính tổng quát
Thuật toán phải áp dụng cho một họ bài toán
Trang 233.4 Thuật giải
Mở rộng hai tiêu chuẩn của thuật toán :
Tính xác định và tính đúng đắn được mở rộng để chấp nhận các cách giải cho kết quả tốt, gần đúng nhưng ít phức tạp
Trang 244 Các phương pháp biểu diễn thuật toán
4.1 Dùng ngôn ngữ tự nhiên
4.2 Dùng lưu đồ, sơ đồ khối
4.3 Dùng mã giả
Trang 26Ví dụ: Thuật toán giải phương trình bậc nhất a x+ b =0 với a , b là hằng số
1 Yêu cầu cho biết giá trị của a , b
2 Nếu a =0 thì
2.1 Nếu b = 0 thì PT vô số nghiệm
Kết thúc thuật toán 2.2 Nếu b ≠ 0 thì PT vô nghiệm.
Kết thúc thuật toán
3 Nếu a ≠ 0 thì PT có nghiệp x =- b / a
Kết thúc thuật toán
Trang 284 Các phương pháp biểu diễn thuật toán
4.2 Dùng lưu đồ, sơ đồ khối
Lưu đồ hay sơ đồ khối là công cụ trực quan để diễn đạt các thuật
Điều kiện lựa chọn
Trang 29Đ S
Trang 304 Các phương pháp biểu diễn thuật toán
if b =0 thì : xuất kết quả “Pt vô định”
else xuất kết quả “Pt vô nghiệm”
else xuất kết quả x = - b / a
Trang 31Bài tập tổng hợp: Viết thuật toán dạng liệt
kê và vẽ lưu đồ các vấn đề sau
1 Tính diện tích, chu vi của hình chữ nhật.
2 Tính diện tích, chu vi của hình tròn.
3 Giải phương trình bậc hai a x 2 + b x+ c =0
4 Tìm số lớn nhất giữa 3 nguyên cho trước được nhập từ bàn
Trang 32II Ngôn ngữ lập trình Pascal
1. Giới thiệu ngôn ngữ lập trình Pascal
2. Cấu trúc tổng quát của một chương trình Pascal
3. Các kiểu dữ liệu đơn giản
4. Khai báo, biểu thức, câu lệnh
Trang 331 Giới thiệu ngôn ngữ lập trình Pascal
1.1 Chương trình Pascal đầu tiên
Sử dụng Turbo Pascal hoặc Free Pascal soạn thảo, biên dịch và chạy chương trình.
{This is first program}
Program FirstProgram ; Begin
Writeln( ‘ Hello World ’ );
End.
Trang 341.2 Chương trình giải phương trình bậc nhất.
Program PhuongTrinhBacI ; Var a,b:integer;
Trang 35{Phần chương trình con}
Procedure Function {Chương trình chính}
Begin {Các lệnh của chương trình chính}
End.
Trang 363 Các kiểu dữ liệu cơ bản
3.1 Kiểu dữ liệu đơn giản
Kiểu số nguyên(Integer)
Kiểu số thực(Real)
Kiểu ký tự(Char)
Kiểu logic(Boolean)
3.2 Kiểu dữ liệu có cấu trúc
Kiểu mảng(Array)
Kiểu chuỗi(String)
Kiểu tập hợp(Set)
Kiểu bản ghi(Record)
Kiểu tập tin(File,Text)
Trang 373.1 Kiểu dữ liệu đơn giản
Kiểu số nguyên( Integer )
Phép toán Ý nghĩa Kiểu kết quả
DIV Chia lấy phần nguyên Số nguyên MOD Chia lấy phần dư Số nguyên + - * Cộng, Trừ, Nhân Số nguyên
INC(x) Tăng x lên 1 DEC(x) Giảm x xuống 1 ODD(x) Cho kết quả đúng nếu x lẻ
Trang 383.1 Kiểu đơn giản
Kiểu số thực( Real )
ABS(x) Lấy giá trị tuyệt đối của x SQR(x) Lấy bình phương của x SQRT(x) Lấy căn bậc 2 của x ROUND(x) Làm tròn x
INT(x) Lấy phần nguyên của x
1.7E+38
Trang 403.1 Kiểu đơn giản
Kiểu ký tự( Char )
+ Nối các ký tự thành chuỗi ‘A’+’B’ ‘AB’
‘B’<=‘A’ TRUE
Tên
ORD(c) Cho vị trí của ký tự c trong
bảng mã ASCII ORD(‘A’) = 65ORD(‘0’) = 48 CHR(n),
#n Cho ký tự tại vị trí n trong bảng mã ASCII CHR(32) = ‘ ’CHR(65) = ‘A’
Trang 413.1 Kiểu đơn giản
Dữ liệu thuộc kiểu boolean chỉ có thể nhận giá trị
TRUE hoặc FALSE
Các phép toán trên kiểu Boolean
AND, OR, NOT, XOR
E
TRUE TRUE
FALS E
FALS E
E TRUE TRUEFALS
Trang 424 Khai báo, biểu thức, câu lệnh
4.2 Khai báo biến(Variable)
Biến là một vùng nhớ được đặt cho một tên dùng để lưu trữ dữ liệu nào đó Giá trị của vùng nhớ chính là giá trị của biến
Tên biến phải bắt đầu bằng một chữ cái, không có
khoảng trắng
Cách khai báo
Var <tên biến> : <kiểu dữ liệu>;
Trang 434 Khai báo, biểu thức, câu lệnh
4.2 Khai báo biến(Variable)
Var
N : integer ; a,b : real ;
ch : char ; hovaten : string ; test : boolean ;
Cách khai báo
Var <tên biến> : <kiểu dữ liệu>;
Trang 444 Khai báo, biểu thức, câu lệnh
4.1 Khai báo hằng (Constant)
Hằng là một đại lượng không đổi trong suốt quá trình thực thi chương trình
Trang 464 Khai báo, biểu thức, câu lệnh
4.3 Biểu thức
Thứ tự ưu tiên
1. Phép gọi hàm
2. Not - (dấu âm)
3. * / DIV MOD AND
5. = <> <= >= < > IN
Qui tắc tính thứ tự độ ưu tiên
• Phép toán có độ ưu tiên cao hơn sẽ được tính trước
• Các phép toán có cùng độ ưu tiên thì tính từ trái sang phải.
• Phần trong ngoặc từ trong ra ngoài được tính thành giá trị đơn.
Trang 47<tên biến> := <giá trị>;
<tên biến> := <biểu thức>;
Ví dụ
Delta := SQR (B) – 4*A*C;
Bcnn := a*b div UCLN (a,b);
dientich := chieudai*chieurong;
Trang 484 Khai báo, biểu thức, câu lệnh
Trang 49Readln(X1, X2, …, Xn)
Nhập dữ liệu từ bàn phím vào các biến X1,X2, ,Xn
Readln; Dừng chương trình, đợi
Trang 50Writeln( ‘ chu vi= ’ , (dai+rong)*2);
Writeln( ‘ ket thuc chuong trinh ’ );
Trang 516 Cấu trúc điều kiện
Program PhuongTrinhBacI ; Var a,b:integer
Begin
if a<>0 then writeln(‘x=‘,-b/a)
Đ S
Trang 526 Cấu trúc điều kiện
6.1 Câu lệnh if …then …else Program PhuongTrinhBacI ;
Trang 546 Cấu trúc điều kiện
end ; End
Trang 55a
Trang 56Until < điều kiện >
Lặp lại quá trình thực hiện câu
lệnh cho đến khi điều kiện
đúng thì dừng.
Trang 57if a>b then a:=a-b
Trang 58if a>b then a:=a-b
Nếu điều kiện đúng thì thực hiện
câu lệnh cho đến khi điều kiện
Sai thì dừng.
Trang 597 Cấu trúc lặp
Viết chương trình tính tổng sau với N là
số tự nhiên cho trước:
N
T 12 22 32 2
Trang 60Write (‘N=’); Readln ( N );
until N >0;
T :=0; I:=1;
while I<=N do begin
Trang 61End
Trang 647 Cấu trúc lặp
Chú ý:
Vòng lặp For có số bước lặp xác định
Biến đếm phải có kiểu rời rạc
Biến đếm tự động tăng/giảm 1 sau mỗi lần lặp
For <biến đếm>:=<giá trị đầu> to <giá trị cuối> do
<câu lệnh>
For < biến đếm >:=< giá trị đầu > downto < giá trị cuối > do
<câu lệnh>
7.3 Cấu trúc lặp For
Trang 65Bài tập về chu trình và rẽ nhánh :
1. Số hoàn thiện là số mà tổng các ước thực sự bằng chính
nó Ví dụ: 6=1+2+3 Hãy tìm các số hoàn thiện nhỏ hơn N.
2. Số nguyên tố là số chỉ có 2 ước là 1 và chính nó Hãy tìm các số nguyên tố nhỏ hơn N.
Trang 668 Kiểu dữ liệu mảng (Array)
Trang 68R: array[- 1 1 ] of real ; C: array[‘ a ’ ’ d ’] of char ; B: array[ 1 10 ] of byte ;
Trang 71tên mảng : tên kiểu mới ;
Khai báo gián tiếp
Type
MangSoNguyen : array[‘ 1 ’ ’ 10 ’] of byte
Var
Trang 73readln( n );
for i := 1 to n do begin
write(‘ nhap phan tu thu ’, i ,’ :’); readln( a [ i ] );
Trang 74write(‘ phan tu thu ’, i ,’ :’); writeln( a [ i ] );
end;
end;.
Trang 75Bài tập về mảng một chiều
1 Nhập vào dãy số N số nguyên Xếp các số lẻ vào đầu dãy,
các số chẵn vào cuối dãy.
2 Viết chương trình nhập vào một dãy số nguyên Sau đó
chèn thêm một phần tử tại vị trí bất kỳ vào dãy In ra dãy số sau khi chèn.
3 Viết chương trình nhập vào một dãy số nguyên Xóa một
phần tử có giá trị bất kỳ trên dãy In ra dãy sau khi xóa.
4 Nhập vào một dãy gồm N số nguyên Xuất ra dãy số trên
sau khi được sắp xếp tăng dần.
5 Nhập vào một dãy số nguyên, kiểm tra dãy trên có phải là
cấp số cộng không?
6 Nhập vào dãy N số nguyên, tìm dãy cấp số cộng dài nhất
trên dãy đã cho.
Trang 76] [2, 2] [2,3 ] [2, 4] [2, 5] [3,1
] [3, 2] [3,3 ] [3, 4] [3, 5] [4,1
] [4, 2] [4,3 ] [4, 4] [4, 5] [5,1
] [5, 2] [5,3 ] [5, 4] [5, 5]
Trang 78] [2, 2] [2,3 ] [2, 4] [2, 5] [3,1
] [3, 2] [3,3 ] [3, 4] [3, 5] [4,1
] [4, 2] [4,3 ] [4, 4] [4, 5] [5,1
] [5, 2] [5,3 ] [5, 4] [5, 5]
A[ 3 , 3 ] = 5
A:array[1 5,1 5] of byte;
Trang 79readln( n,m );
for i := 1 to n do for j := 1 to m do begin
Trang 80end;
end.
Trang 82Bài tập về mảng hai chiều
4 Viết nhập vào hai ma trận, sau đó in ma trận
kết quả của phép nhân 2 ma trân trên.
5 Viết chương trình tính tổng các phần tử trên
tam giác dưới của một ma trận vuông cấp N.
Trang 839 Kiểu dữ liệu chuỗi (String)
Trang 84gioitinh : string[ 3 ];
filename : string;
danhsachlop:array[1 50] of string[50];
Trang 85Các thao tác nhập, xuất, so sánh, gián giá trị
trên chuổi được sử dụng giống như các biến thuộc kiểu cơ bản thông thường
Trang 86b Các hàm thao tác trên chuỗi
Length(St) cho độ dài thực sự của xâu ký tự St
VD: Length(‘ABC’) 3 Delete(St,N,M) Xóa M ký tự của chuỗi St bắt đầu tại vị trí N
St=‘Tin học’ Delete(St,4,4) St=‘Tin’
Insert(S,St,N) Chèn xâu S vào xâu St bắt đầu tại vị trí N
St=‘Nguyen Thanh’
Insert(‘Van ‘,St,8) St=‘Nguyen Van Thanh’
Copy(St,N,M) Sao chép M ký tự của xâu St bắt đầu tại vị trí N
St=‘Tin học’; Copy(St,5,3) ‘học’
Str(N,St) Biến đổi giá trị số N thành chuỗi số đặt vào St
Str(3.1416,St) St=‘3.1416’
Val(St,N,Er) Biến đổi chuỗi St thành số đặt vào N, Er là biến số nguyên
sẽ chứa mã lỗi nếu có.
Val(‘3.1416’,N,Er) N=3.1416 nếu N là kiểu Real N=0, Er=2 nếu N có kiểu số Word
Phép nối chuỗi St=“Tin”; St=St+ ‘ ’+ ‘học’ St=‘Tin học’
Trang 87Bài tập về chuỗi
1. Viết chương trình kiểm tra một chuỗi có phải là
Palindrom hay không?
2. Viết chương trình đếm số ký tự xuất hiện trong
5. Viết chương trình in ra từ dài nhất trong chuỗi
6. Viết chương trình nhập vào họ và tên In ra họ, tên
lót, tên
7. Viết chương trình nhập vào danh sách họ và tên In
ra danh sách vừa nhập với định dạng canh đều 2 bên
Trang 8810 Chương trình con
Procedure & Function
Trang 90Một số thủ tục và hàm tự định nghĩa
Nhapmang(
A,n);
dtb:=Tinh trungbinh(a)
T:=T+Giaithua(i)/
Mu(i,n);
If palindrom(st) then
Trang 9110.1 Khái niệm
Thủ tục (Procedure) và hàm (Function) là những chương trình con có chức năng giúp cho người lập
trình giảm bớt công sức và chương trình ngắn gọn, dễ hiểu và dễ kiểm tra.
End.
Trang 9210.2 Định nghĩa thủ tục và gọi thủ tục
Loại 1: Thủ tục không có tham số
Procedure Ten_thu_tuc ; {phần khai báo của thủ tục}
Writeln(‘Chao cac ban’); Writeln(‘ -’); End;
Begin
xuat_loi_chao ; End.
Lời gọi thủ tục
Trang 9310.2 Định nghĩa thủ tục và gọi thủ tục
Loại 2: Thủ tục có tham số
Procedure Ten_thu_tuc( Danh sách các tham số )
{phần khai báo của thủ tục}
End;
Begin
Nhapmang(a ,n);
Xuatmang(a, n)
End.
Trang 9410.3 Định nghĩa hàm và gọi hàm
Định nghĩa
Funtion ten_ham(Danh sách các tham số nếu có):kiểu trả về
{phần khai báo của hàm}
Tên_hàm(Danh sách các tham số nếu có )
Khi gọi hàm, tên hàm phải tham gia như là một biểu thức.
End.
Trang 9510.3 Định nghĩa hàm và gọi hàm
Funtion ten_ham(Danh sách các tham số nếu có):kiểu trả về
{phần khai báo của hàm}
Trang 9610.3 Định nghĩa hàm và gọi hàm
Funtion ten_ham(Danh sách các tham số nếu có):kiểu trả về
{phần khai báo của hàm}
giaithua:=gt;
End.
Begin
Writeln(giaithua( 10));
End.
Trang 9710.4 Tầm vực hoạt động của biến
Biến toàn cục:
Là biến được khai báo trong chương trình chính Các biến này
có thể sử dụng mọi nơi trong chương trình, kể cả trong chương trình con.
Biến cục bộ:
Là biến được khai báo trong chương trình con Biến này chỉ
có thể sử dụng trong chương trình con mà nó khai báo.
Tầm vực hoạt động của biến là phạm vi mà biến có tác dụng.
Program
Mức 0 Mức 1
Mức 2
Trang 98Cho biết kết quả sau khi chạy chương trình
Trang 9910.5 Tham số của chương trình con
Tham biến : là tham số của chương trình con, được khai báo sau từ khóa Var Tham biến giúp đưa giá trị vào chương trình con và giúp chương trình gọi nhận giá trị từ chương trình con.
Tham trị : là tham số của chương trình con, giúp đưa giá trị vào chương trình con.
End.