Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.20;
Скачать: CL | DM;

Вниз

Записать в цикле.   Найти похожие ветки 

 
Anton_La   (2007-04-19 10:20) [0]

Здравствуйте. Есть у меня одна задачка, которая уже голову мне сломала, не знаю, как сделать это.

У меня есть четырые матрицы-массива:

QMatrix = array of array of Double (4x3)

1 2 3 1
2 3 1 2
3 1 2 3

BMatrix = array of Double (1x3)

4
5
6

ZMatix = array of Integer (4x1) - значения в массиве далее в процессе программы изменяются

0 0 0 0

И пустая матрица для результатов с размерностью QMatrix
RMatrix = array of array of Double (4x3)

Честно говоря, я не знаю, как описать сам алгоритм работы, поэтому у меня и такой ступор, приведу пример того, что должно получиться.

Нужно например, для указанных размерностей и данных сделать следующее:

RMatrix[1, 1] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[1, 2] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^1 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[1, 3] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^1;

RMatrix[2, 1] := 4 * 2^1 * 3^0 * 1^0 + 5 * 2^0 * 2^0 * 3^0 + 3 * 2^0 * 3^0 * 1^0;
RMatrix[2, 2] := 4 * 2^1 * 3^0 * 1^0 + 5 * 2^0 * 3^1 * 1^0 + 3 * 2^0 * 3^0 * 1^0;
RMatrix[3, 3] := 4 * 2^1 * 3^0 * 1^0 + 5 * 2^0 * 3^0 * 1^0 + 3 * 2^0 * 3^0 * 1^1;

RMatrix[3, 1] := 4 * 3^1 * 1^0 * 2^0 + 5 * 3^0 * 1^0 * 2^0 + 3 * 3^0 * 1^0 * 2^0;
RMatrix[3, 2] := 4 * 3^1 * 1^0 * 2^0 + 5 * 3^0 * 1^1 * 2^0 + 3 * 3^0 * 1^0 * 2^0;
RMatrix[3, 3] := 4 * 3^1 * 1^0 * 2^0 + 5 * 3^0 * 1^0 * 2^0 + 3 * 3^0 * 1^0 * 2^1;

RMatrix[4, 1] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[4, 2] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^1 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[4, 3] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^1;


Степень, в которую возводят, берется из ZMatrix по столбцу QMatrix, но на одном элементе в каждой "внутренней" итерации она возрастает на +1 от значения которое в ZMatrix.
QData := QData * Power(QMatrix[i, j], ZMatrix[i]); или  QData := QData * Power(QMatrix[i, j], ZMatrix[i] + 1);

Никак не могу сформулировать и сделать весь этот алгоритм.


 
Anton_La   (2007-04-19 10:23) [1]

Ошибся, вот корректный пример:

RMatrix[1, 1] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[1, 2] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^1 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[1, 3] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^1;

RMatrix[2, 1] := 4 * 2^1 * 3^0 * 1^0 + 5 * 2^0 * 2^0 * 3^0 + 3 * 2^0 * 3^0 * 1^0;
RMatrix[2, 2] := 4 * 2^0 * 3^0 * 1^0 + 5 * 2^0 * 3^1 * 1^0 + 3 * 2^0 * 3^0 * 1^0;
RMatrix[3, 3] := 4 * 2^0 * 3^0 * 1^0 + 5 * 2^0 * 3^0 * 1^0 + 3 * 2^0 * 3^0 * 1^1;

RMatrix[3, 1] := 4 * 3^1 * 1^0 * 2^0 + 5 * 3^0 * 1^0 * 2^0 + 3 * 3^0 * 1^0 * 2^0;
RMatrix[3, 2] := 4 * 3^0 * 1^0 * 2^0 + 5 * 3^0 * 1^1 * 2^0 + 3 * 3^0 * 1^0 * 2^0;
RMatrix[3, 3] := 4 * 3^0 * 1^0 * 2^0 + 5 * 3^0 * 1^0 * 2^0 + 3 * 3^0 * 1^0 * 2^1;

RMatrix[4, 1] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[4, 2] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^1 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[4, 3] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^1;


 
Anton_La   (2007-04-19 10:25) [2]

Что-то совсем у меня голова закружилась с матрицами с моими, опять нашел неточность

RMatrix[1, 1] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 6 * 1^0 * 2^0 * 3^0;
RMatrix[1, 2] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^1 * 3^0 + 6 * 1^0 * 2^0 * 3^0;
RMatrix[1, 3] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 6 * 1^0 * 2^0 * 3^1;

RMatrix[2, 1] := 4 * 2^1 * 3^0 * 1^0 + 5 * 2^0 * 2^0 * 3^0 + 6 * 2^0 * 3^0 * 1^0;
RMatrix[2, 2] := 4 * 2^0 * 3^0 * 1^0 + 5 * 2^0 * 3^1 * 1^0 + 6 * 2^0 * 3^0 * 1^0;
RMatrix[3, 3] := 4 * 2^0 * 3^0 * 1^0 + 5 * 2^0 * 3^0 * 1^0 + 6 * 2^0 * 3^0 * 1^1;

