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
uses crt;
var a,b:array[1..100]of integer;
n,i,j,ucln:integer;
begin
clrscr;
write('Nhap so cap:'); readln(n);
for i:=1 to n do
begin
readln(a[i],b[i]);
end;
for i:=1 to n do
begin
if a[i]<b[i] then
begin
ucln:=1;
for j:=1 to a[i] do
if (a[i] mod j=0) and (b[i] mod j=0) then
begin
if ucln<j then ucln:=j;
end;
end
else begin
ucln:=1;
for j:=1 to b[i] do
if (a[i] mod j=0) and (b[i] mod j=0) then
begin
if ucln<j then ucln:=j;
end;
end;
writeln('Uoc chung lon nhat cua cap thu ',i,' la: ',ucln);
end;
readln;
end.
Câu trả lời của bạn
uses crt;
var x,y:integer;
{-------------------chuong-trinh-con-tong----------------------------}
function tong(a,b:integer):integer;
begin
tong:=a+b;
end;
{-------------------chuong-trinh-con-hieu----------------------------}
funtion hieu(a,b:integer):integer;
begin
hieu:=a-b;
end;
{-------------------chuong-trinh-con-tich----------------------------}
function tich(a,b:integer):integer;
begin
tich:=a*b;
end;
{-------------------chuong-trinh-con-thuong----------------------------}
function thuong(a,b:integer):real;
begin
thuong:=a/b;
end;
{----------------------chuong-trinh-chinh-----------------------}
begin
clrscr;
write('Nhap x='); readln(x);
write('Nhap y='); readln(y);
writeln('Tong la: ',tong(x,y));
writeln('Hieu la: ',hieu(x,y));
writeln('Tich la: ',tich(x,y));
writeln('Thuong la: ',thuong(x,y):4:2);
readln;
end.
a, Tính Chu vi, Diện tích
b, Kiểm tra tính chất và cho biết đây là tam giác cân, đều hay vuông.
Câu trả lời của bạn
uses crt;
var xa,ya,xb,yb,xc,yc:integer;
ab,ac,bc,cv,p,s:real;
begin
clrscr;
write('Nhap toa do diem A:'); readln(xa,ya);
write('Nhap toa do diem B:'); readln(xb,yb);
write('Nhap toa do diem C:'); readln(xc,yc);
ab:=sqrt(sqr(xa-xb)+sqr(ya-yb));
ac:=sqrt(sqr(xa-xc)+sqr(ya-yc));
bc:=sqrt(sqr(xb-xc)+sqr(yb-yc));
if (ab+bc>ac) and (ab+ac>bc) and (ac+bc>ab) then
begin
cv:=ab+bc+ac;
p:=cv/2;
s:=sqrt(p*(p-ab)*(p-ac)*(p-bc));
writeln('Chu vi la: ',cv:4:2);
writeln('Dien tich la: ',dt:4:2);
kt:=0;
if (ab=ac) and (ab<>bc) and (ac<>bc) then kt:=1;
if (ac=bc) and (ac<>ab) and (bc<>ab) then kt:=1;
if (ab=bc) and (ab<>ac) and (bc<>ac) then kt:=1;
if (ab=ac) and (ac=bc) then kt:=2;
if sqr(ab)=sqr(ac)+sqr(bc) then kt:=3;
if sqr(ac)=sqr(ab)+sqr(bc) then kt:=3;
if sqr(bc)=sqr(ab)+sqr(ac) then kt:=3;
if kt=0 then writeln('Day la tam giac thuong');
if kt=1 then writeln('Day la tam giac can');
if kt=2 then writeln('Day la tam giac deu');
if kt=3 then writeln('Day la tam giac vuong');
end
else writeln('Day khong phai la toa do 3 dinh cua mot tam giac');
readln;
end.
Câu trả lời của bạn
uses crt;
var a,b,c,p:real;
{---------------chuong-trinh-con-tinh-chu-vi-------------------------}
fucntion cv(x,y,z:real):real;
begin
cv:=x+y+z;
end;
{---------------------chuong-trinh-chinh-----------------------}
begin
clrscr;
repeat
write('Nhap a='); readln(a);
write('Nhap b='); readln(b);
write('Nhap c='); readln(c);
until (a>0) and (b>0) and (c>0) and (a+b>c) and (a+c>b) and (b+c>a);
writeln('Chu vi la: ',cv:4:2);
p:=cv/2;
writeln('Dien tich la: ',sqrt(p*(p-a)*(p-b)*(p-c)):4:2);
readln;
end.
- Một số được gọi là đối xứng, nếu đọc từ bên trái sang bên phải hoặc từ bên phải sang trái đều được cùng một số. Ví dụ: số 75457 là số đối xứng.
- Số chính phương là số bằng bình phương đúng của một số nguyên. Ví dụ số 256 là số chính phương (vì 256=162)
Cho 2 số tự nhiên M và N (M, N trong khoảng từ 10 đến 100000 và M <N).
Yêu cầu:
a) Liệt kê và đếm xem có bao nhiêu số đối xứng nằm trong khoảng [M,N]
b) Liệt kê và đếm xem có bao nhiêu số chính phương nằm trong khoảng [M,N]
c) Liệt kê và đếm xem có bao nhiêu số đối xứng chính phương trong khoảng [M,N]
Dữ liệu vào là 2 số tự nhiên M và N nhập từ bàn phím. Kết quả in ra màn hình .
Câu trả lời của bạn
Program DapAnHay;
var m,i,n: longint;
d1,d2,d3: integer;
function dx(x: longint): boolean;
var j: longint;
s,s1: string;
begin
s1:=''; dx:=false;
str(x,s);
for j:=length(s) downto 1 do
s1:=s1+s[j];
if s=s1 then dx:=true else exit;
end;
function cp(k: longint): boolean;
begin
cp:=false;
if k=sqr(trunc(sqrt(k))) then cp:=true else exit;
end;
begin
write('Nhap M; N: '); readln(m,n);
d1:=0; d2:=0; d3:=0;
if (m<n) and (m>=10) and (n<=100000) then
begin
write('Cac so doi xung la: ');
for i:=m to n do
if dx(i) then
begin
d1:=d1+1;
write(i,' ');
end;
writeln;
writeln('Co ',d1,' so doi xung');
write('Cac so chinh phuong la: ');
for i:=m to n do
if cp(i) then
begin
d2:=d2+1;
write(i,' ');
end;
writeln;
writeln('Co ',d2,' so chinh phuong');
write('Cac so doi xung chinh phuong la: ');
for i:=m to n do
if dx(i) and cp(i) then
begin
d3:=d3+1;
write(i,' ');
end;
writeln;
write('Co ',d3,' so doi xung chinh phuong');
end;
readln
end.
Câu trả lời của bạn
function min(a,b:longint):longint;
begin
min:=a;
if min>b then min:=b;
end;
Câu trả lời của bạn
function canhhuyen(a,b:real):real;
var c:real;
begin
c:=sqrt(sqr(a)+sqr(b));
canhhuyen:=c;
end;
Câu trả lời của bạn
function canbac2(x:longint):real;
begin
canbac2:=sqrt(x);
end;
Câu trả lời của bạn
function tong(n:longint):longint;
var s,i:longint;
begin
s:=0;
for i:=1 to n do
s:=s+i;
tong:=s;
end;
Câu trả lời của bạn
uses crt;
var a,b:integer;
{-------------chuong-trinh-con-tinh-tong---------------------}
function tong(x,y:integer):integer;
begin
tong:=x+y;
end;
{-------------chuong-trinh-con-tinh-tich------------------}
function tich(x,y:integer):integer;
begin
tich:=x*y;
end;
{-----------------chuong-trinh-con-so-lon------------------}
function solon(x,y:integer):integer;
begin
if x>y then solon:=x
else solon:=y;
end;
{-----------------chuong-trinh-con-so-be------------------}
function sobe(x,y:integer):integer;
begin
if x<y then sobe:=x
else sobe:=y;
end;
{--------------------chuong-trinh-chinh-----------------}
begin
clrscr;
write('Nhap a='); readln(a);
write('Nhap b='); readln(b);
writeln('Tong la: ',tong(a,b));
writeln('Tich la: ',tich(a,b));
writeln('So lon la: ',solon(a,b));
writeln('So be la: ',sobe(a,b));
readln;
end.
Câu trả lời của bạn
uses crt;
var a,b,i,j:integer;
st:string;
begin
clrscr;
repeat
write('Ban muon ve khong:'); readln(st);
if st='Yes' then
begin
write('Nhap chieu dai:'); readln(a);
write('Nhap chieu rong:'); readln(b);
for i:=1 to a do
begin
for j:=1 to b do
write('*');
writeln;
end;
end
else break;
until st='No';
readln;
end.
Câu trả lời của bạn
*Cách có sử dụng chương trình con:
uses crt;
var st:string;
{--------------chuong-trinh-con---------------}
function doixau(st:string):string;
var i,d:integer;
begin
d:=length(st);
for i:=1 to d do
st[i]:=upcase(st[i]);
doixau:=st;
end;
{-------------chuong-trinh-chinh---------------}
begin
clrscr;
write('Nhap xau:'); readln(st);
writeln('Xau doi sang chu hoa la: ',doixau(st));
readln;
end.
*Cách không sử dụng chương trình con:
uses crt;
var st:string;
i,d:integer;
begin
clrscr;
write('Nhap xau:'); readln(st);
d:=length(st);
for i:=1 to d do
st[i]:=upcase(st[i]);
writeln('Xau sau khi doi la: ',st);
readln;
end.
Câu trả lời của bạn
program mang;
uses crt;
var n,i:integer;
a:array[1..100]of integer;
begin
clrscr;
write('nhap so phan tu :');readln(n);
for i:=1 to n do
begin
write('nhap phan tu a[',i,']:');readln(n);
end;
for i:=1 to n do
write(a[i]:3);
readln;
end.
Câu trả lời của bạn
uses crt;
var a:array[1..100]of integer;
i,n:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
for i:=1 to n do
write(a[i]:4);
readln;
end.
Câu trả lời của bạn
Program DapAnHay;
var a,b,c,d,e: integer;
function tich(x,y,z,t,k: integer): int64;
var kq: integer;
begin
kq:=x;
kq:=kq*y*z*t*k;
tich:=kq;
end;
begin
write('Nhap 5 so : '); readln(a,b,c,d,e);
write('Tich 5 so nguyen do la : ',tich(a,b,c,d,e));
readln
end.
Câu trả lời của bạn
program Angus;
uses crt;
var
x1,x2,x3,y1,y2,y3,s,p,n,a,b,c :real;
begin
clrscr;
write('Nhập tọa độ điểm A(x1,y1)= '); readln(x1,y1);
write('Nhập tọa độ điểm B(x2,y2)= '); readln(x2,y2);
write('Nhập tọa độ điểm C(x3,y3)= '); readln(x3,y3);
a:=sqrt(sqr(x2-x1)+sqr(y2-y1));
b:=sqrt(sqr(x3-x2)+sqr(y3-y2));
c:=sqrt(sqr(x1-x3)+sqr(y1-y3));
if (a+b>c) and (b+c>a) and (c+a>b) then
begin
p:=a+b+c;
n:=p/2;
s:=sqrt(n*(n-a)*(n-b)*(n-c));
writeln('Chu vi = ', p:0:2);
writeln('Diện tích = ',s:0:2);
end
else writeln('các điểm bạn vừa nhập không tạo thành 1 tam giác :> ');
readln
Câu trả lời của bạn
const fi='input.txt';
fo='output.txt';
var f1,f2:text;
a,b,c,max:real;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,a,b,c);
min:=a;
if min>b then min:=b;
if min>c then min:=c;
writeln(f2,min);
close(f1);
close(f2);
end.
Câu trả lời của bạn
function max(var a,b:real):real;
begin
max:=a;
if max<b then max:=b;
end;
Câu trả lời của bạn
const fi='baitap.inp';
fo='ketqua.out';
var f1,f2:text;
n:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,n);
writeln(f2,sqr(n));
close(f1);
close(f2);
end.
Câu trả lời của bạn
uses crt;
var n:integer;
gt:real;
{------------------------chuong-trinh-con-tinh-giai-thua-------------------------}
function giaithua(x:integer):real;
var i:integer;
begin
giaithua:=1;
for i:=1 to x do
giaithua:=giaithua*i;
end;
{----------------------chuong-trinh-chinh-------------------------}
begin
clrscr;
write('Nhap n='); readln(n);
gt:=giaithua(n);
writeln(n,'!=',gt:0:0);
readln;
end.
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 *