| 
													Последний раз редактировалось XeuTeP_KoLLIu 23.04.2022, 16:35, всего редактировалось 7 раз(а).
												
 
 Никак не получается обрабатывать серии. Например исходный файл f  содержит числа: 1, 2, 3, 100, 4. А длина текущей серии - 3; Тогда f  разобьется на файлы f1 : 1, 2, 3 - и f2 : 100, 4. И вот никак у меня не получается правильно сделать слияние двух файлов, если в одном из них не полная серия. 
-- 23.04.2022, 16:21 --
//слияние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;
 
 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) thenwhile 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;
 
 |