TolyaN3z
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Т.к. никто не помог, в спешке наваял свою реализацию метода сортировки двухпутёвым слиянием на Pascal (писал на Delphi 7). Возможно, слишком много переменных использовал, но это уж привычка от Питона... на нём об этом особо не задумываешься. Большинство WriteLn можно убрать, да и конвертирование, String в Integer и обратно, тоже, но, у меня задача была такая. program two_way_merge_sort; {$APPTYPE CONSOLE} uses SysUtils; const n = 5; m = 5; var f1, f2, f3 : text; t1, t2 : string; ti, i, j, k : integer; y : array[1..n] of integer; x : array[1..m] of integer; z : array[1..m+n] of integer; begin writeln('File #1'); //Читаем первый файл assign(f1, '1.txt'); reset(f1); i := 1; repeat readln(f1,t1); x[i] := strtoint(t1); // Можно не использовать StrToInt write(x[i],' '); i:=i+1; until eof(f1); close(f1); writeln; writeln('File #2'); //Читаем второй файл assign(f2, '2.txt'); reset(f2); i := 1; repeat readln(f2,t2); y[i] := strtoint(t2); write(y[i],' '); i:=i+1; until eof(f2); close(f2); writeln; i := 1; j := 1; k := 1; for ti := 1 to n + m do if x[i] <= y[j] then if i<=m then begin z[k] := x[i]; k := k + 1; i := i + 1; end else for k:=k to m+n do begin z[k] := y[j]; j:=j+1; end else if j<=n then begin z[k] := y[j]; k := k + 1; j := j + 1; end else for k:=k to m+n do begin z[k] := x[i]; i:=i+1; end; writeln; writeln('File #3'); assign(f3,'3.txt'); rewrite(f3); for i:=1 to n + m do begin write(inttostr(z[i]),' '); writeln(f3, inttostr(z[i])); // Можно не использовать IntToStr end; close(f3); readln; { TODO -oUser -cConsole Main : Insert code here } end. |