Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 14
  1. #1
    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>

  2. #2
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Trích dẫn Gửi bởi FunkyHpio
    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>
    Phần đọc:
    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;
    f: biến tệp
    a: mảng một chiều
    n: số lượng phần tử

  3. #3
    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?

  4. #4
    Ngày tham gia
    Nov 2015
    Bài viết
    8
    Trích dẫn Gửi bởi hoangtungoc
    Ủ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?

    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!

  5. #5
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Trả lời

    Trích dẫn Gửi bởi Shiro
    Phần đọc:
    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;
    f: biến tệp
    a: mảng một chiều
    n: số lượng phần tử
    Hình như bị sai rồi, mình đã chạy thử, máy báo lỗi "exitcode = 201".
    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.
    mình thêm vào phần cho nó hiện dữ liệu đã đọc ra, nhưng bị lỗi... Chả biết nữa, mình ko rành về đọc và ghi dữ lịu vào tệp.[IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG][IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG][IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]. bó tay ba zụ này![IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

  6. #6
    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.

  7. #7
    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!
    =))=))

  8. #8
    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
    Dòng đầu bị thụt vào trong, có cách nào khắc phục không? Em dùng Turbo Pascal 7.0.
    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.


  9. #9
    Ngày tham gia
    Aug 2015
    Bài viết
    2
    Trích dẫn Gửi bởi hoangtungoc
    À 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!
    =))=))
    Bạn biết sao nó báo lỗi không! Tại vì bạn khai báo mảng a chỉ 20 phần tử mà bạn cho chạy tới 21 nên nó báo là đúng. (vì chạy từ 0)

  10. #10
    Ngày tham gia
    Nov 2015
    Bài viết
    5
    Trích dẫn Gửi bởi FunkyHpio
    ^^!. 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....
    Dòng đầu bị thụt vào trong, có cách nào khắc phục không? Em dùng Turbo Pascal 7.0.
    Để cho bạn hiểu thấu đáo thì mình khuyên bạn nên nói lên ý tưởng cúa bạn trong đoạn code trên. Sau đó mình có lời giải thích và chỉnh sửa sau.

Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •