Void main()//точка входа в программу
{
Func1();//вызов функции Func1
}
#include<stdio.h> //подключение библиотеки ввода/вывода
//подключение библиотек для реализации функции заполнения массива
//разупорядоченными значениями вектора
#include<algorithm>
#include<functional>
#include<vector>
#include<iostream>
using namespace std; //определение рабочего пространства
//объявление и определение функции, выполняющей заполнение массива перетасованными значениями
template<typename T>
void quickSortR(T* a, long N)
{
// На входе - массив a[], a[N] - его последний элемент.
long i = 0, j = N; // поставить указатели на исходные места
T temp, p;
p = a[ N>>1 ]; // центральный элемент
// процедура разделения
do {
while ( a[i] < p ) i++;
while ( a[j] > p ) j--;
if (i <= j)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
} while ( i<=j );
// рекурсивные вызовы, если есть, что сортировать
if ( j >= 0 ) quickSortR(a, j);
if ( N >= i ) quickSortR(a+i, N-i);
}
void RandomShuffle(int *pA, int r, int x, int n)
{
const int VECTOR_SIZE=r; //число элементов вектора
typedef vector<int> IntVector;
typedef IntVector::iterator IntVectorlt;
IntVector Numbers(VECTOR_SIZE);
IntVectorlt start, end, it;
for(int i=0;i<r;i++) //заполнения вектора значениями
{
Numbers[i]=x;
x=x+n;
}
start=Numbers.begin(); //определение границ вектора
end=Numbers.end();
random_shuffle(start,end); //вызов функции, тасующей значения вектора
//заполнение динамического массива значениями вектора
for(it=start;it!=end;it++)
{
*(pA++)=*it;
}
}
void Func1()
{
Int *pArr;//создание указателя
Int z;//переменная отв за размер
int k;
printf("Vvedite razmer massiva:");
scanf("%i",&z);
cout<<"Kak zapolnyat massiv:"<<endl;
cout<<"1-auto,2-manual"<<endl;
cin>>k;
///////создание линамического двумерного массива//////////
int **ppArr = new int*[z];
for(int i=0;i<z;i++)
{
ppArr[i]=new int[z];
}
if(k==1)
{
pArr=new int[z*z];//создание одномерного динамического массива
Int I,j;//создание переменных
////////////////вызов ф-ции для заполнения массива//////////////////////////////////////////////////////
RandomShuffle(pArr,z*z,1,1);
//////////////////запись из одномерного массива в двухмерный///////////////////////////
int k=0;
for(i=0;i<z;i++)
for(j=0;j<z;j++)
{
ppArr[i][j]=pArr[k];
k++;
}
////////////////вывод массива на экран/////////////////////////////////////////////////////////////////////
for(i=0;i<z;i++)
{
for(j=0;j<z;j++)
cout<<ppArr[i][j]<<'\t'<<flush;
cout<<endl<<endl;
}
}
/////////////////заполнение массива в ручную////////////////////////////////////////
else
{
if(k==2)
{
for(int t=0;t<z;t++)
for(int n=0;n<z;n++)
{
cout<<"Vvedite element Arr["<<t<<"]["<<n<<"]= "<<flush;
cin>>ppArr[t][n];
}
}
}
//////////////////////запись по диагонали///////
//переменные для функции
int *pSize;
int nsize=(z*z-z)/2+z;
pSize=new int [nsize];
int j;
int t=0;
int size=z;
i=size-1;
j=size-1;
k=0;
//цыкл перебора всех елементов массива//
for(t=0;t<size;t++)
{
if(t%2==0)//если диагональ четная
{
while(j!=0)//пока строка не равен нулю
{
pSize[k]=ppArr[i][j];//перезапись массива
i--;//уменьшение столбцов
j--;//уменшение строк
k++;//инкриминтирование переменной
}
pSize[k]=ppArr[i][j];//перезапись массива
i++;//увеличение строки
k++;//инкриминтирование переменной
continue;
}
else
{
while(i!=size-1)//пока не закончатся столбцы
{
pSize[k]=ppArr[i][j];//перезапись массива
i++;//уменьшение столбца
j++;//уменьшение строки
k++;//инкриментирование переменной
}
pSize[k]=ppArr[i][j];//перезапись массива
j--;//уменщение строки
k++;//инкриментирование переменной
continue;
}
}
//вывод массива на экран//
for(int r=0;r<nsize;r++)
{
cout<<pSize[r]<<" "<<flush;
}
cout<<" "<<endl;
/////////////////////линейный поиск/////////////////////////////////////
