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

Найти сумму между максимумом и минимумом в массиве.

09.10.2011, 15:06. Показов 2223. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Найти сумму между максимумом и минимумом в массиве.
Подскажите пожалуйста, почему выдает не правильный ответ? Как исправить????
Пишу на Dev.
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
#include <iostream> 
#include <conio.h>
#include <stdlib.h>
using namespace std;
int max,min;
int Imax, Imin; 
 
int sum(int* X,  int n) 
{ 
int s = 0; 
int max,min;
int Imax, Imin; 
 
if(Imax < Imin){
for (int i =max; i<min; i++) s += X[i]; 
} else {
for (int i =min; i<max; i++) s += X[i];
}
 
return s; 
} 
int const n = 10;
 
int main(){ 
int max = 0; 
int min = 0;
int Imax,Imin;
int si,i;
int X[n];
 
 srand((unsigned) time(NULL));
    for (i=0; i<n; i++)
    {
        
            X[i]=rand()%50;
            cout<<X[i]<<"  ";
         }
              cout<<endl;
   
max = X[0];
for (i = 1; i < n ; i++){ 
if (X[i]>= max){ max = X[i]; Imax = i;}
}
min = X[0];
for(i = 1; i < n ; i++){ 
if (X[i]<= min){ min = X[i]; Imin = i;}
 
}
si=sum(X, n); 
cout<<"\n"; 
cout<<"Max = "<<max<<endl; 
cout<<"Min = "<<min<<endl; 
cout<<"IMax = "<<Imax<<endl; 
cout<<"IMin = "<<Imin<<endl; 
cout << "Sum"<< si;  
 
  system("pause");
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.10.2011, 15:06
Ответы с готовыми решениями:

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

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

Найти сумму элементов массива между максимумом и минимумом
Дан одномерный массив. Найти сумму элементов между максимумом и минимумом

13
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 16:00
В функции суммирования нужно счетчик цикла изменять от Imax до Imin (или наоборот - во втором случае), а не от max до min

И в функции main() рядом со строкой
max=X[0];
должна быть строка
Imax=0;
То же самое для Imin

И вы переопределили свои данные max, min, Imax,Imin в функции main(), хотя они уже были объявлены как глобальные. Либо оставьте их только глобальные, либо передавайте все параметры в функцию суммирования
2
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 16:04  [ТС]
Спасибо, это исправил, а как передать значения Imax. Imin. max и min в функцию с помощью ссылок?
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 16:12
пишешь заголовок функции вот так примерно
C++
1
int sum(int* X, int n, int& Imax, int & Imin)
ну и остальные параметры , которые тебе нужно передавать
Если ты оставляешь только глобальные переменные, то этого делать не нужно, просто убери из своей функции суммы объявления max, min, Imax, Imin тоже

Если ты делаешь локальные переменные, то объявления max, min, Imax, Imin должны быть только в main и передаваться в функцию суммы как показано выше

И обрати внимание, в твоей реализации левая граница диапазона учитывается в сумму, а правая нет. Т.е., если у тебя массив
2 1 11 12 49 8 9,
то при нахождении суммы ты получаешь s=1+11+12=24, т.е. твой максимум 49 в сумму не входит, а минимум (1) - входит
1
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 16:25  [ТС]
aeshes, Спасибо тебе!!! И ещё один вопросик, всё сделал как ты сказал, но выдает ошибку что в
C++
1
si=sum(X, n);
in passing argument 2 of `int sum(int*, int&, int&, int&, int&, int&)'
и invalid initialization of reference of type 'int&' from expression of type 'const int'

Это зависит от количества параметров? как в main при вызови функции сделать пустые параметры?

Добавлено через 5 минут
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
#include <iostream> 
#include <conio.h>
#include <stdlib.h>
using namespace std;
int sum(int* X,  int & n, int & Imax, int & Imin, int & max, int & min) 
{ 
int s = 0; 
 
if(max < min){
for (int i =Imax; i<Imin; i++) s += X[i]; 
} else {
for (int i =Imin; i<Imax; i++) s += X[i];
}
 
return s; 
} 
 
int const n = 10;
 
int main(){ 
int si,i;
int X[n];
int max,min;
int Imax, Imin; 
srand((unsigned) time(NULL));
    for (i=0; i<n; i++)
    {
        
            X[i]=rand()%50;
            cout<<X[i]<<"  ";
         }
              cout<<endl;
   
max = X[0];
Imax=0;
for (i = 1; i < n ; i++){ 
if (X[i]>= max){ max = X[i]; Imax = i;}
}
min = X[0];
Imin= 0;
for(i = 1; i < n ; i++){ 
if (X[i]<= min){ min = X[i]; Imin = i;}
 
}
si=sum(X, n); 
cout<<"\n"; 
cout<<"Max = "<<max<<endl; 
cout<<"Min = "<<min<<endl; 
cout<<"IMax = "<<Imax<<endl; 
cout<<"IMin = "<<Imin<<endl; 
cout << "Sum"<< si;  
 
  system("pause");
}
Вот код
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 16:27
смотри, если ты сделал у функции sum заголовок с 6 параметрами, то и вызывать ты ее должен с 6 параметрами:
si=sum(X,n,Imax,Imin,max,min);

Обязательно параметры перечисляй в том же порядке, что и в заголовке функции, иначе будет работать неправильно
И типы параметров тоже должны совпадать - у тебя n имеет модификатор const при объявлении, а у функции нет такого модификатора при соответствующем параметре
1
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 16:36  [ТС]
работает, но только когда минимум впереди. Всё перепробовал....
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
#include <iostream> 
#include <conio.h>
#include <stdlib.h>
using namespace std;
int sum(int* X,  int & n, int & Imax, int & Imin, int & max, int & min) 
{ 
 
int s;
if(max < min){
for (int i =Imax; i<Imin; i++) s += X[i]; 
} else {
for (int i =Imin; i<Imax; i++) s += X[i];
}
 
return s; 
} 
 
int n = 10;
 
int main(){ 
int si,i;
int X[n];
int max,min;
int Imax, Imin; 
srand((unsigned) time(NULL));
    for (i=0; i<n; i++)
    {
        
            X[i]=rand()%50;
            cout<<X[i]<<"  ";
         }
              cout<<endl;
   
max = X[0];
Imax=0;
for (i = 1; i < n ; i++){ 
if (X[i]>= max){ max = X[i]; Imax = i;}
}
min = X[0];
Imin= 0;
for(i = 1; i < n ; i++){ 
if (X[i]<= min){ min = X[i]; Imin = i;}
 
}
si=sum(X,n,Imax,Imin,max,min);
cout<<"\n"; 
cout<<"Max = "<<max<<endl; 
cout<<"Min = "<<min<<endl; 
cout<<"IMax = "<<Imax<<endl; 
cout<<"IMin = "<<Imin<<endl; 
cout << "Sum"<< si;  
 
  system("pause");
}
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 16:41
смотри, ты в условии
C++
1
if(Imax<Imin)
заменил их на max и min соответственно. В самом if-е не надо было менять, только в заголовках цикла

И еще такое маленькое замечание:
ты убрал модификатор const при объявлении n, чтоб не писать его в заголовке функции. Но дело в том, что n - у тебя размер статического массива, он должен быть константным выражением, если ты хочешь писать именно X[n].
Поэтому лучше все-таки оставить
C++
1
const int n=0;
а в заголовке функции написать
C++
1
int sum(int*X, const int& n,/*остальные параметры*/)
Потому что например Dev не ругается на отсутствие модификатора для n, а другие компиляторы - да
1
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.10.2011, 16:44
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <algorithm>
 
int main()
{
    int arr[] = { -5, 0, 2, 3, 1, 5 }, size = sizeof(arr) / sizeof(*arr);
    std::cout << *std::max_element( arr, arr + size) + *std::min_element( arr, arr + size );
}
1
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 16:47  [ТС]
aeshes, Тоесть? а где менять? в условии заменил, а в теле, оставить max и min? напиши плиз кодом
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 16:52
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int sum(int* X, const int & n, int & Imax, int & Imin, int & max, int & min) 
{ 
 
int s;
if(Imax < Imin) //вот тут обрати внимание
{
for (int i =Imax; i<Imin; i++) s += X[i]; 
} else {
for (int i =Imin; i<Imax; i++) s += X[i];
}
 
return s; 
}
...
const int n=10;
diagon, да, STL рулит и это в 100 раз короче), но вдруг у человека задание именно на обработку массивов. Это, как я поняла, кусочек лабы или домашки по массивам именно - поиск индекса элемента, суммирование и т.п. Поскольку он попросил глянуть в его коде, разбираемся именно с ним. Зато когда он будет учить STL, он сможет увидеть насколько с ним быстрее и короче эта программа)
1
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 17:17  [ТС]
aeshes, Да вы правы, это кусок лабы) Но стремимся изучать!!! и стараемся! Спасибо за помощь, щас ток разберусь как минимум и максимум не плюсовать и всё) Благодарю!
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 17:23
если не нужно включать сами минимум и максимум, то в заголовках цикла должно быть так:
for(int i=Imax+1;i<Imin;i++)

Во втором цикле соответственно
1
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 17:25  [ТС]
Угу, уже тож нашёл) Спасибо вам огромное за помощь!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.10.2011, 17:25
Помогаю со студенческими работами здесь

Найти разницу между максимумом и минимумом в каждой строке массива
Дана действительная матрица размером n*m. Определить числа {b}_{0}, ... , {b}_{n-1}, равные соответственно разностям наибольших и...

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

Найти сумму элементов, стоящих между максимумом и минимумом
Дан массив A(N). Найти сумму элементов стоящих между максимумом и минимумом.

Найти сумму элементов массива, состоящих между максимумом и минимумом
Дан одномерный числовой массив размерности n. Найти сумму элементов, состоящих между максимумом и минимумом. сотировка массива.

Найти сумму элементов двумерного массива которые находятся между минимумом и максимумом
Добрый день, прошу помочь в решении задачи, начал изучать С#, застрял на двумерных массивах. Задача стоит следующая: Дан двумерный массив...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru