Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Работа с файлами

Автор: Аlex 7.06.2007 22:31

Слить в один два упорядоченных по возрастающей файла целых чисел. Файл результат тоже должен быть упорядочен по возрасающей.

Я напсиал прогу,но прблема в том что если в первом файле числа больше чем во втором,то файл-результат не получается упорядоченный по возрастающей.(Т.Е если в певом файле написать 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.


Автор: Артемий 7.06.2007 23:22

   f1:file of char;
f2:file of char;
f3:file of char;

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

Добавлено через 1 мин.
И потом эти цифры просто сортируешь..

Автор: volvo 7.06.2007 23:33

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

Сколько же можно повторять - сортировка методом слияний (Неймана), ищи (и в Гугле, и на форуме) и разбирайся...

Автор: Аlex 7.06.2007 23:39

Спс.Щас попробую.

Автор: Артемий 7.06.2007 23:42

Блин,1 - читай пост volvo
2 - бери два file of integer, пихай в массив integer,сортируй и пиши в третий файл. самый тупой вариант.

Автор: Аlex 7.06.2007 23:59

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

P.S Bсходный файл у меня не привысит размер 64K

Автор: Артемий 8.06.2007 13:00

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 8.06.2007 15:16

Цитата
Если мы будем использовать сортировку Неймана, то в программе мы будем использовать процедуру. А в решении этой задачи нужно обойтись без функций и процедур.
Это что, тоже было написано в первом посте? Не было. Что ж ты хотел получить в ответ, если даешь неполное задание? Тогда, извини - но может и ЭТО тоже неполная версия задания?... Не хочется изобрести очередной велосипед, чтоб ты потом опять сказал, что тебе по каким-то причинам он не подойдет...

Автор: Аlex 8.06.2007 21:40

Артемий Спс,с текстовыми пойдёт. Тока почемуто компилятор ругается на 13 строку, пишет "Выход за границы диапазона изменения индекса 1..100.
Как бороться с этим?

Автор: Артемий 8.06.2007 21:42

i:=1;
Странно,у меня не ругнулся..

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


Автор: Аlex 8.06.2007 21:54

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

-----
Щас попробую в обычном TP7.1 откомпилить.

Автор: Артемий 8.06.2007 21:57

У меня Turbo Pascal 7.0 ошибок не дает.

Автор: Аlex 8.06.2007 22:52

Откомпилил прогу, проблема оказалась в моем 'Pascal ABC.exe'
Есть еще один вопррос: Как вывести на экран содержимое файла f3?

Автор: Артемий 9.06.2007 2:13

while not eof(f3) do begin
readln(f3,arr[i]);
writeln(arr[i]);
inc(i);
end;