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

RFpro.ru: Алгоритмы и теория программирования


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

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

Лучшие эксперты данной рассылки

Асмик Александровна
Статус: Академик
Рейтинг: 7400
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2645
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2333
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Алгоритмы и теория программирования

Номер выпуска:134
Дата выхода:05.03.2011, 00:00
Администратор рассылки:lamed (Профессор)
Подписчиков / экспертов:378 / 169
Вопросов / ответов:1 / 1

Вопрос № 182324: Здравствуйте, уважаемые эксперты! Прошу вас решить вот такую задачу с блок-схемой: Дан n-мерный вектор x=(x1, X2, ...,Xn).Написать программу, которая представляет компоненты вектора x так,чтобы в начале стояли положительные, затем нулевые и отрицате...



Вопрос № 182324:

Здравствуйте, уважаемые эксперты! Прошу вас решить вот такую задачу с блок-схемой: Дан n-мерный вектор x=(x1, X2, ...,Xn).Написать программу, которая представляет компоненты вектора x так,чтобы в начале стояли положительные, затем нулевые и отрицательные в порядке их следования. Спасибо,буду очень благодарен.

Отправлен: 27.02.2011, 23:16
Вопрос задал: se-95 (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает Micren (Профессор) :
Здравствуйте, se-95!
Программа.C++.Компилировал GCC.
Код:
/* 
* File: main.cpp
* Author: Micren
*
* Created on 27 Февраль 2011 г., 22:48
*/

#include <iostream>
#include <vector>
#include <locale>
#include <cstdlib>
#include <ctime>

using namespace std;

// Количество элементов в векторе
const size_t COUNT = 20;

// Тип данных
typedef int data_t;

// Констанды для генератора элементов вектора
const data_t MIN = -20.0;
const data_t MAX = 20.0;

// Тип-вектор
typedef vector<data_t> vec_t;

class comparer;

// Генерирует вектор размером count
vec_t gene rate(size_t count);
// Оператор вывода для вектора
template<class T> basic_ostream<T> & operator<<(basic_ostream<T>& stream, const vec_t& right);
// Ф-я сортировки
void msort(vec_t::iterator beg, vec_t::iterator end, comparer c);


// Функтор для сравнения элементов

class comparer
{
public:

bool operator()(const data_t& a, const data_t& b)
{
// Условие при котором не требуется переставлять
return (a > 0) || (b < 0) || (a == b);
}
};

/*
*
*/
int main(int argc, char** argv)
{
locale::global(locale(""));

// Наш вектор
vec_t vec = generate(COUNT);
cout << "Исходный вектор:" << endl <<
vec << endl;

// Сортировка
msort(vec.begin(), vec.end(), comparer());

// Вывод результата
cout << "Вектор после перестановки:&q uot; << endl
<< vec << endl;

#ifdef _WIN32
system("pause");
#endif

return 0;
}

// Генерирует вектор размером count

vec_t generate(size_t count)
{
static bool first = true;
// Если 1й раз то установим начальное значение для генератора
if (first)
{
first = false;
srand(time(0));
}

vec_t result;
while (count--)
{
// Собственно генерация с принудительным разбавлением нулями для проверки
result.push_back(rand() % 5 ? static_cast<data_t> (static_cast<double> (rand()) / RAND_MAX * (MAX - MIN) + MIN) : 0);
}
return result;
}

// Оператор вывода для вектора

template<class T>
basic_ostream<T> & operator<<(basic_ostream<T>& stream, const vec_t& right)
{
const ctype<T>& facet = use_facet < ctype < T > & gt; (stream.getloc());
stream << facet.widen('[');
vec_t::const_iterator it = right.begin(), end = right.end();
while (it != end)
{
stream << *it;
if (++it != end)
{
stream << facet.widen(',');
}
}
stream << facet.widen(']');
return stream;
}

// Ф-я сортировки

void msort(vec_t::iterator beg, vec_t::iterator end, comparer c)
{
while (beg != end)
{
// Сравниваем пары соседних элементов
vec_t::iterator t1 = beg, t2 = beg + 1;
while (t2 != end)
{
// Если не порядок
if (!c(*t1, *t2))
{
// Переставим
swap(*t1, *t2);
}
++t1;
++t2;
}
--end;
}
}

Пример работы:
Код:
Исходный вектор:
[-4,0,-6,-18,13,19,0,-8,1,-5,-8,-15,-5,-11,0,12,-11,0,1,4]
Вектор после перестановки:
[13,19,1,12,1,4,0,0,0,0,-4,-6,-18,-8,-5,-8,-15,-5,-11,-11]


Блок-схема: скачать в формате .pdf (43.5 кб)

Ответ отправил: Micren (Профессор)
Ответ отправлен: 28.02.2011, 01:28
Номер ответа: 266026
Украина, Краматорск

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


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

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

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

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

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

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

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



    В избранное