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

Пары в векторе - C++

Восстановить пароль Регистрация
 
Klun
1 / 1 / 0
Регистрация: 13.09.2012
Сообщений: 38
25.01.2013, 03:56     Пары в векторе #1
Задан вектор в 200 чисел который рандомно заполнен в диапазоне от -50 до 50 . Нужно из этого безобразия получить количество отрицательных и положительных чисел, которые стоят рядом( пример - 9,14,(5,(-5),7),8,4 ). Я с трудом представляю , как это. Мож кто поможет?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4922 / 2665 / 243
Регистрация: 29.11.2010
Сообщений: 7,420
25.01.2013, 04:09     Пары в векторе #2
Обходите по вектору со 2 элемента до конца и, если знак текущего элемента отличается от знака предыдущего, то инкрементируете счетчик.
Klun
1 / 1 / 0
Регистрация: 13.09.2012
Сообщений: 38
25.01.2013, 10:39  [ТС]     Пары в векторе #3
Хм, как вариант стоит попробовать.

Добавлено через 6 часов 17 минут
Народ, а может кто помочь с кодом? Ничего не получается(((
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4922 / 2665 / 243
Регистрация: 29.11.2010
Сообщений: 7,420
25.01.2013, 11:58     Пары в векторе #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
#include <iostream>
#include <vector>
#include <random>
#include <algorithm>
#include <iterator>
 
 
int main()
{
    std::mt19937 gen {std::random_device()() };
    std::uniform_int_distribution<int> uid(-50, 50);
    const int N = 200;
    std::vector<int> v(N);
    std::generate(v.begin(), v.end(), [&uid, &gen] { return uid(gen); } );
    std::copy(v.begin(), v.end(), std::ostream_iterator<int> (std::cout, " ") );
    bool positive = (*v.begin() >= 0);
    int counter = 0;
    std::for_each(v.begin() + 1, v.end(), [&positive, &counter](int x)
    {
        bool tickPositive = (x >= 0);
        if (positive != tickPositive)
            counter++;
        positive = tickPositive;
    } );
    std::cout << std::endl << "Counter: " << counter << std::endl;
}
http://liveworkspace.org/code/h68Jg
sunny2013
0 / 0 / 0
Регистрация: 25.01.2013
Сообщений: 6
25.01.2013, 12:15     Пары в векторе #5
MrGluck, спасибо на ссылку на замечательный ресурс!
Klun
1 / 1 / 0
Регистрация: 13.09.2012
Сообщений: 38
25.01.2013, 19:09  [ТС]     Пары в векторе #6
А можно тоже самое , только при помощи функций "for"?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4922 / 2665 / 243
Регистрация: 29.11.2010
Сообщений: 7,420
25.01.2013, 21:45     Пары в векторе #7
Klun, конечно.
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
#include <iostream>
#include <vector>
#include <random>
#include <algorithm>
#include <iterator>
 
 
int main()
{
    std::mt19937 gen {std::random_device()() };
    std::uniform_int_distribution<int> uid(-50, 50);
    const int N = 20;
    std::vector<int> v(N);
    std::generate(v.begin(), v.end(), [&uid, &gen] { return uid(gen); } );
    std::copy(v.begin(), v.end(), std::ostream_iterator<int> (std::cout, " ") );
    bool positive = (*v.begin() >= 0);
    int counter = 0;
    for (std::vector<int>::iterator it = v.begin() + 1; it != v.end(); ++it)
    {
        bool tickPositive = (*it >= 0);
        if (positive != tickPositive)
            counter++;
        positive = tickPositive;
    }
    std::cout << std::endl << "Counter: " << counter << std::endl;
}
http://liveworkspace.org/code/h68Jg
Klun
1 / 1 / 0
Регистрация: 13.09.2012
Сообщений: 38
25.01.2013, 22:36  [ТС]     Пары в векторе #8
Эм... Хэхэ. Я имел введу примерно в таком виде:
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
 
using namespace std;
 
 
int funsum1(int*, int*, int*, int*, int*);
int funsum2(int*, int*, int*, int*, int*);
int funsum3(int*, int*, int*, int*, int*);
int funmaxsum4(int*, int*, int*);
int main()
{
    int p1, p2, p3, p4, p5, sum1, sum2, sum3;
 
    cout<<"Vvedite 5 chisel cherez probel:"<<endl;
 
 
    cin>> p1 >> p2 >>  p3 >>  p4 >>  p5 ;
 
 
    sum1 = funsum1(&p1, &p2, &p3, &p4, &p5);
    sum2 = funsum2(&p1, &p2, &p3, &p4, &p5);
    sum3 = funsum3(&p1, &p2, &p3, &p4, &p5);
 
    cout<<funmaxsum4(&sum1, &sum2, &sum3);
 
return 0;
}
 
int funsum1(int*p1lok, int*p2lok, int*p3lok, int*p4lok, int*p5lok){
int sum1;
int pf1, pf2, pf3, pf4, pf5;
 
    pf1= *p1lok*2;
    pf2= *p2lok*2;
    pf3= *p3lok*2;
    pf4= *p4lok*2;
    pf5= *p5lok*2;
    sum1= pf1+pf2+pf3+pf4+pf5;
 
   return sum1;
}
 
int funsum2(int*p1lok, int*p2lok, int*p3lok, int*p4lok, int*p5lok){
int sum2;
int pf1, pf2, pf3, pf4, pf5;
 
    pf1= *p1lok*4;
    pf2= *p2lok*4;
    pf3= *p3lok*4;
    pf4= *p4lok*4;
    pf5= *p5lok*4;
    sum2= pf1+pf2+pf3+pf4+pf5;
 
    return sum2;
 
 
}
 
int funsum3(int*p1lok, int*p2lok, int*p3lok, int*p4lok, int*p5lok){
int sum3;
int pf1, pf2, pf3, pf4, pf5;
 
    pf1= *p1lok * *p1lok;
    pf2= *p2lok * *p2lok;
    pf3= *p3lok * *p3lok;
    pf4= *p4lok * *p4lok;
    pf5= *p5lok * *p5lok;
    sum3=pf1+pf2+pf3+pf4+pf5;
 
   return sum3;
}
 
int funmaxsum4(int*sum1, int*sum2, int*sum3){
int maxsum;
 
    if(*sum1>*sum2)
     maxsum= *sum1;
    if(*sum2>*sum1)
     maxsum= *sum2;
    if(*sum3>maxsum)
     maxsum= *sum3;
 
 return maxsum;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4922 / 2665 / 243
Регистрация: 29.11.2010
Сообщений: 7,420
25.01.2013, 22:56     Пары в векторе #9
Klun, что в моем ответе не соответствует ТЗ?
Klun
1 / 1 / 0
Регистрация: 13.09.2012
Сообщений: 38
25.01.2013, 23:38  [ТС]     Пары в векторе #10
#include <vector>
#include <random>
#include <algorithm>
#include <iterator>

Возможно ли построение данной программы без данных библиотек и сопутствующих им функций?
NeonLost
Пес войны
 Аватар для NeonLost
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
25.01.2013, 23:49     Пары в векторе #11
Цитата Сообщение от Klun Посмотреть сообщение
Эм... Хэхэ. Я имел введу примерно в таком виде:
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
 
using namespace std;
 
 
int funsum1(int*, int*, int*, int*, int*);
int funsum2(int*, int*, int*, int*, int*);
int funsum3(int*, int*, int*, int*, int*);
int funmaxsum4(int*, int*, int*);
int main()
{
    int p1, p2, p3, p4, p5, sum1, sum2, sum3;
 
    cout<<"Vvedite 5 chisel cherez probel:"<<endl;
 
 
    cin>> p1 >> p2 >>  p3 >>  p4 >>  p5 ;
 
 
    sum1 = funsum1(&p1, &p2, &p3, &p4, &p5);
    sum2 = funsum2(&p1, &p2, &p3, &p4, &p5);
    sum3 = funsum3(&p1, &p2, &p3, &p4, &p5);
 
    cout<<funmaxsum4(&sum1, &sum2, &sum3);
 
return 0;
}
 
int funsum1(int*p1lok, int*p2lok, int*p3lok, int*p4lok, int*p5lok){
int sum1;
int pf1, pf2, pf3, pf4, pf5;
 
    pf1= *p1lok*2;
    pf2= *p2lok*2;
    pf3= *p3lok*2;
    pf4= *p4lok*2;
    pf5= *p5lok*2;
    sum1= pf1+pf2+pf3+pf4+pf5;
 
   return sum1;
}
 
int funsum2(int*p1lok, int*p2lok, int*p3lok, int*p4lok, int*p5lok){
int sum2;
int pf1, pf2, pf3, pf4, pf5;
 
    pf1= *p1lok*4;
    pf2= *p2lok*4;
    pf3= *p3lok*4;
    pf4= *p4lok*4;
    pf5= *p5lok*4;
    sum2= pf1+pf2+pf3+pf4+pf5;
 
    return sum2;
 
 
}
 
int funsum3(int*p1lok, int*p2lok, int*p3lok, int*p4lok, int*p5lok){
int sum3;
int pf1, pf2, pf3, pf4, pf5;
 
    pf1= *p1lok * *p1lok;
    pf2= *p2lok * *p2lok;
    pf3= *p3lok * *p3lok;
    pf4= *p4lok * *p4lok;
    pf5= *p5lok * *p5lok;
    sum3=pf1+pf2+pf3+pf4+pf5;
 
   return sum3;
}
 
int funmaxsum4(int*sum1, int*sum2, int*sum3){
int maxsum;
 
    if(*sum1>*sum2)
     maxsum= *sum1;
    if(*sum2>*sum1)
     maxsum= *sum2;
    if(*sum3>maxsum)
     maxsum= *sum3;
 
 return maxsum;
}
у меня кровь из глаз брызнула, когда я это увидел
Klun
1 / 1 / 0
Регистрация: 13.09.2012
Сообщений: 38
26.01.2013, 01:28  [ТС]     Пары в векторе #12
На данном этапе обучения я не умею строить программы по другому( и да, это не по этому заданию).
Я попросил помощи так как не представляю как написать код по данной задаче, но не могу принять вышеуказанное решение( за которое я очень благодарен - человек потратил время и старался) но я элементарно не пойму что к чему и при случае не смогу объяснить что и как работает.

Добавлено через 1 час 23 минуты
Люди, помогите плз. Срочно нужно...
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
26.01.2013, 01:43     Пары в векторе #13
попробуйте разобраться чтоли. там кода строчек 15 всего. генерация вектора и циклик.
не понимаете как заколняется вектор - сделайте по своему. цикл без изменений останется:

C++
1
2
3
4
5
6
7
8
9
10
11
12
  
   std::vector<int> v = myVectorGeneration(200);
   bool positive = (v[0] >= 0);
   int counter = 0;
   for (unsigned i = 1; i < v.size(); ++i)
   {
        bool tickPositive = (v[i] >= 0);
        if (positive != tickPositive)
            counter++;
        positive = tickPositive;
    }
    std::cout << std::endl << "Counter: " << counter << std::endl;
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,601
Записей в блоге: 17
26.01.2013, 01:49     Пары в векторе #14
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
#include <iostream>
#include <ctime>
 
using namespace std;
//-------------------------------------------------------
void my_generate(int A[], int size, int val1, int val2)
{
    srand(time(0));
    for(int i=0; i<size ; i++) A[i]= rand()%(val2-val1)+val1;
}
//-------------------------------------------------------
void my_print(int A[], int size)
{
    for(int i=0; i<size ; i++) cout<<A[i]<<"\t";
}
//-------------------------------------------------------
int main()
{
    const int size=10;
    int A[size];
    my_generate(A,10,-50,50);
    my_print(A,10);
 
    int counter=0;
    cout<<endl<<"pairs:"<<endl;
 
    for(int i=0; i<size-1 ; i++)
        {
            if( (A[i]>0 && A[i+1]<0) || (A[i]<0 && A[i+1]>0) )
                {
                    cout<<A[i]<<"\t"<<A[i+1]<<endl;
                    counter++;
                }
        }
 
    cout<<"count: "<<counter<<endl;
 
    getchar();
    return 0;
}
//-------------------------------------------------------
46 -42 44 -47 47 47 -13 -47 17 -8
pairs:
46 -42
-42 44
44 -47
-47 47
47 -13
-47 17
17 -8
count: 7
Klun
1 / 1 / 0
Регистрация: 13.09.2012
Сообщений: 38
26.01.2013, 01:55  [ТС]     Пары в векторе #15
Avazart , спасибо тебе огромное!!!
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,601
Записей в блоге: 17
26.01.2013, 01:56     Пары в векторе #16
Поправка
C++
1
2
3
4
5
const int size=10;
int A[size];
my_generate(A,size,-50,50);
my_print(A,size);
//...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2013, 17:31     Пары в векторе
Еще ссылки по теме:

Вывести максимальный с каждой пары двух соседних елементов масива.Здесь выводит только с первой пары! C++
C++ Структуры в векторе
C++ Можно ли разбить последовательность на пары так, чтобы произведение чисел любой пары было одинаковым?

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4922 / 2665 / 243
Регистрация: 29.11.2010
Сообщений: 7,420
26.01.2013, 17:31     Пары в векторе #17
Avazart, и
C++
1
#include <cstdlib>
srand и rand определены как раз там. Оно, конечно, может косвенно подключаться через iostream, но сам ведь понимаешь, что не тру.

ТС, вы назвали тему "пары в векторе". А сами хотите использовать массивы и С стайл.
В моем коде весь алгоритм расположен тут:
C++
1
2
3
4
5
6
7
8
9
bool positive = (*v.begin() >= 0);
    int counter = 0;
    for (std::vector<int>::iterator it = v.begin() + 1; it != v.end(); ++it)
    {
        bool tickPositive = (*it >= 0);
        if (positive != tickPositive)
            counter++;
        positive = tickPositive;
    }
Приблизительные значение v.begin() и v.end() можно угадать имея по английскому хоть чуть более, чем 2 с минусом, в конце-концов - гугл в помощь. Вы просто не захотели разобраться хоть на йоту и предпочитаете, чтоб за вас разжевали и в рот положили. Да и научитесь грамотно формулировать задания. Вектор есть вектор, а пары в векторе вообще звучит как std::vector<std:air< > > .
Yandex
Объявления
26.01.2013, 17:31     Пары в векторе
Ответ Создать тему
Опции темы

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