Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2011, 13:59   #1
Marjasja
Новичок
Джуниор
 
Регистрация: 22.05.2011
Сообщений: 7
По умолчанию Delphi, умножение массивов, заполнение при условии.

Привет! У меня такое задание: есть такая таблица показателей по годам (P[i,j]):

показатель 2006 2007 2008 2009
Х1 0,220 0,344 0,317 0,003
Х2 1,920 1,43 1,245 1,312
Х3 0,581 0,703 0,885 0,654
Х4 0,208 0,141 0,117 0,113
Х5 -0,486 -0,239 -0,051 -0,340
Х6 0,263 0,164 0,133 0,128
и таблица для классификации на уровни (V[i,r])

Пок Границы
Низкий Средний Высокий
Х1 -0,3 -0,1 0,1
Х2 0,35 1,25 2,15
Х3 -0,1 0,2 0,5
Х4 0,06 0,3 0,54
Х5 -1,5 - 0,5 0,5
Х6 -0,1 0,9 1,9
надо создать таблицу , в которой будут показатели по годам и уровни (низкий, средний, высокий). При етом, к примеру, если Х1 < = -0,3 или >=0,1 или =-0,1 то в соответствующей ячейке должна стоять 1, а в остальных 0. Если -0,3<Х1<-0,1, то в ячейках напротив "низкий" и "средний" должно быть значение функции f=1/(1+((a+b)/3)^2), где а это значение показателя з первой таблицы, b - для "низкий" -0,3, для "средний" -0,1 (таблица2). Аналогично для второго диапазона. Должно получиться приблизительно такое (M[i,j,r])

Пок 2006 2007
Н С В Н С В
Х1 0 0 1 0 0 1
Х2 0 0,65 0,45 0 1 0
Х3 0 0 1 0 0 1
Х4 0,2 0,8 0 1 0 0
Х5 0,05 0,95 0 0 1 0
Х6 0,3 0,7 0 1 0 0

для 4 годов.

далее надо умножыть каждый елемент на 1/6 (в программе - массив w[i]) и просуммировать по i (получиться K[j,r]), умножить на g[r]=0,9-1/3*(r-1) и сумма по j (получиться L[j]) . Потом снова классифицируем, но уже по другой формуле (см. программу).
На выходе должна быть таблица виду
Год 2006 2007 2008 2009
R1 1 0 0,32 0
R2 0 0,72 0,68 0
R3 0 0,28 0 1


Я что-то написала, но оно не работает.((((Учила Delphi сама по учебниках с нета, так что не судите стого))))

unit NeLog;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls;

type

private
{ Private declarations }
public
{ Public declarations }
end;

var
i, j, r: integer
P:array[1..6,1..4] of real
V:array[1..6,1..3] of real
M:array[1..6,1..4,1..3] of boolean
W:array[1..6] of real
K:array[1..4,1..3] of real
L:array[1..4] of real
g:array[1..3] of real
implementation

{$R *.DFM}
begin
for i:=1 to 6 do
begin
for j:=1 to 4 do
begin
r:=1
if P[i,j]<=V[i,r] then M[i,j,r+1]:=0 and M[i,j,r+2]:=0
else
if V[i,r]<P[i,j]<V[i,r+1] then M[i,j,r]:=1/(1+((P[i,j]+V[i,r])/3)^2)
and M[i,j,r+1]:= 1/(1+((P[i,j]+V[i,r+1])/3)^2) and M[i,j,r+2]:=0
else
r:=r+1
if P[i,j]=V[i,r] then M[i,j,r-1]:=0 and M[i,j,r+1]:=0
else
if V[i,r]<P[i,j]<V[i,r+1] then M[i,j,r]:=1/(1+((P[i,j]+V[i,r])/3)^2)
and M[i,j,r+1]:= 1/(1+((P[i,j]+V[i,r+1])/3)^2) and M[i,j,r-1]:=0
else
r:=r+1 and M[i,r-2]:=0 and M[i,r-1]:=0 and M[i,r]:=1;
end;
end;
end;
begin
for j:=1 to 4 do
begin
for r:=1 to 3 do
begin
for i:=1 to 6 do
K[j]:=0;
M[i,j,r]:=w[i]*M[i,j,r];
K[j,r]:=K[j,r]+M[i,j,r];
end;
g[r]:=0,9-1/3*(r-1);
L[j]:=L[j]+K[j,r];
end;
end;
begin
for j:=1 to 4 do
begin
i:=1
R[i,j]:=0;
if 0<=L[j]<=0,2
then R[i,j]:='1';
else
if 0,2<L[j]<0,4
then R[i,j]:=-5*L[j]+2 and
R[i+1,j]:=1-R[i,j];
else
if 0,4<=L[j]<=0,6
then R[i+1,j]:='1';
else
if 0,6<L[j]<0,8
then R[i+1,j]:=-5/3*L[j]+4/3 and
R[i+2,j]:=1-tabl.Cells[i+1,j];
else
R[i,j]:='1';
end;
вывод таблицы R (не знаю как красиво вывести)
end.
Marjasja вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi, сравнение массивов, умножение массивов Marjasja Помощь студентам 0 22.05.2011 19:59
Delphi, сравнение массивов, умножение массивов Marjasja Общие вопросы Delphi 0 22.05.2011 19:49
ВЫчитание, умножение и деление массивов на С++ Flood Помощь студентам 2 15.05.2010 16:54
Умножение массивов Паскаль+АСМ xVxSeRGxVx Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 24 21.02.2010 14:11
Корректное сравнение массивов на условии. Alex Cones Общие вопросы Delphi 4 10.01.2010 15:08