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

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

Войти
Регистрация
Восстановить пароль
 
filimoncc
1 / 1 / 1
Регистрация: 02.12.2013
Сообщений: 104
#1

Дана последовательность целых чисел. Вставить новый элемент перед всеми четными элементами - C++

09.06.2014, 23:23. Просмотров 808. Ответов 9
Метки нет (Все метки)

Дана последовательность целых чисел. Вставить новый элемент перед всеми четными элементами
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 <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    setlocale (LC_ALL, "");
    
vector <int> vec; 
 
int x,n;
char c;
cout<< "Ââåäèòå ÄëèГ*Гі ïîñëåäîâГ*òåëüГ*îñòè n = "; cin >> n ; 
for (int i=0;i<n;i++)
{
cout<<"Ââåäèòå ÷èñëî äëÿ ýëåìåГ*ГІГ* ïîñëåäîâГ*òåëüГ*îñòè В№ "<< i+1<<endl; 
cin>> x;
vec.push_back(x);
}
cout<<"Ââåäèòå Г*îâûé ýëåìåГ*ГІ ÷èñëîì, êîòîðîå ГўГ±ГІГ*ГўГЁГ¬ ïåðåä Г·ГҐГІГ*ûìè ýëåìåГ*ГІГ*ìè:"<<endl;
cin>>c;
//ïðîâåðÿåì Г*Г* Г·ГҐГІГ*îñòü ГЄГ*æäûé ýëåìåГ*ГІ
int f=n;//õðГ*Г*ГЁГ¬ çäåñü Г°Г*çìåð âåêòîðГ*
for (vector <int>::iterator iter=vec.begin();iter<vec.end();iter++)
{
    if (vec[*iter]%2==0)
    {
        vec.insert(*iter, c);
        f++;
}
}
//âûâîäèì òî, ÷òî ïîëó÷èëîñü
cout<<"Âîò ÷òî ïîëó÷èëîñü: "<<endl;
for (int i=0;i<f;i++)
{
    
    cout<<vec[i]<<" ";
        
}
return 0;
}
Почему выдает ошибку компиляции?

Добавлено через 31 секунду
Указывается ошибка в строке 29, объясните что не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2014, 23:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дана последовательность целых чисел. Вставить новый элемент перед всеми четными элементами (C++):

Вставить новый элемент, перед всеми чётными элементами одномерного массива - C++
3)В одномерном массив, элементы которого целые числа, произвести следующие действия: вставить новый элемент, перед всеми четными элементами

Вставить новый элемент, перед всеми нечётными элементами одномерного массива - C++
Вставить новый элемент, перед всеми нечётными элементами одномерного массива.

В одномерном массиве из целых чисел вставить новый элемент между всеми парами элементов, имеющими разные знаки - C++
одномерном массиве из целых чисел вставить новый элемент между всеми парами элементов,имеющими разные знаки

Используя класс-контейнер vector, вставить элемент х перед всеми минимальными элементами - C++
Используя класс-контейнер vector, вставить элемент х перед всеми минимальными элементами Вход: x=0 1 2 3 1 4 5 6 7 8 9 Выход: 0...

Массивы. Вставить значение a перед всеми элементами, кратными а - C++
Вот условие задачи. Дан массив из N положительных элементов, больших 1 (2&lt;=N&lt;=100). Вставить значение a перед всеми элементами, кратными...

Дан двумерный массив размером 5 * 8, заполненный случайным образом. Вставить перед всеми строками, первый элемент которых делится на3,вставить.... - C++
Дан двумерный массив размером 5 * 8, заполненный случайным образом. Вставить перед всеми строками, первый элемент которых делится на 3,...

9
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
09.06.2014, 23:51 #2
Цитата Сообщение от filimoncc Посмотреть сообщение
Указывается ошибка в строке 29, объясните что не так?
ну посмотрите консттруктор vector.insert() и поймёте
http://www.cplusplus.com/reference/vector/vector/insert/

1)почему у вас вставляется тип char
2)почему вы разыменываете там итератор?
0
filimoncc
1 / 1 / 1
Регистрация: 02.12.2013
Сообщений: 104
10.06.2014, 00:19  [ТС] #3
Что значит разыменовывается? Поправьте код как надо, не понимаю.
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
10.06.2014, 07:57 #4
Цитата Сообщение от filimoncc Посмотреть сообщение
Что значит разыменовывается? Поправьте код как надо, не понимаю.
только честно - вы этот код нашли или сами написали?
http://www.programmersclub.ru/10/
http://ci-plus-plus-snachala.ru/?p=34
0
chedman
81 / 80 / 2
Регистрация: 30.10.2013
Сообщений: 251
10.06.2014, 08:32 #5
dzrkot прав
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
#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    setlocale (LC_ALL, "");
 
    vector <int> vec;
 
    int x,n;
    char c;
    cout<< "Введите Длину последовательности n = ";
    cin >> n ;
    for (int i=0; i<n; i++)
    {
        cout<<"Введите число для элемента последовательности № "<< i+1<<endl;
        cin>> x;
        vec.push_back(x);
    }
    cout<<"Введите новый элемент числом, которое вставим перед четными элементами:"<<endl;
    cin>>c;
