Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с файлами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Аlex
Слить в один два упорядоченных по возрастающей файла целых чисел. Файл результат тоже должен быть упорядочен по возрасающей.

Я напсиал прогу,но прблема в том что если в первом файле числа больше чем во втором,то файл-результат не получается упорядоченный по возрастающей.(Т.Е если в певом файле написать 5 6 7 8, а во втором 1 2 3 4, то файл-результат не получится упорядоченным по возрастающй)
Помогите исправить плз..
Вот что я написал:


Var
   f1:file of char;
   f2:file of char;
   f3:file of char;
   x:char;
   mas:array[1..100] of char;
   i,k,n,j:integer;
   new:char;
begin
 assign(f1,'C:\1.pas');
   reset(f1);
     assign(f2,'C:\2.pas');
       reset(f2);
      assign(f3,'C:\3.pas');
    rewrite(f3);
   i:=1;
 while not eof (f1) do
begin
   read(f1,x);
     mas[i]:=x;
 i:=i+1;
end;
  while not eof (f2) do
begin
  read(f2,x);
    mas[i]:=x;
  i:=i+1;
end;
  for i:=1 to i-1 do
    write(mas[i]);
      writeln('sortiruem');
     n:=i;
   for j:=1 to n-1 do
begin
   new:=mas[n];
       k:=n;
        for i:=n downto j do
   if mas[i]>new then
begin
 k:=i;
   new:=mas[j];
 mas[j]:=new;
end;
   for i:=1 to n do
      write (mas[i]:4);
            writeln;
           for i:=1 to n do
        write (f3,mas[i]);
     readln;
   close(f1);
 close(f2);
close(f3);
readln;
end;
end.

Артемий
   f1:file of char;
   f2:file of char;
   f3:file of char;

А разве нельзя использовать file of integer?

Добавлено через 1 мин.
И потом эти цифры просто сортируешь..
volvo
Цитата
прблема в том что если в первом файле числа больше чем во втором,то файл-результат не получается упорядоченный по возрастающей.
Проблема у тебя не в этом... Что ты будешь делать, если сумма размеров файлов превысит 64К?

Сколько же можно повторять - сортировка методом слияний (Неймана), ищи (и в Гугле, и на форуме) и разбирайся...
Аlex
Спс.Щас попробую.
Артемий
Блин,1 - читай пост volvo
2 - бери два file of integer, пихай в массив integer,сортируй и пиши в третий файл. самый тупой вариант.
Аlex
Сортировка слияний (Неймана),в данной ситуации не подходит.Если мы будем использовать сортировку Неймана, то в программе мы будем использовать процедуру. А в решении этой задачи нужно обойтись без функций и процедур.
Можно ли в данной ситуации обойтись без функций и процедур?Если да, то как?

P.S Bсходный файл у меня не привысит размер 64K
Артемий
Var
   f1,f2,f3: text;
   max,min,i,t,j: integer;
   b: boolean;
   arr: array [1..100] of integer;
begin
i:=0;
{$I-}
 assign(f1,'C:\1.txt'); reset(f1);
 assign(f2,'C:\2.txt'); reset(f2);
 assign(f3,'C:\3.txt'); rewrite(f3);
  while not eof(f1) do begin
   readln(f1,arr[i]);
   inc(i);
  end;
  while not eof(f2) do begin
   readln(f2,arr[i]);
   inc(i);
  end;
    repeat
    b := True;
    for j := 1 to i-1 do
    if arr[j] > arr[j+1] then begin
    t := arr[j];
    arr[j] := arr[j+1];
    arr[j+1] := t;
    b := False
    end
    until b;
for j:=1 to i-1 do writeln(f3,arr[j]);
close(f3);
readln

С текстовыми пойдет?
volvo
Цитата
Если мы будем использовать сортировку Неймана, то в программе мы будем использовать процедуру. А в решении этой задачи нужно обойтись без функций и процедур.
Это что, тоже было написано в первом посте? Не было. Что ж ты хотел получить в ответ, если даешь неполное задание? Тогда, извини - но может и ЭТО тоже неполная версия задания?... Не хочется изобрести очередной велосипед, чтоб ты потом опять сказал, что тебе по каким-то причинам он не подойдет...
Аlex
Артемий Спс,с текстовыми пойдёт. Тока почемуто компилятор ругается на 13 строку, пишет "Выход за границы диапазона изменения индекса 1..100.
Как бороться с этим?
Артемий
i:=1;
Странно,у меня не ругнулся..

Добавлено через 2 мин.
И замени
........
    b := True;
    for j := 1 to i-2 do
    if arr[j] > arr[j+1] then begin
............

Аlex
Пробовал непомогло. (У мя компилятор Pascal ABC)
Теперь компилятор ругается на 32 строку и пишет :EAccessViolation. Access violation at address 0076A0D8 in module 'Pascal ABC.exe'. Read of address 00000014. Программа завершена.
Что делать?
Мож у мя проблема в компиляторе?

-----
Щас попробую в обычном TP7.1 откомпилить.
Артемий
У меня Turbo Pascal 7.0 ошибок не дает.
Аlex
Откомпилил прогу, проблема оказалась в моем 'Pascal ABC.exe'
Есть еще один вопррос: Как вывести на экран содержимое файла f3?
Артемий
while not eof(f3) do begin
 readln(f3,arr[i]);
 writeln(arr[i]);
 inc(i);
end;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.