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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2012, 23:52   #1
SwAAAte83
Пользователь
 
Регистрация: 20.01.2012
Сообщений: 12
По умолчанию Типизированные файлы

Помогите пожалуйста есть задание и программа нужно немного ее подкорректировать в концовке не могу разобраться с последним циклом как...

Разработать программу для заполнения типизированного файла целыми числами в следующем порядке: 10 положительных, 10 отрицательных, 10 положительных, 10 отрицательных. Получить новый файл, компоненты которого идут в таком порядке: 5 положительных, 5 отрицательных и т.д.

Причем компоненты должны быть: первые 5 положительных элементов первой строки в первом файле, потом первые 5 отрицательных элементов второй строки, затем вторые 5 положительных элементов первой строки и наконец вторые 5 отрицательных элементов второй строки.

а получаеться только каждые 5 элементов каждой новой строки... КТО СМОЖЕТ ЧЕМ ТО ПОМОЧЬ ИЛИ ПОСОВЕТОВАТЬ ПИШИТЕ, ОЧЕНЬ БУДУ ПРИЗНАТЕЛЕН ПОМОЩИ..


Код:
Program L_8;
uses crt;
var
f,g : file of integer;
x, i, r,n: integer;
t:integer;

begin
clrscr;
randomize;
assign(f,'D:\files\1.dat');
assign(g,'D:\files\2.dat');
Rewrite (f);
Rewrite(g);
writeln('Первый файл: ');
for i := 1 to 40 do
begin
if ((i>=1) and (i<=10)) or ((i>=20) and (i<=30)) then r:=0;
if ((i>=11) and (i<=20)) or ((i>=31) and (i<=40)) then r:=100;
x:=random(100)-r;
write(x:4);
if i mod 10 = 0 then writeln();
Write(f, x);
end;
i:=1;
reset(f);
while not(Eof(f)) do
begin
if i=1 then
begin
repeat
read(f, t);
write(g,t);
until i<=5;

n:=i;
end
else
begin
if i=n+1 then
write(g,t);
end;
end;

reset(g);
writeln('Второй файл: ');
while not(Eof(g)) do
begin

read (g,t);
write (t:4);
end;

Close(g);
Close(f);
end.

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

Последний раз редактировалось Serge_Bliznykov; 01.02.2012 в 09:48.
SwAAAte83 вне форума Ответить с цитированием
Старый 03.02.2012, 13:30   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не знаю, насколько это ещё актуально.
но, на досуге набросал решение.
без использования дополнительной памяти (вроде буфера или массива), но ничего не обходится бесплатно - приходится платить постоянным "seek"-аньем по исходному файлу. (кстати, решение с двумя массивами по 5 элементов (куда мы читаем временно ненужные элементы, а потом записывает их в выходной файлы было бы куда эффективней, но и немного сложнее алгоритмически).
вот решение с двумя указателями, через которые и идёт чтение исходного файла:
Код:
program L_8;

uses crt;
var
  f, g: file of integer;
  x, i, r : integer;
  Count1 : integer;
  PosPositive, PosNegative : integer;

begin
  clrscr;
  randomize;
  assign(f, 'dfiles1.dat');
  assign(g, 'dfiles2.dat');
  Rewrite(f);
  Rewrite(g);
  writeln('Первый файл: ');
  for i := 1 to 40 do
  begin
    if odd ((i-1) div 10) then r := 0 else r:= 100;
    x := random(100) - r;
    write(x: 4);
    if i mod 10 = 0 then writeln;
    Write(f, x);
  end;

  Close(f);
  reset(f);
  Count1 := FileSize(f);


  {установим позиции для смещения чтения из файла
    положительных и отрицательных чисел}
  PosPositive := 0;
  PosNegative := 10;

  WriteLn('Формируем второй файл из первого');
  for i:=1 to Count1 do begin
    { Write(' читаем элемент i=',i); }
    if not odd( (i-1) div 5 ) then begin
      { Write(' положительные, по смещению ',PosPositive); }
      Seek(f, PosPositive);
      Read(f, x);
      Write(g, x);
      if PosPositive mod 10 = 9 then Inc(PosPositive, 11)
      else Inc(PosPositive);
    end
    else begin
      { Write(' отрицательные, по смещению ',PosNegative); }
      Seek(f, PosNegative);
      Read(f, x);
      Write(g, x);
      if PosNegative mod 10 = 9 then Inc(PosNegative, 11)
      else Inc(PosNegative);
    end;
    { WriteLn; }
  end;
  Close(f);
  Close(g);

  {прочитаем и выведем содержимое второго файла на экран}
  writeln('Второй файл: ');
  Reset(g);
  for i:=1 to FileSize(g) do
  begin
    Read(g, x);
    Write(x:4);
    if i mod 5 = 0 then writeln;
  end;
  Close(g);
  Writeln;
  Readln
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.02.2012, 23:38   #3
SwAAAte83
Пользователь
 
Регистрация: 20.01.2012
Сообщений: 12
По умолчанию

спасибо тебе большое и ты не может не поверишь но точно тем же самым способом и сделал прогу))) ее уже сдал осталось две проги одна ниже висит, и еще одна: ты случайно с модулем дос не поможешь???

Последний раз редактировалось SwAAAte83; 03.02.2012 в 23:54.
SwAAAte83 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень нужно сделать задачу в Delphi(Типизированные файлы. файлы записи) Vitalik1 Помощь студентам 1 16.12.2011 10:38
Типизированные файлы Lev.F Помощь студентам 5 16.06.2010 16:17
Типизированные файлы surf135 Помощь студентам 1 14.06.2010 11:55
Файлы данных.Типизированные файлы. вылка Помощь студентам 6 17.05.2010 15:42
типизированные файлы felmor Паскаль, Turbo Pascal, PascalABC.NET 0 15.05.2009 09:49