profile
Опубликовано 5 лет назад по предмету Информатика от Anasbod

Помогите пожалуйста с программой
Создать числовой файл F.Получить файл G, в который записать сначала положительные,затем отрицательные и,наконец,нулевые компоненты файла F.Файлы F,G распечать
Программу
и по возможности блок схему
буду очень благодарна

  1. Ответ
    Ответ дан Аккаунт удален
    // PascalABC.NET 3.1, сборка 1204 от 24.03.2016
    begin
      var F,G:file of integer;
      Assign(F,'FFile.dat'); Rewrite(F);
      for var i:=1 to 30 do Write(F,Random(-20,20));
      // Файл F создан и заполнен
      Assign(G,'GFile.dat'); Rewrite(G);
      F.Seek(0);
      var e:integer;
      Print('F:');
      while not F.Eof do begin
        Read(F,e); Print(e);
        if e>0 then Write(G,e)
        end;
      F.Seek(0);
      while not F.Eof do begin
        Read(F,e);
        if e<0 then Write(G,e)
        end;
      F.Seek(0);
      while not F.Eof do begin
        Read(F,e);
        if e=0 then Write(G,e)
        end;
      F.Close;
      Writeln;
      Print('G:');
      G.Seek(0);
      while not G.Eof do begin
        Read(G,e); Print(e)
        end;  
      G.Close
    end.

    Тестовое решение:
    F: -14 15 -16 0 7 0 18 19 -12 -10 6 15 -19 -14 -15 -1 -6 -4 -20 12 10 4 3 16 -14 -20 3 10 -13 -16
    G: 15 7 18 19 6 15 12 10 4 3 16 3 10 -14 -16 -12 -10 -19 -14 -15 -1 -6 -4 -20 -14 -20 -13 -16 0 0

    Данное решение неоптимально по времени, поскольку файл читается трижды. Можно сделать иной вариант, читая данные за один проход и помещая в две вспомогательные структуры памяти отрицательные и нулевые элементы.

    // PascalABC.NET 3.1, сборка 1204 от 24.03.2016
    begin
      var F,G:file of integer;
      Assign(F,'FFile.dat'); Rewrite(F);
      for var i:=1 to 30 do Write(F,Random(-20,20));
      // Файл F создан и заполнен
      Assign(G,'GFile.dat'); Rewrite(G);
      var n:=F.FileSize;
      var neg,zer:array of integer;
      SetLength(neg,n); SetLength(zer,n);
      F.Seek(0);
      var e:integer;
      var ineg:=0;
      var izer:=0;
      Print('F:');
      while not F.Eof do begin
        Read(F,e); Print(e);
        if e>0 then Write(G,e)
        else
          if e<0 then begin neg[ineg]:=e; Inc(ineg) end
          else begin zer[izer]:=e; Inc(izer) end
        end;
      F.Close;
      Writeln;
      SetLength(neg,ineg);
      foreach e in neg do Write(G,e);
      SetLength(zer,izer);
      foreach e in zer do Write(G,e);
      Print('G:');
      G.Seek(0);
      while not G.Eof do begin
        Read(G,e); Print(e)
        end; 
      G.Close
    end.

    Тестовое решение:
    F: 7 5 -14 6 -11 -9 5 -1 5 -5 -7 -1 4 -20 17 -19 0 -3 0 6 20 1 -2 -18 9 20 0 -2 3 -13
    G: 7 5 6 5 5 4 17 6 20 1 9 20 3 -14 -11 -9 -1 -5 -7 -1 -20 -19 -3 -2 -18 -2 -13 0 0 0
    1. Ответ
      Ответ дан Аккаунт удален
      Блок-схему рисовать не стану, извините - слишком она большая тут будет.
Самые новые вопросы