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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2012, 19:51   #1
rootkot
 
Регистрация: 10.04.2012
Сообщений: 4
Вопрос Обойтись без массива >Создать новый файл из чисел которые встречаются во всех трех файлах

Всем добрый вечер!
Задача создать три файла А,В,С из чисел. Потом создать новый файл D из чисел которые встречаются во всех трех файлах. Числа в файле D не должны повторяться.
Как подправить код так что-бы обойтись без массивов.

Код:
uses crt;
var a,b,c,d:file of integer; p,q:array [1..100] of integer; i,j,n,r,m:integer; flg: boolean;

procedure show_file(f:file of integer);
var n:integer;
begin
     reset(f);
     while not eof(f) do
     begin
          read(f,n);
          write(n,' ');
     end;
     close(f);
     writeln;
end;

begin
     clrscr;
     randomize;
     assign(a,'a.dat');
     assign(b,'b.dat');
     assign(c,'c.dat');
     assign(d,'d.dat');
     rewrite(a);
     for i:=1 to 10 do write(a,random(10));
     close(a);
     rewrite(b);
     for i:=1 to 7 do write(b,random(15));
     close(b);
     rewrite(c);
     for i:=1 to 13 do write(c,random(10));
     close(c);
     writeln('Содержимое файла a.dat:');
     show_file(a);
     writeln('Содержимое файла b.dat:');
     show_file(b);
     writeln('Содержимое файла c.dat:');
     show_file(c);
     i:=1;
     reset(a);
     while not eof(a) do
     begin
          read(a,p[i]);
          inc(i);
     end;
     n:=i-1;
     close(a);
     j:=1;
     reset(b);
     while not eof(b) do
     begin
          read(b,r);
          for i:=1 to n do
          begin
               if p[i]=r then
               begin
                    flg:=false;
                    for m:=1 to j-1 do if q[m]=r then flg:=true;
                    if not flg then q[j]:=r else dec(j);
               end
               else j:=j-1;
               inc(j);
          end;
     end;
     n:=j-1;
     close(b);
     j:=1;
     reset(c);
     while not eof(c) do
     begin
          read(c,r);
          for i:=1 to n do
          begin
               if q[i]=r then
               begin
                    flg:=false;
                    for m:=1 to j-1 do if p[m]=r then flg:=true;
                    if not flg then p[j]:=r else dec(j);
               end
               else j:=j-1;
               inc(j);
          end;
     end;
     n:=j-1;
     close(c);
     rewrite(d);
     for i:=1 to n do write(d,p[i]);
     close(d);
     writeln('Содержимое файла d.dat:');
     show_file(d);
end.

Последний раз редактировалось rootkot; 04.06.2012 в 19:52. Причина: Подправил тему
rootkot вне форума Ответить с цитированием
Старый 05.06.2012, 11:02   #2
Paster Fob
Форумчанин
 
Аватар для Paster Fob
 
Регистрация: 06.02.2011
Сообщений: 105
По умолчанию

примените множества.
Paster Fob вне форума Ответить с цитированием
Старый 05.06.2012, 11:04   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Как подправить код так что-бы обойтись без массивов.
в связи с тем, что в задании не сказано, что числа в файлах ограничены каким-то диапазоном, и что числа в этих файлах как-то упорядочены, то мне представляется только один вариант решения без использования чтения всех чисел в память (в т.ч. динамические структуры):
типизированные файлы являются файлами ПРЯМОГО доступа, поэтому обращение к массивам вполне можно заменить позиционированием в нужном файле и чтением нужного элемента!

т.е. вместо p[i] (в данном коде в массиве P находились элементы файла A) можно написать:
Код:
  seek(a, i-1);
  Read(a, elementA);
так и с другими элементами других файлов.


Возникает только один вопрос - а ЗАЧЕМ отказываться от массивов?!!
Для того, чтобы программу, выполняющую X чтений превратить в монстра, выполняющего X^3 позиционированний в файлах и X^3 чтений? Чтобы программа работала подольше и получше убивала жесткий диск?!!! не понимаю!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
определить количество четных чисел и количество нечетных чисел массива, которые вводятся в МЕМО, вывести в поле компонента Edit. Pyxy Помощь студентам 2 21.03.2012 23:24
программа нахождения всех чисел Армстронга, состоящих из трех цифр Татьана Помощь студентам 3 17.09.2011 14:23
Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех локальных максимумов в порядке возрастания zzz6 Помощь студентам 1 04.07.2011 12:59
Переписать в новый файл все слова, которые содержат только буквы латин.алф. volchica Паскаль, Turbo Pascal, PascalABC.NET 3 18.02.2011 16:22
цикл for to do, или как отобразить сумму всех чётных трёхзначных чисел которые делятся на 7 (Delphi 6) Lorden Помощь студентам 9 23.12.2008 18:50