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


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


begin if (x>=0) and(y>0) then goto m!2; { случай 1 }

if (x<0) and (y>=0) and (y>=abs(x)) then { случай 2 }

begin { обработка случаев 1 и 2 }

m12: x0:=-y; y0:=y; N:=sqr(2*x0); { координаты и номер угла }

coord__to_n: = N+xO-x; exit;

end;

{ обработка случаев З и 4 }

x0:=x; y0:=-x; N:=sqr(2*x0);

coord_to_n:=N+yO-y; exit;

end;

{ если узел в правой полуплоскости }

if(x<=0) and (y<0) then goto mab; { случай а }

if(x>=0) and (y<0) and (abs(y)>=x) then { случай b }

begin { обработка случаев a, b }

mab: x0:=-y+l; y0:=-y; N:=sqr(2*x0-l);

coord_to_n:= N-xO+x; exit;

end;

{ обработка случаев с, d }

x0:=x; y0:=-x+l; N:=sqr(2*xO-l);

coord_to_n:= N+y-y0;

end;

begin

writeln('Введите координаты узла : ');

readln(x,у);

м.=toord_to_a(x,y);

writeln ('Его номер = \М);

readln;

end.

На базе процедур n_to_coord и coord_to_N можно построить Программы определения расстояния между точками с номерами NI и N2, нахождения номеров ближайших соседей к точке с номером N и т. п.

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

DECLARE SUB NtoCoord (N&, X&, YS)

REM Определение расстояния между двумя точками

INPUT "Введи номер первой точки : ", N&

NtoCoord N&, xl&, yl&

INPUT "Введи номер второй точки : ", N&

NtoCoord N&, х2&, у2&

dx = xl& - x2&: dy = yl& - у2&

PRINT "Расстояние = ", SQR(dx * dx + dy * dy)

END

SUB NtoCoord (N&, X&, Y&)

DIM k AS LONG, j AS LONG, d AS LONG

j = INT(SQR(N&) + .5)

d = N& - j * j

k = j \ 2

PRINT "j="; j, "d="; d, "k="; k

IF (j MOD 2) О О THEN

IF d > 0 THEN

X& = k + 1: Y& = -k + d

ELSE

X& = k + 1 + d: Y& = -k

END IF

ELSE

IF d > 0 THEN

X& = -k: Y& = k - d

ELSE

X& = -k - d: Y& = k

END IF

END IF

END SUB

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

//Определение расстояния между двумя точками

#include <stdio.h>

#include <conio.h>

#include <math.h>




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