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

В функции найти произведение элементов одномерного массива, расположенных между максимальным и минимальным элементами

14.02.2023, 12:44. Показов 665. Ответов 6

Студворк — интернет-сервис помощи студентам
В функции найти произведение элементов одномерного массива, расположенных между максимальным и минимальным его элементами. Использовать функцию для каждой третьей строки двумерного массива размерности
15 на 20.
Задание. В соответствии с вариантом создать функцию, параметрами
которой являются: одномерный массив и его размерность.
Функцию реализовать двумя способами:
1) через обращение к элементам массива через указатели,
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
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
#include <iostream>
#include <locale>
#include <ctime>
#include <cstdlib>
#include <iomanip>
using namespace std;
 
int ProizvedenieOB(int a[], int n);
int ProizvedenieUK(int *a, int n);
 
int main(){
    setlocale(LC_ALL,"Russian");
    srand(time(NULL));
    const unsigned MIN_RANDOM =1;
    const unsigned MAX_RANDOM = 10;
    int i,j;
    int const l = 15;
    int const m = 20;
    int array[l][m];
    for(int i=0; i<l; i++){
        for(int j=0; j<m; j++){
            array[i][j]=MIN_RANDOM + rand() % (MAX_RANDOM - MIN_RANDOM + 1);
            cout<<setw(4)<<array[i][j]; 
        }
        cout<<endl;
    }
    int ProizvedeniePerem=1;
    int ProizvedeniePerem1=1;
    for(int i=2; i<15; i+=3){
        ProizvedeniePerem*=ProizvedenieOB(&array[i][0], m);
        ProizvedeniePerem1*=ProizvedenieUK(&array[i][0], m);
        cout<<"Произведение элементов строки "<<i+1<<" между максимальным и минимальным ="<<ProizvedeniePerem<<endl;
        cout<<"Произведение элементов строки "<<i+1<<" между максимальным и минимальным ="<<ProizvedeniePerem1<<endl;
    }
    return 0;
}
 
int ProizvedenieOB(int a[], int n){
    int max = 0, min=0;
    long int p=1;
    for(int i=0; i<20; i++){
        if(a[i]<a[min])
        min=i;
        if(a[i]>a[max])
        max=i;
    }
    cout<<"amin="<<a[min]<<endl;
    cout<<"amax="<<a[max]<<endl;
    cout<<"min="<<min+1<<endl;
    cout<<"max="<<max+1<<endl;
    if(max > min)
    for(int i=min++;i < max;i++)
    p*=a[i];
    else if(min>max)
    for(int i=max++;i < min;i++)
    p*=a[i];
    return p;   
    }
 
int ProizvedenieUK(int *a, int n){
    int max = 0, min=0;
    long int p=1;
    for(int i=0; i<20; i++){
        if(*(a + i)<*(a + min))
        min=i;
        if(*(a + i)>*(a + max))
        max=i;
    }
    if(max > min)
    for(int i=min++;i < max;i++)
    p*= *(a + i);
    else if(min>max)
    for(int i=max++;i < min;i++)
    p*= *(a + i);
    return p;   
    }
Пожалуйста помогите найти ошибку, программа неправильно считает произведение элементов, не могу понять почему несколько дней сижу разбираюсь уже. Заранее спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2023, 12:44
Ответы с готовыми решениями:

Найти сумму элементов, расположенных между максимальным и минимальным элементами одномерного массива
В одномерном массиве найти сумму элементов, расположенных между максимальным и минимальным элементами.

