С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Doctor-d
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
#1

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

09.10.2011, 15:06. Просмотров 1156. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2011, 15:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти сумму между максимумом и минимумом в массиве. (C++):

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

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

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

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

Количество элементов между минимумом и максимумом - C++
Пожалуйста помогите вот с этой задачей!!! Написать программу, которая для целочисленной матрицы 10х20 определяет среднее...

Произведение элементов массива, расположенных между максимумом и минимумом - C++
Добый день. Подскажите пожалуйста, что я сдалелал не так. Задание произведение элементов массива, расположенных между максимальным и...

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

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

И вы переопределили свои данные max, min, Imax,Imin в функции main(), хотя они уже были объявлены как глобальные. Либо оставьте их только глобальные, либо передавайте все параметры в функцию суммирования
2
Doctor-d
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 16:04  [ТС] #3
Спасибо, это исправил, а как передать значения Imax. Imin. max и min в функцию с помощью ссылок?
0
aeshes
441 / 204 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 16:12 #4
пишешь заголовок функции вот так примерно
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
Doctor-d
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 16:25  [ТС] #5
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
441 / 204 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 16:27 #6
смотри, если ты сделал у функции sum заголовок с 6 параметрами, то и вызывать ты ее должен с 6 параметрами:
si=sum(X,n,Imax,Imin,max,min);

Обязательно параметры перечисляй в том же порядке, что и в заголовке функции, иначе будет работать неправильно
И типы параметров тоже должны совпадать - у тебя n имеет модификатор const при объявлении, а у функции нет такого модификатора при соответствующем параметре
1
Doctor-d
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 16:36  [ТС] #7
работает, но только когда минимум впереди. Всё перепробовал....
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
441 / 204 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 16:41 #8
смотри, ты в условии
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
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.10.2011, 16:44 #9
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
Doctor-d
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 16:47  [ТС] #10
aeshes, Тоесть? а где менять? в условии заменил, а в теле, оставить max и min? напиши плиз кодом
0
aeshes
441 / 204 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 16:52 #11
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
Doctor-d
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 17:17  [ТС] #12
aeshes, Да вы правы, это кусок лабы) Но стремимся изучать!!! и стараемся! Спасибо за помощь, щас ток разберусь как минимум и максимум не плюсовать и всё) Благодарю!
0
aeshes
441 / 204 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 17:23 #13
если не нужно включать сами минимум и максимум, то в заголовках цикла должно быть так:
for(int i=Imax+1;i<Imin;i++)

Во втором цикле соответственно
1
Doctor-d
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 17:25  [ТС] #14
Угу, уже тож нашёл) Спасибо вам огромное за помощь!!!!
0
09.10.2011, 17:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2011, 17:25
Привет! Вот еще темы с ответами:

Как сделать чтобы потом выводило матрицу с максимумом и минимумом, которые я нашел, поменяными местами? - C++
// #include &lt;iostream&gt; #include&lt;iomanip&gt; #include&lt;cstdlib&gt; using namespace std; int main() { const size_t...

Найти сумму между минимальным и максимальным значением в массиве - C++
Здравствуйте, ув. форумчане! Помогите пожалуйста, что-то я недопонимаю( Нужно найти сумму элементов массива, находящихся между...

В одномерном массиве найти сумму между первым и минимальным значением - C++
В одномерном массиве найти сумму между первым и минимальным значение . Я понял что это a = {6,4,5,2,7} он должен считать сумму между...

В одномерном массиве найти сумму между первым и вторым положительными элементами - C++
в одномерном массиве найти сумму между первым и вторым положительными элементами часть кода программы #include &quot;stdafx.h&quot; #include...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.