Giáo trình Nhập môn Tin học LỜi nóI ĐẦU



tải về 4.67 Mb.
trang58/63
Chuyển đổi dữ liệu20.05.2018
Kích4.67 Mb.
#39016
1   ...   55   56   57   58   59   60   61   62   63

7.5.7. Tệp truy cập trực tiếp


PASCAL chuẩn chỉ định nghĩa một kiểu tệp truy nhập tuần tự. Tuy nhiên các bộ nhớ ngoài như đĩa từ, đĩa quang, . . có thể cho phép tính toán toạ độ của một phần tử bất kỳ trong tệp (vì độ dài các phần tử là bằng nhau), do đó có thể truy cập trực tiếp vào một phần tử mặc dù cấu tạo logic của tệp vẫn là dạng tuần tự. Trong TURBO PASCAL để truy nhập trực tiếp vào phần tử của tệp ta dùng thủ tục SEEK, cú pháp:

SEEK( biếntệp, k );

Đặt con trỏ tệp vào phần tử thứ k trong tệp. Thủ tục này cho phép truy xuất trực tiếp một phần tử của tệp mà không phải thực hiện tuần tự từ đầu tệp.


Ví dụ 7.66: đọc phần tử thứ 10 của tệp DLIEU.DAT và gán cho biến nguyên i rồi in giá trị của i:

Seek(F1, 10);

Read(F1, i);

Write(i);



Chương trình sau minh hoạ thủ tục SEEK

Program Vidu_7_66_Seek;

Var I,N : Integer;

Ch : Char;

f : File Of Integer;

Begin


Writeln('DI CHUYEN CON TRO TEP DEN PHAN TU THU N');

Writeln('-------------------------------------------');

Writeln;

Assign(f,'SoNguyen.DAT');

Reset(f);

Write('-Can tim phan tu thu: ');

Readln(n);

Seek(f,(n-1));

Read(f,i);

Writeln;


Writeln('-Phan tu thu: ',n,' co tri = ',i);

Writeln;


Write('-Co can sua khong ? (C/K) ');

Readln(Ch);

If Ch in ['C','c'] Then

Begin


Seek(f,n-1);

Write('-Nhap so can sua: ');

Readln(i);

Write(f,i);

End;

Writeln;


Write('Da sua va ghi lai vao tep, bam de xem lai');

Readln;


Seek(f,0);

While Not EOF(f) Do

Begin

Read(f,i);



Writeln(i);

End;


Writeln;

Seek(f,0);

Read(f,i);

Writeln('-Phan tu dau tien co tri= ',i);

Writeln;

Seek(f,Filesize(f)-1);

Read(f,i);

Writeln('-Phan tu cuoi cung co tri = ',i);

Writeln;

Writeln(' Bam ...');

Readln;

Close(f);



End.

7.5.8. Các thao tác khác với tệp


* Các hàm và thủ tục xử lý tệp


THỦ TỤC VÀ HÀM

Ý NGHĨA

Hàm FileSize(Biếntệp)


Cho số phần tử của biến tệp. Hàm sẽ cho giá trị 0 khi tệp rỗng

Hàm FilePos(Biếntệp)


Cho biết vị trí hiện tại của con trỏ tệp

( phần tử đầu tiên của tệp được đánh số là 0 )



Hàm EOF(Biếntệp)


Cho giá trị là True nếu con trỏ tệp ở vị trí cuối của tệp, trái lại là False. Hàm này thường dùng để kiểm tra xem đã đọc hết dữ liệu trong tệp chưa ?

Hàm EOLn(Biếntệp)


Cho giá trị là True nếu con trỏ tệp ở vị trí cuối dòng của tệp văn bản, trái lại là False. Hàm này thường dùng để kiểm tra xem đã đọc hết dòng văn bản trong tệp chưa ?

Hàm này chỉ dùng với tệp văn bản



Truncate(Biếntệp);

Cắt tệp từ vị trí hiện tại của tệp (cửa sổ tệp).

Erase(Biếntệp)


Thủ tục này dùng để xoá tệp trên đĩa có tên đã gán vào biến tệp.

Không được xoá tệp khi tệp đang mở .



Rename(Biếntệp,Str)


Thủ tục này dùng để đổi tên biến tệp trên đĩa thành tệp có tên mới kiểu String chứa trong Xâu kí tự Str .

Không được đổi tên tệp khi tệp đang mở và tên mới không được trùng với tên tệp đã có trên đĩa đang làm việc .

Ví dụ đổi tên tệp có tên là NTL02.pas thành NTL02.sl :

Assign(Biến tệp,’NTL02.pas');

Rename(Biến tệp,'NTL02.sl');



Ví dụ 7.67: Tạo tệp TEST.INT có 10 số nguyên, sau đó hiển thị ra màn hình kích thước tệp, các phần tử của tệp.
Program Ham_Tep;

Var f : File Of Integer;

i,j,k,v : Integer;

Begin


Writeln('SU DUNG CAC HAM TEP ');

Writeln('------------------------');

Assign(f,'TEST.INT');

Rewrite(f);

For i := 1 To 10 Do

Write(f,i);

Writeln;

Writeln('Da tao tep TEST.INT co 10 so nguyen');

Write('Bam de xem noi dung tep TEST');

Readln;


Reset(f);

While Not EOF(f) Do

Begin

Read(f,i);



Writeln(i);

End;


Writeln;

k:= Filesize(f);

Writeln('-Kich thuoc tap tin= ',k,' phan tu');

Write('Bam de di chuyen den phan tu thu 5 ');

Readln;

Seek(f,5-1);



Read(f,i);

Writeln;


Writeln('-Phan tu thu 5 co tri = ',i);

v := Filepos(f);

Writeln;

Writeln('-Vi tri con tro tep hien gio o phan tu thu: ',v);

Writeln;

Write('Bam de xem cac phan tu con lai ');

Readln;

While Not EOF(f) Do



Begin

Read(f,i);

Writeln(i);

End;


Writeln;

If EOF(f) Then

Writeln('-Da ket thuc tep')

Else


Writeln('-Chua ket thuc tep');

Writeln;


Write(' Bam de ket thuc ');

Readln;


Close(f);

Erase(f);

End.
Ví dụ 7.68: Chương trình cắt tệp TEST.INT

Program Cat_Tep;

Var f : File Of Integer;

i,j : Integer;

Begin

Writeln('CAT TEP BANG THU TUC TRUNCATE');



Writeln('---------------------------------');

Writeln;


Assign(f,'TEST.INT');

Rewrite(f);

For i := 1 To 10 Do

Write(f,i);

Writeln;

Writeln('Da tao tep TEST.INT co 10 so nguyen');

Write('Bam de xem noi dung tep TEST');

Readln;


Reset(f);

While Not EOF(f) Do

Begin

Read(f,i);



Writeln(i);

End;


Reset(f);

Writeln;


Write(' Bam de cat 5 phan tu ');

Readln;


Reset(f);

For i := 1 To 5 Do

Read(f,i);

Truncate(f);

Writeln;

Writeln(' Da cat 5 phan tu cua tep');

Write('Bam de xem noi dung tep con lai ');

Readln;


Reset(f);

While Not EOF(f) Do

Begin

Read(f,i);



Writeln(i);

End;


Writeln;

Write(' Bam de ket thuc ');

Readln;

Close(f);



Erase(f);

End.
Ví dụ 7.68: Chương trình minh hoạ thủ tục xoá tệp

Program Xoa_Tep;

Var f : File Of String;

Ten : String;

Begin


Writeln('THU TUC ERASE, XOA TEP');

Write('-Cho biet ten tap tin can xoa: ');

Readln(Ten);

Assign(f,Ten);

{$I-}

Reset(f);



If IOResult <> 0 Then

Writeln(' Khong co tep: ',Ten,' tren dia')

Else

begin


Erase(f);

Writeln;


Write(' Da xoa tep, bam . . . ');

End;


Readln;

Close(f);

End.

* Bẫy lỗi khi mở tệp:


Đặt vấn đề


Khi thực hiện thao tác mở tệp để đọc / ghi có thể bị lỗi nếu:

- mở tệp chưa tồn tại trên đĩa, tên sai ...

- hết chỗ trên đĩa để ghi thêm vào tệp.

TurboPascal cung cấp chỉ thị để trình biên dịch thêm các mã lệnh thực hiện kiểm tra lỗi trong quá trình thực hiện đọc / ghi tệp mà dưới đây sẽ gọi ngắn gọn là chỉ thị kiểm tra I/O.

{ $ I + }: bật (mở) việc kiểm tra I/O. Nếu gặp lỗi I/O chương trình sẽ báo lỗi và dừng lại. Đây là chế độ mặc định.

{ $ I - }: tắt việc kiểm tra I/O. Chương trình không dừng dù có lỗi I/O. Tuy nhiên nó sẽ bỏ qua (treo, tạm dừng) tất cả các thủ tục vào/ra sau đó cho đến khi gặp lời gọi hàm IOResult. IOResult là hàm trả về mã lỗi khi thực hiện các thao tác đọc ghi ra đĩa. Nếu công việc thành công thì mã lỗi là 0. Trái lại, mã lỗi là một số khác không.

Sử dụng cơ chế kiểm tra I/O có thể thực hiện việc bẫy lỗi khi mở tệp, nhất là tiến hành mở tệp mới an toàn, tránh việc vô tình xoá mất tệp cùng tên khi mở tệp mới để viết vào bằng thủ tục Rewrite.

Các bước để mở tệp an toàn.


Tắt chế độ kiểm tra và thử mở tệp ra để đọc.

Gọi hàm IOResult.

Nếu IOResult bằng 0, nghĩa là mở tệp thành công tức là đã có tệp cùng tên. Cần thông báo cho người dùng biết để xử lý, nhập lại tên khác chẳng hạn.

Nếu IOResult khác không nghĩa là chưa có tệp nào có tên như thế. Có thể yên tâm tạo tệp bằng lệnh Rewrite.


Ví dụ 7.70:


Assign( biến tệp , tên tệp);

{$I-}


Reset( biến tệp );

{$I+}


If IOResult <> 0 then {không có tệp nào trùng tên}

Begin


Writeln(' Ban muon tao tep moi ? Enter=Yes ');

if ReadKey = #13 then Rewrite( biến tệp )

else exit;

end;


Else

Begin


Writeln(' Da co tep trung ten '); ....

End;
Việc tắt chế độ kiểm tra I/O bằng chỉ thị {$I-} trước câu lệnh Reset là để tránh báo lỗi và dừng chương trình theo mặc định khi mở tệp chưa có trên đĩa.


7.5.9. Tệp văn bản


7.5.9.1. Ý nghĩa

Tệp văn bản là một kiểu tệp phổ biến, đã được định nghĩa sẵn, để lưu trữ xử lý các "văn bản". Khái niệm “văn bản” ở đây khác với khái niệm văn bản thông thường trong các phần mềm xử lý văn bản. “Văn bản” ở đây chỉ gồm các kí tự ASCII và được phân thành các dòng. Ngoài ra, không có bất cứ định dạng nào khác về trình bày như cỡ chữ, kiểu chữ, màu sắc, v.v.


7.5.9.2. Cú pháp

Để khai báo F là biến tệp văn bản ta viết :



Var F: Text;

Ví dụ 7.71: VAR F1, F2 : Text ;

7.5.9.3. Cấu trúc

Thành phần chính của tệp văn bản là các kí tự ASCII. Tuy nhiên, tệp văn bản được chia thành các dòng. Đánh dấu hết dòng bằng dấu Eoln (end of line). Đó là cặp kí tự CR (cariage return) - nhảy về đầu dòng, mã ASCII là 13 - và LF (line feed) - nhảy xuống dòng dưới, mã ASCII là 10.

Dấu hết tệp Eof đối với tệp văn bản là Ctrl-Z có mã ASCII là 26.

Trong môi trường DOS có thể dùng lệnh Type để hiển thị nội dung của tệp văn bản lên màn hình.

Tệp văn bản không phải là tệp các kí tự File of Char. File of Char khác với tệp kiểu Text ở chỗ nó không nhận biết cặp kí tự CR, LF như dấu hết dòng mà coi như hai kí tự ASCII bình thường.

Ví dụ 7.72: đoạn văn bản sau :

Nguyen Thanh Lam

08-08-2002

Het


được chứa trong tệp văn bản thành một dãy :

Nguyen Thanh Lam

CR LF

08-08-2002

CR LF

Het

Eof

Các thủ tục Assign, Rewrite, Reset, Write, Read, Close, Erase, Rename đều dùng được cho tệp văn bản. Ngoài ra còn có thêm thủ tục Append(biếntệp) dùng để mở tệp văn bản và cho phép ghi thêm dữ liệu vào cuối tệp.

Đối với tệp văn bản, không thể đồng thời vừa ghi vừa đọc dữ liệu như tệp có định kiểu.

Để ghi dữ liệu, trước tiên phải khởi tạo tệp bằng lệnh Rewrite hay mở tệp và đưa trỏ về cuối tệp bằng lệnh Append. Sau đó ghi dữ liệu vào tệp bằng thủ tục Write hay Writeln.

Để đọc dữ liệu một tệp đã có, trước tiên ta phải mở tệp bằng lệnh Reset. Sau đó đọc dữ liệu bằng thủ tục Read hay Readln.

Nếu mở tệp bằng Rewrite hoặc Append thì không thể đọc được bằng ReadReadln. Nếu mở tệp bằng Reset thì không thể ghi được bằng Write hay Writeln.


7.5.9.4. Ghi dữ liệu vào tệp văn bản

Có thể ghi các giá trị kiểu nguyên, thực, logic, xâu kí tự ra tệp văn bản bằng các lệnh Write. Các thủ tục Write viết ra tệp văn bản sẽ tự động tính các biểu thức và chuyển đổi các giá trị sang dạng biểu diễn xâu kí tự thông thường để có thể ghi vào tệp văn bản.



Write ( biến tệp , biểu thức 1, biểu thức 2 , ... , biểu thức n ) ;

Writeln ( biến tệp , biểu thức 1, biểu thức 2 , ... , biểu thức n );

Writeln ( biến tệp );
Sau các biểu thức có thể kèm phần định dạng (quy cách) in ra.

Tác dụng của các câu lệnh trên hoàn toàn tương tự như trong trường hợp xuất ra màn hình đã trình bày ở Chương 3. Chỉ khác là ở đây không phải in ra màn hình mà là viết ra tệp văn bản ứng với biến tệp. Về bản chất, màn hình cũng giống như một tệp văn bản.


Ví dụ 7.73: Write(F, 3, 10:4, ‘a’:2, ‘Text’, 4.5:6:2);

sẽ ghi vào tệp thành dãy như sau ( Dấu ~ hiểu là một ký tự trắng):

3~~10~aText~~4.50

Chương trình dưới đây sẽ tạo tệp văn bản T1.TXT :

Program VIDU_7_73;

Var F: Text;

A : Integer;

B : Real;

Begin

A:=100;


B:=1234.5;

Assign(F, ’T1.TXT’);

Rewrite(F);

Write(F, ‘Ket qua=’ :10, A:5, B:7:2);

Close(F);

End.


Nội dung của tệp T1.TXT là :

~~Ket qua=~~100~123.45

Như vậy, cách ghi dữ liệu vào tệp văn bản hoàn toàn giống như khi in dữ liệu lên màn hình.

Thủ tục WRITELN cũng có công dụng như WRITE, nhưng ghi xong dữ liệu thì đưa con trỏ tệp xuống dòng dưới. Đặc biệt, lệnh Writeln(F); không ghi gì cả, chỉ đưa con trỏ tệp xuống dòng.

Nội dung của các tệp văn bản tạo bằng Pascal hoàn toàn có thể xem được bằng lệnh Type của MSDOS, bằng Norton hay bằng chính Turbo Pascal, ...
7.5.9.5. Đọc dữ liệu của tệp văn bản

Các thủ tục Read quen biết có thể đọc từ tệp văn bản rồi gán cho các biến không những các kí tự mà cả các kiểu dữ liệu khác nữa: số nguyên, thực, logic .... Thủ tục Read sẽ tự động chuyển đổi các xâu kí tự biểu diễn dữ liệu thành giá trị có kiểu tương ứng của biến sẽ được gán

Read ( biến tệp , biến 1 , biến 2 , ... , biến n );

Readln ( biến tệp , biến 1 , biến 2 , ... , biến n ) ;

Readln ( biến tệp );
Tác dụng: hoàn toàn giống như các lệnh đọc dữ liệu từ bàn phím đã quen biết, chỉ khác là ở đây không phải nhập dữ liệu từ bàn phím mà các mục dữ liệu đã viết sẵn trong tệp văn bản ứng với biến tệp.

Tuỳ theo kiểu của biến i mà lệnh Read thực hiện đọc một dãy kí tự từ tệp văn bản, chuyển đổi nó thành một giá trị trực tiếp thuộc kiểu dữ liệu của biến i và gán cho biến này.

Quy định về phân cách các mục dữ liệu kiểu số, kiểu kí tự, kiểu xâu kí tự đã được trình bày chi tiết trong Chương 3.

Chú ý: Các biến1, biến2, ..., biếnN phải có kiểu dữ liệu phù hợp với dữ liệu cần đọc tại vị trí tương ứng trong tệp.

Ví dụ 7.74:

Nếu tệp T1.TXT có nội dung như sau:

~~Ket qua=~~100~123.45

thì để đọc lại các dữ liệu này, ta phải khai báo:

Var St :String[10];

i: Integer ; Z : Real;

Và dùng các lệnh:

Reset(F);

Read(F, St, i, Z);

Giá trị của St, i, Z sẽ là: St=’~~Ket qua=’, i=100, Z=123.45.

Nếu khai báo St có kiểu String[9] thì sẽ bị lỗi vì sau khi đọc xong 9 ký tự đầu, máy sẽ đọc tiếp giá trị =~~100 cho biến nguyên i, nhưng vì giá trị này bắt đầu là dấu = nên không đổi ra số nguyên được.

Thủ tục READLN(biếntệp, biến1, biến2, ..., biếnN ) đọc dữ liệu cho các biến xong sẽ đưa trỏ tệp xuống đầu dòng dưới.

Đặc biệt, lệnh READLN( biếntệp); không đọc gì cả, chỉ đưa con trỏ tệp xuống dòng.

7.5.9.6. Các hàm, thủ tục chuẩn khác cho tệp văn bản


Các thủ tục Seek, FileSize, FilePos không áp dụng được cho tệp văn bản vì tệp văn bản có cấu trúc là dãy các dòng kích thước (độ dài) khác nhau.

Dưới đây là các hàm thủ tục áp dụng cho tệp Text.

- Eof( biến tệp ): boolean ;

Kiểm tra đã ở cuối tệp chưa.

- Eoln ( biến tệp ): boolean ;

Kiểm tra đã ở cuối dòng chưa.

- Append ( biến tệp );

Mở tệp văn bản để viết vào, của sổ tệp đặt tại cuối tệp.

- SeekEoln( biến tệp ): boolean ;

Tương tự như Eoln nhưng trước khi kiểm tra nó nhảy qua các dấu cách và dấu Tab. SeekEoln cho kết quả True nếu trên phần còn lại của dòng, kể từ vị trí hiện tại, không còn mục dữ liệu nào nữa.

- SeekEof( biến tệp ): boolean ;

Tương tự như Eof nhưng trước khi kiểm tra nó nhảy qua các dấu cách, dấu Tab và dấu xuống dòng. SeekEof cho kết quả True nếu từ vị trí hiện tại đến cuối tệp không còn mục dữ liệu nào nữa.



- Flush( biến tệp );

Xả hết nội dung bộ đệm của một tệp kiểu văn bản đang được mở để viết vào.

F là một biến kiểu tệp văn bản Text, được mở bằng Rewrite hoặc Append để viết ra. Khi đó lời gọi Flush sẽ xả hết phần nội dung còn đọng trong bộ đệm, viết nốt ra tệp F. Thủ tục này được dùng để đảm bảo rằng mọi lệnh viết ra tệp F đều được thực hiện trọn vẹn, không bỏ sót dữ liệu.

Flush không có tác dụng nếu tệp F đựơc mở để đọc.

- SetTextBuf( biến tệp, vùng đệm, kích thước );

Gán một vùng đệm I/O cho tệp văn bản. Tham biến Vùng đệm là một vùng trong bộ nhớ dùng làm trung gian, tạm chứa dữ liệu trong các thao tác truy cập đọc ra hoặc viết vào tệp trên ổ đĩa. Tham trị kích thước là tuỳ chọn, có thể không có mặt.

Thủ tục này thường dùng để tăng kích thước vùng đệm nhằm đẩy nhanh tốc độ trao đổi dữ liệu với ổ đĩa. Ta đã biết tốc độ truy cập đĩa chậm hơn nhiều so với truy cập bộ nhớ trong. Nếu có một vùng đệm thì các thao tác xử lý đọc / viết tạm ra đây. Khi đầy vùng đệm mới tiến hành thao tác đọc / viết thực sự ra đĩa, không làm lắt nhắt nhiều lần.



SetTextBuf không nên gọi cho tệp đang mở và đã có thao tác trao đổi dữ liệu. Nó có thể được gọi ngay sau Reset, Rewrite, hay Append. Nếu gọi SetTextBuf cho tệp đang mở thì khi có thao tác I/O , có thể bị mất dữ liệu do kích thước của vùng đệm thay đổi.

Ví dụ 7.75: Minh hoạ cách dùng SetTextBuf

Var F: Text;

Ch: Char;

Bodem: array[1..4095] of Char; { 4K buffer }

begin

{Lấy tên tệp từ tham số dòng lệnh}



Assign(F, ParamStr(1));

{Tăng bộ đệm lớn để đọc nhanh}

SetTextBuf(F, Bodem);

Reset(F);

{Đưa toàn bộ nội dung tệp văn bản ra màn hình}

while not Eof(f) do

begin

Read(F, Ch);



Write(Ch);

end;


end.

Chú ý: Thủ tục Seek và các hàm FileSize, FilePos không dùng cho tệp văn bản.

7.5.9.7. Các tệp văn bản ngầm định

Trong Pascal có hai biến tệp văn bản đã được khai báo sẵn là InputOutput , tức là máy đã ngầm khai báo :

Var Input , Output : Text ;

Input thường là bàn phím còn Output thường là màn hình.

Lệnh Readln(Input, x); được viết tắt thành Readln( x) ;

Lệnh Writeln(Output, x); được viết tắt thành Writeln(x);

Máy in cũng là một tệp văn bản, được ngầm khai báo với tên là LST. Để in các biểu thức bt1, bt2, ..., btN ra máy in, ta phải khai báo sử dụng thư viện chuẩn PRINTER, và dùng lệnh :

Write(LST, bt1, bt2, ... , btN);



Ví dụ 7.76: Cho tệp văn bản tên là T2.TXT và có nội dung là:

dong=6


cot =7

0 8 8 -2 6 11 1

8 0 2 0 7 0 2

8 2 0 11 12 9 3

-2 0 11 0 -7 9 4

6 7 12 -7 0 6 5

11 0 9 9 6 0 6

Hãy đọc tệp này đưa vào một ma trận A và in ma trận A lên màn hình. Số dòng và số cột của ma trận A được ghi ở hai dòng đầu tiên trong tệp T2.TXT.

Program VIDU_7_76;

{ vi du ve File Van ban }

uses crt;

Type MANG = array[1..20,1..20] of integer ;

Var A : MANG;

N, M : integer;

F : Text;

Procedure Nhap;

Var i,j : Byte;

st: string[5];

Begin

Assign(F, 'T2.TXT');



Reset(F);

Readln(F, St, N);

Readln(F, St, M);

For i:=1 to N do

begin

For j:=1 to M do



Read(F, A[i,j]);

Readln(F);

end;

Close(F);



End;

Procedure InMatran;

Var i, j : Integer;

Begin


For i:=1 to N do

begin


for j:=1 to M do

write( A[i,j]:4);

writeln;

end;


End;

BEGIN


Clrscr;

Nhap;


InMatran;

Readln;


END.

Ví dụ 7.77 : Lập bảng lượng giác từ 10 đến 890 và ghi ra tệp BLGIAC.DAT

Program Bang_Luong_Giac;

CONST g='|';

Var F : Text;

k : Integer;

Rad,S,C,T,CT : Real;

{-------------------------------}

Function taobansao(Dong:Char; T:Integer):String;



{Chương trình con này tạo đoạn thẳng bởi các dấu bằng =}

Var j : Integer;

Tam :String[80];

Begin


Tam := ' ';

For j := 1 To T Do

Tam := Tam + Dong;

Replicate := Tam;

End;

{-------------------------------}



BEGIN

Assign(f,'BLGIAC.DAT');

Rewrite(f);

Writeln(f,' * BANG LUONG GIAC *');

Writeln(f);

Writeln(f,taobansao(#61,58));

Writeln(f,g,' DO ',g,' RADIAN ',g,' SIN ',g,' COSIN ',

g,' TAN ',g,' COTANG ',g);

Writeln(f,taobansao(#61,58));{tạo đoạn thẳng}

For k := 1 To 89 Do

Begin

Rad := k * Pi /180;



S := Sin(Rad);

C := Cos(Rad);

T := S/C;

CT := 1/t;

writeln(f,g,k:2,g,Rad:10:8,g,S:10:8,g,C:10:8,g,

T:10:6,g,CT:10:6,g);

End;

Writeln(f,taobansao(#61,58));



Close(f);

END.


{Hãy mở tệp 'BLGIAC.DAT' trong thư mục hiện hành để xem kết quả hoặc để tiện quan sát bạn có thể thêm phần ghi ra màn hình}
1   ...   55   56   57   58   59   60   61   62   63




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương