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

обработка последовательности - C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
04.11.2009, 18:02     обработка последовательности #1
Доброе время суток) Начинаю изучать С++, но лучше всего конечно же понимаю на примерах.
Прошу помочь с такими задачами :
1) Дана последовательность из n целых элементов. Сжать последовательность, удалив из нее все нулевые элементы, затем отсортировать ее по убыванию. Вывести на экран исходную последовательность до сжатия, после сжатия и после сортировки.
2) Та же задача, только вместо псоледовательности было бы задано число.
Например : 52045306
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2009, 18:02     обработка последовательности
Посмотрите здесь:

C++ Обработка элементов последовательности
обработка последовательности символов C++
C++ Обработка последовательности без использования массива (использовать (do while)
Обработка последовательности символов C++
Обработка числовой последовательности C++
обработка последовательности символов (C++ Builder 6) C++
C++ Обработка последовательности символов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
07.11.2009, 18:55  [ТС]     обработка последовательности #21
0о терь бы разобраться что да как и как все это запихнуть в код (в самом начале) чтобы работало.
или есть ли варианты проще чтобы выглядело на экране примерно так :

Введите количество элементов :
5
Введите элементы
1
2
0
5
3
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
08.11.2009, 11:40  [ТС]     обработка последовательности #22
Вот сам код того что есть :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using std::vector;
using std::cout;
using std::cin;
using std::endl;
using std::remove;
using std::sort;
using std::greater;
 
int main()
{
        setlocale(LC_ALL,"RUSSIAN");
        int i,n,arr[254]={0};
        cout<<"Введите количество элементов последовательности"<<endl;
        cin>>n;
        cout<<"Введите элементы последовательности"<<endl;
        for (i=0;i<n;i++)
        {
        cin>>arr[i];
        }
        vector<int>a(arr,arr+sizeof(arr)/sizeof(*arr));
        vector<int>::iterator pos = remove(a.begin(),a.end(),0);
        cout<<"последовательность:"<<endl;
        /*for (vector<int>::iterator it = a.begin() ; it!=a.end() ; ++it)
                cout<<*it<<' ';
            cout<<endl;*/
       for (vector<int>::iterator it = a.begin() ; it!=3 ; ++it)
       {if (*it==0) break;
           cout<<*it<<' ';
       }
            cout<<endl;
        vector<int>::iterator pos = remove(a.begin(),a.end(),0);
        cout<<"последовательность без нулей:"<<endl;
        for (vector<int>::iterator it = a.begin() ; it!=pos ; ++it)
                cout<<*it<<' ';
            cout<<endl;
        sort(a.begin(),pos,greater<int>());
        cout<<"отсортированная последовательность:"<<endl;
        for (vector<int>::iterator it = a.begin() ; it!=pos ; ++it)
                cout<<*it<<' ';
        system ("pause");
        return 0;
}
но проблема как раз в том чтобы отсечь нули (отмеченные красным), чтобы осталось просто 1 2 0 5 :

Введите количество элементов последовательности
4
Введите элементы последовательности
1
2
0
5
последовательность:
1 2 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0

последовательность без нулей:
1 2 5
отсортированная последовательность:
5 2 1 Для продолжения нажмите любую клавишу . . .
SONNY
8 / 8 / 0
Регистрация: 30.05.2009
Сообщений: 47
08.11.2009, 11:48     обработка последовательности #23
Зачем вместе использовать статический массив и вектор?
Если удалить нули, то std::vector::erase( std::remove )
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
08.11.2009, 12:12  [ТС]     обработка последовательности #24
Точнее сказать как убрать на выводе самого вектора, чтобы показывал не все элементы а n заданных, т.е. чтобы на выводе не показывал элементы,выходящие за пределы заданного значения количества элементов.
Извиняюсь тестовый код случайно написал вместо исходного :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using std::vector;
using std::cout;
using std::cin;
using std::endl;
using std::remove;
using std::sort;
using std::greater;
 
int main()
{
        setlocale(LC_ALL,"RUSSIAN");
        int i,n,arr[254]={-999};
        cout<<"Введите количество элементов последовательности"<<endl;
        cin>>n;
        cout<<"Введите элементы последовательности"<<endl;
        for (i=0;i<n;i++)
        {
        cin>>arr[i];
        }
        vector<int>a(arr,arr+sizeof(arr)/sizeof(*arr));
 
        cout<<"последовательность:"<<endl;
        for (vector<int>::iterator it = a.begin() ; it!=a.end() ; ++it)
                cout<<*it<<' ';
            cout<<endl;
        vector<int>::iterator pos = remove(a.begin(),a.end(),0);
        cout<<"последовательность без нулей:"<<endl;
        for (vector<int>::iterator it = a.begin() ; it!=pos ; ++it)
                cout<<*it<<' ';
            cout<<endl;
        sort(a.begin(),pos,greater<int>());
        cout<<"отсортированная последовательность:"<<endl;
        for (vector<int>::iterator it = a.begin() ; it!=pos ; ++it)
                cout<<*it<<' ';
        system ("pause");
        return 0;
}
SONNY
8 / 8 / 0
Регистрация: 30.05.2009
Сообщений: 47
08.11.2009, 12:32     обработка последовательности #25
Смести итератор на n
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
08.11.2009, 12:36  [ТС]     обработка последовательности #26
заменил
for (vector<int>::n/*iterator*/ it = a.begin() ; it!=a.end() ; ++it)

но результат все тот же :

Введите количество элементов последовательности
5
Введите элементы последовательности
1
2
3
4
5
последовательность:
1 2 3 4 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
SONNY
8 / 8 / 0
Регистрация: 30.05.2009
Сообщений: 47
08.11.2009, 12:52     обработка последовательности #27
C++
1
2
std::vector<int>::iterator pos_b( a.begin() ), pos_e( a.begin() );
for ( std::advance( pos_e, n ) ; pos_b != pos_e ; ++pos_b )
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
08.11.2009, 12:56  [ТС]     обработка последовательности #28
Огроменное спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2009, 12:56     обработка последовательности
Еще ссылки по теме:

Обработка последовательности символов C++
Обработка последовательности символов C++
Обработка последовательности C++
В последовательности Фибоначчи найти индекс члена последовательности, удовлетворяющего условию C++
C++ Найти, сколько членов первой последовательности совпадает с членами второй последовательности

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

Или воспользуйтесь поиском по форуму:
шурави
0 / 0 / 0
Регистрация: 31.10.2009
Сообщений: 3
08.11.2009, 12:56     обработка последовательности #29
проверте на наличие ошибок
Вложения
Тип файла: doc программирование.doc (39.0 Кб, 23 просмотров)
Yandex
Объявления
08.11.2009, 12:56     обработка последовательности
Ответ Создать тему
Опции темы

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