Untitled

mail@pastecode.io avatar
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;
}