Слить в один два упорядоченных по возрастающей файла целых чисел. Файл результат тоже должен быть упорядочен по возрасающей.
Я напсиал прогу,но прблема в том что если в первом файле числа больше чем во втором,то файл-результат не получается упорядоченный по возрастающей.(Т.Е если в певом файле написать 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;
Спс.Щас попробую.
Блин,1 - читай пост volvo
2 - бери два file of integer, пихай в массив integer,сортируй и пиши в третий файл. самый тупой вариант.
Сортировка слияний (Неймана),в данной ситуации не подходит.Если мы будем использовать сортировку Неймана, то в программе мы будем использовать процедуру. А в решении этой задачи нужно обойтись без функций и процедур.
Можно ли в данной ситуации обойтись без функций и процедур?Если да, то как?
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
Артемий Спс,с текстовыми пойдёт. Тока почемуто компилятор ругается на 13 строку, пишет "Выход за границы диапазона изменения индекса 1..100.
Как бороться с этим?
i:=1;Странно,у меня не ругнулся..
........
b := True;
for j := 1 to i-2 do
if arr[j] > arr[j+1] then begin
............
Пробовал непомогло. (У мя компилятор Pascal ABC)
Теперь компилятор ругается на 32 строку и пишет :EAccessViolation. Access violation at address 0076A0D8 in module 'Pascal ABC.exe'. Read of address 00000014. Программа завершена.
Что делать?
Мож у мя проблема в компиляторе?
-----
Щас попробую в обычном TP7.1 откомпилить.
У меня Turbo Pascal 7.0 ошибок не дает.
Откомпилил прогу, проблема оказалась в моем 'Pascal ABC.exe'
Есть еще один вопррос: Как вывести на экран содержимое файла f3?
while not eof(f3) do begin
readln(f3,arr[i]);
writeln(arr[i]);
inc(i);
end;