Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2010, 11:33   #1
IceBreaker
Пользователь
 
Аватар для IceBreaker
 
Регистрация: 03.02.2010
Сообщений: 20
По умолчанию Значение функции

Здравствуйте, Господа! У меня к вам следующий вопрос:
Может ли функция возвращать массив? Ответ обоснуйте)) спасибо.
Shit happens
IceBreaker вне форума Ответить с цитированием
Старый 08.02.2010, 12:18   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Может и принимать и возвращать даже с параметрами-значениями, правда если массив не превышает размера стека
Код:
type
  MyArr = array[0..1] of byte;

function ar(x: MyArr): MyArr;
begin
  x[0] := 1;
  x[1] := 1;
  result := x;
end;

var
 mas: MyArr;
begin
  mas[0] := 0;
  mas[1] := 0;
  mas := ar(mas);
  write(mas[0], ' ', mas[1]);
  readln
end.
Но это очень плохой способ. Лучше использовать процедуры с параметрами-переменными (указатели на массив) или на худой конец объявлять глобально
eoln вне форума Ответить с цитированием
Старый 08.02.2010, 12:20   #3
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Ммм...Встречный вопрос:Можно ли передать указатель в функцию?..
Ответ: Да.(про указатели можно почитать в книгах)
А вернуть указатель можно?...Хм...думаю,что это сослужит как пример.
Код:
double* new_array(int size, double value)
{
 
 double* arr = new double[size];
 for(int i=0; i<size; i++) arr[i]=value;
 return arr;
}

int main()
{
int size=10; 
double* array = new_array(size, 0.5);
 return 0;
}
А вообще гуглить надо)
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 08.02.2010, 12:21   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Ответ обоснуйте)
Может конечно, она вернет указатель на участок памяти содержащий массив, и работай с ним, разименовывая его. Обычно это не требуется, так как умныи язык сам за тебя все сделает незаметно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.02.2010, 12:43   #5
IceBreaker
Пользователь
 
Аватар для IceBreaker
 
Регистрация: 03.02.2010
Сообщений: 20
По умолчанию

Спасибо большое!! =)

ну вот что не так с кодом?

Код:
int *input(int *a, int n, int m) {
	int i,j;
	printf("Input matrix size: n m = \n");
	scanf("%d",&n);
	scanf("%d",&m);
	
	printf("Input matrix:\n");
	for(i=0; i<n; i++){
	  for(j=0; j<m; j++){  //Столбцы
	    printf("%d,%d = ",i+1,j+1);
	    scanf("%d", &a[i][j]);
	  }
	};
	return a;
}
Shit happens

Последний раз редактировалось Stilet; 08.02.2010 в 15:33.
IceBreaker вне форума Ответить с цитированием
Старый 08.02.2010, 16:02   #6
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Простите, пожалуйста, но, прежде чем закапываться в C-шные технические тонкости работы с двумерными массивами, я бы постарался прежде всего лучше продумать функции этой функции (простите за каламбур ) Не решён вопрос, который при создании ПО всегда нужно решать одним из первых. Что на входе (а у Вас тут - 2 входа, список параметров и клавиатура) и что на выходе? Вернее, выход, вроде, определён - указатель на массив, который будет введён в этой ф-ии. Но зачем тогда int* a стоИт ещё и в параметрах?! Размерности решено вводить, ладно. Но зачем они тогда тоже оказались в параметрах? Причём, в таком виде, что вызывающая программа всё равно не сможет узнать их значения. А если размерности решено передавать, то зачем тогда scanf'ы?

Added 14:37 CET
Да, и, чтобы не сваливать себе сразу на голову ещё и "приведенный индекс" или "указатель на указатель", я бы начал тренировку с кош... пардон, с одномерного массива

Последний раз редактировалось Vago; 08.02.2010 в 16:37.
Vago вне форума Ответить с цитированием
Старый 09.02.2010, 00:34   #7
IceBreaker
Пользователь
 
Аватар для IceBreaker
 
Регистрация: 03.02.2010
Сообщений: 20
По умолчанию

спасибо за комментарий, перефразирую вопрос. почему код не работает?
Shit happens
IceBreaker вне форума Ответить с цитированием
Старый 09.02.2010, 00:48   #8
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Он не "не работает". Он пока ещё просто даже не транслируется без ошибок. Транслятор смотрит на написанный Вами список параметров и ожидает после этого, что a будет одномерным массивом.
Vago вне форума Ответить с цитированием
Старый 09.02.2010, 01:17   #9
Day
Новичок
Джуниор
 
Регистрация: 20.01.2010
Сообщений: 2
По умолчанию

У меня такое чувство, что конструкция " &n", где n - параметр вообще не
должна транслироваться (и уж тем более работать)
Day вне форума Ответить с цитированием
Старый 09.02.2010, 01:49   #10
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

неверно .
Namolem вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить значение функции Stripped Помощь студентам 6 16.01.2010 22:05
Значение квадратичной функции MAKEDON Общие вопросы C/C++ 3 07.03.2009 13:33
Вычислить значение функции Deus Общие вопросы Delphi 10 25.01.2009 17:09