Untitled
unknown
c_cpp
a year ago
6.0 kB
0
Indexable
Never
#include <iostream> #include <ctime> #include <string> #include <cmath> #include <windows.h> using namespace std; //В одномерном массиве, состоящем из п элементов, вычислить сумму элементов массива, //расположенных до последнего положительного четного элемента. template < typename T > //указание шаблона функции void FillArrRand( T *Myarray, const int size );//Прототип функции заполнения массива случайными числами template < typename T > // указание шаблона функции void FillArrManual( T *Myarray, const int size );//прототип функции заполнения массива вручную template <typename T > void PrintArr ( const T *Myarray, const int size); //прототип функции вывода массива // 5 3 1 1 1 // 2 5 5 5 5 // 1 2 3 4 5 4 3 0 // функция возвращает произведение элементов между указанными индексами массива template <typename T> void GetValueIn( T& value, const string& mes = "" ) { bool flag; cout << mes; do { cin >> value; flag = true; if ( !cin ) { flag = false; cin.clear(); } string input; getline( cin, input ); if ( input.find_first_not_of( " " ) != string::npos ) flag = false; if ( !flag ) cout << "Неверно введено число! Повторите ввод: "; } while( !flag ); } int main() { /* создать массив - размер массива, выбрать тип: int or double и выделение памяти заполнить вручную заполнить автоматически случайными числами вывод массива сумма до последнего четного элемента 0 - выход */ SetConsoleCP( 1251 ); SetConsoleOutputCP( 1251 ); srand( time( 0 ) ); //для генерации случ.чисел (надо просто запомнить) //для заполнения вручную целыми int val; GetValueIn( val, "Введите целое число: " ); cout << val << endl; /* printf( "Введите 0 для заполнения массива случайными числами или 1 для заполнения вручную: " ); int key = GetNum( 0, 1 ); if ( key ) { // key == 1 printf( "Введите элементы массива от %d до %d\n", "minValue", "maxValue" ); FillArrManual( T *Myarray, const int size ) } else { // key == 0 FillMatrix( a, size, minValue, maxValue ); FillVector( vec, size, minValue, maxValue ); } puts( "Массив :" ); PrintArr ( const T *Myarray, const int size); // если есть отрицательные элементы в вектое, то функция NegativeElements вернёт 1 if ( NegativeElements( vec, size ) ) // и условие будет истинным printf( "\nСреднее арифметическое элементов матрицы A = %.2f\n", GetAvgMatrix( a, size ) ); else // если отрицательных нет, то функция NegativeElements вернёт 0 и условие будет ложным - попадаем в ветку else printf( "\nПроизведение элементов матрицы A = %lld\n", GetMultMatrix( a, size ) ); int minInd = GetMinIndex( vec, size ), maxInd = GetMaxIndex( vec, size ); if( abs(minInd - maxInd) <= 1 ) puts( "Между минимальным и максимальным элементами отсутствуют элементы"); else { if( minInd > maxInd ) Swap( &minInd, &maxInd ); printf( "Произведение элементов между минимальным максимальным = %lld\n", GetMultBetweenMinMax( vec, minInd, maxInd ) ); } */ //для заполнения вручную вещественными double dval; GetValueIn( dval, "Введите вещественное число: " ); cout << dval << endl; /* } } catch ( bad_alloc& err ) { cout << "Ошибка выделения памяти!" << endl; } catch ( runtime_error& err ){ cout << err.what() << endl; } */ return 0; } template < typename T > void FillArrRand( T *Myarray, const int size ) { for (int i = 0; i < size; ++i ) Myarray[i] = rand() % 100 - 50 + ( rand() % 10 ) / 10.0; } template < typename T > void FillArrManual( T *Myarray, const int size ) { // a[0]: // a[1]: for ( int i = 0; i < size; ++i ) { cout << "a[" << i << "]: "; GetValueIn( Myarray[i] ); } } template <typename T > void PrintArr ( const T *Myarray, const int size) { for( int i = 0; i < size; ++i ) cout << Myarray[i] << " "; } template< typename T > T SumDoLastChet( T* Myarray, const int size ) { int first = Myarray[0], last = -1; T sum = 0; /* for ( int i = 0; i < size; ++i ) if ( Myarray[ i ] > 0 ) && (Myarray[i]) { first = i; break; } */ for ( int i = size - 1; i >= 0 ; --i ) if (( Myarray[ i ] > 0 ) && ( Myarray[i] % 2 == 0 )) { last = i; break; } if ( first == last ) throw runtime_error( "Невозможно вычислить сумму !" ); for( int i = first + 1; i < last; ++i ) sum += Myarray[ i ]; return sum; }