Các ngôn ngữ lập trình đều có các quy tắc viết và sử dụng chương trình con, trong Bài 18: Ví dụ về cách viết và sử dụng chương trình con ta xét cách viết và sử dụng chương trình con trong Pascal. Mời các em cùng theo dõi nội dung chi tiết của bài học dưới đây.
Procedure [ < danh sách tham số > ];
[ < phần khai báo > ]
Begin
[ < dãy các lệnh > ]
End;
Trong đó:
Một số lưu ý:
Khi cần thực hiện, ta phải viết lệnh gọi thủ tục tương tự như các thủ tục chuẩn.
Ví dụ 1: Lập chương trình cho phép vẽ nhiều hình chữ nhật với kích thước khác nhau.
Gợi ý làm bài:
Chương trình mẫu:
Program VD_hcn;
Uses crt;
Var a,b,i:integer; {bien toan cuc}
Procedure Ve_Hcn(chdai,chrong:integer); {Bat dau CTC}
Var i, j: integer; {bien cuc bo}
Begin
{ve canh tren hinh chu nhat}
For i:=1 to chdai do write(‘*’);
Writeln;
For j:=1 to chrong -2 do {ve 2 canh ben}
Begin
Write(‘*’);
For i:=1 to chdai – 2 do write(‘ ’);{ve khoang trang}
Writeln(‘*’);
End;
{ve canh duoi}
For i:=1 to chdai do write(‘*’);
Writeln;
End; {Ket thuc CTC}
Begin
Clrscr;
Ve_Hcn(25,10); {ve hinh chu nhat 25x10}
Writeln; {cach 1 dong}
Ve_Hcn(5,10); {ve hinh chu nhat 5x10}
Readln;
Clrscr;
{ve 4 hinh chu nhat hinh dau tien 4x2. Moi hinh sau co kich thuoc gap doi hinh truoc}
a:=4; b:=2;
for i:=1 to 4 do
begin
Ve_Hcn(a,b);
readln;
a:=a*2; b:=b*2;
end;
End.
Function < tên hàm > [ < danh sách tham số > ) ] : < kiểu dữ liệu > ;
[ < phần khai báo > ]
Begin
[ < dãy các lệnh > ]
< tên hàm > := < biểu thức >
End;
Trong đó:
Ví dụ 2: Xét chương trình rút gọn một phân số, trong đó sử dụng hàm tính ước chung lớn nhất (ƯCLN) của hai số nguyên.
Chương trình mẫu:
Program Rutgon_Phanso;
Uses crt;
Var Tuso, Mauso, a: Integer; {Bien toan cuc}
Function UCLN(x, y: Integer): Integer; {Bat dau ham UCLN}
Var sodu: Integer; {Bien cuc bo}
Begin
while y <> 0 do
begin
sodu:= x mod y;
x:= y;
y:= sodu;
end;
UCLN:= x; {Gan gia tri cho ten ham}
End; {Ket thuc ham}
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,'/', Mauso);
End.
Một số lưu ý:
Viết chương trình con để tính n! = 1.2...n.
Gợi ý giải:
Vì bài toán này trả về 1 giá trị duy nhất nên ta dùng hàm.
Function GiaiThua(n:Integer) : Integer;
Var P, i: Integer;
Begin
P:=1;
For i:=1 To n Do
P:=P*i;
GiaiThua:=P;
End;
Viết chương trình con để tìm điểm đối xứng của điểm (x,y) qua gốc tọa độ.
Gợi ý giải:
Vì bài toán này trả về tọa độ điểm đối xứng (xx,yy) gồm 2 giá trị nên ta dùng thủ tục.
Procedure DoiXung(x,y:Integer; Var xx,yy:Integer);
Begin
xx:=-x;
yy:=-y;
End;
Nhận xét 2 ví dụ trên:
Sau khi học xong Bài 18: Ví dụ về cách viết và sử dụng chương trình con, các em cần nắm vững nội dung trọng tâm:
Các em có thể hệ thống lại nội dung kiến thức đã học được thông qua bài kiểm tra Trắc nghiệm Tin học 11 Bài 18 cực hay có đáp án và lời giải chi tiết.
Nói về cấu trúc của một chương trình con, khẳng định nào sau đây là không đúng?
Sự khác biệt cơ bản giữa hàm và thủ tục:
Giả sử ta có phần đầu thủ tục:
Procedure VD (var N, M: integer; E: real);
Thì nhận định nào sau đây là đúng:
Câu 4-10: Mời các em đăng nhập xem tiếp nội dung và thi thử Online để củng cố kiến thức về bài học này nhé!
Trong quá trình học tập nếu có thắc mắc hay cần trợ giúp gì thì các em hãy comment ở mục Hỏi đáp, Cộng đồng Tin học DapAnHay sẽ hỗ trợ cho các em một cách nhanh chóng!
Chúc các em học tập tốt và luôn đạt thành tích cao trong học tập!
-- Mod Tin Học 11 DapAnHay
Nói về cấu trúc của một chương trình con, khẳng định nào sau đây là không đúng?
Sự khác biệt cơ bản giữa hàm và thủ tục:
Giả sử ta có phần đầu thủ tục:
Procedure VD (var N, M: integer; E: real);
Thì nhận định nào sau đây là đúng:
Với x, y là 2 số nguyên, để tính tổng của chúng ta chọn hàm kiểu tham trị. Vậy phần tựa đề nào được xây dựng sau là đúng?
Với a, b là 2 số thực, để tính tích của chúng ta chọn thủ tục kiểu tham trị. Vậy phần tựa đề nào được xây dựng sau là đúng?
Muốn khai báo x là tham số giá trị và y, z là tham số biến (x, y, z thuộc kiểu Byte) trong thủ tục sau thì khai báo nào sau đây là sai?
Biến cục bộ là các biến được khai báo trong?
Biến toàn cục là các biến được khai báo trong?
Cho chương trình sau:
Program Chuong_Trinh;
Var a, b, S : byte;
Procedure TD(Var x : byte ; y : byte);
Var i : byte;
Begin
i := 5;
writeln(x,‘ ’, y);
x := x + i ;
y := y + i ;
S := x + y ;
Writeln(x,‘ ’, y);
End;
Begin
Write(‘nhập a và b : ’);
Readln(a, b);
TD(a,b);
Writeln(a,‘ ’, b, ‘ ’, S);
Readln;
End.
Trong chương trình trên có các tham số thực sự là:
Cho chương trình sau:
Program Chuong_Trinh;
Var a, b, S : byte;
Procedure TD(Var x : byte ; y : byte);
Var i : byte;
Begin
i := 5;
writeln(x,‘ ’, y);
x := x + i ;
y := y + i ;
S := x + y ;
Writeln(x,‘ ’, y);
End;
Begin
Write(‘nhập a và b : ’);
Readln(a, b);
TD(a,b);
Writeln(a,‘ ’, b, ‘ ’, S);
Readln;
End.
Trong chương trình trên có các tham số hình thức là:
Họ và tên
Tiêu đề câu hỏi
Nội dung câu hỏi
Câu trả lời của bạn
program tin_hoc_de_dang;
uses crt;
Var A:array[1..100] Of integer;
n,i,,s,k:integer;
BEGIN
clrscr;
write('nhap n'); Readln(n);
write('nhap k'); Readln(k);
s:=0
For i:=1 to n do
Begin
readln(A[i]);
If A[i] mod k=0 then s:=s+1;
End;
Writeln('Co ', s,' so chia het cho ',k);
readln
end.
Câu trả lời của bạn
program hotrotinhoc;
var a,b,s : integer;
function (s: longint) : boolean;
var a,s : longint;
begin
kt:=false;
if s=a*b then kt:=true;
end;
begin
write('chieu dai la:'); readln(a);
write('chieu rong la:'); readln(b);
if kt=true then write(s);
readln
end.
Câu trả lời của bạn
Program hotrotinhoc_hoc247;
const fi='dlv.inp';
fo='dlr.out';
var i,n,t: integer;
f: text;
a: array[1..100] of integer;
procedure ip;
begin
assign(f,fi);
reset(f);
readln(f,n);
for i:=1 to n do read(f,a[i]);
close(f);
end;
procedure out;
begin
assign(f,fo);
rewrite(f);
t:=0;
for i:=1 to n do t:=t+a[i];
write(f,t);
close(f);
end;
begin
ip;
out;
end.
Câu trả lời của bạn
Cách 1: Có sử dụng
uses crt;
var st:string;
{---------------------------chuong-trinh-con--------------------------}
procedure cd(var s:string);
var i,d:integer;
begin
d:=length(s);
for i:=1 to d do
s[i]:=upcase(s[i]);
for i:=1 to d do
write(s[i]);
end;
{--------------------------chuong-trinh-chinh--------------------------}
begin
clrscr;
write('Nhap xau:'); readln(st);
cd(st);
readln;
end.
Cách 2: Không sử dụng
uses crt;
var st:string;
d,i:integer;
begin
clrscr;
write('nhap xau:'); readln(st);
d:=length(st);
for i:=1 to d do
st[i]:=upcase(st[i]);
for i:=1 to d do
write(st[i]);
readln;
end.
a) Thủ tục nhập giá trị cho màng A từ bản phim.
b) Hàm kiểm tra số chia hết cho 3 hoặc 5.
Câu trả lời của bạn
uses crt;
type mang=array[1..499]of integer;
var a:mang;
i,n,t,t1:integer;
{--------------------------------thu-tuc-nhap-----------------------}
procedure nhap;
begin
for i:=1 to n do
begin
write('a[',i,']=');readln(a[i]);
end;
end;
{-------------------------------ham-kiem-tra-so-chia-het------------------------}
function ktch(var x:integer):boolean;
var kt:boolean;
begin
kt:=false;
if (x mod 3=0) and (x mod 5=0) then kt:=true;
ktch:=kt;
end;
{-------------------------------chuong-trinh-chinh--------------------------}
begin
clrscr;
write('nhap n='); readln(n);
nhap;
t:=0;
for i:=1 to n do
begin
t1:=a[i];
if ktch(t1) then t:=t+t1;
end;
writeln(t);
readln;
end.
Câu trả lời của bạn
program tg;
uses crt;
var x,y,z:real;
begin
clrscr;
readln(x,y,z);
if not((x+y>z) and (x+z>y) and (y+z>x)) then write('NO') else write('YES');
readln;
end.
Câu trả lời của bạn
Program DapAnHay;
var a,b: integer;
function hieu(x,y: integer): integer;
var kq : integer;
begin
kq:=0;
kq:=x;
kq:=kq-y;
hieu:=kq;
end;
begin
write('Nhap so dau tien : '); readln(a);
write('Nhap so thu hai : '); readln(b);
write('Hieu hai so nguyen la : ',hieu(a,b));
readln
end.
- Nhập xuất điểm cho học sinh của khối 11
- Thống kê số lượng học sinh thi đậu và thi lại
- Sắp xếp điểm của các bạn theo chiều tăng dần
Câu trả lời của bạn
Program DapAnHay;
var j,d,d1,i,n,tg: integer;
begin
write('Nhap so ban hoc sinh : '); readln(n);
for i:=1 to n do
begin
write('Nhap diem cua ban thu ',i,' : '); readln(a[i]);
if a[i]>5 then inc(d) else inc(d1);
end;
writeln('Co ',d,' hoc sinh dau va ',d1,' hoc sinh thi lai');
for i:=1 to n do
for j:=i to n do
if a[i]>a[j] then
begin
tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
end;
for i:=1 to n do write(a[i],' ');
readln
end.
Câu trả lời của bạn
Vì bài toán này trả về tọa độ điểm đối xứng (xx,yy) gồm 2 giá trị nên ta dùng thủ tục.
Procedure DoiXung(x,y:Integer; Var xx,yy:Integer);
Begin
xx:=-x;
yy:=-y;
End;
Câu trả lời của bạn
Vì bài toán này trả về 1 giá trị duy nhất nên ta dùng hàm.
Function GiaiThua(n:Integer) : Integer;
Var P, i: Integer;
Begin
P:=1;
For i:=1 To n Do
P:=P*i;
GiaiThua:=P;
End;
B, Lời gọi thủ tục nhất thiết phải có tham số thực sự còn lời gọi hàm không nhất thiết phải có tham số thực sự.
C, Cả lời gọi hàm và lời gọi thủ tục đều phải có tham số thực sự.
D, Lời gọi hàm và lời gọi thủ tục có thể có tham số thực sự hoặc không có tham số thực sự tùy thuộc vào từng thủ tục.
Câu trả lời của bạn
Lời gọi hàm và lời gọi thủ tục có thể có tham số thực sự hoặc không có tham số thực sự tùy thuộc vào từng thủ tục và hàm đó. Tham số thực sự có thể là tham biến hoặc tham trị tùy từng chương trình cụ thể.
Đáp án: D
B, Chỉ có thủ tục mới có thể có tham số hình thức.
C, Chỉ có hàm mới có thể có tham số hình thức.
D, Thủ tục và hàm nào cũng phải có tham số hình thức.
Câu trả lời của bạn
Trong ngôn ngữ Pascal, các chương trình con có thể có hoặc không có tham số hình thức tùy thuộc vào từng chương cụ thể.
Đáp án: A
B, Một chương trình con nhất thiết phải có biến cục bộ.
C, Một chương trình con nhất thiết phải có tham số hình thức, không nhất thiết phải có biến cục bộ.
D, Một chương trình con có thể không có tham số hình thức và cũng có thể không có biến cục bộ.
Câu trả lời của bạn
Một chương trình con có thể không có tham số hình thức và cũng có thể không có biến cục bộ. Vì vậy trong thân chương trình lệnh gọi hàm hay thủ tục có thể có tham trị hoặc tham biến tùy vào từng chương trình.
Đáp án: D
A, Khai báo lại thủ tục và gọi nó mỗi khi cần sử dụng;
B, Khai báo thủ tục duy nhất một lần và gọi nó một lần duy nhất;
C, Chỉ cần khai báo;
D, Khai báo thủ tục một lần và gọi nó trong thân chương trình mỗi khi muốn sử dụng;
Câu trả lời của bạn
Khi sử dụng thủ tục cần khai báo thủ tục một lần và gọi nó trong thân chương trình mỗi khi muốn sử dụng.
A, Procedure ViduTT( x : Byte ; Var y, z : Byte) ;
B, Procedure ViduTT( x : Byte ; Var y : Byte ; Var z : Byte) ;
C, Procedure ViduTT( x : Byte ; Var y : Byte ; z : Byte) ;
D, Procedure ViduTT( Var y : Byte ; x : Byte ; Var z : Byte) ;
Câu trả lời của bạn
Tham số giá trị là 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ể. Tham biến là 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 biến chứa dữ liệu ra.
+ Để 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.
Đáp án: C
A, Chỉ có thể là kiểu integer.
B, Chỉ có thể là kiểu
C, Có thể là các kiểu integer, real, char, boolean, string.
D, Có thể là integer, real, char, boolean, string, record, kiểu mảng.
Câu trả lời của bạn
Kiểu dữ liệu của một hàm được xác định bởi kiểu giá trị mà hàm trả về và chỉ có thể là các kiểu integer, real, char, Boolean, string.
Đáp án: C
Procedure End (key : char ) ;
Begin
If key = ‘ q ’ then writeln( ‘ Ket thuc ’ )
End;
A, Thiếu dấu “ ; ” sau từ khóa Begin ;
B, Không thể dùng câu lệnh if trong thủ tục;
C, Thiếu dấu “ ; ” sau lệnh writeln ;
D, End không thể dùng làm tên của thủ tục ;
Câu trả lời của bạn
Tên hàm và thủ tục được đặt tên theo quy tắc đặt tên của Pascal và không sử dụng tên trùng với các từ khóa.
Đáp án: C
Procedure p;
Var n : integer ;
Begin
…… ……
End ;
Phạm vi của biến n là :
A, Trong toàn bộ chương trình;
B, Trong nội bộ thủ tục p;
C, Trong toàn bộ tệp chương trình nguồn;
D, Tùy thuộc vào vị trí sử dụng thủ tục p;
Câu trả lời của bạn
Biến n được khai báo trong thủ tục được gọi là biến cục bộ. phạm vi của biến này chỉ sử dụng trong chương trình con đó.
Đáp án: B
Câu trả lời của bạn
Procedure [ < danh sách tham số > ];
[ < phần khai báo > ]
Begin
[ < dãy các lệnh > ]
End;
Trong đó:
- Phần đầu thủ tục: gồm tên Procedure và tên thủ tục, danh sách tham số (nếu có).
- Phần khai báo: xác định các hằng, kiểu, biến và 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: viết giữa cặp tên dành riêng Begin và End.
Cho chương trình sau:
Program Chuong_Trinh;
Var a, b, S : byte;
Procedure TD(Var x : byte ; y : byte);
Var i : byte;
Begin
i := 5;
writeln(x,‘ ’, y);
x := x + i ;
y := y + i ;
S := x + y ;
Writeln(x,‘ ’, y);
End;
Begin
Write(‘nhập a và b : ’);
Readln(a, b);
TD(a,b);
Writeln(a,‘ ’, b, ‘ ’, S);
Readln;
End.
Trong chương trình trên có các tham số thực sự là:
A, x và y.
B. i
C, a và b.
D, a, b, S.
Câu trả lời của bạn
Biến thực sự là biến được thay thế cho các tham số hình thức trong lời gọi hàm hoặc thủ tục. Có hai loại biến thực sự là tham biến và tham trị. Vậy tham số thực sự trong đoạn chương trình trên là a, b.
Đáp án: C
0 Bình luận
Để lại bình luận
Địa chỉ email của hạn sẽ không được công bố. Các trường bắt buộc được đánh dấu *