Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Klun
1 / 1 / 1
Регистрация: 13.09.2012
Сообщений: 43
#1

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

25.01.2013, 03:56. Просмотров 641. Ответов 16
Метки нет (Все метки)

Задан вектор в 200 чисел который рандомно заполнен в диапазоне от -50 до 50 . Нужно из этого безобразия получить количество отрицательных и положительных чисел, которые стоят рядом( пример - 9,14,(5,(-5),7),8,4 ). Я с трудом представляю , как это. Мож кто поможет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2013, 03:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Пары в векторе (C++):

Можно ли разбить последовательность на пары так, чтобы произведение чисел любой пары было одинаковым?
Помогите написать код задачи на с++ Дана последовательность целых чисел....

Вывести максимальный с каждой пары двух соседних елементов масива.Здесь выводит только с первой пары!
//--------------------------------------------------------------------------- ...

Пользователь вводит пары целых чисел. Вычислить площади прямоугольников, сторонами которых являются эти пары чисел
Пользователь вводит пары целых чисел. Вычислить площади прямоугольников,...

Число вершин, удаленных от пары вершин по кротчайшим маршрутам каждой из следующих длин: 1, 2, 3 и т.д., для каждой пары вершин.
Число вершин, удаленных от пары вершин по кротчайшим маршрутам каждой из...

Поиск в векторе
Есть вектор v: v = 0; v = 1; v = 2; v = 4; v = 6; Как с помощью...

Сортировка в векторе
Нужно отсортировать студентов в векторе по размеру стипендии от большей к...

16
MrGluck
Модератор
Эксперт CЭксперт С++
8022 / 4865 / 1425
Регистрация: 29.11.2010
Сообщений: 13,248
25.01.2013, 04:09 #2
Обходите по вектору со 2 элемента до конца и, если знак текущего элемента отличается от знака предыдущего, то инкрементируете счетчик.
0
Klun
1 / 1 / 1
Регистрация: 13.09.2012
Сообщений: 43
25.01.2013, 10:39  [ТС] #3
Хм, как вариант стоит попробовать.

Добавлено через 6 часов 17 минут
Народ, а может кто помочь с кодом? Ничего не получается(((
0
MrGluck
Модератор
Эксперт CЭксперт С++
8022 / 4865 / 1425
Регистрация: 29.11.2010
Сообщений: 13,248
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
1
sunny2013
0 / 0 / 0
Регистрация: 25.01.2013
Сообщений: 6
25.01.2013, 12:15 #5
MrGluck, спасибо на ссылку на замечательный ресурс!
0
Klun
1 / 1 / 1
Регистрация: 13.09.2012
Сообщений: 43
25.01.2013, 19:09  [ТС] #6
А можно тоже самое , только при помощи функций "for"?
0
MrGluck
Модератор
Эксперт CЭксперт С++
8022 / 4865 / 1425
Регистрация: 29.11.2010
Сообщений: 13,248
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
0
Klun
1 / 1 / 1
Регистрация: 13.09.2012
Сообщений: 43
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;
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
8022 / 4865 / 1425
Регистрация: 29.11.2010
Сообщений: 13,248
25.01.2013, 22:56 #9
Klun, что в моем ответе не соответствует ТЗ?
0
Klun
1 / 1 / 1
Регистрация: 13.09.2012
Сообщений: 43
25.01.2013, 23:38  [ТС] #10
#include <vector>
#include <random>
#include <algorithm>
#include <iterator>

Возможно ли построение данной программы без данных библиотек и сопутствующих им функций?
0
NeonLost
Пес войны
110 / 87 / 22
Регистрация: 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;
}
у меня кровь из глаз брызнула, когда я это увидел
0
Klun
1 / 1 / 1
Регистрация: 13.09.2012
Сообщений: 43
26.01.2013, 01:28  [ТС] #12
На данном этапе обучения я не умею строить программы по другому( и да, это не по этому заданию).
Я попросил помощи так как не представляю как написать код по данной задаче, но не могу принять вышеуказанное решение( за которое я очень благодарен - человек потратил время и старался) но я элементарно не пойму что к чему и при случае не смогу объяснить что и как работает.

Добавлено через 1 час 23 минуты
Люди, помогите плз. Срочно нужно...
0
DU
1486 / 1132 / 164
Регистрация: 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;
0
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 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
1
Klun
1 / 1 / 1
Регистрация: 13.09.2012
Сообщений: 43
26.01.2013, 01:55  [ТС] #15
Avazart , спасибо тебе огромное!!!
0
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 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);
//...
0
MrGluck
Модератор
Эксперт CЭксперт С++
8022 / 4865 / 1425
Регистрация: 29.11.2010
Сообщений: 13,248
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< > > .
0
26.01.2013, 17:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2013, 17:31
Привет! Вот еще темы с решениями:

Сортировка в векторе
Здравствуйте Как правильно сделать сортировку по дате в векторе? Пишу меню...

Структуры в векторе
struct Node { char ch; int parent; int zero; ...

Поиск в векторе
Есть вектор v Нужно задать поиск значения 6 и присвоить переменной i номер...

size и capasity в векторе
Всем привет, возникла такая проблема Делаю расчетную программу, использую...


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

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

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