#include <iostream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <iomanip>
using namespace std;
// Размерность массива
const size_t Dim=20;
// Максимальное значение для авто-генерации
const double MaxValue=50.0;
// Заполняет массив случайными числами
template<size_t Dim>
void fillArray(double (&array)[Dim])
{
for(size_t i=0;i<Dim;++i)
{
// Разбавим нулевыми элементами, чтоб можно было отсортировать согласно условия
array[i]=rand()%5?(static_cast<double>(rand())/RAND_MAX-0.5)*MaxValue*2.0:0.0;
}
}
// Выводит массив
template<class Elem,class Traits,size_t Dim>
basic_ostream<Elem,Traits>& operator<<(basic_ostream<Elem,Traits>& stream,const double (&array)[Dim])
{
const ctype<Elem>& facet=use_facet<ctype<Elem> >(stream.getloc());
Elem comma=facet.widen(',');
streamsize width=stream.width();
streamsize precision=stream.precision();
for(size_t i=0;i<Dim;++i)
{
stream.width(width);
stream.precision(precision);
stream<<array[i]<<(i<Dim-1?comma:facet.widen(' '));
}
return stream;
}
// Ищет сумму по условию
template<size_t Dim>
double sum(const double (&array)[Dim])
{
double result=0.0;
// Указатели на начало и конец
const double* begin=array;
const double* end=array+Dim;
// Пропустим не положительные от начала
while(begin<end && *begin<=0.0)
{
++begin;
}
// Пропустим не положительные от конца
while(begin<--end && *end<=0.0);
// Суммируем
if(begin<end)
{
while(++begin<end)
{
result+=*begin;
}
}
return result;
}
// Ф-я предикат для сортировки
bool sortPredicate(const double& left,const double& right)
{
return left==0 && right!=0;
}
int main()
{
setlocale(LC_ALL,"russian_russia");
srand(static_cast<unsigned int>(time(0)));
// Наш массив
double array[Dim];
// Заполним массив
fillArray(array);
// Выведем его
cout<<"Исходный массив:"<<endl
<<array<<endl;
// Ищем минимальный элемент
double* minItem=min_element(array,array+Dim);
cout<<endl<<"Минимальный элемент ["<<minItem-array<<"]="<<*minItem<<endl;
// Сумма между первым и последним положительным
cout<<endl<<"Сумма между первым и последним положительным:"<<sum(array)<<endl;
// Сортируем согласно условия
sort(array,array+Dim,sortPredicate);
// Выводим, что получилось
cout<<endl<<"Массив после сортировки:"<<endl
<<array<<endl;
system("PAUSE");
return 0;
}
Исходный массив:
0,-44.763,0,0,-1.38401,17.1316,-21.5262,0,23.5496,22.6615,41.5098,40.5759,0,0,38
.2626,-36.4101,7.19169,-6.29749,0.895718,0
Минимальный элемент [1]=-44.763
Сумма между первым и последним положительным:109.517
Массив после сортировки:
0,0,0,0,0,0,0,-44.763,-1.38401,17.1316,-21.5262,23.5496,22.6615,41.5098,40.5759,
38.2626,-36.4101,7.19169,-6.29749,0.895718
// 174020
// В одномерном массиве ,состоящем из n вещественных элементов вычислить:
// минимальный элемент массива
// сумму элементов массива, расположенных между первым и последним положительными элементами.
// Преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю,
// а потом - все остальные. нужно в приложении под windows, можно в консоли(с++)
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
const int size = 10;
double arr[size];
double sum;
double min;
int i,j;
// формирование массива
for (i=0; i<size; i++)
{
cout << "arr[" << i << "]=";
cin >> arr[i];
}
// эхо-печать массива
cout << "Введенный массив" << endl;
for (i=0; i<size; i++)
{
cout << i << " " << setprecision(3) << arr[i] << endl;
}
// поиск минимального элемента
for (i=0, min=arr[0]; i<size; i++)
if (arr[i]<min)
min = arr[i];
// поиск первого положительного элемента
for (i=0; i<size && arr[i]<=0; i++)
;
sum = 0; // если нет вообще положительных элементов
//поиск последнего положительного элемента
if ((i<size-2) && (arr[i]>0)) // а есть ли смысл?
{
for (j=size-1; j>=0 && arr[j]<=0; j--)
;
if ((arr[j]>0) && (--j>i))
while (j>i)
{
// сумма элементов между первым и последним положительным
sum+=arr[j--];
}
}
for (i=j=size-1; i>=0;--i)
{
if (arr[i]!=0)
{
if (i!=j)
arr[j]=arr[i];
--j;
}
}
for (i=0;i<=j;i++) // заполним начало нулями
arr[i]=0;
// печать нового массива
cout << endl;
cout << "Новый массив" << endl;
for (i=0; i<size; i++)
{
cout << i << " " << setprecision(3) << arr[i] << endl;
}
cout << "Минимальный элемент =" << setprecision(3) << min << endl;
cout << "Сумма между первым и последним положительными элементами = ";
cout << setprecision(3);
cout << sum << endl;
return 0;
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.