Практика программирования (Бейсик, Си, Паскаль)


Задачи,советы и ответы - часть 55


void n_to_coord(long N, long *x, long *y) ;

void main()

{ long N,xl,yl,x2,y2;

double dx,dy;

printf("\n Введи номер первой точки : ");

scanf("%ld",&N);

n_to_coord(N,Sxl, &yl);

printf("\n Введи номер второй точки : ");

scanf("%ld",&N);

n_to_coord(N,&x2,&y2) ;

dx=xl-x2; dy=yl-y2;

printf("ХпРасстояние = %f",sqrt(dx*dx + dy*dy));

getch();

}

void n_to_coord(long N,long *x,long *y)

( long k,j,d;

j=floor(sqrt(N)+0.5);

d=N-j*j; k=j / 2;

if (j % 2)

{ if (d>0) { *x=k+l; *y=-k+d; }

else { *x=k+l+d;*y=-k; }

}

else

{ if (d>0) { *x=-k; *y=k-d; }

else { *x=-k-d; *y=k; )

}

}

Программа 2_30.pas

program spiral;

var

xl, yl, x2,y2,N:longint;

dx, dy: double;

procedure n_to_coord(N:longint;var x,y:longint);

var

k,j,d:longint;

begin

}

j:=trunc(sqrt(NJ+0.5) ;

d:=N-sqr(j);

k:=j div 2; if odd(j) then begin

if d>0 then begin x:=k+l; y:=-k+d;end else begin x:=k+l+d; y:=-k; end; end

else if d>0 then begin x:=-k; y:=k-d; end else begin x:=-k-d; y:=k; end; end; begin

writeln('Введи номер первой точки'); readln(N);

n_to_coord(N,xl,yl); writeln('Введи номер второй точки'); readln(N);

n_to_coord(N,x2, у2); dx:=xl-x2; dy:=yl-y2;

writeln('Расстояние = ',sqrt(dx*dx + dy*dy)); readln; end.

Вторая схема нумерации точек целочисленной решетки, расположенной в первом квадранте, заключается в движении по раскручивающейся диагонали (рис. 2.2).

Рис. 2.2. Нумерация точек по диагоналям

Базовые процедуры по-прежнему сводятся к установлению прямых и обратных связей между координатами точек и их номерами. Пронумеруем диагонали в порядке их удаления от начала координат — 0, 1, 2, ... В качестве нулевой "диагонали" будем рассматривать вырожденный отрезок, содержащий единственную точку с номером о. Очевидно, что на диагонали с номером k находится k+1 точек, удовлетворяющих уравнению соответствующей прямой:

X + у = b(k) .

Заметим, что на диагоналях с нечетными номерами номера точек возрастают при движении снизу вверх, а на диагоналях с четными номерами — при движении сверху вниз. Осталось только подметить закономерность между номером диагонали, ее уравнением и координатами начальной и конечной точек. В этом нам поможет анализ табл. 2.1.




- Начало -  - Назад -  - Вперед -