Bài tập về chương trình con C++

Full PDF PackageDownload Full PDF Package

This Paper

A short summary of this paper

37 Full PDFs related to this paper

Download

PDF Pack

Giải Bài Tập Tin Học 11 – Bài 18: Ví dụ về cách viết và sử dụng chương trình con giúp HS giải bài tập, giúp cho các em hình thành và phát triển năng lực sử dụng công nghệ thông tin và truyền thông:

Xem thêm các sách tham khảo liên quan:

  • Sách Giáo Viên Tin Học Lớp 11

1. Cách viết và sử dụng thủ tục

a] Cấu trúc của thủ tục

procedure [[danh sách tham số]]; [] Begin [] End;

Phần đầu thủ tục: Gồm tên dành riêng procedure, tiếp theo là tên thủ tục. Danh sách tham số có thể có hoặc không có.

Phần khai báo : Dùng để xác định các hằng, kiểu, biến và cũng có thể xác định các chương trình con khác được sử dụng trong thủ tục.

Dãy câu lệnh : Đực viết giữa cặp tên dành riêng begin và end tạo thành thân của thủ tục.

b] Ví dụ về thủ tục

Ví dụ 1: Viết thủ tục vẽ hình chữ nhật có dạng như sau

******* * * *******

Chiều dài là 7 chiều rộng là 3.

Procedure Ve_Hcn; Begin Writeln[‘*******’]; Writeln[‘* *’]; Writeln[‘*******’]; End;

Để sử dụng thủ tục này ta gọi Ve_Hcn;

Ví dụ 2: Viết thủ tục vẻ hình chữ nhật với chiều dài và chiều rộng được tùy chỉnh.

Procedure Ve_Hcn[chdai,chrong:integer]; Var I,j:integer; Begin For i:=1 to chdai do write[‘*’]; Writeln; For j:=1 to chrong-2 do Begin Write[‘*’]; For i:=1 to chdai-2 do write[‘ ’]; Writeln[‘*’]; End; For i:=1 to chdai do write[‘*’]; End;

Để sử dụng thủ tục này ta gọi Ve_Hcn[a,b];

Khi gọi thủ tục, các tham số hình thức được thay bằng các tham số thực sự tương ứng là các giá trị cụ thể gọi là các tham số giá trị [tham trị] [Ví dụ: chdai,chrong được gọi là tham trị].

Khi gọi thủ tục Ve_Hcn[a,b] tham số chdai được thay bằng giá trị hiện thời của biến a,tham số chrong được thay bởi giá trị hiện thời của biến b. Trong lệnh gọi thủ tục, các tham số hình thức được thay bằng các tham số thực sự tương ứng là tên biến chứa dữ liệu ra được gọi là tham số biến [hay tham biến].

Để phân biệt tham biến và tham trị, Pascal sử dụng từ khóa var để khai báo những tham biến.

Ví dụ :

Nếu không sử dụng tham biến:

program dientro; uses crt; var a,b:integer; procedure hoandoi[x,y:integer]; var TG:integer; begin TG:=x; x:=y; y:=TG; end; begin clrscr; a:=5; b:=10; writeln[a:6,b:6]; hoandoi[a,b]; writeln[a:6,b:6]; readkey; end.

Kết quả:

Hai số không hề hoán đổi cho nhau

Sử dụng tham biến :

program dientro; uses crt; var a,b:integer; procedure hoandoi[var x,y:integer]; var TG:integer; begin TG:=x; x:=y; y:=TG; end; begin clrscr; a:=5; b:=10; writeln[a:6,b:6]; hoandoi[a,b]; writeln[a:6,b:6]; readkey; end.

Kết quả:

Khi nào dùng tham biến: Khi ta muốn thay đổi giá trị các tham số truyền vào thì tra sẽ sử dụng tham biến.

2. Cách viết và sử dụng hàm

Điểm khác nhau cơ bản giữa thủ tục và hàm là việc thực hiện luôn trả về giá trị kết quả thuộc kiểu xác định và giá trị đó được gán cho tên hàm.

Hàm có cấu trúc tương tự như thủ tục, tuy nhiên chỉ khác nhau phần đầu.

Function []:;

Trong đó kiểu dữ liệu chỉ có thể là integer, real, char, Boolean, string.

Khác với thủ tục, trong thân hàm phải có lệnh gán giá trị cho tên hàm:

:=;

Ví dụ 1:

Viết chưng tình thực hiện việc rút gọn một phân số , trong đó có sử dụng hàm tính ước chung lớn nhất của hai số nguyên.

program rutgon; uses crt; var TuSo,MauSo,a:integer; function UCLN[x,y:integer]:integer; var sodu:integer; begin while y0 do begin sodu:=x mod y; x:=y; y:=sodu; end; UCLN:=x; end; begin clrscr; write['Nhap vao tu so va mau so ']; readln[TuSo,MauSo]; a:=UCLN[TuSo,MauSo]; if a>1 then begin TuSo:=TuSo div a; MauSo:=MauSo div a; end; writeln[TuSo:5,MauSo:5]; readkey; end.

Kết quả:

Trong chương trình này, các biến TuSo, MauSo và a là các biến toàn cục, còn biến sodu là biến cục bộ.

Sử dụng hàm

Việc sử dụng hàm tương tự với việc sử dụng các hàm chuẩn, khi viết lệnh gọi gồm tên hàm và tham số thực sự tương ứng với các tham số hình thức.

Lệnh gọi hàm có thể tham gia vào biểu thức như một toán hạng và thậm chí là tham số của lời gọi hàm, thủ tục khác.

Ví dụ:

A:=6*UCLN[TuSo,MauSo]+1;

Ví dụ 2. Viết chương trình tìm giá trị nhỏ nhất trong ba số có sử dụng hàm tìm số nhỏ nhất trong hai số.

Phân tích:

Do chỉ được sử dụng hàm tìm giá trị nhỏ nhất trong hai số. Nên ta sẽ làm như sau:

Đầu tiên sẽ tìm giá trị nhỏ nhất trong 2 số, Sau đó dùng kết quả này làm tham số cho hàm tìm giá trị nhỏ nhất với giá trị này và số còn lại.

program vdu2; uses crt; var a,b,c:real; function Min[a,b:real]:real; begin if a 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 toán số 2.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 toán số 2.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 toán số 2.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 toán số 2.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.

Video liên quan

Chủ Đề