С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
same
0 / 0 / 1
Регистрация: 27.09.2013
Сообщений: 7
1

Работа с двунаправленым списком. STL <list>

04.12.2013, 21:00. Просмотров 708. Ответов 5
Метки нет (Все метки)

Помогите пожалуста найти ошибку..
3) Даны натуральное число n, действительные числа x1,x2,....,xn . Вычислить:
x1*xn+x2*xn-1+...+xn*x1

Моя прога..
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
#include "stdafx.h"
#include <list>
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    list<double> lst;
    list<double>::iterator i;
    list<double>::iterator j;
    int n=0;
    double a;
    cout << "Enter size of list: ";
        cin >> n;
        cout << "Enter elements: "<<endl;
        for (int i=0; i<n; i++)
        {
            cin>>a;
            lst.push_back(a);
        }
        i=lst.begin();
        while (i!=lst.end())
        {
        cout << *i << ' ' ;
        i++;
        }
        
        i=lst.begin();
        j=lst.end();
        double sum=0;
        while (i!=lst.end() && j!=lst.begin())
{           sum+=*i * *j;
        i++;
        j--;
}
        cout<<sum;
        system ("pause");
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2013, 21:00
Ответы с готовыми решениями:

Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком
здравствуйте. помогите разобраться с данной задачей. Даны натуральное число...

Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком
Здравствуйте. Решите пожалуйста задачу: Используя стандартную библиотеку...

Работа с STL list + пропись List.h
Здравствуйте! Помогите, пожалуйста, разобраться с STL list. Нужно сделать...

Работа со списком STL
мне надо как-то обрабатывать данные списка( вставлять, вынимать). как бы сам...

Работа с STL list
Есть некий каталог с 3 переменными (string,string,int), который нужно хранить в...

5
DiffEreD
1442 / 779 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
04.12.2013, 21:47 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <list>
#include <numeric>
 
int main()
{
   std::list<int> l {1, 2, 3, 4, 5, 6};
   std::cout << "Result: "
             << std::inner_product(l.begin(), l.end(), l.rbegin(), 0u)
             << std::endl;
 
   return 0;
}
0
Alex5
1123 / 784 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
04.12.2013, 21:58 3
Цитата Сообщение от same Посмотреть сообщение
j=lst.end();
Если j == lst.end(), то *j не является элементом списка. Для прохода списка от конца к началу используется reverse_iterator
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    // проход списка от конца к началу 
    list<double>::reverse_iterator rj;
    cout << endl;
    cout << " From end to begin : " << endl;
    for( rj=lst.rbegin(); rj!= lst.rend(); rj++ )
    {
        cout << *rj << endl;
    }
 
    i=lst.begin();
    rj=lst.rbegin(); // reverse_iterator указывает на последний элемент списка 
    double sum=0;
    while (i!=lst.end() && rj!=lst.rend() )
    {           
        sum+=*i * *rj;
        i++;
        rj++; // сдвиг reverse_iterator на одну позицию к началу списка 
    }
1
same
0 / 0 / 1
Регистрация: 27.09.2013
Сообщений: 7
05.12.2013, 17:30  [ТС] 4
Спасибо!)
а можешь обьяснить почему нельзя использовать то что у меня?)
0
Alex5
1123 / 784 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
05.12.2013, 19:25 5
same, end() не является последним элементом списка. Это уже за пределами списка - см. рис.
i=lst.begin();
j=lst.end();
double sum=0;
while (i!=lst.end() && j!=lst.begin())
{ sum+=*i * *j;
i++;
j--;
}
В этом коде при входе в цикл j равняется lst.end(). И если попытаться вычислить *j, это приведёт к ошибке.

Вот ещё вариант, как посчитать сумму
C++
1
2
3
4
5
6
7
8
9
10
11
12
    list<double>::iterator i;
    list<double>::iterator j;
    i=lst.begin();
    j=lst.end();
    double sum=0;
    while (i!=lst.end() )
    {
        --j;
        sum+=*i * *j;
        i++;
    }
    cout << "\n  sum == " << sum;
0
Миниатюры
Работа с двунаправленым списком. STL <list>  
same
0 / 0 / 1
Регистрация: 27.09.2013
Сообщений: 7
08.12.2013, 15:51  [ТС] 6
Понял, спасибо!)
0
08.12.2013, 15:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2013, 15:51

Работа с STL <list>
В общем, есть текст, программа выделяет в тексте последовательность введённую с...

Работа с STL. Поменять vector на list
Программа должна быть написана так, чтобы достаточно было заменить в одном...

Как реализовать работу со списком строк и списком цифр в классе List?
Добрый день! Проблема такая Есть класс-список: #include &quot;stdafx.h&quot;...


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

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

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