-
02-27-2011, 07:03 PM #1
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Cách nhập dữ liệu từ File vào mảng 1 chiều [Pascal]
Mình có một file "Input.dat" như sau :
4 5 4 3 5
2 3 1 2 4
4 1 2 3 4
6 7 8 2 9
4 3 2 5 6
Đề yêu cầu là đọc các số trên vào mảng 1 chiều để dùng cho việc tính toán.
<div style="text-align: left">Bro nào rành về File giúp mình với... Ghi code rõ ràng chút cho mình nha, mình mới học Pascal.#-o
- Thanks các bro trước -
</div>
-
03-02-2011, 05:14 AM #2
Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 0
Gửi bởi FunkyHpio
Mã:procedure readfile; var i:byte; begin assign(f,'Input.dat');reset(f); i:=0; while not eof(f) do begin while not eoln(f) do begin inc(i); read(f,a[i]); end; readln(f); end; n:=i; close(f); end;
a: mảng một chiều
n: số lượng phần tử
-
03-02-2011, 11:35 AM #3
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 3
???
Ủa, dữ lịu trong file input cách nhau bởi 1 dấu cách hết mờ, mình chỉ tăng a lên 1 đơn vị lịu có đọc được ko?
-
03-02-2011, 11:33 PM #4
Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 8
Gửi bởi hoangtungoc
Bạn đọc số thứ nhất trong tệp vào a[0] thì bạn phải lưu số thứ 2 trong tệp vào a[1] chứ. Chính vì vậy mà phải tăng i lên để nó lưu vào mảng a. Bạn cứ yên tâm là máy đọc chính xác, cách 5 - 6 khoảng trống nó vẫn đọc ok!
Chúc bạn học tốt!
-
03-03-2011, 01:09 AM #5
Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 0
Trả lời
Gửi bởi Shiro
Bạn xem lại thử xem, mình đã điền thêm phần thân vào, như thế này:
Mã:uses crt; var a:array[1..20] of integer; c:byte; procedure readfile; var i:byte;f: text; begin assign(f,'Input.dat');reset(f); i:=0; while not eof(f) do begin while not eoln(f) do begin inc(i); read(f,a[i]); end; readln(f); end; close(f); end; begin readfile; for c:=0 to 20 do write(a[c]:3); readln; end.
-
03-03-2011, 01:22 AM #6
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 2
Thực ra thì không cần đến "while not eoln(f) do" cũng được. Chỉ cần 1 vòng "while not eof(f) do" là nó đã dư sức đọc rồi. Bởi vì đọc hết hàng nó sẽ tự động xuống (đk ràng buộc của nó là eof(f) nên nó sẽ tự động nhảy).
Mã:uses crt; var a:array[1..50] of integer; c:byte; procedure readfile; var i:byte;f: text; begin assign(f,'Input.dat'); reset(f); i:=0; while not eof(f) do begin inc(i); read(f,a[i]); end; close(f); end; BEGIN readfile; for c:=1 to 20 do write(a[c]:3); readln END.
-
03-03-2011, 11:48 AM #7
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 3
Trả lời
À thì ra mình sai chỗ c:=0 to 20 [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG], he he c là kiểu byte.
Hèn gì cứ báo lỗi hoài!
=))=))
-
03-04-2011, 03:52 AM #8
Junior Member
- Ngày tham gia
- Dec 2015
- Bài viết
- 0
^^!. Thanks các bác nhiều lắm vì đã chỉ dẫn cho em. Nhưng còn 1 vấn đề này nữa mong các bác giúp nốt,....... Em hoàn thành đoạn mã này rồi nhưng khi cho chạy thì màn hình nó ra như vầy....
4 5 4 3 52 3 1 2 4
4 1 2 3 4
6 7 8 2 9
4 3 2 5 6
program Trial;
uses crt;
var f:text; i,j:integer; a:array[1..20] of integer;
procedure readfile;
begin
assign(f,'Input.txt');
reset(f);
i:=0;
while not eof(f) do
begin
inc(i);
Read(f,a);
end;
close(f);
end;
{-------------------------------------}
Begin
clrscr;
readfile;
j:=5;
for i:=1 to 20 do
begin
Write(a:3);
if i=j then
begin
j:=j+5;
Writeln;
end;
end;
Readln;
end.
-
03-04-2011, 04:52 AM #9
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 2
Gửi bởi hoangtungoc
-
03-04-2011, 04:58 AM #10
Silver member
- Ngày tham gia
- Nov 2015
- Bài viết
- 5
Gửi bởi FunkyHpio
Xe nâng người Boom lift được Công Ty TNHH Trung thành phân phối chính hãng tại khu vực phía Bắc. Với chi phí đầu tư ban đầu thấp hơn rất nhiều so với các loại xe nâng dầu , xe nâng động cơ loại...
Xe nâng người được trung thành nhập khẩu giá tốt