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
BT.INP |
1 1 |
6 8 |
1 0 |
Câu trả lời của bạn
uses crt;
const fi='bt.inp';
var a:array[1..100]of real;
i,dem:integer;
f1:text;
begin
clrscr;
assign(f1,fi); reset(f1);
dem:=0;
while not eof(f1) do
begin
inc(dem);
read(f1,a[dem]);
if dem mod 2=0 then readln(f1);
end;
for i:=1 to dem do
write(a[i]:4:1,' ':4);
close(f1);
readln;
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.
Câu trả lời của bạn
uses crt;
var a:array[1..100]of integer;
i,n,t:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
t:=0;
for i:=1 to n do
t:=t+a[i];
writeln('Tong cua day so la: ',t);
readln;
end.
Câu trả lời của bạn
procedure nhap(x,y:integer);
begin
write('Nhap x='); readln(x);
write('Nhap y='); readln(y);
end;
Dòng 1 : chứa 2 số nguyên a,b
Dòng 2: chứa 2 số nguyên c,d
Dòng 3: chứa 2 số nguyên e, f
Yêu cầu:
- đọc file
- Tính tổng ƯCLN của ƯCLN (a,b)+ ƯCLN(c,d)+ƯCLN(e,f)
- ghi kết quả vào file ƯCLN.ou
Câu trả lời của bạn
Program DapAnHay;
const fi='UCLN.inp';
fo='UCLN.ou';
var a,b,c,d,e,f: integer;
t: longint;
function ucln(x,y: integer): integer;
var tg: integer;
begin
while y<>0 do
begin
tg:=x mod y;
x:=y;
y:=tg;
end;
ucln:=x;
end;
f: text;
procedure ip;
begin
assign(f,fi);
reset(f);
readln(f,a,b);
readln(f,c,d);
readln(f,e,f);
close(f);
end;
procedure out;
begin
assign(f,fo);
rewrite(f);
write(f,ucln(a,b)+ucln(c,d)+ucln(e,f));
close(f);
end;
begin
ip;
out;
end.
Câu trả lời của bạn
Procedure nhap;
var n: integer;
begin
write('n='); readln(n);
end;
Câu trả lời của bạn
Program DapAnHay;
var i,n,max: integer;
a: array[1..32000] of integer;
begin
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('a[',i,']='); readln(a[i]);
end;
max:=0;
for i:=1 to n do
if (i mod 2=0) and (a[i]>max) then max:=a[i];
write('Gia tri max o vi tri chan la : ',max);
readln
end.
Câu trả lời của bạn
Program DapAnHay;
var i,n,min: integer;
a: array[1..32000] of integer;
begin
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('a[',i,']='); readln(a[i]);
end;
min:=a[1];
for i:=2 to n do
if (i mod 2=1) and (a[i]<min) then min:=a[i];
write('Gia tri min o vi tri le la : ',min);
readln
end.
Câu trả lời của bạn
Program DapAnHay;
var s: string;
d: byte;
begin
d:=0;
write('Nhap xau : '); readln(s);
while pos('anh',s)<>0 do
begin
inc(d);
delete(s,pos('anh',s),3);
end;
write('So luong tu "anh" trong xau la : ',d);
readln
end.
Câu trả lời của bạn
function tong(a,b:integer):integer;
begin
tong:=a+b;
end;
Câu trả lời của bạn
function ktra(a,b,c:integer):boolean;
begin
if (a+b>c) and (a+c>b) and (b+c>a) then ktra:=true
else ktra:=false;
end;
Câu trả lời của bạn
function min(a,b,c,d:real):real;
begin
min:=a;
if min>b then min:=b;
if min>c then min:=c;
if min>d then min:=d;
end;
Câu trả lời của bạn
uses crt;
var a,b,c:integer;
{-----------------------ham-tinh-tong-----------------}
function tong(x,y:integer):integer;
begin
tong:=x+y;
end;
{---------------------ham-tinh-tich--------------------}
function tich(m,n:integer):longint;
begin
tich:=m*n;
end;
{---------------------chuong-trinh-chinh---------------------}
begin
clrscr;
write('Nhap a='); readln(a);
write('Nhap b='); readln(b);
write('Nhap c='); readln(c);
writeln('Tong ba so la: ',tong(a,tong(b,c)));
writeln('Tich ba so la: ',tich(a,tich(b,c)));
readln;
end.
a, viết thủ tục nhập giá trị cho mảng A từ bàn phím
b, viết thủ tục in ra màn hình các phần tử là số chẵn trong mảng A
Câu trả lời của bạn
a)
Type mang=array[1..100]of integer;
procedure nhap(var a:mang);
var n,i:integer;
begin
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
end;
b) procedure xuat(var a:mang);
var i,n:integer;
begin
for i:=1 to n do
if a[i] mod 2=0 then write(a[i]:4);
end;
Câu trả lời của bạn
uses crt;
var s:string; i:integer;
begin
clrscr;
writeln('hay nhap xau');readln(s);
while s[1]=' ' do delete(s,1,1);
while s[length(s)]=' ' do delete(s,length(s),1);
for i:= 1 to length(s) do while (s[i]=' ') and (s[i+1]=' ') do delete(s,i,1) ;
s[1]:=upcase(s[1]);
for i:=1 to length(s) do if s[i-1]=' ' then s[i]:=upcase(s[i]);
writeln(s);
readln;
end.
Câu trả lời của bạn
Program DapAnHay;
var a,b,c,d,e: integer;
function tich(i,j: integer): longint;
var kq1: longint;
begin
kq1:=i;
kq1:=kq1*j;
tich:=kq1;
end;
function tong(x,y: integer): integer;
var kq : integer;
begin
kq:=0;
kq:=x;
kq:=kq+y;
tong:=kq;
end;
begin
write('Nhap so dau tien : '); readln(a);
write('Nhap so thu 2 : '); readln(b);
write('Nhap so thu 3 : '); readln(c);
write('Nhap so thu 4 : '); readln(d);
write('Nhap so thu 5 : '); readln(e);
writeln('Tong hai so thu 1 va 5 la : ',tong(a,e));
write('Tich cua so thu 2;3;4 la : ',tich(tich(b,c),d));
readln
end.
Yếu cầu
+ Đưa dãy số đó ra màn hình
+ Tính tổng các phàn tử trong dãy
+ Xắp xếp dãy đã cho theo chiều tăng dần
+ Đưa ra màn hình phần tử co giá trị max .
Câu trả lời của bạn
uses crt;
var a:array[1..100]of integer;
n,i,t,j,tam,max:integer;
begin
clrscr;
write('Nhap n='); readln(n);
for i:=1 to n do
begin
write('A[',i,']='); readln(a[i]);
end;
writeln('Day so ban vua nhap la: ');
for i:=1 to n do
write(a[i]:4);
writeln;
t:=0;
for i:=1 to n do
t:=t+a[i];
writeln('Tong cua day so la: ',t);
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
begin
tam:=a[i];
a[i]:=a[j];
a[j]:=tam;
end;
writeln('Day so duoc sap xep tang dan la: ');
for i:=1 to n do
write(a[i]:4);
writeln;
max:=a[1];
for i:=2 to n do
if max<a[i] then max:=a[i];
writeln('Gia tri lon nhat la: ',max);
readln;
end.
Yêu cầu viết và sử dụng các chương trình con sau:
- thủ tục nhập dãy số
- hàm tính tích số chẵn
Câu trả lời của bạn
uses crt;
type mang=array[1..100]of integer;
var a:mang;
i,n:integer;
s:longint;
{------------------ctc-nhap------------------}
procedure nhap(var b:mang);
begin
write('nhap n='); readln(n);
for i:=1 to n do
begin
write('a[',i,']='); readln(b[i]);
end;
end;
{---------------ctc-tinh-tich-cac-so-chan------------}
function tich(var c:mang):longint;
begin
s:=1;
for i:=1 to n do
if c[i] mod 2=0 then s:=s*c[i];
writeln(s);
end;
{------------chuong-trinh-chinh-----------------------}
begin
clrscr;
nhap(a);
tich(a);
readln;
end.
Câu trả lời của bạn
program hotrotinhoc;
var i : integer;
S,r: real ;
function kt(i: integer) : boolean ;
var r : real;
begin
kt:=false;
write('Ban kinh r='); readln(r);
if s=3.14*n*n then kt:=true;
end;
begin
if kt=true then write(s);
readln
end.
Câu trả lời của bạn
uses crt;
var n:integer;
{-----------------------------------------------------}
procedure nhap(var x:integer);
var a:array[1..100]of integer;
i:integer;
begin
write('nhap chieu dai cua day='); readln(x);
for i:=1 to x do
begin
write('a[',i,']='); readln(a[i]);
end;
end;
{-----------------------thu-tuc-tinh-tong-----------------}
procedure tong(var m:integer);
var b:array[1..100]of integer;
j,t:integer;
begin
t:=0;
for j:=1 to m do
t:=t+b[j];
writeln('tong la: ',t);
end;
{------------------------chuong-trinh-chinh---------------------}
begin
clrscr;
nhap(n);
tong(n);
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 *