Array139. Дано множество $$A$$ из $$N$$ точек с целочисленными координатами $$x$$, $$y$$. Порядок на координатной плоскости определим следующим образом: $$(x_1, y_1) \lt (x_2, y_2)$$, если либо $$x_1 \lt x_2$$, либо $$x_1 = x_2$$ и $$y_1 \lt y_2$$. Расположить точки данного множества по возрастанию в соответствии с указанным порядком.
Решение:
Добавил процедуру Swap, которая меняет местами значения. x1 c x2 и y1 c y2.
И функцию Compare булевого типа, которая сравнивает «точки» по указанному в задаче алгоритму и в случе если (x1,y1)<(x2,y2) выводит True если нет то False.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
program Array139; var A: array [1..10,1..2] of real; N,N2,i,i2,i3: integer; Procedure Swap(var X1, Y1, X2, Y2 :Real); begin X1:=X1+X2; X2:=X1-X2; X1:=X1-X2; Y1:=Y1+Y2; Y2:=Y1-Y2; Y1:=Y1-Y2; end; Function Compare(X1,Y1, X2, Y2:real):boolean; begin if (x1<x2) or ((x1=x2) and (y1<y2)) then Compare:=True else Compare:=False; end; begin Write('N: '); Readln(N); Writeln('A: '); for i:=1 to N do begin write(i,'.x :'); readln(a[i,1]); write(i,'.y :'); readln(a[i,2]); end; N2:=N; for i:=1 to N-1 do begin i2:=1; N2:=N2-1; while (i2<=N2) do begin if Compare(A[i2+1,1],A[i2+1,2],A[i2,1],A[i2,2]) then Swap(A[i2+1,1],A[i2+1,2],A[i2,1],A[i2,2]); inc(i2); end; end; for i:=1 to N do writeln(a[i,1]:7:0,' : ',a[i,2]:7:0); end. |
Задачи из раздела Array можно посмотреть здесь.
В самой функции надо изменить знаки неравенства, а то выводит в порядке убывания 🙂
Саму сортировку потестил, так тоже работает, ошибок не замечено
проверил сейчас… вроде по возрастанию вы водит..
вводные данные:
N: 5
A:
1.x :-1
1.y :-1
2.x :2
2.y :2
3.x :0
3.y :0
4.x :3
4.y :3
5.x :4
5.y :4
Вывод:
-1: -1
0: 0
2: 2
3: 3
4: 4