Главная страница
    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.053 c
15-1177351141
Kolan
2007-04-23 21:59
2007.05.20
Предстаит разработать небольшую экспертную систему,&amp;#133


15-1177141428
Ford
2007-04-21 11:43
2007.05.20
Boot менеджер


1-1174639944
elserpiente
2007-03-23 11:52
2007.05.20
Описание интерфейса WebBrowser1.OleObject


1-1174434424
Интересующийся
2007-03-21 02:47
2007.05.20
Форма в SysTrey и SetForegroundWindow


3-1172591890
Helen
2007-02-27 18:58
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский