Последний раз редактировалось XeuTeP_KoLLIu 23.04.2022, 16:35, всего редактировалось 7 раз(а).
Никак не получается обрабатывать серии. Например исходный файл f содержит числа: 1, 2, 3, 100, 4. А длина текущей серии - 3; Тогда f разобьется на файлы f1: 1, 2, 3 - и f2: 100, 4. И вот никак у меня не получается правильно сделать слияние двух файлов, если в одном из них не полная серия.
//слияние
for var i := 1 to min(n1 div n, n2 div n) do
begin
count1 := 0;
while count1 < n do
begin
read(f1, a);
read(f2, b);
c1 := min(a, b);
c2 := max(a, b);
write(ouf, ' ', c1, ' ', c2);
count1 += 1;
end;
end;
flag1 := true;
flag2 := true;
while (not eof(f2)) and (not eof(f1)) do
begin
if flag1 and flag2 then
begin
read(f2, b);
read(f1, a);
if a < b then
begin
write(ouf, ' ', a);
flag2 := false;
end
else
begin
write(ouf, ' ', a);
flag1 := false;
end;
end
else
if not flag2 then
begin
read(f1, a);
if a < b then
write(ouf, ' ', a)
else
begin
flag2 := true;
flag1 := false;
write(ouf, ' ', b)
end;
end
else
if not flag1 then
begin
read(f1, b);
if b < a then
write(ouf, ' ', b)
else
begin
flag1 := true;
flag2 := false;
write(ouf, ' ', a);
end;
end;
end;
if not eof(f1) then
while not eof(f1) do
begin
read(f1, a);
write(ouf, ' ', a);
end
else
if not eof(f2) then
while not eof(f2) do
begin
read(f2, b);
write(ouf, ' ', b);
end;
-- 23.04.2022, 16:21 --n1 и n2 - это число элементов в файлах f1 и f2, n - длина текущей серии. -- 23.04.2022, 16:34 --Сейчас если воспользоваться этим алгоритмом для сортировки файла 1, 2, 3, 100, 4, то получится 1, 2, 3, 4. И я даже знаю, где ошибка - она заключается в том, что в переменную b уже записано значение 100, а здесь я не вывожу его, а сразу считываю следующее. Но никак не могу это исправить, и вообще мне кажется, что можно проще сделать. if not eof(f1) then
while not eof(f1) do
begin
read(f1, a);
write(ouf, ' ', a);
end
else
if not eof(f2) then
while not eof(f2) do
begin
read(f2, b);
write(ouf, ' ', b);
end;
|