Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.072 c
15-1176238641
Суслик
2007-04-11 00:57
2007.05.20
И снова хелперы :)


2-1177855425
dmdel
2007-04-29 18:03
2007.05.20
RichEdit


15-1177350860
ProgRAMmer Dimonych
2007-04-23 21:54
2007.05.20
Поясните, пожалуйста, такую вещь


15-1176804812
Kolan
2007-04-17 14:13
2007.05.20
А что это с rsdn &amp;#151; негрузится че-то&amp;#133


15-1176897747
Юрий Зотов
2007-04-18 16:02
2007.05.20
Получил спам





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский