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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
"Ламер"-программер:)
5 / 5 / 0
Регистрация: 17.04.2009
Сообщений: 69
#1

Пользовательские Функции - C++

26.05.2009, 23:03. Просмотров 1264. Ответов 10
Метки нет (Все метки)

Доброго времени суток, уважаемые форумчане!
У меня есть вопрос. Допустим у нас есть функция которая задаёт динамический массив:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int **input(int n, int m)
{
    int i, j;
    int **a;
    a=(int**)malloc(n* sizeof(int*));
        for (i=0; i<m; i++)
        {
            a[i]=(int*)malloc(n* sizeof(int));
            for(j=0; j<n; j++)
            {
                a[i][j]=0;
            }
        }
        for (i=0; i<m; i++)
            for (j=0; j<n; j++)
            {
                printf ("\nBBeduTe eJLeMEHTbl MatpuLLbl A(%d,%d) eJLeMeHT MaccuBa:", i+1, j+1);
                scanf ("%d", &a[i][j]);
            }
            return a;
}
Для того что бы вызвать данную функцию необходимо в теле программы написать:

C++
1
p=input(m,n);
Не могли бы вы подсказать как из этой функции "достать" массив и использовать в другой функции, например в функции умножения числа на массив. Если не сложно набросайте какой-нибудь пример. Буду благодарен за любую помощь =)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17179 / 5433 / 336
Регистрация: 30.03.2009
Сообщений: 14,720
Записей в блоге: 26
26.05.2009, 23:09     Пользовательские Функции #2
C
1
2
3
4
int **p;
p = input (10, 20);
x = p[3][4];
p[5][6] = y;
"Ламер"-программер:)
5 / 5 / 0
Регистрация: 17.04.2009
Сообщений: 69
26.05.2009, 23:29  [ТС]     Пользовательские Функции #3
Всё равно чего-то не пойму =( Написал функцию для умножения, вот:
C++
1
2
3
4
5
6
7
int **mult(int **z, int m, int n, int mul) //mul переменная вводимая с клавиатуры
{
    int i, j;
    for (i=0; i<m; i++)
        for (j=0; j<n; j++)
            z[i][j]=z[i][j]*mul;
}
В теле программы вызываю вот так:
C++
1
2
int **q;
q=mul(p,m,n,mul);
Всё равно компилятор ругается =(
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17179 / 5433 / 336
Регистрация: 30.03.2009
Сообщений: 14,720
Записей в блоге: 26
26.05.2009, 23:34     Пользовательские Функции #4
А что ты хочешь сделать-то?
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
26.05.2009, 23:35     Пользовательские Функции #5
в функцию mult добавь return z;
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17179 / 5433 / 336
Регистрация: 30.03.2009
Сообщений: 14,720
Записей в блоге: 26
26.05.2009, 23:40     Пользовательские Функции #6
Цитата Сообщение от Rififi Посмотреть сообщение
в функцию mult добавь return z;
ТОгда нет смысла заводить переменные p и q, поскольку они будут описывать один и тот же массив
"Ламер"-программер:)
5 / 5 / 0
Регистрация: 17.04.2009
Сообщений: 69
26.05.2009, 23:41  [ТС]     Пользовательские Функции #7

Благодарю!
пойду, выпью йаду, и скинусь с 9 этажа.........


Цитата Сообщение от Evg Посмотреть сообщение
А что ты хочешь сделать-то?
Хотел что бы функция mult считала массив из функции input
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
26.05.2009, 23:43     Пользовательские Функции #8
смысл есть. можно составлять цепочки выражений
C++
1
2
3
int** mul...
int** sum...
mul(sum(...), sum(...), ...);
тем более что отсутствие return'а - это ошибка синтаксиса.
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17179 / 5433 / 336
Регистрация: 30.03.2009
Сообщений: 14,720
Записей в блоге: 26
26.05.2009, 23:48     Пользовательские Функции #9
Цитата Сообщение от Rififi Посмотреть сообщение
смысл есть. можно составлять цепочки выражений
Ну это для тебя понятно. Товарищу это врядли нужно. Может он хотел, чтобы ему в качестве рузультата вернулась новая таблица или чего ещё
"Ламер"-программер:)
5 / 5 / 0
Регистрация: 17.04.2009
Сообщений: 69
26.05.2009, 23:58  [ТС]     Пользовательские Функции #10
Цитата Сообщение от Evg Посмотреть сообщение
Ну это для тебя понятно. Товарищу это врядли нужно. Может он хотел, чтобы ему в качестве рузультата вернулась новая таблица или чего ещё
если я вас правильно понял, то, да, мне необходим посчитанный массив вывести.

Добавлено через 8 минут 3 секунды
Всем спасибо, всем до свиданья, тема не актуальна более, я разобрался
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2009, 23:59     Пользовательские Функции
Еще ссылки по теме:

C++ Пользовательские функции
C++ Пользовательские функции
Пользовательские функции C++
Добавить в код любые пользовательские функции (лучше всего - функции ввода/вывода) C++
Написать две пользовательские функции, эквивалентные стандартной функции strlen C++

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17179 / 5433 / 336
Регистрация: 30.03.2009
Сообщений: 14,720
Записей в блоге: 26
26.05.2009, 23:59     Пользовательские Функции #11
Т.е. если после тебе НЕ нужно, чтобы первоначальный массив был сохранён (т.е. новая матрица делалась прямо поверх старой), то в коде из поста #3 функцию mult делаешь void

C++
1
2
3
4
5
6
int **p;
m = 10; n = 20; // размерность матрицы
p = input (m,n); // вводим элементы массива
mul = 5; // коэффициэнт для умножения
mult (p, m, n, mul);
// Теперь p описывает матрицу, которая получена из исходной путём умножения на mul
Если тебе всё-таки нужно создать новую матрицу (чтобы осталась и старая и новая), то в процедуре mult создаёшь новую матрицу z1 (точно так же как ты чоздал a в процедуре input), а в том цикле, который у тебя уже написан вместо "z[i][j] = z[i][j]*mul" пишешь "z1[i][j] = z[i][j]*mul", а в конце процедуры "return z1;". А использование будет такое:

C++
1
2
3
4
5
6
int **p, **p1;
m = 10; n = 20; // размерность матрицы
p = input (m,n); // вводим элементы массива
mul = 5; // коэффициэнт для умножения
p1 = mult (p, m, n, mul);
// Теперь у нас есть две матрицы: исходная p и умноженная p1
Yandex
Объявления
26.05.2009, 23:59     Пользовательские Функции
Ответ Создать тему
Опции темы

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