Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

_Ayl_
Статус: Студент
Рейтинг: 1419
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 1142
∙ повысить рейтинг »
Micren
Статус: Бакалавр
Рейтинг: 1004
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / C/C++

Номер выпуска:1421
Дата выхода:11.11.2009, 21:30
Администратор рассылки:Dr_Andrew, Старший модератор
Подписчиков / экспертов:674 / 176
Вопросов / ответов:1 / 2
IRC-канал по теме:#C

Вопрос № 174020: здравствуйте помогите пожалуйста написать прогу. В одномерном массиве ,состоящем из n вещественных элементов вычислить: минимальный элемент массива сумму элементов массива, расположенных между первым и последним положительными элементами. ...



Вопрос № 174020:

здравствуйте помогите пожалуйста написать прогу.
В одномерном массиве ,состоящем из n вещественных элементов вычислить:
минимальный элемент массива
сумму элементов массива, расположенных между первым и последним положительными элементами. Преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом - все остальные. нужно в приложении под windows, можно в консоли(с++)

Отправлен: 06.11.2009, 21:18
Вопрос задал: Nastenka
Всего ответов: 2
Страница вопроса »


Отвечает Micren, Бакалавр :
Здравствуйте, Nastenka.
Программа. C++. Microsoft Visual Studio 2008.
Код:
#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

Ответ отправил: Micren, Бакалавр
Ответ отправлен: 06.11.2009, 22:54

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 256235 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает leonid59, Студент :
    Здравствуйте, Nastenka.
    Ответ в приложении.

    Исправлено по просьбе автора.
    -----
    ∙ Отредактировал: sir Henry, Старший модератор
    ∙ Дата редактирования: 07.11.2009, 12:14 (время московское)

    Приложение:

    Ответ отправил: leonid59, Студент
    Ответ отправлен: 07.11.2009, 00:06

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 256238 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.10 от 26.10.2009

    В избранное