GAECHKA
Твоя помощница в решении задач

Используя вспомогательный файл, переписать в новый файл компоненты исходного

Задание:
В файле целых чисел количество отрицательных и положительных чисел одинаково и нет ни одного нулевого элемента. Используя вспомогательный файл, переписать в новый файл компоненты исходного так, чтобы:
а) не было двух соседних чисел с одинаковыми знаками;
б)сначала шли положительные, а затем отрицательные числа;
в) если число компонент исходного файла кратно 4, то в результирующем файле должны следовать 2 положительных, 2 отрицательных, 2 положительных и т. д.

Добавлено через 1 минуту
с пунктом а справилась, остальное не могу

Добавлено через 1 минуту
Мой код

Program Lb17;
uses crt;
var f,f1,f2:file of integer;
    s:integer;
   i ,n,k:longint;
    z,x,c:string[10];
begin
clrscr;
writeln('Vvedite imena 3 filov');
readln(z);
readln(x);
readln(c);
assign(f,z+'.dat');
assign(f1,x+'.dat');
assign(f2,c+'.dat');
rewrite(f);
writeln('Vvedite ravnoe kolichestvo polojitelnix i otrisatelnix chisel');
writeln('Okonchanie vvoda 0');
repeat
readln(s);
if s0 then write(f,s);
until s=0;
reset(f);
writeln('V vile f zapisano:');
while not eof(f) do
 begin
  read(f,s);
  write(s,' ');
 end;
writeln;
reset(f);
rewrite(f1);
rewrite(f2);
while not eof(f) do
 begin
  read(f,s);
  if s>0 then write(f1,s)
  else write(f2,s);
 end;
close(f);
writeln('V file f1 zapisano:');
reset(f1);
while not eof(f1) do
 begin
  read(f1,s);
  write(s,' ');
 end;
close(f1);
writeln;
writeln('V file f2 zapisano:');
reset(f2);
while not eof(f2) do
 begin
  read(f2,s);
  write(s,' ');
 end;
close(f2);
rewrite(f);
seek(f,0);
truncate(f);
close(f);
reset(f1);
reset(f2);
rewrite(f);
   n:=1;
   k:=0;
  while not eof(f1) do
   begin
   seek(f,k);
    read(f1,s);
    write(f,s);
    k:=k+2;
    n:=k;
    seek(f,n);
    end;
    n:=1;
 
  while not eof(f2) do
    begin
      seek(f,n);
     read(f2,s);
     write(f,s);
     k:=n+2;
     n:=k;
     seek(f,n);
     end;
     k:=filesize(f);
 
     writeln('k=',k);
  while not eof(f1) do
  begin
    seek(f,k);
    read(f1,s);
    write(f,s);
    end;
 
    while not eof(f2) do
  begin
    seek(f,k);
    read(f2,s);
    write(f,s);
    end;
 k:=filesize(f);
 n:=k mod 4;
 if k=0 then begin
   read(f1,s);
   write(f,s);
   read(f1,s);
   write(f,s);
   read(f2,s);
   write(f,s);
   read(f2,s);
   write(f,s);
   end;
 
 
  close(f);
  writeln('Zapisano zadanie a:');
 
  reset(f);
while not eof(f) do
 begin
  read(f,s);
  write(s,' ');
 end;
readln;
end.
0
вопрос задан

Источник


17 ответов
Элис МК, давайте я вам пример подам,а дальше вы его под свои нужды переделаете?
А это чем не подошло?
http://www.cyberforum.ru/turbo-pascal/thread2426214.htm
А это чем не подошло?
http://www.cyberforum.ru/turbo-pascal/thread2426214.htm
Ссылка не открывается. Выдает ошибку

Добавлено через 7 секунд
А это чем не подошло?
http://www.cyberforum.ru/turbo-pascal/thread2426214.htm
Ссылка не открывается. Выдает ошибку

Добавлено через 52 секунды
Элис МК, давайте я вам пример подам,а дальше вы его под свои нужды переделаете?
Давайте)))

Добавлено через 1 минуту
Сообщение от Puporev
А это чем не подошло?
http://www.cyberforum.ru/turbo-pascal/thread2426214.htm
Ссылка не открывается. Выдает ошибку
А нет, все в порядке
Элис МК, мне делать,или нет?)
Элис МК, мне делать,или нет?)
дааааааааааааааааааааааааааааааааааааааааа, если не трудно))
Пс, Только у меня не списывай, а то ему опять не понравится.
Пс, Только у меня не списывай, а то ему опять не понравится.
Да мне понравился ваш код! Именно благодаря ему я и смогла выполнить первую часть задания, а вот дальше засада. В своем коде я опиралась на тот, что вы мне предоставили. Спасибо большое, кстати.
Элис МК, я напишу,если смогу,то сегодня,постараюсь пункт б сделать)

Добавлено через 28 секунд
Puporev, хорошо)
Элис МК, я напишу,если смогу,то сегодня,постараюсь пункт б сделать)
хорошо. Спасибо
Элис МК, я очень сильно извиняюсь,но у меня не получается.
Никогда не работал с типизированными файлами)
В вашем коде только сейчас заметил,что у вас бинарные файлы,простите...

Добавлено через 34 секунды
Puporev, а коды .NET могут подойти к турбо паскалю?
Элис МК, я очень сильно извиняюсь,но у меня не получается.
Никогда не работал с типизированными файлами)
В вашем коде только сейчас заметил,что у вас бинарные файлы,простите...
Ничего страшного. Буду и дальше пытаться) Спасибо за старания

Добавлено через 1 минуту
Puporev, а коды .NET могут подойти к турбо паскалю?
Если вопрос был адресован мне, то я честное слово не знаю. Я новичок, и только осваиваю программирование.
Элис МК,
var
  f, f1: file of integer;
  i, l, i1: integer;
  i2: array[1..10] of integer;
 
begin
  assign(f, 'input.dat');
  assign(f1, 'output.dat');
  reset(f);
  i := 1;
  i1 := 1;
  repeat
    read(f, i2[i]);
    inc(i);
    inc(i1);
  until not EOF(f);
  close(f);
  rewrite(f1);
  i := 1;
  for i := 1 to i1 - 1 do
  begin
    if i2[i] > 0
    then begin
      write(f1, i2[i]);
    end;
  end;
  for i := 1 to i1 do
  begin
    if i2[i] 0
    then begin
      writeln(f1, i2[i]);
    end;
  end;
  close(f1);
  for i := 1 to i1 do
  begin
    writeln(i2[i]);
  end;
  writeln(i1);
end.
возможно чем-то и поможет)
пойду учить турбо-паскаль)

Добавлено через 33 секунды
Элис МК, если есть вопросы по коду,обращайтесь,постараюсь помочь)
Элис МК, Я кому-то писал программу по пункту в), думал что Вам.
//2 положительных 2 отрицательных
var f,g,h:file of integer;
    n,i,j,k,a,kp,ko:integer;
begin
repeat
write('Введите натуральное число, кратное 4 n=');
readln(n);
until(n>0)and(n mod 4=0);
//создадим файл по условию
assign(f,'filef');
rewrite(f);
randomize;
kp:=0;//положительные
ko:=0;//отрицательные
for i:=1 to n do
 begin
  repeat
  a:=-10+random(21);
  until a0;
  if a>0 then inc(kp) else inc(ko);
  if ((kp>n div 2)and(a>0))or((ko>n div 2)and(a0)) then a:=-a;
  write(f,a);
 end;
reset(f);
writeln('Содержание файла F');
for i:=0 to filesize(f)-1 do
 begin
  read(f,a);
  write(a:4);
 end;
writeln;
reset(f);
//создаем вспомогательный файл с отрицательными числами
assign(h,'fileH');
rewrite(h);
while not eof(f) do
 begin
  read(f,a);
  if a0 then write(h,a);
 end;
reset(h);
writeln('Файл H');
 while not eof(h) do
  begin
   read(h,a);
   write(a:4);
  end;
writeln;
//создадим итоговый файл
assign(g,'fileG');
rewrite(g);
reset(f);
reset(h);
i:=0;
j:=0;
while not eof(f) do
 begin
  read(f,a);//2 положительных числа из файла f
  if a>0 then
   begin
    write(g,a);
    inc(i);
    if i=2 then
     begin
      i:=0;
      for k:=j to j+1 do //2 отрицательных числа из файла h
       begin
        seek(h,k);
        read(h,a);
        write(g,a);
       end;
      j:=j+2;
     end;
   end;
  end;
 close(f);
 close(h);
 erase(h); //уничтожим вспомогательный файл
 reset(g);
 writeln('Файл G');
 while not eof(g) do
  begin
   read(g,a);
   write(a:4);
  end;
close(g);
end.
Пункт б) также только по 1 числу, а не по 2.
Если вопрос был адресован мне, то я честное слово не знаю. Я новичок, и только осваиваю программирование.
нет,вам)

Добавлено через 11 минут
Ой,ошибся,не вам, а ему Puporev
Пс, В Паскаль АВС.net можно писать в стиле Турбо Паскаль.
Puporev, Т.е. Pascal ABC .NET работает как универсальный компилятор для любого паскаля?
Ну не совсем, чего-то нет как в Турбо, графика вообще разная.