Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2010, 23:30   #1
saidmir
Пользователь
 
Аватар для saidmir
 
Регистрация: 04.07.2010
Сообщений: 19
По умолчанию суммирование элементов вектора

привет всем еще раз

у меня проблема тут такая не кк не могу придумать цикл
пробовал и так:
Код:
for (i=0;i<sp.size();++i) {
        p=p+sp[i].stoimost;
    }
и так
Код:
for (i=0;i<sp.capacity();++i) {
        p=p+sp[i].stoimost;
    }
но не чего не получается, выдает вот, что
aidmir@alexmertvdesktop:~/cpp_prog/1st_otchet$ g++ poleznaya.cpp -o polez
saidmir@alexmertvdesktop:~/cpp_prog/1st_otchet$ ./polez
Введите продукт мясо
Введите стоимость продукта 25
Продолжать (y/n)? y
Введите продукт мука
Введите стоимость продукта 25
Продолжать (y/n)? n
100
Вы потратели 431929885
saidmir@alexmertvdesktop:~/cpp_prog/1st_otchet$


не понятно мне как быть в таких ситуациях
поясните подробнее
гуглить устал уже
Кто я в этом деле?
Хотелось писать под Mac OS X, но необходимость писать под Windows тоже интересное занятие...
saidmir вне форума Ответить с цитированием
Старый 21.08.2010, 23:53   #2
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Помоему так логичнее будет, если конечно элементы массива числа, а не как у тебя.
Код:
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;

int main() {
    int a[] = {1,2,3,4,5};
    vector<int> varray(a,a+5);
    cout<<accumulate(varray.begin(), varray.end(), 0)<<endl;
    return 0;
}

Последний раз редактировалось the_deer_one; 21.08.2010 в 23:56.
the_deer_one вне форума Ответить с цитированием
Старый 21.08.2010, 23:59   #3
saidmir
Пользователь
 
Аватар для saidmir
 
Регистрация: 04.07.2010
Сообщений: 19
По умолчанию

Цитата:
Сообщение от the_deer_one Посмотреть сообщение
Помоему так логичнее будет, если конечно элементы массива числа, а не как у тебя.
Код:
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;

int main() {
    int a[] = {1,2,3,4,5};
    vector<int> varray(a,a+5);
    cout<<accumulate(varray.begin(), varray.end(), 0)<<endl;
    return 0;
}
вроде понял
но в моем случае по моему лучше будет пере присвоить одну часть вектора на другой вектор

попробую просуммировать и отпишусь

спасибо
Кто я в этом деле?
Хотелось писать под Mac OS X, но необходимость писать под Windows тоже интересное занятие...
saidmir вне форума Ответить с цитированием
Старый 22.08.2010, 01:21   #4
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

saidmir
Цитата:
но в моем случае по моему лучше будет пере присвоить одну часть вектора на другой вектор
Можно обойтись и без этого.

Вот твой вариант c объектами-продуктами в векторе.
Код:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

class product {
    public:
    string name;
    int   price;
    product(string name,int price) : name(name), price(price)
    {/*empty*/}
};

int sum = 0;
void conk(product n) {
    sum += n.price;
}

int main() {
vector<product> warehouse;

product *cell = new product("fish",10);
warehouse.push_back(*cell);
cell = new product("dog",7);
warehouse.push_back(*cell);
cell = new product("catgirl",13);
warehouse.push_back(*cell);

for_each(warehouse.begin(),warehouse.end(), conk);
cout << sum;

return 0;
}
P.S. Целый час блин пытался реализовать это как лямбда функцию, но g++ зараза не хочет это компилировать. Пришлось оставить без извращений.
the_deer_one вне форума Ответить с цитированием
Старый 22.08.2010, 11:02   #5
saidmir
Пользователь
 
Аватар для saidmir
 
Регистрация: 04.07.2010
Сообщений: 19
По умолчанию

Это работает вот так

saidmir@alexmertvdesktop:~/cpp_prog/1st_otchet$ ./polez
Введите продукт fg
Введите стоимость продукта 25
Продолжать (y/n)? y
Введите продукт gj
Введите стоимость продукта 25
Продолжать (y/n)? n
297416066

откуда такая цифра не понятно
а так то, что я написал и то что предложили вы одинаково

я пытался менять 100 на 2, но все равно

вот код:

Код:
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

char a=0;
int p;
int j;

struct product {
   string produkt;
   int st;
};

bool q();
void vp(int i);
void summ(product i);
void print();
vector<product> sp(100);


int main () {
    vp(j);
    p=0;
    for_each(sp.begin(),sp.end(),summ);
    cout<<p<<"\n";;
    return 0;
}

bool q() {
    cout<<"Продолжать (y/n)?\t";
    cin>>a;
    switch (a) {
        case 'y':
            return true;
        case 'n':
            return false;
        default:
            return false;
    };
}

void vp(int i) {
    do {
        cout<<"Введите продукт\t";
        cin>>sp[i].produkt;
        cout<<"Введите стоимость продукта\t";
        cin>>sp[i].st;
        i++;
    }
    while (q()!=false);
}

void summ (product i) {
//    cout<<sp.size()<<"\n";
    p+=i.st;
}

p.s. администрация, не подумайте, что это какая то лаба или еще, что то в этом роде
я изучаю язык самостоятельно дома своими силами не на какие курсы не хожу, все что придумываю то и пытаюсь написать
все самое простое написал а вот что посложнее не идет не как