Найти сумму элементов одномерного массива, расположенных между максимальным и минимальным элементами.
сформировать массив и n чисел.Найти сумму элементов массива ,расположенных между максимальным и минимальным элементами(в сумму включить...

Найти произведение элементов массива, расположенных между максимальным и минимальным элементами
Доброго времени суток. Я написал программу, но ошибку найти не могу, помогите, пожалуйста... Формат входных данных В первой строке...

6
Модератор
 Аватар для long399
2882 / 1837 / 933
Регистрация: 16.10.2013
Сообщений: 5,242
Записей в блоге: 15
15.02.2023, 08:16
Почему в функциях вы не используете размер массива (второй аргумент), который сами туда передаете? Вместо этого вы используете там магические числа какие-то.

Цитата Сообщение от Fargus4510 Посмотреть сообщение
C++
52
for(int i=min++;i < max;i++)
Мало того, что вы неправильно инициализируете переменную i в цикле (умножение начнется с граничного элемента), так вы еще и меняете значение переменной min на единицу. Что ломает дальнейшую логику.
Аналогичная ошибка в обеих функциях в двух местах, где цикл по умножению.

Делайте вот так:
C++
52
for(int i=min+1;i < max;i++)
1
2 / 2 / 0
Регистрация: 14.02.2023
Сообщений: 88
15.02.2023, 09:15  [ТС]
for(int i=min+1;i < max;i++)
я изначально так и делал, но что тот, что этот способ вычисляют неправильно.
(во всех функциях или i=min+1 или i=max+1)

Code
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
вот результат :
 
  10   8   8   3   7   8   6   4   2   3   7   1   8   6   3   9   2   5   4  10
  10   2   2  10   2   2   1   3   7   3   9   8   3   1  10   1   9  10   8   2
   8   6   8   4   3  10  10   2   4   2   4   7   1   7   1   7   3   2  10  10
   9   5   9   1  10   2   1   7   5   3  10   2   4   6   6  10   7   3   6   7
   3   8   3   6   3   6   9   6  10   1   1   6   5   3   7   6   2   2  10   6
   2   7   8   5   2   4   4  10   4   5   5   4  10   2   9   6   7   2   8   2
   9   2  10   6   1  10   2   9   9   2   4   9   6   1   5   8   9   6   5  10
   8   9   7   7   8   2   5   6   5   7   9   3   7   9  10   4   3   6   5   5
   8   6   6   4   5   8   3   5   1   4  10   6   5   2   5   6   7   4   2   8
   3   7   1   1   8   5   1   3   1   6  10   5   2   8   3   9   5   1   7   7
   5   1  10   5   7   8   4   3   1   6   5   1   2   7   4   5   1   6  10   4
   9   8   4   4   4   8   7   7   5   1   5   6   4   5   2   6   2   9   8   8
   9   8   3   2   9  10   4  10   1   4  10   3   4   6   6   5   3   1   1   5
   7   9  10   1   8   8   7   8   2   3   7   2   2   5   6   1   6   3   4   6
   2   6   8   9   3   3   3  10   9   8   6   8   4   2   1   1   2   5   3   9
amin=1
amax=10
min=13
max=6
Произведение элементов строки 3 между максимальным и минимальным =4480
Произведение элементов строки 3 между максимальным и минимальным =4480
amin=2
amax=10
min=1
max=8
Произведение элементов строки 6 между максимальным и минимальным =40140800
Произведение элементов строки 6 между максимальным и минимальным =40140800
amin=1
amax=10
min=9
max=11
Произведение элементов строки 9 между максимальным и минимальным =160563200
Произведение элементов строки 9 между максимальным и минимальным =160563200
amin=1
amax=9
min=10
max=1
Произведение элементов строки 12 между максимальным и минимальным =-1610612736
Произведение элементов строки 12 между максимальным и минимальным =-1610612736
amin=1
amax=10
min=15
max=8
Произведение элементов строки 15 между максимальным и минимальным =0
Произведение элементов строки 15 между максимальным и минимальным =0
Добавлено через 3 минуты
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
#include <iostream>
#include <locale>
#include <ctime>
#include <cstdlib>
#include <iomanip>
using namespace std;
 
int ProizvedenieOB(int a[], int n);
int ProizvedenieUK(int *a, int n);
 
int main(){
    setlocale(LC_ALL,"Russian");
    srand(time(NULL));
    const unsigned MIN_RANDOM =1;
    const unsigned MAX_RANDOM = 10;
    int i,j;
    int const l = 15;
    int const m = 20;
    int array[l][m];
    for(int i=0; i<l; i++){
        for(int j=0; j<m; j++){
            array[i][j]=MIN_RANDOM + rand() % (MAX_RANDOM - MIN_RANDOM + 1);
            cout<<setw(4)<<array[i][j]; 
        }
        cout<<endl;
    }
    int ProizvedeniePerem=1;
    int ProizvedeniePerem1=1;
    for(int i=2; i<15; i+=3){
        ProizvedeniePerem*=ProizvedenieOB(&array[i][0], m);
        ProizvedeniePerem1*=ProizvedenieUK(&array[i][0], m);
        cout<<"Произведение элементов строки "<<i+1<<" между максимальным и минимальным ="<<ProizvedeniePerem<<endl;
        cout<<"Произведение элементов строки "<<i+1<<" между максимальным и минимальным ="<<ProizvedeniePerem1<<endl;
    }
    return 0;
}
 
int ProizvedenieOB(int a[], int n){
    int imax = 0, imin=0;
    int p=1;
    for(int i=0; i<20; i++){
        if(a[i]<a[imin])
        imin=i;
        if(a[i]>a[imax])
        imax=i;
    }
    cout<<"amin="<<a[imin]<<endl;
    cout<<"amax="<<a[imax]<<endl;
    cout<<"min="<<imin+1<<endl;
    cout<<"max="<<imax+1<<endl;
    for (int i = 0; i < imin || i < imax; i++)
    if(i > imin || i > imax)
      p *= a[i];
    if(imin+1 == imax || imax+1 == imin)
        p *= 0;
    return p;   
    }
 
int ProizvedenieUK(int *a, int n){
    int imax = 0, imin=0;
    int p=1;
    for(int i=0; i<20; i++){
        if(*(a + i)<*(a + imin))
        imin=i;
        if(*(a + i)>*(a + imax))
        imax=i;
    }
    for (int i = 0; i < imin || i < imax; i++)
    if(i > imin || i > imax)
      p *= *(a + i);
    if(imin+1 == imax || imax+1 == imin)
        p *= 0;
    return p;   
    }
пробовал и так, но всё равно не работает как надо
0
Модератор
 Аватар для long399
2882 / 1837 / 933
Регистрация: 16.10.2013
Сообщений: 5,242
Записей в блоге: 15
15.02.2023, 09:33
Лучший ответ Сообщение было отмечено Fargus4510 как решение

Решение

Цитата Сообщение от Fargus4510 Посмотреть сообщение
C++
30
31
ProizvedeniePerem*=ProizvedenieOB(&array[i][0], m);
ProizvedeniePerem1*=ProizvedenieUK(&array[i][0], m);
здесь вы используете *=, а это неправильно. Каждый следующий результат умножается на предыдущий.
1
2 / 2 / 0
Регистрация: 14.02.2023
Сообщений: 88
15.02.2023, 09:50  [ТС]
то есть сюда
C++
1
2
3
4
5
6
for(int i=2; i<15; i+=3){
        ProizvedeniePerem*=ProizvedenieOB(&array[i][0], m);
        ProizvedeniePerem1*=ProizvedenieUK(&array[i][0], m);
        cout<<"Произведение элементов строки "<<i+1<<" между максимальным и минимальным ="<<ProizvedeniePerem<<endl;
        cout<<"Произведение элементов строки "<<i+1<<" между максимальным и минимальным ="<<ProizvedeniePerem1<<endl;
    }
надо добавить счётчик, который бы обнулял (возвращал к единице) ProizvedeniePerem* и ProizvedeniePerem1* при переходе функции на новую строку ?
0
Модератор
 Аватар для long399
2882 / 1837 / 933
Регистрация: 16.10.2013
Сообщений: 5,242
Записей в блоге: 15
15.02.2023, 09:54
Цитата Сообщение от Fargus4510 Посмотреть сообщение
надо добавить счётчик, который бы обнулял (возвращал к единице) ProizvedeniePerem* и ProizvedeniePerem1* при переходе функции на новую строку ?
Зачем? Просто используйте обычный оператор =.
1
2 / 2 / 0
Регистрация: 14.02.2023
Сообщений: 88
15.02.2023, 10:04  [ТС]
большое спасибо всё работает как надо !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.02.2023, 10:04
Помогаю со студенческими работами здесь

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

Найти произведение элементов массива, расположенных между максимальным и минимальным элементами
Помогите исправить код, пожалуйста int numberMin, numberMax; double a = new double; Random rnd = new Random(); double product =...

Найти произведение элементов массива, расположенных между максимальным и минимальным элементами
Всем привет, нужно найти произведение элементов массива, расположенных между максимальным и минимальным элементами. Массив состоит из n...

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru