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

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

Восстановить пароль Регистрация
 
avers_
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 19
22.11.2014, 17:42     Контейнер list #1
Добрый день!
Помогите пожалуйста разобраться, никогда раньше не работал с листом.
Задача следующая: В числовой последовательности вставить после каждого простого числа удвоенное среднее геометрическое всех элементов последовательности. Реализация при помощи 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)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
22.11.2014, 17:55     Контейнер list #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  [ТС]     Контейнер list #3
Цитата Сообщение от nmcf Посмотреть сообщение
И что, эти циклы у тебя работают? Должно быть для прохождения по списку:
C++
1
2
for (it i = q.begin(); i != q.end(); ++i)
        sum+=*i;
В том то и дело что не работают, контейнеры и итераторы для меня как темный лес)
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
22.11.2014, 17:59     Контейнер list #4
Я там слегка исправил.
avers_
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 19
22.11.2014, 18:01  [ТС]     Контейнер list #5
Цитата Сообщение от nmcf Посмотреть сообщение
Я там слегка исправил.
Спасибо!
А как мне такой for записать: for (int i=size-2; i>=0; i--)
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
22.11.2014, 18:32     Контейнер list #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  [ТС]     Контейнер list #7
Если честно, то код писался для очереди, но нужно переделать его под лист...
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
22.11.2014, 18:47     Контейнер list #8
Ну вот смотри как я написал. Пробуй.
avers_
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 19
22.11.2014, 19:21  [ТС]     Контейнер list #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
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
22.11.2014, 19:25     Контейнер list #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  [ТС]     Контейнер list #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
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
22.11.2014, 19:30     Контейнер list #12
Ну так будет вставлять перед, а не после.
avers_
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 19
22.11.2014, 19:35  [ТС]     Контейнер list #13
Вот что пишет:
Миниатюры
Контейнер list  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2014, 07:57     Контейнер list
Еще ссылки по теме:

Контейнеры (функция, которая бы помогла отсортировать контейнер List) C++
C++ В одномерном массиве посчитать сумму элементов до последнего нулевого значения. Использовать контейнер - List
Тип значения в контейнере map - контейнер list C++

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

Или воспользуйтесь поиском по форуму:
avers_
0 / 0 / 0
Регистрация: 13.11.2014
Сообщений: 19
23.11.2014, 07:57  [ТС]     Контейнер list #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;
}
Yandex
Объявления
23.11.2014, 07:57     Контейнер list
Ответ Создать тему
Опции темы

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