bồi dưỡng học sinh giỏi tin (pascal)

144 785 8
bồi dưỡng học sinh giỏi tin (pascal)

Đ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

Bài tập Viết chương trình tính chu vi diện tích hình chữ nhật có chiều dài hai cạnh a, b (được nhập từ bàn phím) a Hướng dẫn: - Nhập hai cạnh vào hai biến a, b - Chu vi hình chữ nhật 2*(a+b); Diện tích hình chữ nhật a*b b Mã chương trình: Program Chu_nhat; uses crt; Var a, b, S, CV: real; Begin Write('Nhap chieu dai:'); readln(a); Write('Nhap chieu rong:'); readln(b); S := a*b; CV := (a+b)*2; Writeln('Dien tich hinh chu nhat la:',S); Writeln('Chu vi hinh chu nhat la:',CV:10:2); readln end c Nhận xét: Lệnh write cho phép in hình nhiều mục Có thể định dạng số in cách qui định khoảng dành cho phần nguyên, khoảng dành cho phần thập phân Bài tập 1.2: Viết chương trình tính chu vi, diện tích hình vuông có cạnh a (được nhập từ bàn phím) a Hướng dẫn: - Nhập cạnh vào biến canh - Chu vi hình vuông 4*canh; Diện tích hình vuông canh*canh b Mã chương trình: Program HINH_VUONG; uses crt; Var canh: real; Begin clrscr; Write('Nhap dai canh:');readln(canh); Writeln('Chu vi hinh vuong la:',4*canh:10:2); Writeln('Dien tich hinh vuong la:',canh*canh:10:2); readln end c Nhận xét: Bài tập 1.2 tiết kiệm hai biến CV S lệnh write cho phép in biểu thức Trong lập trình việc tiết kiệm biến cần thiết đôi lúc gây khó hiểu đọc, kiểm tra chương trình Bài tập 1.3: Viết chương trình tính chu vi diện tích hình tròn có bán kính r (được nhập từ bàn phím) a Hướng dẫn: - Nhập bán kính vào biến r - Chu vi đường tròn 2*π*r - Diện tích hình tròn π*r*r b Mã chương trình: Program HINH_TRON; uses crt; Var r: real; Begin clrscr; Write('Nhap ban kinh:'); readln(r); Writeln('Chu vi duong tron la:',2*pi*r:10:2); Writeln('Dien tich hinh tron la:',pi*r*r:10:2); readln end c Nhận xét: pi số Một số người dùng khai báo Pascal tự tạo Pi Pascal tự tạo nên người dùng không cần khai báo Bài tập 1.4: Viết chương trình tính diện tích tam giác có ba cạnh a,b,c (được nhập từ bàn phím) a Hướng dẫn: - Nhập ba cạnh tam giác vào ba biến a,b,c - Nửa chu vi tam giác p = (a+b+c)/2 - Diện tích tam giác: s = p( p − a)( p − b)( p − c) b Mã chương trình: Program TAM_GIAC; uses crt; Var a,b,c,p,S: real; Begin clrscr; Write('Nhap canh a:');readln(a); Write('Nhap canh b:');readln(b); Write('Nhap canh c:');readln(c); p:=(a+b+c)/2; S:= sqrt(p*(p-a)*(p-b)*(p-c)); Write('Dien tich tam giac la:',s:10:2); readln end c Nhận xét: Ở ta lại hai lần dùng biến trung gian p, s để chương trình sáng sủa, dễ theo dõi sqrt hàm có sẵn turbo pascal Nó cho phép tính bậc hai số không âm Bài tập 1.5: Viết chương trình cho phép tính trung bình cộng bốn số a Hướng dẫn: - Nhập bốn số vào bốn biến a, b, c, d - Trung bình cộng a, b, c, d (a + b + c + d)/4 b Mã chương trình: Program TB_Cong_4_So; uses crt; Var a, b, c, d: real; Begin Clrscr; Write('Nhap so thu nhat:');readln(a); Write('Nhap so thu hai:');readln(b); Write('Nhap so thu ba:');readln(c); Write('Nhap so thu tu:');readln(d); Writeln('Trung binh cong: ',(a+b+c+d)/4):10:2); Readln end Bài tập 1.6: Viết chương trình cho phép tính trung bình cộng bốn số với điều kiện sử dụng hai biến a Hướng dẫn: - Dùng biến S có giá trị ban đầu - Dùng biến để nhập số - Sau nhập số cộng vào biến S b Mã chương trình: Program TB_Cong_4_So; uses crt; Var s,a: real; Begin Clrscr; S:=0; Write('Nhap so thu nhat:');readln(a); S:=S+a; Write('Nhap so thu hai:');readln(a); S:= S+a; Write('Nhap so thu ba:');readln(a); S:=S+a; Write('Nhap so thu tu:');readln(a); S:=S+a; Writeln('Trung binh cong: ',S/4:10:2); readln end b Nhận xét: Câu lệnh gán S:= S+a thực việc cộng thêm a vào biến S Thực chất thực bước: lấy giá trị S cộng với a ghi đè vào lại biến S Ở ta sử dụng biến a biến tạm để chứa tạm thời giá trị nhập từ bàn phím Bài tập 1.7: Viết chương trình cho phép tính trung bình nhân bốn số với điều kiện sử dụng hai biến a Hướng dẫn: - Dùng biến S có giá trị ban đầu - Dùng biến để nhập số - Sau nhập số nhân vào biến S - Trung bình nhân bốn số bậc tích chúng (Dùng hai lần bậc hai) b Mã chương trình: Program TB_nhan; uses crt; Var a, S: real; Begin clrscr; S:=1; Write('Nhap so thu nhat: '); readln(a); S:=S*a; Write('Nhap so thu hai: '); readln(a); S:=S*a; Write('Nhap so thu ba: '); readln(a); S:=S*a; Write('Nhap so thu tu: '); readln(a); S:=S*a; Write('Trung binh nhan cua bon so la:',sqrt(sqrt(s))); readln End b Nhận xét: Ta dùng hai lần khai phương để lấy bậc số Để cộng dồn giá trị vào biến biến có giá trị ban đầu Để nhân dồn giá trị ban đầu vào biến biến cần có giá trị ban đầu Bài tập 1.8: Viết chương trình nhập hai số, đổi giá trị hai số in hai số a Hướng dẫn: - Dùng biến a, b để lưu hai số nhập từ bàn phím; - Gán cho biến tam giá trị a - Gán giá trị b cho a (Sau lệnh a có giá trị b) - Gán giá trị tạm cho cho b (Sau lệnh b có giá trị tam = a) b Mã chương trình: Program Doi_Gia_Tri; uses crt; var a, b, tam:real; Begin clrscr; write('nhap a: '); readln(a); write('nhap b: '); readln(b); writeln('Truoc doi a =',a,' va b= ',b); readln; tam:=a; a:=b; b:=tam; writeln('Sau doi a =',a,' va b= ',b); readln end Nhận xét: Nếu thực hai lệnh a:= b; b:=a để đổi giá trị hai biến sau hai lệnh hai biến có giá trị b Thực chất sau lệnh thứ hai biến có giá trị b rồi! Trong thực tế để đổi chỗ số dầu hai bình cho ta phải dùng thêm bình phụ Bài tập 1.9 Giải tập 1.8 mà sử dụng hai biến (Tức không dùng thêm biến tạm) a Hướng dẫn: - Cộng thêm b vào a (Giá trị hai biến sau lệnh là: a+b, b) - Gán b tổng trừ b (Sau lệnh b có giá trị a); - Gán giá trị a tổng trừ b (Sau lệnh a có giá trị b) b Mã chương trình: Program Doi_Gia_Tri; uses crt; var a, b:real; Begin clrscr; write('nhap a: '); readln(a); write('nhap b: '); readln(b); writeln('Truoc doi a =',a,' va b= ',b); readln; a:=a+b; b:=a-b; a:=a-b; writeln('Sau doi a =',a,' va b= ',b); readln end Nhận xét: Giống sang dầu hai bình không giống hoàn toàn!!!Kỹ thuật đổi giá trị biến cho sử dụng nhiều phần xếp Bài tập 1.10: Viết chương trình cho biết chữ số hàng trăm, hàng chục, hàng đơn vị số có ba chữ số Ví dụ nhập số 357 máy in ra: - Chữ số hàng trăm: - Chữ số hàng chục: - Chữ số hàng đơn vị: a Hướng dẫn: Sử dụng hàm mov để lấy số dư Khi chia cho 10 để lấy số dư ta chữ số hàng đơn vị Sử dụng DIV để lấy phần nguyên Khi chia cho 10 để lấy phần nguyên ta bỏ chữ số hàng đơn vị để số có ba chữ số số có hai chữ số b Mã chương trình: Program CHU_SO; uses crt; var n:integer; begin clrscr; write('Nhap so n: ');readln(n); writeln('Chu so hang don vi: ',n mod 10); n:=n div 10; writeln('Chu so hang chuc: ',n mod 10); n:=n div 10; writeln('Chu so hang tram: ',n mod 10); readln end c Nhận xét: Hãy sửa chương trình để có kết hàng trăm, hàng chục, hàng đơn vị Mã chương trình: Program CHU_SO; uses crt; var n:integer; begin clrscr; write('Nhap so n: ');readln(n); writeln('Chu so hang trm: ',n div 100); n:=n mov 100; writeln('Chu so hang chuc: ',n div 10); n:=n div 10; writeln('Chu so hang tram: ',n); readln end CHƯƠNG II CÂU LỆNH CÓ CẤU TRÚC RẼ NHÁNH A LÝ THUYẾT I CÂU LỆNH RẼ NHÁNH 1.1 Lệnh IF Cú pháp: (1) IF B THEN S; (2) IF B THEN S1 ELSE S2; Sơ đồ thực hiện: (1) + B S (2) - + B S1 S2 Chú ý: Khi sử dụng câu lệnh IF đứng trước từ khoá ELSE dấu chấm phẩy (;) 1.2 Lệnh CASE Cú pháp: Dạng CASE B OF Const 1: S1; Const 2: S2; Const n: Sn; END; Dạng CASE B OF Const 1: S1; Const 2: S2; Const n: Sn; ELSE Sn+1; END; Trong đó:  B: Biểu thức kiểu vô hướng đếm kiểu nguyên, kiểu logic, kiểu ký tự, kiểu liệt kê  Const i: Hằng thứ i, giá trị hằng, giá trị (phân cách dấu phẩy) đoạn (dùng hai dấu chấm để phân cách giá trị đầu giá trị cuối)  Giá trị biểu thức giá trị tập i (i=1¸n) phải có kiểu Khi gặp lệnh CASE, chương trình kiểm tra: - Nếu giá trị biểu thức B nằm tập const i máy thực lệnh S i tương ứng - Ngược lại: + Đối với dạng 1: Không làm + Đối với dạng 2: thực lệnh Sn+1 B BÀI TẬP: Bài tập 2.1: Viết chương trình in số lớn hai số (được nhập từ bàn phím) a Hướng dẫn: - Nhập hai số vào hai biến a, b - Nếu a > b in a Nếu a b in a Ngược lại in b b Mã chương trình: Program SO_SANH1; uses crt; var a,b: real; begin clrscr; write('nhap so thu nhat: '); readln(a); write('nhap so thu hai: '); readln(b); if a> b then writeln(' So lon la:',a); if a b then writeln(' So lon la:',a:10:2) else writeln(' So lon la:',b:10:2); readln end c Nhận xét: Khi hai số số xem số lớn Hãy sửa chương trình để khắc phục yếu điểm Nói chung nên sử dụng lệnh if … then … else chương trình sáng sủa, dễ hiểu Tuy nhiên vài trường hợp sử dụng lệnh if … then rời lại dễ diễn đạt Hãy xem ví dụ sau: Bài tập 2.2: Viết chương trình in số lớn bốn số nhập từ bàn phím a Hướng dẫn: Nếu a≥ b a≥ c a≥ d a số lớn Tương tự xét trường hợp lại để tìm số lớn b Mã chương trình: Program So_Lon_Nhat_1; Uses crt; Var a,b,c,d: real; Begin Clrscr; Write('Nhap so thu nhat:');readln(a); Write('Nhap so thu hai:');readln(b); Write('Nhap so thu ba:');readln(c); Write('Nhap so thu tu:');readln(d); if (a>=b) and (a>=c) and (a>= d) then writeln('So lon nhat la:',a:10:2); if (b>=a) and (b>=c) and (b>= d) then writeln('So lon nhat la:',b:10:2); if (c>=a) and (c>=b) and (c>= d) then writeln('So lon nhat la:',c:10:2); if (d>=a) and (d>=b) and (d>= c) then writeln('So lon nhat la:',d:10:2); Giáo viên yêu cầu học sinh trình bày giấy sau thu lại (Thực chất giáo viên hướng dẫn học sinh câu lệnh Repeat … Until học sinh làm phòng máy được) Vậy sau học xong buổi ta rèn luyện số kỹ vận dụng câu lệnh IF, FOR, WHILE chuyển đổi qua lại câu lệnh, học sinh có cảm giác thích thú Một số toán ước số Bài tập 1: (bài toán bản) Viết chương trình nhập từ bàn phím số nguyên dương N, tính tổng ước thực N in hình Ví dụ: N=6 tổng ước 1+2+3 =6; N=9 tổng ước 1+ =4 Nhận xét: Học sinh biết để kiểm tra xem số i có phải ước số N hay không dùng phép toán Mod (N mod i = 0), giáo viên cần hướng dẫn học sinh duyệt số i khoảng từ đến (N div 2) học sinh làm nhanh chóng, ta có đáp án sau: Program bai1; Var i,tg,N:word; Begin Write(‘Nhap N=’); Readln(N); Tg:=0; For i:=1 to N div If n mod i =0 then tg:=tg+i; Writeln(‘Tong cac uoc la= ‘, tg:5); Readln; End Giáo viên yêu cầu học sinh nhập vài giá trị N để xem kết Sau yêu cầu học sinh làm tập sau: Bài tập 2: Số N gọi số hoàn hảo tổng ước thực N Viết chương trình nhập từ bàn phím số nguyên dương N, thông báo hình DUNG N số hoàn hảo, ngược lại thông báo KHONG Nhận xét: Học sinh dễ dàng nhận thấy cách làm tương tự cách làm 1, thêm công việc kiểm tra xem tổng ước có N hay không? Học sinh nhanh chóng chép chương trình bài1 sửa lại để chương trình sau: Program bai2; Var i,tg,N:word; Begin Write(‘Nhap N=’); Readln(N); Tg:=0; For i:=1 to N div If n mod i =0 then tg:=tg+i; If tg=N then Writeln(‘DUNG’) else writeln(‘KHONG’); Readln; End Tương tự ta yêu cầu học sinh làm tập sau: Bài tập 3: Viết chương trình in hình số hoàn hảo khoảng từ a đến b (với 1 ka chuyển sang Bước 5.3 Gán a[t]=b[t], gán t=t+1 quay lại Bước 5.2 Bước 6: Gán i= i+1 quay lại Bước Bước 7: In hình số siêu nguyên tố có N chữ số, số lượng số siêu nguyên tố ka, kết thúc Chương trình cụ thể sau: Program Bai5; var a,b: array [1 100] of longint; N,i,k,ka,kb,cs,t: byte; kt:boolean; m,j:longint; BEGIN Write ('Nhap N: '); Readln (N); ka:=1; a[ka]:=0; For i:=1 to N Begin Kb:=0; For k:=1 to ka For cs:=0 to begin m:=a[k]*10+cs; {kiem tra xem m co la so nguyen to khong} kt:=true; If (ma[j]then{Nếu a[i]>a[j] thì} begin tg:=a[i];a[i]:=a[j];a[j]:=tg;{đỗi chỗ a[i] a[j]} end; for i:=1 to n write(a[i],' ');{In mảng xếp tệp} readln; end Bài tập 2: Viết chương trình vào từ bàn phím số nguyên N mảng A gồm N phần tử In hình mảng A sau xếp phần tử theo thứ tự giảm dần Nhận xét: Yêu cầu học sinh sửa lại chương trình tập để chương trình tập (Mất phút để học sinh hoàn thành) Bài tập nhà: Em suy nghĩ thuật toán để giải toán sau đây, tham khảo thuật toán hướng dẫn Bài tập 3: Viết chương trình nhập vào dãy số nguyên có n phần tử a Đưa phần tử lẻ đầu danh sách, phần tử chẵn cuối danh sách in kết hình b Sắp xếp phần tử lẻ đầu danh sách theo thứ tứ tăng dần, xếp phần tử chẵn cuối danh sách theo thứ tự giảm dần In danh sách hình Hướng dẫn thuật toán: Câu a) Dùng đồng thời biến, biến L duyệt từ đầu dãy đến cuối dãy (để xếp hần tử lẻ lên đầu), biến R duyệt từ đầu dãy đến cuối dãy (để xếp phần tử chẵn cuối), biến L gặp số chẵn biến R gặp số lẻ ta đổi chỗ giá trị A[L] A[R] cho nhau, biến L gặp số lẻ tăng L, biến R gặp số chẵn tăng R Quá trình tìm xếp kết thúc L>R Câu b) Vì câu Câu a ta xếp phần tử lẻ lên đầu, phần tử chẵn cuối dãy nên câu b ta cần dùng biến K đếm xem có băo nhiêu phần tử lẻ sau ta dùng thuật toán xếp tăng dần cho đoạn từ đến K, sau ta lại dùng thuật toán xếp giảm dần cho đoạn từ K+1 đến N Bài tập 4: Viết chương trình nhập vào từ bàn phím mảng A gồm N phần tử số nguyên gồm loại số : Loại : số vừa chia hết cho vừa lẻ, loại : số vừa chia hết cho vừa chẵn, loại : số lại Yêu cầu xếp số loại lên đầu dãy , số loại xuống cuối dãy , số loại dãy Trước hết xếp gọn hết số loại , sau xếp đồng thời số loại Đưa hình dãy xếp Dữ liệu vào Dữ liệu N=8 88 29 81 12 42 35 62 83 88 29 81 12 42 35 62 83 81 29 88 62 83 35 12 42 Nhận xét: Giáo viên nên để giáo viên nên học sinh thử tìm thuật toán cho dựa vào thuật toán xếp biết trên, sau hướng dẫn Bài tập 5: Viết chương trình nhập vào từ bàn phím mảng chiều A gồm M phần tử, mảng chiều B gồm N phần tử, xếp dãy A B tăng dần sau trộn dãy thành dãy C cho dãy C dãy xếp tăng dần In mảng A, B, C hình Nhận xét: Giáo viên nên học sinh thử tìm thuật toán cho dựa vào thuật toán xếp biết trên, sau hướng dẫn thuật toán Hướng dẫn thuật toán: + Nhập mảng A gồm M phần tử, mảng B gồm N phần tử + Sắp xếp mảng A + Sắp xếp mảng B I:=1; j:=1; k:=1 Trộn mảng sau: Trong i

Ngày đăng: 27/04/2017, 15:52