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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Doctor-d
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 15:06     Найти сумму между максимумом и минимумом в массиве. #1
Найти сумму между максимумом и минимумом в массиве.
Подскажите пожалуйста, почему выдает не правильный ответ? Как исправить????
Пишу на 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");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2011, 15:06     Найти сумму между максимумом и минимумом в массиве.
Посмотрите здесь:

C++ Кол-во элементов между минимумом и максимумом
C++ В одномерном массиве найти сумму между первым и вторым положительными элементами
C++ В одномерном массиве найти сумму положительных элементов и произведение между некоторыми элементами
Найти разницу между максимумом и минимумом в каждой строке массива C++
C++ Найти сумму отрицательных элементов между максимумом и минимумом в массиве
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aeshes
 Аватар для aeshes
437 / 200 / 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(), хотя они уже были объявлены как глобальные. Либо оставьте их только глобальные, либо передавайте все параметры в функцию суммирования
Doctor-d
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 16:04  [ТС]     Найти сумму между максимумом и минимумом в массиве. #3
Спасибо, это исправил, а как передать значения Imax. Imin. max и min в функцию с помощью ссылок?
aeshes
 Аватар для aeshes
437 / 200 / 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) - входит
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");
}
Вот код
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 16:27     Найти сумму между максимумом и минимумом в массиве. #6
смотри, если ты сделал у функции sum заголовок с 6 параметрами, то и вызывать ты ее должен с 6 параметрами:
si=sum(X,n,Imax,Imin,max,min);

Обязательно параметры перечисляй в том же порядке, что и в заголовке функции, иначе будет работать неправильно
И типы параметров тоже должны совпадать - у тебя n имеет модификатор const при объявлении, а у функции нет такого модификатора при соответствующем параметре
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");
}
aeshes
 Аватар для aeshes
437 / 200 / 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, а другие компиляторы - да
diagon
Higher
 Аватар для diagon
1920 / 1186 / 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 );
}
Doctor-d
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 16:47  [ТС]     Найти сумму между максимумом и минимумом в массиве. #10
aeshes, Тоесть? а где менять? в условии заменил, а в теле, оставить max и min? напиши плиз кодом
aeshes
 Аватар для aeshes
437 / 200 / 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, он сможет увидеть насколько с ним быстрее и короче эта программа)
Doctor-d
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 17:17  [ТС]     Найти сумму между максимумом и минимумом в массиве. #12
aeshes, Да вы правы, это кусок лабы) Но стремимся изучать!!! и стараемся! Спасибо за помощь, щас ток разберусь как минимум и максимум не плюсовать и всё) Благодарю!
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
09.10.2011, 17:23     Найти сумму между максимумом и минимумом в массиве. #13
если не нужно включать сами минимум и максимум, то в заголовках цикла должно быть так:
for(int i=Imax+1;i<Imin;i++)

Во втором цикле соответственно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2011, 17:25     Найти сумму между максимумом и минимумом в массиве.
Еще ссылки по теме:

C++ Найти сумму отрицательных элементов между максимумом и минимумом в массиве
Как сделать чтобы потом выводило матрицу с максимумом и минимумом, которые я нашел, поменяными местами? C++
C++ В одномерном массиве найти сумму между первым и минимальным значением

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

Или воспользуйтесь поиском по форуму:
Doctor-d
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 8
09.10.2011, 17:25  [ТС]     Найти сумму между максимумом и минимумом в массиве. #14
Угу, уже тож нашёл) Спасибо вам огромное за помощь!!!!
Yandex
Объявления
09.10.2011, 17:25     Найти сумму между максимумом и минимумом в массиве.
Ответ Создать тему
Опции темы

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