Форум программистов, компьютерный форум CyberForum.ru

Вывод чисел через один - C++

Восстановить пароль Регистрация
 
CAXOPOK
1 / 1 / 0
Регистрация: 29.03.2013
Сообщений: 59
02.04.2014, 17:20     Вывод чисел через один #1
есть задача
1. Прочитать из файла последовательность целых чисел;
2. разделить на две подпоследовательности: положительных и отрицательных чисел (0 считать положительным числом)
3. найти количество значений в каждой подпоследовательности
4. отсортировать каждую из подпоследовательностей по убыванию
5. вывести в файл чередованием элементов подпоследовательностей все значения (пол/отр)
Работу выполнить с помощью контейнера vector STL
первые четыре пункта не вызвали никаких затруднений, а вот 5-ый стал проблемой.
Я сделал нечто подобное:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void out(vector<int> positive, vector <int> negative)
{
    ofstream out("output.txt");
    int counter = 0;
    for_each(positive.begin(), positive.end(),[&negative, &out, &counter](int i)
    {
        out << i << ' '; 
        if(counter < negative.size())
        {
            out << negative[counter] << ' ';
        }
        counter++;
    });
    if(negative.size() > positive.size())
    {
        copy(negative.begin() + (negative.size() - positive.size()) , negative.end(), ostream_iterator<int>(out, " "));
    }
    out.close();
}
Препод сказал, что сильно сложно и слишком много букв и надо сделать по другому. Подскажите пожалуйста хотя бы идею как реализовать по другому.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CAXOPOK
1 / 1 / 0
Регистрация: 29.03.2013
Сообщений: 59
04.04.2014, 15:55  [ТС]     Вывод чисел через один #2
И никто ничего не подскажет?
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
04.04.2014, 16:18     Вывод чисел через один #3
C++
1
2
3
4
5
6
7
8
9
10
vector<int>::iterator pIter = positive.begin();
vector<int>::iterator nIter = negative.begin();
vector<int>::iterator pIter_end = positive.end();
vector<int>::iterator nIter_end = negative.end();
while((pIter != pIter_end) && (nIter != nIter_end)) {
    if(pIter != pIter_end)
        out << *pIter++ << ' '; 
    if(nIter != nIter_end)
        out << *nIter++ << ' '; 
}
CAXOPOK
1 / 1 / 0
Регистрация: 29.03.2013
Сообщений: 59
04.04.2014, 16:22  [ТС]     Вывод чисел через один #4
согласен, но не я чуть не дописал условие: нельзя использовать for и while... это очень осложняет ситуацию.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
04.04.2014, 16:26     Вывод чисел через один #5
А что можно?
Только алгоритмы?
CAXOPOK
1 / 1 / 0
Регистрация: 29.03.2013
Сообщений: 59
04.04.2014, 17:00  [ТС]     Вывод чисел через один #6
вся группа уже 2 недели проблему пытается решить, алгоритмы и только
newbie666
Заблокирован
04.04.2014, 17:02     Вывод чисел через один #7
Цитата Сообщение от CAXOPOK Посмотреть сообщение
вся группа уже 2 недели проблему пытается решить, алгоритмы и только
в чём твоя проблема? ты просто не можешь вывести через 1 числа без циклов? Ну выведи их копипастом по очереди )))
CAXOPOK
1 / 1 / 0
Регистрация: 29.03.2013
Сообщений: 59
04.04.2014, 17:14  [ТС]     Вывод чисел через один #8
проблема в том, что есть два вектора заранее не известной длинны один с положительными числами, второй отрицательными ( 0 положительный), надо их вывести в файл (или объединить в один вектор) чередованием +-+- и т.д. проблема в том, что без при использовании for_each в функцию предаётся лишь один элемент, а моя конструкция с лямбда-функцией (когда я докидываю в функцию ещё счётчик и второй вектор) не одобряется преподом. Так вот, как в функцию для for_each передать несколько аргументов, кроме того, который for_each сам отправляет туда (без глобальных переменных)?
newbie666
Заблокирован
04.04.2014, 17:19     Вывод чисел через один #9
что не одобряется? for_each использовать можно или нет?
CAXOPOK
1 / 1 / 0
Регистрация: 29.03.2013
Сообщений: 59
04.04.2014, 17:22  [ТС]     Вывод чисел через один #10
for_each можно, а такую конструкцию внутри него нет [&negative, &out, &counter](int i) {...}
newbie666
Заблокирован
04.04.2014, 17:29     Вывод чисел через один #11
Цитата Сообщение от CAXOPOK Посмотреть сообщение
а такую конструкцию внутри него нет [&negative, &out, &counter](int i) {...}
Использую такую [&] - доступ ко всем внешним переменным
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2014, 17:30     Вывод чисел через один
Еще ссылки по теме:

Вставка одного вектора в другой через один без циклов C++
C++ Вывод сообщений, через один if
C++ Переставить в быстрой сортировке вывод результата так чтобы он выполнялся один раз

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
CAXOPOK
1 / 1 / 0
Регистрация: 29.03.2013
Сообщений: 59
04.04.2014, 17:30  [ТС]     Вывод чисел через один #12
спасибо, попробую
Yandex
Объявления
04.04.2014, 17:30     Вывод чисел через один
Ответ Создать тему
Опции темы

Текущее время: 02:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru