Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Паскаль. Файл  (Прочитано 5755 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Viwwna
Интересующийся

ru
Offline Offline

« : 27-06-2012 12:58 » 

Здравствуйте! Задание передо мною такое:  есть два упорядоченных файла целых чисел разной длины, необходимо слить в один файл, чтобы в выходном файле числа были упорядочены. Одинаковые числа включать в выходной файл один раз.
То, что  составлено:
Код: (Pascal)
uses crt;
var f,f1:text;
    a,b:array[1..100] of integer;
    c:array[1..200] of integer;
    i,j,temp:integer;

begin
clrscr;
assign(f,'c:\ONE1.txt');
rewrite(f);
for i:=1 to 100 do
 a[i]:=random(100);
for i:=2 to 100 do
 for j:=100 downto i do
   if a[j]<a[j-1] then begin
                        temp:=a[j];
                        a[j]:=a[j-1];
                        a[j-1]:=temp;
                       end;
for i:=1 to 100 do
  writeln(f,a[i]);
  close(f);
assign(f,'c:\ONE2.txt');
rewrite(f);
for i:=1 to 100 do
 a[i]:=random(100);
for i:=2 to 100 do
 for j:=100 downto i do
   if a[j]<a[j-1] then begin
                        temp:=a[j];
                        a[j]:=a[j-1];
                        a[j-1]:=temp;
                       end;
for i:=1 to 100 do
  writeln(f,a[i]);
  close(f);
 assign(f1,'c:\ONE3.txt');
 rewrite(f1);
 assign(f,'c:\ONE1.txt');
 reset(f);
 while not eof(f) do
  begin
   readln(f,temp);
   writeln(f1,temp);
  end;
 close(f);
  assign(f,'c:\ONE2.txt');
 reset(f);
 while not eof(f) do
  begin
   readln(f,temp);
   writeln(f1,temp);
  end;
 close(f);
 close(f1);
 assign(f,'c:\ONE3.txt');
 reset(f);
 i:=0;
 while not(eof(f)) do
  begin
   inc(i);
   readln(f,c[i]);
  end;
  close(f);
for i:=2 to 200 do
 for j:=200 downto i do
   if c[j]>c[j-1] then begin
                        temp:=c[j];
                        c[j]:=c[j-1];
                        c[j-1]:=temp;
                       end;
 assign(f,'c:\ONE3.txt');
 rewrite(f);
 for i:=1 to 200 do
  writeln(f,c[i]);
 close(f);
end.

Не знаю как одинаковые числа включать в выходной файл один раз.... Спасибо, за ответ/совет
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 27-06-2012 13:17 » 

viwwna, а слабо без массивов сделать?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Viwwna
Интересующийся

ru
Offline Offline

« Ответ #2 : 27-06-2012 13:20 » 

Dimka, Слабо (абсолютно серьезно говорю).

Добавлено через 1 минуту и 30 секунд:
Тему изучаю, делаю.... пока тяжело мне по-другому. Надеюсь, что  научусь достойно писать.
« Последнее редактирование: 27-06-2012 13:22 от viwwna » Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 27-06-2012 16:28 » 

viwwna, сортировки проходили? Тут есть один простой и известный приём, который отвечает на димкин вопрос, и позволяет без лишних расходов просто записать в выходной файл всё нужное.

Что касается однократного включения - то попробуй сначала сделать это с одним файлом. Смотри: все значения упорядочены, а значит, одинаковые числа идут подряд, и мы можем проверять, является ли очередное число повторением предыдущего. Соответственно, можем просто игнорировать повторные вхождения.
Записан
Dmitry
Помогающий

ru
Offline Offline

« Ответ #4 : 27-06-2012 16:46 » new

Считываешь из обоих файлов первые числа (A и B), сравниваешь, меньшее из них (например, A) записываешь в свой файл. Из файла, из которого было взято это число, берешь следующее число (это А, B остаётся преждним), опять сравниваешь. И т.д. На случай равенства - считываешь из обоих файлов. Думай.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines