Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 40 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
40
Dung lượng
209 KB
Nội dung
Tàiliệu bồi dưỡng HSG Pascal Trường THCSTháiHòa MỤC LỤC PHẦN MỞ ĐẦU CHƯƠNG I .4 CÂU LỆNH CÓ CẤU TRÚC LẶP XÁC ĐỊNH .4 CHƯƠNG II 11 CẤU TRÚC LẶP KHÔNG XÁC ĐỊNH .11 CÁCH CHUYỂN ĐỔI TỪ FOR – DO SANG WHILE – DO 12 CHƯƠNG III 19 DỮ LIỆU KIỂU MẢNG MỘT CHIỀU 19 CHƯƠNG IV 28 DỮ LIỆU KIỂU MẢNG HAI CHIỀU 28 CÁC THUẬT TOÁN VỀ SỐ 33 CÁC THUẬT TOÁN TRÊN MẢNG 36 PHẦN MỞ ĐẦU Cấu trúc chung chương trình Pascal Program ; Uses Crt; {Khai báo thư viện hàm} Const = ; {Khai báo hằng} Var , : ; {Khai báo biến} Begin Clrscr; { Lệnh xóa hình kết } Write(‘’); Readln(); { Nếu cần} Giáo viên: Nguyễn Quang Hiệu Trang Tàiliệu bồi dưỡng HSG Pascal Trường THCSTháiHòa {Xử lĩ kết quả} Writeln(‘’,); { Nếu cần} Readln; {Giữ hình kết quả} End a Biến - Biến đại lượng mà giá trị thay đổi trình thực chương trình - Cú pháp khai báo: VAR ,, : ; Ví dụ: VAR x, y: Real; {Khai báo hai biến x, y có kiểu Real} a, b: Integer; {Khai báo hai biến a, b có kiểu integer} b Các hàm số học sử dụng cho kiểu số nguyên số thực: Tên hàm Hàm bình phương Hàm bậc hai Hàm trị tuyệt đối Hàm mũ ngược b mũ a: (ba) Trả số nguyên gần với x bé x Làm tròn số nguyên x Cho giá trị TRUE n số lẻ Tăng n thêm đơn vị (n:=n+1) Giảm n đơn vị (n:=n-1) Ví dụ - giải thích Sqr(5)= 25 Sqrt(9)=3 SQR(x) SQRT(x) ABS(x) EXP(a*LN(b)) VD: 102 ta dùng hàm Exp hàm mũ hàm ngược hàm ln (log Nêpe) nghĩa dùng Exp(2*ln(10)) để lấy giá trị 10 mũ TRUNC(x): X=5.2; Trunc(x)=5 ROUND(x) ODD(n) INC(n) DEC(n) X=5.8 round(x)=6 N=5; ODD(n)=true N=5; inc(n)=6 N=5; dec(n)=4 c hàm MOD (Phép chia lấy phần dư) hàm DIV (Phép chia lấy phần nguyên) Vd: x=7 Vd: x=4 Vd: x=7 Vd: x=4 X mod 2= X mod 2= X div 2= X div 2= Sử dụng phép chia MOD để kiểm tra tính chẵn lẻ số: (số đó) mod =0 số số chăn, (số đó) mod 0 số số lẻ VD: X=7: X=8: X MOD 20 Vậy X số lẻ X MOD 2=0 Vậy X số chẵn Giáo viên: Nguyễn Quang Hiệu Trang Tàiliệu bồi dưỡng HSG Pascal Trường THCSTháiHòa II CÂU LỆNH LỰA CHỌN (RẼ NHÁNH) Lệnh IF IF < Điều kiện> THEN < Câu lệnh 1> ELSE < Câu lệnh 2>; Giải thích lệnh: Khi gặp lệnh máy kiểm tra < Điều kiện> biểu thức có giá trị TRUE (tức điều kiện đặt ra) máy thực ngược lại, tức có giá trị FALSE thực Trường hợp câu lệnh phần ELSE có giá trị FALSE không thực máy chuyển đến câu lệnh kế sau lệnh IF Chú ý: Trước từ khóa ELSE không đựơc có dấu ‘;‘ Trường hợp có câu lệnh ghép đựơc đặt kế trước ELSE từ khoá END trước ELSE không đặt dấu ‘;‘ Ví dụ 1: Chương trình nhập từ bàn phím số nguyên a, b Kiểm tra cho biết số lớn Var a, b : Integer; Begin Write( ‘ Nhap so a: ‘ ); Readln(a); Write( ‘ Nhap so b: ‘ ); Readln(b); If a > b then Write( ‘ So lon hon la ‘, a) { vị trí không đặt dấu; } Else Write( ‘ So lon hon la ‘, b); Readln; End Ví dụ 2: Viết chương trình kiểm tra ba số a, b, c nhập từ bàn phím, số lớn Var a, b, c, max : Integer; Begin Write( ‘ Nhap so a: ‘ ); Readln(a); Write( ‘ Nhap so b: ‘ ); Readln(b); Write( ‘ Nhap so c: ‘ ); Readln(c); Max := a; If max < b thenMax := b; If max < c then Max := c; Write( ‘ So lon hon la ‘, max); Readln; End Giáo viên: Nguyễn Quang Hiệu Trang Tàiliệu bồi dưỡng HSG Pascal Trường THCSTháiHòa CHƯƠNG I CÂU LỆNH CÓ CẤU TRÚC LẶP XÁC ĐỊNH A LÝ THUYẾT: II CÂU LỆNH LẶP 2.1 Vòng lặp xác định Có hai dạng sau: Dạng tiến FOR := TO DO S; Dạng lùi FOR := DOWNTO DO Sơ đồ thực vòng lặp FOR: Dạng tiến Dạng lùi Biến đếm:=Min Biến đếm:=Max - Biến đếm=Max S; Thoát S; DEC(Biến đếm); Thoát Chú ý: Khi sử dụng câu lệnh lặp FOR cần ý điểm sau: Không nên tuỳ tiện thay đổi giá trị biến đếm bên vòng lặp FOR làm không kiểm soát biến đếm Giá trị Max Min câu lệnh FOR xác định vào đầu vòng lặp Do cho dù vòng lặp ta có thay đổi giá trị số lần lặp không thay đổi Giáo viên: Nguyễn Quang Hiệu Trang Tàiliệu bồi dưỡng HSG Pascal Trường THCSTháiHòa III CÂU LỆNH LẶP Trường hợp để giải toán mà ta cần phải lặp lặp lại công việc ta cần đến lệnh lặp Số bước lặp xác định không xác định Trong ngôn ngữ Pascal có ba câu lệnh lặp FOR, REPEAT, WHILE Nếu số vòng lặp xác định ta sử dụng lệnh FOR vòng lặp không xác định ta sử dụng lệnh REPEAT WHILE Tất loại lệnh lặp phải có điểm dừng, cho dù loại xác định hay không xác định Vòng lặp xác định (For) a Dạng tiến: Cú pháp: FOR := TO DO < Câu Lệnh >; cấu trúc FOR gọi biến điều khiển Kiểu biến điều khiển kiểu số nguyên, , phải kiểu vô hướng đếm (số nguyên, kí tự…) Giải thích hoạt động lệnh FOR dạng tiến: B1: Đầu tiên, Biến nhận giá trị biểu_ thức1 B2: Máy kiểm tra Biến có nhỏ biểu_ thức2 hay không tức xét điều kiện (Biến = Biểu_ thức2) ? B3: Nếu điều kiện sai máy thoát khỏi vòng lặp FOR để thực lệnh sau vòng lặp FOR Nếu điều kiện thực hiện, sau đó, Biến giảm giá trị quay trở lại bước (2) Lưu ý : - Không thay đổi giá trị biến điều khiển lệnh vòng lặp FOR Điều làm cho vòng lặp lối thoát dân đến treomáy - Các Biểu thức1 Biểu hức2 ước lượng trước vào vòng lặp, số vòng lặp không bị thay đổi Ta lợi dụng tính tăng giảm biến điều khiển để gán giá trị cho biến thực công việc có tính chất tăng giảm VD: Tính tổng số liên tiếp từ đến 100 program Tinh_tong; Giáo viên: Nguyễn Quang Hiệu Trang Tàiliệu bồi dưỡng HSG Pascal Trường THCSTháiHòa var i,S:integer; begin S:=0; for i:=1 to 100 S:=S+1; write('Tổng là:',S); readln; end B BÀI TẬP Bài tập 3.1: Viết chương trình in số lẻ nhỏ n (Với n nhập) a Hướng dẫn: - Cho biến i chạy từ đến n - Nếu i chẵn ( i chia dư 0) in số n b Mã chương trình: Program In_So_Le; Uses crt; var i,n: integer; Begin Clrscr; Write('Nhap so n ='); readln(n); For i:=1 to n if i mod =1 then Write(i:3,','); readln end Bài tập 3.2: Viết chương trình in số lẻ nhỏ n ( Với n nhập) Sao cho 15 số lẻ in dòng a Hướng dẫn: - Cho j =0 - Cho biến i chạy từ đến n - Nếu i chẵn ( i chia dư 0) in số n tăng dem lên - Nếu dem chia hết cho 15 thực xuống dòng (Dùng Writeln) b Mã chương trình: Program In_So_Le; Uses crt; var Dem,i,n: integer; Begin Clrscr; Giáo viên: Nguyễn Quang Hiệu Trang Tàiliệu bồi dưỡng HSG Pascal Trường THCSTháiHòa Write('Nhap so n ='); readln(n); Dem:= 0; For i:=1 to n if i mod =1 then Begin Write(i:3,','); Dem:= Dem + 1; if Dem mod 15 = then Writeln; end; readln end c Nhận xét: Lệnh writeln tham số cho phép xuống hàng Nếu có nhận xét 30 số có 15 số lẻ, ta không cần thêm biến đếm mà cần kiểm tra biến i để xuống hàng Bài tập 3.3: Viết chương trình in tổng số lẻ nhỏ n ( Với n nhập) a Hướng dẫn: - Cho S = - Cho biến i chạy từ đến n - Nếu i chẵn ( i chia dư 0) cộng thêm i vào S - In S b Mã chương trình: Program In_So_Le; Uses crt; var S,i,n: integer; Begin Clrscr; Write('Nhap so n ='); readln(n); S:= 0; For i:=1 to n if i mod =1 then S:= S+i; Writeln('Tong cac so le nho hon ',n,' la: ',S); readln end c Nhận xét: Ta dùng biến S để cộng dồn nên khởi tạo giá trị đầu Bài tập 3.4: Viết chương trình in tất ước số n (Với n nhập từ bàn phím) a Hướng dẫn: - Cho biến i chạy từ đến n Nếu n chia hết cho i in i b Mã chương trình: Giáo viên: Nguyễn Quang Hiệu Trang Tàiliệu bồi dưỡng HSG Pascal Trường THCSTháiHòa Program Tim_uoc; uses crt; Var n, i: integer; Begin clrscr; Write('Nhap so n ='); readln(n); For i:=1 to n if n mod i = then write(i:3,','); readln end c Nhận xét: Chương trình có hai điểm yếu: - In dư dấu phẩy cuối dãy ước - Khi n = không in số số ước Hãy tìm cách khắc phục yếu điểm Bài tập 3.5: Một số có tổng ước nhỏ nó gọi số hoàn chỉnh Ví dụ: có ước nhỏ 1, 2, Tổng + + = Viết chương trình xét xem số n nhập từ bàn phím có phải số hoàn chỉnh không a Hướng dẫn: - Dùng biến n lưu số cần xét - Biến S có giá trị ban đầu - Cho i chạy từ đến n-1 i ước n cộng thêm i vào S - Nếu S = n S số hoàn chỉnh b Mã chương trình: Program So_Hoan_Chinh; uses crt; var n, i, s: integer; begin write('nhap so n: ');readln(n); s:=0; for i:= to n -1 if n mod i = then s:=s+i; if s = n then write(n, ' la so hoan chinh') else writeln(n, ' khong phai la so hoan chinh'); readln end Bài tập 3.6: Viết chương trình tìm số hoàn chỉnh nhỏ n (Với n nhập từ bàn phím) Giáo viên: Nguyễn Quang Hiệu Trang Tàiliệu bồi dưỡng HSG Pascal Trường THCSTháiHòa a Hướng dẫn: Cho biến i chạy từ đến n Xét i Nếu số hoàn chỉnh in b Mã chương trình: Program Tim_uoc_2; uses crt; Var S, n, i,j: longint; Begin clrscr; Write('Nhap so n ='); readln(n); For i:=1 to n Begin S:=0; For j:=1 to i if i mod j = then S:=S+j; if S = 2*i then write(i:6,','); end; readln end c Nhận xét: Ở ta sử dụng hai vòng lặp lồng Bài tập 3.7 In bảng cửu chương n (Với n nhập từ bàn phím) a.Hướng dẫn : b Mã chương trình: Program Cuu_Chuong_1; uses crt; var n, i : integer; begin clrscr; write('Nhap n: '); readln(n); for i:= to writeln(n,' x ', i, ' = ', n*i); readln end Bài tập 3.8 Lần lượt in bảng cửu chương a.Hướng dẫn : - Cho biến i chạy từ đến - In bảng cửu chương i b Mã chương trình: Program Cuu_Chuong_1; uses crt; Giáo viên: Nguyễn Quang Hiệu Trang Tàiliệu bồi dưỡng HSG Pascal Trường THCSTháiHòa var i,j : integer; begin clrscr; for i:= to Begin Writeln('Bang cuu chuong ',i); For j := to writeln(i,' x ', j, ' = ', j*i); readln end; readln end c Nhận xét: Chương trình in bảng cửu chương dọc (Hết bảng đến bảng khác tính từ xuống) Hãy sửa chương trình để in theo kiểu ngang thường thấy Bài tập 3.9 Viết chương trình xét xem số n có phải số nguyên tố không? a.Hướng dẫn: - Nếu n không chia hết số i có giá trị từ đến n - n số nguyên tố - Sử dụng biến ok có kiểu boolean có giá trị ban đầu true - Cho biến i chạy từ đến n – Xét n mod i Nếu gán ok = false Ngược lại để nguyên ok b.Mã chương trình: Program Nguyen_to_1; uses crt; var n, i: integer; ok: boolean; begin ok:=true; write('Nhap n: ');readln(n); for i:= to n - if n mod i = then ok :=false; if ok then write(n,' la so nguyen to') else write(n, ' khong la so nguyen to'); readln end c Nhận xét: Ở ta sử dụng biến có kiểu logic (Đúng, sai) Chỉ cần lần n mod i = sau thực xong vòng lặp ok có giá trị false Bài tập 3.10 Viết chương trình in tất số nguyên tố bé n? Giáo viên: Nguyễn Quang Hiệu Trang 10 Tàiliệu bồi dưỡng HSG Pascal Trường THCSTháiHòa Write('cac so duong co mang la:'); FOR i:=1 TO n DO IF a[i] >0 THEN Write(a[i]:3); END; PROCEDURE sodungovitrichan; VAR i:INTEGER; BEGIN Write('cac so dung o vi tri chan la:'); FOR i:=1 TO n DO IF i MOD 2=0 THEN Write(a[i]:3); END; PROCEDURE tinhtongcacsodungovitrile; VAR i,tong:INTEGER; BEGIN tong:=0; Write('tong cac so dung o vi tri le la:'); FOR i:=1 TO n DO IF i MOD 20 THEN Tong:=tong+a[i]; Write(tong); END; PROCEDURE solonnhat; VAR i,max:INTEGER; BEGIN Write('so lon nhat mang la:'); max:=a[1]; FOR i:=1 TO n DO IF max0 THEN BEGIN Write(a[i]); exit; END; END; PROCEDURE sapxeptang; VAR i,j,tg:INTEGER; BEGIN Write('mang sau sap xep tang la:'); FOR i:=1 TO n-1 DO FOR j:=i+1 TO n DO IF a[i]>a[j] THEN {neu sap giam thi a[i]