TIẾT 48 + 49: BÀI TẬP
1. Ổn định tổ chức
Lớp | Ngày dạy | Sĩ số | Họ tên học sinh vắng | Ghi chú |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
3. Dạy bài mới
Bài 1: Viết chương trình chuyển đổi số tự nhiên N cho trước sang hệ cơ số 2 bằng việc xây dựng hàm chuyển đổi.
Hướng dẫn:
- Xây dựng hàm Dec2Bin( ) chuyển đổi từ số tự nhiên sang số nhị phân.
o Sử dụng biến S để lưu giá trị số nhị phân của N. Khởi gán bằng 0.
o Tiến hành lặp chuyển đổi cơ số: Lặp trong khi mà N > 0
§ SoDu = số dư của N chia cho 2.
§ N = N chia cho 2.
§ Bổ sung chữ số SoDu vào số S thành một chữ số
o Trả về kết quả cuối cùng của S.
- Viết thân chöông trình chính với nội dung dùng để kiểm tra kết quả thực hiện của hàm.
o Khai báo biến N, M
o Thông báo nhập, nhập giá trị cho biến N
o Gán giá trị M bằng kết quả trả về của hàm Dec2Bin( N )
o In thông báo về kết quả số nhị phân chuyển đổi được (giá trị của M)
o Gọi hàm readln trước khi kết thúc chöông trình
Chương trình:
Program Doi_Co_So;
Uses crt;
Var N:integer;
{ 1. Thu tuc chuyen so tu nhien n cho truoc sang ket qua tra ve he co so 2 }
Function Dec2Bin ( n:integer ):integer;
Var S,So,Du:integer;
Begin
S := 0; So := n ;
While ( So > 0) do
Begin
Du := So mod 2 ;
So := So div 2 ;
S := S * 10 + Du;
End;
Dec2Bin:= S ;
End;
{ 2. Than chuong trinh chinh dap ung yeu cau bai toan }
BEGIN
clrscr;
write( 'Nhap so N =' ); readln(N );
writeln(' Dang nhi phan cua N la ', Dec2Bin(N) );
readln;
END.
Bài 2: Viết các hàm USCLN(a, b) và BSCNN(a, b).
Hướng dẫn: Khai báo hàm USCLN có:
Tên hàm: USCLN
Kiểu dữ liệu trả về: integer
Tham số: 2 tham trị là int a, int b
Giá trị trả về: chính là giá trị ước số chung lớn nhất của a và b.
Xử lý tìm USCLN, BSCNN: Dựa trên ví dụ đã có ở phần trước.
Nội dung hàm:
Function USCLN( a, b : Integer) : Integer;
Var Sodu:integer;
Begin
While (b <> 0) do
Begin
Sodu:= a mod b;
a := b;
b := Sodu;
End;
USCLN := a;
End;
{Tuong tu ham BSCNN(a, b : Integer)}
Function BSCNN( a, b : Integer) : Integer;
Var k :integer;
Begin
For k := a to a*b do { Lap voi moi i co gia tri tu a den 1}
If ((k mod a = 0) and ( k mod b = 0)) then { Kiem tra a, b cung chia het cho k? }
Break; { break de thoat, luu giu lai gia tri cua k.}
BSCNN:= k;
End;
Bài 3: Viết hàm kiểm tra số N có phải là số nguyên tố hay không?
Hướng dẫn: Khai báo hàm kiểm tra số nguyên tố có:
Tên hàm: KiemtraSNT
Dữ liệu trả về: int, ( 0 nếu không phải là số nguyên tố, là 1 nếu là số nguyên tố )
Tham số: tham trị là int N, số cần kiểm tra.
Xử lý kiểm tra: Dựa trên ví dụ đã có ở phần trước.
Nội dung hàm:
Function KiemtraSNT( N : Integer ) : Boolean;
Var flag : Boolean;
i : Integer;
Begin
flag := True; { Khoi gan gia tri dung cho ktrSNT}
For i := 2 to N-1 do { Lap voi moi i co gia tri tu 2 den N-1}
If ( N mod i = 0 ) then { Kiem tra xem N co’ chia het cho i hay khong}
flag:=false; { Neu dung thi khong con la so nguyen to nua}
KiemtraSNT:=flag;
End;
Cải tiến, không sử dụng biến phụ:
Function KiemtraSN( N : Integer ) : Integer;
Var i :integer;
Begin
For i := 2 to N-1 do { Lap voi moi i co gia tri tu 2 den N-1}
If ( N mod i = 0 ) then { Kiem tra xem N co’ chia het cho i hay khong}
Writeln('N khongla SNT') { Neu dung thi khong con la so nguyen to nua}
Else
Writeln('N la SNT'); { N la SNT}
End;
Bài 4: Viết chương trình thực hiện lần lượt các công việc sau:
- Lập thủ tục nhập ba số thực dương a , b , c từ bàn phím .
- Lập thủ tục kiểm tra xem ba số trên có lập thành ba cạnh của tam giác hay không ?
- Viết hàm tính diện tích của tam giác .
- Viết hoàn thiện chương trình chính.
Chương trình
Program Tam_Giac;
Uses crt;
Var a,b,c : Integer;
{ 1. Thu tuc nhap}
Procedure NhapABC (Var a, b, c : Integer);
Begin
Write( 'Nhap a:' ); Readln( a );
Write( 'Nhap b:' ); Readln( b );
Write( 'Nhap c:' ); Readln( c );
End;
{ 2. Ham tinh dien tich}
Function Dientich( a, b, c:Integer ) : Real;
Var dt,p : Real;
Begin
p := (a+b+c)/2;
dt := sqrt(p* (p-a)*(p-b)*(p-c));
Dientich := dt;
End;
{ 3. Thu tuc kiem tra va In kqua tinh dien tich (neu la tam giac) }
Procedure KiemTra_InDienTich ( a,b,c:Integer);
Begin
If ((a+b>c) and (b+c>a) and (a+c>b)) then
Writeln(' Ba canh tren tao thanh tam giac.dien tich', Dientich(a,b,c) )
Else
Writeln('Ba canh tren khongtao thanh tam giac');
End;
{ 3. Than chuong trinh chinh }
BEGIN
NhapABC(a,b,c);
KiemTra_InDienTich (a,b,c);
END.
Bài 5: Viết chương trình hoàn chỉnh thực hiện phân tích ra N ra thành các thừa số nguyên tố.
Ví dụ: N = 1260 = 2 . 2 . 3 . 3 . 5 . 7
Hướng dẫn:
- Viết hàm nhập số N. Lưu ý, hàm nhập cần truyền tham số N theo dạng tham biến để lưu lại giá trị đã nhập vào.
- Viết hàm phân tích số N ra các thừa số nguyên tố và in các thừa số đó ra màn hình với ý tưởng thuật toán:
o Chia N cho số nguyên tố u (nhỏ nhất là 2).
o Trong khi N còn chia hết cho u thì tiến hành phân tích N với u là thừa số. Giảm N đi u lần.
o Nếu N không chia hết cho u, thi tăng u lên 1.
o Quá trình lặp lại với
§ u từng bước tăng lên 1 nếu N không chia hết cho u.
§ N từng bước giảm xuống u lần nếu N chia hết cho u.
o Quá trình lặp lại đến một mức u tăng lên và N giảm xuống để N = u, khi đó giá trị mới của N sẽ là 1.
Chương trình:
Program Phan_Tich_Thua_So;
Uses crt;
Var N : integer;
{ 1. Thu tuc nhap so N. }
Procedure NhapSoN( var NN : Integer );
Begin
NN := 0; {Gan khoi dau bang 0 de vao vong lap, vong lap dung khi nhap khac 0}
While ( N = 0 ) do
Begin
Write( 'Nhap N=' ); Readln(NN );
End;
End;
{ 2. Thu tuc phan tich N ra thanh cac thua so nguyen to }
Procedure PhantichSoN ( Var N1 : Integer );
Var u,dem:Integer;
Begin
If ( N1 > 1 ) Then
Begin
u := 2; dem := 0;
While ( N1 > 1 ) do
If ( N1 mod u = 0 ) Then
Begin
dem:=dem+1;
Writeln( u);
N1 := N1 div u;
End
Else
u:=u+1;
End
Else
Writeln(' Khong the phan tich duoc' );
End;
{ 3. Than chuong trinh chinh }
BEGIN
Clrscr;
Writeln('Phan tich so N thanh tich cua cac so nguyen to :' );
NhapSoN( N );
PhantichSoN( N );
Writeln ('Nhan Enter de ket thuc ...' );
Readln;
END.