//проверяем на четность каждый элемент
    int f=n;//храним здесь размер вектора
    for (vector <int>::iterator iter=vec.begin(); iter<vec.end(); iter++)
    {
        if (vec[*iter]%2==0)
        {
            vec.insert(iter,(int) c);
            f++;
        }
    }
//выводим то, что получилось
    cout<<"Вот что получилось: "<<endl;
    for (int i=0; i<f; i++)
    {
 
        cout<<vec[i]<<" ";
 
    }
    return 0;
}
1
FraidZZ
Ex-Member
3899 / 1525 / 229
Регистрация: 06.01.2013
Сообщений: 4,050
Завершенные тесты: 1
10.06.2014, 13:18 #6
chedman, как так вы разыменовываете итератор в строке 28?

Добавлено через 6 минут
Код должен быть такой:
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
#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    setlocale (LC_ALL, "");
    
vector <int> vec; 
 
int x,n;
int c;
cout<< "Введите Длину последовательности n = "; cin >> n ; 
for (int i=0;i<n;i++)
{
cout<<"Введите число для элемента последовательности № "<< i+1<<endl; 
cin>> x;
vec.push_back(x);
}
cout<<"Введите новый элемент числом, которое вставим перед четными элементами:"<<endl;
cin>>c;
//проверяем на четность каждый элемент
int f=n;//храним здесь размер вектора
for (vector <int>::iterator iter=vec.begin();iter != vec.end(); iter++)
{
    if (!(*iter % 2))
    {
        vec.insert(iter, c);
        f++;
        iter++;
}
}
//выводим то, что получилось
cout<<"Вот что получилось: "<<endl;
for (int i=0;i<f;i++)
{
    
    cout<<vec[(unsigned int)i]<<" ";
        
}
return 0;
}
Вкратце, у вас (ТС) ошибки: в строке 28 - использование конструкции vec[*iter], когда нужен *iter; Ошибка в строке 29 с методом insert, а также очень хитрая ошибка с тем, что после вставки числа нужно провести инкремент оператора (в моем коде это строка iter++ после f++). И, конечно, в идеале, переменную f не нужно использовать, а вывод вектора сделать опять же через итераторы, а не индексирование.
0
FraidZZ
Ex-Member
3899 / 1525 / 229
Регистрация: 06.01.2013
Сообщений: 4,050
Завершенные тесты: 1
10.06.2014, 13:24 #7
Вот результат работы программы:
Дана последовательность целых чисел. Вставить новый элемент перед всеми четными элементами
0
filimoncc
1 / 1 / 1
Регистрация: 02.12.2013
Сообщений: 104
10.06.2014, 15:00  [ТС] #8
Программа запускается и начинает принимать данные и работать до 34 строки. Почему дальше не работает? У меня лично зависает консоль и выдается ошибка.

Добавлено через 14 минут
FraidZZ, спасибо, все работает. Только непонятно зачем делать инкремент в 31 строке? (Однако без этого виснет прога). Объясните, пожалуйста.
0
FraidZZ
Ex-Member
3899 / 1525 / 229
Регистрация: 06.01.2013
Сообщений: 4,050
Завершенные тесты: 1
10.06.2014, 15:11 #9
filimoncc, итератор указывает после вставки на вставленный символ. После инкремента в for он оказывается перед тем самым символом, который только что был обработан. И обрабатывает его бесконечно.
1
filimoncc
1 / 1 / 1
Регистрация: 02.12.2013
Сообщений: 104
10.06.2014, 23:51  [ТС] #10
нашлась еще одна проблема, при размере вектора меньше 3-х элементов, программа так же вылетает.
0
10.06.2014, 23:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2014, 23:51
Привет! Вот еще темы с ответами:

В целочисленной матрице вставить новый столбец перед всеми столбцами, в которых встречается заданное число - C++
У нас нету времени,мне нужен код:umnik:Забыл сказать,в двумерном массиве,элементы целые числа

Дана последовательность из n целых чисел. Найти минимальный элемент в этой последовательности. - C++
помогите пожалуйста решить задачку!!! Дана последовательность из n целых чисел. Найти минимальный элемент в этой последовательности. ...

Дана последовательность целых чисел. Удалитьиз массива каждый k-тый по счету элемент - C++
Дана последовательность целых чисел. Удалитьиз массива каждый k-тый по счету элемент.

Дана последовательность целых чисел. Удалитьиз массива каждый k-тый по счету элемент - C++
Дана последовательность целых чисел. Удалитьиз массива каждый k-тый по счету элемент.


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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