Hiển thị kết quả từ 1 đến 6 / 6

Chủ đề: Bài tập file đây

  1. #1
    Tham gia
    29-05-2009
    Bài viết
    5
    Like
    0
    Thanked 0 Times in 0 Posts

    Vui lắm ! Bài tập file đây

    Cho dãy số nguyên nhập từ file input, xếp thứ tự tăng dần. Nhập vào số m. Chèn m vào dãy sao cho thứ tự của dãy không thay đổi. (Không được thêm vào rồi xếp lại).
    Vấn đề thứ nhất, chèn số vào 1 file thì chỉ chèn được ở cuối file, làm sao chèn trực tiếp.
    Vẫn đề thứ 2, nếu chuyển dãy từ file ra 1 mảng để chèn thì làm thế quái nào mà biết số phần tử để khai báo, không lẽ để dư dư ra ví dụ a:array[1..100000] of integer;
    Vậy xin kính nhờ quý huynh đệ giúp đỡ.
    Quote Quote

  2. #2
    Tham gia
    06-12-2008
    Bài viết
    36
    Like
    0
    Thanked 0 Times in 0 Posts
    Như sau nè bạn nếu đổi ra mảng thì cần sử dụng lệnh while not eof(<tên file>) inc(n); Với n khởi tạo bằng 0 vậy n sẽ là số phần tử

  3. #3
    Tham gia
    29-05-2009
    Bài viết
    5
    Like
    0
    Thanked 0 Times in 0 Posts
    Vấn đề là khi khai báo, mình sẽ cho máy biết là mảng có bao nhiêu phần tử rồi. Thôi bỏ qua vấn đề đó đi, giờ mình làm vấn đề còn lại là chèn phần tử. Mình biết cách tìm ra vị trí để chèn số nhập từ bàn phím vào rồi nhưng làm sao để chèn phần tử?

  4. #4
    Tham gia
    09-08-2007
    Bài viết
    17
    Like
    0
    Thanked 0 Times in 0 Posts
    Các này theo mình nên sử dụng cách copy file.
    Cứ đọc phần tử trong file input, nếu phần tử đó <= m thì ghi nó ra output, rồi đọc tiếp. Nếu phần tử đó > m thì ghi m vào output, rồi copy hết file input ra output. Sau đó chỉ cần xoá input đi là xong ^^

  5. #5
    Tham gia
    13-12-2008
    Location
    Vũng Tàu
    Bài viết
    393
    Like
    0
    Thanked 2 Times in 2 Posts
    2 cách nì , cách sau dễ hỉu hơn áh , nhưg lỡ code ùi , post lên lun
    Code:
    uses  crt;
    var   a:array[1..100] of integer;
          f:text;
          m,vt,i,n:integer;
    begin
          clrscr;
          assign(f,'bt.inp');
          reset(f);
          while not eof(f) do
          begin
                inc(n);
                read(f,a[n]);
          end;
          close(f);
          write('nhap m ');
          readln(m);
          if a[1]>m then
          begin
                write(m,' ');
                for i:=1 to n do
                      write(a[i],' ');
                readln;
                exit;
          end
          else
                if a[n]<m then vt:=n+1
          else
                for i:=1 to n do
                      if (a[i]<=m) and (a[i+1]>=m) then vt:=i+1;
          for i:=vt+1 to n+1 do
                a[i]:=a[i-1];
          a[vt]:=m;
          for i:=1 to n+1 do
                write(a[i],' ');
          readln;
    end.
    Code:
    uses  crt;
    var   a:array[1..100] of integer;
          f:text;
          m,vt,i,n:integer;
    begin
          clrscr;
          assign(f,'bt.inp');
          reset(f);
          while not eof(f) do
          begin
                inc(n);
                read(f,a[n]);
          end;
          close(f);
          write('nhap m ');
          readln(m);
          if a[1]>m then vt:=0
          else if a[n]<m then vt:=n
          else
              for i:=1 to m do
                  if (a[i]<=m) and (a[i+1]>=m) then vt:=i;
          for i:=1 to vt do
              write(a[i],' ');
          write(m,' ');
          for i:=vt+1 to n do
              write(a[i],' ');
          readln;
    end.

  6. #6
    Tham gia
    02-05-2008
    Bài viết
    50
    Like
    0
    Thanked 0 Times in 0 Posts
    Cảm ơn các bạn đã nhiệt tình giúp đỡ. XIn cảm ơn nhiều.
    Đặc biệt cảm ơn cách của hang_vt.
    Nếu muốn trao đổi thêm, các bạn có thể add nick mình vào
    hung06061995@yahoo.com.vn

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • 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
  •