Cách khai báo và sử dụng hàm Function, thủ tục procedure trên tệp
Cách khai báo và sử dụng hàm Function, thủ tục procedure trên tệp
*Cách khai báo
-Thủ tục: procedure <tên thủ tục>(các tham số);
-Hàm: function <tên hàm>(các tham số):<kiểu dữ liệu của hàm>;
*Sử dụng:
-Thủ tục: Dùng để thực hiện một hay nhiều nhiệm vụ nào đó.
-Hàm: Trả về một giá trị nào đó (có kiểu vô hướng, kiểu string). Hàm có thể sử dụng trong các biểu thức.
*Ngoài ra, trong Pascal còn cho phép các CTC lồng vào nhau.
➤Cách khai báo
-Thủ tục: procedure <tên thủ tục>(các tham số);
-Hàm: function <tên hàm>(các tham số):<kiểu dữ liệu của hàm>;
➤Sử dụng:
-Thủ tục: Dùng để thực hiện một hay nhiều nhiệm vụ nào đó.
-Hàm: Trả về một giá trị nào đó (có kiểu vô hướng, kiểu string). Hàm có thể sử dụng trong các biểu thức.
➤Ngoài ra, trong Pascal còn cho phép các CTC lồng vào nhau.
Cho chương trình sau:
Program kiemtra;
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:=8;b:=16;
writeln(a,’ ‘,b);
readln
end.
Trả lời các câu hỏi sau:
a, Nêu các khái niệm:
-Tham số hình thức ? ví dụ?
-Tham số thực sự? ví dụ?
-Biến cục bộ? ví dụ?
-Biến toàn cục ? ví dụ?
-Lời gọi chương trình con? ví dụ?
< ví dụ đã có trong chương trình hãy nêu cụ thể>
b, Chương trình con có tên là gì ?Thực hiện công việc gì?Kết quả trên màn hình là gì?
a)
Tham số hình thức là biến được liệt kê trong danh sách tham số (thường nằm tại phần đầu của định nghĩa chương trình con)
Tham số thực sự là giá trị cụ thể của biến đó tại thời gian chạy.
Vct tính n! Vd ( 3!=1×2×3) a) sử dụng hàm b) sử dụng thủ tục
Câu 4:
a)
uses crt;
var n:integer;
{---------------------ham-tinh-giai-thua-----------------------}
fucntion gt(x:integer):real;
var i:integer;
begin
gt:=1;
for i:=1 to x do
gt:=gt*i;
end;
{--------------------chuong-trinh-chinh---------------------}
begin
clrscr;
write('Nhap n='); readln(n);
writeln(gt(n):0:0);
readln;
end.
b)
uses crt;
var n:integer;
{-------------------thu-tuc-tinh-giai-thua------------------------}
procedure gt(x:integer);
var i:integer;
begin
gt:=1;
for i:=1 to x do
gt:=gt*i;
writeln(gt);
end;
{-----------------chuong-trinh-chinh--------------------------}
begin
clrscr;
write('Nhap n='); readln(n);
gt(n);
readln;
end.
Program thi_hk2; Var a,b,c : real; Procedure vidu (x: integer; y,x: real ):real; Var tong: real; Begin x:= x+1; y:= y-x; z:=z+y; tong:=x+y+z; Writeln(x,’ ’,b,’ ‘,z,’ ‘,tong); End; BEGIN a:=3; b:=4; c:=5; vidu(a,b,c); Wreadln End. a.trong chương trình trên có lỗi, hãy sửa lỗi để chương trình chạy được ? B. Hãy xác định tham số hình thức trong chương trình trên
Bài 9. LÀM VIỆC VỚI DÃY SỐ CÂU HỎI BÀI TẬP
Câu 1: Số phần tử trong khai báo dưới đây là bao nhiêu? Var hocsinh : array[12..80] of integer;
A. 80 B. 70 C. 69 D. 68 Câu 2: Khai báo mảng nào là đúng trong các khai báo sau đây:
A. var tuoi : array[1..15] of integer; B. var tuoi : array[1.5..10.5] of integer;
C. var tuoi : aray[1..15] of real; D. var tuoi : array[1 ... 15 ] of integer; Câu 3: Cú pháp khai báo dãy số nào sau đây đúng nhất?
A. Var < tên dãy số > : array [ < chỉ số cuối > .. < chỉ số đầu >] of < kiểu dữ liệu >; B. Var < tên dãy số > : array [ < chỉ số đầu > .. < chỉ số cuối > ] of < kiểu dữ liệu >; C. Var < tên dãy số > : array [ < chỉ số cuối > : < chỉ số đầu > ] of < kiểu dữ liệu >; D. Var < tên dãy số > : array [ < chỉ số đầu > .. < chỉ số cuối >] for < kiểu dữ liệu >;
Câu 4: Để nhập dữ liệu từ bàn phím cho mảng A có 10 phần tử là số nguyên ta dùng lệnh nào sau đây?
A. For i:=1 to 10 do Readln(A[i]); B. For i:= 1 to 10 do Writeln(A[i]);
C. Dùng 10 lệnh Readln(A); D. Cả (A), (B), (C) đều sai.
Câu 5: Các cách nhập dữ liệu cho biến mảng sau, cách nhập nào không hợp lệ?
A. readln(B[1]); B. readln(dientich[i]);
C. readln(B5); D. read(dayso[9]);
Câu 6: Em hãy chọn phát biểu đúng khi nói về dữ liệu kiểu mảng:
A. Dữ liệu kiểu mảng là tập hợp các phần tử không có thứ tự và mọi phần tử có cùng một kiểu dữ liệu
B. Dữ liệu kiểu mảng là tập hợp các phần tử có thứ tự và mỗi một phần tử trong mảng có thể có các kiểu dữ liệu khác nhau
C. Dữ liệu kiểu mảng là tập hợp các phần tử có thứ tự và mọi phần tử có cùng một kiểu dữ liệu
D. Tất cả ý trên đều sai
Câu 7: Cách khai báo biến mảng sau đây là đúng?
A. Var X: Array[3.. 4.8] of Integer; B. Var X: Array[10 .. 1] of Integer;
C. Var X: Array[4 .. 10] of Real; D. Var X: Array[10 , 13] of Real; Câu 8: Câu 9: Các khai báo biến mảng sau đây trong Pascal đúng hay sai?
Câu 9: Chọn câu phát biểu đúng về kiểu dữ liệu của mảng?
A. Có thể dùng tất cả các kiểu dữ liệu để làm kiểu dữ liệu của mảng
B. Kiểu dữ liệu của mảng chỉ có thể là kiểu số nguyên, số thực, kiểu logic, kiểu ký tự C. Kiểu dữ liệu của mảng là kiểu của các phần tử của mảng, là Integer hoặc Real
D. Kiểu dữ liệu của mảng phải được định nghĩa trước thông qua từ khóa VAR
Câu 10: Cho khai báo mảng như sau: Var a : array[0..30] of integer ; Để in giá trị phần tử thứ 20 của mảng một chiều A ra màn hình ta viết: A. Write(A[20]); B. Write(A(20));
C. Readln(A[20]); D. Write([20]);
a) var X: Array[10, 13] Of Integer;
b) var X: Array[5 ..10.5] Of Real; c) var X: Array[3.4 .. 4.8] Of Integer;
d) var X: Array[4 .. 10] Of Integer;
Câu 1: C
Câu 2: A
Câu 3: B
Câu 4: A
Câu 5: C
Câu 6: A
Câu 7: C
Câu 9: D
Câu 10: A
BT_04_01: Viết chương trình con tính chu vi và diện tích của hình chữ nhật.
Giải: Ta thấy rằng chương trình con tính chu vi, diện tích của hình chữ nhật nhất định phải có tham số đầu vào là 2 cạnh, đó là 2 tham trị. Nếu ta viết chương trình con là thủ tục thì kết quả phải lưu bằng một tham biến để đưa ra. Đặt tên các thủ tục là chu_vi, dien_tich ta cài đặt như sau:
procedure Chu_vi(a,b : real; var c : real);
begin
C := 2*(a+b);
end;
{=================================}
procedure Dien_tich(a,b : real; var d : real);
begin
d := a*b;
end;
Tuy nhiên kết quả ra là kiểu thực, là kiểu mà hàm có thể trả lại nên ta có thể cài đặt 2 chương trình con trên bằng hàm như sau:
function Chu_vi(a,b : real): real;
Begin
Chu_vi := 2*(a+b);
end;
{=================================}
function Dien_tich(a,b : real): real;
begin
Dien_tich := a*b;
end;
Giả thích lỗi các câu lệnh sau: -Const b: integer; -Var a= 90; -Var Tinh_tong :array[1.. 50.5] of char;
const b: integer; -> sử dụng lệnh khai báo biến thì dùng var chứ không dùng const
var a=90; -> nếu khai báo biến hằng thì thay var thành const
Var Tinh_tong :array[1.. 50.5] of char; -> chỉ số đầu và cuối phải thuộc loại số nguyên
Var a=90: Sai vì var là từ khóa dùng để khai báo biến chứ không phải dùng để khai báo hằng
Const b:integer: Sai vì const là dùng để khai báo hằng chứ khai báo biến mà b:integer là khai báo biến
Giả thích lỗi các câu lệnh sau: Const b: integer; Var a= 90; Var Tinh_tong :array[1.. 50.5] of char;
const b: integer; -> sử dụng lệnh khai báo biến thì dùng var chứ không dùng const
var a=90; -> nếu khai báo biến hằng thì thay var thành const
Var Tinh_tong :array[1.. 50.5] of char; -> chỉ số đầu và cuối phải thuộc loại số nguyên
Const b:integer: Sai vì const là dùng để khai báo hằng chứ khai báo biến mà b:integer là khai báo biến
Var tinh_tong:array[1..50.5]of char: Sai vì giá trị cuối là số thực
Bài tập chương trình con: (procedure và function) Bài 6: Viết thủ tục để in các số từ 1 đến n Bài 7: Viết thủ tục để mn các số chẵn chia hết cho 3 phạm vi từ 1 Đến n
Để khai báo biến x kiểu số thực và y kiểu kí tự ta thực hiện khai báo: *
Const x: real; y: integer;
Var x: char; y: integer;
Const x: integer; y: real;
Var x: real; y: char;