Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Простой вопрос


Автор: Алек 12.8.2004, 09:41
Если я использую один и тот же массив с переменными элементамми несколько раз в процедуре,
и потом еще в какой-нибудь подпроцедуре, то может по проще запись есть?

procedure Get_1(g,k,d,N4U : real);{}
var
Rx: array[1..4, 1..4] of real;
begin
Rx[1,1]:=1;
Rx[1,2]:=0;
Rx[1,3]:=0;
Rx[1,4]:=0;
Rx[2,1]:=0;
Rx[2,2]:=cos(kren);
Rx[2,3]:=sin(kren);
Rx[2,4]:=0;
Rx[3,1]:=0;
Rx[3,2]:=-sin(kren);
Rx[3,3]:=cos(kren);
Rx[3,4]:=0;
Rx[4,1]:=0;
Rx[4,2]:=0;
Rx[4,3]:=0;
Rx[4,4]:=1;
end;
И что вообще называется "хорошим тоном"?

Автор: Akella 12.8.2004, 10:07
думаю, что нету. Только не пойму, причем здесь входные параметры g,k,d,N4U : real???

Автор: Ripper 12.8.2004, 10:42
Хороший тон наверно красивое написание программы чтобы другие могли разобратся.. где то на форуме есть статья про это.
Наверно только если перебором при случае можно пользоватся(for i:=1 to ..и заполнять значениями I если надо конечно), а так приходится заполнять каждый элемент массива самому.. хотя я точно незнаю.

Автор: Berill 12.8.2004, 13:59
Что-то мне подсказывает, что эту самую матрицу в задаче получаете каким-то образом. Не так ли?

Автор: p0s0l 12.8.2004, 14:03
Модератор: Название темы должно отражать ее суть!

Автор: Guest 12.8.2004, 14:05
Код

For i := 1 to 5
 if i >= 5 then
.....................Заплняем
else end;


Автор: Guest 12.8.2004, 14:07
Или так:
Код
For i:=1 to 4 do
 For k:=1 to 4 do
 .....................заплняем

end;

Автор: decoder 12.8.2004, 14:11
Алек Всё у тебя правильно написано thumbs-up.gif
А всяких там гуестав не слушай - дезинформаторы гражданской наружности mad.gif


Автор: Berill 12.8.2004, 14:18
Цитата(Guest @ 12.8.2004, 14:05)
Код

For i := 1 to 5
 if i >= 5 then
.....................Заплняем
else end;

{---------------------------}

For i:=1 to 4 do
For k:=1 to 4 do
.....................заплняем

end;



Интересно, end'ы для чего поставлены? baaa.gif

Автор: decoder 12.8.2004, 14:21
Цитата(Berill @ 12.8.2004, 14:18)
Интересно, end'ы для чего поставлены?
можт гуэст - вэбэшник?

Автор: Guest 12.8.2004, 14:27
Ай .......... мли ........ сори, забылся совсем
Эт кусок кода по заполнению многомерного массива. Я вырезал процедурки а энды забыл....
А вообще Алек все утя правильно, только если измерений в массиве не 2, а 16 и в них не по 4 а 520 вклалдок, то....................

Автор: Berill 12.8.2004, 14:31
Алек, постарайся найти формулу, по которой нужно заполнять массивы, и тогда просто используй циклы. wink.gif

Автор: Алек 13.8.2004, 17:02
Цитата(Berill @ 12.8.2004, 13:59)
Что-то мне подсказывает, что эту самую матрицу в задаче получаете каким-то образом. Не так ли?

Точно так - синусы, косинусы будут высчитываться несколько раз, при остальных постоянных. В этом-то и беда. Минимум три подпроцедуры ее используют, и каждый раз - вводи заново notify.gif
Цитата(Berill @ 12.8.2004, 14:31)
постарайся найти формулу, по которой нужно
заполнять массивы, и тогда просто используй циклы. wink.gif

Хороший совет, но где ж найти такую формулу??? Может, если сделать копию -
массив-константу, а потом ее присваивать рабочиму массиву, добовляя переменные элементы. Тогда, хотябы в подпрограмме не надо повторться.hmmm.gif
Цитата(dsergey @ 12.8.2004, 10:07)
Только не пойму, причем здесь входные параметры g,k,d,N4U : real???

Да, это я не все из проги убрал

Автор: ChVovan 13.8.2004, 17:23
Код
procedure Get_1(g,k,d,N4U : real);{}
var
 Rx: array[1..4, 1..4] of real;
 i, j : integer;
begin
{
  Rx[1,1]:=1;         Rx[1,2]:=0;           Rx[1,3]:=0;         Rx[1,4]:=0;
  Rx[2,1]:=0;         Rx[2,2]:=cos(kren);   Rx[2,3]:=sin(kren); Rx[2,4]:=0;  
  Rx[3,1]:=0;         Rx[3,2]:=-sin(kren);  Rx[3,3]:=cos(kren); Rx[3,4]:=0;
  Rx[4,1]:=0;         Rx[4,2]:=0;           Rx[4,3]:=0;         Rx[4,4]:=1;
                                   }


 for i := 1 to 4 do
   for j := 1 to 4 do
     Rx[i,j]:=0;  


  Rx[1,1]:=1;                  
                     Rx[2,2]:=cos(kren);    Rx[2,3]:=sin(kren);
                     Rx[3,2]:=-Rx[2,3];     Rx[3,3]:=Rx[2,2];
                                                                Rx[4,4]:=1;
end;

Автор: p0s0l 13.8.2004, 17:40
А можно еще так:
Код

const Rx0 : TArray1 = ((1,0,0,0),(0,0,0,0),(0,0,0,0),(0,0,0,1));
var Rx : TArray1;
   kren : real;
begin
 Rx := Rx0;
 Rx[2,2]:=cos(kren);
 Rx[2,3]:=sin(kren);
 Rx[3,2]:=-sin(kren);
 Rx[3,3]:=cos(kren);
end;
Т.е. вначале в Rx заносим элементы, которые всё время одинаковые, а потом отдельно изменяем меняющиеся элементы...

Или еще так - вначале делаем всё нулями, а потом заполняем ненулевые элементы:
Код

var Rx : array [1..4, 1..4] of real;
   kren : real;
begin
 FillChar (Rx, SizeOf(Rx), 0);
 Rx[1,1]:=1;
 Rx[2,2]:=cos(kren);
 Rx[2,3]:=sin(kren);
 Rx[3,2]:=-sin(kren);
 Rx[3,3]:=cos(kren);
 Rx[4,4]:=1;
end;



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)