| Код | #include <iostream> #include <iomanip> #include <clocale>
using namespace std;
////////////////// class ////////////////////////////////////////// class MyArray{ typedef int type; // массив будет содержать числа int ( можно float'ов или чего попало ) typedef unsigned int uint; type ** m_Array; void NewArray( uint row, uint col ); // выделение памяти для массива
public: uint m_Row, m_Col; // количество - стоки столбики
MyArray( const MyArray & ar ); MyArray( uint row, uint col ); MyArray & operator=( const MyArray & ar ); ~MyArray();
void ZeroArray(); // обнуление массива
void Print(); // Метод печати текущего состояния массива: void print(…); void Set( uint row, uint col, type data ); // Метод переустановки текущего состояния массива: void set(…); type & operator()( uint row, uint col ); // Метод переустановки текущего состояния массива (другой) // Функция-друг, решающая поставленную задачу:friend void Run(…); friend void Run( const MyArray & ar ); }; ///////////////////// function /////////////////////////////////// void MyArray::NewArray(MyArray::uint row, MyArray::uint col){ m_Row = row; m_Col = col; m_Array = new type*[m_Row]; for( uint i = 0; i<m_Row; ++i ) m_Array[i] = new type[m_Col]; } MyArray::MyArray(const MyArray &ar){ NewArray( ar.m_Row, ar.m_Col ); // копируем данные for( uint i =0; i< m_Row; ++i ) for( uint j=0; j<m_Col; ++j ) m_Array[i][j] = ar.m_Array[i][j]; } MyArray::MyArray(MyArray::uint row, MyArray::uint col){ NewArray( row, col ); ZeroArray(); // обнуляем } MyArray & MyArray::operator =(const MyArray &ar){ if( this == &ar ) return *this; // если пытаемся присвоить себя for( uint i=0; i<m_Row; ++i ) delete [] m_Array[i]; delete [] m_Array; NewArray( ar.m_Row, ar.m_Col ); // копируем данные for( uint i =0; i< m_Row; ++i ) for( uint j=0; j<m_Col; ++j ) m_Array[i][j] = ar.m_Array[i][j]; } MyArray::~MyArray(){ for( uint i=0; i<m_Row; ++i ) delete [] m_Array[i]; delete [] m_Array; } void MyArray::ZeroArray(){ for( uint i =0; i< m_Row; ++i ) for( uint j=0; j<m_Col; ++j ) m_Array[i][j] = type(); } //////////////////////////// void MyArray::Print(){ cout << "\nМассив " << m_Row << " x " << m_Col << " :\n"; for( uint i =0; i< m_Row; ++i ){ for( uint j=0; j<m_Col; ++j ) cout << std::setw(8) << m_Array[i][j]; cout << "\n"; } } void MyArray::Set(MyArray::uint row, MyArray::uint col, MyArray::type data){ if( row <= m_Row && col <= m_Col ) m_Array[row][col] = data; } MyArray::type & MyArray::operator ()(MyArray::uint row, MyArray::uint col){ return m_Array[row][col]; } void Run( const MyArray & ar ){ // Определить: Найти номер первого из столбцов, не содержащих ни одного отрицательного элемента. MyArray::uint i, j; for( i =0; i<ar.m_Col; ++i ){ for( j = 0; j<ar.m_Row; ++j ){ if( ar.m_Array[j][i] < 0 ) break; } if( j == ar.m_Row ){ // если нашли столбец cout << "\nНомер первого из столбцов, не содержащих ни одного отрицательного элементa = " << i; return; } } cout << "\nНет столбцов без отрицательных значений !"; }
//////////////////// Main //////////////////////////////////////// int main(){ setlocale(LC_CTYPE, "Russian");
MyArray ar( 7, 5 ); ar.Set(4,4, 3333); // Метод переустановки текущего состояния массива: void set(…) ar(2,2) = 1111; // Метод переустановки текущего состояния массива ar(2,3) = 2222; ar(0,0) = -1; ar(0,1) = -1; ar.Print(); // печать Run(ar);
cin.sync(); cout << "\n\nНажмите Enter для выхода.\n\n"; getchar(); // пауза return 0; }
|
|