Модификация переменных при помощи процедуры

Форум пользователей пакета Maple

Модератор: Admin

martingal
Сообщения: 32
Зарегистрирован: Чт ноя 24, 2005 10:55 am

Модификация переменных при помощи процедуры

Сообщение martingal » Пт июн 09, 2006 12:09 pm

Массив [1,2,3] должен превращаться в массив [1,4,9] при помощи процедуры. Но следующая процедура оставляет его без изменений.

n:=3:c:=[1,2,3]:
lcq := proc(k,A)
for i from 1 by 1 to k do A[i]:=A[i]^2; end do;
return(A);
end proc:
lcq(n,c);

print(c);

[1,2,3]

Как нужно изменить синтаксис, чтобы процедура заработала как надо?

Irmantas
Сообщения: 589
Зарегистрирован: Ср апр 27, 2005 8:49 pm
Откуда: Литва, Каунас

Re: Модификация переменных при помощи процедуры

Сообщение Irmantas » Пт июн 09, 2006 12:39 pm

martingal писал(а):Массив [1,2,3] должен превращаться в массив [1,4,9] при помощи процедуры. Но следующая процедура оставляет его без изменений.

n:=3:c:=[1,2,3]:
lcq := proc(k,A)
for i from 1 by 1 to k do A[i]:=A[i]^2; end do;
return(A);
end proc:
lcq(n,c);

print(c);

Как нужно изменить синтаксис, чтобы процедура заработала как надо?

1) "с" не масив, а list типа.
2) передоваему аргумементу неможно присваивать ( A[i]:=A[i]^2; )
3) ваша исправлена процедура
n:=3: c:=[1,2,3]:
lcq := proc(k,A) local i,B;
B:=A;for i to k do B[i]:=A[i]^2; end do;
return(B); end proc:
lcq(n,c);

4) Всё это одной стакой
c:=[1,2,3]: [seq(i^2,i=c)];

martingal
Сообщения: 32
Зарегистрирован: Чт ноя 24, 2005 10:55 am

Re: Модификация переменных при помощи процедуры

Сообщение martingal » Пт июн 09, 2006 1:43 pm

Irmantas писал(а):2) передоваему аргумементу неможно присваивать ( A[i]:=A[i]^2; )

Я этого не знал. Спасибо.
Irmantas писал(а):4) Всё это одной стакой
c:=[1,2,3]: [seq(i^2,i=c)];

Разумеется. Это учебный пример.