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

возвращение двух значений за раз - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.73
Iater
5 / 5 / 0
Регистрация: 13.12.2009
Сообщений: 182
07.03.2010, 20:17     возвращение двух значений за раз #1
в массиве нужно выбрать минимально и максимально значения, а затем их местами поменять.
чтоб узнать макс. и мин. пишу две функции заодно "запоминая" индекс.
проблема, в том что функция не может возвращать одновременно и макс. число и его индекс ((((
обойти не получается

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
double PoiskMax (double *p, int length)
{
double max = -10000;
int max_index = 0;
for(int i=0; i<length; i++)
{
if (*(p+i)>max)
{
max = *(p+i);
max_index = i;
}
++*(p+i);
}
return max;
}
в мейне:

double max = PoiskMax (p, length);
cout <<endl<<"max = "<< max <<endl;
cout <<endl<<"i_max = "<< max_index <<endl;


а ещё я забыл сказать... если плюнуть пока на индексы и просто найти мин и макс, то макс. число найдет правильно, а минимальное - нет О_о

а было так:

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
double PoiskMax (double *p, int length, int max_index)
{
    double max = -10000;
    max_index = 0;
    for(int i=0; i<length; i++)
    {
        if (*(p+i)>max)
        {
            max = *(p+i);
            max_index = i;
        }
        ++*(p+i);
    }
    return max;
}
///////////////////////////////////////////////////////
double PoiskMin (double *p, int length, int min_index)
{
    double min = 100000;
    min_index = 0;
    for(int i=0; i<length; i++)
    {
        if (*(p+i)<min)
        {
            min = *(p+i);
            min_index = i;
        }
        ++*(p+i);
    }
    return min;
}
из массива: arr[]={-6.3, 0.8, 12, -4, 13, 2.5, 7, 8, -9, 10};
макс. ставит 13
мин = -8

брееед (((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
07.03.2010, 20:20     возвращение двух значений за раз #2
Iater, что вам мешает вернуть только индекс, ведь имея массив можно всегда обратится по известному индексу
to4kin
14 / 14 / 2
Регистрация: 04.09.2009
Сообщений: 46
07.03.2010, 20:23     возвращение двух значений за раз #3
Как вариант создать структуру, с двумя полями: max и max_index (для минимального соответственно еще одну), и возвращать ее.
Для примера:
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct maximum_type
{
       double index;
       double value;
};
.......
int main()
{
    maximum_type max;
    max.index = 1;
    max.value = 1;
};
Iater
5 / 5 / 0
Регистрация: 13.12.2009
Сообщений: 182
07.03.2010, 20:29  [ТС]     возвращение двух значений за раз #4
Цитата Сообщение от M128K145 Посмотреть сообщение
Iater, что вам мешает вернуть только индекс, ведь имея массив можно всегда обратится по известному индексу
что-то я туплю... и как вывести на экран число, знаю индекс в массиве?
to4kin
14 / 14 / 2
Регистрация: 04.09.2009
Сообщений: 46
07.03.2010, 20:33     возвращение двух значений за раз #5
C++
1
cout << arr[max_index] << endl;
al072
14 / 14 / 0
Регистрация: 03.02.2010
Сообщений: 132
07.03.2010, 21:27     возвращение двух значений за раз #6
Держи вот наколдовал полностью рабочую программу которая меняет максимальное и минимальное значения в массиве array:

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
#include <iostream>
#include <iomanip>
using namespace std;
 
double& max(double array[], int len);//прототип функции поиска макс
double& min(double array[], int len);//прототип функции поиска мин
void smenit(double* pa, double* pb);//прототип функции замены значений местами
                                             
int main(void)
{
   double array[] = { 3.0, 10.0, 1.5, 15.0, 2.7, 23.0,
                      4.5, 12.0, 6.8, 13.5, 2.1, 14.0 };
   int len = sizeof array/sizeof array[0];  
                                            
 
   cout << endl;
   for(int i = 0; i < len; i++)
      cout << setw(6) << array[i];
 
   
  smenit(&(max(array,len)),&(min(array,len)));
   
             
 
   cout << endl;
   for(int i = 0; i < len; i++)
      cout << setw(6) << array[i];
 
   cout << endl;
 
   
   return 0;
}
 
double& max(double array[], int len)
{
   int j = 0;                               
   for(int i = 1; i < len; i++)
      if(array[j] < array[i])                      
         j = i;                             
   return array[j];                            
                                            
}
double& min(double array[], int len)
{
   int j = 0;                                
   for(int i = 1; i < len; i++)
      if(array[j] > array[i])                       
         j = i;                             
   return array[j];                            
                                             
}
void smenit(double* pa, double* pb)
{
   double temp;
 
   temp = *pa;
   *pa = *pb;
   *pb = temp;
}
smithy69
17 / 16 / 1
Регистрация: 06.11.2009
Сообщений: 167
07.03.2010, 21:36     возвращение двух значений за раз #7
а вернуть указатель? записать в ОП два значения какого то типа, и вернуть указатель на первый, а потом просто к указателю прибавить sizeof(тип) и получить второе значение.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2010, 21:48     возвращение двух значений за раз
Еще ссылки по теме:

Возвращение из функций нескольких значений C++
C++ Возвращение и вывод вычисленных значений в классах
C++ Возвращение значений из функции

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
07.03.2010, 21:48     возвращение двух значений за раз #8
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
#include <iostream>
#include <algorithm>
#include <iterator>
#include <cstdlib>
#include <ctime>
 
/*
*   в массиве нужно выбрать минимально и максимально значения, а затем их местами поменять.
*/
 
int main(){
    const size_t ARR_SIZE = 10;
    int arr[ARR_SIZE];
    
    srand(time(NULL));
 
    for ( int i = 0; i < ARR_SIZE; ++i )
        arr[i] = rand() % 100;
        
    std::cout << "Original array:" << std::endl;
    std::copy(arr, arr + ARR_SIZE, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
    
    std::cout << "Swap min and max values:" << std::endl;
    std::swap(*(std::min_element(arr, arr + ARR_SIZE)), *(std::max_element(arr, arr + ARR_SIZE)));
    std::copy(arr, arr + ARR_SIZE, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
    
    return 0;
}
Yandex
Объявления
07.03.2010, 21:48     возвращение двух значений за раз
Ответ Создать тему
Опции темы

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