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

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

Войти
Регистрация
Восстановить пароль
 
avers_
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 19
#1

Контейнер list - C++

22.11.2014, 17:42. Просмотров 559. Ответов 13
Метки нет (Все метки)

Добрый день!
Помогите пожалуйста разобраться, никогда раньше не работал с листом.
Задача следующая: В числовой последовательности вставить после каждого простого числа удвоенное среднее геометрическое всех элементов последовательности. Реализация при помощи STL.
Заранее Спасибо!

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
48
49
50
51
52
53
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <list>
#include <locale.h>
using namespace std;
bool prost(int n);
int main()
{
    setlocale(0,"RUS");
    srand(time(0));
    int elem=10;
    double sred, sum=0;
    list<double>q1;
    list<double>::iterator it;
 
    for (int i = 0; i < elem; i++){
        q1.push_back(rand()%100);
        cout<<*it<<" ";
    }
    int size=q1.size();
    for (int i=0; i<size; i++)
        sum+=*it;
    cout<<endl;
    sred=2*pow(sum, 1./elem);
    cout.precision(3);
    cout<<"Среднее геометрическое число: "<<sred<<"\nРазмер: "<<q1.size()<<endl<<endl;
    q1.push_front(q1.back());
    q1.pop_back();
    for (int i=size-2; i>=0; i--){
        if (prost(q1.back())){
            q1.pop_front();
            q1.push_front(sred);
            q1.push_front(q1.back());
            q1.pop_back();
        }
            else {q1.push_front(q1.back());
                  q1.pop_back();}
            }
    for (int i=0; i<size; i++)
        cout<<*it<<" ";
 
    cout<<endl<<endl<<"Конечный размер: "<<q1.size()<<endl<<endl;
}
bool prost(int n){
  if (n>1){
    for(int i=2;i<=n/2;i++)
        if( (n%i)==0 ) return false;
  }
  else return false;
  return true;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2014, 17:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Контейнер list (C++):

Контейнер list - C++
Дорогие форумчане! Использую в проге list из STL. При попытке ... я даже не знаю как обозвать это, поэтому вот кусок кода функции: ...

Массив, <list>, контейнер - C++
Создать динамический упорядоченный числовой массив. Обеспечить добавление новых чисел с сохранением упорядоченности. //Обязательное...

Контейнер list из указателей объектов - C++
Есть абстрактный класс и производный от него.В производном переопределяется вирт ф-ия draw(). Добавляю в контейнер указатель на объект,...

Контейнер list, вывод содержимого в заданном порядке - C++
Как с помощью двунаправленных итераторов вывести содержимое списка в таком порядке: первый эл-т,последний,второй эл-т,предпоследний и...

Тип значения в контейнере map - контейнер list - C++
Возможно ли использовать следующий код: struct p { int id; }; int main() { map&lt;string, list&lt;p&gt; &gt; m;

Контейнеры (функция, которая бы помогла отсортировать контейнер List) - C++
составить булевскую функцию, которая бы помогла отсортировать контейнер List. контейнер содержит элементы типа string. я эту функцию...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5310 / 4630 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
22.11.2014, 17:55 #2
И что, эти циклы у тебя работают? Должно быть для прохождения по списку:
C++
1
2
for (it = q.begin(); it != q.end(); ++it)
        sum+=*it;
avers_
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 19
22.11.2014, 17:57  [ТС] #3
Цитата Сообщение от nmcf Посмотреть сообщение
И что, эти циклы у тебя работают? Должно быть для прохождения по списку:
C++
1
2
for (it i = q.begin(); i != q.end(); ++i)
        sum+=*i;
В том то и дело что не работают, контейнеры и итераторы для меня как темный лес)
nmcf
5310 / 4630 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
22.11.2014, 17:59 #4
Я там слегка исправил.
avers_
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 19
22.11.2014, 18:01  [ТС] #5
Цитата Сообщение от nmcf Посмотреть сообщение
Я там слегка исправил.
Спасибо!
А как мне такой for записать: for (int i=size-2; i>=0; i--)
nmcf
5310 / 4630 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
22.11.2014, 18:32 #6
А почему в обратном порядке и именно с size-2? В прямом же проще.

Добавлено через 3 минуты
C++
1
2
for (it = q.begin(); it != q.end(); ++it)
    if (prost(*it)) q.insert(it, sred);
avers_
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 19
22.11.2014, 18:33  [ТС] #7
Если честно, то код писался для очереди, но нужно переделать его под лист...
nmcf
5310 / 4630 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
22.11.2014, 18:47 #8
Ну вот смотри как я написал. Пробуй.
avers_
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 19
22.11.2014, 19:21  [ТС] #9
Цитата Сообщение от nmcf Посмотреть сообщение
А почему в обратном порядке и именно с size-2? В прямом же проще.

Добавлено через 3 минуты
C++
1
2
for (it = q.begin(); it != q.end(); ++it)
    if (prost(*it)) q.insert(it, sred);
То есть это замена всего цикла?
C++
1
2
3
4
5
6
7
8
9
10
    for (int i=size-2; i>=0; i--){
        if (prost(q1.back())){
            q1.pop_front();
            q1.push_front(sred);
            q1.push_front(q1.back());
            q1.pop_back();
        }
            else {q1.push_front(q1.back());
                  q1.pop_back();}
            }
nmcf
5310 / 4630 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
22.11.2014, 19:25 #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Нет, немного не так.
C++
1
2
for (it = q.begin(); it != q.end(); ++it)
    if (prost(*it)) q.insert(++it, sred);
Вставка sred после каждого простого числа.
avers_
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 19
22.11.2014, 19:28  [ТС] #11
Цитата Сообщение от nmcf Посмотреть сообщение
Нет, немного не так.
C++
1
2
for (it = q.begin(); it != q.end(); ++it)
    if (prost(*it)) q.insert(++it, sred);
Вставка sred после каждого простого числа.
Вылетает с ошибкой.
Вышло следующее:
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 <iostream>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <list>
#include <locale.h>
using namespace std;
bool prost(int n);
int main()
{
    setlocale(0,"RUS");
    srand(time(0));
    int elem=10;
    double sred, sum=0;
    list<double>q1;
    list<double>::iterator it;
 
    for (it = q1.begin(); it != q1.end(); ++it){
        q1.push_back(rand()%100);
        cout<<*it<<" ";
    }
    int size=q1.size();
    for (it = q1.begin(); it != q1.end(); ++it)
        sum+=*it;
    cout<<endl;
    sred=2*pow(sum, 1./elem);
    cout.precision(3);
    cout<<"Среднее геометрическое число: "<<sred<<"\nРазмер: "<<q1.size()<<endl<<endl;
    q1.push_front(q1.back());
    q1.pop_back();
    for (it = q1.begin(); it != q1.end(); ++it)
    if (prost(*it)) q1.insert(++it, sred);
 
            
    for (it = q1.begin(); it != q1.end(); ++it)
        cout<<*it<<" ";
 
    cout<<endl<<endl<<"Конечный размер: "<<q1.size()<<endl<<endl;
}
bool prost(int n){
  if (n>1){
    for(int i=2;i<=n/2;i++)
        if( (n%i)==0 ) return false;
  }
  else return false;
  return true;
}
nmcf
5310 / 4630 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
22.11.2014, 19:30 #12
Ну так будет вставлять перед, а не после.
avers_
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 19
22.11.2014, 19:35  [ТС] #13
Вот что пишет:
Миниатюры
Контейнер list  
avers_
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 19
23.11.2014, 07:57  [ТС] #14
Цитата Сообщение от avers_ Посмотреть сообщение
Вот что пишет:
Есть идеи что в коде не так?

Добавлено через 3 часа 4 минуты
Проблема решена, сам ступил, вот конечный код:
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
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <list>
#include <locale>
using namespace std;
bool prost(int n);
int main()
{
    setlocale(0,"RUS");
    srand(time(0));
    int elem=10;
    double sred, sum=0;
    list<double>q1;
    list<double>::iterator it;
 
    for (int i=0; i<elem; i++){ q1.push_back(rand()%100);
        cout<<i<<" ";
    }
    int size=q1.size();
    for (it = q1.begin(); it != q1.end(); ++it)
        sum+=*it;
    cout<<endl;
    sred=2*pow(sum, 1./elem);
    cout.precision(3);
    cout<<"Среднее геометрическое число: "<<sred<<"\nРазмер: "<<q1.size()<<endl<<endl;
    q1.push_front(q1.back());
    q1.pop_back();
    for (it = q1.begin(); it != q1.end(); ++it)
    if (prost(*it)) q1.insert(++it, sred);
 
            
    for (it = q1.begin(); it != q1.end(); ++it)
        cout<<*it<<" ";
 
    cout<<endl<<endl<<"Конечный размер: "<<q1.size()<<endl<<endl;
}
bool prost(int n){
  if (n>1){
    for(int i=2;i<=n/2;i++)
        if( (n%i)==0 ) return false;
  }
  else return false;
  return true;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2014, 07:57
Привет! Вот еще темы с ответами:

Используя контейнер std::list, получить заданные выражения - C++
Используя стандартную библиотеку шаблонов STL и класс list по работе с двунаправленным списком, выполнить следующие задачу: Даны...

Используя контейнер std::list, упорядочить заданную последовательность согласно условию - C++
Используя стандартную библиотеку шаблонов STL и класс list по работе с двунаправленным списком, выполнить следующие задачу: Даны...

В одномерном массиве посчитать сумму элементов до последнего нулевого значения. Использовать контейнер - List - C++
не могу сделать...

Ошибка при компиляции undefined reference to `List<int>::List()'| - C++
Доброго времени суток=) столкнулась с такой проблемой нужно написать шаблон класса. При компиляции выдает ошибку undefined reference to...


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

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

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