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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2011, 23:11   #1
masterlomaster
Форумчанин
 
Аватар для masterlomaster
 
Регистрация: 21.10.2009
Сообщений: 114
По умолчанию Паскаль(файлы).

Например:
Создаем два файла (первый и второй) на диске С:\
Нужно чтобы во втором файле сохранялись элементы первого файла (без повторений).
Не подскажите алгоритм?


P.S Времени просто не хватает, задают то чего еше на лекциях не разобрали, успел разобрать ввод файла, как вывести. Из-за не хватки практики в этой области ничего в голову не лезет.
masterlomaster вне форума Ответить с цитированием
Старый 09.03.2011, 23:35   #2
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

какого типа элементы в файлах?
unbanned вне форума Ответить с цитированием
Старый 09.03.2011, 23:43   #3
masterlomaster
Форумчанин
 
Аватар для masterlomaster
 
Регистрация: 21.10.2009
Сообщений: 114
По умолчанию аааа

тип string
masterlomaster вне форума Ответить с цитированием
Старый 09.03.2011, 23:44   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

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


Если же файл в памяти не помещается, то тут можно предложить тупейший (но крайне малоэффективный в плане производительности) способ — берём очередной элемент входного файла - перебираем ВСЕ элементы от 1 до последнего (пропуская элемент с текущим индексом). Если нашли такой - то игнорируем (и прерываем цикл проверки, разумеется). Если не нашли - пишем в выходной файл.

p.s. я тут пишу больше, чем будет строчек в программном коде...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.03.2011, 23:54   #5
masterlomaster
Форумчанин
 
Аватар для masterlomaster
 
Регистрация: 21.10.2009
Сообщений: 114
По умолчанию ааа

Переходим в режим чтения и просто организовываем цикл? Или есть какая та процедура(функция) просмотра файла от начала и до конца?

Последний раз редактировалось masterlomaster; 09.03.2011 в 23:57.
masterlomaster вне форума Ответить с цитированием
Старый 10.03.2011, 00:06   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Переходим в режим чтения и просто организовываем цикл?
точно так.


Цитата:
тип string
текстовые файлы?!
у.. поздравляю, это худший вариант из всех возможных
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.03.2011, 00:16   #7
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

Код:
var
  f1, f2: text;
  i, j, w: integer;
  s: array [1..10] of string;

begin
  assign(f1, 'C:\1.txt');
  rewrite(f1);
  for i := 1 to 10 do
    writeln(f1, random(10));
  close(f1);
  reset(f1);
  for i := 1 to 10 do
    readln(f1, s[i]);
  close(f1);
  assign(f2, 'C:\2.txt');
  rewrite(f2);
  for i := 1 to 10 do 
  begin
    w := 0;
    for j := 1 to 10 do 
      if (s[i] = s[j]) and (i <> j) then 
        w := 1;
    if w = 0 then writeln(f2, s[i]);
  end;
  close(f2);
end.
не совсем рационально, но под условие подходит))
unbanned вне форума Ответить с цитированием
Старый 10.03.2011, 00:35   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я бы добавил прерывание цикла, если совпадение нашлось:
Цитата:
Код:
for j := 1 to 10 do 
      if (i <> j) and (s[i] = s[j]) then 
      begin
        w := 1;
        break;
      end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.03.2011, 00:44   #9
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

еще можно переменную w сделать логической... и заполнение файла не только числами, а символами...
Код:
  assign(f1, 'C:\1.txt');
  rewrite(f1);
  for i := 1 to 10 do 
  begin
    for j := 1 to 5 do
      write(f1, chr(1 + random(255)));
    writeln(f1, #13);
  end;
  close(f1);
unbanned вне форума Ответить с цитированием
Старый 10.03.2011, 01:07   #10
masterlomaster
Форумчанин
 
Аватар для masterlomaster
 
Регистрация: 21.10.2009
Сообщений: 114
По умолчанию аааа

Всем спасибо.
masterlomaster вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
паскаль(файлы) masterlomaster Помощь студентам 1 03.03.2011 16:48
Файлы.паскаль radon228 Помощь студентам 1 03.06.2010 19:27
Файлы паскаль p4serhiy Помощь студентам 1 17.05.2010 20:10