Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/56: Рейтинг темы: голосов - 56, средняя оценка - 4.66
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
1

Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами.

28.04.2012, 15:20. Показов 10484. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
всем привет!
помогите, пжл:

в одномерном массиве, состоящем из n целых элементов, вычислить:

1) номер максимального элемента массива;

2) произведение элементов массива, расположенных между первым и вторым нулевыми элементами.

Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине - элементы, стоявшие в четных позициях.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2012, 15:20
Ответы с готовыми решениями:

Произведение элементов массива, расположенных между первым и вторым нулевыми элементами
2)В одномерном массиве, состоящем из 20 целых элементов, вычислить: 1- номер максимального...

Произведение элементов массива расположенных между первым и вторым нулевыми элементами
произведение элементов массива расположенных между первым и вторым нулевыми элементами. ...

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

Дан целочисленный массив размера N. Найти произведение элементов массива, расположенных между первым и вторым нулевыми элементами. зарание благодарен
Помогите пожалуйста написать код Дан целочисленный массив размера N. Найти произведение элементов...

19
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.04.2012, 15:29 2
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <iterator>
 
int main()
{
   std::vector<int> vec = {1,2,3,0,4,5,6,0,1};
   std::cout << "Max elem has number: " << std::max_element(vec.begin(), vec.end())
   - vec.begin() << std::endl;
   std::vector<int>::iterator first_zero = std::find(vec.begin(), vec.end(), 0);
   if (first_zero == vec.end())
   {
      std::cerr << "No zero elements" << std::endl;
      return 1;
   }
   std::vector<int>::iterator second_zero = std::find(first_zero + 1, vec.end(), 0);
   if (second_zero == vec.end())
   {
      std::cerr << "Only one element equal to zero" << std::endl;
      return 1;
   }
   std::cout << "Sum between first 0 and second 0 is: " <<
   std::accumulate(first_zero, second_zero, 0) << std::endl;
   int idx = 0;
   std::sort(vec.begin(), vec.end(), [&idx](const int first, const int second) -> bool
   {
      ++idx;
      return ((idx - 1) % 2);
   });
   std::cout << "Sorted array" << std::endl;
   std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
}
http://liveworkspace.org/code/... bd398c56ab
1
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
30.04.2012, 17:02  [ТС] 3
не запускается сосвсем. вот такую фигню выдает:

Compiling...
c.cpp
d:\desktop\c\c.cpp(9) : error C2552: 'vec' : non-aggregates cannot be initialized with initializer list
d:\desktop\c\c.cpp(27) : error C2059: syntax error : '['
d:\desktop\c\c.cpp(28) : error C2143: syntax error : missing ')' before '{'
d:\desktop\c\c.cpp(28) : error C2143: syntax error : missing ';' before '{'
d:\desktop\c\c.cpp(31) : error C2059: syntax error : ')'
Error executing cl.exe.

