Array139. Дано множество A из N точек с целочисленными координатами x, y. Порядок на координатной плоскости определим следующим образом: (x1, y1) < (x2, y2), если либо x1 < x2, либо x1 = x2 и y1 < y2. Расположить точки данного множества по возрастанию в соответствии с указанным порядком.
>Решение Pascal
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. |
>
Решение C
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 49 50 | #include #include void swap(float a1[], float a2[]){ a1[0]+=a2[0]; a2[0]=a1[0]-a2[0]; a1[0]-=a2[0]; a1[1]+=a2[1]; a2[1]=a1[1]-a2[1]; a1[1]-=a2[1]; } int compare (float a1[], float a2[]){ if ((a1[0]<a2[0])||((a1[0]==a2[0]) && (a1[1]<a2[1]))) return 1; else return 0; } int main(void) { float a[10][2]; int n; printf("N: "); scanf("%i",&n); int i; for (i=0; i<n; ++i){ printf("a[%i]:\n",i+1); printf(" x : "); scanf("%f",&a[i][0]); printf(" y : "); scanf("%f",&a[i][1]); } int i2, n2=n; for (i=0; i<n-1;i++){ --n2; for (i2=0; i2<n2; i2++) if (compare(a[i2+1],a[i2])==1){ swap(a[i2+1], a[i2]); } } for (i=0; i<n;i++) printf("A %i :\n x: %f\n y: %f\n",i+1 , a[i][0],a[i][1]); return 0; } |