Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2014, 13:11   #1
Dekker11
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 11
По умолчанию Переписать числа из одного файла в другой, чередуя отрицательные и положительные (Паскаль)

Программа должна брать числа из одного файла и записывать их в другой, чередуя отрицательные и положительные. Не могу понять что не правильно. Сейчас числа просто копируются из одного файла в другой
Код:
var f, g : file of integer; 
n : integer; 

begin 
assign(f, 'c:\f.txt');
assign(g, 'c:\g.txt');
rewrite(g);
reset(f);

while not eof(f) do begin read(f, n);
if n > 0 then write(g, n);
end;

close(f);
reset(f);

while not eof(f) do begin read(f, n);
if n < 0 then write(g, n);
end;

close(f);
close(g); 
end.



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 17.12.2014 в 13:57.
Dekker11 вне форума Ответить с цитированием
Старый 17.12.2014, 13:51   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну... Я бы наверное создал два динамических массива. Считал в них файлы таким образом чтоб в первый массив попадали только положительные, во второй только отрицательные.
Потом поочередно вывел бы в файл эти два массива.
как это проще обьяснить не знаю...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.12.2014, 13:58   #3
Dekker11
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну... Я бы наверное создал два динамических массива. Считал в них файлы таким образом чтоб в первый массив попадали только положительные, во второй только отрицательные.
Потом поочередно вывел бы в файл эти два массива.
как это проще обьяснить не знаю...
Как бы вы мне не объясняли, я не пойму) Мне бы вот эту подправить...
Dekker11 вне форума Ответить с цитированием
Старый 17.12.2014, 14:04   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
и записывать их в другой, чередуя отрицательные и положительные.
задача далеко не так проста, как кажется!
я бы поступил так - прочитал входной файл в массив, из него и брал попеременно отрицательные/положительные.

ну и ещё, что ДОЛЖНА делать программа, если, например, во входном файле такие данные
1 2 3 -5 10 20 30 40 50 -2

или, наоборот, если во входном файле:
-2 -1 -7 -1 -9 1

как будет выглядеть выходной файл?


Цитата:
Мне бы вот эту подправить...
вашу подправить нельзя...
с обычным массивом можно сделать. Сделать?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.12.2014, 14:06   #5
Dekker11
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
задача далеко не так проста, как кажется!
я бы поступил так - прочитал входной файл в массив, из него и брал попеременно отрицательные/положительные.

ну и ещё, что ДОЛЖНА делать программа, если, например, во входном файле такие данные
1 2 3 -5 10 20 30 40 50 -2

или, наоборот, если во входном файле:
-2 -1 -7 -1 -9 1

как будет выглядеть выходной файл?



вашу подправить нельзя...
с обычным массивом можно сделать. Сделать?
Да, пожалуйста
Dekker11 вне форума Ответить с цитированием
Старый 17.12.2014, 14:31   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

получите и распишитесь:

Код:
const MaxArraySize = 500;
  mtest : array[1..10] of integer = (1, 2, 3, -5, 10, -3, -19, 40, 50, -2);
var 
  f, g: file of integer;
  masPos, masNeg : array[1..MaxArraySize] of integer;
  indexPos, indexNeg, kPos, kNeg, a, i : integer;
  CurPos : boolean;

