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


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


DIM dx(8), dy(S)

DATA -1,-1,-1,0,1,1/ 1/ 0

FOR J = 0 TO 7: READ dx(J): NEXT J

DATA -1, 0, 1,1,1,0,-1,-1

FOR J = 0 TO 7: READ dy(J): NEXT J

ml:

CLS

INPUT "Введите номер точки: ", N КЕМ Определение параметров диагонали

nBeg = 0: М = N: хВед = 0: уВеg = 0

FOR k = 0 ТО 200000000

М = М - k

IF М < 0 THEN EXIT FOR

nBeg = nBeg + k NEXT k

nDiag = k - 1: nPoints = k

IF (nDiag MOD 2) = 0 THEN 'диагональ с четным номером

yBeg = nDiag xN = xBeg + (N - nBeg) yN = yBeg - (N - nBeg)

ELSE 'диагональ с нечетным номером

xBeg = nDiag

xN = xBeg - (N - nBeg)

yN = yBeg + (N - nBeg) END IF

PRINT "Номера смежных точек: "

FOR k = 0 ТО 7

X& = xN + dx(k)

Y& = yN + dy(k)

NEXTPOINT X&, Y& NEXT k PRINT

PRINT "Хотите повторить - (y/n) : ";

m2:

A$ = INKEY$: IF A$ = "" THEN GOTO m2

IF A$ = "y" THEN GOTO m1 END

SUB NEXTPOINT (X&, Y&)

SHARED nDiag AS LONG, xBeg AS LONG, yBeg AS LONG, nPoints AS LONG

DIM N AS LONG, J AS INTEGER

IF X& < 0 OR Y& < 0 THEN EXIT SUB

nBeg = 0: nDiag = X& + Y&: xBeg = yBeg = 0

nPoints = nDiag + 1

FOR J = 0 TO nPoints - 1: nBeg = nBeg + J: NEXT J

IF (nDiag MOD 2) = 0 THEN

yBeg = nDiag: N = nBeg + yBeg - Y&

ELSE

xBeg = nDiag: N = nBeg + xBeg - X&

END IF

PRINT N; ",";

END SUB

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


#include <stdio.h>

#include <conio.h>

void nextpoint(long x,long y) ;

int dx[8]={-l,-l,-l,0,l,l, 1, 0};

int dy[8]={-l, 0, 1,1,1,0,-!,-!};

long nDiag, //номер диагонали

xBeg,yBeg, //координаты начальной точки на диагонали nPoints, //количество точек на диагонали nBeg; //номер начальной точки на диагонали

void main() { long N,M,

xN,yN, //координаты введенной точки x,y,k; clrscr (); m:

printf("\n\n Введите номер точки: "} ; scanf("%ld",&N);

//Определение параметров диагонали nBeg=0; M=N;

хВед=уВед=0;

for(k=0;;k++)

{ M=M-k;

if(M<0) break; nBeg=nBeg+k; }

nDiag=k-l; nPoints=k;




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