RMatrix[3, 1] := 4 * 3^1 * 1^0 * 2^0 + 5 * 3^0 * 1^0 * 2^0 + 6 * 3^0 * 1^0 * 2^0;
RMatrix[3, 2] := 4 * 3^0 * 1^0 * 2^0 + 5 * 3^0 * 1^1 * 2^0 + 6 * 3^0 * 1^0 * 2^0;
RMatrix[3, 3] := 4 * 3^0 * 1^0 * 2^0 + 5 * 3^0 * 1^0 * 2^0 + 6 * 3^0 * 1^0 * 2^1;

RMatrix[4, 1] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 6 * 1^0 * 2^0 * 3^0;
RMatrix[4, 2] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^1 * 3^0 + 6 * 1^0 * 2^0 * 3^0;
RMatrix[4, 3] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 6 * 1^0 * 2^0 * 3^1;


 
KSergey ©   (2007-04-19 10:50) [3]

Можете привести хоть один свой пример? Пусть не правильный.
А то как-то слабо верится в поломанность мозга имено этой задачей.

И еще.
Перепишите (для себя!) правильный вариант, но не переставляя порядок следования x^y в выражении (т.е. чтобы везде было 1^x * 2^y * 3^z, а не так, как сейчас).

По-моему, это поможет вам увидеть алгоритм.


 
oldman ©   (2007-04-19 11:00) [4]


> Записать в цикле.


for i=1 to 4 do
for j=1 to 3 do
RMatrix[i,j] := ИскомаяФормула;
end;
end;

:)))

Ну вас к лешему с вашими курсовиками. На занятия ходить надо!


 
Anton_La   (2007-04-19 11:16) [5]

Спасибо, что откликнулись. Всё бы хорошо, если бы можно было сделать это в два цикла просто, но там же присутствует "плавающая" увеличивающееся степень во "вложенной итерации", вот и я никак не могу понять как реализовать.


> И еще.Перепишите (для себя!) правильный вариант, но не переставляя
> порядок следования x^y в выражении (т.е. чтобы везде было
> 1^x * 2^y * 3^z, а не так, как сейчас).


Я не особо понял, честно говоря.


> Можете привести хоть один свой пример? Пусть не правильный.
> А то как-то слабо верится в поломанность мозга имено этой
> задачей.


Вот, только не ужасайтесь.

var
 i, j, m, n: Integer;
 delta1, delta2: Double;
 counter1: Integer;
 data1 : string;
 set1: Boolean;
begin
 Delta1 := 1;
 Counter1 := 0;
 delta2 := 1;
 set1 := True;
 //  for j := Low(QMatrix[0]) to High(QMatrix[0]) do
 j := 0;        //для теста, только первый столбец из QMatrix
 Counter1 := 0;

 delta2 := 0;

 if Outlay(j) - 1 < Num then
 begin

 for i := Low(BMatrix) to High(BMatrix) do
 begin
   set1 := True;
   Delta1 := 1;

   ShowMessage("i="+IntToStr(i));

   for m := Low(QMatrix) to High(QMatrix) do
   begin

     //ShowMessage(Format("%d;%d", [m, n]));
     // for n := Low(QMatrix) to High(QMatrix) do
     if (i = m) and set1 then
       Delta1 := Delta1 * Power(QMatrix[m, j], Outlay(j));
     else begin
       Delta1 := Delta1 * Power(QMatrix[m, j], Outlay(j) + 1);
       set1 := False;
     end;

     ShowMessage(FloatToStr(Delta1));

   end;
   Delta2 := Delta2 + (BMatrix[i] * Delta1);
end;


В этом коде вместо матрицы ZMatrix используется функция Outlay, с анологичным смыслом.


 
oldman ©   (2007-04-19 16:10) [6]


> Всё бы хорошо, если бы можно было сделать это в два цикла
> просто, но там же присутствует "плавающая" увеличивающееся
> степень во "вложенной итерации", вот и я никак не могу понять
> как реализовать.


> Степень, в которую возводят, берется из ZMatrix по столбцу
> QMatrix, но на одном элементе в каждой "внутренней" итерации
> она возрастает на +1 от значения которое в ZMatrix.


Обычным if then в зависимости от i,j


 
Anton_La   (2007-04-19 17:17) [7]


> Обычным if then в зависимости от i,j


Я и пытался это применить, в коде выше это видно, но я не понимаю как это правильно сделать. И кроме того, я даже не уверен, здраво ли идут у меня циклы, их наверное требуется три... не знаю, просто запутался, перепробовал кучу вариантов, но так и не смог сделать ничего нормально работающего.



Страницы: 1 вся ветка

Текущий архив: 2007.05.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.523 c
15-1176812625
@!!ex
2007-04-17 16:23
2007.05.20
Помогите собрать багажник на пятерку!


15-1176862822
Slider007
2007-04-18 06:20
2007.05.20
С днем рождения ! 18 апреля


6-1163510799
DVM
2006-11-14 16:26
2007.05.20
Отправка письма через Winsock, искажается поле Subject


2-1178253446
Regent
2007-05-04 08:37
2007.05.20
Не могу найти ошибку


2-1178288335
Inna_Z
2007-05-04 18:18
2007.05.20
Как узнать версию Oracle к которой подключились?