begin
  assign(f, 'c:\f.bin');
  {создадим файл для отладки }
     rewrite(f);   for i:=1 to 10 do Write(f, mtest[i]); Close(f);
  reset(f);
  WriteLn('First file content: '); Reset(f);
  while not eof(f) do begin read(f, a);  Write(a,' ');  end;
  WriteLn;   WriteLn;

  {основной цикл }

  {сначала читаем файл в два массива}
  reset(f);
  indexPos := 0; indexNeg := 0;
  while not eof(f) do begin 
    read(f, a);
    if a >= 0 then 
      if indexPos>=MaxArraySize then WriteLn('Количество положительных слишком велико')
      else begin 
        Inc( indexPos );
        masPos[ indexPos ] := a
      end
    else
      if indexNeg>=MaxArraySize then WriteLn('Количество отрицательных слишком велико')
      else begin
        Inc( indexNeg );
        masNeg[ indexNeg ] := a
      end;
  end;
  close(f);

  {а теперь массивы пишем во второй файл чередуя..}
  assign(g, 'c:\g.bin');
  rewrite(g);

  kPos := 1; kNeg := 1;
  CurPos := true;  {сначала будем писать положительные}
  while (kPos<=indexPos) or (kNeg<=indexNeg)  do begin
    if CurPos then
      begin
        if kPos<= indexPos then begin
          Write(g, masPos[ kPos ]);
          inc(kPos);
        end;
      end
    else {теперь пишем отрицательные}
      begin
        if kNeg<= indexNeg then begin
          Write(g, masNeg[ kNeg ]);
          inc(kNeg);
        end;
      end;
    CurPos := Not CurPos;
  end;
  Close(g);


  WriteLn('Write to new file completed!');

  WriteLn('Second file content: ');
  Reset(g);

  while not eof(g) do begin read(g, a);
    Write(a,' ');
  end;
  WriteLn;   WriteLn;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.12.2014, 14:35   #7
Dekker11
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
получите и распишитесь:

Код:
const MaxArraySize = 500;
  mtest : array[1..10] of integer = (1, 2, 3, -5, 10, -3, -19, 40, 50, -2);
var 
  f, g: file of integer;
  masPos, masNeg : array[1..MaxArraySize] of integer;
  indexPos, indexNeg, kPos, kNeg, a, i : integer;
  CurPos : boolean;

begin
  assign(f, 'c:\f.bin');
  {создадим файл для отладки }
     rewrite(f);   for i:=1 to 10 do Write(f, mtest[i]); Close(f);
  reset(f);
  WriteLn('First file content: '); Reset(f);
  while not eof(f) do begin read(f, a);  Write(a,' ');  end;
  WriteLn;   WriteLn;

  {основной цикл }

  {сначала читаем файл в два массива}
  reset(f);
  indexPos := 0; indexNeg := 0;
  while not eof(f) do begin 
    read(f, a);
    if a >= 0 then 
      if indexPos>=MaxArraySize then WriteLn('Количество положительных слишком велико')
      else begin 
        Inc( indexPos );
        masPos[ indexPos ] := a
      end
    else
      if indexNeg>=MaxArraySize then WriteLn('Количество отрицательных слишком велико')
      else begin
        Inc( indexNeg );
        masNeg[ indexNeg ] := a
      end;
  end;
  close(f);

  {а теперь массивы пишем во второй файл чередуя..}
  assign(g, 'c:\g.bin');
  rewrite(g);

  kPos := 1; kNeg := 1;
  CurPos := true;  {сначала будем писать положительные}
  while (kPos<=indexPos) or (kNeg<=indexNeg)  do begin
    if CurPos then
      begin
        if kPos<= indexPos then begin
          Write(g, masPos[ kPos ]);
          inc(kPos);
        end;
      end
    else {теперь пишем отрицательные}
      begin
        if kNeg<= indexNeg then begin
          Write(g, masNeg[ kNeg ]);
          inc(kNeg);
        end;
      end;
    CurPos := Not CurPos;
  end;
  Close(g);


  WriteLn('Write to new file completed!');

  WriteLn('Second file content: ');
  Reset(g);

  while not eof(g) do begin read(g, a);
    Write(a,' ');
  end;
  WriteLn;   WriteLn;
end.
Благодарю)
Dekker11 вне форума Ответить с цитированием
Старый 17.12.2014, 14:45   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не за что.
если будут вопросы - задавайте, отвечу...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана матрица, преобразовать так, чтобы в начале были положительные числа, а потом отрицательные(с сохранением порядка) Non_stop Общие вопросы C/C++ 2 23.11.2014 18:01
Random. отрицательные и положительные числа Seran4ek Общие вопросы Delphi 10 18.03.2014 22:16
все отрицательные числа и нули, затем положительные максим2012 Паскаль, Turbo Pascal, PascalABC.NET 8 25.10.2012 14:26
С генерировать одновременно как отрицательные так и положительные числа в массиве. Leshii Паскаль, Turbo Pascal, PascalABC.NET 0 13.11.2011 22:31
Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W leha_demi Помощь студентам 2 24.09.2011 18:12