c.exe - 5 error(s), 0 warning(s)
0
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
30.04.2012, 17:10 4
попробуй
C++
1
using namespace std; int main() { ....
0
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
30.04.2012, 17:48  [ТС] 5
это куда конкретно нужно вставить? можно полный код?
0
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
30.04.2012, 17:49 6
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <iterator>
 
using namespace std;
 
int main()
{
0
1255 / 705 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
30.04.2012, 18:33 7
ForEveR, ток там надо было произведение а не сумму искать
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <iterator>
using namespace std;
 
int main(void)
{
    vector<int> v = {1,2,3,0,4,5,6,0,1};
    cout << "max elem has number: " << max_element(v.begin(), v.end())
        - v.begin() + 1 << endl;   
    if (count(v.begin(), v.end(), 0) < 2)
        cerr << "not enough zero elements" << endl;
    else
    {
        auto first_zero = find(v.begin(), v.end(), 0);
        auto second_zero = find(first_zero + 1, v.end(), 0);
        int p = 1;
        for (auto i = first_zero + 1; i != second_zero; ++i)
            p *= *i;
        if (second_zero - first_zero > 1)
            cout << "composition between first 0 and second 0 is: " << p << endl;
        else
            cout << "there are no elements in the given interval" << endl;
    } 
    int idx = 0;
    sort(v.begin(), v.end(), [&idx](const int first, const int second)
    {
        return idx++ % 2 != 0;
    });
    cout << "Sorted array" << endl;
    copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
    cout << endl;
    return 0;
}
http://liveworkspace.org/code/... 3bc3b2f2bc
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
01.05.2012, 00:31 8
softmob, Ну тогда так.
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <iterator>
 
int main()
{
   std::vector<int> vec = {1,2,3,0,4,5,6,0,1};
   std::cout << "Max elem has number: " << std::max_element(vec.begin(), vec.end())
   - vec.begin() << std::endl;
   std::vector<int>::iterator first_zero = std::find(vec.begin(), vec.end(), 0);
   if (first_zero == vec.end())
   {
      std::cerr << "No zero elements" << std::endl;
      return 1;
   }
   std::vector<int>::iterator second_zero = std::find(first_zero + 1, vec.end(), 0);
   if (second_zero == vec.end())
   {
      std::cerr << "Only one element equal to zero" << std::endl;
      return 1;
   }
   std::cout << "Mult between first 0 and second 0 is: " <<
   std::accumulate(first_zero + 1, second_zero, 1, [] (const int f, const int s)
   {
        return f * s;
   }) << std::endl;
   int idx = 0;
   std::sort(vec.begin(), vec.end(), [&idx](const int, const int) -> bool
   {
      ++idx;
      return ((idx - 1) % 2);
   });
   std::cout << "Sorted array" << std::endl;
   std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
}
http://liveworkspace.org/code/... 143832fa2b
1
1255 / 705 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
01.05.2012, 00:56 9
ForEveR, кстати в студии программа вылетает с ошибкой, похоже из за сортировки, ну а на liveworkspace не всегда правильно сортирует
http://liveworkspace.org/code/... 36485cd982
1
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
05.05.2012, 11:04  [ТС] 10
ну никак абсолютно, ни один из вариантов не работает.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
05.05.2012, 12:37 11
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <iterator>
#include <functional> 
 
class transform_by_idx : public std::unary_function<int, int>
{
public:
   transform_by_idx(const std::vector<int>& v):vec(v), idx(0)
   {
   }
   result_type operator () (const argument_type& )
   {
      if (idx >= vec.size())
      {
         idx = 1;
      }
      idx += 2;
      return vec[idx - 2];
   }
private:
   std::vector<int> vec;
   size_t idx;
};
 
int main()
{
   int array[] = {1,2,3,0,4,5,6,0,1};
   std::vector<int> vec(array, array + sizeof(array) / sizeof(*array));
   std::cout << "Max elem has number: " << std::max_element(vec.begin(), vec.end())
   - vec.begin() << std::endl;
   std::vector<int>::iterator first_zero = std::find(vec.begin(), vec.end(), 0);
   if (first_zero == vec.end())
   {
      std::cerr << "No zero elements" << std::endl;
      return 1;
   }
   std::vector<int>::iterator second_zero = std::find(first_zero + 1, vec.end(), 0);
   if (second_zero == vec.end())
   {
      std::cerr << "Only one element equal to zero" << std::endl;
      return 1;
   }
   std::cout << "Mult between first 0 and second 0 is: " <<
   std::accumulate(first_zero + 1, second_zero, 1, std::multiplies<int>()) << std::endl;
   std::transform(vec.begin(), vec.end(), vec.begin(), transform_by_idx(vec));
   std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
}
http://liveworkspace.org/code/... b2dda845d7

Все ведь сделали. Осталось только чуть-чуть подумать... Ну лови, раз думать не хочешь.
0
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
05.05.2012, 13:03  [ТС] 12
сам массив не выводится, к сожалению, и считает произведение как-то непонятно.
Миниатюры
Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами.  
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
05.05.2012, 13:49 13
F. Alonso, Что непонятного? 4 * 5 * 6 == 120 как бэ.
Сам массив не выводится - вставьте вывод.
http://liveworkspace.org/code/... d91095fd29
0
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
14.05.2012, 17:36  [ТС] 14
Цитата Сообщение от ForEveR Посмотреть сообщение
F. Alonso, Что непонятного? 4 * 5 * 6 == 120 как бэ.
Нужно посчитать произведение элементов, расположенных между первым и вторым нулевыми элементами. На скрине между двумя нулями одна только цифра 5 находится. Ниче не понимаю, откуда 120?
И помогите с выводом массива кто-нибудь, пожалуйста.
0
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
14.05.2012, 19:33 15
На мой взгляд ни один из данных выше кодов, не является рациональным, тем более использование
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
#include <locale.h>
 
int main()
{
    setlocale(LC_ALL,"Russian");
 
    int N = -1;
    printf("Введите число элементов массива N = ");
    scanf("%d",&N);
 
    int* A = new int[N];
    for (int i = 0; i < N; i++)
     { printf("Введите A[%d] = ",i); scanf("%d",&A[i]); }
 
    printf("\n");
 
    int max = 0;
    for (int n = 0; n < N; n++)
        if (A[n] > A[max]) max = n;
 
    int k = 0, *pos = new int[2];
    for (int r = 0; (r < N) && (k != 2); r++)
        if (A[r] == 0) pos[k++] = r;
 
    int q = pos[0] + 1, mul = 1;
    while (q < pos[1]) mul*=A[q++];
 
    for (int z1 = 0; z1 < N; z1++)
        printf("%d ",A[z1]);
    printf("\n");
 
    printf("Максимальный элемент A[%d] = %d\n",max,A[max]);
    printf("Произведение элементов "); 
    for (int z2 = pos[0] + 1; z2 < pos[1]; z2++)
        printf("%d ",A[z2]);
    printf("mul = %d\n",mul);
}
http://liveworkspace.org/code/... e8e1023414
0
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
14.05.2012, 19:38  [ТС] 16
вот такая фигня:

Compiling...
Zadacha.cpp
C:\Zadacha\Zadacha.cpp(8) : error C2065: 'printf' : undeclared identifier
C:\Zadacha\Zadacha.cpp(9) : error C2065: 'scanf' : undeclared identifier
C:\Zadacha\Zadacha.cpp(37) : warning C4508: 'main' : function should return a value; 'void' return type assumed
Error executing cl.exe.

Zadacha.exe - 2 error(s), 1 warning(s)
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
14.05.2012, 19:39 17
zitxbit, Аргументы? И в каком же случае тогда рационально использовать STL?
На мой взгляд приведенный вами код очень далек от рационального. new и printf/scanf в одном коде, отсутствие очистки памяти.

Добавлено через 33 секунды
F. Alonso, #include <stdio.h> наверху поставьте.
0
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
14.05.2012, 19:47 18
F. Alonso, подключите библиотеку #include <stdio.h>, замените int main() { на void main() {

Добавлено через 2 минуты
ForEveR, библиотеку STL рационально использовать в больших и сложных задачах с большой избыточностью кода. Но для этого сначала необходимо уметь его использовать.
0
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
14.05.2012, 19:50  [ТС] 19
спасибо огромное, ребята, все работает!
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
14.05.2012, 20:20 20
zitxbit, Круто. Особенно с void main. Это вообще прекрасно. Читайте стандарт, товарищ. Библиотека STL является стандартной библиотекой С++ и поэтому использоваться должна в подавляющем большинстве случаев, как и Linq, Lambda и прочее в C#.
0
14.05.2012, 20:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2012, 20:20
Помогаю со студенческими работами здесь

Вычислить произведение элементов массива, расположенных между первым и вторым нулевыми элементами
Вычислить произведение элементов массива, расположенных между первым и вторым нулевыми элементами?...

Найти произведение элементов массива, расположенных между первым и вторым нулевыми элементами
Дан целочисленный массив размера N.Найти произведение элементов массива,расположенных между первым...

Вычислить произведение элементов массива, расположенных между первым и вторым нулевыми элементами
2) произведение элементов массива, расположенных между первым и вторым нулевыми элементами.

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru