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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
#1

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

04.11.2009, 18:02. Просмотров 1050. Ответов 28
Метки нет (Все метки)

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

Обработка последовательности - C++
Для заданной последовательности слагаемых ряда и вводимых значений x, N и Е необходимо выполнить следующие действия: -найти первый...

Обработка последовательности символов - C++
Задание: В последовательности символов переставить заданную букву со следующей за ней. #include <stdio.h> // подключение библиотеки...

Обработка последовательности символов - C++
На скрине задача. abc готово, но осталось для меня проблемой добавить aba Буду рад помощи еще раз. #include <iostream> #include...

Обработка последовательности символов - C++
Попытался, но не получилось Может кто подскажет, в чем проблема. #include <stdio.h> #include <conio.h> #include...

обработка последовательности символов - C++
1.Даны натуральные числа n и m , символы s1,....,sn (m<n).Получить последовательность символов: sn,s(n-1),....,s(m+1),s1,.....,sm. ...

Обработка элементов последовательности - C++
Дана последовательность целых чисел, в диапазоне от –32000 до 32000, индикатор окончания – число 99999. Предложите набор из 2 тестовых...

28
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
07.11.2009, 18:18 #16
Dipso,
C++
1
2
3
vector<int>a(10);
for (int i = 0 ; i < a.size() ; i++)
cin>>a[i];
0
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
07.11.2009, 18:22  [ТС] #17
Я ввожу, но мне надо отсечь лишние элементы уже на этаппе ввода, (на 1-й странице пример того что надо отсечь)

Добавлено через 3 минуты
например я ввожу что мне надо ввести 5 элементов : 1 2 0 7 3
а при следующем запуске мне надо ввести например 3 элемента 1 6 0
вот проблема как раз в том чтобы вводить нефиксированное количество элементов
отсекая все лишние 0 в этом массиве из 254 элементов, задавая каждый раз количество элементов с клавиатуры
0
SONNY
8 / 8 / 0
Регистрация: 30.05.2009
Сообщений: 47
07.11.2009, 18:36 #18
попробуйте std::transform
0
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
07.11.2009, 18:38  [ТС] #19
Я не так хорошо знаю С, я его начинаю изучать, так что со стандартными функциями тоже неособо знаком, если трудно напишите как ее использовать
0
SONNY
8 / 8 / 0
Регистрация: 30.05.2009
Сообщений: 47
07.11.2009, 18:50 #20
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<typename _InIt, typename _OutIt, typename _Pr> _OutIt copy_if( _InIt first, _InIt last, _OutIt dest, _Pr pred )
{
    for( ; first != last; ++first )
        if( pred(*first) )
            *(dest++) = *first;
    return dest;
}
 
int _tmain( int argc, _TCHAR* argv[] )
{
    std::vector<int> coll;
    copy_if( std::istream_iterator<int>( std::cin ), std::istream_iterator<int>(), std::back_inserter( coll ), std::bind2nd(std::not_equal_to<int>(), 0 ) );
 
}
0
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
07.11.2009, 18:55  [ТС] #21
0о терь бы разобраться что да как и как все это запихнуть в код (в самом начале) чтобы работало.
или есть ли варианты проще чтобы выглядело на экране примерно так :

Введите количество элементов :
5
Введите элементы
1
2
0
5
3
0
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 Для продолжения нажмите любую клавишу . . .
0
SONNY
8 / 8 / 0
Регистрация: 30.05.2009
Сообщений: 47
08.11.2009, 11:48 #23
Зачем вместе использовать статический массив и вектор?
Если удалить нули, то std::vector::erase( std::remove )
0
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;
}
0
SONNY
8 / 8 / 0
Регистрация: 30.05.2009
Сообщений: 47
08.11.2009, 12:32 #25
Смести итератор на n
0
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
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 )
1
Dipso
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 25
08.11.2009, 12:56  [ТС] #28
Огроменное спасибо
0
шурави
0 / 0 / 0
Регистрация: 31.10.2009
Сообщений: 3
08.11.2009, 12:56 #29
проверте на наличие ошибок
0
Вложения
Тип файла: doc программирование.doc (39.0 Кб, 23 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2009, 12:56
Привет! Вот еще темы с ответами:

Обработка числовой последовательности - C++
Только начали изучать С++ сразу влипили задачу на обработку числовой последовательности), давали понять что легкая но я как то с этим не...

Обработка последовательности символов - C++
Здравствуйте, помогите пожалуйста разобраться. Условие: Даны символы S1,S2,… Известно, что символ S1 отличен от ! и что среди S2,S3…...

обработка последовательности символов (C++ Builder 6) - C++
Всем привет, помогите довести до ума программу. Вроде все есть, а считает не то что нужно. Вобщем задание: Определять в тексте...

Обработка последовательности без использования массива (использовать (do while) - C++
Дан набор ненулевых целых чисел; признак его завершения — число 0. Вывести сумму всех положительных четных чисел из данного набора. Если...


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

Или воспользуйтесь поиском по форуму:
29
Yandex
Объявления
08.11.2009, 12:56
Ответ Создать тему
Опции темы

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