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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.87
F. Alonso
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
28.04.2012, 15:20     Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами. #1
всем привет!
помогите, пжл:

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

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

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

Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине - элементы, стоявшие в четных позициях.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2012, 15:20     Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
Посмотрите здесь:

Массив: вычислить сумму элементов массива, расположенных между первым и вторым отрицательными элементами. C++
В одномерном массиве, состоящем из n элементов, вычислить произведение элементов между первым и вторым нулевыми элементами! C++
C++ Дан целочисленный массив размера N. Найти произведение элементов массива, расположенных между первым и вторым нулевыми элементами. зарание благодарен
Вычислить произведение элементов массива, расположенных между первым и вторым нулевыми элементами C++
Вычислить произведение элементов массива, расположенных между первым и вторым нулевыми элементами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
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/5e3c01...d84fbd398c56ab
F. Alonso
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)
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
30.04.2012, 17:10     Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами. #4
попробуй
C++
1
using namespace std; int main() { ....
F. Alonso
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
30.04.2012, 17:48  [ТС]     Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами. #5
это куда конкретно нужно вставить? можно полный код?
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 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()
{
softmob
1248 / 698 / 155
Регистрация: 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/f197f2...4d733bc3b2f2bc
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
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/ecabb6...3d68143832fa2b
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
01.05.2012, 00:56     Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами. #9
ForEveR, кстати в студии программа вылетает с ошибкой, похоже из за сортировки, ну а на liveworkspace не всегда правильно сортирует
http://liveworkspace.org/code/079b08...404936485cd982
F. Alonso
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
05.05.2012, 11:04  [ТС]     Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами. #10
ну никак абсолютно, ни один из вариантов не работает.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
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/43e9ce...20bbb2dda845d7

Все ведь сделали. Осталось только чуть-чуть подумать... Ну лови, раз думать не хочешь.
F. Alonso
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
05.05.2012, 13:03  [ТС]     Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами. #12
сам массив не выводится, к сожалению, и считает произведение как-то непонятно.
Миниатюры
Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами.  
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.05.2012, 13:49     Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами. #13
F. Alonso, Что непонятного? 4 * 5 * 6 == 120 как бэ.
Сам массив не выводится - вставьте вывод.
http://liveworkspace.org/code/d1581c...e907d91095fd29
F. Alonso
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
14.05.2012, 17:36  [ТС]     Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами. #14
Цитата Сообщение от ForEveR Посмотреть сообщение
F. Alonso, Что непонятного? 4 * 5 * 6 == 120 как бэ.
Нужно посчитать произведение элементов, расположенных между первым и вторым нулевыми элементами. На скрине между двумя нулями одна только цифра 5 находится. Ниче не понимаю, откуда 120?
И помогите с выводом массива кто-нибудь, пожалуйста.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 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/a74164...2329e8e1023414
F. Alonso
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)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.05.2012, 19:39     Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами. #17
zitxbit, Аргументы? И в каком же случае тогда рационально использовать STL?
На мой взгляд приведенный вами код очень далек от рационального. new и printf/scanf в одном коде, отсутствие очистки памяти.

Добавлено через 33 секунды
F. Alonso, #include <stdio.h> наверху поставьте.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
14.05.2012, 19:47     Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами. #18
F. Alonso, подключите библиотеку #include <stdio.h>, замените int main() { на void main() {

Добавлено через 2 минуты
ForEveR, библиотеку STL рационально использовать в больших и сложных задачах с большой избыточностью кода. Но для этого сначала необходимо уметь его использовать.
F. Alonso
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
14.05.2012, 19:50  [ТС]     Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами. #19
спасибо огромное, ребята, все работает!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2012, 20:20     Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.05.2012, 20:20     Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами. #20
zitxbit, Круто. Особенно с void main. Это вообще прекрасно. Читайте стандарт, товарищ. Библиотека STL является стандартной библиотекой С++ и поэтому использоваться должна в подавляющем большинстве случаев, как и Linq, Lambda и прочее в C#.
Yandex
Объявления
14.05.2012, 20:20     Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
Ответ Создать тему
Опции темы

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