2 Các thao tác làm việc với kiểu dữ liệu tệp.. với n1,n2 là các hằng hoặc biểu thức nguyên xác định chỉ số đầu và chỉ số cuối n1... Trước khi làm việc với tệp ta phải khai báo biến tệp
Trang 1ÔN TẬP
I/ Lý Thuyết
1) Khai báo kiểu mảng 1 chiều
2) Các thao tác làm việc với kiểu dữ liệu tệp
3) Khái niệm chương trình con? Ý nghĩa của việc sử dụng
chương trình con?
4) Thư viện chương trình con chuẩn là gì ? Cách sử dụng các chương trình con trong các thư viện chuẩn ???
Gợi ý :
1) Để khai báo kiểu mảng 1 chiều ta chọn một trong 2 cách sau :
Cách 1 : khai báo trực tiếp
Var <tên biến mảng> : array[kiểu chỉ số] of <kiểu phần tử>;
Cách 2: khai báo gián tiếp qua kiểu mảng 1 chiều
Type<tên biến mảng>=array[kiểu chỉ số] of <kiểu phần tử>; Var <tên biến mảng>:<tên kiểu mảng>;
* Trong đó :
* kiểu chỉ số thường là một đoạn số nguyên liên tục có dạng n1,n2, với n1,n2 là các hằng hoặc biểu thức
nguyên xác định chỉ số đầu và chỉ số cuối ( n1<= n2)
* Kiểu phần tử là kiểu của các phần tử mảng
2) Các thao tác làm việc với tệp
Trang 2Trước khi làm việc với tệp ta phải khai báo biến tệp theo cú pháp : var <tên biến tệp >:text;
- Gắn tên tệp : tên tệp là biến xâu hoặc hằng xâu Dùng thủ tục sau :
Assign(<biến tệp>,<tên tệp>);
- Mở tệp :
+ để ghi dữ liệu : rewrite(<biến tệp>);
+ để đọc dữ liệu : reset(<biến tệp>);
- Đọc tệp :read(<biến tệp>,<danh sách biến>);
- Ghi tệp :write(<biến tệp>,<danh sách kết quả>);
- Đóng tệp : close(<biến tệp>);
3) Chương trình con là một dãy lệnh mô tả một số thao tác nhất định và có thể được thực hiện từ nhiều vị trí trong chương trình
Ý nghĩa :
o Tránh việc phải viết đi viết lại cùng một dãy lệnh
o Hỗ trợ việc thwucj hiện chương trình lớn
o Phục vụ cho quá trình trừu trượng hóa
o Mở rộng khả năng ngôn ngữ
o Thuận tiện cho việc phát triển, nâng cấp chương trình Chương trình con gồm có 2 loại là : Hàm ( function ) và thủ tục (procedure)
II/ Bài Tập
1) Khai báo tạo ngẫu nhiên một mảng gồm n phần tử nguyên
và tìm phần tử lớn thứ 2 / nhỏ thứ 2 của mảng
Trang 3Tìm phần tử lớn nhì trong mảng
Uses crt;
Var a:array[1 100] of integer;
n,i,max1,max2 :integer;
begin
clrscr;randomize;
write(‘nhap n :’);read(n);
for i:=1 to n do a[i]:=random(201)-random(201); writeln(‘cac phan tu trong mang :’);
for i:=1 to n do writeln(a[i]:5);
max1:=a[1];
for i:=1 to n do if a[i]>max1 then max1:=a[i];
max2:=-200;
for i:=1 to n do if ((a[i]>max2) and(a[i]<max1)) then max2:=a[i];
write(‘phan tu lon nhi : ‘,max2);
readln;readln;
end
** Tìm phần tử bé nhì trong mảng :
Uses crt;
Var a:array[1 100] of integer;
n,i,min1,min2 :integer;
begin
Trang 4clrscr;randomize;
write(‘nhap n :’);read(n);
for i:=1 to n do a[i]:=random(201)-random(201);
writeln(‘cac phan tu trong mang :’);
for i:=1 to n do writeln(a[i]:5);
min1:=a[1];
for i:=1 to n do if a[i]<min1 then min1:=a[i];
max2:= 200;
for i:=1 to n do if ((a[i]<min2) and(a[i]>min1)) then
min2:=a[i];
write(‘phan tu be nhi : ‘,min2);
readln;readln;
end
** Cách khác : sắp xếp các phần tử trong mảng theo chiều tăng dần thì phần tử lớn nhì là phần tử n-1 và phần tử bé nhì là phần tử thứ 2
uses crt;
var a:array[1 100] of integer;
n,i,k,tam,m,q :integer;
begin
clrscr;randomize;
write('nhap n : ');read(n);
for i:=1 to n do a[i]:=random(201)-random(201);
write('cac phan tu trong mang : ');
for i :=1 to n do write(a[i]:5);
k:=n;
Trang 5while k>1 do
begin
for i:=1 to k-1 do if a[i] > a[i+1] then
begin
tam:=a[i];
a[i]:=a[i+1];
a[i+1]:=tam;
end;
k:=k-1;
end;
m:=a[n-1];
writeln('phan tu lon nhi: ',m);
q:=a[2];
write(‘phan tu be nhi: ‘,q);
readln;readln;
end
2) Khai báo tạo ngẫu nhiên mảng A gồm n phần tử nguyên và tạo magnr sums có các phần tử S lần lượt là tổng các phần
tử thứ nhất đến thứ i của a
3) Viết thủ tục kiểm tra tính nguyên tố của một số nguyên ( nếu số đó âm thì lấy trị tuyệt đối của số đó )
Uses crt;
Var n,i:integer;
Procedure NT(i:integer);
Var kt:boolean;
Trang 6Begin
If n<0 then n:=abs(n);
Writeln(n);
Kt:=true;
For i:=2 to n-1 do if (n mod i =0) then kt:=false;
If kt=true then write (‘day la so NT ‘) else write (day k phai
so NT’);
End;
Begin
Clrscr;
Write(‘nhap n : ‘);read(n);
NT(i);
Readln;readln;
End
** Mở rộng bài toán : Giả sử bài toán không yêu cầu viết thủ tục mà là viết hàm để kiểm tra tính nguyên tố của n thì ta làm như sau :
Function kt(n:integer):boolean;
var i: integer;
begin
kt:=true;
for i:=2 to n-1 do if (n mod i) = 0 then kt:=false;
end;
Trang 74) Viết hàm để xuất ra 1 dãy string là dãy đảo ngược của một dãy cho trước
Uses crt;
Var a:string;
Function DN(a:string): string;
Var I,k :integer;
Begin
K:=length(a);
For i:=k downto 1 do write(a[i]);
DN:=a[i];
End;
Begin
Clrscr;
Write(‘nhap xau : ’);read(a);
Write(‘ xau dao nguoc : ‘, DN(a));
Readln;readln;
End
** Cách khác : mượn xâu rỗng
Uses crt;
Var a:string;
Function DN(a:string): string;
Var I,k :integer;
S:string;
Begin
K:=length(a);
Trang 8S:=’’;
For i:=k downto 1 do s:=s+a[i];
DN:=s;
End;
Begin
Clrscr;
Write(‘nhap xau : ’);read(a);
Write(‘ xau dao nguoc : ‘, DN(a));
Readln;readln;
End
5) Viết chương trình con giải và biện luận phương trình bậc 2 Uses crt;
Var a,b,c,d,x1,x2,x :real;
Procedure GPT1(b,c : real);
Var x :real;
Begin
If b<>0 then write(‘PT co nghiem x= ‘, (-c/b):6:1) else
Begin
If c=0 then write(‘PT co VSN ‘);
If c<>0 then write(‘PT vo nghiem’);
End;
End;
Procedure GPT2(a,b,c:real);
Trang 9Var d,x1,x2,x:real;
If a=0 then GPT1(b,c) else
Begin
D:=b*b-4*a*c;
If d<0 then write(‘PT vo nghiem’);
If d=0 then write(‘PT co nghiem x= ‘, (-b/(2*a)):6:2);
If d>0 then write(‘PT co 2 nghiem x1= ‘,
(-b+sqrt(d))/(2*a)):6:2, ‘x2= ‘, (-b-sqrt(d))/(2*a):6:2); End;
End;
Begin
Clrscr;
Write(‘nhap a,b,c : ‘);read(a,b,c);
GPT2(a,b,c);
Readln;readln;
End
6) Viết hàm tính n!! theo công thức
(2n)!! = 2n(2n-2)(2n-4) 2
(2n-1)!!=(2n-1)(2n-3) 3.1
Trang 10TRÀ MAI THẢO