Untitled
unknown
c_cpp
2 years ago
6.0 kB
6
Indexable
#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;
}
Editor is loading...