Спасибо огромное за помощь
Кто я в этом деле?
Хотелось писать под Mac OS X, но необходимость писать под Windows тоже интересное занятие...
saidmir вне форума Ответить с цитированием
Старый 22.08.2010, 11:23   #6
ThisIzGame
Форумчанин
 
Регистрация: 31.08.2009
Сообщений: 161
По умолчанию

Цитата:
vector<product> sp(100);
Ты здесь создал вектор из 100 элементов...далее ты, допустим ввёл 2 продукта, первые 2 элемента вектора у тебя нормально инициализировались, остальные по-прежнему остались не инициалированными, поэтому при суммировании у тебя получается такое число...вот смотри - я изменил, vector<product> sp(100); на vector<product> sp(1); ввёл один продукт, программа работает нормально...
http://i072.radikal.ru/1008/32/392d2eb8e948.jpg
и совет: лучше вместо этого:
Код:
cout<<"Введите продукт\t";
        cin>>sp[i].produkt;
        cout<<"Введите стоимость продукта\t";
        cin>>sp[i].st;
сделай что-нибудь вроде этого:
Код:
product temp;
cout<<"Введите продукт\t";
        cin>>temp.produkt;
        cout<<"Введите стоимость продукта\t";
        cin>>temp.st;
        sp.push_back(temp);
так у тебя вектор автоматически будет расширяться(изменять размер)

Последний раз редактировалось ThisIzGame; 22.08.2010 в 11:39.
ThisIzGame вне форума Ответить с цитированием
Старый 22.08.2010, 12:09   #7
saidmir
Пользователь
 
Аватар для saidmir
 
Регистрация: 04.07.2010
Сообщений: 19
По умолчанию

Цитата:
Сообщение от ThisIzGame Посмотреть сообщение
сделай что-нибудь вроде этого:
Код:
product temp;
cout<<"Введите продукт\t";
        cin>>temp.produkt;
        cout<<"Введите стоимость продукта\t";
        cin>>temp.st;
        sp.push_back(temp);
так у тебя вектор автоматически будет расширяться(изменять размер)
вектор не расширяется а выдает опять таки белиберду в сумме

saidmir@alexmertvdesktop:~/cpp_prog/1st_otchet$ ./polez
Введите продукт gh
Введите стоимость продукта 5
Продолжать (y/n)? y
Введите продукт cmv,
Введите стоимость продукта 5
Продолжать (y/n)? n
Вы потратели 134513482

saidmir@alexmertvdesktop:~/cpp_prog/1st_otchet$ ./polez
Введите продукт g
Введите стоимость продукта 5
Продолжать (y/n)? n
Вы потратели 134513477

написал вот так

Код:
void vp(int i) {
    product temp;
    do {
        cout<<"Введите продукт\t";
        cin>>temp.produkt;
        cout<<"Введите стоимость продукта\t";
        cin>>temp.st;
        sp.push_back(temp);
        i++;
    }
    while (q()!=false);
}

void sum (int i) {
    while (i<sp.size()) {
        p+=sp[i].st;
        i++;
    }
}
Кто я в этом деле?
Хотелось писать под Mac OS X, но необходимость писать под Windows тоже интересное занятие...
saidmir вне форума Ответить с цитированием
Старый 22.08.2010, 20:23   #8
saidmir
Пользователь
 
Аватар для saidmir
 
Регистрация: 04.07.2010
Сообщений: 19
По умолчанию

все вопрос решил

вот окончательный код:

Код:
saidmir@alexmertvdesktop:~/cpp_prog/1st_otchet$ cat poleznaya.cpp 
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

char a=0;
int j;
int p;

struct product {
   string produkt;
   int st;
} pr;

bool q();
void vp(int i);
int summ();
void print();
vector<product> sp;

int main () {
    vp(j);
    summ();
    print();
    return 0;
}

bool q() {
    cout<<"Продолжать (y/n)?\t";
    cin>>a;
    switch (a) {
        case 'y':
            return true;
        case 'n':
            return false;
        default:
            return false;
    };
}

void vp(int i) {
    do {
        cout<<"Введите продукт\t";
        cin>>pr.produkt;
        cout<<"Введите стоимость продукта\t";
        cin>>pr.st;
        sp.push_back(pr);
        //i++;
    }
    while (q()!=false);
}

int summ () {
    p=0;
    for (int i=0;i<(int)sp.size();i++) {
        p+=sp[i].st;
    }
    return p;
}

void print() {
    cout<<"Вы потратели\t"<<p<<"\n";
}

saidmir@alexmertvdesktop:~/cpp_prog/1st_otchet$
Всем спасибо за помощь
Кто я в этом деле?
Хотелось писать под Mac OS X, но необходимость писать под Windows тоже интересное занятие...
saidmir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описать функцию zero1(x), значением которой является первый из элементов вектора x, ссылающихс на число 0 polarity Помощь студентам 4 31.05.2010 13:03
Сортировка элементов вектора m9yt Общие вопросы C/C++ 1 28.04.2010 18:13
вычислить среднее гармоническое значение элементов вектора чисел с плав точкой с пом алгоритма accumulate -GT- Общие вопросы C/C++ 2 28.11.2009 17:19
Сформировать вектор Х из тех элементов вектора А, сумма цифр которых в десятичной записи больше заданного Dimati87 Помощь студентам 1 06.03.2009 14:36
Суммирование элементов массива в макросе IgorKr Общие вопросы C/C++ 1 14.04.2008 01:22