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


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


if((nDiag % 2)=0) //диагональ с четным номером { yBeg= nDiag; xN=xBeg+(N-nBeg); yN=yBeg-(N-nBeg);

)

else //диагональ с нечетным номером

{ xBeg=nDiag;

xN=xBeg-(N-nBeg); yN=yBeg+(N-nBeg); }

printf("Номера смежных точек:\n" ); for(k=0;k<8;k++) { x = xN + dx[k]; у = yN + dy [k] ; nextpoint(x,y); }

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

if(getch(}=='у'} goto m; }

void nextpoint(long x,long y) { long N;

if(x<0||y<0) return;

nBeg=0;

nDiag=x+y;

xBeg=yBeg=0;

nPoints=nDiag+l;

for fint j=0;j<nPoints;j++) nBeg+=j;

if((nDiag % 2)==0) { yBeg=nDiag; N=nBeg+yBeg-y;}

else { xBeg=nDiag; N=nBeg+xBeg-x; }

printf("%ld ",N);

}


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


program spirall;

uses Crt;

label ml;

var

nDiag, {номер диагонали}

xBeg,yBeg, (координаты начальной точки на диагонали}

nPoints, {количество точек на диагонали}

nBeg, {номер начальной точки на диагонали}

N,M,

xN,yN, {координаты введенной точки}

х,у,k: longint; const

dx : array [0..7] of integer =(-1,-1,-1,0,1,1, 1, 0);

dy : array [0..7] of integer =(-1, 0, 1,1,1,0,-1,-1);

procedure nextpoint(x,y:longint);

var

N: longint ,-

j. integer/" begin

if (x>=0)and(y>=0) then

bey in nBeg:=0; nDiag;=x+y; xseg:=0;

yBeg:=0;

nPoints:=nDiag+l;

for j:=0 to nPoints-1 do nBeg:=nBeg+j;

if ((nDiag mod 2)=0) then begin

yBeg:=nDiag; N:=nBeg+yBeg-y; end

else begin

xBeg:=nDiag; N:=nBeg+xBeg-x; end;

write(N,', ') ; end; end; begin

clrscr; ml:

write('Введите номер точки: ');

readln(N);

{ Определение параметров диагонали }

nBeg:=0;

M:=N;

xBeg:=0;

yBeg:=0;

k:=0;

repeat

M:=M-k;

if M<0 then break; nBeg:---nBeg+k;

k:=k+l;

until k<0; nDiag:=k-l;

nPoints:=k;

if(nDiag mod 2)=0 then {диагональ с четным номером} begin

yBeg:=nDiag;

xN:=xBeg+(N-nBeg) ;

yN:=yBeg-(N-nBeg) ; end

else {диагональ с нечетным номером}

begin

xBeg:=nDiag; xN:=xBeg-(N-nBeg) ;

yN:=yBeg+(N-nBeg) ; end;

writeln('Номера смежных точек : ');

for k:=0 to 7 do begin

x := xN + dx[k]; у := yN + dy[k]; nextpoint(x,y);

end;

writeln;

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

if ReadKey='y' then goto ml;

end.




- Начало -  - Назад -