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

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

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

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

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

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

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

Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине - элементы, стоявшие в четных позициях.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.04.2012, 15:20
Ответы с готовыми решениями:

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

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

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

19
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.04.2012, 15:29
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  [ТС]
не запускается сосвсем. вот такую фигню выдает:

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
 Аватар для zitxbit
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
30.04.2012, 17:10
попробуй
C++
1
using namespace std; int main() { ....
0
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
30.04.2012, 17:48  [ТС]
это куда конкретно нужно вставить? можно полный код?
0
 Аватар для zitxbit
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
30.04.2012, 17:49
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
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
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
01.05.2012, 00:31
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
ForEveR, кстати в студии программа вылетает с ошибкой, похоже из за сортировки, ну а на liveworkspace не всегда правильно сортирует
http://liveworkspace.org/code/... 36485cd982
1
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
05.05.2012, 11:04  [ТС]
ну никак абсолютно, ни один из вариантов не работает.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
05.05.2012, 12:37
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  [ТС]
сам массив не выводится, к сожалению, и считает произведение как-то непонятно.
Миниатюры
Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами.  
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
05.05.2012, 13:49
F. Alonso, Что непонятного? 4 * 5 * 6 == 120 как бэ.
Сам массив не выводится - вставьте вывод.
http://liveworkspace.org/code/... d91095fd29
0
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 117
14.05.2012, 17:36  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
F. Alonso, Что непонятного? 4 * 5 * 6 == 120 как бэ.
Нужно посчитать произведение элементов, расположенных между первым и вторым нулевыми элементами. На скрине между двумя нулями одна только цифра 5 находится. Ниче не понимаю, откуда 120?
И помогите с выводом массива кто-нибудь, пожалуйста.
0
 Аватар для zitxbit
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
14.05.2012, 19:33
На мой взгляд ни один из данных выше кодов, не является рациональным, тем более использование
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  [ТС]
вот такая фигня:

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
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
14.05.2012, 19:39
zitxbit, Аргументы? И в каком же случае тогда рационально использовать STL?
На мой взгляд приведенный вами код очень далек от рационального. new и printf/scanf в одном коде, отсутствие очистки памяти.

Добавлено через 33 секунды
F. Alonso, #include <stdio.h> наверху поставьте.
0
 Аватар для zitxbit
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
14.05.2012, 19:47
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  [ТС]
спасибо огромное, ребята, все работает!
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
14.05.2012, 20:20
zitxbit, Круто. Особенно с void main. Это вообще прекрасно. Читайте стандарт, товарищ. Библиотека STL является стандартной библиотекой С++ и поэтому использоваться должна в подавляющем большинстве случаев, как и Linq, Lambda и прочее в C#.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.05.2012, 20:20
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru