Bài 16: Ví dụ làm việc với tệp
Ví dụ 1. Tính điện trở tương đương
Cho ba điện trở R1, R2, R3. Sử dụng cả ba điện trở ta có thể tạo ra năm điện trở tương đương bằng cách mắc các sơ đồ nêu ở hình 1 dưới đây:
Hình 1. Sơ đồ mắc điện trở
Mỗi cách mắc sẽ cho một điện trở tương đương khác nhau. Ví dụ:
- Nếu mắc theo sơ đồ I thì điện trở tương đương sẽ là:
\(R=\frac{R1^{*}R2^{*}R3}{R1^{*}R2+R1^{*}R3+R2^{*}R3}\)
- Nếu mắc theo sơ đồ V thì R = R1 + R2 +R3.
Cho tệp văn bản RESIST.DAT gồm nhiều dòng, mỗi dòng chứa ba số thực R1, R2 và R3, các số cách nhau một dấu cách, 0 < R1, R2, R3 \(\leq\) 105.
Chương trình sau đọc dữ liệu từ tệp RESIST.DAT, tính các điện trở tương đương và ghi kết quả ra tệp văn bản RESIST.EQU, mỗi dòng ghi năm điện trở tương đương của ba điện trở ở dòng dữ liệu vào tương ứng.
Gợi ý làm bài:
Cài đặt chương trình:
program Dientro;
var a:array[1..5] of real;
r1,r2,r3:real;
i:integer;
f1,f2:text;
begin
assign(f1,’RESIST.DAT’);
reset(f1);
assign(f2,’RESIST.EQU’);
rewrite(f2);
while not eof(f1) do
begin
readln(f1,r1,r2,r3);
a[1]:=r1*r2*r3/(r1*r2+r1*r3+r2*r3);
a[2]:=r1*r2/(r1+r2)+r3;
a[3]:=r1*r3/(r1+r3)+r2;
a[4]:=r2*r3/(r2+r3)+r1;
a[5]:=r1+r2+r3;
for i:=1 to 5 do write(f2,a[i]:9:3,’ ‘);
writeln(f2)
end;
close(f1); close(f2)
end.
Ví dụ 2
Thầy hiệu trưởng tổ chức cho giáo viên và học sinh của trường đi cắm trại, sinh hoạt ngoài trời ở vườn quốc gia Cúc Phương. Để lên lịch đến thăm khu trại các lớp, thầy Hiệu trưởng cần biết khoảng cách từ trại của mình (ở vị trí có toạ độ (0;0)) đến trại các giáo viên chủ nhiệm lớp. Mỗi lớp có một khu trại, vị trí trại của mỗi thầy chủ nhiệm đều có tọa độ nguyên (x;y), được ghi vào tệp văn bản TRAI.TXT (như vậy, tệp TRAI.TXT chứa các cặp số nguyên liên tiếp, các số cách nhau bởi dấu cách và không kết thúc bằng dấu xuống dòng).
Chương trình sau sẽ đọc từ tệp TRAI.TXT các cặp toạ độ, tính và đưa ra màn hình khoảng cách (với độ chính xác hai chữ số sau dấu chấm thập phân) từ trại mỗi giáo viên chủ nhiệm lớp đến trại của thầy hiệu trưởng.
Gợi ý làm bài:
program Khoang_Cach;
var d:real;
f:text;
x,y:integer;
begin
assign(f,’TR¹I.TXT’);
reset(f);
while not eof(f) do
begin
read(f,x,y);
d:=sqrt(x*x+y*y);
writeln('Khoang cach:' d:10:2)
end;
close(f);
end.
Ví dụ 1. Tính điện trở tương đương
Cho ba điện trở R1, R2, R3. Sử dụng cả ba điện trở ta có thể tạo ra năm điện trở tương đương bằng cách mắc các sơ đồ nêu ở hình 1 dưới đây:
Hình 1. Sơ đồ mắc điện trở
Mỗi cách mắc sẽ cho một điện trở tương đương khác nhau. Ví dụ:
- Nếu mắc theo sơ đồ I thì điện trở tương đương sẽ là:
\(R=\frac{R1^{*}R2^{*}R3}{R1^{*}R2+R1^{*}R3+R2^{*}R3}\)
- Nếu mắc theo sơ đồ V thì R = R1 + R2 +R3.
Cho tệp văn bản RESIST.DAT gồm nhiều dòng, mỗi dòng chứa ba số thực R1, R2 và R3, các số cách nhau một dấu cách, 0 < R1, R2, R3 \(\leq\) 105.
Chương trình sau đọc dữ liệu từ tệp RESIST.DAT, tính các điện trở tương đương và ghi kết quả ra tệp văn bản RESIST.EQU, mỗi dòng ghi năm điện trở tương đương của ba điện trở ở dòng dữ liệu vào tương ứng.
Gợi ý làm bài:
Cài đặt chương trình:
program Dientro;
var a:array[1..5] of real;
r1,r2,r3:real;
i:integer;
f1,f2:text;
begin
assign(f1,’RESIST.DAT’);
reset(f1);
assign(f2,’RESIST.EQU’);
rewrite(f2);
while not eof(f1) do
begin
readln(f1,r1,r2,r3);
a[1]:=r1*r2*r3/(r1*r2+r1*r3+r2*r3);
a[2]:=r1*r2/(r1+r2)+r3;
a[3]:=r1*r3/(r1+r3)+r2;
a[4]:=r2*r3/(r2+r3)+r1;
a[5]:=r1+r2+r3;
for i:=1 to 5 do write(f2,a[i]:9:3,’ ‘);
writeln(f2)
end;
close(f1); close(f2)
end.
Ví dụ 2
Thầy hiệu trưởng tổ chức cho giáo viên và học sinh của trường đi cắm trại, sinh hoạt ngoài trời ở vườn quốc gia Cúc Phương. Để lên lịch đến thăm khu trại các lớp, thầy Hiệu trưởng cần biết khoảng cách từ trại của mình (ở vị trí có toạ độ (0;0)) đến trại các giáo viên chủ nhiệm lớp. Mỗi lớp có một khu trại, vị trí trại của mỗi thầy chủ nhiệm đều có tọa độ nguyên (x;y), được ghi vào tệp văn bản TRAI.TXT (như vậy, tệp TRAI.TXT chứa các cặp số nguyên liên tiếp, các số cách nhau bởi dấu cách và không kết thúc bằng dấu xuống dòng).
Chương trình sau sẽ đọc từ tệp TRAI.TXT các cặp toạ độ, tính và đưa ra màn hình khoảng cách (với độ chính xác hai chữ số sau dấu chấm thập phân) từ trại mỗi giáo viên chủ nhiệm lớp đến trại của thầy hiệu trưởng.
Gợi ý làm bài:
program Khoang_Cach;
var d:real;
f:text;
x,y:integer;
begin
assign(f,’TR¹I.TXT’);
reset(f);
while not eof(f) do
begin
read(f,x,y);
d:=sqrt(x*x+y*y);
writeln('Khoang cach:' d:10:2)
end;
close(f);
end.