Array140. Дано множество A из N точек с целочисленными координатами x, y. Порядок на координатной плоскости определим следующим образом: (x1, y1) < (x2, y2), если либо x1 + y1 < x2 + y2, либо x1 + y1 = x2 + y2 и x1 < x2. Расположить точки данного множества по убыванию в соответствии с указанным порядком.
>Решение 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 49 | program Array140; 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+y1<x2+y2) or ((x1+y1=x2+y2) and (x1<x2)) 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]+a1[1]<a2[0]+a2[1])||((a1[0]+a1[1]==a2[0]+a2[1]) && (a1[0]<a2[0]))) 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])==0){ 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; } |
program array140;
uses math;
type
Coord=record
x,y:integer;
end;
mas=array [1..10] of Coord;
var
a,b:mas;
j,i,n:integer;
begin
writeln(‘n’);
readln(n);
for i:=1 to n do begin
writeln(‘enter a’,’ ‘,i,’ ‘,’x’);
readln(a[i].x);
writeln(‘enter a’,’ ‘,i,’ ‘,’y’);
readln(a[i].y);
end;
b:=a;
for i:=1 to n-1 do begin
for j:=i+1 to n do begin
if ((b[i].x+b[i].y <b[j].x+b[j].y) or ((b[i].x+b[i].y=b[j].x+b[j].y ) and (b[i].x<b[j].x))) then begin
b[i].x:=b[i].x+b[j].x;
b[j].x:=b[i].x-b[j].x;
b[i].x:=b[i].x-b[j].x;
b[i].y:=b[i].y+b[j].y;
b[j].y:=b[i].y-b[j].y;
b[i].y:=b[i].y-b[j].y;
end;//endif
end;//endj
end;//endi
for i:=1 to n do begin
writeln('b.x=',b[i].x,' ','b.y=',b[i].y );
end;
end.