2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Объясните!
Сообщение23.12.2013, 15:42 
Нашел в интернете программу и не пойму часть кода
Используется синтаксис C++
#include <iostream>
#include <windows.h>
using namespace std;
int main ()
{ int j,k,i,N,x=1,y=-1,t;
cout << "(N x N), N="; cin>>N;
int* a=new int[N*N];
int** p=new int*[N];
for(j=0;j-N;p[j++]=&a[j*N]);
for(j=k=i=0;i++-N*N/2;p[k][j]=i,j+=x,k+=y,t=1-2*(j<0||k<0),x*=t,y*=t,j+=(j<0),k+=(k<0));
for(i--;++i-N*N; p[k][j]=i,j+=x,k+=y,t=2*(j>=N||k>=N),x*=1-t,y*=1-t,j+=t-3*(j>=N),k+=t-3*(k>=N));
p[N-1][N-1]=i;
for(j=0;j-N;j++,cout << endl) for(k=0;k-N;k++) cout << p[j][k] << '\t';
return 0;
}

программа написана видимо по этой задачеИзображение
Объясните пожалуйста эту часть программы ,Что как там вычисляется....!!...
Используется синтаксис C++
int* a=new int[N*N];
int** p=new int*[N];
for(j=0;j-N;p[j++]=&a[j*N]);
for(j=k=i=0;i++-N*N/2;p[k][j]=i,j+=x,k+=y,t=1-2*(j<0||k<0),x*=t,y*=t,j+=(j<0),k+=(k<0));
for(i--;++i-N*N; p[k][j]=i,j+=x,k+=y,t=2*(j>=N||k>=N),x*=1-t,y*=1-t,j+=t-3*(j>=N),k+=t-3*(k>=N));
p[N-1][N-1]=i;
for(j=0;j-N;j++,cout << endl) for(k=0;k-N;k++) cout << p[j][k] << '\t';

 
 
 
 Re: Объясните!
Сообщение23.12.2013, 15:56 
«Разверните» циклы на несколько строк, потом попробуйте трассировку. Всяко станет чуть понятнее.

Или попробуйте найти другое, более читаемое решение.

 
 
 
 Re: Объясните!
Сообщение23.12.2013, 16:51 
Ну или попробовать написать самому. В своём коде должно быть легче разобраться.

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group