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

Функция возвращающая массив - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ СТРУКТУРЫ в СИ++ http://www.cyberforum.ru/cpp-beginners/thread226106.html
Описать структуру с именем SPORTSMAN, с полями: фамилия, имя, вид спорта, результат. Ввести несколько структур. Затем напечатать их по возрастанию, используя в качестве первичного ключа – вид спорта, в качестве вторичного – фамилию спортсмена и третьего ключа - результат. Затем напечатать фамилии спортсменов, имеющих лучший результат (по одному для каждого вида спорта). Указание: при выполнении...
C++ Передача двойного указателя Написал прогу которая работает с односвязным списком. При передаче в функцию двойного указателя, я его теряю. Смотрел в дебаггером - значение внутри функции совсем другое. Пробовал другой компилятор, тоже самое #include <stdio.h> #include <stdlib.h> struct List { int data; struct List* next; }; http://www.cyberforum.ru/cpp-beginners/thread226097.html
C++ Переставляя строки заданной матрицы, расположить их в соответствии с убыванием характеристик
Дана целочисленная прямоугольная матрица. Характеристикой строки матрицы назовем сумму ее отрицательных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с убыванием характеристик. помогите пожайлуйста
C++ FTP клиент
нужна помощь, нужно написать програму которая просто заливает файл на фтп сервер, на WinApi. поиск по гуглу расказал что нада юзать wininet, а вот что его и как толком не понять
C++ Функции в С++ http://www.cyberforum.ru/cpp-beginners/thread226082.html
Привет всем! Помогите,пожалуйста,решить задание.Очень срочно нужно... Написать функцию с умалчиваемыми параметрами в соответствии с вариантом, продемонстрировать различные способы вызова функции: • с параметрами заданными явно, • с опущенными параметрами • часть параметров задана явно, а часть опущена. 2. Написать функцию с переменным числом параметров в соответствии с вариантом,...
C++ Выкладываю реализацию алгоритма Дейкстры на С++ Дпанная программа выполняет поиск по заданной матрице весов. Далее указываем начальную точку в графе и программа расчитывает все кратчайшие растояния от начальной точки до остальных следующим видом:путь от нач. точки до n-ой: - n-ая промежуточная промежуточная... начальная, вес пути - х. долго искал подобный алгоритм но так и не нашел. вот выкладываю что получилось.Прошу строго не судить(на... подробнее

Показать сообщение отдельно
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
09.01.2011, 14:28     Функция возвращающая массив
Здравствуйте. Для возврата массива возвращаю указатель на него, но вне предела области в которой он был создан память выделенная под массив используется программой, при этом состояние массива меняется, т.е. данные в нем меняются. Как передать массив так, что-бы данные в нем не терялись, что-бы сборщик мусора на него не действовал.
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>
 
namespace lab1 {
 
const int n = 7,
    m = 9,
    a[ n ][ m ] = {
        {0, 0, 3, 0, 5, 0, 0, 0, 9},
        {0, 2, 3, 0, 5, 6, 0, 0, 0},
        {0, 2, 3, 4, 0, 0, 0, 0, 9},
        {1, 0, 0, 4, 5, 0, 0, 8, 9},
        {0, 0, 0, 0, 5, 6, 0, 8, 0},
        {1, 2, 0, 4, 0, 6, 0, 0, 0},
        {1, 0, 0, 0, 0, 0, 7, 8, 0} }, 
    p[ n ] = {1, 3, 2, 3, 1, 2, 2};
 
int check( int fill[] ) {
    for( int i = 0; i < m; ++i ) {
        if( !fill[ i ] ) return 0;
    }
    return 1;
}
 
int * cost() {
    int was[ n ] = {0},
        fill[ m ] = {0};
    while( !lab1::check( fill ) ) {
        int index = 0;
        double max = 0.0;
        for( int i = 0; i < n; ++i ) {
            if( was[ i ] ) continue;
            int sum = 0;
            for( int j = 0; j < m; ++j ) {
                sum += !fill[ j ] && a[ i ][ j ];
            }
            if( max < sum / p[ i ] ) {
                index = i;
                max = sum * 1.0 / p[ i ];
            }
        }
        was[ index ] = 1;
        for( int i = 0; i < m; ++i ) {
            fill[ i ] = !fill[ i ] ? a[ index ][ i ] : fill[ i ];
        }
    }
    return was;
}
 
};
 
int main() {
    int *res = lab1::cost();
    for( int i = 0; i < lab1::n; ++i ) {
        if( res[ i ] ) {
            printf("%c\n", 'A' + i );
        }
    }
}
Суть кода - покрытие множества за минимальную цену.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru